xref: /arm-trusted-firmware/bl2/aarch64/bl2_el3_entrypoint.S (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu/*
2*91f16700Schasinglulu * Copyright (c) 2017-2021, Arm Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu *
4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu */
6*91f16700Schasinglulu
7*91f16700Schasinglulu#include <platform_def.h>
8*91f16700Schasinglulu
9*91f16700Schasinglulu#include <arch.h>
10*91f16700Schasinglulu#include <asm_macros.S>
11*91f16700Schasinglulu#include <common/bl_common.h>
12*91f16700Schasinglulu#include <el3_common_macros.S>
13*91f16700Schasinglulu
14*91f16700Schasinglulu	.globl	bl2_entrypoint
15*91f16700Schasinglulu
16*91f16700Schasinglulu#if BL2_IN_XIP_MEM
17*91f16700Schasinglulu#define FIXUP_SIZE	0
18*91f16700Schasinglulu#else
19*91f16700Schasinglulu#define FIXUP_SIZE	((BL2_LIMIT) - (BL2_BASE))
20*91f16700Schasinglulu#endif
21*91f16700Schasinglulu
22*91f16700Schasinglulufunc bl2_entrypoint
23*91f16700Schasinglulu	/* Save arguments x0-x3 from previous Boot loader */
24*91f16700Schasinglulu	mov	x20, x0
25*91f16700Schasinglulu	mov	x21, x1
26*91f16700Schasinglulu	mov	x22, x2
27*91f16700Schasinglulu	mov	x23, x3
28*91f16700Schasinglulu
29*91f16700Schasinglulu	el3_entrypoint_common                                   \
30*91f16700Schasinglulu		_init_sctlr=1                                   \
31*91f16700Schasinglulu		_warm_boot_mailbox=!PROGRAMMABLE_RESET_ADDRESS  \
32*91f16700Schasinglulu		_secondary_cold_boot=!COLD_BOOT_SINGLE_CPU      \
33*91f16700Schasinglulu		_init_memory=1                                  \
34*91f16700Schasinglulu		_init_c_runtime=1                               \
35*91f16700Schasinglulu		_exception_vectors=bl2_el3_exceptions		\
36*91f16700Schasinglulu		_pie_fixup_size=FIXUP_SIZE
37*91f16700Schasinglulu
38*91f16700Schasinglulu	/* ---------------------------------------------
39*91f16700Schasinglulu	 * Restore parameters of boot rom
40*91f16700Schasinglulu	 * ---------------------------------------------
41*91f16700Schasinglulu	 */
42*91f16700Schasinglulu	mov	x0, x20
43*91f16700Schasinglulu	mov	x1, x21
44*91f16700Schasinglulu	mov	x2, x22
45*91f16700Schasinglulu	mov	x3, x23
46*91f16700Schasinglulu
47*91f16700Schasinglulu	/* ---------------------------------------------
48*91f16700Schasinglulu	 * Perform BL2 setup
49*91f16700Schasinglulu	 * ---------------------------------------------
50*91f16700Schasinglulu	 */
51*91f16700Schasinglulu	bl	bl2_el3_setup
52*91f16700Schasinglulu
53*91f16700Schasinglulu#if ENABLE_PAUTH
54*91f16700Schasinglulu	/* ---------------------------------------------
55*91f16700Schasinglulu	 * Program APIAKey_EL1 and enable pointer authentication.
56*91f16700Schasinglulu	 * ---------------------------------------------
57*91f16700Schasinglulu	 */
58*91f16700Schasinglulu	bl	pauth_init_enable_el3
59*91f16700Schasinglulu#endif /* ENABLE_PAUTH */
60*91f16700Schasinglulu
61*91f16700Schasinglulu	/* ---------------------------------------------
62*91f16700Schasinglulu	 * Jump to main function.
63*91f16700Schasinglulu	 * ---------------------------------------------
64*91f16700Schasinglulu	 */
65*91f16700Schasinglulu	bl	bl2_main
66*91f16700Schasinglulu
67*91f16700Schasinglulu	/* ---------------------------------------------
68*91f16700Schasinglulu	 * Should never reach this point.
69*91f16700Schasinglulu	 * ---------------------------------------------
70*91f16700Schasinglulu	 */
71*91f16700Schasinglulu	no_ret	plat_panic_handler
72*91f16700Schasingluluendfunc bl2_entrypoint
73