scratch to OCIMEM (out of march)

This commit is contained in:
lumia-emu
2026-09-14 00:27:02 +00:00
parent 4fcb316c99
commit 785eb934e6
2 changed files with 14 additions and 12 deletions
+9 -7
View File
@@ -753,15 +753,17 @@ static void saimaa_machine_init(MachineState *machine)
uint32_t v = 0x08006B8D; uint32_t v = 0x08006B8D;
cpu_physical_memory_write(0x080528D0, &v, 4); cpu_physical_memory_write(0x080528D0, &v, 4);
} }
/* PBL dispatcher-table fabrication (b33): retarget literal /* PBL dispatcher-table fabrication (b33, moved b37): retarget
* [0x80164F0] (image: hash blob!) to scratch struct at * literal [0x80164F0] (image: hash blob!) to scratch struct
* 0x08600200 with [0x18]=2 (ready -> dispatch). */ * at 0x08024000 (OCIMEM, out of stack-march paths!) with
* [0x18]=2 (ready -> dispatch). Was IMEM 0x08600200
* (self-executed when sp marched there!). */
{ {
uint32_t v = 0x08600200; uint32_t v = 0x08024000;
cpu_physical_memory_write(0x08600200, &v, 4); cpu_physical_memory_write(0x08024000, &v, 4);
v = 0x00000002; v = 0x00000002;
cpu_physical_memory_write(0x08600214, &v, 4); cpu_physical_memory_write(0x08024014, &v, 4);
v = 0x08600200; v = 0x08024000;
cpu_physical_memory_write(0x080164F0, &v, 4); cpu_physical_memory_write(0x080164F0, &v, 4);
} }
/* HW-ready bits (b25/b26): [0x073A100] bits 0,1,2 (SBL /* HW-ready bits (b25/b26): [0x073A100] bits 0,1,2 (SBL
+5 -5
View File
@@ -442,11 +442,11 @@ def main():
W32(0x080528D0, STUBV) W32(0x080528D0, STUBV)
# PBL dispatcher-table fabrication (b33): [0x80164F0] (literal pool, # PBL dispatcher-table fabrication (b33): [0x80164F0] (literal pool,
# image default points at hash blob!) retargeted to scratch struct # image default points at hash blob!) retargeted to scratch struct
# at 0x08600200 with [0x18]=2 (ready-flag -> world-switch dispatch; # at 0x08024000 (OCIMEM, out of stack-march paths!) with [0x18]=2
# TZ deferred via OCIMEM stub). IMEM scratch (below SBL IMEM stack). # (ready-flag -> world-switch dispatch; TZ deferred via OCIMEM stub).
W32(0x08600200, 0x08600200) W32(0x08024000, 0x08024000)
W32(0x08600214, 0x00000002) W32(0x08024014, 0x00000002)
W32(0x080164F0, 0x08600200) W32(0x080164F0, 0x08024000)
# HW-ready bit fabrication (b25): [0x073A100] bits 0,1,2 = peripheral # HW-ready bit fabrication (b25): [0x073A100] bits 0,1,2 = peripheral
# status done-bits (poll#1 checks bit2 (lsls#29), poll#2 bit1 (lsls#30), # status done-bits (poll#1 checks bit2 (lsls#29), poll#2 bit1 (lsls#30),
# post-poll gate bit0 (lsls#31)). SBL only reads it, never writes. # post-poll gate bit0 (lsls#31)). SBL only reads it, never writes.