xref: /rk3399_ARM-atf/lib/extensions/mpam/mpam.c (revision 5f8359188008aff6a2a8e936003827ae771ed99f)
1*5f835918SJeenu Viswambharan /*
2*5f835918SJeenu Viswambharan  * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
3*5f835918SJeenu Viswambharan  *
4*5f835918SJeenu Viswambharan  * SPDX-License-Identifier: BSD-3-Clause
5*5f835918SJeenu Viswambharan  */
6*5f835918SJeenu Viswambharan 
7*5f835918SJeenu Viswambharan #include <arch.h>
8*5f835918SJeenu Viswambharan #include <arch_helpers.h>
9*5f835918SJeenu Viswambharan #include <mpam.h>
10*5f835918SJeenu Viswambharan #include <stdbool.h>
11*5f835918SJeenu Viswambharan 
12*5f835918SJeenu Viswambharan bool mpam_supported(void)
13*5f835918SJeenu Viswambharan {
14*5f835918SJeenu Viswambharan 	uint64_t features = read_id_aa64dfr0_el1() >> ID_AA64PFR0_MPAM_SHIFT;
15*5f835918SJeenu Viswambharan 
16*5f835918SJeenu Viswambharan 	return ((features & ID_AA64PFR0_MPAM_MASK) != 0U);
17*5f835918SJeenu Viswambharan }
18*5f835918SJeenu Viswambharan 
19*5f835918SJeenu Viswambharan void mpam_enable(int el2_unused)
20*5f835918SJeenu Viswambharan {
21*5f835918SJeenu Viswambharan 	if (!mpam_supported())
22*5f835918SJeenu Viswambharan 		return;
23*5f835918SJeenu Viswambharan 
24*5f835918SJeenu Viswambharan 	/*
25*5f835918SJeenu Viswambharan 	 * Enable MPAM, and disable trapping to EL3 when lower ELs access their
26*5f835918SJeenu Viswambharan 	 * own MPAM registers.
27*5f835918SJeenu Viswambharan 	 */
28*5f835918SJeenu Viswambharan 	write_mpam3_el3(MPAM3_EL3_MPAMEN_BIT);
29*5f835918SJeenu Viswambharan 
30*5f835918SJeenu Viswambharan 	/*
31*5f835918SJeenu Viswambharan 	 * If EL2 is implemented but unused, disable trapping to EL2 when lower
32*5f835918SJeenu Viswambharan 	 * ELs access their own MPAM registers.
33*5f835918SJeenu Viswambharan 	 */
34*5f835918SJeenu Viswambharan 	if (el2_unused != 0) {
35*5f835918SJeenu Viswambharan 		write_mpam2_el2(0);
36*5f835918SJeenu Viswambharan 
37*5f835918SJeenu Viswambharan 		if ((read_mpamidr_el1() & MPAMIDR_HAS_HCR_BIT) != 0U)
38*5f835918SJeenu Viswambharan 			write_mpamhcr_el2(0);
39*5f835918SJeenu Viswambharan 	}
40*5f835918SJeenu Viswambharan }
41