xref: /rk3399_ARM-atf/bl1/aarch64/bl1_entrypoint.S (revision 6c09af9f8b36cdfa1dc4d5052f7e4792f63fa88a)
14f6ad66aSAchin Gupta/*
2*6c09af9fSZelalem Aweke * Copyright (c) 2013-2021, Arm Limited and Contributors. All rights reserved.
34f6ad66aSAchin Gupta *
482cb2c1aSdp-arm * SPDX-License-Identifier: BSD-3-Clause
54f6ad66aSAchin Gupta */
64f6ad66aSAchin Gupta
7c10bd2ceSSandrine Bailleux#include <arch.h>
8*6c09af9fSZelalem Aweke#include <common/bl_common.h>
952010cc7SSandrine Bailleux#include <el3_common_macros.S>
104f6ad66aSAchin Gupta
119f98aa1aSJeenu Viswambharan	.globl	bl1_entrypoint
12*6c09af9fSZelalem Aweke	.globl	bl1_run_bl2_in_root
134f6ad66aSAchin Gupta
144f6ad66aSAchin Gupta
154f6ad66aSAchin Gupta	/* -----------------------------------------------------
169f98aa1aSJeenu Viswambharan	 * bl1_entrypoint() is the entry point into the trusted
174f6ad66aSAchin Gupta	 * firmware code when a cpu is released from warm or
184f6ad66aSAchin Gupta	 * cold reset.
194f6ad66aSAchin Gupta	 * -----------------------------------------------------
204f6ad66aSAchin Gupta	 */
214f6ad66aSAchin Gupta
220a30cf54SAndrew Thoelkefunc bl1_entrypoint
23bf031bbaSSandrine Bailleux	/* ---------------------------------------------------------------------
24bf031bbaSSandrine Bailleux	 * If the reset address is programmable then bl1_entrypoint() is
25bf031bbaSSandrine Bailleux	 * executed only on the cold boot path. Therefore, we can skip the warm
26bf031bbaSSandrine Bailleux	 * boot mailbox mechanism.
27bf031bbaSSandrine Bailleux	 * ---------------------------------------------------------------------
28bf031bbaSSandrine Bailleux	 */
2952010cc7SSandrine Bailleux	el3_entrypoint_common					\
3018f2efd6SDavid Cunado		_init_sctlr=1					\
31bf031bbaSSandrine Bailleux		_warm_boot_mailbox=!PROGRAMMABLE_RESET_ADDRESS	\
32a9bec67dSSandrine Bailleux		_secondary_cold_boot=!COLD_BOOT_SINGLE_CPU	\
3352010cc7SSandrine Bailleux		_init_memory=1					\
3452010cc7SSandrine Bailleux		_init_c_runtime=1				\
35da90359bSManish Pandey		_exception_vectors=bl1_exceptions		\
36da90359bSManish Pandey		_pie_fixup_size=0
374f6ad66aSAchin Gupta
38cd7d6b0eSAntonio Nino Diaz	/* --------------------------------------------------------------------
39cd7d6b0eSAntonio Nino Diaz	 * Perform BL1 setup
40cd7d6b0eSAntonio Nino Diaz	 * --------------------------------------------------------------------
414f6ad66aSAchin Gupta	 */
42cd7d6b0eSAntonio Nino Diaz	bl	bl1_setup
43dbad1bacSVikram Kanigiri
44ed108b56SAlexei Fedorov#if ENABLE_PAUTH
45cd7d6b0eSAntonio Nino Diaz	/* --------------------------------------------------------------------
46ed108b56SAlexei Fedorov	 * Program APIAKey_EL1 and enable pointer authentication.
47cd7d6b0eSAntonio Nino Diaz	 * --------------------------------------------------------------------
48cd7d6b0eSAntonio Nino Diaz	 */
49ed108b56SAlexei Fedorov	bl	pauth_init_enable_el3
50cd7d6b0eSAntonio Nino Diaz#endif /* ENABLE_PAUTH */
51cd7d6b0eSAntonio Nino Diaz
52cd7d6b0eSAntonio Nino Diaz	/* --------------------------------------------------------------------
53dbad1bacSVikram Kanigiri	 * Initialize platform and jump to our c-entry point
547baff11fSYatharth Kochar	 * for this type of reset.
55cd7d6b0eSAntonio Nino Diaz	 * --------------------------------------------------------------------
56dbad1bacSVikram Kanigiri	 */
57dbad1bacSVikram Kanigiri	bl	bl1_main
587baff11fSYatharth Kochar
59ed108b56SAlexei Fedorov#if ENABLE_PAUTH
60cd7d6b0eSAntonio Nino Diaz	/* --------------------------------------------------------------------
61ed108b56SAlexei Fedorov	 * Disable pointer authentication before jumping to next boot image.
62cd7d6b0eSAntonio Nino Diaz	 * --------------------------------------------------------------------
63cd7d6b0eSAntonio Nino Diaz	 */
64ed108b56SAlexei Fedorov	bl	pauth_disable_el3
65cd7d6b0eSAntonio Nino Diaz#endif /* ENABLE_PAUTH */
66cd7d6b0eSAntonio Nino Diaz
677baff11fSYatharth Kochar	/* --------------------------------------------------
687baff11fSYatharth Kochar	 * Do the transition to next boot image.
697baff11fSYatharth Kochar	 * --------------------------------------------------
707baff11fSYatharth Kochar	 */
71*6c09af9fSZelalem Aweke#if ENABLE_RME
72*6c09af9fSZelalem Aweke	b	bl1_run_bl2_in_root
73*6c09af9fSZelalem Aweke#else
747baff11fSYatharth Kochar	b	el3_exit
75*6c09af9fSZelalem Aweke#endif
768b779620SKévin Petitendfunc bl1_entrypoint
77*6c09af9fSZelalem Aweke
78*6c09af9fSZelalem Aweke	/* -----------------------------------------------------
79*6c09af9fSZelalem Aweke	 * void bl1_run_bl2_in_root();
80*6c09af9fSZelalem Aweke	 * This function runs BL2 in root/EL3 when RME is enabled.
81*6c09af9fSZelalem Aweke	 * -----------------------------------------------------
82*6c09af9fSZelalem Aweke	 */
83*6c09af9fSZelalem Aweke
84*6c09af9fSZelalem Awekefunc bl1_run_bl2_in_root
85*6c09af9fSZelalem Aweke	/* read bl2_ep_info */
86*6c09af9fSZelalem Aweke	adrp	x20, bl2_ep_info
87*6c09af9fSZelalem Aweke	add	x20, x20, :lo12:bl2_ep_info
88*6c09af9fSZelalem Aweke	ldr	x20, [x20]
89*6c09af9fSZelalem Aweke
90*6c09af9fSZelalem Aweke	/* ---------------------------------------------
91*6c09af9fSZelalem Aweke	 * MMU needs to be disabled because BL2 executes
92*6c09af9fSZelalem Aweke	 * in EL3. It will initialize the address space
93*6c09af9fSZelalem Aweke	 * according to its own requirements.
94*6c09af9fSZelalem Aweke	 * ---------------------------------------------
95*6c09af9fSZelalem Aweke	 */
96*6c09af9fSZelalem Aweke	bl	disable_mmu_icache_el3
97*6c09af9fSZelalem Aweke	tlbi	alle3
98*6c09af9fSZelalem Aweke
99*6c09af9fSZelalem Aweke	ldp	x0, x1, [x20, #ENTRY_POINT_INFO_PC_OFFSET]
100*6c09af9fSZelalem Aweke	msr	elr_el3, x0
101*6c09af9fSZelalem Aweke	msr	spsr_el3, x1
102*6c09af9fSZelalem Aweke
103*6c09af9fSZelalem Aweke	ldp	x6, x7, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x30)]
104*6c09af9fSZelalem Aweke	ldp	x4, x5, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x20)]
105*6c09af9fSZelalem Aweke	ldp	x2, x3, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x10)]
106*6c09af9fSZelalem Aweke	ldp	x0, x1, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x0)]
107*6c09af9fSZelalem Aweke	exception_return
108*6c09af9fSZelalem Awekeendfunc bl1_run_bl2_in_root
109