You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.3 KiB
ArmAsm
43 lines
1.3 KiB
ArmAsm
// SPDX-License-Identifier: MIT OR Apache-2.0
|
|
//
|
|
// Copyright (c) 2021 Andre Richter <andre.o.richter@gmail.com>
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
// 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
|