Target Board: DART iMX8M (A-53)
I am trying to falcon boot by jumping directly into the kernel from U-Boot SPL. I see following error
"Synchronous Abort" handler, esr 0x86000000 ELR: ffff00000893017c LR: 40aa825c x0 : 0000000040400000 x1 : 0000000040e7a000 x2 : 0000000040e7d000 x3 : 000000000000003f x4 : 0000000000000001 x5 : 00000000fcffffff x6 : 0000000034d5d91d x7 : 0000000000000711 x8 : ffff00000893017c x9 : 0000000000000000 x10: 00000032b5103510 x11: 0000000000000002 x12: 00000000ffffffff x13: 00000000ffffffff x14: 000000000000006a x15: 0000000000000790 x16: 00000000000000b7 x17: 0000000000000108 x18: 0000000000185e40 x19: 0000000040480000 x20: 0000000043000000 x21: 0000000000000000 x22: 0000000000185df0 x23: 0000000000000000 x24: 00000000007f2000 x25: 00000000007f2fa0 x26: 00000000deadbeef x27: 0000000000000000 x28: 0000000040d30018 x29: 0000000000185d70
Seems like control gets passed onto kernel. Kernel runs fine until it enables MMU and swicthes to virtual addresses. Once it jumps to VA, exception is raised which means MMU is not initialized properly.
I have tried using "armv8_switch_to_el2" instead of conventional function pointer call but it hangs. I have understood that U-Boot calls kernel in EL2 mode and U-Boot SPL is in EL3. Can I get help in changing the EL to EL2. Also, I am curious to know where in proper U-Boot is it switching to EL2 .
Thanks,
Bharat Kumar Bacha
Just figured out that U-Boot SPL calls ATF(Arm Trusted Firmware) which switches to EL2.
Hi Bharat@Embedded
Did that solve your problem?
Hi Carl, Seems like I have to call the ATF to complete EL2 init process. But It would be great if I can return to U-Boot SPL or any stub instead of proper U-Boot. Can anyone explain how the ATF knows about U-Boot?
Solved the problem. U-Boot SPL copies ATF in OCRAM, and ATF calls Kernel directly passing in the FDT address.