aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/realtek
diff options
context:
space:
mode:
authorhayeswang <hayeswang@realtek.com>2013-04-01 18:23:36 -0400
committerDavid S. Miller <davem@davemloft.net>2013-04-07 16:44:13 -0400
commit41f44d1389c0bfd19d7ff92aafc80d42308eac70 (patch)
tree43f6bfc0efd1609d9641e2d22560cf1931dc4189 /drivers/net/ethernet/realtek
parent0427d0152eb3c2c2712afa427dd593c68fc09299 (diff)
r8169: Modify the mothod for PHY settings of RTL8111G
Replace the current settings with rtl_writephy and rtl_readphy. For the hardware, the settings are same with previous ones. This make the setting method like the previous chips. Signed-off-by: Hayes Wang <hayeswang@realtek.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/realtek')
-rw-r--r--drivers/net/ethernet/realtek/r8169.c52
1 files changed, 31 insertions, 21 deletions
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
index d36aa7621ad9..2c40309e40ad 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -1024,14 +1024,6 @@ static u16 r8168_phy_ocp_read(struct rtl8169_private *tp, u32 reg)
1024 (RTL_R32(GPHY_OCP) & 0xffff) : ~0; 1024 (RTL_R32(GPHY_OCP) & 0xffff) : ~0;
1025} 1025}
1026 1026
1027static void rtl_w1w0_phy_ocp(struct rtl8169_private *tp, int reg, int p, int m)
1028{
1029 int val;
1030
1031 val = r8168_phy_ocp_read(tp, reg);
1032 r8168_phy_ocp_write(tp, reg, (val | p) & ~m);
1033}
1034
1035static void r8168_mac_ocp_write(struct rtl8169_private *tp, u32 reg, u32 data) 1027static void r8168_mac_ocp_write(struct rtl8169_private *tp, u32 reg, u32 data)
1036{ 1028{
1037 void __iomem *ioaddr = tp->mmio_addr; 1029 void __iomem *ioaddr = tp->mmio_addr;
@@ -3370,23 +3362,41 @@ static void rtl8168g_1_hw_phy_config(struct rtl8169_private *tp)
3370{ 3362{
3371 rtl_apply_firmware(tp); 3363 rtl_apply_firmware(tp);
3372 3364
3373 if (r8168_phy_ocp_read(tp, 0xa460) & 0x0100) 3365 rtl_writephy(tp, 0x1f, 0x0a46);
3374 rtl_w1w0_phy_ocp(tp, 0xbcc4, 0x0000, 0x8000); 3366 if (rtl_readphy(tp, 0x10) & 0x0100) {
3375 else 3367 rtl_writephy(tp, 0x1f, 0x0bcc);
3376 rtl_w1w0_phy_ocp(tp, 0xbcc4, 0x8000, 0x0000); 3368 rtl_w1w0_phy(tp, 0x12, 0x0000, 0x8000);
3369 } else {
3370 rtl_writephy(tp, 0x1f, 0x0bcc);
3371 rtl_w1w0_phy(tp, 0x12, 0x8000, 0x0000);
3372 }
3377 3373
3378 if (r8168_phy_ocp_read(tp, 0xa466) & 0x0100) 3374 rtl_writephy(tp, 0x1f, 0x0a46);
3379 rtl_w1w0_phy_ocp(tp, 0xc41a, 0x0002, 0x0000); 3375 if (rtl_readphy(tp, 0x13) & 0x0100) {
3380 else 3376 rtl_writephy(tp, 0x1f, 0x0c41);
3381 rtl_w1w0_phy_ocp(tp, 0xbcc4, 0x0000, 0x0002); 3377 rtl_w1w0_phy(tp, 0x15, 0x0002, 0x0000);
3378 } else {
3379 rtl_writephy(tp, 0x1f, 0x0bcc);
3380 rtl_w1w0_phy(tp, 0x12, 0x0000, 0x0002);
3381 }
3382 3382
3383 rtl_w1w0_phy_ocp(tp, 0xa442, 0x000c, 0x0000); 3383 /* Enable PHY auto speed down */
3384 rtl_w1w0_phy_ocp(tp, 0xa4b2, 0x0004, 0x0000); 3384 rtl_writephy(tp, 0x1f, 0x0a44);
3385 rtl_w1w0_phy(tp, 0x11, 0x000c, 0x0000);
3385 3386
3386 r8168_phy_ocp_write(tp, 0xa436, 0x8012); 3387 /* EEE auto-fallback function */
3387 rtl_w1w0_phy_ocp(tp, 0xa438, 0x8000, 0x0000); 3388 rtl_writephy(tp, 0x1f, 0x0a4b);
3389 rtl_w1w0_phy(tp, 0x11, 0x0004, 0x0000);
3388 3390
3389 rtl_w1w0_phy_ocp(tp, 0xc422, 0x4000, 0x2000); 3391 /* Enable UC LPF tune function */
3392 rtl_writephy(tp, 0x1f, 0x0a43);
3393 rtl_writephy(tp, 0x13, 0x8012);
3394 rtl_w1w0_phy(tp, 0x14, 0x8000, 0x0000);
3395
3396 rtl_writephy(tp, 0x1f, 0x0c42);
3397 rtl_w1w0_phy(tp, 0x11, 0x4000, 0x2000);
3398
3399 rtl_writephy(tp, 0x1f, 0x0000);
3390} 3400}
3391 3401
3392static void rtl8102e_hw_phy_config(struct rtl8169_private *tp) 3402static void rtl8102e_hw_phy_config(struct rtl8169_private *tp)