// SPDX-License-Identifier: MIT OR Apache-2.0 // // Copyright (c) 2021 Andre Richter //-------------------------------------------------------------------------------------------------- // Definitions //-------------------------------------------------------------------------------------------------- .equ _core_id_mask, 0b11 //-------------------------------------------------------------------------------------------------- // Public Code //-------------------------------------------------------------------------------------------------- .section .text._start //------------------------------------------------------------------------------ // fn _start() //------------------------------------------------------------------------------ _start: // Only proceed on the boot core. Park it otherwise. mrs x1, MPIDR_EL1 and x1, x1, _core_id_mask ldr x2, BOOT_CORE_ID // provided by bsp/__board_name__/cpu.rs cmp x1, x2 b.ne 1f // If execution reaches here, it is the boot core. Now, prepare the jump to Rust code. // Set the stack pointer. ldr x0, =__boot_core_stack_end_exclusive mov sp, x0 // Jump to Rust code. b _start_rust // Infinitely wait for events (aka "park the core"). 1: wfe b 1b .size _start, . - _start .type _start, function .global _start