The initial ID map used by ArmVirtQemu only covers 2 MiB of NOR flash, while the NOOPT build can be up to 3 MiB in size, resulting in a crash if the unmapped 1 MiB is accessed before the real page tables are up.
So increate the initial flash mapping to 4 MiB. Signed-off-by: Ard Biesheuvel <a...@kernel.org> --- ArmVirtPkg/Library/ArmPlatformLibQemu/IdMap.S | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ArmVirtPkg/Library/ArmPlatformLibQemu/IdMap.S b/ArmVirtPkg/Library/ArmPlatformLibQemu/IdMap.S index 4a4b7b77ed83..584ffcb3ebe2 100644 --- a/ArmVirtPkg/Library/ArmPlatformLibQemu/IdMap.S +++ b/ArmVirtPkg/Library/ArmPlatformLibQemu/IdMap.S @@ -15,6 +15,7 @@ .set TT_MT_MEM, (0x3 << 2) | (0x3 << 8) // MAIR #3 .set PAGE_XIP, TT_TYPE_PAGE | TT_MT_MEM | TT_AF | TT_RO | TT_NG + .set BLOCK_XIP, TT_TYPE_BLOCK | TT_MT_MEM | TT_AF | TT_RO | TT_NG .set BLOCK_DEV, TT_TYPE_BLOCK | TT_MT_DEV | TT_AF | TT_XN | TT_NG .set BLOCK_MEM, TT_TYPE_BLOCK | TT_MT_MEM | TT_AF | TT_XN | TT_NG @@ -33,7 +34,8 @@ idmap: /* level 0 */ 20: /* level 2 */ .quad 3f + TT_TYPE_TABLE // up to 2 MB of flash - .fill 63, 8, 0x0 // 126 MB of unused flash + .quad BLOCK_XIP | (0x1 << 21) // another 2 MB of flash + .fill 62, 8, 0x0 // 124 MB of unused flash .set idx, 64 .rept 448 .quad BLOCK_DEV | (idx << 21) // 896 MB of RW- device mappings -- 2.39.0 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#98979): https://edk2.groups.io/g/devel/message/98979 Mute This Topic: https://groups.io/mt/96501365/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-