1b1d27b48SRoberto Vargas/* 2f461fe34SAnthony Steinhauser * Copyright (c) 2017-2020, ARM Limited and Contributors. All rights reserved. 3b1d27b48SRoberto Vargas * 4b1d27b48SRoberto Vargas * SPDX-License-Identifier: BSD-3-Clause 5b1d27b48SRoberto Vargas */ 6b1d27b48SRoberto Vargas 7*69af7fcfSMasahiro Yamada#include <platform_def.h> 8*69af7fcfSMasahiro Yamada 9b1d27b48SRoberto Vargas#include <arch.h> 10b1d27b48SRoberto Vargas#include <asm_macros.S> 1109d40e0eSAntonio Nino Diaz#include <common/bl_common.h> 12b1d27b48SRoberto Vargas#include <el3_common_macros.S> 13b1d27b48SRoberto Vargas 14b1d27b48SRoberto Vargas .globl bl2_entrypoint 15b1d27b48SRoberto Vargas .globl bl2_el3_run_image 16b1d27b48SRoberto Vargas .globl bl2_run_next_image 17b1d27b48SRoberto Vargas 18*69af7fcfSMasahiro Yamada#if BL2_IN_XIP_MEM 19*69af7fcfSMasahiro Yamada#define FIXUP_SIZE 0 20*69af7fcfSMasahiro Yamada#else 21*69af7fcfSMasahiro Yamada#define FIXUP_SIZE ((BL2_LIMIT) - (BL2_BASE)) 22*69af7fcfSMasahiro Yamada#endif 23*69af7fcfSMasahiro Yamada 24b1d27b48SRoberto Vargasfunc bl2_entrypoint 25b1d27b48SRoberto Vargas /* Save arguments x0-x3 from previous Boot loader */ 26b1d27b48SRoberto Vargas mov x20, x0 27b1d27b48SRoberto Vargas mov x21, x1 28b1d27b48SRoberto Vargas mov x22, x2 29b1d27b48SRoberto Vargas mov x23, x3 30b1d27b48SRoberto Vargas 31b1d27b48SRoberto Vargas el3_entrypoint_common \ 32b1d27b48SRoberto Vargas _init_sctlr=1 \ 33b1d27b48SRoberto Vargas _warm_boot_mailbox=!PROGRAMMABLE_RESET_ADDRESS \ 34b1d27b48SRoberto Vargas _secondary_cold_boot=!COLD_BOOT_SINGLE_CPU \ 35b1d27b48SRoberto Vargas _init_memory=1 \ 36b1d27b48SRoberto Vargas _init_c_runtime=1 \ 37da90359bSManish Pandey _exception_vectors=bl2_el3_exceptions \ 38*69af7fcfSMasahiro Yamada _pie_fixup_size=FIXUP_SIZE 39b1d27b48SRoberto Vargas 40dcbfa11bSAntonio Nino Diaz /* --------------------------------------------- 41b1d27b48SRoberto Vargas * Restore parameters of boot rom 42dcbfa11bSAntonio Nino Diaz * --------------------------------------------- 43b1d27b48SRoberto Vargas */ 44b1d27b48SRoberto Vargas mov x0, x20 45b1d27b48SRoberto Vargas mov x1, x21 46b1d27b48SRoberto Vargas mov x2, x22 47b1d27b48SRoberto Vargas mov x3, x23 48b1d27b48SRoberto Vargas 49dcbfa11bSAntonio Nino Diaz /* --------------------------------------------- 50dcbfa11bSAntonio Nino Diaz * Perform BL2 setup 51dcbfa11bSAntonio Nino Diaz * --------------------------------------------- 52dcbfa11bSAntonio Nino Diaz */ 53dcbfa11bSAntonio Nino Diaz bl bl2_el3_setup 54dcbfa11bSAntonio Nino Diaz 55dcbfa11bSAntonio Nino Diaz#if ENABLE_PAUTH 569fc59639SAlexei Fedorov /* --------------------------------------------- 57ed108b56SAlexei Fedorov * Program APIAKey_EL1 and enable pointer authentication. 589fc59639SAlexei Fedorov * --------------------------------------------- 599fc59639SAlexei Fedorov */ 60ed108b56SAlexei Fedorov bl pauth_init_enable_el3 61dcbfa11bSAntonio Nino Diaz#endif /* ENABLE_PAUTH */ 62b1d27b48SRoberto Vargas 63b1d27b48SRoberto Vargas /* --------------------------------------------- 64b1d27b48SRoberto Vargas * Jump to main function. 65b1d27b48SRoberto Vargas * --------------------------------------------- 66b1d27b48SRoberto Vargas */ 67b1d27b48SRoberto Vargas bl bl2_main 68b1d27b48SRoberto Vargas 69b1d27b48SRoberto Vargas /* --------------------------------------------- 70b1d27b48SRoberto Vargas * Should never reach this point. 71b1d27b48SRoberto Vargas * --------------------------------------------- 72b1d27b48SRoberto Vargas */ 73b1d27b48SRoberto Vargas no_ret plat_panic_handler 74b1d27b48SRoberto Vargasendfunc bl2_entrypoint 75b1d27b48SRoberto Vargas 76b1d27b48SRoberto Vargasfunc bl2_run_next_image 77b1d27b48SRoberto Vargas mov x20,x0 78dcbfa11bSAntonio Nino Diaz /* --------------------------------------------- 79b1d27b48SRoberto Vargas * MMU needs to be disabled because both BL2 and BL31 execute 80b1d27b48SRoberto Vargas * in EL3, and therefore share the same address space. 81b1d27b48SRoberto Vargas * BL31 will initialize the address space according to its 82b1d27b48SRoberto Vargas * own requirement. 83dcbfa11bSAntonio Nino Diaz * --------------------------------------------- 84b1d27b48SRoberto Vargas */ 85b1d27b48SRoberto Vargas bl disable_mmu_icache_el3 86b1d27b48SRoberto Vargas tlbi alle3 87b1d27b48SRoberto Vargas bl bl2_el3_plat_prepare_exit 88b1d27b48SRoberto Vargas 89ed108b56SAlexei Fedorov#if ENABLE_PAUTH 90dcbfa11bSAntonio Nino Diaz /* --------------------------------------------- 91ed108b56SAlexei Fedorov * Disable pointer authentication before jumping 92ed108b56SAlexei Fedorov * to next boot image. 93dcbfa11bSAntonio Nino Diaz * --------------------------------------------- 94dcbfa11bSAntonio Nino Diaz */ 95ed108b56SAlexei Fedorov bl pauth_disable_el3 96dcbfa11bSAntonio Nino Diaz#endif /* ENABLE_PAUTH */ 97dcbfa11bSAntonio Nino Diaz 98b1d27b48SRoberto Vargas ldp x0, x1, [x20, #ENTRY_POINT_INFO_PC_OFFSET] 99b1d27b48SRoberto Vargas msr elr_el3, x0 100b1d27b48SRoberto Vargas msr spsr_el3, x1 101b1d27b48SRoberto Vargas 102b1d27b48SRoberto Vargas ldp x6, x7, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x30)] 103b1d27b48SRoberto Vargas ldp x4, x5, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x20)] 104b1d27b48SRoberto Vargas ldp x2, x3, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x10)] 105b1d27b48SRoberto Vargas ldp x0, x1, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x0)] 106f461fe34SAnthony Steinhauser exception_return 107b1d27b48SRoberto Vargasendfunc bl2_run_next_image 108