Hi Everyone,
I am trying to get u-boot to boot Linux on our custom PCB with an LS1046a. (U-boot v. 2018.03 - the same one used in the lsdk) The issue is that everything simply "hangs" after issuing the booti instruction. I have traced the problem down to "armv8_switch_to_el2_m" (macro.h) called from transition.S. U-boot correctly loads the address of the Linux binary into ELR_EL3, then calls eret, which should result in the processor switching to EL2 and transferring control to Linux.
Unfortunately, execution never makes it to the first instruction on the Linux binary. (At address 0x8108_0000 in DDR RAM) So the likely scenario is that u-boot is taking an exception, but I can not see any exception traps taken. A data point that I have, is the u-boot macro above is setting SCR_EL3 to the following value before the eret:
SCR_EL3_RW_AARCH64 | SCR_EL3_HCE_EN | SCR_EL3_RES1 | SCR_EL3_NS_EN
However, if I remove SCR_EL3_NS_EN and leave the other 3 flags, then I do get an immediate "Synchronous Abort" as soon as the eret is issued. This leads me to believe the issue may be related to the security manager.
Now, I do not need security on this project, so I have not configured the TZC400, nor have I loaded any security firmware. I am not sure what u-boot does with this by default, but I haven't changed any of it's default behavior.
I have 2 questions:
1. What do I need to do in order to guarantee the security manager is completely disabled and can not be responsible for the issue above?
2. Are there any other issues anyone is aware of which might be causing the behavior I am seeing?