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