Page MenuHomePhabricator

Bl1aarch64bl1 Arch Setupcvsplatarmboardfvp Rfvp R Bl1 Arch Setupc
Updated 1,237 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 <arch_helpers.h>                                  |  #include <fvp_r_arch_helpers.h>
#include "../bl1_private.h"                                |  #include "../../../../bl1/bl1_private.h"

/*********************************************************    /*********************************************************
 * Function that does the first bit of architectural setup     * Function that does the first bit of architectural setup
 * execution in the non-secure address space.                  * execution in the non-secure address space.
 *********************************************************     *********************************************************
void bl1_arch_setup(void)                                     void bl1_arch_setup(void)
{                                                             {
        /* Set the next EL to be AArch64 */                |          /* v8-R64 does not include SCRs. */
        write_scr_el3(read_scr_el3() | SCR_RW_BIT);        <
}                                                             }

/*********************************************************    /*********************************************************
 * Set the Secure EL1 required architectural state             * Set the Secure EL1 required architectural state
 *********************************************************     *********************************************************
void bl1_arch_next_el_setup(void)                             void bl1_arch_next_el_setup(void)
{                                                             {
        u_register_t next_sctlr;                                      u_register_t next_sctlr;

        /* Use the same endianness than the current BL */             /* Use the same endianness than the current BL */
        next_sctlr = (read_sctlr_el3() & SCTLR_EE_BIT);    |          next_sctlr = (read_sctlr_el2() & SCTLR_EE_BIT);

        /* Set SCTLR Secure EL1 */                                    /* Set SCTLR Secure EL1 */
        next_sctlr |= SCTLR_EL1_RES1;                                 next_sctlr |= SCTLR_EL1_RES1;

        write_sctlr_el1(next_sctlr);                                  write_sctlr_el1(next_sctlr);
}                                                             }
Last Author
garymorrison-arm
Last Edited
Jul 2 2021, 11:09 PM