|
@@ -16,8 +16,6 @@
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
*/
|
|
|
|
|
|
-#define pr_fmt(fmt) "alternatives: " fmt
|
|
|
-
|
|
|
#include <linux/types.h>
|
|
|
#include <asm/cpu.h>
|
|
|
#include <asm/cputype.h>
|
|
@@ -26,27 +24,11 @@
|
|
|
#define MIDR_CORTEX_A53 MIDR_CPU_PART(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A53)
|
|
|
#define MIDR_CORTEX_A57 MIDR_CPU_PART(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A57)
|
|
|
|
|
|
-/*
|
|
|
- * Add a struct or another datatype to the union below if you need
|
|
|
- * different means to detect an affected CPU.
|
|
|
- */
|
|
|
-struct arm64_cpu_capabilities {
|
|
|
- const char *desc;
|
|
|
- u16 capability;
|
|
|
- bool (*is_affected)(struct arm64_cpu_capabilities *);
|
|
|
- union {
|
|
|
- struct {
|
|
|
- u32 midr_model;
|
|
|
- u32 midr_range_min, midr_range_max;
|
|
|
- };
|
|
|
- };
|
|
|
-};
|
|
|
-
|
|
|
#define CPU_MODEL_MASK (MIDR_IMPLEMENTOR_MASK | MIDR_PARTNUM_MASK | \
|
|
|
MIDR_ARCHITECTURE_MASK)
|
|
|
|
|
|
static bool __maybe_unused
|
|
|
-is_affected_midr_range(struct arm64_cpu_capabilities *entry)
|
|
|
+is_affected_midr_range(const struct arm64_cpu_capabilities *entry)
|
|
|
{
|
|
|
u32 midr = read_cpuid_id();
|
|
|
|
|
@@ -59,12 +41,12 @@ is_affected_midr_range(struct arm64_cpu_capabilities *entry)
|
|
|
}
|
|
|
|
|
|
#define MIDR_RANGE(model, min, max) \
|
|
|
- .is_affected = is_affected_midr_range, \
|
|
|
+ .matches = is_affected_midr_range, \
|
|
|
.midr_model = model, \
|
|
|
.midr_range_min = min, \
|
|
|
.midr_range_max = max
|
|
|
|
|
|
-struct arm64_cpu_capabilities arm64_errata[] = {
|
|
|
+const struct arm64_cpu_capabilities arm64_errata[] = {
|
|
|
#if defined(CONFIG_ARM64_ERRATUM_826319) || \
|
|
|
defined(CONFIG_ARM64_ERRATUM_827319) || \
|
|
|
defined(CONFIG_ARM64_ERRATUM_824069)
|
|
@@ -97,15 +79,5 @@ struct arm64_cpu_capabilities arm64_errata[] = {
|
|
|
|
|
|
void check_local_cpu_errata(void)
|
|
|
{
|
|
|
- struct arm64_cpu_capabilities *cpus = arm64_errata;
|
|
|
- int i;
|
|
|
-
|
|
|
- for (i = 0; cpus[i].desc; i++) {
|
|
|
- if (!cpus[i].is_affected(&cpus[i]))
|
|
|
- continue;
|
|
|
-
|
|
|
- if (!cpus_have_cap(cpus[i].capability))
|
|
|
- pr_info("enabling workaround for %s\n", cpus[i].desc);
|
|
|
- cpus_set_cap(cpus[i].capability);
|
|
|
- }
|
|
|
+ check_cpu_capabilities(arm64_errata, "enabling workaround for");
|
|
|
}
|