xref: /rk3399_ARM-atf/bl2/aarch32/bl2_entrypoint.S (revision dfdb73f77317b1349e383c5836454db67f8643d3)
1d48c12e9SYatharth Kochar/*
2*d158d425SBoyan Karatotev * Copyright (c) 2016-2025, Arm Limited and Contributors. All rights reserved.
3d48c12e9SYatharth Kochar *
482cb2c1aSdp-arm * SPDX-License-Identifier: BSD-3-Clause
5d48c12e9SYatharth Kochar */
6d48c12e9SYatharth Kochar
7d48c12e9SYatharth Kochar#include <arch.h>
8d48c12e9SYatharth Kochar#include <asm_macros.S>
909d40e0eSAntonio Nino Diaz#include <common/bl_common.h>
10d48c12e9SYatharth Kochar
11d48c12e9SYatharth Kochar	.globl	bl2_vector_table
12d48c12e9SYatharth Kochar	.globl	bl2_entrypoint
13d48c12e9SYatharth Kochar
14d48c12e9SYatharth Kochar
15d48c12e9SYatharth Kocharvector_base bl2_vector_table
16d48c12e9SYatharth Kochar	b	bl2_entrypoint
17d48c12e9SYatharth Kochar	b	report_exception	/* Undef */
18d48c12e9SYatharth Kochar	b	report_exception	/* SVC call */
196dc5979aSYann Gautier	b	report_prefetch_abort	/* Prefetch abort */
206dc5979aSYann Gautier	b	report_data_abort	/* Data abort */
21d48c12e9SYatharth Kochar	b	report_exception	/* Reserved */
22d48c12e9SYatharth Kochar	b	report_exception	/* IRQ */
23d48c12e9SYatharth Kochar	b	report_exception	/* FIQ */
24d48c12e9SYatharth Kochar
25d48c12e9SYatharth Kochar
26d48c12e9SYatharth Kocharfunc bl2_entrypoint
27d48c12e9SYatharth Kochar	/*---------------------------------------------
28a6f340feSSoby Mathew	 * Save arguments x0 - x3 from BL1 for future
29a6f340feSSoby Mathew	 * use.
30d48c12e9SYatharth Kochar	 * ---------------------------------------------
31d48c12e9SYatharth Kochar	 */
32af61b50cSHarrison Mutai	mov	r8, r0
33af61b50cSHarrison Mutai	mov	r9, r1
34af61b50cSHarrison Mutai	mov	r10, r2
35af61b50cSHarrison Mutai	mov	r11, r3
36d48c12e9SYatharth Kochar
37d48c12e9SYatharth Kochar	/* ---------------------------------------------
38d48c12e9SYatharth Kochar	 * Set the exception vector to something sane.
39d48c12e9SYatharth Kochar	 * ---------------------------------------------
40d48c12e9SYatharth Kochar	 */
41d48c12e9SYatharth Kochar	ldr	r0, =bl2_vector_table
42d48c12e9SYatharth Kochar	stcopr	r0, VBAR
43d48c12e9SYatharth Kochar	isb
44d48c12e9SYatharth Kochar
4502b57943SJohn Tsichritzis	/* --------------------------------------------------------
4602b57943SJohn Tsichritzis	 * Enable the instruction cache - disable speculative loads
4702b57943SJohn Tsichritzis	 * --------------------------------------------------------
48d48c12e9SYatharth Kochar	 */
49d48c12e9SYatharth Kochar	ldcopr	r0, SCTLR
50d48c12e9SYatharth Kochar	orr	r0, r0, #SCTLR_I_BIT
5102b57943SJohn Tsichritzis	bic	r0, r0, #SCTLR_DSSBS_BIT
52d48c12e9SYatharth Kochar	stcopr	r0, SCTLR
53d48c12e9SYatharth Kochar	isb
54d48c12e9SYatharth Kochar
55d48c12e9SYatharth Kochar	/* ---------------------------------------------
56d48c12e9SYatharth Kochar	 * Since BL2 executes after BL1, it is assumed
57d48c12e9SYatharth Kochar	 * here that BL1 has already has done the
58d48c12e9SYatharth Kochar	 * necessary register initializations.
59d48c12e9SYatharth Kochar	 * ---------------------------------------------
60d48c12e9SYatharth Kochar	 */
61d48c12e9SYatharth Kochar
62d48c12e9SYatharth Kochar	/* ---------------------------------------------
63d48c12e9SYatharth Kochar	 * Invalidate the RW memory used by the BL2
64d48c12e9SYatharth Kochar	 * image. This includes the data and NOBITS
65d48c12e9SYatharth Kochar	 * sections. This is done to safeguard against
66d48c12e9SYatharth Kochar	 * possible corruption of this memory by dirty
67d48c12e9SYatharth Kochar	 * cache lines in a system cache as a result of
68d48c12e9SYatharth Kochar	 * use by an earlier boot loader stage.
69d48c12e9SYatharth Kochar	 * ---------------------------------------------
70d48c12e9SYatharth Kochar	 */
71d48c12e9SYatharth Kochar	ldr	r0, =__RW_START__
72d48c12e9SYatharth Kochar	ldr	r1, =__RW_END__
73d48c12e9SYatharth Kochar	sub	r1, r1, r0
74d48c12e9SYatharth Kochar	bl	inv_dcache_range
75d48c12e9SYatharth Kochar
76d48c12e9SYatharth Kochar	/* ---------------------------------------------
77d48c12e9SYatharth Kochar	 * Zero out NOBITS sections. There are 2 of them:
78d48c12e9SYatharth Kochar	 *   - the .bss section;
79d48c12e9SYatharth Kochar	 *   - the coherent memory section.
80d48c12e9SYatharth Kochar	 * ---------------------------------------------
81d48c12e9SYatharth Kochar	 */
82d48c12e9SYatharth Kochar	ldr	r0, =__BSS_START__
83fb4f511fSYann Gautier	ldr	r1, =__BSS_END__
84fb4f511fSYann Gautier	sub 	r1, r1, r0
85d48c12e9SYatharth Kochar	bl	zeromem
86d48c12e9SYatharth Kochar
87d48c12e9SYatharth Kochar#if USE_COHERENT_MEM
88d48c12e9SYatharth Kochar	ldr	r0, =__COHERENT_RAM_START__
89fb4f511fSYann Gautier	ldr	r1, =__COHERENT_RAM_END_UNALIGNED__
90fb4f511fSYann Gautier	sub 	r1, r1, r0
91d48c12e9SYatharth Kochar	bl	zeromem
92d48c12e9SYatharth Kochar#endif
93d48c12e9SYatharth Kochar
94d48c12e9SYatharth Kochar	/* --------------------------------------------
95d48c12e9SYatharth Kochar	 * Allocate a stack whose memory will be marked
96d48c12e9SYatharth Kochar	 * as Normal-IS-WBWA when the MMU is enabled.
97d48c12e9SYatharth Kochar	 * There is no risk of reading stale stack
98d48c12e9SYatharth Kochar	 * memory after enabling the MMU as only the
99d48c12e9SYatharth Kochar	 * primary cpu is running at the moment.
100d48c12e9SYatharth Kochar	 * --------------------------------------------
101d48c12e9SYatharth Kochar	 */
102d48c12e9SYatharth Kochar	bl	plat_set_my_stack
103d48c12e9SYatharth Kochar
104d48c12e9SYatharth Kochar	/* ---------------------------------------------
10551faada7SDouglas Raillard	 * Initialize the stack protector canary before
10651faada7SDouglas Raillard	 * any C code is called.
10751faada7SDouglas Raillard	 * ---------------------------------------------
10851faada7SDouglas Raillard	 */
10951faada7SDouglas Raillard#if STACK_PROTECTOR_ENABLED
11051faada7SDouglas Raillard	bl	update_stack_protector_canary
11151faada7SDouglas Raillard#endif
11251faada7SDouglas Raillard
11351faada7SDouglas Raillard	/* ---------------------------------------------
1149d93fc2fSAntonio Nino Diaz	 * Perform BL2 setup
115d48c12e9SYatharth Kochar	 * ---------------------------------------------
116d48c12e9SYatharth Kochar	 */
117af61b50cSHarrison Mutai	mov	r0, r8
118af61b50cSHarrison Mutai	mov	r1, r9
119af61b50cSHarrison Mutai	mov	r2, r10
120af61b50cSHarrison Mutai	mov	r3, r11
1219d93fc2fSAntonio Nino Diaz
122d48c12e9SYatharth Kochar	/* ---------------------------------------------
123d48c12e9SYatharth Kochar	 * Jump to main function.
124d48c12e9SYatharth Kochar	 * ---------------------------------------------
125d48c12e9SYatharth Kochar	 */
126d48c12e9SYatharth Kochar	bl	bl2_main
127d48c12e9SYatharth Kochar
128d48c12e9SYatharth Kochar	/* ---------------------------------------------
129d48c12e9SYatharth Kochar	 * Should never reach this point.
130d48c12e9SYatharth Kochar	 * ---------------------------------------------
131d48c12e9SYatharth Kochar	 */
132a806dad5SJeenu Viswambharan	no_ret	plat_panic_handler
133d48c12e9SYatharth Kochar
134d48c12e9SYatharth Kocharendfunc bl2_entrypoint
135