On Mon, May 22, 2023 at 07:28:24AM +0200, Ahmad Fatoum wrote: > When MMU is enabled, barebox maintains a single address space with > 1:1 physical to virtual mapping by default. Furthermore, the zero > page is marked inaccessible to trap NULL pointer dereferences. > > This is problematic on the Qemu ARM Virt platform, because the > cfi-flash is memory mapped starting with address zero, so users need > to decide whether they want the cfi-flash or the MMU. The decision > so far, was to disable CONFIG_MMU in the Qemu Virt configs, but this > holds us back from removing these configs in favor of the new > multi_v7_defconfig/multi_v8_defconfig. > > Make everyone happy by shifting the virtual cfi-flash mapping by 4K: > > virt -> phys > > 0x0000 -> 0x0000 [faulting] > 0x1000 -> 0x0000 [(uncached) alias] > 0x2000 -> 0x1000 > . > . > . > 0x7fff000 -> 0x7ffe000 > 0x8000000 -> 0x7fff000 > > This eats one page into the memory region starting at 0x8000000. > That's ok though, because that's where the GIC is located on both > ARM32 and ARM64 and we don't do interrupts in barebox. > > This applies on top of Sascha's MMU rempping rework in next and > has been tested on both 32-bit and 64-bit QEMU ARM. Applied, thanks Sascha > > Ahmad Fatoum (11): > treewide: use remap_range instead of arch_remap_range > mmu: add physical address parameter to arch_remap_range > ARM: mmu32: support non-1:1 mappings in arch_remap_range > ARM: mmu64: support non-1:1 mappings in arch_remap_range > of: platform: remap memory when encountering virtual-reg property > common: boards: qemu-virt: remap cfi-flash from 0 to 0x1000 > ARM: prepare extending mmuinfo beyond ARMv7 > ARM64: mmu: implement ARMv8 mmuinfo command > common: memtest: prepare for reuse in self test > test: self: add MMU remapping self test > ARM: mmuinfo: add options for enabling/disabling zero page trapping > > .../bindings/barebox/virtual-reg.rst | 29 +++ > arch/arm/configs/multi_v8_defconfig | 1 + > arch/arm/cpu/Makefile | 2 +- > arch/arm/cpu/mmu-common.c | 8 +- > arch/arm/cpu/mmu_32.c | 54 ++-- > arch/arm/cpu/mmu_64.c | 18 +- > arch/arm/cpu/mmuinfo.c | 128 +++++----- > arch/arm/cpu/mmuinfo_32.c | 80 ++++++ > arch/arm/cpu/mmuinfo_64.c | 215 ++++++++++++++++ > arch/arm/include/asm/mmu.h | 2 +- > arch/arm/include/asm/mmuinfo.h | 9 + > arch/arm/include/asm/sysreg.h | 76 ++++++ > arch/powerpc/cpu-85xx/mmu.c | 7 +- > arch/powerpc/include/asm/mmu.h | 2 +- > commands/Kconfig | 8 +- > commands/memtest.c | 5 +- > common/Kconfig | 6 + > common/Makefile | 2 +- > common/boards/qemu-virt/Makefile | 3 + > common/boards/qemu-virt/overlay-of-flash.dts | 5 +- > common/memtest.c | 44 ++-- > drivers/hab/habv4.c | 2 +- > drivers/mtd/nor/cfi_flash.c | 5 +- > drivers/of/platform.c | 20 ++ > include/memtest.h | 7 +- > include/mmu.h | 19 +- > include/zero_page.h | 12 + > test/self/Kconfig | 6 + > test/self/Makefile | 1 + > test/self/mmu.c | 233 ++++++++++++++++++ > 30 files changed, 865 insertions(+), 144 deletions(-) > create mode 100644 Documentation/devicetree/bindings/barebox/virtual-reg.rst > create mode 100644 arch/arm/cpu/mmuinfo_32.c > create mode 100644 arch/arm/cpu/mmuinfo_64.c > create mode 100644 arch/arm/include/asm/mmuinfo.h > create mode 100644 arch/arm/include/asm/sysreg.h > create mode 100644 test/self/mmu.c > > -- > 2.39.2 > > > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |