15f835918SJeenu Viswambharan /* 2*60d330dcSBoyan Karatotev * Copyright (c) 2018-2023, Arm Limited and Contributors. All rights reserved. 35f835918SJeenu Viswambharan * 45f835918SJeenu Viswambharan * SPDX-License-Identifier: BSD-3-Clause 55f835918SJeenu Viswambharan */ 65f835918SJeenu Viswambharan 709d40e0eSAntonio Nino Diaz #include <stdbool.h> 809d40e0eSAntonio Nino Diaz 95f835918SJeenu Viswambharan #include <arch.h> 10dbcc44a1SAlexei Fedorov #include <arch_features.h> 115f835918SJeenu Viswambharan #include <arch_helpers.h> 1209d40e0eSAntonio Nino Diaz #include <lib/extensions/mpam.h> 135f835918SJeenu Viswambharan 14*60d330dcSBoyan Karatotev void mpam_init_el3(void) 155f835918SJeenu Viswambharan { 165f835918SJeenu Viswambharan /* 175f835918SJeenu Viswambharan * Enable MPAM, and disable trapping to EL3 when lower ELs access their 185f835918SJeenu Viswambharan * own MPAM registers. 195f835918SJeenu Viswambharan */ 205f835918SJeenu Viswambharan write_mpam3_el3(MPAM3_EL3_MPAMEN_BIT); 215f835918SJeenu Viswambharan 22*60d330dcSBoyan Karatotev } 23*60d330dcSBoyan Karatotev 245f835918SJeenu Viswambharan /* 25*60d330dcSBoyan Karatotev * If EL2 is implemented but unused, disable trapping to EL2 when lower ELs 26*60d330dcSBoyan Karatotev * access their own MPAM registers. 275f835918SJeenu Viswambharan */ 28*60d330dcSBoyan Karatotev void mpam_init_el2_unused(void) 29*60d330dcSBoyan Karatotev { 30dbcc44a1SAlexei Fedorov write_mpam2_el2(0ULL); 315f835918SJeenu Viswambharan 32dbcc44a1SAlexei Fedorov if ((read_mpamidr_el1() & MPAMIDR_HAS_HCR_BIT) != 0U) { 33dbcc44a1SAlexei Fedorov write_mpamhcr_el2(0ULL); 34dbcc44a1SAlexei Fedorov } 35*60d330dcSBoyan Karatotev 365f835918SJeenu Viswambharan } 37