[PATCH v2 09/13] arm64: Add override for ID_AA64MMFR4_EL1.E2H0
Suzuki K Poulose
suzuki.poulose at arm.com
Wed Nov 22 06:17:41 PST 2023
On 20/11/2023 12:37, Marc Zyngier wrote:
> Allow ID_AA64MMFR4_EL1.E2H0 to be overriden from the command-line.
> This will subsequently be of use for non-compliant CPUs.
>
> Signed-off-by: Marc Zyngier <maz at kernel.org>
Reviewed-by: Suzuki K Poulose <suzuki.poulose at arm.com>
> ---
> arch/arm64/include/asm/cpufeature.h | 1 +
> arch/arm64/kernel/cpufeature.c | 4 +++-
> arch/arm64/kernel/idreg-override.c | 10 ++++++++++
> 3 files changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h
> index 5f3f62efebd5..d465db251939 100644
> --- a/arch/arm64/include/asm/cpufeature.h
> +++ b/arch/arm64/include/asm/cpufeature.h
> @@ -901,6 +901,7 @@ s64 arm64_ftr_safe_value(const struct arm64_ftr_bits *ftrp, s64 new, s64 cur);
> struct arm64_ftr_reg *get_arm64_ftr_reg(u32 sys_id);
>
> extern struct arm64_ftr_override id_aa64mmfr1_override;
> +extern struct arm64_ftr_override id_aa64mmfr4_override;
> extern struct arm64_ftr_override id_aa64pfr0_override;
> extern struct arm64_ftr_override id_aa64pfr1_override;
> extern struct arm64_ftr_override id_aa64zfr0_override;
> diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
> index 64a026cc5cec..7dcda39537f8 100644
> --- a/arch/arm64/kernel/cpufeature.c
> +++ b/arch/arm64/kernel/cpufeature.c
> @@ -691,6 +691,7 @@ static const struct arm64_ftr_bits ftr_raz[] = {
> __ARM64_FTR_REG_OVERRIDE(#id, id, table, &no_override)
>
> struct arm64_ftr_override __ro_after_init id_aa64mmfr1_override;
> +struct arm64_ftr_override __ro_after_init id_aa64mmfr4_override;
> struct arm64_ftr_override __ro_after_init id_aa64pfr0_override;
> struct arm64_ftr_override __ro_after_init id_aa64pfr1_override;
> struct arm64_ftr_override __ro_after_init id_aa64zfr0_override;
> @@ -759,7 +760,8 @@ static const struct __ftr_reg_entry {
> &id_aa64mmfr1_override),
> ARM64_FTR_REG(SYS_ID_AA64MMFR2_EL1, ftr_id_aa64mmfr2),
> ARM64_FTR_REG(SYS_ID_AA64MMFR3_EL1, ftr_id_aa64mmfr3),
> - ARM64_FTR_REG(SYS_ID_AA64MMFR4_EL1, ftr_id_aa64mmfr4),
> + ARM64_FTR_REG_OVERRIDE(SYS_ID_AA64MMFR4_EL1, ftr_id_aa64mmfr4,
> + &id_aa64mmfr4_override),
>
> /* Op1 = 1, CRn = 0, CRm = 0 */
> ARM64_FTR_REG(SYS_GMID_EL1, ftr_gmid),
> diff --git a/arch/arm64/kernel/idreg-override.c b/arch/arm64/kernel/idreg-override.c
> index 3addc09f8746..7b5b9dc20e6b 100644
> --- a/arch/arm64/kernel/idreg-override.c
> +++ b/arch/arm64/kernel/idreg-override.c
> @@ -55,6 +55,15 @@ static const struct ftr_set_desc mmfr1 __initconst = {
> },
> };
>
> +static const struct ftr_set_desc mmfr4 __initconst = {
> + .name = "id_aa64mmfr4",
> + .override = &id_aa64mmfr4_override,
> + .fields = {
> + FIELD("e2h0", ID_AA64MMFR4_EL1_E2H0_SHIFT, NULL ),
> + {}
> + },
> +};
> +
> static bool __init pfr0_sve_filter(u64 val)
> {
> /*
> @@ -161,6 +170,7 @@ static const struct ftr_set_desc sw_features __initconst = {
>
> static const struct ftr_set_desc * const regs[] __initconst = {
> &mmfr1,
> + &mmfr4,
> &pfr0,
> &pfr1,
> &isar1,
More information about the linux-arm-kernel
mailing list