c1bb1b972b945c37ce97813d48e81be5d6be9135
[openwrt/staging/xback.git] /
1 From: Rex Lu <rex.lu@mediatek.com>
2 Date: Thu, 9 Oct 2025 08:29:34 +0200
3 Subject: [PATCH] net: mtk: wed: add dma mask limitation and GFP_DMA32 for
4 device with more than 4GB DRAM
5
6 Limit tx/rx buffer address to 32-bit address space for board with more
7 than 4GB DRAM.
8
9 Fixes: 804775dfc2885 ("net: ethernet: mtk_eth_soc: add support for Wireless Ethernet Dispatch (WED)")
10 Fixes: 6757d345dd7db ("net: ethernet: mtk_wed: introduce hw_rro support for MT7988")
11 Tested-by: Daniel Pawlik <pawlik.dan@gmail.com>
12 Tested-by: Matteo Croce <teknoraver@meta.com>
13 Signed-off-by: Rex Lu <rex.lu@mediatek.com>
14 Co-developed-by: Lorenzo Bianconi <lorenzo@kernel.org>
15 Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
16 Reviewed-by: Simon Horman <horms@kernel.org>
17 Signed-off-by: David S. Miller <davem@davemloft.net>
18 ---
19
20 --- a/drivers/net/ethernet/mediatek/mtk_wed.c
21 +++ b/drivers/net/ethernet/mediatek/mtk_wed.c
22 @@ -677,7 +677,7 @@ mtk_wed_tx_buffer_alloc(struct mtk_wed_d
23 void *buf;
24 int s;
25
26 - page = __dev_alloc_page(GFP_KERNEL);
27 + page = __dev_alloc_page(GFP_KERNEL | GFP_DMA32);
28 if (!page)
29 return -ENOMEM;
30
31 @@ -800,7 +800,7 @@ mtk_wed_hwrro_buffer_alloc(struct mtk_we
32 struct page *page;
33 int s;
34
35 - page = __dev_alloc_page(GFP_KERNEL);
36 + page = __dev_alloc_page(GFP_KERNEL | GFP_DMA32);
37 if (!page)
38 return -ENOMEM;
39
40 @@ -2438,6 +2438,10 @@ mtk_wed_attach(struct mtk_wed_device *de
41 dev->version = hw->version;
42 dev->hw->pcie_base = mtk_wed_get_pcie_base(dev);
43
44 + ret = dma_set_mask_and_coherent(hw->dev, DMA_BIT_MASK(32));
45 + if (ret)
46 + goto out;
47 +
48 if (hw->eth->dma_dev == hw->eth->dev &&
49 of_dma_is_coherent(hw->eth->dev->of_node))
50 mtk_eth_set_dma_device(hw->eth, hw->dev);