[PATCH v2] arm64: mm: fix DMA zone when dma-ranges is missing
Baruch Siach
baruch at tkos.co.il
Wed Aug 28 02:51:24 PDT 2024
Some platforms, like Rockchip RK3568 based Odroid M1, do not provide DMA
limits information in device-tree dma-ranges property. Still some device
drivers set DMA limit that relies on DMA zone at low 4GB memory area.
Until commit ba0fb44aed47 ("dma-mapping: replace zone_dma_bits by
zone_dma_limit"), zone_sizes_init() restricted DMA zone to low 32-bit.
Restore DMA zone 32-bit limit when the platform provides no DMA bus
limit information.
Fixes: ba0fb44aed47 ("dma-mapping: replace zone_dma_bits by zone_dma_limit")
Reported-by: Marek Szyprowski <m.szyprowski at samsung.com>
Link: https://lore.kernel.org/r/53d988b1-bdce-422a-ae4e-158f305ad703@samsung.com
Suggested-by: Robin Murphy <robin.murphy at arm.com>
Reviewed-by: Catalin Marinas <catalin.marinas at arm.com>
Signed-off-by: Baruch Siach <baruch at tkos.co.il>
---
This should go via the dma-mapping tree that contains the fixed commit.
Marek, can you test on Odroid M1? Thanks.
v2:
* Directly check whether platform provides DMA bus limit (Robin)
* Add Link tag
---
arch/arm64/mm/init.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
index bfb10969cbf0..5710129b8033 100644
--- a/arch/arm64/mm/init.c
+++ b/arch/arm64/mm/init.c
@@ -116,6 +116,9 @@ static void __init arch_reserve_crashkernel(void)
static phys_addr_t __init max_zone_phys(phys_addr_t zone_limit)
{
+ if (zone_limit == PHYS_ADDR_MAX)
+ zone_limit = U32_MAX;
+
return min(zone_limit, memblock_end_of_DRAM() - 1) + 1;
}
--
2.45.2
More information about the linux-arm-kernel
mailing list