Hello experts,
In my project I need to write some bare metal code in order to boot my software (A VxWorks image), and would like to make the absolute minimum configurations before loading the VxWorks image, which then does the major part of the configurations.
I'm running on a Cortex A53, specifically on an LS1043ARDB board.
After POR I'm in S.EL3 of course, in which I configure all the SCTLR VBAR and SCR registers (I also initilze the RAM controller of course). I leave cache disabled as the VxWorks image will afterwards take care of cache settings.
After jumping to the VxWorks code, it will come up just fine, do the settings and bring itself to NS.EL1, then at some point it makes an smc #0 call in order to use some secure world functionality. Now instead of being vectored to EL3 offset 0x400 ("sync from lower level with current level sp") as expected, it stays in NS.EL1. and is vectored to offset 0 in the vector table which is the "sync with sp0" entry.
If I use U-Boot for boot loading my image all is fine and dandy, so appearantly U-Boot is doing something I don't.
Can anyone please help and let me know if I'm missing any configuration? Is there anything that needs to be configured in order for the CPU to be able to take an exception from NS.EL1 to EL3 via an smc call?
Thanks in advance.
Also a digression to "appearantly U-Boot is doing something I don't.". Probably you have 3x BootLoaders (Uboot, SPL Uboot and ATF/Secure Monitor) if I can refer to Secure Monitor as a BootLoader as it services the system throughout the system life through SMC calls. Typically the bare minimum in EL3 is PSCI services.
What usually happens during the system boot-up is SPL Uboot passes execution to Secure Monitor that sets up the SMC services and exception returns ERET to Uboot switching the system from EL3, secure to EL2, non-secure.
If I don't want or have Secure Monitor then I do the system switch from EL3 to EL2 with the macro I pasted below. However without System Monitor the kernel to release the remaining CPUs (if you have > 1) out of the reset needs to go with "spin-table" in contrast to "psci"