Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'davem.r8169' of git://violet.fr.zoreil.com/romieu/linux

Revert two power saving r8169 changes to fix some regressions
reported.

Reported-by: Jörg Otte <jrg.otte@gmail.com>
Tested-by: Jörg Otte <jrg.otte@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

+19 -67
+19 -67
drivers/net/ethernet/realtek/r8169.c
··· 450 450 #define PWM_EN (1 << 22) 451 451 #define RXDV_GATED_EN (1 << 19) 452 452 #define EARLY_TALLY_EN (1 << 16) 453 - #define FORCE_CLK (1 << 15) /* force clock request */ 454 453 }; 455 454 456 455 enum rtl_register_content { ··· 513 514 PMEnable = (1 << 0), /* Power Management Enable */ 514 515 515 516 /* Config2 register p. 25 */ 516 - ClkReqEn = (1 << 7), /* Clock Request Enable */ 517 517 MSIEnable = (1 << 5), /* 8169 only. Reserved in the 8168. */ 518 518 PCI_Clock_66MHz = 0x01, 519 519 PCI_Clock_33MHz = 0x00, ··· 533 535 Spi_en = (1 << 3), 534 536 LanWake = (1 << 1), /* LanWake enable/disable */ 535 537 PMEStatus = (1 << 0), /* PME status can be reset by PCI RST# */ 536 - ASPM_en = (1 << 0), /* ASPM enable */ 537 538 538 539 /* TBICSR p.28 */ 539 540 TBIReset = 0x80000000, ··· 681 684 RTL_FEATURE_WOL = (1 << 0), 682 685 RTL_FEATURE_MSI = (1 << 1), 683 686 RTL_FEATURE_GMII = (1 << 2), 684 - RTL_FEATURE_FW_LOADED = (1 << 3), 685 687 }; 686 688 687 689 struct rtl8169_counters { ··· 2385 2389 struct rtl_fw *rtl_fw = tp->rtl_fw; 2386 2390 2387 2391 /* TODO: release firmware once rtl_phy_write_fw signals failures. */ 2388 - if (!IS_ERR_OR_NULL(rtl_fw)) { 2392 + if (!IS_ERR_OR_NULL(rtl_fw)) 2389 2393 rtl_phy_write_fw(tp, rtl_fw); 2390 - tp->features |= RTL_FEATURE_FW_LOADED; 2391 - } 2392 2394 } 2393 2395 2394 2396 static void rtl_apply_firmware_cond(struct rtl8169_private *tp, u8 reg, u16 val) ··· 2395 2401 netif_warn(tp, hw, tp->dev, "chipset not ready for firmware\n"); 2396 2402 else 2397 2403 rtl_apply_firmware(tp); 2398 - } 2399 - 2400 - static void r810x_aldps_disable(struct rtl8169_private *tp) 2401 - { 2402 - rtl_writephy(tp, 0x1f, 0x0000); 2403 - rtl_writephy(tp, 0x18, 0x0310); 2404 - msleep(100); 2405 - } 2406 - 2407 - static void r810x_aldps_enable(struct rtl8169_private *tp) 2408 - { 2409 - if (!(tp->features & RTL_FEATURE_FW_LOADED)) 2410 - return; 2411 - 2412 - rtl_writephy(tp, 0x1f, 0x0000); 2413 - rtl_writephy(tp, 0x18, 0x8310); 2414 - } 2415 - 2416 - static void r8168_aldps_enable_1(struct rtl8169_private *tp) 2417 - { 2418 - if (!(tp->features & RTL_FEATURE_FW_LOADED)) 2419 - return; 2420 - 2421 - rtl_writephy(tp, 0x1f, 0x0000); 2422 - rtl_w1w0_phy(tp, 0x15, 0x1000, 0x0000); 2423 2404 } 2424 2405 2425 2406 static void rtl8169s_hw_phy_config(struct rtl8169_private *tp) ··· 3187 3218 rtl_w1w0_phy(tp, 0x10, 0x0000, 0x0400); 3188 3219 rtl_writephy(tp, 0x1f, 0x0000); 3189 3220 3190 - r8168_aldps_enable_1(tp); 3191 - 3192 3221 /* Broken BIOS workaround: feed GigaMAC registers with MAC address. */ 3193 3222 rtl_rar_exgmac_set(tp, tp->dev->dev_addr); 3194 3223 } ··· 3261 3294 rtl_writephy(tp, 0x05, 0x8b85); 3262 3295 rtl_w1w0_phy(tp, 0x06, 0x4000, 0x0000); 3263 3296 rtl_writephy(tp, 0x1f, 0x0000); 3264 - 3265 - r8168_aldps_enable_1(tp); 3266 3297 } 3267 3298 3268 3299 static void rtl8168f_2_hw_phy_config(struct rtl8169_private *tp) ··· 3268 3303 rtl_apply_firmware(tp); 3269 3304 3270 3305 rtl8168f_hw_phy_config(tp); 3271 - 3272 - r8168_aldps_enable_1(tp); 3273 3306 } 3274 3307 3275 3308 static void rtl8411_hw_phy_config(struct rtl8169_private *tp) ··· 3365 3402 rtl_w1w0_phy(tp, 0x19, 0x0000, 0x0001); 3366 3403 rtl_w1w0_phy(tp, 0x10, 0x0000, 0x0400); 3367 3404 rtl_writephy(tp, 0x1f, 0x0000); 3368 - 3369 - r8168_aldps_enable_1(tp); 3370 3405 } 3371 3406 3372 3407 static void rtl8168g_1_hw_phy_config(struct rtl8169_private *tp) ··· 3450 3489 }; 3451 3490 3452 3491 /* Disable ALDPS before ram code */ 3453 - r810x_aldps_disable(tp); 3492 + rtl_writephy(tp, 0x1f, 0x0000); 3493 + rtl_writephy(tp, 0x18, 0x0310); 3494 + msleep(100); 3454 3495 3455 3496 rtl_apply_firmware(tp); 3456 3497 3457 3498 rtl_writephy_batch(tp, phy_reg_init, ARRAY_SIZE(phy_reg_init)); 3458 - 3459 - r810x_aldps_enable(tp); 3460 3499 } 3461 3500 3462 3501 static void rtl8402_hw_phy_config(struct rtl8169_private *tp) 3463 3502 { 3464 3503 /* Disable ALDPS before setting firmware */ 3465 - r810x_aldps_disable(tp); 3504 + rtl_writephy(tp, 0x1f, 0x0000); 3505 + rtl_writephy(tp, 0x18, 0x0310); 3506 + msleep(20); 3466 3507 3467 3508 rtl_apply_firmware(tp); 3468 3509 ··· 3474 3511 rtl_writephy(tp, 0x10, 0x401f); 3475 3512 rtl_writephy(tp, 0x19, 0x7030); 3476 3513 rtl_writephy(tp, 0x1f, 0x0000); 3477 - 3478 - r810x_aldps_enable(tp); 3479 3514 } 3480 3515 3481 3516 static void rtl8106e_hw_phy_config(struct rtl8169_private *tp) ··· 3486 3525 }; 3487 3526 3488 3527 /* Disable ALDPS before ram code */ 3489 - r810x_aldps_disable(tp); 3528 + rtl_writephy(tp, 0x1f, 0x0000); 3529 + rtl_writephy(tp, 0x18, 0x0310); 3530 + msleep(100); 3490 3531 3491 3532 rtl_apply_firmware(tp); 3492 3533 ··· 3496 3533 rtl_writephy_batch(tp, phy_reg_init, ARRAY_SIZE(phy_reg_init)); 3497 3534 3498 3535 rtl_eri_write(tp, 0x1d0, ERIAR_MASK_0011, 0x0000, ERIAR_EXGMAC); 3499 - 3500 - r810x_aldps_enable(tp); 3501 3536 } 3502 3537 3503 3538 static void rtl_hw_phy_config(struct net_device *dev) ··· 5012 5051 5013 5052 RTL_W8(MaxTxPacketSize, EarlySize); 5014 5053 5054 + rtl_disable_clock_request(pdev); 5055 + 5015 5056 RTL_W32(TxConfig, RTL_R32(TxConfig) | TXCFG_AUTO_FIFO); 5016 5057 RTL_W8(MCU, RTL_R8(MCU) & ~NOW_IS_OOB); 5017 5058 ··· 5022 5059 5023 5060 RTL_W8(DLLPR, RTL_R8(DLLPR) | PFM_EN); 5024 5061 RTL_W32(MISC, RTL_R32(MISC) | PWM_EN); 5025 - RTL_W8(Config5, (RTL_R8(Config5) & ~Spi_en) | ASPM_en); 5026 - RTL_W8(Config2, RTL_R8(Config2) | ClkReqEn); 5062 + RTL_W8(Config5, RTL_R8(Config5) & ~Spi_en); 5027 5063 } 5028 5064 5029 5065 static void rtl_hw_start_8168f(struct rtl8169_private *tp) ··· 5047 5085 5048 5086 RTL_W8(MaxTxPacketSize, EarlySize); 5049 5087 5088 + rtl_disable_clock_request(pdev); 5089 + 5050 5090 RTL_W32(TxConfig, RTL_R32(TxConfig) | TXCFG_AUTO_FIFO); 5051 5091 RTL_W8(MCU, RTL_R8(MCU) & ~NOW_IS_OOB); 5052 5092 RTL_W8(DLLPR, RTL_R8(DLLPR) | PFM_EN); 5053 - RTL_W32(MISC, RTL_R32(MISC) | PWM_EN | FORCE_CLK); 5054 - RTL_W8(Config5, (RTL_R8(Config5) & ~Spi_en) | ASPM_en); 5055 - RTL_W8(Config2, RTL_R8(Config2) | ClkReqEn); 5093 + RTL_W32(MISC, RTL_R32(MISC) | PWM_EN); 5094 + RTL_W8(Config5, RTL_R8(Config5) & ~Spi_en); 5056 5095 } 5057 5096 5058 5097 static void rtl_hw_start_8168f_1(struct rtl8169_private *tp) ··· 5110 5147 rtl_w1w0_eri(tp, 0xdc, ERIAR_MASK_0001, 0x01, 0x00, ERIAR_EXGMAC); 5111 5148 5112 5149 RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb); 5113 - RTL_W32(MISC, (RTL_R32(MISC) | FORCE_CLK) & ~RXDV_GATED_EN); 5150 + RTL_W32(MISC, RTL_R32(MISC) & ~RXDV_GATED_EN); 5114 5151 RTL_W8(MaxTxPacketSize, EarlySize); 5115 - RTL_W8(Config5, RTL_R8(Config5) | ASPM_en); 5116 - RTL_W8(Config2, RTL_R8(Config2) | ClkReqEn); 5117 5152 5118 5153 rtl_eri_write(tp, 0xc0, ERIAR_MASK_0011, 0x0000, ERIAR_EXGMAC); 5119 5154 rtl_eri_write(tp, 0xb8, ERIAR_MASK_0011, 0x0000, ERIAR_EXGMAC); ··· 5327 5366 5328 5367 RTL_W8(MCU, RTL_R8(MCU) | EN_NDP | EN_OOB_RESET); 5329 5368 RTL_W8(DLLPR, RTL_R8(DLLPR) | PFM_EN); 5330 - RTL_W8(Config5, RTL_R8(Config5) | ASPM_en); 5331 - RTL_W8(Config2, RTL_R8(Config2) | ClkReqEn); 5332 - RTL_W32(MISC, RTL_R32(MISC) | FORCE_CLK); 5333 5369 5334 5370 rtl_ephy_init(tp, e_info_8105e_1, ARRAY_SIZE(e_info_8105e_1)); 5335 5371 } ··· 5352 5394 5353 5395 RTL_W32(TxConfig, RTL_R32(TxConfig) | TXCFG_AUTO_FIFO); 5354 5396 RTL_W8(MCU, RTL_R8(MCU) & ~NOW_IS_OOB); 5355 - RTL_W8(Config5, RTL_R8(Config5) | ASPM_en); 5356 - RTL_W8(Config2, RTL_R8(Config2) | ClkReqEn); 5357 - RTL_W32(MISC, RTL_R32(MISC) | FORCE_CLK); 5358 5397 5359 5398 rtl_ephy_init(tp, e_info_8402, ARRAY_SIZE(e_info_8402)); 5360 5399 ··· 5373 5418 /* Force LAN exit from ASPM if Rx/Tx are not idle */ 5374 5419 RTL_W32(FuncEvent, RTL_R32(FuncEvent) | 0x002800); 5375 5420 5376 - RTL_W32(MISC, 5377 - (RTL_R32(MISC) | DISABLE_LAN_EN | FORCE_CLK) & ~EARLY_TALLY_EN); 5378 - RTL_W8(Config5, RTL_R8(Config5) | ASPM_en); 5379 - RTL_W8(Config2, RTL_R8(Config2) | ClkReqEn); 5421 + RTL_W32(MISC, (RTL_R32(MISC) | DISABLE_LAN_EN) & ~EARLY_TALLY_EN); 5380 5422 RTL_W8(MCU, RTL_R8(MCU) | EN_NDP | EN_OOB_RESET); 5381 5423 RTL_W8(DLLPR, RTL_R8(DLLPR) & ~PFM_EN); 5382 5424 }