xref: /rk3399_ARM-atf/bl2/aarch64/bl2_el3_entrypoint.S (revision 04cf04c72d403e0c057505882fac9002d39d4102)
1b1d27b48SRoberto Vargas/*
2*04cf04c7SBoyan Karatotev * Copyright (c) 2017-2025, Arm Limited and Contributors. All rights reserved.
3b1d27b48SRoberto Vargas *
4b1d27b48SRoberto Vargas * SPDX-License-Identifier: BSD-3-Clause
5b1d27b48SRoberto Vargas */
6b1d27b48SRoberto Vargas
769af7fcfSMasahiro Yamada#include <platform_def.h>
869af7fcfSMasahiro Yamada
9b1d27b48SRoberto Vargas#include <arch.h>
10b1d27b48SRoberto Vargas#include <asm_macros.S>
1109d40e0eSAntonio Nino Diaz#include <common/bl_common.h>
12b1d27b48SRoberto Vargas#include <el3_common_macros.S>
13b1d27b48SRoberto Vargas
14b1d27b48SRoberto Vargas	.globl	bl2_entrypoint
15b1d27b48SRoberto Vargas
16*04cf04c7SBoyan Karatotev#if BL2_IN_XIP_MEM || ENABLE_RME
1769af7fcfSMasahiro Yamada#define FIXUP_SIZE	0
1869af7fcfSMasahiro Yamada#else
1969af7fcfSMasahiro Yamada#define FIXUP_SIZE	((BL2_LIMIT) - (BL2_BASE))
2069af7fcfSMasahiro Yamada#endif
2169af7fcfSMasahiro Yamada
22b1d27b48SRoberto Vargasfunc bl2_entrypoint
23b1d27b48SRoberto Vargas	/* Save arguments x0-x3 from previous Boot loader */
24b1d27b48SRoberto Vargas	mov	x20, x0
25b1d27b48SRoberto Vargas	mov	x21, x1
26b1d27b48SRoberto Vargas	mov	x22, x2
27b1d27b48SRoberto Vargas	mov	x23, x3
28b1d27b48SRoberto Vargas
29b1d27b48SRoberto Vargas	el3_entrypoint_common							\
30*04cf04c7SBoyan Karatotev		_init_sctlr=RESET_TO_BL2					\
31*04cf04c7SBoyan Karatotev		_warm_boot_mailbox=!PROGRAMMABLE_RESET_ADDRESS && RESET_TO_BL2	\
32*04cf04c7SBoyan Karatotev		_secondary_cold_boot=!COLD_BOOT_SINGLE_CPU && RESET_TO_BL2	\
33*04cf04c7SBoyan Karatotev		_init_memory=RESET_TO_BL2					\
34b1d27b48SRoberto Vargas		_init_c_runtime=1						\
35da90359bSManish Pandey		_exception_vectors=bl2_el3_exceptions				\
3669af7fcfSMasahiro Yamada		_pie_fixup_size=FIXUP_SIZE
37b1d27b48SRoberto Vargas
38dcbfa11bSAntonio Nino Diaz	/* ---------------------------------------------
39b1d27b48SRoberto Vargas	 * Restore parameters of boot rom
40dcbfa11bSAntonio Nino Diaz	 * ---------------------------------------------
41b1d27b48SRoberto Vargas	 */
42b1d27b48SRoberto Vargas	mov	x0, x20
43b1d27b48SRoberto Vargas	mov	x1, x21
44b1d27b48SRoberto Vargas	mov	x2, x22
45b1d27b48SRoberto Vargas	mov	x3, x23
46b1d27b48SRoberto Vargas
47dcbfa11bSAntonio Nino Diaz	/* ---------------------------------------------
48dcbfa11bSAntonio Nino Diaz	 * Perform BL2 setup
49dcbfa11bSAntonio Nino Diaz	 * ---------------------------------------------
50dcbfa11bSAntonio Nino Diaz	 */
51*04cf04c7SBoyan Karatotev#if RESET_TO_BL2
52dcbfa11bSAntonio Nino Diaz	bl	bl2_el3_setup
53*04cf04c7SBoyan Karatotev#else
54*04cf04c7SBoyan Karatotev	bl	bl2_setup
55*04cf04c7SBoyan Karatotev#endif
56dcbfa11bSAntonio Nino Diaz
57dcbfa11bSAntonio Nino Diaz#if ENABLE_PAUTH
589fc59639SAlexei Fedorov	/* ---------------------------------------------
59ed108b56SAlexei Fedorov	 * Program APIAKey_EL1 and enable pointer authentication.
609fc59639SAlexei Fedorov	 * ---------------------------------------------
619fc59639SAlexei Fedorov	 */
62ed108b56SAlexei Fedorov	bl	pauth_init_enable_el3
63dcbfa11bSAntonio Nino Diaz#endif /* ENABLE_PAUTH */
64b1d27b48SRoberto Vargas
65b1d27b48SRoberto Vargas	/* ---------------------------------------------
66b1d27b48SRoberto Vargas	 * Jump to main function.
67b1d27b48SRoberto Vargas	 * ---------------------------------------------
68b1d27b48SRoberto Vargas	 */
69b1d27b48SRoberto Vargas	bl	bl2_main
70b1d27b48SRoberto Vargas
71b1d27b48SRoberto Vargas	/* ---------------------------------------------
72b1d27b48SRoberto Vargas	 * Should never reach this point.
73b1d27b48SRoberto Vargas	 * ---------------------------------------------
74b1d27b48SRoberto Vargas	 */
75b1d27b48SRoberto Vargas	no_ret	plat_panic_handler
76b1d27b48SRoberto Vargasendfunc bl2_entrypoint
77