eth/r8152: fix the aggregation issue
authorHayes Wang <hayeswang@realtek.com>
Wed, 16 Dec 2020 09:03:23 +0000 (17:03 +0800)
committerMarek Vasut <marex@denx.de>
Wed, 16 Dec 2020 09:27:09 +0000 (10:27 +0100)
Remove the redundant setting for USB_RX_EARLY_SIZE. Besides, for
RTL8153B, it is necessary to notify the hardware of the changes
of the aggregation settings.

Signed-off-by: Hayes Wang <hayeswang@realtek.com>
drivers/usb/eth/r8152.c
drivers/usb/eth/r8152.h

index 82a05a9..5f30919 100644 (file)
@@ -447,6 +447,12 @@ static void rtl8152_set_rx_mode(struct r8152 *tp)
        ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
 }
 
+static inline void r8153b_rx_agg_chg_indicate(struct r8152 *tp)
+{
+       ocp_write_byte(tp, MCU_TYPE_USB, USB_UPT_RXDMA_OWN,
+                      OWN_UPDATE | OWN_CLEAR);
+}
+
 static int rtl_enable(struct r8152 *tp)
 {
        u32 ocp_data;
@@ -457,6 +463,15 @@ static int rtl_enable(struct r8152 *tp)
        ocp_data |= PLA_CR_RE | PLA_CR_TE;
        ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data);
 
+       switch (tp->version) {
+       case RTL_VER_08:
+       case RTL_VER_09:
+               r8153b_rx_agg_chg_indicate(tp);
+               break;
+       default:
+               break;
+       }
+
        rxdy_gated_en(tp, false);
 
        rtl8152_set_rx_mode(tp);
@@ -525,8 +540,6 @@ static void r8153_set_rx_early_size(struct r8152 *tp)
                debug("** %s Invalid Device\n", __func__);
                break;
        }
-
-       ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, ocp_data);
 }
 
 static int rtl8153_enable(struct r8152 *tp)
index fa57e42..45172c0 100644 (file)
@@ -92,6 +92,7 @@
 #define USB_PM_CTRL_STATUS     0xd432  /* RTL8153A */
 #define USB_RX_EXTRA_AGGR_TMR  0xd432  /* RTL8153B */
 #define USB_TX_DMA             0xd434
+#define USB_UPT_RXDMA_OWN      0xd437
 #define USB_TOLERANCE          0xd490
 #define USB_LPM_CTRL           0xd41a
 #define USB_BMU_RESET          0xd4b0
 #define BMU_RESET_EP_IN                0x01
 #define BMU_RESET_EP_OUT       0x02
 
+/* USB_UPT_RXDMA_OWN */
+#define OWN_UPDATE             BIT(0)
+#define OWN_CLEAR              BIT(1)
+
 /* USB_UPS_CTRL */
 #define POWER_CUT              0x0100