xref: /rk3399_ARM-atf/lib/extensions/mpam/mpam.c (revision 09d40e0e08283a249e7dce0e106c07c5141f9b7e)
15f835918SJeenu Viswambharan /*
25f835918SJeenu Viswambharan  * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
35f835918SJeenu Viswambharan  *
45f835918SJeenu Viswambharan  * SPDX-License-Identifier: BSD-3-Clause
55f835918SJeenu Viswambharan  */
65f835918SJeenu Viswambharan 
7*09d40e0eSAntonio Nino Diaz #include <stdbool.h>
8*09d40e0eSAntonio Nino Diaz 
95f835918SJeenu Viswambharan #include <arch.h>
105f835918SJeenu Viswambharan #include <arch_helpers.h>
11*09d40e0eSAntonio Nino Diaz #include <lib/extensions/mpam.h>
125f835918SJeenu Viswambharan 
135f835918SJeenu Viswambharan bool mpam_supported(void)
145f835918SJeenu Viswambharan {
155f835918SJeenu Viswambharan 	uint64_t features = read_id_aa64dfr0_el1() >> ID_AA64PFR0_MPAM_SHIFT;
165f835918SJeenu Viswambharan 
175f835918SJeenu Viswambharan 	return ((features & ID_AA64PFR0_MPAM_MASK) != 0U);
185f835918SJeenu Viswambharan }
195f835918SJeenu Viswambharan 
2040daecc1SAntonio Nino Diaz void mpam_enable(bool el2_unused)
215f835918SJeenu Viswambharan {
225f835918SJeenu Viswambharan 	if (!mpam_supported())
235f835918SJeenu Viswambharan 		return;
245f835918SJeenu Viswambharan 
255f835918SJeenu Viswambharan 	/*
265f835918SJeenu Viswambharan 	 * Enable MPAM, and disable trapping to EL3 when lower ELs access their
275f835918SJeenu Viswambharan 	 * own MPAM registers.
285f835918SJeenu Viswambharan 	 */
295f835918SJeenu Viswambharan 	write_mpam3_el3(MPAM3_EL3_MPAMEN_BIT);
305f835918SJeenu Viswambharan 
315f835918SJeenu Viswambharan 	/*
325f835918SJeenu Viswambharan 	 * If EL2 is implemented but unused, disable trapping to EL2 when lower
335f835918SJeenu Viswambharan 	 * ELs access their own MPAM registers.
345f835918SJeenu Viswambharan 	 */
3540daecc1SAntonio Nino Diaz 	if (el2_unused) {
365f835918SJeenu Viswambharan 		write_mpam2_el2(0);
375f835918SJeenu Viswambharan 
385f835918SJeenu Viswambharan 		if ((read_mpamidr_el1() & MPAMIDR_HAS_HCR_BIT) != 0U)
395f835918SJeenu Viswambharan 			write_mpamhcr_el2(0);
405f835918SJeenu Viswambharan 	}
415f835918SJeenu Viswambharan }
42