@@ -174,6 +174,19 @@ static phys_addr_t __init max_zone_dma32_phys(void)
return min(offset + (1ULL << 32), memblock_end_of_DRAM());
}
+static phys_addr_t __init max_zone_dma_phys(void)
+
+{
+ u64 memory_size = memblock_end_of_DRAM() - memblock_start_of_DRAM();
+ u64 zone_dma_size;
+
+ of_scan_flat_dt(early_init_dt_dma_zone_size, &zone_dma_size);
+ if (zone_dma_size && zone_dma_size < min(memory_size, SZ_4G))
+ return memblock_start_of_DRAM() + zone_dma_size;
+
+ return 0;
+}
+
#ifdef CONFIG_NUMA
static void __init zone_sizes_init(unsigned long min, unsigned long max)
Some devices might have multiple interconnects with different DMA addressing limitations. This function provides the higher physical address accessible by all peripherals on the SoC. If such limitation doesn't exist it'll return 0. Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de> --- arch/arm64/mm/init.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)