1*54fd6939SJiyong Park /* 2*54fd6939SJiyong Park * Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved. 3*54fd6939SJiyong Park * 4*54fd6939SJiyong Park * SPDX-License-Identifier: BSD-3-Clause 5*54fd6939SJiyong Park */ 6*54fd6939SJiyong Park 7*54fd6939SJiyong Park #include <stdbool.h> 8*54fd6939SJiyong Park 9*54fd6939SJiyong Park #include <arch.h> 10*54fd6939SJiyong Park #include <arch_features.h> 11*54fd6939SJiyong Park #include <arch_helpers.h> 12*54fd6939SJiyong Park #include <lib/extensions/mpam.h> 13*54fd6939SJiyong Park mpam_enable(bool el2_unused)14*54fd6939SJiyong Parkvoid mpam_enable(bool el2_unused) 15*54fd6939SJiyong Park { 16*54fd6939SJiyong Park /* Check if MPAM is implemented */ 17*54fd6939SJiyong Park if (get_mpam_version() == 0U) { 18*54fd6939SJiyong Park return; 19*54fd6939SJiyong Park } 20*54fd6939SJiyong Park 21*54fd6939SJiyong Park /* 22*54fd6939SJiyong Park * Enable MPAM, and disable trapping to EL3 when lower ELs access their 23*54fd6939SJiyong Park * own MPAM registers. 24*54fd6939SJiyong Park */ 25*54fd6939SJiyong Park write_mpam3_el3(MPAM3_EL3_MPAMEN_BIT); 26*54fd6939SJiyong Park 27*54fd6939SJiyong Park /* 28*54fd6939SJiyong Park * If EL2 is implemented but unused, disable trapping to EL2 when lower 29*54fd6939SJiyong Park * ELs access their own MPAM registers. 30*54fd6939SJiyong Park * If EL2 is implemented and used, enable trapping to EL2. 31*54fd6939SJiyong Park */ 32*54fd6939SJiyong Park if (el2_unused) { 33*54fd6939SJiyong Park write_mpam2_el2(0ULL); 34*54fd6939SJiyong Park 35*54fd6939SJiyong Park if ((read_mpamidr_el1() & MPAMIDR_HAS_HCR_BIT) != 0U) { 36*54fd6939SJiyong Park write_mpamhcr_el2(0ULL); 37*54fd6939SJiyong Park } 38*54fd6939SJiyong Park } else { 39*54fd6939SJiyong Park write_mpam2_el2(MPAM2_EL2_TRAPMPAM0EL1 | 40*54fd6939SJiyong Park MPAM2_EL2_TRAPMPAM1EL1); 41*54fd6939SJiyong Park 42*54fd6939SJiyong Park if ((read_mpamidr_el1() & MPAMIDR_HAS_HCR_BIT) != 0U) { 43*54fd6939SJiyong Park write_mpamhcr_el2(MPAMHCR_EL2_TRAP_MPAMIDR_EL1); 44*54fd6939SJiyong Park } 45*54fd6939SJiyong Park } 46*54fd6939SJiyong Park } 47