]> www.infradead.org Git - users/dwmw2/linux.git/commit
iommu: sun50i: allocate page tables from below 4 GiB
authorAndre Przywara <andre.przywara@arm.com>
Sun, 16 Jun 2024 22:40:53 +0000 (23:40 +0100)
committerJoerg Roedel <jroedel@suse.de>
Tue, 25 Jun 2024 12:02:46 +0000 (14:02 +0200)
commit7b9331a3ae93adfae54c6a56d23513e1f7db5dcb
tree769b72300b6e2f61f961ca8c983f2c17f902a420
parent927c70c93d929f4c2dcaf72f51b31bb7d118a51a
iommu: sun50i: allocate page tables from below 4 GiB

The Allwinner IOMMU is a strict 32-bit device, with its input addresses,
the page table root pointer as well as both level's page tables and also
the target addresses all required to be below 4GB.
The Allwinner H6 SoC only supports 32-bit worth of physical addresses
anyway, so this isn't a problem so far, but the H616 and later SoCs extend
the PA space beyond 32 bit to accommodate more DRAM.
To make sure we stay within the 32-bit PA range required by the IOMMU,
force the memory for the page tables to come from below 4GB. by using
allocations with the DMA32 flag.
Also reject any attempt to map target addresses beyond 4GB, and print a
warning to give users a hint while this fails.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Chen-Yu Tsai <wens@csie.org>
Link: https://lore.kernel.org/r/20240616224056.29159-3-andre.przywara@arm.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/sun50i-iommu.c