diff options
Diffstat (limited to 'arch/arm64/kernel/cpu_errata.c')
| -rw-r--r-- | arch/arm64/kernel/cpu_errata.c | 59 | 
1 files changed, 48 insertions, 11 deletions
diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c index 6c3b10a41bd8..93f34b4eca25 100644 --- a/arch/arm64/kernel/cpu_errata.c +++ b/arch/arm64/kernel/cpu_errata.c @@ -489,6 +489,7 @@ static const struct midr_range arm64_ssb_cpus[] = {  	MIDR_ALL_VERSIONS(MIDR_CORTEX_A35),  	MIDR_ALL_VERSIONS(MIDR_CORTEX_A53),  	MIDR_ALL_VERSIONS(MIDR_CORTEX_A55), +	MIDR_ALL_VERSIONS(MIDR_BRAHMA_B53),  	{},  }; @@ -573,6 +574,7 @@ static const struct midr_range spectre_v2_safe_list[] = {  	MIDR_ALL_VERSIONS(MIDR_CORTEX_A35),  	MIDR_ALL_VERSIONS(MIDR_CORTEX_A53),  	MIDR_ALL_VERSIONS(MIDR_CORTEX_A55), +	MIDR_ALL_VERSIONS(MIDR_BRAHMA_B53),  	{ /* sentinel */ }  }; @@ -659,17 +661,23 @@ static const struct midr_range arm64_harden_el2_vectors[] = {  #endif  #ifdef CONFIG_ARM64_WORKAROUND_REPEAT_TLBI - -static const struct midr_range arm64_repeat_tlbi_cpus[] = { +static const struct arm64_cpu_capabilities arm64_repeat_tlbi_list[] = {  #ifdef CONFIG_QCOM_FALKOR_ERRATUM_1009 -	MIDR_RANGE(MIDR_QCOM_FALKOR_V1, 0, 0, 0, 0), +	{ +		ERRATA_MIDR_REV(MIDR_QCOM_FALKOR_V1, 0, 0) +	}, +	{ +		.midr_range.model = MIDR_QCOM_KRYO, +		.matches = is_kryo_midr, +	},  #endif  #ifdef CONFIG_ARM64_ERRATUM_1286807 -	MIDR_RANGE(MIDR_CORTEX_A76, 0, 0, 3, 0), +	{ +		ERRATA_MIDR_RANGE(MIDR_CORTEX_A76, 0, 0, 3, 0), +	},  #endif  	{},  }; -  #endif  #ifdef CONFIG_CAVIUM_ERRATUM_27456 @@ -737,6 +745,33 @@ static const struct midr_range erratum_1418040_list[] = {  };  #endif +#ifdef CONFIG_ARM64_ERRATUM_845719 +static const struct midr_range erratum_845719_list[] = { +	/* Cortex-A53 r0p[01234] */ +	MIDR_REV_RANGE(MIDR_CORTEX_A53, 0, 0, 4), +	/* Brahma-B53 r0p[0] */ +	MIDR_REV(MIDR_BRAHMA_B53, 0, 0), +	{}, +}; +#endif + +#ifdef CONFIG_ARM64_ERRATUM_843419 +static const struct arm64_cpu_capabilities erratum_843419_list[] = { +	{ +		/* Cortex-A53 r0p[01234] */ +		.matches = is_affected_midr_range, +		ERRATA_MIDR_REV_RANGE(MIDR_CORTEX_A53, 0, 0, 4), +		MIDR_FIXED(0x4, BIT(8)), +	}, +	{ +		/* Brahma-B53 r0p[0] */ +		.matches = is_affected_midr_range, +		ERRATA_MIDR_REV(MIDR_BRAHMA_B53, 0, 0), +	}, +	{}, +}; +#endif +  const struct arm64_cpu_capabilities arm64_errata[] = {  #ifdef CONFIG_ARM64_WORKAROUND_CLEAN_CACHE  	{ @@ -768,19 +803,18 @@ const struct arm64_cpu_capabilities arm64_errata[] = {  #endif  #ifdef CONFIG_ARM64_ERRATUM_843419  	{ -	/* Cortex-A53 r0p[01234] */  		.desc = "ARM erratum 843419",  		.capability = ARM64_WORKAROUND_843419, -		ERRATA_MIDR_REV_RANGE(MIDR_CORTEX_A53, 0, 0, 4), -		MIDR_FIXED(0x4, BIT(8)), +		.type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM, +		.matches = cpucap_multi_entry_cap_matches, +		.match_list = erratum_843419_list,  	},  #endif  #ifdef CONFIG_ARM64_ERRATUM_845719  	{ -	/* Cortex-A53 r0p[01234] */  		.desc = "ARM erratum 845719",  		.capability = ARM64_WORKAROUND_845719, -		ERRATA_MIDR_REV_RANGE(MIDR_CORTEX_A53, 0, 0, 4), +		ERRATA_MIDR_RANGE_LIST(erratum_845719_list),  	},  #endif  #ifdef CONFIG_CAVIUM_ERRATUM_23154 @@ -816,6 +850,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = {  	{  		.desc = "Qualcomm Technologies Falkor/Kryo erratum 1003",  		.capability = ARM64_WORKAROUND_QCOM_FALKOR_E1003, +		.type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM,  		.matches = cpucap_multi_entry_cap_matches,  		.match_list = qcom_erratum_1003_list,  	}, @@ -824,7 +859,9 @@ const struct arm64_cpu_capabilities arm64_errata[] = {  	{  		.desc = "Qualcomm erratum 1009, ARM erratum 1286807",  		.capability = ARM64_WORKAROUND_REPEAT_TLBI, -		ERRATA_MIDR_RANGE_LIST(arm64_repeat_tlbi_cpus), +		.type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM, +		.matches = cpucap_multi_entry_cap_matches, +		.match_list = arm64_repeat_tlbi_list,  	},  #endif  #ifdef CONFIG_ARM64_ERRATUM_858921  |