Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: mtk: wed: add dma mask limitation and GFP_DMA32 for device with more than 4GB DRAM

Limit tx/rx buffer address to 32-bit address space for board with more
than 4GB DRAM.

Fixes: 804775dfc2885 ("net: ethernet: mtk_eth_soc: add support for Wireless Ethernet Dispatch (WED)")
Fixes: 6757d345dd7db ("net: ethernet: mtk_wed: introduce hw_rro support for MT7988")
Tested-by: Daniel Pawlik <pawlik.dan@gmail.com>
Tested-by: Matteo Croce <teknoraver@meta.com>
Signed-off-by: Rex Lu <rex.lu@mediatek.com>
Co-developed-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Rex Lu and committed by
David S. Miller
3abc0e55 d5d790ba

+6 -2
+6 -2
drivers/net/ethernet/mediatek/mtk_wed.c
··· 677 677 void *buf; 678 678 int s; 679 679 680 - page = __dev_alloc_page(GFP_KERNEL); 680 + page = __dev_alloc_page(GFP_KERNEL | GFP_DMA32); 681 681 if (!page) 682 682 return -ENOMEM; 683 683 ··· 800 800 struct page *page; 801 801 int s; 802 802 803 - page = __dev_alloc_page(GFP_KERNEL); 803 + page = __dev_alloc_page(GFP_KERNEL | GFP_DMA32); 804 804 if (!page) 805 805 return -ENOMEM; 806 806 ··· 2425 2425 dev->wdma_idx = hw->index; 2426 2426 dev->version = hw->version; 2427 2427 dev->hw->pcie_base = mtk_wed_get_pcie_base(dev); 2428 + 2429 + ret = dma_set_mask_and_coherent(hw->dev, DMA_BIT_MASK(32)); 2430 + if (ret) 2431 + goto out; 2428 2432 2429 2433 if (hw->eth->dma_dev == hw->eth->dev && 2430 2434 of_dma_is_coherent(hw->eth->dev->of_node))