[][kernel][mt7988][eth][Fix HW path traffic stuck issue on the 4GB/8GB RFB]
[Description]
Fix HW path traffic stuck issue on the 4GB/8GB RFB.
In the mtk_init_fq_dma() function, the extra SDP address (larger than
32 Bits) must be filled in the TXD3.
Without this patch, there might be a traffic stuck issue in the HW path
in HQOS/PPPQ cases on the 4GB/8GB RFB.
[Release-log]
N/A
Change-Id: If03e916ae0f0440103a65897c25aecf2e92e1f0c
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/8157296
diff --git a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index 8794512..c679247 100644
--- a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1558,6 +1558,7 @@
dma_addr_t phy_ring_tail;
int cnt = MTK_DMA_SIZE;
dma_addr_t dma_addr;
+ u64 addr64 = 0;
int i;
if (!eth->soc->has_sram) {
@@ -1597,7 +1598,10 @@
txd->txd2 = eth->phy_scratch_ring +
(i + 1) * soc->txrx.txd_size;
+ addr64 = (MTK_HAS_CAPS(eth->soc->caps, MTK_8GB_ADDRESSING)) ?
+ TX_DMA_SDP1(dma_addr + i * MTK_QDMA_PAGE_SIZE) : 0;
+
- txd->txd3 = TX_DMA_PLEN0(MTK_QDMA_PAGE_SIZE);
+ txd->txd3 = TX_DMA_PLEN0(MTK_QDMA_PAGE_SIZE) | addr64;
txd->txd4 = 0;
if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2) ||
@@ -4954,7 +4958,7 @@
err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(36));
if (!err) {
err = dma_set_coherent_mask(&pdev->dev,
- DMA_BIT_MASK(36));
+ DMA_BIT_MASK(32));
if (err) {
dev_err(&pdev->dev, "Wrong DMA config\n");
return -EINVAL;