Commit 9b994b4a authored by Heiner Kallweit's avatar Heiner Kallweit Committed by David S. Miller

r8169: let mdio read functions return -ETIMEDOUT

In case of a timeout currently ~0 is returned. Callers often just check
whether a certain bit is set and therefore may behave incorrectly.
So let's return -ETIMEDOUT in case of a timeout.

r8168_phy_ocp_read is used in r8168g_mdio_read only, therefore we can
apply the same change.
Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6358f38c
...@@ -814,7 +814,7 @@ static void r8168_phy_ocp_write(struct rtl8169_private *tp, u32 reg, u32 data) ...@@ -814,7 +814,7 @@ static void r8168_phy_ocp_write(struct rtl8169_private *tp, u32 reg, u32 data)
rtl_udelay_loop_wait_low(tp, &rtl_ocp_gphy_cond, 25, 10); rtl_udelay_loop_wait_low(tp, &rtl_ocp_gphy_cond, 25, 10);
} }
static u16 r8168_phy_ocp_read(struct rtl8169_private *tp, u32 reg) static int r8168_phy_ocp_read(struct rtl8169_private *tp, u32 reg)
{ {
if (rtl_ocp_reg_failure(tp, reg)) if (rtl_ocp_reg_failure(tp, reg))
return 0; return 0;
...@@ -822,7 +822,7 @@ static u16 r8168_phy_ocp_read(struct rtl8169_private *tp, u32 reg) ...@@ -822,7 +822,7 @@ static u16 r8168_phy_ocp_read(struct rtl8169_private *tp, u32 reg)
RTL_W32(tp, GPHY_OCP, reg << 15); RTL_W32(tp, GPHY_OCP, reg << 15);
return rtl_udelay_loop_wait_high(tp, &rtl_ocp_gphy_cond, 25, 10) ? return rtl_udelay_loop_wait_high(tp, &rtl_ocp_gphy_cond, 25, 10) ?
(RTL_R32(tp, GPHY_OCP) & 0xffff) : ~0; (RTL_R32(tp, GPHY_OCP) & 0xffff) : -ETIMEDOUT;
} }
static void r8168_mac_ocp_write(struct rtl8169_private *tp, u32 reg, u32 data) static void r8168_mac_ocp_write(struct rtl8169_private *tp, u32 reg, u32 data)
...@@ -905,7 +905,7 @@ static int r8169_mdio_read(struct rtl8169_private *tp, int reg) ...@@ -905,7 +905,7 @@ static int r8169_mdio_read(struct rtl8169_private *tp, int reg)
RTL_W32(tp, PHYAR, 0x0 | (reg & 0x1f) << 16); RTL_W32(tp, PHYAR, 0x0 | (reg & 0x1f) << 16);
value = rtl_udelay_loop_wait_high(tp, &rtl_phyar_cond, 25, 20) ? value = rtl_udelay_loop_wait_high(tp, &rtl_phyar_cond, 25, 20) ?
RTL_R32(tp, PHYAR) & 0xffff : ~0; RTL_R32(tp, PHYAR) & 0xffff : -ETIMEDOUT;
/* /*
* According to hardware specs a 20us delay is required after read * According to hardware specs a 20us delay is required after read
...@@ -945,7 +945,7 @@ static int r8168dp_1_mdio_read(struct rtl8169_private *tp, int reg) ...@@ -945,7 +945,7 @@ static int r8168dp_1_mdio_read(struct rtl8169_private *tp, int reg)
RTL_W32(tp, EPHY_RXER_NUM, 0); RTL_W32(tp, EPHY_RXER_NUM, 0);
return rtl_udelay_loop_wait_high(tp, &rtl_ocpar_cond, 1000, 100) ? return rtl_udelay_loop_wait_high(tp, &rtl_ocpar_cond, 1000, 100) ?
RTL_R32(tp, OCPDR) & OCPDR_DATA_MASK : ~0; RTL_R32(tp, OCPDR) & OCPDR_DATA_MASK : -ETIMEDOUT;
} }
#define R8168DP_1_MDIO_ACCESS_BIT 0x00020000 #define R8168DP_1_MDIO_ACCESS_BIT 0x00020000
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment