mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH 00/11] ARM: qemu-virt: remap cfi-flash from 0 to 0x1000
@ 2023-05-22  5:28 Ahmad Fatoum
  2023-05-22  5:28 ` [PATCH 01/11] treewide: use remap_range instead of arch_remap_range Ahmad Fatoum
                   ` (11 more replies)
  0 siblings, 12 replies; 16+ messages in thread
From: Ahmad Fatoum @ 2023-05-22  5:28 UTC (permalink / raw)
  To: barebox; +Cc: lst, rcz

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.

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




^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2023-05-23  7:28 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-22  5:28 [PATCH 00/11] ARM: qemu-virt: remap cfi-flash from 0 to 0x1000 Ahmad Fatoum
2023-05-22  5:28 ` [PATCH 01/11] treewide: use remap_range instead of arch_remap_range Ahmad Fatoum
2023-05-22  5:28 ` [PATCH 02/11] mmu: add physical address parameter to arch_remap_range Ahmad Fatoum
2023-05-23  7:17   ` Sascha Hauer
2023-05-23  7:21     ` Ahmad Fatoum
2023-05-23  7:27       ` Sascha Hauer
2023-05-22  5:28 ` [PATCH 03/11] ARM: mmu32: support non-1:1 mappings in arch_remap_range Ahmad Fatoum
2023-05-22  5:28 ` [PATCH 04/11] ARM: mmu64: " Ahmad Fatoum
2023-05-22  5:28 ` [PATCH 05/11] of: platform: remap memory when encountering virtual-reg property Ahmad Fatoum
2023-05-22  5:28 ` [PATCH 06/11] common: boards: qemu-virt: remap cfi-flash from 0 to 0x1000 Ahmad Fatoum
2023-05-22  5:28 ` [PATCH 07/11] ARM: prepare extending mmuinfo beyond ARMv7 Ahmad Fatoum
2023-05-22  5:28 ` [PATCH 08/11] ARM64: mmu: implement ARMv8 mmuinfo command Ahmad Fatoum
2023-05-22  5:28 ` [PATCH 09/11] common: memtest: prepare for reuse in self test Ahmad Fatoum
2023-05-22  5:28 ` [PATCH 10/11] test: self: add MMU remapping " Ahmad Fatoum
2023-05-22  5:28 ` [PATCH 11/11] ARM: mmuinfo: add options for enabling/disabling zero page trapping Ahmad Fatoum
2023-05-23  7:21 ` [PATCH 00/11] ARM: qemu-virt: remap cfi-flash from 0 to 0x1000 Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox