1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
/*
* Copyright (c) 2018, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "arch.h"
#include "asm_macros.S"
#include "platform.h"
#define EOT_ASCII_CODE 4
.data
welcome_str:
.asciz "Booting the EL3 test payload\r\n"
all_cpus_booted_str:
.asciz "All CPUs booted!\r\n"
.text
.global entrypoint
func entrypoint
bl mark_cpu_presence
/* Distinguish primary from secondary CPUs */
mrs x0, mpidr_el1
ldr x1, =MPIDR_AFFINITY_MASK
and x0, x0, x1
ldr x1, =PRIMARY_CPU_MPID
cmp x0, x1
b.ne spin_forever
/*
* Only the primary CPU executes the code below
*/
adr x0, welcome_str
bl print_string
/* Wait to see each CPU */
mov x3, xzr
1:
mov x0, x3
bl is_cpu_present
cbz x0, 1b
/* Next CPU, if any */
add x3, x3, #1
mov x0, #CPUS_COUNT
cmp x3, x0
b.lt 1b
/* All CPUs have been detected, announce the good news! */
adr x0, all_cpus_booted_str
bl print_string
/* Send EOT (End of Transmission character) character over the UART */
mov x0, #EOT_ASCII_CODE
bl print_char
spin_forever:
wfe
b spin_forever
endfunc entrypoint
|