r8152: fix the poor throughput for 2.5G devices
authorHayes Wang <hayeswang@realtek.com>
Fri, 28 Apr 2023 08:53:30 +0000 (16:53 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 1 May 2023 06:32:04 +0000 (07:32 +0100)
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: 195aae321c82 ("r8152: support new chips")
Signed-off-by: Hayes Wang <hayeswang@realtek.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/usb/r8152.c

index afd50e9..58670a6 100644 (file)
 #define OCP_EEE_AR             0xa41a
 #define OCP_EEE_DATA           0xa41c
 #define OCP_PHY_STATUS         0xa420
+#define OCP_INTR_EN            0xa424
 #define OCP_NCTL_CFG           0xa42c
 #define OCP_POWER_CFG          0xa430
 #define OCP_EEE_CFG            0xa432
@@ -620,6 +621,9 @@ enum spd_duplex {
 #define PHY_STAT_LAN_ON                3
 #define PHY_STAT_PWRDN         5
 
+/* OCP_INTR_EN */
+#define INTR_SPEED_FORCE       BIT(3)
+
 /* OCP_NCTL_CFG */
 #define PGA_RETURN_EN          BIT(1)
 
@@ -7554,6 +7558,11 @@ static void r8156_hw_phy_cfg(struct r8152 *tp)
                                      ((swap_a & 0x1f) << 8) |
                                      ((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;
        default:
                break;
@@ -7949,6 +7958,11 @@ static void r8156b_hw_phy_cfg(struct r8152 *tp)
                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))
                return;