xref: /rk3399_ARM-atf/lib/extensions/mpam/mpam.c (revision 60d330dc4d26eb5509044572d5c163b26501a0de)
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