From: Kevin Hao <kexin....@windriver.com>

There is only one simple commit 831157756e3c ("net: ethernet: ti:
am65-cpsw-nuss: cleanup DMA Channels before using them") which touched
drivers/net/ethernet/ti/am65-cpsw-nuss.c between v5.15.156 and
v5.15.157. But when merging of v5.15.157, some unrelated changes
slipped in, while the changes in 831157756e3c were lost. Drop all the
unrelated changes and restore the commit 831157756e3c back.

Signed-off-by: Kevin Hao <kexin....@windriver.com>
---
Hi Bruce,

Please help me merge this into the following two branches:
  v5.15/standard/ti-sdk-5.10/ti-j72xx
  v5.15/standard/preempt-rt/ti-sdk-5.10/ti-j72xx

 drivers/net/ethernet/ti/am65-cpsw-nuss.c | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c 
b/drivers/net/ethernet/ti/am65-cpsw-nuss.c
index c715ab6e0a00..7d1530e4228e 100644
--- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c
+++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c
@@ -56,7 +56,7 @@
 #define AM65_CPSW_MAX_PORTS    8
 
 #define AM65_CPSW_MIN_PACKET_SIZE      VLAN_ETH_ZLEN
-#define AM65_CPSW_MAX_PACKET_SIZE      (VLAN_ETH_FRAME_LEN + ETH_FCS_LEN)
+#define AM65_CPSW_MAX_PACKET_SIZE      2024
 
 #define AM65_CPSW_REG_CTL              0x004
 #define AM65_CPSW_REG_STAT_PORT_EN     0x014
@@ -1873,6 +1873,7 @@ static int am65_cpsw_nuss_init_tx_chns(struct 
am65_cpsw_common *common)
                if (tx_chn->irq < 0) {
                        dev_err(dev, "Failed to get tx dma irq %d\n",
                                tx_chn->irq);
+                       ret = tx_chn->irq ?: -ENXIO;
                        goto err;
                }
 
@@ -2275,7 +2276,8 @@ am65_cpsw_nuss_init_port_ndev(struct am65_cpsw_common 
*common, u32 port_idx)
        eth_hw_addr_set(port->ndev, port->slave.mac_addr);
 
        port->ndev->min_mtu = AM65_CPSW_MIN_PACKET_SIZE;
-       port->ndev->max_mtu = AM65_CPSW_MAX_PACKET_SIZE;
+       port->ndev->max_mtu = AM65_CPSW_MAX_PACKET_SIZE -
+                             (VLAN_ETH_HLEN + ETH_FCS_LEN);
        port->ndev->hw_features = NETIF_F_SG |
                                  NETIF_F_RXCSUM |
                                  NETIF_F_HW_CSUM |
@@ -2855,6 +2857,8 @@ static void am65_cpsw_unregister_devlink(struct 
am65_cpsw_common *common)
 
 static int am65_cpsw_nuss_register_ndevs(struct am65_cpsw_common *common)
 {
+       struct am65_cpsw_rx_chn *rx_chan = &common->rx_chns;
+       struct am65_cpsw_tx_chn *tx_chan = common->tx_chns;
        struct device *dev = common->dev;
        struct devlink_port *dl_port;
        struct am65_cpsw_port *port;
@@ -2864,6 +2868,22 @@ static int am65_cpsw_nuss_register_ndevs(struct 
am65_cpsw_common *common)
        if (ret)
                return ret;
 
+       /* The DMA Channels are not guaranteed to be in a clean state.
+        * Reset and disable them to ensure that they are back to the
+        * clean state and ready to be used.
+        */
+       for (i = 0; i < common->tx_ch_num; i++) {
+               k3_udma_glue_reset_tx_chn(tx_chan[i].tx_chn, &tx_chan[i],
+                                         am65_cpsw_nuss_tx_cleanup);
+               k3_udma_glue_disable_tx_chn(tx_chan[i].tx_chn);
+       }
+
+       for (i = 0; i < AM65_CPSW_MAX_RX_FLOWS; i++)
+               k3_udma_glue_reset_rx_chn(rx_chan->rx_chn, i, rx_chan,
+                                         am65_cpsw_nuss_rx_cleanup, !!i);
+
+       k3_udma_glue_disable_rx_chn(rx_chan->rx_chn);
+
        ret = am65_cpsw_nuss_register_devlink(common);
        if (ret)
                return ret;
-- 
2.44.0

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#13882): 
https://lists.yoctoproject.org/g/linux-yocto/message/13882
Mute This Topic: https://lists.yoctoproject.org/mt/105880592/21656
Group Owner: linux-yocto+ow...@lists.yoctoproject.org
Unsubscribe: https://lists.yoctoproject.org/g/linux-yocto/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to