Re: [PATCH 3/4] arm64: Default to 32-bit ZONE_DMA
From: Catalin Marinas <catalin.marinas@arm.com>
Date: 2020-10-01 17:19:28
Also in:
linux-devicetree, linux-iommu, linux-mm, lkml
From: Catalin Marinas <catalin.marinas@arm.com>
Date: 2020-10-01 17:19:28
Also in:
linux-devicetree, linux-iommu, linux-mm, lkml
On Thu, Oct 01, 2020 at 06:17:39PM +0200, Nicolas Saenz Julienne wrote:
diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index e1a69a618832..3c3f462466eb 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c@@ -43,8 +43,6 @@ #include <asm/tlb.h> #include <asm/alternative.h> -#define ARM64_ZONE_DMA_BITS 30 - /* * We need to be able to catch inadvertent references to memstart_addr * that occur (potentially in generic code) before arm64_memblock_init()@@ -388,8 +386,14 @@ void __init arm64_memblock_init(void) early_init_fdt_scan_reserved_mem(); if (IS_ENABLED(CONFIG_ZONE_DMA)) { - zone_dma_bits = ARM64_ZONE_DMA_BITS; - arm64_dma_phys_limit = max_zone_phys(ARM64_ZONE_DMA_BITS); + /* + * early_init_dt_scan() might alter zone_dma_bits based on the + * device's DT. Otherwise, have it cover the 32-bit address + * space. + */ + if (zone_dma_bits == ZONE_DMA_BITS_DEFAULT) + zone_dma_bits = 32; + arm64_dma_phys_limit = max_zone_phys(zone_dma_bits);
So here we assume that if zone_dma_bits is 24, it wasn't initialised. I think it may be simpler if we just set it in setup_machine_fdt() to 32 or 30 if RPi4. This way we don't have to depend on what the core kernel sets. -- Catalin _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel