diff options
Diffstat (limited to 'arch/arm64/kernel/cpu_errata.c')
| -rw-r--r-- | arch/arm64/kernel/cpu_errata.c | 64 | 
1 files changed, 64 insertions, 0 deletions
| diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c index e2c20c036442..9e1c1aef9ebd 100644 --- a/arch/arm64/kernel/cpu_errata.c +++ b/arch/arm64/kernel/cpu_errata.c @@ -340,6 +340,42 @@ static const struct midr_range erratum_1463225[] = {  };  #endif +#ifdef CONFIG_ARM64_WORKAROUND_TRBE_OVERWRITE_FILL_MODE +static const struct midr_range trbe_overwrite_fill_mode_cpus[] = { +#ifdef CONFIG_ARM64_ERRATUM_2139208 +	MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N2), +#endif +#ifdef CONFIG_ARM64_ERRATUM_2119858 +	MIDR_ALL_VERSIONS(MIDR_CORTEX_A710), +#endif +	{}, +}; +#endif	/* CONFIG_ARM64_WORKAROUND_TRBE_OVERWRITE_FILL_MODE */ + +#ifdef CONFIG_ARM64_WORKAROUND_TSB_FLUSH_FAILURE +static const struct midr_range tsb_flush_fail_cpus[] = { +#ifdef CONFIG_ARM64_ERRATUM_2067961 +	MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N2), +#endif +#ifdef CONFIG_ARM64_ERRATUM_2054223 +	MIDR_ALL_VERSIONS(MIDR_CORTEX_A710), +#endif +	{}, +}; +#endif	/* CONFIG_ARM64_WORKAROUND_TSB_FLUSH_FAILURE */ + +#ifdef CONFIG_ARM64_WORKAROUND_TRBE_WRITE_OUT_OF_RANGE +static struct midr_range trbe_write_out_of_range_cpus[] = { +#ifdef CONFIG_ARM64_ERRATUM_2253138 +	MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N2), +#endif +#ifdef CONFIG_ARM64_ERRATUM_2224489 +	MIDR_ALL_VERSIONS(MIDR_CORTEX_A710), +#endif +	{}, +}; +#endif /* CONFIG_ARM64_WORKAROUND_TRBE_WRITE_OUT_OF_RANGE */ +  const struct arm64_cpu_capabilities arm64_errata[] = {  #ifdef CONFIG_ARM64_WORKAROUND_CLEAN_CACHE  	{ @@ -534,6 +570,34 @@ const struct arm64_cpu_capabilities arm64_errata[] = {  		ERRATA_MIDR_ALL_VERSIONS(MIDR_NVIDIA_CARMEL),  	},  #endif +#ifdef CONFIG_ARM64_WORKAROUND_TRBE_OVERWRITE_FILL_MODE +	{ +		/* +		 * The erratum work around is handled within the TRBE +		 * driver and can be applied per-cpu. So, we can allow +		 * a late CPU to come online with this erratum. +		 */ +		.desc = "ARM erratum 2119858 or 2139208", +		.capability = ARM64_WORKAROUND_TRBE_OVERWRITE_FILL_MODE, +		.type = ARM64_CPUCAP_WEAK_LOCAL_CPU_FEATURE, +		CAP_MIDR_RANGE_LIST(trbe_overwrite_fill_mode_cpus), +	}, +#endif +#ifdef CONFIG_ARM64_WORKAROUND_TSB_FLUSH_FAILURE +	{ +		.desc = "ARM erratum 2067961 or 2054223", +		.capability = ARM64_WORKAROUND_TSB_FLUSH_FAILURE, +		ERRATA_MIDR_RANGE_LIST(tsb_flush_fail_cpus), +	}, +#endif +#ifdef CONFIG_ARM64_WORKAROUND_TRBE_WRITE_OUT_OF_RANGE +	{ +		.desc = "ARM erratum 2253138 or 2224489", +		.capability = ARM64_WORKAROUND_TRBE_WRITE_OUT_OF_RANGE, +		.type = ARM64_CPUCAP_WEAK_LOCAL_CPU_FEATURE, +		CAP_MIDR_RANGE_LIST(trbe_write_out_of_range_cpus), +	}, +#endif  	{  	}  }; |