mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-23 13:36:05 +00:00

Memory Partitioning And Monitoring is an Armv8.4 feature that enables various memory system components and resources to define partitions. Software running at various ELs can then assign themselves to the desired partition to control their performance aspects. With this patch, when ENABLE_MPAM_FOR_LOWER_ELS is set to 1, EL3 allows lower ELs to access their own MPAM registers without trapping to EL3. This patch however doesn't make use of partitioning in EL3; platform initialisation code should configure and use partitions in EL3 if required. Change-Id: I5a55b6771ccaa0c1cffc05543d2116b60cbbcdcd Co-authored-by: James Morse <james.morse@arm.com> Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
40 lines
838 B
C
40 lines
838 B
C
/*
|
|
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#include <arch.h>
|
|
#include <arch_helpers.h>
|
|
#include <mpam.h>
|
|
#include <stdbool.h>
|
|
|
|
bool mpam_supported(void)
|
|
{
|
|
uint64_t features = read_id_aa64dfr0_el1() >> ID_AA64PFR0_MPAM_SHIFT;
|
|
|
|
return ((features & ID_AA64PFR0_MPAM_MASK) != 0U);
|
|
}
|
|
|
|
void mpam_enable(int el2_unused)
|
|
{
|
|
if (!mpam_supported())
|
|
return;
|
|
|
|
/*
|
|
* Enable MPAM, and disable trapping to EL3 when lower ELs access their
|
|
* own MPAM registers.
|
|
*/
|
|
write_mpam3_el3(MPAM3_EL3_MPAMEN_BIT);
|
|
|
|
/*
|
|
* If EL2 is implemented but unused, disable trapping to EL2 when lower
|
|
* ELs access their own MPAM registers.
|
|
*/
|
|
if (el2_unused != 0) {
|
|
write_mpam2_el2(0);
|
|
|
|
if ((read_mpamidr_el1() & MPAMIDR_HAS_HCR_BIT) != 0U)
|
|
write_mpamhcr_el2(0);
|
|
}
|
|
}
|