Hi,
I am trying to take control at EL3 level and want to run my code on Juno. I am using arm-trusted-firmware package running on Juno.
In order to achieve this I am using DS-5 debugger to breakthrough the code and setting the PC to my code but instead of executing next instruction it is jumping back to some 0x400_F000 address.
I am not sure how I can achieve this ? What i simply want is to take control at EL3 level and execute my code. I believe it is possible at BL3-1 level, is it correct ?
I found example for bare-metal applications but the control transfer is happening at EL1-NS mode whereas I need EL3 level control.
Thanks,
Hi Matt,
I am facing one more issue when I use above method to change to EL3h mode. Issue is when I read the CurrentEL value I am reading back 12 which is EL3t not EL3h. I am not sure how to resolve this ? I thought if I change mode to 13 the sp should be selected to sp_el3.
Thanks
Hi armdev,
This is normal. PSTATE.CurrentEL reports the current exception level only - if you want to know if you're in EL3h vs. EL3t then you need to also read out PSTATE.SPSel (note that it is inverted compared to the bottom bit of the faux-CPSR.M field).
Matt
I am facing another issue with this approach where I see one FIQ is always pending and this causes issues when I run my Guest OS.
I tried masking FIQs at different levels but ISR_EL1 always shows FIQ interrupt pending.
It seems that FIQ is already distributed to core when I switch mode.
Is there any way when I take control at EL2 and move to EL3 but I don't have any FIQs pending ?
I also tried following the newly posted tutorial but the commands doesn't work for me so I have added my errors in "comments" section
http://community.arm.com/docs/DOC-10206#comment-14854
I am not sure if last command with AXI and masking interrupts is doing the same ?
Please let me know if there is any way to achieve this ?
Thanks.