xref: /rk3399_ARM-atf/bl2u/aarch32/bl2u_entrypoint.S (revision 4f2c4ecfb087dd32b277000dc1578837dee1fd71)
11bd61d0aSYatharth Kochar/*
2*6dc5979aSYann Gautier * Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved.
31bd61d0aSYatharth Kochar *
41bd61d0aSYatharth Kochar * SPDX-License-Identifier: BSD-3-Clause
51bd61d0aSYatharth Kochar */
61bd61d0aSYatharth Kochar
71bd61d0aSYatharth Kochar#include <arch.h>
81bd61d0aSYatharth Kochar#include <asm_macros.S>
909d40e0eSAntonio Nino Diaz#include <common/bl_common.h>
101bd61d0aSYatharth Kochar
111bd61d0aSYatharth Kochar	.globl	bl2u_vector_table
121bd61d0aSYatharth Kochar	.globl	bl2u_entrypoint
131bd61d0aSYatharth Kochar
141bd61d0aSYatharth Kochar
151bd61d0aSYatharth Kocharvector_base bl2u_vector_table
161bd61d0aSYatharth Kochar	b	bl2u_entrypoint
171bd61d0aSYatharth Kochar	b	report_exception	/* Undef */
181bd61d0aSYatharth Kochar	b	report_exception	/* SVC call */
19*6dc5979aSYann Gautier	b	report_prefetch_abort	/* Prefetch abort */
20*6dc5979aSYann Gautier	b	report_data_abort	/* Data abort */
211bd61d0aSYatharth Kochar	b	report_exception	/* Reserved */
221bd61d0aSYatharth Kochar	b	report_exception	/* IRQ */
231bd61d0aSYatharth Kochar	b	report_exception	/* FIQ */
241bd61d0aSYatharth Kochar
251bd61d0aSYatharth Kochar
261bd61d0aSYatharth Kocharfunc bl2u_entrypoint
271bd61d0aSYatharth Kochar	/*---------------------------------------------
281bd61d0aSYatharth Kochar	 * Save from r1 the extents of the trusted ram
291bd61d0aSYatharth Kochar	 * available to BL2U for future use.
301bd61d0aSYatharth Kochar	 * r0 is not currently used.
311bd61d0aSYatharth Kochar	 * ---------------------------------------------
321bd61d0aSYatharth Kochar	 */
331bd61d0aSYatharth Kochar	mov	r11, r1
345c2c88b5SDouglas Raillard	mov	r10, r2
351bd61d0aSYatharth Kochar
361bd61d0aSYatharth Kochar	/* ---------------------------------------------
371bd61d0aSYatharth Kochar	 * Set the exception vector to something sane.
381bd61d0aSYatharth Kochar	 * ---------------------------------------------
391bd61d0aSYatharth Kochar	 */
401bd61d0aSYatharth Kochar	ldr	r0, =bl2u_vector_table
411bd61d0aSYatharth Kochar	stcopr	r0, VBAR
421bd61d0aSYatharth Kochar	isb
431bd61d0aSYatharth Kochar
4402b57943SJohn Tsichritzis	/* --------------------------------------------------------
4502b57943SJohn Tsichritzis	 * Enable the instruction cache - disable speculative loads
4602b57943SJohn Tsichritzis	 * --------------------------------------------------------
471bd61d0aSYatharth Kochar	 */
481bd61d0aSYatharth Kochar	ldcopr	r0, SCTLR
491bd61d0aSYatharth Kochar	orr	r0, r0, #SCTLR_I_BIT
5002b57943SJohn Tsichritzis	bic	r0, r0, #SCTLR_DSSBS_BIT
511bd61d0aSYatharth Kochar	stcopr	r0, SCTLR
521bd61d0aSYatharth Kochar	isb
531bd61d0aSYatharth Kochar
541bd61d0aSYatharth Kochar	/* ---------------------------------------------
551bd61d0aSYatharth Kochar	 * Since BL2U executes after BL1, it is assumed
561bd61d0aSYatharth Kochar	 * here that BL1 has already has done the
571bd61d0aSYatharth Kochar	 * necessary register initializations.
581bd61d0aSYatharth Kochar	 * ---------------------------------------------
591bd61d0aSYatharth Kochar	 */
601bd61d0aSYatharth Kochar
611bd61d0aSYatharth Kochar	/* ---------------------------------------------
621bd61d0aSYatharth Kochar	 * Invalidate the RW memory used by the BL2U
631bd61d0aSYatharth Kochar	 * image. This includes the data and NOBITS
641bd61d0aSYatharth Kochar	 * sections. This is done to safeguard against
651bd61d0aSYatharth Kochar	 * possible corruption of this memory by dirty
661bd61d0aSYatharth Kochar	 * cache lines in a system cache as a result of
671bd61d0aSYatharth Kochar	 * use by an earlier boot loader stage.
681bd61d0aSYatharth Kochar	 * ---------------------------------------------
691bd61d0aSYatharth Kochar	 */
701bd61d0aSYatharth Kochar	ldr	r0, =__RW_START__
711bd61d0aSYatharth Kochar	ldr	r1, =__RW_END__
721bd61d0aSYatharth Kochar	sub	r1, r1, r0
731bd61d0aSYatharth Kochar	bl	inv_dcache_range
741bd61d0aSYatharth Kochar
751bd61d0aSYatharth Kochar	/* ---------------------------------------------
761bd61d0aSYatharth Kochar	 * Zero out NOBITS sections. There are 2 of them:
771bd61d0aSYatharth Kochar	 *   - the .bss section;
781bd61d0aSYatharth Kochar	 *   - the coherent memory section.
791bd61d0aSYatharth Kochar	 * ---------------------------------------------
801bd61d0aSYatharth Kochar	 */
811bd61d0aSYatharth Kochar	ldr	r0, =__BSS_START__
82fb4f511fSYann Gautier	ldr	r1, =__BSS_END__
83fb4f511fSYann Gautier	sub 	r1, r1, r0
841bd61d0aSYatharth Kochar	bl	zeromem
851bd61d0aSYatharth Kochar
861bd61d0aSYatharth Kochar	/* --------------------------------------------
871bd61d0aSYatharth Kochar	 * Allocate a stack whose memory will be marked
881bd61d0aSYatharth Kochar	 * as Normal-IS-WBWA when the MMU is enabled.
891bd61d0aSYatharth Kochar	 * There is no risk of reading stale stack
901bd61d0aSYatharth Kochar	 * memory after enabling the MMU as only the
911bd61d0aSYatharth Kochar	 * primary cpu is running at the moment.
921bd61d0aSYatharth Kochar	 * --------------------------------------------
931bd61d0aSYatharth Kochar	 */
941bd61d0aSYatharth Kochar	bl	plat_set_my_stack
951bd61d0aSYatharth Kochar
961bd61d0aSYatharth Kochar	/* ---------------------------------------------
971bd61d0aSYatharth Kochar	 * Initialize the stack protector canary before
981bd61d0aSYatharth Kochar	 * any C code is called.
991bd61d0aSYatharth Kochar	 * ---------------------------------------------
1001bd61d0aSYatharth Kochar	 */
1011bd61d0aSYatharth Kochar#if STACK_PROTECTOR_ENABLED
1021bd61d0aSYatharth Kochar	bl	update_stack_protector_canary
1031bd61d0aSYatharth Kochar#endif
1041bd61d0aSYatharth Kochar
1051bd61d0aSYatharth Kochar	/* ---------------------------------------------
1061bd61d0aSYatharth Kochar	 * Perform early platform setup & platform
1071bd61d0aSYatharth Kochar	 * specific early arch. setup e.g. mmu setup
1081bd61d0aSYatharth Kochar	 * ---------------------------------------------
1091bd61d0aSYatharth Kochar	 */
1101bd61d0aSYatharth Kochar	mov	r0, r11
1115c2c88b5SDouglas Raillard	mov	r1, r10
1121bd61d0aSYatharth Kochar	bl	bl2u_early_platform_setup
1131bd61d0aSYatharth Kochar	bl	bl2u_plat_arch_setup
1141bd61d0aSYatharth Kochar
1151bd61d0aSYatharth Kochar	/* ---------------------------------------------
1161bd61d0aSYatharth Kochar	 * Jump to main function.
1171bd61d0aSYatharth Kochar	 * ---------------------------------------------
1181bd61d0aSYatharth Kochar	 */
1191bd61d0aSYatharth Kochar	bl	bl2u_main
1201bd61d0aSYatharth Kochar
1211bd61d0aSYatharth Kochar	/* ---------------------------------------------
1221bd61d0aSYatharth Kochar	 * Should never reach this point.
1231bd61d0aSYatharth Kochar	 * ---------------------------------------------
1241bd61d0aSYatharth Kochar	 */
1251bd61d0aSYatharth Kochar	no_ret	plat_panic_handler
1261bd61d0aSYatharth Kochar
1271bd61d0aSYatharth Kocharendfunc bl2u_entrypoint
128