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]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to