| From c11447cd532b5021dc2ea90b7f63c1b51954535c Mon Sep 17 00:00:00 2001 |
| From: David Chang <dchang@suse.com> |
| Date: Wed, 27 Nov 2013 15:48:36 +0800 |
| Subject: r8169: check ALDPS bit and disable it if enabled for the 8168g |
| |
| From: David Chang <dchang@suse.com> |
| |
| [ Upstream commit 1bac1072425c86f1ac85bd5967910706677ef8b3 ] |
| |
| Windows driver will enable ALDPS function, but linux driver and firmware |
| do not have any configuration related to ALDPS function for 8168g. |
| So restart system to linux and remove the NIC cable, LAN enter ALDPS, |
| then LAN RX will be disabled. |
| |
| This issue can be easily reproduced on dual boot windows and linux |
| system with RTL_GIGA_MAC_VER_40 chip. |
| |
| Realtek said, ALDPS function can be disabled by configuring to PHY, |
| switch to page 0x0A43, reg0x10 bit2=0. |
| |
| Signed-off-by: David Chang <dchang@suse.com> |
| Acked-by: Hayes Wang <hayeswang@realtek.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/realtek/r8169.c | 5 +++++ |
| 1 file changed, 5 insertions(+) |
| |
| --- a/drivers/net/ethernet/realtek/r8169.c |
| +++ b/drivers/net/ethernet/realtek/r8169.c |
| @@ -3456,6 +3456,11 @@ static void rtl8168g_1_hw_phy_config(str |
| rtl_writephy(tp, 0x14, 0x9065); |
| rtl_writephy(tp, 0x14, 0x1065); |
| |
| + /* Check ALDPS bit, disable it if enabled */ |
| + rtl_writephy(tp, 0x1f, 0x0a43); |
| + if (rtl_readphy(tp, 0x10) & 0x0004) |
| + rtl_w1w0_phy(tp, 0x10, 0x0000, 0x0004); |
| + |
| rtl_writephy(tp, 0x1f, 0x0000); |
| } |
| |