Commit 61b0ad6f authored by Hayes Wang's avatar Hayes Wang Committed by David S. Miller

r8152: fix the poor throughput for 2.5G devices

Fix the poor throughput for 2.5G devices, when changing the speed from
auto mode to force mode. This patch is used to notify the MAC when the
mode is changed.

Fixes: 195aae32 ("r8152: support new chips")
Signed-off-by: default avatarHayes Wang <hayeswang@realtek.com>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8ceda6d5
...@@ -199,6 +199,7 @@ ...@@ -199,6 +199,7 @@
#define OCP_EEE_AR 0xa41a #define OCP_EEE_AR 0xa41a
#define OCP_EEE_DATA 0xa41c #define OCP_EEE_DATA 0xa41c
#define OCP_PHY_STATUS 0xa420 #define OCP_PHY_STATUS 0xa420
#define OCP_INTR_EN 0xa424
#define OCP_NCTL_CFG 0xa42c #define OCP_NCTL_CFG 0xa42c
#define OCP_POWER_CFG 0xa430 #define OCP_POWER_CFG 0xa430
#define OCP_EEE_CFG 0xa432 #define OCP_EEE_CFG 0xa432
...@@ -620,6 +621,9 @@ enum spd_duplex { ...@@ -620,6 +621,9 @@ enum spd_duplex {
#define PHY_STAT_LAN_ON 3 #define PHY_STAT_LAN_ON 3
#define PHY_STAT_PWRDN 5 #define PHY_STAT_PWRDN 5
/* OCP_INTR_EN */
#define INTR_SPEED_FORCE BIT(3)
/* OCP_NCTL_CFG */ /* OCP_NCTL_CFG */
#define PGA_RETURN_EN BIT(1) #define PGA_RETURN_EN BIT(1)
...@@ -7554,6 +7558,11 @@ static void r8156_hw_phy_cfg(struct r8152 *tp) ...@@ -7554,6 +7558,11 @@ static void r8156_hw_phy_cfg(struct r8152 *tp)
((swap_a & 0x1f) << 8) | ((swap_a & 0x1f) << 8) |
((swap_a >> 8) & 0x1f)); ((swap_a >> 8) & 0x1f));
} }
/* Notify the MAC when the speed is changed to force mode. */
data = ocp_reg_read(tp, OCP_INTR_EN);
data |= INTR_SPEED_FORCE;
ocp_reg_write(tp, OCP_INTR_EN, data);
break; break;
default: default:
break; break;
...@@ -7949,6 +7958,11 @@ static void r8156b_hw_phy_cfg(struct r8152 *tp) ...@@ -7949,6 +7958,11 @@ static void r8156b_hw_phy_cfg(struct r8152 *tp)
break; break;
} }
/* Notify the MAC when the speed is changed to force mode. */
data = ocp_reg_read(tp, OCP_INTR_EN);
data |= INTR_SPEED_FORCE;
ocp_reg_write(tp, OCP_INTR_EN, data);
if (rtl_phy_patch_request(tp, true, true)) if (rtl_phy_patch_request(tp, true, true))
return; return;
......
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