[U-Boot] [PATCH] ARM: qemu-arm: Fix qemu_arm64_defconfig for QEMU 3.0

QEMU 3.0 introduced additional memory-mapped regions for PCI-E ECAM and MMIO. Thus we need to add them to our MMU map or U-Boot will crash with a Synchronous Abort during PCI-E probing when it tries to access the unmapped ECAM memory area.
Reported-by: Jonathan Gray jsg@jsg.id.au Signed-off-by: Tuomas Tynkkynen tuomas.tynkkynen@iki.fi --- board/emulation/qemu-arm/qemu-arm.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/board/emulation/qemu-arm/qemu-arm.c b/board/emulation/qemu-arm/qemu-arm.c index 1f5a33d520..812c90636d 100644 --- a/board/emulation/qemu-arm/qemu-arm.c +++ b/board/emulation/qemu-arm/qemu-arm.c @@ -17,7 +17,7 @@ static struct mm_region qemu_arm64_mem_map[] = { .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) | PTE_BLOCK_INNER_SHARE }, { - /* Peripherals */ + /* Lowmem peripherals */ .virt = 0x08000000UL, .phys = 0x08000000UL, .size = 0x38000000, @@ -31,6 +31,22 @@ static struct mm_region qemu_arm64_mem_map[] = { .size = 255UL * SZ_1G, .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) | PTE_BLOCK_INNER_SHARE + }, { + /* Highmem PCI-E ECAM memory area */ + .virt = 0x4010000000ULL, + .phys = 0x4010000000ULL, + .size = 0x10000000, + .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) | + PTE_BLOCK_NON_SHARE | + PTE_BLOCK_PXN | PTE_BLOCK_UXN + }, { + /* Highmem PCI-E MMIO memory area */ + .virt = 0x8000000000ULL, + .phys = 0x8000000000ULL, + .size = 0x8000000000ULL, + .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) | + PTE_BLOCK_NON_SHARE | + PTE_BLOCK_PXN | PTE_BLOCK_UXN }, { /* List terminator */ 0,

On Tue, Sep 04, 2018 at 06:16:52PM +0300, Tuomas Tynkkynen wrote:
QEMU 3.0 introduced additional memory-mapped regions for PCI-E ECAM and MMIO. Thus we need to add them to our MMU map or U-Boot will crash with a Synchronous Abort during PCI-E probing when it tries to access the unmapped ECAM memory area.
Reported-by: Jonathan Gray jsg@jsg.id.au Signed-off-by: Tuomas Tynkkynen tuomas.tynkkynen@iki.fi
Thanks, qemu-system-aarch64 -M virt works without having to disable highmem with this.
Tested-by: Jonathan Gray jsg@jsg.id.au
board/emulation/qemu-arm/qemu-arm.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/board/emulation/qemu-arm/qemu-arm.c b/board/emulation/qemu-arm/qemu-arm.c index 1f5a33d520..812c90636d 100644 --- a/board/emulation/qemu-arm/qemu-arm.c +++ b/board/emulation/qemu-arm/qemu-arm.c @@ -17,7 +17,7 @@ static struct mm_region qemu_arm64_mem_map[] = { .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) | PTE_BLOCK_INNER_SHARE }, {
/* Peripherals */
.virt = 0x08000000UL, .phys = 0x08000000UL, .size = 0x38000000,/* Lowmem peripherals */
@@ -31,6 +31,22 @@ static struct mm_region qemu_arm64_mem_map[] = { .size = 255UL * SZ_1G, .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) | PTE_BLOCK_INNER_SHARE
- }, {
/* Highmem PCI-E ECAM memory area */
.virt = 0x4010000000ULL,
.phys = 0x4010000000ULL,
.size = 0x10000000,
.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
PTE_BLOCK_NON_SHARE |
PTE_BLOCK_PXN | PTE_BLOCK_UXN
- }, {
/* Highmem PCI-E MMIO memory area */
.virt = 0x8000000000ULL,
.phys = 0x8000000000ULL,
.size = 0x8000000000ULL,
.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
PTE_BLOCK_NON_SHARE |
}, { /* List terminator */ 0,PTE_BLOCK_PXN | PTE_BLOCK_UXN
-- 2.16.3
U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot

On Tue, Sep 04, 2018 at 06:16:52PM +0300, Tuomas Tynkkynen wrote:
QEMU 3.0 introduced additional memory-mapped regions for PCI-E ECAM and MMIO. Thus we need to add them to our MMU map or U-Boot will crash with a Synchronous Abort during PCI-E probing when it tries to access the unmapped ECAM memory area.
Reported-by: Jonathan Gray jsg@jsg.id.au Signed-off-by: Tuomas Tynkkynen tuomas.tynkkynen@iki.fi Tested-by: Jonathan Gray jsg@jsg.id.au
Applied to u-boot/master, thanks!
participants (3)
-
Jonathan Gray
-
Tom Rini
-
Tuomas Tynkkynen