Page MenuHomePhabricator

Bl1aarch64bl1 Entrypointsvsplatarmboardfvp Rfvp R Bl1 Entrypoints
Updated 1,249 Days AgoPublic

/*                                                            /*
 * Copyright (c) 2013-2021, ARM Limited and Contributors.  |   * Copyright (c) 2021, ARM Limited and Contributors. All r
 *                                                             *
 * SPDX-License-Identifier: BSD-3-Clause                       * SPDX-License-Identifier: BSD-3-Clause
 */                                                            */

#include <arch.h>                                             #include <arch.h>
                                                           >  #include <asm_macros.S>
                                                           >  #include <common/bl_common.h>
#include <el_max_common_macros.S>                             #include <el_max_common_macros.S>
                                                           >  #include <lib/xlat_mpu/xlat_mpu.h>

        .globl  bl1_entrypoint                                        .globl  bl1_entrypoint
                                                           >          .globl  bl1_run_next_image


        /* -----------------------------------------------            /* -----------------------------------------------
         * bl1_entrypoint() is the entry point into the tr             * bl1_entrypoint() is the entry point into the tr
         * firmware code when a cpu is released from warm              * firmware code when a cpu is released from warm 
         * cold reset.                                                 * cold reset.
         * -----------------------------------------------             * -----------------------------------------------
         */                                                            */

func bl1_entrypoint                                           func bl1_entrypoint
        /* -----------------------------------------------            /* -----------------------------------------------
         * If the reset address is programmable then bl1_e             * If the reset address is programmable then bl1_e
         * executed only on the cold boot path. Therefore,             * executed only on the cold boot path. Therefore,
         * boot mailbox mechanism.                                     * boot mailbox mechanism.
         * -----------------------------------------------             * -----------------------------------------------
         */                                                            */
        el_max_entrypoint_common                                      el_max_entrypoint_common                          
                _init_sctlr=1                                                 _init_sctlr=1                             
                _warm_boot_mailbox=!PROGRAMMABLE_RESET_ADD                    _warm_boot_mailbox=!PROGRAMMABLE_RESET_ADD
                _secondary_cold_boot=!COLD_BOOT_SINGLE_CPU                    _secondary_cold_boot=!COLD_BOOT_SINGLE_CPU
                _init_memory=1                                                _init_memory=1                            
                _init_c_runtime=1                                             _init_c_runtime=1                         
                _exception_vectors=bl1_exceptions                             _exception_vectors=bl1_exceptions         
                _pie_fixup_size=0                                             _pie_fixup_size=0                         
                _el_max=3                                  |                  _el_max=2

        /* -----------------------------------------------            /* -----------------------------------------------
         * Perform BL1 setup                                           * Perform BL1 setup
         * -----------------------------------------------             * -----------------------------------------------
         */                                                            */
        bl      bl1_setup                                             bl      bl1_setup

#if ENABLE_PAUTH                                              #if ENABLE_PAUTH
        /* -----------------------------------------------            /* -----------------------------------------------
         * Program APIAKey_EL1 and enable pointer authenti             * Program APIAKey_EL1 and enable pointer authenti
         * -----------------------------------------------             * -----------------------------------------------
         */                                                            */
        bl      pauth_init_enable_el3                      |          bl      pauth_init_enable_el2
#endif /* ENABLE_PAUTH */                                     #endif /* ENABLE_PAUTH */

        /* -----------------------------------------------            /* -----------------------------------------------
         * Initialize platform and jump to our c-entry poi             * Initialize platform and jump to our c-entry poi
         * for this type of reset.                                     * for this type of reset.
         * -----------------------------------------------             * -----------------------------------------------
         */                                                            */
        bl      bl1_main                                              bl      bl1_main

                                                           >          /* ---------------------------------------------
                                                           >           * Should never reach this point.
                                                           >           * ---------------------------------------------
                                                           >           */
                                                           >          no_ret  plat_panic_handler
                                                           >  endfunc bl1_entrypoint
                                                           >
                                                           >  func bl1_run_next_image
                                                           >          mov     x20,x0
                                                           >
                                                           >          /* ---------------------------------------------
                                                           >           * MPU needs to be disabled because both BL1 and B
                                                           >           * in EL2, and therefore share the same address sp
                                                           >           * BL33 will initialize the address space accordin
                                                           >           * own requirement.
                                                           >           * ---------------------------------------------
                                                           >           */
                                                           >          bl      disable_mpu_icache_el2
                                                           >
                                                           >          /* ---------------------------------------------
                                                           >           * Wipe clean and disable all MPU regions.  This f
                                                           >           * that the MPU has already been turned off, and c
                                                           >           * addressed, but it also explicitly turns off the
                                                           >           * ---------------------------------------------
                                                           >           */
                                                           >          bl      clear_all_mpu_regions
                                                           >
#if ENABLE_PAUTH                                              #if ENABLE_PAUTH
        /* ----------------------------------------------- |          /* ---------------------------------------------
         * Disable pointer authentication before jumping t |           * Disable pointer authentication before jumping
         * ----------------------------------------------- |           * to next boot image.
                                                           >           * ---------------------------------------------
         */                                                            */
        bl      pauth_disable_el3                          |          bl      pauth_disable_el2
#endif /* ENABLE_PAUTH */                                     #endif /* ENABLE_PAUTH */

        /* ----------------------------------------------- |          ldp     x0, x1, [x20, #ENTRY_POINT_INFO_PC_OFFSET]
         * Do the transition to next boot image.           |          msr     elr_el2, x0
         * ----------------------------------------------- |          msr     spsr_el2, x1
         */                                                |
        b       el3_exit                                   |          ldp     x6, x7, [x20, #(ENTRY_POINT_INFO_ARGS_OFFS
endfunc bl1_entrypoint                                     |          ldp     x4, x5, [x20, #(ENTRY_POINT_INFO_ARGS_OFFS
                                                           >          ldp     x2, x3, [x20, #(ENTRY_POINT_INFO_ARGS_OFFS
                                                           >          ldp     x0, x1, [x20, #(ENTRY_POINT_INFO_ARGS_OFFS
                                                           >          exception_return
                                                           >  endfunc bl1_run_next_image
Last Author
garymorrison-arm
Last Edited
Jul 2 2021, 11:08 PM