]> git.baikalelectronics.ru Git - kernel.git/commitdiff
r8152: fix the force speed doesn't work for RTL8156
authorHayes Wang <hayeswang@realtek.com>
Thu, 23 Dec 2021 09:27:01 +0000 (17:27 +0800)
committerJakub Kicinski <kuba@kernel.org>
Thu, 23 Dec 2021 17:56:06 +0000 (09:56 -0800)
It needs to set mdio force mode. Otherwise, link off always occurs when
setting force speed.

Fixes: 20d6936ad320 ("r8152: support new chips")
Signed-off-by: Hayes Wang <hayeswang@realtek.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/usb/r8152.c

index f9877a3e83acf8194a923e5dbdb129f00da202b9..a817dfd5c9eb6fa42ca1cd1a2ce740edb5cd51f5 100644 (file)
@@ -6584,6 +6584,21 @@ static bool rtl8153_in_nway(struct r8152 *tp)
                return true;
 }
 
+static void r8156_mdio_force_mode(struct r8152 *tp)
+{
+       u16 data;
+
+       /* Select force mode through 0xa5b4 bit 15
+        * 0: MDIO force mode
+        * 1: MMD force mode
+        */
+       data = ocp_reg_read(tp, 0xa5b4);
+       if (data & BIT(15)) {
+               data &= ~BIT(15);
+               ocp_reg_write(tp, 0xa5b4, data);
+       }
+}
+
 static void set_carrier(struct r8152 *tp)
 {
        struct net_device *netdev = tp->netdev;
@@ -8016,6 +8031,7 @@ static void r8156_init(struct r8152 *tp)
        ocp_data |= ACT_ODMA;
        ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_CONFIG, ocp_data);
 
+       r8156_mdio_force_mode(tp);
        rtl_tally_reset(tp);
 
        tp->coalesce = 15000;   /* 15 us */
@@ -8145,6 +8161,7 @@ static void r8156b_init(struct r8152 *tp)
        ocp_data &= ~(RX_AGG_DISABLE | RX_ZERO_EN);
        ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
 
+       r8156_mdio_force_mode(tp);
        rtl_tally_reset(tp);
 
        tp->coalesce = 15000;   /* 15 us */