On Thu Nov 22, 2012 at 20:31:44 +0800, meng-qy wrote:
Memory on imx51 is starting at 0x90000000. At 0x60000000 there are pheripherals, i.e. there's no usable memory where something can be copied to (or executed).
I think we make a wrong understanding about " l4sigma0_map_iomem() " .
If you want to execute something it needs to be in the region 0x90000000-0xafffffff. A simple trick is to reduce the memory for secure side (e.g. via imx51.conf) and use the rest for NS.
Now, we use 0x90000000-0x9fffffff to run secure side, and revise the vm configuration as following: Ram_base = 0xa1000000, Ram_size = 0x4000000, // 128 MB Start_addr = Ram_base + 0x100000, // +1MB
The l4_vm_state is set as: state->pc = Start_addr; state->cpsr = 0x13; //svc state->r[0] = 0; state->r[1] = 0x84D; imx51 //arch num The NS bare app's entry is set as 0xa1100000, but we still stop at "VM run", we use some tracing
methods and find the system stop at:
// set pending events ldmia r0!, {r1} and r1, r1, #0x1c0 mcr p15, 0, r1, c12, c1, 1 // ivt.S line:954, looks like some ISR pending control.
Hmm, I wonder how it can hang/stop there.
BTW, should we write a virtual-interrupt layer to map the NS call with Secure side? I think maybe NS bare app can not visit the pheripherals address directly.
Yes, same thoughts.
Adam