diff options
Diffstat (limited to 'drivers')
47 files changed, 263 insertions, 129 deletions
diff --git a/drivers/clk/at91/at91sam9x5.c b/drivers/clk/at91/at91sam9x5.c index 2fe225a697df..3487e03d4bc6 100644 --- a/drivers/clk/at91/at91sam9x5.c +++ b/drivers/clk/at91/at91sam9x5.c | |||
| @@ -144,8 +144,7 @@ static void __init at91sam9x5_pmc_setup(struct device_node *np, | |||
| 144 | return; | 144 | return; |
| 145 | 145 | ||
| 146 | at91sam9x5_pmc = pmc_data_allocate(PMC_MAIN + 1, | 146 | at91sam9x5_pmc = pmc_data_allocate(PMC_MAIN + 1, |
| 147 | nck(at91sam9x5_systemck), | 147 | nck(at91sam9x5_systemck), 31, 0); |
| 148 | nck(at91sam9x35_periphck), 0); | ||
| 149 | if (!at91sam9x5_pmc) | 148 | if (!at91sam9x5_pmc) |
| 150 | return; | 149 | return; |
| 151 | 150 | ||
| @@ -210,7 +209,7 @@ static void __init at91sam9x5_pmc_setup(struct device_node *np, | |||
| 210 | parent_names[1] = "mainck"; | 209 | parent_names[1] = "mainck"; |
| 211 | parent_names[2] = "plladivck"; | 210 | parent_names[2] = "plladivck"; |
| 212 | parent_names[3] = "utmick"; | 211 | parent_names[3] = "utmick"; |
| 213 | parent_names[4] = "mck"; | 212 | parent_names[4] = "masterck"; |
| 214 | for (i = 0; i < 2; i++) { | 213 | for (i = 0; i < 2; i++) { |
| 215 | char name[6]; | 214 | char name[6]; |
| 216 | 215 | ||
diff --git a/drivers/clk/at91/sama5d2.c b/drivers/clk/at91/sama5d2.c index d69ad96fe988..cd0ef7274fdb 100644 --- a/drivers/clk/at91/sama5d2.c +++ b/drivers/clk/at91/sama5d2.c | |||
| @@ -240,7 +240,7 @@ static void __init sama5d2_pmc_setup(struct device_node *np) | |||
| 240 | parent_names[1] = "mainck"; | 240 | parent_names[1] = "mainck"; |
| 241 | parent_names[2] = "plladivck"; | 241 | parent_names[2] = "plladivck"; |
| 242 | parent_names[3] = "utmick"; | 242 | parent_names[3] = "utmick"; |
| 243 | parent_names[4] = "mck"; | 243 | parent_names[4] = "masterck"; |
| 244 | for (i = 0; i < 3; i++) { | 244 | for (i = 0; i < 3; i++) { |
| 245 | char name[6]; | 245 | char name[6]; |
| 246 | 246 | ||
| @@ -291,7 +291,7 @@ static void __init sama5d2_pmc_setup(struct device_node *np) | |||
| 291 | parent_names[1] = "mainck"; | 291 | parent_names[1] = "mainck"; |
| 292 | parent_names[2] = "plladivck"; | 292 | parent_names[2] = "plladivck"; |
| 293 | parent_names[3] = "utmick"; | 293 | parent_names[3] = "utmick"; |
| 294 | parent_names[4] = "mck"; | 294 | parent_names[4] = "masterck"; |
| 295 | parent_names[5] = "audiopll_pmcck"; | 295 | parent_names[5] = "audiopll_pmcck"; |
| 296 | for (i = 0; i < ARRAY_SIZE(sama5d2_gck); i++) { | 296 | for (i = 0; i < ARRAY_SIZE(sama5d2_gck); i++) { |
| 297 | hw = at91_clk_register_generated(regmap, &pmc_pcr_lock, | 297 | hw = at91_clk_register_generated(regmap, &pmc_pcr_lock, |
diff --git a/drivers/clk/at91/sama5d4.c b/drivers/clk/at91/sama5d4.c index e358be7f6c8d..b645a9d59cdb 100644 --- a/drivers/clk/at91/sama5d4.c +++ b/drivers/clk/at91/sama5d4.c | |||
| @@ -207,7 +207,7 @@ static void __init sama5d4_pmc_setup(struct device_node *np) | |||
| 207 | parent_names[1] = "mainck"; | 207 | parent_names[1] = "mainck"; |
| 208 | parent_names[2] = "plladivck"; | 208 | parent_names[2] = "plladivck"; |
| 209 | parent_names[3] = "utmick"; | 209 | parent_names[3] = "utmick"; |
| 210 | parent_names[4] = "mck"; | 210 | parent_names[4] = "masterck"; |
| 211 | for (i = 0; i < 3; i++) { | 211 | for (i = 0; i < 3; i++) { |
| 212 | char name[6]; | 212 | char name[6]; |
| 213 | 213 | ||
diff --git a/drivers/clk/sunxi-ng/ccu-sun6i-a31.c b/drivers/clk/sunxi-ng/ccu-sun6i-a31.c index 3b97f60540ad..609970c0b666 100644 --- a/drivers/clk/sunxi-ng/ccu-sun6i-a31.c +++ b/drivers/clk/sunxi-ng/ccu-sun6i-a31.c | |||
| @@ -264,9 +264,9 @@ static SUNXI_CCU_GATE(ahb1_mmc1_clk, "ahb1-mmc1", "ahb1", | |||
| 264 | static SUNXI_CCU_GATE(ahb1_mmc2_clk, "ahb1-mmc2", "ahb1", | 264 | static SUNXI_CCU_GATE(ahb1_mmc2_clk, "ahb1-mmc2", "ahb1", |
| 265 | 0x060, BIT(10), 0); | 265 | 0x060, BIT(10), 0); |
| 266 | static SUNXI_CCU_GATE(ahb1_mmc3_clk, "ahb1-mmc3", "ahb1", | 266 | static SUNXI_CCU_GATE(ahb1_mmc3_clk, "ahb1-mmc3", "ahb1", |
| 267 | 0x060, BIT(12), 0); | 267 | 0x060, BIT(11), 0); |
| 268 | static SUNXI_CCU_GATE(ahb1_nand1_clk, "ahb1-nand1", "ahb1", | 268 | static SUNXI_CCU_GATE(ahb1_nand1_clk, "ahb1-nand1", "ahb1", |
| 269 | 0x060, BIT(13), 0); | 269 | 0x060, BIT(12), 0); |
| 270 | static SUNXI_CCU_GATE(ahb1_nand0_clk, "ahb1-nand0", "ahb1", | 270 | static SUNXI_CCU_GATE(ahb1_nand0_clk, "ahb1-nand0", "ahb1", |
| 271 | 0x060, BIT(13), 0); | 271 | 0x060, BIT(13), 0); |
| 272 | static SUNXI_CCU_GATE(ahb1_sdram_clk, "ahb1-sdram", "ahb1", | 272 | static SUNXI_CCU_GATE(ahb1_sdram_clk, "ahb1-sdram", "ahb1", |
diff --git a/drivers/clk/sunxi-ng/ccu-sun8i-v3s.c b/drivers/clk/sunxi-ng/ccu-sun8i-v3s.c index 621b1cd996db..ac12f261f8ca 100644 --- a/drivers/clk/sunxi-ng/ccu-sun8i-v3s.c +++ b/drivers/clk/sunxi-ng/ccu-sun8i-v3s.c | |||
| @@ -542,7 +542,7 @@ static struct ccu_reset_map sun8i_v3s_ccu_resets[] = { | |||
| 542 | [RST_BUS_OHCI0] = { 0x2c0, BIT(29) }, | 542 | [RST_BUS_OHCI0] = { 0x2c0, BIT(29) }, |
| 543 | 543 | ||
| 544 | [RST_BUS_VE] = { 0x2c4, BIT(0) }, | 544 | [RST_BUS_VE] = { 0x2c4, BIT(0) }, |
| 545 | [RST_BUS_TCON0] = { 0x2c4, BIT(3) }, | 545 | [RST_BUS_TCON0] = { 0x2c4, BIT(4) }, |
| 546 | [RST_BUS_CSI] = { 0x2c4, BIT(8) }, | 546 | [RST_BUS_CSI] = { 0x2c4, BIT(8) }, |
| 547 | [RST_BUS_DE] = { 0x2c4, BIT(12) }, | 547 | [RST_BUS_DE] = { 0x2c4, BIT(12) }, |
| 548 | [RST_BUS_DBG] = { 0x2c4, BIT(31) }, | 548 | [RST_BUS_DBG] = { 0x2c4, BIT(31) }, |
diff --git a/drivers/gpio/gpio-mt7621.c b/drivers/gpio/gpio-mt7621.c index 00e954f22bc9..74401e0adb29 100644 --- a/drivers/gpio/gpio-mt7621.c +++ b/drivers/gpio/gpio-mt7621.c | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | #define GPIO_REG_EDGE 0xA0 | 30 | #define GPIO_REG_EDGE 0xA0 |
| 31 | 31 | ||
| 32 | struct mtk_gc { | 32 | struct mtk_gc { |
| 33 | struct irq_chip irq_chip; | ||
| 33 | struct gpio_chip chip; | 34 | struct gpio_chip chip; |
| 34 | spinlock_t lock; | 35 | spinlock_t lock; |
| 35 | int bank; | 36 | int bank; |
| @@ -189,13 +190,6 @@ mediatek_gpio_irq_type(struct irq_data *d, unsigned int type) | |||
| 189 | return 0; | 190 | return 0; |
| 190 | } | 191 | } |
| 191 | 192 | ||
| 192 | static struct irq_chip mediatek_gpio_irq_chip = { | ||
| 193 | .irq_unmask = mediatek_gpio_irq_unmask, | ||
| 194 | .irq_mask = mediatek_gpio_irq_mask, | ||
| 195 | .irq_mask_ack = mediatek_gpio_irq_mask, | ||
| 196 | .irq_set_type = mediatek_gpio_irq_type, | ||
| 197 | }; | ||
| 198 | |||
| 199 | static int | 193 | static int |
| 200 | mediatek_gpio_xlate(struct gpio_chip *chip, | 194 | mediatek_gpio_xlate(struct gpio_chip *chip, |
| 201 | const struct of_phandle_args *spec, u32 *flags) | 195 | const struct of_phandle_args *spec, u32 *flags) |
| @@ -254,6 +248,13 @@ mediatek_gpio_bank_probe(struct device *dev, | |||
| 254 | return ret; | 248 | return ret; |
| 255 | } | 249 | } |
| 256 | 250 | ||
| 251 | rg->irq_chip.name = dev_name(dev); | ||
| 252 | rg->irq_chip.parent_device = dev; | ||
| 253 | rg->irq_chip.irq_unmask = mediatek_gpio_irq_unmask; | ||
| 254 | rg->irq_chip.irq_mask = mediatek_gpio_irq_mask; | ||
| 255 | rg->irq_chip.irq_mask_ack = mediatek_gpio_irq_mask; | ||
| 256 | rg->irq_chip.irq_set_type = mediatek_gpio_irq_type; | ||
| 257 | |||
| 257 | if (mtk->gpio_irq) { | 258 | if (mtk->gpio_irq) { |
| 258 | /* | 259 | /* |
| 259 | * Manually request the irq here instead of passing | 260 | * Manually request the irq here instead of passing |
| @@ -270,14 +271,14 @@ mediatek_gpio_bank_probe(struct device *dev, | |||
| 270 | return ret; | 271 | return ret; |
| 271 | } | 272 | } |
| 272 | 273 | ||
| 273 | ret = gpiochip_irqchip_add(&rg->chip, &mediatek_gpio_irq_chip, | 274 | ret = gpiochip_irqchip_add(&rg->chip, &rg->irq_chip, |
| 274 | 0, handle_simple_irq, IRQ_TYPE_NONE); | 275 | 0, handle_simple_irq, IRQ_TYPE_NONE); |
| 275 | if (ret) { | 276 | if (ret) { |
| 276 | dev_err(dev, "failed to add gpiochip_irqchip\n"); | 277 | dev_err(dev, "failed to add gpiochip_irqchip\n"); |
| 277 | return ret; | 278 | return ret; |
| 278 | } | 279 | } |
| 279 | 280 | ||
| 280 | gpiochip_set_chained_irqchip(&rg->chip, &mediatek_gpio_irq_chip, | 281 | gpiochip_set_chained_irqchip(&rg->chip, &rg->irq_chip, |
| 281 | mtk->gpio_irq, NULL); | 282 | mtk->gpio_irq, NULL); |
| 282 | } | 283 | } |
| 283 | 284 | ||
| @@ -310,7 +311,6 @@ mediatek_gpio_probe(struct platform_device *pdev) | |||
| 310 | mtk->gpio_irq = irq_of_parse_and_map(np, 0); | 311 | mtk->gpio_irq = irq_of_parse_and_map(np, 0); |
| 311 | mtk->dev = dev; | 312 | mtk->dev = dev; |
| 312 | platform_set_drvdata(pdev, mtk); | 313 | platform_set_drvdata(pdev, mtk); |
| 313 | mediatek_gpio_irq_chip.name = dev_name(dev); | ||
| 314 | 314 | ||
| 315 | for (i = 0; i < MTK_BANK_CNT; i++) { | 315 | for (i = 0; i < MTK_BANK_CNT; i++) { |
| 316 | ret = mediatek_gpio_bank_probe(dev, np, i); | 316 | ret = mediatek_gpio_bank_probe(dev, np, i); |
diff --git a/drivers/gpio/gpio-pxa.c b/drivers/gpio/gpio-pxa.c index e9600b556f39..bcc6be4a5cb2 100644 --- a/drivers/gpio/gpio-pxa.c +++ b/drivers/gpio/gpio-pxa.c | |||
| @@ -245,6 +245,7 @@ static bool pxa_gpio_has_pinctrl(void) | |||
| 245 | { | 245 | { |
| 246 | switch (gpio_type) { | 246 | switch (gpio_type) { |
| 247 | case PXA3XX_GPIO: | 247 | case PXA3XX_GPIO: |
| 248 | case MMP2_GPIO: | ||
| 248 | return false; | 249 | return false; |
| 249 | 250 | ||
| 250 | default: | 251 | default: |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c index bc62bf41b7e9..5dc349173e4f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | |||
| @@ -212,6 +212,7 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags) | |||
| 212 | } | 212 | } |
| 213 | 213 | ||
| 214 | if (amdgpu_device_is_px(dev)) { | 214 | if (amdgpu_device_is_px(dev)) { |
| 215 | dev_pm_set_driver_flags(dev->dev, DPM_FLAG_NEVER_SKIP); | ||
| 215 | pm_runtime_use_autosuspend(dev->dev); | 216 | pm_runtime_use_autosuspend(dev->dev); |
| 216 | pm_runtime_set_autosuspend_delay(dev->dev, 5000); | 217 | pm_runtime_set_autosuspend_delay(dev->dev, 5000); |
| 217 | pm_runtime_set_active(dev->dev); | 218 | pm_runtime_set_active(dev->dev); |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index 7c108e687683..698bcb8ce61d 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | |||
| @@ -638,12 +638,14 @@ void amdgpu_vm_move_to_lru_tail(struct amdgpu_device *adev, | |||
| 638 | struct ttm_bo_global *glob = adev->mman.bdev.glob; | 638 | struct ttm_bo_global *glob = adev->mman.bdev.glob; |
| 639 | struct amdgpu_vm_bo_base *bo_base; | 639 | struct amdgpu_vm_bo_base *bo_base; |
| 640 | 640 | ||
| 641 | #if 0 | ||
| 641 | if (vm->bulk_moveable) { | 642 | if (vm->bulk_moveable) { |
| 642 | spin_lock(&glob->lru_lock); | 643 | spin_lock(&glob->lru_lock); |
| 643 | ttm_bo_bulk_move_lru_tail(&vm->lru_bulk_move); | 644 | ttm_bo_bulk_move_lru_tail(&vm->lru_bulk_move); |
| 644 | spin_unlock(&glob->lru_lock); | 645 | spin_unlock(&glob->lru_lock); |
| 645 | return; | 646 | return; |
| 646 | } | 647 | } |
| 648 | #endif | ||
| 647 | 649 | ||
| 648 | memset(&vm->lru_bulk_move, 0, sizeof(vm->lru_bulk_move)); | 650 | memset(&vm->lru_bulk_move, 0, sizeof(vm->lru_bulk_move)); |
| 649 | 651 | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c index 6811a5d05b27..aa2f71cc1eba 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | |||
| @@ -128,7 +128,7 @@ static const struct soc15_reg_golden golden_settings_sdma0_4_2_init[] = { | |||
| 128 | 128 | ||
| 129 | static const struct soc15_reg_golden golden_settings_sdma0_4_2[] = | 129 | static const struct soc15_reg_golden golden_settings_sdma0_4_2[] = |
| 130 | { | 130 | { |
| 131 | SOC15_REG_GOLDEN_VALUE(SDMA0, 0, mmSDMA0_CHICKEN_BITS, 0xfe931f07, 0x02831d07), | 131 | SOC15_REG_GOLDEN_VALUE(SDMA0, 0, mmSDMA0_CHICKEN_BITS, 0xfe931f07, 0x02831f07), |
| 132 | SOC15_REG_GOLDEN_VALUE(SDMA0, 0, mmSDMA0_CLK_CTRL, 0xffffffff, 0x3f000100), | 132 | SOC15_REG_GOLDEN_VALUE(SDMA0, 0, mmSDMA0_CLK_CTRL, 0xffffffff, 0x3f000100), |
| 133 | SOC15_REG_GOLDEN_VALUE(SDMA0, 0, mmSDMA0_GB_ADDR_CONFIG, 0x0000773f, 0x00004002), | 133 | SOC15_REG_GOLDEN_VALUE(SDMA0, 0, mmSDMA0_GB_ADDR_CONFIG, 0x0000773f, 0x00004002), |
| 134 | SOC15_REG_GOLDEN_VALUE(SDMA0, 0, mmSDMA0_GB_ADDR_CONFIG_READ, 0x0000773f, 0x00004002), | 134 | SOC15_REG_GOLDEN_VALUE(SDMA0, 0, mmSDMA0_GB_ADDR_CONFIG_READ, 0x0000773f, 0x00004002), |
| @@ -158,7 +158,7 @@ static const struct soc15_reg_golden golden_settings_sdma0_4_2[] = | |||
| 158 | }; | 158 | }; |
| 159 | 159 | ||
| 160 | static const struct soc15_reg_golden golden_settings_sdma1_4_2[] = { | 160 | static const struct soc15_reg_golden golden_settings_sdma1_4_2[] = { |
| 161 | SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_CHICKEN_BITS, 0xfe931f07, 0x02831d07), | 161 | SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_CHICKEN_BITS, 0xfe931f07, 0x02831f07), |
| 162 | SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_CLK_CTRL, 0xffffffff, 0x3f000100), | 162 | SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_CLK_CTRL, 0xffffffff, 0x3f000100), |
| 163 | SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_GB_ADDR_CONFIG, 0x0000773f, 0x00004002), | 163 | SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_GB_ADDR_CONFIG, 0x0000773f, 0x00004002), |
| 164 | SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_GB_ADDR_CONFIG_READ, 0x0000773f, 0x00004002), | 164 | SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_GB_ADDR_CONFIG_READ, 0x0000773f, 0x00004002), |
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 0b392bfca284..5296b8f3e0ab 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | |||
| @@ -786,12 +786,13 @@ static int dm_suspend(void *handle) | |||
| 786 | struct amdgpu_display_manager *dm = &adev->dm; | 786 | struct amdgpu_display_manager *dm = &adev->dm; |
| 787 | int ret = 0; | 787 | int ret = 0; |
| 788 | 788 | ||
| 789 | WARN_ON(adev->dm.cached_state); | ||
| 790 | adev->dm.cached_state = drm_atomic_helper_suspend(adev->ddev); | ||
| 791 | |||
| 789 | s3_handle_mst(adev->ddev, true); | 792 | s3_handle_mst(adev->ddev, true); |
| 790 | 793 | ||
| 791 | amdgpu_dm_irq_suspend(adev); | 794 | amdgpu_dm_irq_suspend(adev); |
| 792 | 795 | ||
| 793 | WARN_ON(adev->dm.cached_state); | ||
| 794 | adev->dm.cached_state = drm_atomic_helper_suspend(adev->ddev); | ||
| 795 | 796 | ||
| 796 | dc_set_power_state(dm->dc, DC_ACPI_CM_POWER_STATE_D3); | 797 | dc_set_power_state(dm->dc, DC_ACPI_CM_POWER_STATE_D3); |
| 797 | 798 | ||
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_clk_mgr.c b/drivers/gpu/drm/amd/display/dc/dce/dce_clk_mgr.c index 19801bdba0d2..7a72ee46f14b 100644 --- a/drivers/gpu/drm/amd/display/dc/dce/dce_clk_mgr.c +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_clk_mgr.c | |||
| @@ -662,6 +662,11 @@ static void dce11_update_clocks(struct clk_mgr *clk_mgr, | |||
| 662 | { | 662 | { |
| 663 | struct dce_clk_mgr *clk_mgr_dce = TO_DCE_CLK_MGR(clk_mgr); | 663 | struct dce_clk_mgr *clk_mgr_dce = TO_DCE_CLK_MGR(clk_mgr); |
| 664 | struct dm_pp_power_level_change_request level_change_req; | 664 | struct dm_pp_power_level_change_request level_change_req; |
| 665 | int patched_disp_clk = context->bw.dce.dispclk_khz; | ||
| 666 | |||
| 667 | /*TODO: W/A for dal3 linux, investigate why this works */ | ||
| 668 | if (!clk_mgr_dce->dfs_bypass_active) | ||
| 669 | patched_disp_clk = patched_disp_clk * 115 / 100; | ||
| 665 | 670 | ||
| 666 | level_change_req.power_level = dce_get_required_clocks_state(clk_mgr, context); | 671 | level_change_req.power_level = dce_get_required_clocks_state(clk_mgr, context); |
| 667 | /* get max clock state from PPLIB */ | 672 | /* get max clock state from PPLIB */ |
| @@ -671,9 +676,9 @@ static void dce11_update_clocks(struct clk_mgr *clk_mgr, | |||
| 671 | clk_mgr_dce->cur_min_clks_state = level_change_req.power_level; | 676 | clk_mgr_dce->cur_min_clks_state = level_change_req.power_level; |
| 672 | } | 677 | } |
| 673 | 678 | ||
| 674 | if (should_set_clock(safe_to_lower, context->bw.dce.dispclk_khz, clk_mgr->clks.dispclk_khz)) { | 679 | if (should_set_clock(safe_to_lower, patched_disp_clk, clk_mgr->clks.dispclk_khz)) { |
| 675 | context->bw.dce.dispclk_khz = dce_set_clock(clk_mgr, context->bw.dce.dispclk_khz); | 680 | context->bw.dce.dispclk_khz = dce_set_clock(clk_mgr, patched_disp_clk); |
| 676 | clk_mgr->clks.dispclk_khz = context->bw.dce.dispclk_khz; | 681 | clk_mgr->clks.dispclk_khz = patched_disp_clk; |
| 677 | } | 682 | } |
| 678 | dce11_pplib_apply_display_requirements(clk_mgr->ctx->dc, context); | 683 | dce11_pplib_apply_display_requirements(clk_mgr->ctx->dc, context); |
| 679 | } | 684 | } |
diff --git a/drivers/gpu/drm/amd/display/dc/dce100/dce100_hw_sequencer.h b/drivers/gpu/drm/amd/display/dc/dce100/dce100_hw_sequencer.h index acd418515346..a6b80fdaa666 100644 --- a/drivers/gpu/drm/amd/display/dc/dce100/dce100_hw_sequencer.h +++ b/drivers/gpu/drm/amd/display/dc/dce100/dce100_hw_sequencer.h | |||
| @@ -37,6 +37,10 @@ void dce100_prepare_bandwidth( | |||
| 37 | struct dc *dc, | 37 | struct dc *dc, |
| 38 | struct dc_state *context); | 38 | struct dc_state *context); |
| 39 | 39 | ||
| 40 | void dce100_optimize_bandwidth( | ||
| 41 | struct dc *dc, | ||
| 42 | struct dc_state *context); | ||
| 43 | |||
| 40 | bool dce100_enable_display_power_gating(struct dc *dc, uint8_t controller_id, | 44 | bool dce100_enable_display_power_gating(struct dc *dc, uint8_t controller_id, |
| 41 | struct dc_bios *dcb, | 45 | struct dc_bios *dcb, |
| 42 | enum pipe_gating_control power_gating); | 46 | enum pipe_gating_control power_gating); |
diff --git a/drivers/gpu/drm/amd/display/dc/dce80/dce80_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dce80/dce80_hw_sequencer.c index a60a90e68d91..c4543178ba20 100644 --- a/drivers/gpu/drm/amd/display/dc/dce80/dce80_hw_sequencer.c +++ b/drivers/gpu/drm/amd/display/dc/dce80/dce80_hw_sequencer.c | |||
| @@ -77,6 +77,6 @@ void dce80_hw_sequencer_construct(struct dc *dc) | |||
| 77 | dc->hwss.enable_display_power_gating = dce100_enable_display_power_gating; | 77 | dc->hwss.enable_display_power_gating = dce100_enable_display_power_gating; |
| 78 | dc->hwss.pipe_control_lock = dce_pipe_control_lock; | 78 | dc->hwss.pipe_control_lock = dce_pipe_control_lock; |
| 79 | dc->hwss.prepare_bandwidth = dce100_prepare_bandwidth; | 79 | dc->hwss.prepare_bandwidth = dce100_prepare_bandwidth; |
| 80 | dc->hwss.optimize_bandwidth = dce100_prepare_bandwidth; | 80 | dc->hwss.optimize_bandwidth = dce100_optimize_bandwidth; |
| 81 | } | 81 | } |
| 82 | 82 | ||
diff --git a/drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c b/drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c index cdd1d6b7b9f2..4e9ea50141bd 100644 --- a/drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c | |||
| @@ -790,9 +790,22 @@ bool dce80_validate_bandwidth( | |||
| 790 | struct dc *dc, | 790 | struct dc *dc, |
| 791 | struct dc_state *context) | 791 | struct dc_state *context) |
| 792 | { | 792 | { |
| 793 | /* TODO implement when needed but for now hardcode max value*/ | 793 | int i; |
| 794 | context->bw.dce.dispclk_khz = 681000; | 794 | bool at_least_one_pipe = false; |
| 795 | context->bw.dce.yclk_khz = 250000 * MEMORY_TYPE_MULTIPLIER_CZ; | 795 | |
| 796 | for (i = 0; i < dc->res_pool->pipe_count; i++) { | ||
| 797 | if (context->res_ctx.pipe_ctx[i].stream) | ||
| 798 | at_least_one_pipe = true; | ||
| 799 | } | ||
| 800 | |||
| 801 | if (at_least_one_pipe) { | ||
| 802 | /* TODO implement when needed but for now hardcode max value*/ | ||
| 803 | context->bw.dce.dispclk_khz = 681000; | ||
| 804 | context->bw.dce.yclk_khz = 250000 * MEMORY_TYPE_MULTIPLIER_CZ; | ||
| 805 | } else { | ||
| 806 | context->bw.dce.dispclk_khz = 0; | ||
| 807 | context->bw.dce.yclk_khz = 0; | ||
| 808 | } | ||
| 796 | 809 | ||
| 797 | return true; | 810 | return true; |
| 798 | } | 811 | } |
diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c index 58a12ddf12f3..41883c981789 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | |||
| @@ -2658,8 +2658,8 @@ static void dcn10_set_cursor_position(struct pipe_ctx *pipe_ctx) | |||
| 2658 | .mirror = pipe_ctx->plane_state->horizontal_mirror | 2658 | .mirror = pipe_ctx->plane_state->horizontal_mirror |
| 2659 | }; | 2659 | }; |
| 2660 | 2660 | ||
| 2661 | pos_cpy.x -= pipe_ctx->plane_state->dst_rect.x; | 2661 | pos_cpy.x_hotspot += pipe_ctx->plane_state->dst_rect.x; |
| 2662 | pos_cpy.y -= pipe_ctx->plane_state->dst_rect.y; | 2662 | pos_cpy.y_hotspot += pipe_ctx->plane_state->dst_rect.y; |
| 2663 | 2663 | ||
| 2664 | if (pipe_ctx->plane_state->address.type | 2664 | if (pipe_ctx->plane_state->address.type |
| 2665 | == PLN_ADDR_TYPE_VIDEO_PROGRESSIVE) | 2665 | == PLN_ADDR_TYPE_VIDEO_PROGRESSIVE) |
diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c index 7f365ac0b549..4ee16b264dbe 100644 --- a/drivers/gpu/drm/i915/intel_fbdev.c +++ b/drivers/gpu/drm/i915/intel_fbdev.c | |||
| @@ -336,8 +336,8 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper, | |||
| 336 | bool *enabled, int width, int height) | 336 | bool *enabled, int width, int height) |
| 337 | { | 337 | { |
| 338 | struct drm_i915_private *dev_priv = to_i915(fb_helper->dev); | 338 | struct drm_i915_private *dev_priv = to_i915(fb_helper->dev); |
| 339 | unsigned long conn_configured, conn_seq, mask; | ||
| 340 | unsigned int count = min(fb_helper->connector_count, BITS_PER_LONG); | 339 | unsigned int count = min(fb_helper->connector_count, BITS_PER_LONG); |
| 340 | unsigned long conn_configured, conn_seq; | ||
| 341 | int i, j; | 341 | int i, j; |
| 342 | bool *save_enabled; | 342 | bool *save_enabled; |
| 343 | bool fallback = true, ret = true; | 343 | bool fallback = true, ret = true; |
| @@ -355,10 +355,9 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper, | |||
| 355 | drm_modeset_backoff(&ctx); | 355 | drm_modeset_backoff(&ctx); |
| 356 | 356 | ||
| 357 | memcpy(save_enabled, enabled, count); | 357 | memcpy(save_enabled, enabled, count); |
| 358 | mask = GENMASK(count - 1, 0); | 358 | conn_seq = GENMASK(count - 1, 0); |
| 359 | conn_configured = 0; | 359 | conn_configured = 0; |
| 360 | retry: | 360 | retry: |
| 361 | conn_seq = conn_configured; | ||
| 362 | for (i = 0; i < count; i++) { | 361 | for (i = 0; i < count; i++) { |
| 363 | struct drm_fb_helper_connector *fb_conn; | 362 | struct drm_fb_helper_connector *fb_conn; |
| 364 | struct drm_connector *connector; | 363 | struct drm_connector *connector; |
| @@ -371,7 +370,8 @@ retry: | |||
| 371 | if (conn_configured & BIT(i)) | 370 | if (conn_configured & BIT(i)) |
| 372 | continue; | 371 | continue; |
| 373 | 372 | ||
| 374 | if (conn_seq == 0 && !connector->has_tile) | 373 | /* First pass, only consider tiled connectors */ |
| 374 | if (conn_seq == GENMASK(count - 1, 0) && !connector->has_tile) | ||
| 375 | continue; | 375 | continue; |
| 376 | 376 | ||
| 377 | if (connector->status == connector_status_connected) | 377 | if (connector->status == connector_status_connected) |
| @@ -475,8 +475,10 @@ retry: | |||
| 475 | conn_configured |= BIT(i); | 475 | conn_configured |= BIT(i); |
| 476 | } | 476 | } |
| 477 | 477 | ||
| 478 | if ((conn_configured & mask) != mask && conn_configured != conn_seq) | 478 | if (conn_configured != conn_seq) { /* repeat until no more are found */ |
| 479 | conn_seq = conn_configured; | ||
| 479 | goto retry; | 480 | goto retry; |
| 481 | } | ||
| 480 | 482 | ||
| 481 | /* | 483 | /* |
| 482 | * If the BIOS didn't enable everything it could, fall back to have the | 484 | * If the BIOS didn't enable everything it could, fall back to have the |
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c index dec1e081f529..6a8fb6fd183c 100644 --- a/drivers/gpu/drm/radeon/radeon_kms.c +++ b/drivers/gpu/drm/radeon/radeon_kms.c | |||
| @@ -172,6 +172,7 @@ int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags) | |||
| 172 | } | 172 | } |
| 173 | 173 | ||
| 174 | if (radeon_is_px(dev)) { | 174 | if (radeon_is_px(dev)) { |
| 175 | dev_pm_set_driver_flags(dev->dev, DPM_FLAG_NEVER_SKIP); | ||
| 175 | pm_runtime_use_autosuspend(dev->dev); | 176 | pm_runtime_use_autosuspend(dev->dev); |
| 176 | pm_runtime_set_autosuspend_delay(dev->dev, 5000); | 177 | pm_runtime_set_autosuspend_delay(dev->dev, 5000); |
| 177 | pm_runtime_set_active(dev->dev); | 178 | pm_runtime_set_active(dev->dev); |
diff --git a/drivers/infiniband/hw/cxgb4/device.c b/drivers/infiniband/hw/cxgb4/device.c index c13c0ba30f63..d499cd61c0e8 100644 --- a/drivers/infiniband/hw/cxgb4/device.c +++ b/drivers/infiniband/hw/cxgb4/device.c | |||
| @@ -783,6 +783,7 @@ void c4iw_init_dev_ucontext(struct c4iw_rdev *rdev, | |||
| 783 | static int c4iw_rdev_open(struct c4iw_rdev *rdev) | 783 | static int c4iw_rdev_open(struct c4iw_rdev *rdev) |
| 784 | { | 784 | { |
| 785 | int err; | 785 | int err; |
| 786 | unsigned int factor; | ||
| 786 | 787 | ||
| 787 | c4iw_init_dev_ucontext(rdev, &rdev->uctx); | 788 | c4iw_init_dev_ucontext(rdev, &rdev->uctx); |
| 788 | 789 | ||
| @@ -806,8 +807,18 @@ static int c4iw_rdev_open(struct c4iw_rdev *rdev) | |||
| 806 | return -EINVAL; | 807 | return -EINVAL; |
| 807 | } | 808 | } |
| 808 | 809 | ||
| 809 | rdev->qpmask = rdev->lldi.udb_density - 1; | 810 | /* This implementation requires a sge_host_page_size <= PAGE_SIZE. */ |
| 810 | rdev->cqmask = rdev->lldi.ucq_density - 1; | 811 | if (rdev->lldi.sge_host_page_size > PAGE_SIZE) { |
| 812 | pr_err("%s: unsupported sge host page size %u\n", | ||
| 813 | pci_name(rdev->lldi.pdev), | ||
| 814 | rdev->lldi.sge_host_page_size); | ||
| 815 | return -EINVAL; | ||
| 816 | } | ||
| 817 | |||
| 818 | factor = PAGE_SIZE / rdev->lldi.sge_host_page_size; | ||
| 819 | rdev->qpmask = (rdev->lldi.udb_density * factor) - 1; | ||
| 820 | rdev->cqmask = (rdev->lldi.ucq_density * factor) - 1; | ||
| 821 | |||
| 811 | pr_debug("dev %s stag start 0x%0x size 0x%0x num stags %d pbl start 0x%0x size 0x%0x rq start 0x%0x size 0x%0x qp qid start %u size %u cq qid start %u size %u srq size %u\n", | 822 | pr_debug("dev %s stag start 0x%0x size 0x%0x num stags %d pbl start 0x%0x size 0x%0x rq start 0x%0x size 0x%0x qp qid start %u size %u cq qid start %u size %u srq size %u\n", |
| 812 | pci_name(rdev->lldi.pdev), rdev->lldi.vr->stag.start, | 823 | pci_name(rdev->lldi.pdev), rdev->lldi.vr->stag.start, |
| 813 | rdev->lldi.vr->stag.size, c4iw_num_stags(rdev), | 824 | rdev->lldi.vr->stag.size, c4iw_num_stags(rdev), |
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c index 31d91538bbf4..694324b37480 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.c +++ b/drivers/infiniband/ulp/srp/ib_srp.c | |||
| @@ -3032,7 +3032,6 @@ static int srp_reset_device(struct scsi_cmnd *scmnd) | |||
| 3032 | { | 3032 | { |
| 3033 | struct srp_target_port *target = host_to_target(scmnd->device->host); | 3033 | struct srp_target_port *target = host_to_target(scmnd->device->host); |
| 3034 | struct srp_rdma_ch *ch; | 3034 | struct srp_rdma_ch *ch; |
| 3035 | int i, j; | ||
| 3036 | u8 status; | 3035 | u8 status; |
| 3037 | 3036 | ||
| 3038 | shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n"); | 3037 | shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n"); |
| @@ -3044,15 +3043,6 @@ static int srp_reset_device(struct scsi_cmnd *scmnd) | |||
| 3044 | if (status) | 3043 | if (status) |
| 3045 | return FAILED; | 3044 | return FAILED; |
| 3046 | 3045 | ||
| 3047 | for (i = 0; i < target->ch_count; i++) { | ||
| 3048 | ch = &target->ch[i]; | ||
| 3049 | for (j = 0; j < target->req_ring_size; ++j) { | ||
| 3050 | struct srp_request *req = &ch->req_ring[j]; | ||
| 3051 | |||
| 3052 | srp_finish_req(ch, req, scmnd->device, DID_RESET << 16); | ||
| 3053 | } | ||
| 3054 | } | ||
| 3055 | |||
| 3056 | return SUCCESS; | 3046 | return SUCCESS; |
| 3057 | } | 3047 | } |
| 3058 | 3048 | ||
diff --git a/drivers/mailbox/bcm-flexrm-mailbox.c b/drivers/mailbox/bcm-flexrm-mailbox.c index d713271ebf7c..a64116586b4c 100644 --- a/drivers/mailbox/bcm-flexrm-mailbox.c +++ b/drivers/mailbox/bcm-flexrm-mailbox.c | |||
| @@ -1396,9 +1396,9 @@ static void flexrm_shutdown(struct mbox_chan *chan) | |||
| 1396 | 1396 | ||
| 1397 | /* Clear ring flush state */ | 1397 | /* Clear ring flush state */ |
| 1398 | timeout = 1000; /* timeout of 1s */ | 1398 | timeout = 1000; /* timeout of 1s */ |
| 1399 | writel_relaxed(0x0, ring + RING_CONTROL); | 1399 | writel_relaxed(0x0, ring->regs + RING_CONTROL); |
| 1400 | do { | 1400 | do { |
| 1401 | if (!(readl_relaxed(ring + RING_FLUSH_DONE) & | 1401 | if (!(readl_relaxed(ring->regs + RING_FLUSH_DONE) & |
| 1402 | FLUSH_DONE_MASK)) | 1402 | FLUSH_DONE_MASK)) |
| 1403 | break; | 1403 | break; |
| 1404 | mdelay(1); | 1404 | mdelay(1); |
diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c index c6a7d4582dc6..38d9df3fb199 100644 --- a/drivers/mailbox/mailbox.c +++ b/drivers/mailbox/mailbox.c | |||
| @@ -310,6 +310,7 @@ int mbox_flush(struct mbox_chan *chan, unsigned long timeout) | |||
| 310 | 310 | ||
| 311 | return ret; | 311 | return ret; |
| 312 | } | 312 | } |
| 313 | EXPORT_SYMBOL_GPL(mbox_flush); | ||
| 313 | 314 | ||
| 314 | /** | 315 | /** |
| 315 | * mbox_request_channel - Request a mailbox channel. | 316 | * mbox_request_channel - Request a mailbox channel. |
diff --git a/drivers/mtd/devices/powernv_flash.c b/drivers/mtd/devices/powernv_flash.c index 22f753e555ac..83f88b8b5d9f 100644 --- a/drivers/mtd/devices/powernv_flash.c +++ b/drivers/mtd/devices/powernv_flash.c | |||
| @@ -212,7 +212,7 @@ static int powernv_flash_set_driver_info(struct device *dev, | |||
| 212 | * Going to have to check what details I need to set and how to | 212 | * Going to have to check what details I need to set and how to |
| 213 | * get them | 213 | * get them |
| 214 | */ | 214 | */ |
| 215 | mtd->name = devm_kasprintf(dev, GFP_KERNEL, "%pOFn", dev->of_node); | 215 | mtd->name = devm_kasprintf(dev, GFP_KERNEL, "%pOFP", dev->of_node); |
| 216 | mtd->type = MTD_NORFLASH; | 216 | mtd->type = MTD_NORFLASH; |
| 217 | mtd->flags = MTD_WRITEABLE; | 217 | mtd->flags = MTD_WRITEABLE; |
| 218 | mtd->size = size; | 218 | mtd->size = size; |
diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c index 999b705769a8..3ef01baef9b6 100644 --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c | |||
| @@ -507,6 +507,7 @@ static int mtd_nvmem_add(struct mtd_info *mtd) | |||
| 507 | { | 507 | { |
| 508 | struct nvmem_config config = {}; | 508 | struct nvmem_config config = {}; |
| 509 | 509 | ||
| 510 | config.id = -1; | ||
| 510 | config.dev = &mtd->dev; | 511 | config.dev = &mtd->dev; |
| 511 | config.name = mtd->name; | 512 | config.name = mtd->name; |
| 512 | config.owner = THIS_MODULE; | 513 | config.owner = THIS_MODULE; |
diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c index 0e4bbdcc614f..c76892ac4e69 100644 --- a/drivers/net/dsa/b53/b53_common.c +++ b/drivers/net/dsa/b53/b53_common.c | |||
| @@ -344,7 +344,8 @@ static void b53_set_forwarding(struct b53_device *dev, int enable) | |||
| 344 | b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_CTRL, mgmt); | 344 | b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_CTRL, mgmt); |
| 345 | } | 345 | } |
| 346 | 346 | ||
| 347 | static void b53_enable_vlan(struct b53_device *dev, bool enable) | 347 | static void b53_enable_vlan(struct b53_device *dev, bool enable, |
| 348 | bool enable_filtering) | ||
| 348 | { | 349 | { |
| 349 | u8 mgmt, vc0, vc1, vc4 = 0, vc5; | 350 | u8 mgmt, vc0, vc1, vc4 = 0, vc5; |
| 350 | 351 | ||
| @@ -369,8 +370,13 @@ static void b53_enable_vlan(struct b53_device *dev, bool enable) | |||
| 369 | vc0 |= VC0_VLAN_EN | VC0_VID_CHK_EN | VC0_VID_HASH_VID; | 370 | vc0 |= VC0_VLAN_EN | VC0_VID_CHK_EN | VC0_VID_HASH_VID; |
| 370 | vc1 |= VC1_RX_MCST_UNTAG_EN | VC1_RX_MCST_FWD_EN; | 371 | vc1 |= VC1_RX_MCST_UNTAG_EN | VC1_RX_MCST_FWD_EN; |
| 371 | vc4 &= ~VC4_ING_VID_CHECK_MASK; | 372 | vc4 &= ~VC4_ING_VID_CHECK_MASK; |
| 372 | vc4 |= VC4_ING_VID_VIO_DROP << VC4_ING_VID_CHECK_S; | 373 | if (enable_filtering) { |
| 373 | vc5 |= VC5_DROP_VTABLE_MISS; | 374 | vc4 |= VC4_ING_VID_VIO_DROP << VC4_ING_VID_CHECK_S; |
| 375 | vc5 |= VC5_DROP_VTABLE_MISS; | ||
| 376 | } else { | ||
| 377 | vc4 |= VC4_ING_VID_VIO_FWD << VC4_ING_VID_CHECK_S; | ||
| 378 | vc5 &= ~VC5_DROP_VTABLE_MISS; | ||
| 379 | } | ||
| 374 | 380 | ||
| 375 | if (is5325(dev)) | 381 | if (is5325(dev)) |
| 376 | vc0 &= ~VC0_RESERVED_1; | 382 | vc0 &= ~VC0_RESERVED_1; |
| @@ -420,6 +426,9 @@ static void b53_enable_vlan(struct b53_device *dev, bool enable) | |||
| 420 | } | 426 | } |
| 421 | 427 | ||
| 422 | b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_MODE, mgmt); | 428 | b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_MODE, mgmt); |
| 429 | |||
| 430 | dev->vlan_enabled = enable; | ||
| 431 | dev->vlan_filtering_enabled = enable_filtering; | ||
| 423 | } | 432 | } |
| 424 | 433 | ||
| 425 | static int b53_set_jumbo(struct b53_device *dev, bool enable, bool allow_10_100) | 434 | static int b53_set_jumbo(struct b53_device *dev, bool enable, bool allow_10_100) |
| @@ -632,25 +641,35 @@ static void b53_enable_mib(struct b53_device *dev) | |||
| 632 | b53_write8(dev, B53_MGMT_PAGE, B53_GLOBAL_CONFIG, gc); | 641 | b53_write8(dev, B53_MGMT_PAGE, B53_GLOBAL_CONFIG, gc); |
| 633 | } | 642 | } |
| 634 | 643 | ||
| 644 | static u16 b53_default_pvid(struct b53_device *dev) | ||
| 645 | { | ||
| 646 | if (is5325(dev) || is5365(dev)) | ||
| 647 | return 1; | ||
| 648 | else | ||
| 649 | return 0; | ||
| 650 | } | ||
| 651 | |||
| 635 | int b53_configure_vlan(struct dsa_switch *ds) | 652 | int b53_configure_vlan(struct dsa_switch *ds) |
| 636 | { | 653 | { |
| 637 | struct b53_device *dev = ds->priv; | 654 | struct b53_device *dev = ds->priv; |
| 638 | struct b53_vlan vl = { 0 }; | 655 | struct b53_vlan vl = { 0 }; |
| 639 | int i; | 656 | int i, def_vid; |
| 657 | |||
| 658 | def_vid = b53_default_pvid(dev); | ||
| 640 | 659 | ||
| 641 | /* clear all vlan entries */ | 660 | /* clear all vlan entries */ |
| 642 | if (is5325(dev) || is5365(dev)) { | 661 | if (is5325(dev) || is5365(dev)) { |
| 643 | for (i = 1; i < dev->num_vlans; i++) | 662 | for (i = def_vid; i < dev->num_vlans; i++) |
| 644 | b53_set_vlan_entry(dev, i, &vl); | 663 | b53_set_vlan_entry(dev, i, &vl); |
| 645 | } else { | 664 | } else { |
| 646 | b53_do_vlan_op(dev, VTA_CMD_CLEAR); | 665 | b53_do_vlan_op(dev, VTA_CMD_CLEAR); |
| 647 | } | 666 | } |
| 648 | 667 | ||
| 649 | b53_enable_vlan(dev, false); | 668 | b53_enable_vlan(dev, false, dev->vlan_filtering_enabled); |
| 650 | 669 | ||
| 651 | b53_for_each_port(dev, i) | 670 | b53_for_each_port(dev, i) |
| 652 | b53_write16(dev, B53_VLAN_PAGE, | 671 | b53_write16(dev, B53_VLAN_PAGE, |
| 653 | B53_VLAN_PORT_DEF_TAG(i), 1); | 672 | B53_VLAN_PORT_DEF_TAG(i), def_vid); |
| 654 | 673 | ||
| 655 | if (!is5325(dev) && !is5365(dev)) | 674 | if (!is5325(dev) && !is5365(dev)) |
| 656 | b53_set_jumbo(dev, dev->enable_jumbo, false); | 675 | b53_set_jumbo(dev, dev->enable_jumbo, false); |
| @@ -1255,6 +1274,46 @@ EXPORT_SYMBOL(b53_phylink_mac_link_up); | |||
| 1255 | 1274 | ||
| 1256 | int b53_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering) | 1275 | int b53_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering) |
| 1257 | { | 1276 | { |
| 1277 | struct b53_device *dev = ds->priv; | ||
| 1278 | struct net_device *bridge_dev; | ||
| 1279 | unsigned int i; | ||
| 1280 | u16 pvid, new_pvid; | ||
| 1281 | |||
| 1282 | /* Handle the case were multiple bridges span the same switch device | ||
| 1283 | * and one of them has a different setting than what is being requested | ||
| 1284 | * which would be breaking filtering semantics for any of the other | ||
| 1285 | * bridge devices. | ||
| 1286 | */ | ||
| 1287 | b53_for_each_port(dev, i) { | ||
| 1288 | bridge_dev = dsa_to_port(ds, i)->bridge_dev; | ||
| 1289 | if (bridge_dev && | ||
| 1290 | bridge_dev != dsa_to_port(ds, port)->bridge_dev && | ||
| 1291 | br_vlan_enabled(bridge_dev) != vlan_filtering) { | ||
| 1292 | netdev_err(bridge_dev, | ||
| 1293 | "VLAN filtering is global to the switch!\n"); | ||
| 1294 | return -EINVAL; | ||
| 1295 | } | ||
| 1296 | } | ||
| 1297 | |||
| 1298 | b53_read16(dev, B53_VLAN_PAGE, B53_VLAN_PORT_DEF_TAG(port), &pvid); | ||
| 1299 | new_pvid = pvid; | ||
| 1300 | if (dev->vlan_filtering_enabled && !vlan_filtering) { | ||
| 1301 | /* Filtering is currently enabled, use the default PVID since | ||
| 1302 | * the bridge does not expect tagging anymore | ||
| 1303 | */ | ||
| 1304 | dev->ports[port].pvid = pvid; | ||
| 1305 | new_pvid = b53_default_pvid(dev); | ||
| 1306 | } else if (!dev->vlan_filtering_enabled && vlan_filtering) { | ||
| 1307 | /* Filtering is currently disabled, restore the previous PVID */ | ||
| 1308 | new_pvid = dev->ports[port].pvid; | ||
| 1309 | } | ||
| 1310 | |||
| 1311 | if (pvid != new_pvid) | ||
| 1312 | b53_write16(dev, B53_VLAN_PAGE, B53_VLAN_PORT_DEF_TAG(port), | ||
| 1313 | new_pvid); | ||
| 1314 | |||
| 1315 | b53_enable_vlan(dev, dev->vlan_enabled, vlan_filtering); | ||
| 1316 | |||
| 1258 | return 0; | 1317 | return 0; |
| 1259 | } | 1318 | } |
| 1260 | EXPORT_SYMBOL(b53_vlan_filtering); | 1319 | EXPORT_SYMBOL(b53_vlan_filtering); |
| @@ -1270,7 +1329,7 @@ int b53_vlan_prepare(struct dsa_switch *ds, int port, | |||
| 1270 | if (vlan->vid_end > dev->num_vlans) | 1329 | if (vlan->vid_end > dev->num_vlans) |
| 1271 | return -ERANGE; | 1330 | return -ERANGE; |
| 1272 | 1331 | ||
| 1273 | b53_enable_vlan(dev, true); | 1332 | b53_enable_vlan(dev, true, dev->vlan_filtering_enabled); |
| 1274 | 1333 | ||
| 1275 | return 0; | 1334 | return 0; |
| 1276 | } | 1335 | } |
| @@ -1300,7 +1359,7 @@ void b53_vlan_add(struct dsa_switch *ds, int port, | |||
| 1300 | b53_fast_age_vlan(dev, vid); | 1359 | b53_fast_age_vlan(dev, vid); |
| 1301 | } | 1360 | } |
| 1302 | 1361 | ||
| 1303 | if (pvid) { | 1362 | if (pvid && !dsa_is_cpu_port(ds, port)) { |
| 1304 | b53_write16(dev, B53_VLAN_PAGE, B53_VLAN_PORT_DEF_TAG(port), | 1363 | b53_write16(dev, B53_VLAN_PAGE, B53_VLAN_PORT_DEF_TAG(port), |
| 1305 | vlan->vid_end); | 1364 | vlan->vid_end); |
| 1306 | b53_fast_age_vlan(dev, vid); | 1365 | b53_fast_age_vlan(dev, vid); |
| @@ -1326,12 +1385,8 @@ int b53_vlan_del(struct dsa_switch *ds, int port, | |||
| 1326 | 1385 | ||
| 1327 | vl->members &= ~BIT(port); | 1386 | vl->members &= ~BIT(port); |
| 1328 | 1387 | ||
| 1329 | if (pvid == vid) { | 1388 | if (pvid == vid) |
| 1330 | if (is5325(dev) || is5365(dev)) | 1389 | pvid = b53_default_pvid(dev); |
| 1331 | pvid = 1; | ||
| 1332 | else | ||
| 1333 | pvid = 0; | ||
| 1334 | } | ||
| 1335 | 1390 | ||
| 1336 | if (untagged && !dsa_is_cpu_port(ds, port)) | 1391 | if (untagged && !dsa_is_cpu_port(ds, port)) |
| 1337 | vl->untag &= ~(BIT(port)); | 1392 | vl->untag &= ~(BIT(port)); |
| @@ -1644,10 +1699,7 @@ void b53_br_leave(struct dsa_switch *ds, int port, struct net_device *br) | |||
| 1644 | b53_write16(dev, B53_PVLAN_PAGE, B53_PVLAN_PORT_MASK(port), pvlan); | 1699 | b53_write16(dev, B53_PVLAN_PAGE, B53_PVLAN_PORT_MASK(port), pvlan); |
| 1645 | dev->ports[port].vlan_ctl_mask = pvlan; | 1700 | dev->ports[port].vlan_ctl_mask = pvlan; |
| 1646 | 1701 | ||
| 1647 | if (is5325(dev) || is5365(dev)) | 1702 | pvid = b53_default_pvid(dev); |
| 1648 | pvid = 1; | ||
| 1649 | else | ||
| 1650 | pvid = 0; | ||
| 1651 | 1703 | ||
| 1652 | /* Make this port join all VLANs without VLAN entries */ | 1704 | /* Make this port join all VLANs without VLAN entries */ |
| 1653 | if (is58xx(dev)) { | 1705 | if (is58xx(dev)) { |
diff --git a/drivers/net/dsa/b53/b53_priv.h b/drivers/net/dsa/b53/b53_priv.h index ec796482792d..4dc7ee38b258 100644 --- a/drivers/net/dsa/b53/b53_priv.h +++ b/drivers/net/dsa/b53/b53_priv.h | |||
| @@ -91,6 +91,7 @@ enum { | |||
| 91 | struct b53_port { | 91 | struct b53_port { |
| 92 | u16 vlan_ctl_mask; | 92 | u16 vlan_ctl_mask; |
| 93 | struct ethtool_eee eee; | 93 | struct ethtool_eee eee; |
| 94 | u16 pvid; | ||
| 94 | }; | 95 | }; |
| 95 | 96 | ||
| 96 | struct b53_vlan { | 97 | struct b53_vlan { |
| @@ -137,6 +138,8 @@ struct b53_device { | |||
| 137 | 138 | ||
| 138 | unsigned int num_vlans; | 139 | unsigned int num_vlans; |
| 139 | struct b53_vlan *vlans; | 140 | struct b53_vlan *vlans; |
| 141 | bool vlan_enabled; | ||
| 142 | bool vlan_filtering_enabled; | ||
| 140 | unsigned int num_ports; | 143 | unsigned int num_ports; |
| 141 | struct b53_port *ports; | 144 | struct b53_port *ports; |
| 142 | }; | 145 | }; |
diff --git a/drivers/net/dsa/bcm_sf2.c b/drivers/net/dsa/bcm_sf2.c index 17ec32b0a1cc..14138d423cf1 100644 --- a/drivers/net/dsa/bcm_sf2.c +++ b/drivers/net/dsa/bcm_sf2.c | |||
| @@ -726,10 +726,11 @@ static void bcm_sf2_sw_get_wol(struct dsa_switch *ds, int port, | |||
| 726 | { | 726 | { |
| 727 | struct net_device *p = ds->ports[port].cpu_dp->master; | 727 | struct net_device *p = ds->ports[port].cpu_dp->master; |
| 728 | struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds); | 728 | struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds); |
| 729 | struct ethtool_wolinfo pwol; | 729 | struct ethtool_wolinfo pwol = { }; |
| 730 | 730 | ||
| 731 | /* Get the parent device WoL settings */ | 731 | /* Get the parent device WoL settings */ |
| 732 | p->ethtool_ops->get_wol(p, &pwol); | 732 | if (p->ethtool_ops->get_wol) |
| 733 | p->ethtool_ops->get_wol(p, &pwol); | ||
| 733 | 734 | ||
| 734 | /* Advertise the parent device supported settings */ | 735 | /* Advertise the parent device supported settings */ |
| 735 | wol->supported = pwol.supported; | 736 | wol->supported = pwol.supported; |
| @@ -750,9 +751,10 @@ static int bcm_sf2_sw_set_wol(struct dsa_switch *ds, int port, | |||
| 750 | struct net_device *p = ds->ports[port].cpu_dp->master; | 751 | struct net_device *p = ds->ports[port].cpu_dp->master; |
| 751 | struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds); | 752 | struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds); |
| 752 | s8 cpu_port = ds->ports[port].cpu_dp->index; | 753 | s8 cpu_port = ds->ports[port].cpu_dp->index; |
| 753 | struct ethtool_wolinfo pwol; | 754 | struct ethtool_wolinfo pwol = { }; |
| 754 | 755 | ||
| 755 | p->ethtool_ops->get_wol(p, &pwol); | 756 | if (p->ethtool_ops->get_wol) |
| 757 | p->ethtool_ops->get_wol(p, &pwol); | ||
| 756 | if (wol->wolopts & ~pwol.supported) | 758 | if (wol->wolopts & ~pwol.supported) |
| 757 | return -EINVAL; | 759 | return -EINVAL; |
| 758 | 760 | ||
diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c index 28c9b0bdf2f6..bc3ac369cbe3 100644 --- a/drivers/net/ethernet/broadcom/bcmsysport.c +++ b/drivers/net/ethernet/broadcom/bcmsysport.c | |||
| @@ -134,6 +134,10 @@ static void bcm_sysport_set_rx_csum(struct net_device *dev, | |||
| 134 | 134 | ||
| 135 | priv->rx_chk_en = !!(wanted & NETIF_F_RXCSUM); | 135 | priv->rx_chk_en = !!(wanted & NETIF_F_RXCSUM); |
| 136 | reg = rxchk_readl(priv, RXCHK_CONTROL); | 136 | reg = rxchk_readl(priv, RXCHK_CONTROL); |
| 137 | /* Clear L2 header checks, which would prevent BPDUs | ||
| 138 | * from being received. | ||
| 139 | */ | ||
| 140 | reg &= ~RXCHK_L2_HDR_DIS; | ||
| 137 | if (priv->rx_chk_en) | 141 | if (priv->rx_chk_en) |
| 138 | reg |= RXCHK_EN; | 142 | reg |= RXCHK_EN; |
| 139 | else | 143 | else |
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c index c041f44324db..b3654598a2d5 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c | |||
| @@ -660,6 +660,7 @@ static void uld_init(struct adapter *adap, struct cxgb4_lld_info *lld) | |||
| 660 | lld->cclk_ps = 1000000000 / adap->params.vpd.cclk; | 660 | lld->cclk_ps = 1000000000 / adap->params.vpd.cclk; |
| 661 | lld->udb_density = 1 << adap->params.sge.eq_qpp; | 661 | lld->udb_density = 1 << adap->params.sge.eq_qpp; |
| 662 | lld->ucq_density = 1 << adap->params.sge.iq_qpp; | 662 | lld->ucq_density = 1 << adap->params.sge.iq_qpp; |
| 663 | lld->sge_host_page_size = 1 << (adap->params.sge.hps + 10); | ||
| 663 | lld->filt_mode = adap->params.tp.vlan_pri_map; | 664 | lld->filt_mode = adap->params.tp.vlan_pri_map; |
| 664 | /* MODQ_REQ_MAP sets queues 0-3 to chan 0-3 */ | 665 | /* MODQ_REQ_MAP sets queues 0-3 to chan 0-3 */ |
| 665 | for (i = 0; i < NCHAN; i++) | 666 | for (i = 0; i < NCHAN; i++) |
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h index 5fa9a2d5fc4b..21da34a4ca24 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h | |||
| @@ -336,6 +336,7 @@ struct cxgb4_lld_info { | |||
| 336 | unsigned int cclk_ps; /* Core clock period in psec */ | 336 | unsigned int cclk_ps; /* Core clock period in psec */ |
| 337 | unsigned short udb_density; /* # of user DB/page */ | 337 | unsigned short udb_density; /* # of user DB/page */ |
| 338 | unsigned short ucq_density; /* # of user CQs/page */ | 338 | unsigned short ucq_density; /* # of user CQs/page */ |
| 339 | unsigned int sge_host_page_size; /* SGE host page size */ | ||
| 339 | unsigned short filt_mode; /* filter optional components */ | 340 | unsigned short filt_mode; /* filter optional components */ |
| 340 | unsigned short tx_modq[NCHAN]; /* maps each tx channel to a */ | 341 | unsigned short tx_modq[NCHAN]; /* maps each tx channel to a */ |
| 341 | /* scheduler queue */ | 342 | /* scheduler queue */ |
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c index b8155f5e71b4..ac55db065f16 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c | |||
| @@ -3128,6 +3128,9 @@ int hns_dsaf_roce_reset(struct fwnode_handle *dsaf_fwnode, bool dereset) | |||
| 3128 | dsaf_set_bit(credit, DSAF_SBM_ROCEE_CFG_CRD_EN_B, 1); | 3128 | dsaf_set_bit(credit, DSAF_SBM_ROCEE_CFG_CRD_EN_B, 1); |
| 3129 | dsaf_write_dev(dsaf_dev, DSAF_SBM_ROCEE_CFG_REG_REG, credit); | 3129 | dsaf_write_dev(dsaf_dev, DSAF_SBM_ROCEE_CFG_REG_REG, credit); |
| 3130 | } | 3130 | } |
| 3131 | |||
| 3132 | put_device(&pdev->dev); | ||
| 3133 | |||
| 3131 | return 0; | 3134 | return 0; |
| 3132 | } | 3135 | } |
| 3133 | EXPORT_SYMBOL(hns_dsaf_roce_reset); | 3136 | EXPORT_SYMBOL(hns_dsaf_roce_reset); |
diff --git a/drivers/net/ethernet/marvell/mv643xx_eth.c b/drivers/net/ethernet/marvell/mv643xx_eth.c index 2f427271a793..292a668ce88e 100644 --- a/drivers/net/ethernet/marvell/mv643xx_eth.c +++ b/drivers/net/ethernet/marvell/mv643xx_eth.c | |||
| @@ -2879,7 +2879,7 @@ static int mv643xx_eth_shared_probe(struct platform_device *pdev) | |||
| 2879 | 2879 | ||
| 2880 | ret = mv643xx_eth_shared_of_probe(pdev); | 2880 | ret = mv643xx_eth_shared_of_probe(pdev); |
| 2881 | if (ret) | 2881 | if (ret) |
| 2882 | return ret; | 2882 | goto err_put_clk; |
| 2883 | pd = dev_get_platdata(&pdev->dev); | 2883 | pd = dev_get_platdata(&pdev->dev); |
| 2884 | 2884 | ||
| 2885 | msp->tx_csum_limit = (pd != NULL && pd->tx_csum_limit) ? | 2885 | msp->tx_csum_limit = (pd != NULL && pd->tx_csum_limit) ? |
| @@ -2887,6 +2887,11 @@ static int mv643xx_eth_shared_probe(struct platform_device *pdev) | |||
| 2887 | infer_hw_params(msp); | 2887 | infer_hw_params(msp); |
| 2888 | 2888 | ||
| 2889 | return 0; | 2889 | return 0; |
| 2890 | |||
| 2891 | err_put_clk: | ||
| 2892 | if (!IS_ERR(msp->clk)) | ||
| 2893 | clk_disable_unprepare(msp->clk); | ||
| 2894 | return ret; | ||
| 2890 | } | 2895 | } |
| 2891 | 2896 | ||
| 2892 | static int mv643xx_eth_shared_remove(struct platform_device *pdev) | 2897 | static int mv643xx_eth_shared_remove(struct platform_device *pdev) |
diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c index f3a5fa84860f..57727fe1501e 100644 --- a/drivers/net/ethernet/marvell/sky2.c +++ b/drivers/net/ethernet/marvell/sky2.c | |||
| @@ -5073,7 +5073,7 @@ static int sky2_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 5073 | INIT_WORK(&hw->restart_work, sky2_restart); | 5073 | INIT_WORK(&hw->restart_work, sky2_restart); |
| 5074 | 5074 | ||
| 5075 | pci_set_drvdata(pdev, hw); | 5075 | pci_set_drvdata(pdev, hw); |
| 5076 | pdev->d3_delay = 200; | 5076 | pdev->d3_delay = 300; |
| 5077 | 5077 | ||
| 5078 | return 0; | 5078 | return 0; |
| 5079 | 5079 | ||
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c index 6b88881b8e35..c1438ae52a11 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c | |||
| @@ -3360,7 +3360,7 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port, | |||
| 3360 | dev->addr_len = ETH_ALEN; | 3360 | dev->addr_len = ETH_ALEN; |
| 3361 | mlx4_en_u64_to_mac(dev->dev_addr, mdev->dev->caps.def_mac[priv->port]); | 3361 | mlx4_en_u64_to_mac(dev->dev_addr, mdev->dev->caps.def_mac[priv->port]); |
| 3362 | if (!is_valid_ether_addr(dev->dev_addr)) { | 3362 | if (!is_valid_ether_addr(dev->dev_addr)) { |
| 3363 | en_err(priv, "Port: %d, invalid mac burned: %pM, quiting\n", | 3363 | en_err(priv, "Port: %d, invalid mac burned: %pM, quitting\n", |
| 3364 | priv->port, dev->dev_addr); | 3364 | priv->port, dev->dev_addr); |
| 3365 | err = -EINVAL; | 3365 | err = -EINVAL; |
| 3366 | goto out; | 3366 | goto out; |
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c index 32519c93df17..b65e274b02e9 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | |||
| @@ -862,8 +862,9 @@ int __mlxsw_sp_port_headroom_set(struct mlxsw_sp_port *mlxsw_sp_port, int mtu, | |||
| 862 | for (i = 0; i < IEEE_8021QAZ_MAX_TCS; i++) { | 862 | for (i = 0; i < IEEE_8021QAZ_MAX_TCS; i++) { |
| 863 | bool configure = false; | 863 | bool configure = false; |
| 864 | bool pfc = false; | 864 | bool pfc = false; |
| 865 | u16 thres_cells; | ||
| 866 | u16 delay_cells; | ||
| 865 | bool lossy; | 867 | bool lossy; |
| 866 | u16 thres; | ||
| 867 | 868 | ||
| 868 | for (j = 0; j < IEEE_8021QAZ_MAX_TCS; j++) { | 869 | for (j = 0; j < IEEE_8021QAZ_MAX_TCS; j++) { |
| 869 | if (prio_tc[j] == i) { | 870 | if (prio_tc[j] == i) { |
| @@ -877,10 +878,11 @@ int __mlxsw_sp_port_headroom_set(struct mlxsw_sp_port *mlxsw_sp_port, int mtu, | |||
| 877 | continue; | 878 | continue; |
| 878 | 879 | ||
| 879 | lossy = !(pfc || pause_en); | 880 | lossy = !(pfc || pause_en); |
| 880 | thres = mlxsw_sp_pg_buf_threshold_get(mlxsw_sp, mtu); | 881 | thres_cells = mlxsw_sp_pg_buf_threshold_get(mlxsw_sp, mtu); |
| 881 | delay = mlxsw_sp_pg_buf_delay_get(mlxsw_sp, mtu, delay, pfc, | 882 | delay_cells = mlxsw_sp_pg_buf_delay_get(mlxsw_sp, mtu, delay, |
| 882 | pause_en); | 883 | pfc, pause_en); |
| 883 | mlxsw_sp_pg_buf_pack(pbmc_pl, i, thres + delay, thres, lossy); | 884 | mlxsw_sp_pg_buf_pack(pbmc_pl, i, thres_cells + delay_cells, |
| 885 | thres_cells, lossy); | ||
| 884 | } | 886 | } |
| 885 | 887 | ||
| 886 | return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(pbmc), pbmc_pl); | 888 | return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(pbmc), pbmc_pl); |
diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c index beb8e5d6401a..ded556b7bab5 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c | |||
| @@ -1688,6 +1688,15 @@ qed_iwarp_parse_rx_pkt(struct qed_hwfn *p_hwfn, | |||
| 1688 | 1688 | ||
| 1689 | eth_hlen = ETH_HLEN + (vlan_valid ? sizeof(u32) : 0); | 1689 | eth_hlen = ETH_HLEN + (vlan_valid ? sizeof(u32) : 0); |
| 1690 | 1690 | ||
| 1691 | if (!ether_addr_equal(ethh->h_dest, | ||
| 1692 | p_hwfn->p_rdma_info->iwarp.mac_addr)) { | ||
| 1693 | DP_VERBOSE(p_hwfn, | ||
| 1694 | QED_MSG_RDMA, | ||
| 1695 | "Got unexpected mac %pM instead of %pM\n", | ||
| 1696 | ethh->h_dest, p_hwfn->p_rdma_info->iwarp.mac_addr); | ||
| 1697 | return -EINVAL; | ||
| 1698 | } | ||
| 1699 | |||
| 1691 | ether_addr_copy(remote_mac_addr, ethh->h_source); | 1700 | ether_addr_copy(remote_mac_addr, ethh->h_source); |
| 1692 | ether_addr_copy(local_mac_addr, ethh->h_dest); | 1701 | ether_addr_copy(local_mac_addr, ethh->h_dest); |
| 1693 | 1702 | ||
| @@ -2605,7 +2614,7 @@ qed_iwarp_ll2_start(struct qed_hwfn *p_hwfn, | |||
| 2605 | struct qed_iwarp_info *iwarp_info; | 2614 | struct qed_iwarp_info *iwarp_info; |
| 2606 | struct qed_ll2_acquire_data data; | 2615 | struct qed_ll2_acquire_data data; |
| 2607 | struct qed_ll2_cbs cbs; | 2616 | struct qed_ll2_cbs cbs; |
| 2608 | u32 mpa_buff_size; | 2617 | u32 buff_size; |
| 2609 | u16 n_ooo_bufs; | 2618 | u16 n_ooo_bufs; |
| 2610 | int rc = 0; | 2619 | int rc = 0; |
| 2611 | int i; | 2620 | int i; |
| @@ -2632,7 +2641,7 @@ qed_iwarp_ll2_start(struct qed_hwfn *p_hwfn, | |||
| 2632 | 2641 | ||
| 2633 | memset(&data, 0, sizeof(data)); | 2642 | memset(&data, 0, sizeof(data)); |
| 2634 | data.input.conn_type = QED_LL2_TYPE_IWARP; | 2643 | data.input.conn_type = QED_LL2_TYPE_IWARP; |
| 2635 | data.input.mtu = QED_IWARP_MAX_SYN_PKT_SIZE; | 2644 | data.input.mtu = params->max_mtu; |
| 2636 | data.input.rx_num_desc = QED_IWARP_LL2_SYN_RX_SIZE; | 2645 | data.input.rx_num_desc = QED_IWARP_LL2_SYN_RX_SIZE; |
| 2637 | data.input.tx_num_desc = QED_IWARP_LL2_SYN_TX_SIZE; | 2646 | data.input.tx_num_desc = QED_IWARP_LL2_SYN_TX_SIZE; |
| 2638 | data.input.tx_max_bds_per_packet = 1; /* will never be fragmented */ | 2647 | data.input.tx_max_bds_per_packet = 1; /* will never be fragmented */ |
| @@ -2654,9 +2663,10 @@ qed_iwarp_ll2_start(struct qed_hwfn *p_hwfn, | |||
| 2654 | goto err; | 2663 | goto err; |
| 2655 | } | 2664 | } |
| 2656 | 2665 | ||
| 2666 | buff_size = QED_IWARP_MAX_BUF_SIZE(params->max_mtu); | ||
| 2657 | rc = qed_iwarp_ll2_alloc_buffers(p_hwfn, | 2667 | rc = qed_iwarp_ll2_alloc_buffers(p_hwfn, |
| 2658 | QED_IWARP_LL2_SYN_RX_SIZE, | 2668 | QED_IWARP_LL2_SYN_RX_SIZE, |
| 2659 | QED_IWARP_MAX_SYN_PKT_SIZE, | 2669 | buff_size, |
| 2660 | iwarp_info->ll2_syn_handle); | 2670 | iwarp_info->ll2_syn_handle); |
| 2661 | if (rc) | 2671 | if (rc) |
| 2662 | goto err; | 2672 | goto err; |
| @@ -2710,10 +2720,9 @@ qed_iwarp_ll2_start(struct qed_hwfn *p_hwfn, | |||
| 2710 | if (rc) | 2720 | if (rc) |
| 2711 | goto err; | 2721 | goto err; |
| 2712 | 2722 | ||
| 2713 | mpa_buff_size = QED_IWARP_MAX_BUF_SIZE(params->max_mtu); | ||
| 2714 | rc = qed_iwarp_ll2_alloc_buffers(p_hwfn, | 2723 | rc = qed_iwarp_ll2_alloc_buffers(p_hwfn, |
| 2715 | data.input.rx_num_desc, | 2724 | data.input.rx_num_desc, |
| 2716 | mpa_buff_size, | 2725 | buff_size, |
| 2717 | iwarp_info->ll2_mpa_handle); | 2726 | iwarp_info->ll2_mpa_handle); |
| 2718 | if (rc) | 2727 | if (rc) |
| 2719 | goto err; | 2728 | goto err; |
| @@ -2726,7 +2735,7 @@ qed_iwarp_ll2_start(struct qed_hwfn *p_hwfn, | |||
| 2726 | 2735 | ||
| 2727 | iwarp_info->max_num_partial_fpdus = (u16)p_hwfn->p_rdma_info->num_qps; | 2736 | iwarp_info->max_num_partial_fpdus = (u16)p_hwfn->p_rdma_info->num_qps; |
| 2728 | 2737 | ||
| 2729 | iwarp_info->mpa_intermediate_buf = kzalloc(mpa_buff_size, GFP_KERNEL); | 2738 | iwarp_info->mpa_intermediate_buf = kzalloc(buff_size, GFP_KERNEL); |
| 2730 | if (!iwarp_info->mpa_intermediate_buf) | 2739 | if (!iwarp_info->mpa_intermediate_buf) |
| 2731 | goto err; | 2740 | goto err; |
| 2732 | 2741 | ||
diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.h b/drivers/net/ethernet/qlogic/qed/qed_iwarp.h index b8f612d00241..7ac959038324 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.h +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.h | |||
| @@ -46,7 +46,6 @@ enum qed_iwarp_qp_state qed_roce2iwarp_state(enum qed_roce_qp_state state); | |||
| 46 | 46 | ||
| 47 | #define QED_IWARP_LL2_SYN_TX_SIZE (128) | 47 | #define QED_IWARP_LL2_SYN_TX_SIZE (128) |
| 48 | #define QED_IWARP_LL2_SYN_RX_SIZE (256) | 48 | #define QED_IWARP_LL2_SYN_RX_SIZE (256) |
| 49 | #define QED_IWARP_MAX_SYN_PKT_SIZE (128) | ||
| 50 | 49 | ||
| 51 | #define QED_IWARP_LL2_OOO_DEF_TX_SIZE (256) | 50 | #define QED_IWARP_LL2_OOO_DEF_TX_SIZE (256) |
| 52 | #define QED_IWARP_MAX_OOO (16) | 51 | #define QED_IWARP_MAX_OOO (16) |
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c index 20299f6f65fc..736e29635b77 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c | |||
| @@ -241,15 +241,18 @@ static inline void dwmac4_get_timestamp(void *desc, u32 ats, u64 *ts) | |||
| 241 | static int dwmac4_rx_check_timestamp(void *desc) | 241 | static int dwmac4_rx_check_timestamp(void *desc) |
| 242 | { | 242 | { |
| 243 | struct dma_desc *p = (struct dma_desc *)desc; | 243 | struct dma_desc *p = (struct dma_desc *)desc; |
| 244 | unsigned int rdes0 = le32_to_cpu(p->des0); | ||
| 245 | unsigned int rdes1 = le32_to_cpu(p->des1); | ||
| 246 | unsigned int rdes3 = le32_to_cpu(p->des3); | ||
| 244 | u32 own, ctxt; | 247 | u32 own, ctxt; |
| 245 | int ret = 1; | 248 | int ret = 1; |
| 246 | 249 | ||
| 247 | own = p->des3 & RDES3_OWN; | 250 | own = rdes3 & RDES3_OWN; |
| 248 | ctxt = ((p->des3 & RDES3_CONTEXT_DESCRIPTOR) | 251 | ctxt = ((rdes3 & RDES3_CONTEXT_DESCRIPTOR) |
| 249 | >> RDES3_CONTEXT_DESCRIPTOR_SHIFT); | 252 | >> RDES3_CONTEXT_DESCRIPTOR_SHIFT); |
| 250 | 253 | ||
| 251 | if (likely(!own && ctxt)) { | 254 | if (likely(!own && ctxt)) { |
| 252 | if ((p->des0 == 0xffffffff) && (p->des1 == 0xffffffff)) | 255 | if ((rdes0 == 0xffffffff) && (rdes1 == 0xffffffff)) |
| 253 | /* Corrupted value */ | 256 | /* Corrupted value */ |
| 254 | ret = -EINVAL; | 257 | ret = -EINVAL; |
| 255 | else | 258 | else |
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c index 5d85742a2be0..3c749c327cbd 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c | |||
| @@ -696,25 +696,27 @@ static int stmmac_ethtool_op_set_eee(struct net_device *dev, | |||
| 696 | struct ethtool_eee *edata) | 696 | struct ethtool_eee *edata) |
| 697 | { | 697 | { |
| 698 | struct stmmac_priv *priv = netdev_priv(dev); | 698 | struct stmmac_priv *priv = netdev_priv(dev); |
| 699 | int ret; | ||
| 699 | 700 | ||
| 700 | priv->eee_enabled = edata->eee_enabled; | 701 | if (!edata->eee_enabled) { |
| 701 | |||
| 702 | if (!priv->eee_enabled) | ||
| 703 | stmmac_disable_eee_mode(priv); | 702 | stmmac_disable_eee_mode(priv); |
| 704 | else { | 703 | } else { |
| 705 | /* We are asking for enabling the EEE but it is safe | 704 | /* We are asking for enabling the EEE but it is safe |
| 706 | * to verify all by invoking the eee_init function. | 705 | * to verify all by invoking the eee_init function. |
| 707 | * In case of failure it will return an error. | 706 | * In case of failure it will return an error. |
| 708 | */ | 707 | */ |
| 709 | priv->eee_enabled = stmmac_eee_init(priv); | 708 | edata->eee_enabled = stmmac_eee_init(priv); |
| 710 | if (!priv->eee_enabled) | 709 | if (!edata->eee_enabled) |
| 711 | return -EOPNOTSUPP; | 710 | return -EOPNOTSUPP; |
| 712 | |||
| 713 | /* Do not change tx_lpi_timer in case of failure */ | ||
| 714 | priv->tx_lpi_timer = edata->tx_lpi_timer; | ||
| 715 | } | 711 | } |
| 716 | 712 | ||
| 717 | return phy_ethtool_set_eee(dev->phydev, edata); | 713 | ret = phy_ethtool_set_eee(dev->phydev, edata); |
| 714 | if (ret) | ||
| 715 | return ret; | ||
| 716 | |||
| 717 | priv->eee_enabled = edata->eee_enabled; | ||
| 718 | priv->tx_lpi_timer = edata->tx_lpi_timer; | ||
| 719 | return 0; | ||
| 718 | } | 720 | } |
| 719 | 721 | ||
| 720 | static u32 stmmac_usec2riwt(u32 usec, struct stmmac_priv *priv) | 722 | static u32 stmmac_usec2riwt(u32 usec, struct stmmac_priv *priv) |
diff --git a/drivers/net/ethernet/ti/netcp_core.c b/drivers/net/ethernet/ti/netcp_core.c index 1f612268c998..d847f672a705 100644 --- a/drivers/net/ethernet/ti/netcp_core.c +++ b/drivers/net/ethernet/ti/netcp_core.c | |||
| @@ -259,7 +259,7 @@ static int netcp_module_probe(struct netcp_device *netcp_device, | |||
| 259 | const char *name; | 259 | const char *name; |
| 260 | char node_name[32]; | 260 | char node_name[32]; |
| 261 | 261 | ||
| 262 | if (of_property_read_string(node, "label", &name) < 0) { | 262 | if (of_property_read_string(child, "label", &name) < 0) { |
| 263 | snprintf(node_name, sizeof(node_name), "%pOFn", child); | 263 | snprintf(node_name, sizeof(node_name), "%pOFn", child); |
| 264 | name = node_name; | 264 | name = node_name; |
| 265 | } | 265 | } |
diff --git a/drivers/net/phy/xilinx_gmii2rgmii.c b/drivers/net/phy/xilinx_gmii2rgmii.c index 74a8782313cf..bd6084e315de 100644 --- a/drivers/net/phy/xilinx_gmii2rgmii.c +++ b/drivers/net/phy/xilinx_gmii2rgmii.c | |||
| @@ -44,7 +44,10 @@ static int xgmiitorgmii_read_status(struct phy_device *phydev) | |||
| 44 | u16 val = 0; | 44 | u16 val = 0; |
| 45 | int err; | 45 | int err; |
| 46 | 46 | ||
| 47 | err = priv->phy_drv->read_status(phydev); | 47 | if (priv->phy_drv->read_status) |
| 48 | err = priv->phy_drv->read_status(phydev); | ||
| 49 | else | ||
| 50 | err = genphy_read_status(phydev); | ||
| 48 | if (err < 0) | 51 | if (err < 0) |
| 49 | return err; | 52 | return err; |
| 50 | 53 | ||
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c index 735ad838e2ba..18af2f8eee96 100644 --- a/drivers/net/usb/qmi_wwan.c +++ b/drivers/net/usb/qmi_wwan.c | |||
| @@ -1201,8 +1201,8 @@ static const struct usb_device_id products[] = { | |||
| 1201 | {QMI_FIXED_INTF(0x114f, 0x68a2, 8)}, /* Sierra Wireless MC7750 */ | 1201 | {QMI_FIXED_INTF(0x114f, 0x68a2, 8)}, /* Sierra Wireless MC7750 */ |
| 1202 | {QMI_FIXED_INTF(0x1199, 0x68a2, 8)}, /* Sierra Wireless MC7710 in QMI mode */ | 1202 | {QMI_FIXED_INTF(0x1199, 0x68a2, 8)}, /* Sierra Wireless MC7710 in QMI mode */ |
| 1203 | {QMI_FIXED_INTF(0x1199, 0x68a2, 19)}, /* Sierra Wireless MC7710 in QMI mode */ | 1203 | {QMI_FIXED_INTF(0x1199, 0x68a2, 19)}, /* Sierra Wireless MC7710 in QMI mode */ |
| 1204 | {QMI_FIXED_INTF(0x1199, 0x68c0, 8)}, /* Sierra Wireless MC7304/MC7354 */ | 1204 | {QMI_QUIRK_SET_DTR(0x1199, 0x68c0, 8)}, /* Sierra Wireless MC7304/MC7354, WP76xx */ |
| 1205 | {QMI_FIXED_INTF(0x1199, 0x68c0, 10)}, /* Sierra Wireless MC7304/MC7354 */ | 1205 | {QMI_QUIRK_SET_DTR(0x1199, 0x68c0, 10)},/* Sierra Wireless MC7304/MC7354 */ |
| 1206 | {QMI_FIXED_INTF(0x1199, 0x901c, 8)}, /* Sierra Wireless EM7700 */ | 1206 | {QMI_FIXED_INTF(0x1199, 0x901c, 8)}, /* Sierra Wireless EM7700 */ |
| 1207 | {QMI_FIXED_INTF(0x1199, 0x901f, 8)}, /* Sierra Wireless EM7355 */ | 1207 | {QMI_FIXED_INTF(0x1199, 0x901f, 8)}, /* Sierra Wireless EM7355 */ |
| 1208 | {QMI_FIXED_INTF(0x1199, 0x9041, 8)}, /* Sierra Wireless MC7305/MC7355 */ | 1208 | {QMI_FIXED_INTF(0x1199, 0x9041, 8)}, /* Sierra Wireless MC7305/MC7355 */ |
diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c index 60dd1ec1665f..ada6baf8847a 100644 --- a/drivers/net/usb/r8152.c +++ b/drivers/net/usb/r8152.c | |||
| @@ -557,6 +557,7 @@ enum spd_duplex { | |||
| 557 | /* MAC PASSTHRU */ | 557 | /* MAC PASSTHRU */ |
| 558 | #define AD_MASK 0xfee0 | 558 | #define AD_MASK 0xfee0 |
| 559 | #define BND_MASK 0x0004 | 559 | #define BND_MASK 0x0004 |
| 560 | #define BD_MASK 0x0001 | ||
| 560 | #define EFUSE 0xcfdb | 561 | #define EFUSE 0xcfdb |
| 561 | #define PASS_THRU_MASK 0x1 | 562 | #define PASS_THRU_MASK 0x1 |
| 562 | 563 | ||
| @@ -1176,9 +1177,9 @@ static int vendor_mac_passthru_addr_read(struct r8152 *tp, struct sockaddr *sa) | |||
| 1176 | return -ENODEV; | 1177 | return -ENODEV; |
| 1177 | } | 1178 | } |
| 1178 | } else { | 1179 | } else { |
| 1179 | /* test for RTL8153-BND */ | 1180 | /* test for RTL8153-BND and RTL8153-BD */ |
| 1180 | ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_1); | 1181 | ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_1); |
| 1181 | if ((ocp_data & BND_MASK) == 0) { | 1182 | if ((ocp_data & BND_MASK) == 0 && (ocp_data & BD_MASK)) { |
| 1182 | netif_dbg(tp, probe, tp->netdev, | 1183 | netif_dbg(tp, probe, tp->netdev, |
| 1183 | "Invalid variant for MAC pass through\n"); | 1184 | "Invalid variant for MAC pass through\n"); |
| 1184 | return -ENODEV; | 1185 | return -ENODEV; |
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c b/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c index 0e6b43bb4678..a5ea3ba495a4 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c +++ b/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c | |||
| @@ -158,39 +158,49 @@ static const struct ieee80211_ops mt76x0u_ops = { | |||
| 158 | .get_txpower = mt76x02_get_txpower, | 158 | .get_txpower = mt76x02_get_txpower, |
| 159 | }; | 159 | }; |
| 160 | 160 | ||
| 161 | static int mt76x0u_register_device(struct mt76x02_dev *dev) | 161 | static int mt76x0u_init_hardware(struct mt76x02_dev *dev) |
| 162 | { | 162 | { |
| 163 | struct ieee80211_hw *hw = dev->mt76.hw; | ||
| 164 | int err; | 163 | int err; |
| 165 | 164 | ||
| 166 | err = mt76u_alloc_queues(&dev->mt76); | ||
| 167 | if (err < 0) | ||
| 168 | goto out_err; | ||
| 169 | |||
| 170 | err = mt76u_mcu_init_rx(&dev->mt76); | ||
| 171 | if (err < 0) | ||
| 172 | goto out_err; | ||
| 173 | |||
| 174 | mt76x0_chip_onoff(dev, true, true); | 165 | mt76x0_chip_onoff(dev, true, true); |
| 175 | if (!mt76x02_wait_for_mac(&dev->mt76)) { | 166 | |
| 176 | err = -ETIMEDOUT; | 167 | if (!mt76x02_wait_for_mac(&dev->mt76)) |
| 177 | goto out_err; | 168 | return -ETIMEDOUT; |
| 178 | } | ||
| 179 | 169 | ||
| 180 | err = mt76x0u_mcu_init(dev); | 170 | err = mt76x0u_mcu_init(dev); |
| 181 | if (err < 0) | 171 | if (err < 0) |
| 182 | goto out_err; | 172 | return err; |
| 183 | 173 | ||
| 184 | mt76x0_init_usb_dma(dev); | 174 | mt76x0_init_usb_dma(dev); |
| 185 | err = mt76x0_init_hardware(dev); | 175 | err = mt76x0_init_hardware(dev); |
| 186 | if (err < 0) | 176 | if (err < 0) |
| 187 | goto out_err; | 177 | return err; |
| 188 | 178 | ||
| 189 | mt76_rmw(dev, MT_US_CYC_CFG, MT_US_CYC_CNT, 0x1e); | 179 | mt76_rmw(dev, MT_US_CYC_CFG, MT_US_CYC_CNT, 0x1e); |
| 190 | mt76_wr(dev, MT_TXOP_CTRL_CFG, | 180 | mt76_wr(dev, MT_TXOP_CTRL_CFG, |
| 191 | FIELD_PREP(MT_TXOP_TRUN_EN, 0x3f) | | 181 | FIELD_PREP(MT_TXOP_TRUN_EN, 0x3f) | |
| 192 | FIELD_PREP(MT_TXOP_EXT_CCA_DLY, 0x58)); | 182 | FIELD_PREP(MT_TXOP_EXT_CCA_DLY, 0x58)); |
| 193 | 183 | ||
| 184 | return 0; | ||
| 185 | } | ||
| 186 | |||
| 187 | static int mt76x0u_register_device(struct mt76x02_dev *dev) | ||
| 188 | { | ||
| 189 | struct ieee80211_hw *hw = dev->mt76.hw; | ||
| 190 | int err; | ||
| 191 | |||
| 192 | err = mt76u_alloc_queues(&dev->mt76); | ||
| 193 | if (err < 0) | ||
| 194 | goto out_err; | ||
| 195 | |||
| 196 | err = mt76u_mcu_init_rx(&dev->mt76); | ||
| 197 | if (err < 0) | ||
| 198 | goto out_err; | ||
| 199 | |||
| 200 | err = mt76x0u_init_hardware(dev); | ||
| 201 | if (err < 0) | ||
| 202 | goto out_err; | ||
| 203 | |||
| 194 | err = mt76x0_register_device(dev); | 204 | err = mt76x0_register_device(dev); |
| 195 | if (err < 0) | 205 | if (err < 0) |
| 196 | goto out_err; | 206 | goto out_err; |
| @@ -301,6 +311,8 @@ static int __maybe_unused mt76x0_suspend(struct usb_interface *usb_intf, | |||
| 301 | 311 | ||
| 302 | mt76u_stop_queues(&dev->mt76); | 312 | mt76u_stop_queues(&dev->mt76); |
| 303 | mt76x0u_mac_stop(dev); | 313 | mt76x0u_mac_stop(dev); |
| 314 | clear_bit(MT76_STATE_MCU_RUNNING, &dev->mt76.state); | ||
| 315 | mt76x0_chip_onoff(dev, false, false); | ||
| 304 | usb_kill_urb(usb->mcu.res.urb); | 316 | usb_kill_urb(usb->mcu.res.urb); |
| 305 | 317 | ||
| 306 | return 0; | 318 | return 0; |
| @@ -328,7 +340,7 @@ static int __maybe_unused mt76x0_resume(struct usb_interface *usb_intf) | |||
| 328 | tasklet_enable(&usb->rx_tasklet); | 340 | tasklet_enable(&usb->rx_tasklet); |
| 329 | tasklet_enable(&usb->tx_tasklet); | 341 | tasklet_enable(&usb->tx_tasklet); |
| 330 | 342 | ||
| 331 | ret = mt76x0_init_hardware(dev); | 343 | ret = mt76x0u_init_hardware(dev); |
| 332 | if (ret) | 344 | if (ret) |
| 333 | goto err; | 345 | goto err; |
| 334 | 346 | ||
diff --git a/drivers/pinctrl/meson/pinctrl-meson8b.c b/drivers/pinctrl/meson/pinctrl-meson8b.c index c69ca95b1ad5..0f140a802137 100644 --- a/drivers/pinctrl/meson/pinctrl-meson8b.c +++ b/drivers/pinctrl/meson/pinctrl-meson8b.c | |||
| @@ -693,7 +693,7 @@ static const char * const sd_a_groups[] = { | |||
| 693 | 693 | ||
| 694 | static const char * const sdxc_a_groups[] = { | 694 | static const char * const sdxc_a_groups[] = { |
| 695 | "sdxc_d0_0_a", "sdxc_d13_0_a", "sdxc_d47_a", "sdxc_clk_a", | 695 | "sdxc_d0_0_a", "sdxc_d13_0_a", "sdxc_d47_a", "sdxc_clk_a", |
| 696 | "sdxc_cmd_a", "sdxc_d0_1_a", "sdxc_d0_13_1_a" | 696 | "sdxc_cmd_a", "sdxc_d0_1_a", "sdxc_d13_1_a" |
| 697 | }; | 697 | }; |
| 698 | 698 | ||
| 699 | static const char * const pcm_a_groups[] = { | 699 | static const char * const pcm_a_groups[] = { |
diff --git a/drivers/pinctrl/qcom/pinctrl-qcs404.c b/drivers/pinctrl/qcom/pinctrl-qcs404.c index 7aae52a09ff0..4ffd56ff809e 100644 --- a/drivers/pinctrl/qcom/pinctrl-qcs404.c +++ b/drivers/pinctrl/qcom/pinctrl-qcs404.c | |||
| @@ -79,7 +79,7 @@ enum { | |||
| 79 | .intr_cfg_reg = 0, \ | 79 | .intr_cfg_reg = 0, \ |
| 80 | .intr_status_reg = 0, \ | 80 | .intr_status_reg = 0, \ |
| 81 | .intr_target_reg = 0, \ | 81 | .intr_target_reg = 0, \ |
| 82 | .tile = NORTH, \ | 82 | .tile = SOUTH, \ |
| 83 | .mux_bit = -1, \ | 83 | .mux_bit = -1, \ |
| 84 | .pull_bit = pull, \ | 84 | .pull_bit = pull, \ |
| 85 | .drv_bit = drv, \ | 85 | .drv_bit = drv, \ |
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c index 24a129fcdd61..a2e5dc7716e2 100644 --- a/drivers/vhost/vhost.c +++ b/drivers/vhost/vhost.c | |||
| @@ -1788,7 +1788,7 @@ static int log_used(struct vhost_virtqueue *vq, u64 used_offset, u64 len) | |||
| 1788 | 1788 | ||
| 1789 | ret = translate_desc(vq, (uintptr_t)vq->used + used_offset, | 1789 | ret = translate_desc(vq, (uintptr_t)vq->used + used_offset, |
| 1790 | len, iov, 64, VHOST_ACCESS_WO); | 1790 | len, iov, 64, VHOST_ACCESS_WO); |
| 1791 | if (ret) | 1791 | if (ret < 0) |
| 1792 | return ret; | 1792 | return ret; |
| 1793 | 1793 | ||
| 1794 | for (i = 0; i < ret; i++) { | 1794 | for (i = 0; i < ret; i++) { |
