* [PATCH net 1/2] net: ethernet: mtk_eth_soc: reset all TX queues on DMA free
@ 2025-05-03 15:24 Daniel Golle
2025-05-03 15:24 ` [PATCH net 2/2] net: mediatek: do not reset PSE when seting FE register Daniel Golle
2025-05-03 17:14 ` [PATCH net 1/2] net: ethernet: mtk_eth_soc: reset all TX queues on DMA free Lorenzo Bianconi
0 siblings, 2 replies; 3+ messages in thread
From: Daniel Golle @ 2025-05-03 15:24 UTC (permalink / raw)
To: Felix Fietkau, Sean Wang, Lorenzo Bianconi, Andrew Lunn,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Matthias Brugger, AngeloGioacchino Del Regno, Elad Yifee, netdev,
linux-kernel, linux-arm-kernel, linux-mediatek
The purpose of resetting the TX queue is to reset the
byte and packet count as well as to clear the software
flow control XOFF bit.
MediaTek developers pointed out that netdev_reset_queue would only
resets queue 0 of the network device.
Queues that are not reset may cause unexpected issues.
Packets may stop being sent after reset and "transmit timeout" log may
be displayed.
Import fix from MediaTek's SDK to resolve this issue.
Link: https://git01.mediatek.com/plugins/gitiles/openwrt/feeds/mtk-openwrt-feeds/+/319c0d9905579a46dc448579f892f364f1f84818
Fixes: f63959c7eec31 ("net: ethernet: mtk_eth_soc: implement multi-queue support for per-port queues")
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
---
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index 217355d79bbb7..d6d4c2daebab0 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -3274,11 +3274,19 @@ static int mtk_dma_init(struct mtk_eth *eth)
static void mtk_dma_free(struct mtk_eth *eth)
{
const struct mtk_soc_data *soc = eth->soc;
- int i;
+ int i, j, txqs = 1;
+
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
+ txqs = MTK_QDMA_NUM_QUEUES;
+
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
+ if (!eth->netdev[i])
+ continue;
+
+ for (j = 0; j < txqs; j++)
+ netdev_tx_reset_queue(netdev_get_tx_queue(eth->netdev[i], j));
+ }
- for (i = 0; i < MTK_MAX_DEVS; i++)
- if (eth->netdev[i])
- netdev_reset_queue(eth->netdev[i]);
if (!MTK_HAS_CAPS(soc->caps, MTK_SRAM) && eth->scratch_ring) {
dma_free_coherent(eth->dma_dev,
MTK_QDMA_RING_SIZE * soc->tx.desc_size,
--
2.49.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH net 2/2] net: mediatek: do not reset PSE when seting FE register
2025-05-03 15:24 [PATCH net 1/2] net: ethernet: mtk_eth_soc: reset all TX queues on DMA free Daniel Golle
@ 2025-05-03 15:24 ` Daniel Golle
2025-05-03 17:14 ` [PATCH net 1/2] net: ethernet: mtk_eth_soc: reset all TX queues on DMA free Lorenzo Bianconi
1 sibling, 0 replies; 3+ messages in thread
From: Daniel Golle @ 2025-05-03 15:24 UTC (permalink / raw)
To: Felix Fietkau, Sean Wang, Lorenzo Bianconi, Andrew Lunn,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Matthias Brugger, AngeloGioacchino Del Regno, Elad Yifee, netdev,
linux-kernel, linux-arm-kernel, linux-mediatek
From: Frank Wunderlich <frank-w@public-files.de>
Remove redundant PSE reset.
When setting FE register there is no need to reset PSE,
doing so may cause FE to work abnormal.
Link: https://git01.mediatek.com/plugins/gitiles/openwrt/feeds/mtk-openwrt-feeds/+/3a5223473e086a4b54a2b9a44df7d9ddcc2bc75a
Fixes: dee4dd10c79aa ("net: ethernet: mtk_eth_soc: ppe: add support for multiple PPEs")
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
---
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index d6d4c2daebab0..6b5f36ccb3fec 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -3561,9 +3561,6 @@ static int mtk_open(struct net_device *dev)
}
mtk_gdm_config(eth, target_mac->id, gdm_config);
}
- /* Reset and enable PSE */
- mtk_w32(eth, RST_GL_PSE, MTK_RST_GL);
- mtk_w32(eth, 0, MTK_RST_GL);
napi_enable(ð->tx_napi);
napi_enable(ð->rx_napi);
--
2.49.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH net 1/2] net: ethernet: mtk_eth_soc: reset all TX queues on DMA free
2025-05-03 15:24 [PATCH net 1/2] net: ethernet: mtk_eth_soc: reset all TX queues on DMA free Daniel Golle
2025-05-03 15:24 ` [PATCH net 2/2] net: mediatek: do not reset PSE when seting FE register Daniel Golle
@ 2025-05-03 17:14 ` Lorenzo Bianconi
1 sibling, 0 replies; 3+ messages in thread
From: Lorenzo Bianconi @ 2025-05-03 17:14 UTC (permalink / raw)
To: Daniel Golle
Cc: Felix Fietkau, Sean Wang, Andrew Lunn, David S. Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni, Matthias Brugger,
AngeloGioacchino Del Regno, Elad Yifee, netdev, linux-kernel,
linux-arm-kernel, linux-mediatek
[-- Attachment #1: Type: text/plain, Size: 2027 bytes --]
> The purpose of resetting the TX queue is to reset the
> byte and packet count as well as to clear the software
> flow control XOFF bit.
>
> MediaTek developers pointed out that netdev_reset_queue would only
> resets queue 0 of the network device.
>
> Queues that are not reset may cause unexpected issues.
>
> Packets may stop being sent after reset and "transmit timeout" log may
> be displayed.
>
> Import fix from MediaTek's SDK to resolve this issue.
>
> Link: https://git01.mediatek.com/plugins/gitiles/openwrt/feeds/mtk-openwrt-feeds/+/319c0d9905579a46dc448579f892f364f1f84818
> Fixes: f63959c7eec31 ("net: ethernet: mtk_eth_soc: implement multi-queue support for per-port queues")
> Signed-off-by: Daniel Golle <daniel@makrotopia.org>
> ---
> drivers/net/ethernet/mediatek/mtk_eth_soc.c | 16 ++++++++++++----
> 1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
> index 217355d79bbb7..d6d4c2daebab0 100644
> --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
> +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
> @@ -3274,11 +3274,19 @@ static int mtk_dma_init(struct mtk_eth *eth)
> static void mtk_dma_free(struct mtk_eth *eth)
> {
> const struct mtk_soc_data *soc = eth->soc;
> - int i;
> + int i, j, txqs = 1;
> +
> + if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
> + txqs = MTK_QDMA_NUM_QUEUES;
> +
> + for (i = 0; i < MTK_MAX_DEVS; i++) {
> + if (!eth->netdev[i])
> + continue;
> +
> + for (j = 0; j < txqs; j++)
> + netdev_tx_reset_queue(netdev_get_tx_queue(eth->netdev[i], j));
nit: you can use netdev_tx_reset_subqueue() here.
Regards,
Lorenzo
> + }
>
> - for (i = 0; i < MTK_MAX_DEVS; i++)
> - if (eth->netdev[i])
> - netdev_reset_queue(eth->netdev[i]);
> if (!MTK_HAS_CAPS(soc->caps, MTK_SRAM) && eth->scratch_ring) {
> dma_free_coherent(eth->dma_dev,
> MTK_QDMA_RING_SIZE * soc->tx.desc_size,
> --
> 2.49.0
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-05-03 17:16 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-03 15:24 [PATCH net 1/2] net: ethernet: mtk_eth_soc: reset all TX queues on DMA free Daniel Golle
2025-05-03 15:24 ` [PATCH net 2/2] net: mediatek: do not reset PSE when seting FE register Daniel Golle
2025-05-03 17:14 ` [PATCH net 1/2] net: ethernet: mtk_eth_soc: reset all TX queues on DMA free Lorenzo Bianconi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox