diff options
| -rw-r--r-- | drivers/net/ethernet/realtek/r8169.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c index 088136b37ebe..14a1c5cec3a5 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c | |||
| @@ -5919,7 +5919,7 @@ static void rtl_hw_start_8411(struct rtl8169_private *tp) | |||
| 5919 | rtl_w0w1_eri(tp, 0x0d4, ERIAR_MASK_0011, 0x0c00, 0x0000, ERIAR_EXGMAC); | 5919 | rtl_w0w1_eri(tp, 0x0d4, ERIAR_MASK_0011, 0x0c00, 0x0000, ERIAR_EXGMAC); |
| 5920 | } | 5920 | } |
| 5921 | 5921 | ||
| 5922 | static void rtl_hw_start_8168g_1(struct rtl8169_private *tp) | 5922 | static void rtl_hw_start_8168g(struct rtl8169_private *tp) |
| 5923 | { | 5923 | { |
| 5924 | void __iomem *ioaddr = tp->mmio_addr; | 5924 | void __iomem *ioaddr = tp->mmio_addr; |
| 5925 | struct pci_dev *pdev = tp->pci_dev; | 5925 | struct pci_dev *pdev = tp->pci_dev; |
| @@ -5954,6 +5954,24 @@ static void rtl_hw_start_8168g_1(struct rtl8169_private *tp) | |||
| 5954 | rtl_pcie_state_l2l3_enable(tp, false); | 5954 | rtl_pcie_state_l2l3_enable(tp, false); |
| 5955 | } | 5955 | } |
| 5956 | 5956 | ||
| 5957 | static void rtl_hw_start_8168g_1(struct rtl8169_private *tp) | ||
| 5958 | { | ||
| 5959 | void __iomem *ioaddr = tp->mmio_addr; | ||
| 5960 | static const struct ephy_info e_info_8168g_1[] = { | ||
| 5961 | { 0x00, 0x0000, 0x0008 }, | ||
| 5962 | { 0x0c, 0x37d0, 0x0820 }, | ||
| 5963 | { 0x1e, 0x0000, 0x0001 }, | ||
| 5964 | { 0x19, 0x8000, 0x0000 } | ||
| 5965 | }; | ||
| 5966 | |||
| 5967 | rtl_hw_start_8168g(tp); | ||
| 5968 | |||
| 5969 | /* disable aspm and clock request before access ephy */ | ||
| 5970 | RTL_W8(Config2, RTL_R8(Config2) & ~ClkReqEn); | ||
| 5971 | RTL_W8(Config5, RTL_R8(Config5) & ~ASPM_en); | ||
| 5972 | rtl_ephy_init(tp, e_info_8168g_1, ARRAY_SIZE(e_info_8168g_1)); | ||
| 5973 | } | ||
| 5974 | |||
| 5957 | static void rtl_hw_start_8168g_2(struct rtl8169_private *tp) | 5975 | static void rtl_hw_start_8168g_2(struct rtl8169_private *tp) |
| 5958 | { | 5976 | { |
| 5959 | void __iomem *ioaddr = tp->mmio_addr; | 5977 | void __iomem *ioaddr = tp->mmio_addr; |
| @@ -5964,7 +5982,7 @@ static void rtl_hw_start_8168g_2(struct rtl8169_private *tp) | |||
| 5964 | { 0x1e, 0xffff, 0x20eb } | 5982 | { 0x1e, 0xffff, 0x20eb } |
| 5965 | }; | 5983 | }; |
| 5966 | 5984 | ||
| 5967 | rtl_hw_start_8168g_1(tp); | 5985 | rtl_hw_start_8168g(tp); |
| 5968 | 5986 | ||
| 5969 | /* disable aspm and clock request before access ephy */ | 5987 | /* disable aspm and clock request before access ephy */ |
| 5970 | RTL_W8(Config2, RTL_R8(Config2) & ~ClkReqEn); | 5988 | RTL_W8(Config2, RTL_R8(Config2) & ~ClkReqEn); |
| @@ -5983,7 +6001,7 @@ static void rtl_hw_start_8411_2(struct rtl8169_private *tp) | |||
| 5983 | { 0x1e, 0x0000, 0x2000 } | 6001 | { 0x1e, 0x0000, 0x2000 } |
| 5984 | }; | 6002 | }; |
| 5985 | 6003 | ||
| 5986 | rtl_hw_start_8168g_1(tp); | 6004 | rtl_hw_start_8168g(tp); |
| 5987 | 6005 | ||
| 5988 | /* disable aspm and clock request before access ephy */ | 6006 | /* disable aspm and clock request before access ephy */ |
| 5989 | RTL_W8(Config2, RTL_R8(Config2) & ~ClkReqEn); | 6007 | RTL_W8(Config2, RTL_R8(Config2) & ~ClkReqEn); |
