.section ".text.boot" .global _start _start: // read cpu id, stop slave cores mrs x1, mpidr_el1 and x1, x1, #3 cbz x1, run // cpu id > 0, fallback to wait wait: wfe b wait run: // cpu id == 0 mov x20, x0 bl el2_to_el1 adrp x0, __stack_end mov sp, x0 // clear bss adr x0, __bss_start adr x1, __bss_end bl memzero mov x0, x20 bl main b wait el2_to_el1: mov x0, (1 << 31) msr hcr_el2, x0 mov x0, 0x3c5 msr spsr_el2, x0 msr elr_el2, lr eret