From 833bd284a45448f04ab9fcd4fdf7ef594d458eed Mon Sep 17 00:00:00 2001 From: Baruch Siach Date: Wed, 28 Aug 2024 12:51:24 +0300 Subject: [PATCH] arm64: mm: fix DMA zone when dma-ranges is missing 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 Link: https://lore.kernel.org/r/53d988b1-bdce-422a-ae4e-158f305ad703@samsung.com Suggested-by: Robin Murphy Signed-off-by: Baruch Siach Reviewed-by: Catalin Marinas Tested-by: Marek Szyprowski Signed-off-by: Christoph Hellwig --- 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.25.1