arm-trusted-firmware/include/common/par.h
Govindraj Raja 306551362c feat(d128): add support for FEAT_D128
This patch disables trapping to EL3 when the FEAT_D128
specific registers are accessed by setting the SCR_EL3.D128En bit.

If FEAT_D128 is implemented, then FEAT_SYSREG128 is implemented.
With FEAT_SYSREG128 certain system registers are treated as 128-bit,
so we should be context saving and restoring 128-bits instead of 64-bit
when FEAT_D128 is enabled.

FEAT_SYSREG128 adds support for MRRS and MSRR instruction which
helps us to read write to 128-bit system register.
Refer to Arm Architecture Manual for further details.

Change the FVP platform to default to handling this as a dynamic option
so the right decision can be made by the code at runtime.

Change-Id: I1a53db5eac29e56c8fbdcd4961ede3abfcb2411a
Signed-off-by: Jayanth Dodderi Chidanand <jayanthdodderi.chidanand@arm.com>
Signed-off-by: Govindraj Raja <govindraj.raja@arm.com>
2024-10-24 14:51:55 -05:00

30 lines
687 B
C

/*
* Copyright (c) 2024, Arm Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef PAR_H
#define PAR_H
#include<arch_features.h>
#include<lib/extensions/sysreg128.h>
static inline uint64_t get_par_el1_pa(sysreg_t par)
{
uint64_t pa = par & UINT64_MAX;
/* PA, bits [51:12] is Output address */
uint64_t mask = PAR_ADDR_MASK;
#if ENABLE_FEAT_D128
/* If D128 is in use, the PA is in the upper 64-bit word of PAR_EL1 */
if (is_feat_d128_supported() && (par & PAR_EL1_D128)) {
pa = (par >> 64) & UINT64_MAX;
/* PA, bits [55:12] is Output address */
mask = PAR_D128_ADDR_MASK;
}
#endif
return pa & mask;
}
#endif /* PAR_H */