From: Lorenzo Bianconi Date: Thu, 17 Oct 2024 14:01:41 +0000 (+0200) Subject: net: airoha: Reset BQL stopping the netdevice X-Git-Tag: v6.13-rc1~135^2~267 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c9f947769b77c8e8f318bfc8a0777e5d20c44d8d;p=thirdparty%2Fkernel%2Flinux.git net: airoha: Reset BQL stopping the netdevice Run airoha_qdma_cleanup_tx_queue() in ndo_stop callback in order to unmap pending skbs. Moreover, reset BQL txq state stopping the netdevice, Signed-off-by: Lorenzo Bianconi Reviewed-by: Hariprasad Kelam Message-ID: <20241017-airoha-en7581-reset-bql-v1-1-08c0c9888de5@kernel.org> Signed-off-by: Andrew Lunn --- diff --git a/drivers/net/ethernet/mediatek/airoha_eth.c b/drivers/net/ethernet/mediatek/airoha_eth.c index 21d6eed8aece5..f463a505f5bab 100644 --- a/drivers/net/ethernet/mediatek/airoha_eth.c +++ b/drivers/net/ethernet/mediatek/airoha_eth.c @@ -2342,7 +2342,7 @@ static int airoha_dev_stop(struct net_device *dev) { struct airoha_gdm_port *port = netdev_priv(dev); struct airoha_qdma *qdma = port->qdma; - int err; + int i, err; netif_tx_disable(dev); err = airoha_set_gdm_ports(qdma->eth, false); @@ -2353,6 +2353,14 @@ static int airoha_dev_stop(struct net_device *dev) GLOBAL_CFG_TX_DMA_EN_MASK | GLOBAL_CFG_RX_DMA_EN_MASK); + for (i = 0; i < ARRAY_SIZE(qdma->q_tx); i++) { + if (!qdma->q_tx[i].ndesc) + continue; + + airoha_qdma_cleanup_tx_queue(&qdma->q_tx[i]); + netdev_tx_reset_subqueue(dev, i); + } + return 0; }