[PATCH RFC v2 0/5] arm64: support DMA zone starting above 4GB

From: Baruch Siach
Date: Tue Apr 09 2024 - 02:25:53 EST


DMA zones code assumes that DMA lower limit is zero. When there is no RAM
below 4GB, arm64 platform code sets DMA/DMA32 zone limits to cover the entire
RAM[0].

The platform I have has RAM starting at 32GB. Devices with 30-bit DMA mask are
mapped to 1GB at the bottom of RAM, between 32GB - 33GB. A DMA zone over the
entire RAM breaks DMA allocation for these devices.

In response to a previous RFC hack[1] Catalin Marinas suggested to add a
separate offset value as base address for the DMA zone. This RFC series
attempts to implement that suggestion.

With this series applied, the DMA zone covers the right RAM range for my
platform.

RFC v2:

* Add patch from Catalin[2] changing zone_dma_bits to zone_dma_limit to
simplify subsequent patches

* Test on real hardware

RFC v1: https://lore.kernel.org/all/cover.1703683642.git.baruch@xxxxxxxxxx/

[0] See commit 791ab8b2e3db ("arm64: Ignore any DMA offsets in the
max_zone_phys() calculation")

[1] https://lore.kernel.org/all/9af8a19c3398e7dc09cfc1fbafed98d795d9f83e.1699464622.git.baruch@xxxxxxxxxx/

[2] https://lore.kernel.org/all/ZZ2HnHJV3gdzu1Aj@xxxxxxx/

Baruch Siach (4):
of: get dma area lower limit
of: unittest: add test for of_dma_get_cpu_limits() 'min' param
dma-direct: add base offset to zone_dma_bits
arm64: mm: take DMA zone offset into account

Catalin Marinas (1):
dma-mapping: replace zone_dma_bits by zone_dma_limit

arch/arm64/mm/init.c | 34 ++++++++++++----------------------
arch/powerpc/mm/mem.c | 9 ++++-----
arch/s390/mm/init.c | 2 +-
drivers/of/address.c | 38 +++++++++++++++++++++++++++-----------
drivers/of/unittest.c | 17 ++++++++++-------
include/linux/dma-direct.h | 3 ++-
include/linux/of.h | 11 ++++++++---
kernel/dma/direct.c | 11 ++++++-----
kernel/dma/pool.c | 2 +-
kernel/dma/swiotlb.c | 4 ++--
10 files changed, 73 insertions(+), 58 deletions(-)

--
2.43.0