[U-Boot] Booting armv8 Kernel on UBoot

Rajkumar Ramasamy rajkumar.r at samsung.com
Thu Jul 21 07:14:01 CEST 2016


Hi, I did a few more debugging and wanted to share few more information which are below:

1) I think QEMU does support EL2, because, the following code is working fine.
    mov    \xreg1, #0x33ff
    msr    cptr_el2, \xreg1    /* Disable coprocessor traps to EL2 */
2) The machine is still in EL3, when its trying to write to SP_EL2. As SP_EL2 can be written from EL3 or EL2, I think there is no permission violation happening due to this.
    mrs     \xreg, CurrentEL   /* xreg is 0xc after this line*/
    mov    \xreg1, sp
    msr     sp_el2, \xreg1        /* Migrate SP */

Please correct me if I am wrong.

------- Original Message -------
Sender : Rajkumar Ramasamy<rajkumar.r at samsung.com> Technical Lead/SRI-Bangalore-IoTivity/Samsung Electronics
Date : Jul 21, 2016 09:41 (GMT+05:30)
Title : Booting armv8 Kernel on UBoot

Hi, 
I am trying to boot ARMv8 Linux kernel using U-Boot. I have built the latest mainline kernel and U-Boot for aarch64 using defconfig. I am testing this build on QEMU V2.6.0.  I have loaded the Image file at 0x80080000
    "loaded file /home/shingu/workspace/linux/linux_mainline_aarch64/arch/arm64/boot/Image from 80080000 to 80B175FF, 00A97600 bytes"
Just before transfering the control to the kernel, U-Boot is trying to switch the exception level to EL2 from EL3, since I have "-machine secure=on" in QEMU parameters. 
As soon as the stack pointer is migrated, (  mov x0, sp; msr sp_el2, x0)  there is an exception occurring, [transferring control to arch/arm/cpu/armv8/exceptions.S:102]  which is aborting the boot process with following message:
        "Synchronous Abort" handler, esr 0x02000000
        ELR:     fef7caa4
        LR:      fef7d60c
        x0 : 00000000fe6fa820 x1 : 0000000000000000
        x2 : 00000000fef94a88 x3 : 0000000000000001
        x4 : 00000000fe6fa4e0 x5 : 0000000000000020
        x6 : ffffff80ffffffc8 x7 : 0000000000000000
        x8 : 00000000fe6fa6e0 x9 : 0000000000000002
        x10: 00000000fe6fa55b x11: 0000000000000002
        x12: 0000000000000002 x13: 00000000ffffffff
        x14: 0000000083006fff x15: 00000000fef7c8e4
        x16: 00000000fef7cb68 x17: 0000000000000000
        x18: 00000000fe6fae00 x19: 00000000fefb7b40
        x20: 0000000000000000 x21: 0000000080080000
        x22: 0000000000000003 x23: 00000000fe6fe058
        x24: 0000000000000000 x25: 00000000fefb0918
        x26: 0000000000000000 x27: 00000000fef7d6d8
        x28: 00000000fe6fe080 x29: 00000000fef7d5ec
        Resetting CPU ...
        resetting ...
Can anyone please help me to understand what I am doing wrong?

The total process is in the following code: [ http://git.denx.de/?p=u-boot.git;a=blob;f=arch/arm/cpu/armv8/transition.S#l16, http://git.denx.de/?p=u-boot.git;a=blob;f=arch/arm/include/asm/macro.h#138]

Have a pleasant day! :)
With Thanks and Regards,
Rajkumar R

Have a pleasant day! :)
With Thanks and Regards,
Rajkumar R


More information about the U-Boot mailing list