blob: b1e52d89063ae491ef0049303172682140345406 [file] [log] [blame]
/*
* Copyright 2020 Broadcom
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/toolchain.h>
#include <zephyr/linker/sections.h>
#include <zephyr/arch/cpu.h>
void z_arm64_el3_plat_init(void)
{
uint64_t reg, val;
/* Enable access control configuration from lower EL */
reg = read_actlr_el3();
reg |= (ACTLR_EL3_L2ACTLR_BIT |
ACTLR_EL3_L2ECTLR_BIT |
ACTLR_EL3_L2CTLR_BIT |
ACTLR_EL3_CPUACTLR_BIT |
ACTLR_EL3_CPUECTLR_BIT);
write_actlr_el3(reg);
reg = read_sysreg(CORTEX_A72_L2ACTLR_EL1);
reg |= CORTEX_A72_L2ACTLR_DISABLE_ACE_SH_OR_CHI_BIT;
write_sysreg(reg, CORTEX_A72_L2ACTLR_EL1);
val = ((CORTEX_A72_L2_DATA_RAM_LATENCY_MASK <<
CORTEX_A72_L2CTLR_DATA_RAM_LATENCY_SHIFT) |
(CORTEX_A72_L2_TAG_RAM_LATENCY_MASK <<
CORTEX_A72_L2CTLR_TAG_RAM_LATENCY_SHIFT) |
(CORTEX_A72_L2_TAG_RAM_SETUP_1_CYCLE <<
CORTEX_A72_L2CTLR_TAG_RAM_SETUP_SHIFT) |
(CORTEX_A72_L2_DATA_RAM_SETUP_1_CYCLE <<
CORTEX_A72_L2CTLR_DATA_RAM_SETUP_SHIFT));
reg &= ~val;
val = ((CORTEX_A72_L2_DATA_RAM_LATENCY_3_CYCLES <<
CORTEX_A72_L2CTLR_DATA_RAM_LATENCY_SHIFT) |
(CORTEX_A72_L2_TAG_RAM_SETUP_1_CYCLE <<
CORTEX_A72_L2CTLR_TAG_RAM_SETUP_SHIFT) |
(CORTEX_A72_L2_DATA_RAM_SETUP_1_CYCLE <<
CORTEX_A72_L2CTLR_DATA_RAM_SETUP_SHIFT));
reg |= val;
write_sysreg(reg, CORTEX_A72_L2CTLR_EL1);
dsb();
isb();
}