From d8389052dd1c25e86cc4c1536302d359ca1a6a5f Mon Sep 17 00:00:00 2001 From: Andrew Turner Date: Wed, 9 Oct 2019 09:44:44 +0000 Subject: [PATCH] [Untested]: Detect ThunderX cores affected by erratum 27456 --- sys/arm64/arm64/cpu_errata.c | 37 ++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/sys/arm64/arm64/cpu_errata.c b/sys/arm64/arm64/cpu_errata.c index 08253f69f4a..85266e484cf 100644 --- a/sys/arm64/arm64/cpu_errata.c +++ b/sys/arm64/arm64/cpu_errata.c @@ -59,6 +59,7 @@ static enum { static cpu_quirk_install install_psci_bp_hardening; static cpu_quirk_install install_ssbd_workaround; +static cpu_quirk_install install_thunderx_bcast_tlbi_workaround; static struct cpu_quirks cpu_quirks[] = { { @@ -92,8 +93,44 @@ static struct cpu_quirks cpu_quirks[] = { .midr_value = 0, .quirk_install = install_ssbd_workaround, }, + { + .midr_mask = CPU_IMPL_MASK | CPU_PART_MASK, + .midr_value = + CPU_ID_RAW(CPU_IMPL_CAVIUM, CPU_PART_THUNDERX, 0,0), + .quirk_install = install_thunderx_bcast_tlbi_workaround, + }, + { + .midr_mask = CPU_IMPL_MASK | CPU_PART_MASK, + .midr_value = + CPU_ID_RAW(CPU_IMPL_CAVIUM, CPU_PART_THUNDERX_81XX, 0,0), + .quirk_install = install_thunderx_bcast_tlbi_workaround, + }, }; +static void +install_thunderx_bcast_tlbi_workaround(void) +{ + u_int midr; + bool affected; + + affected = false; + midr = get_midr(); + if (CPU_PART(midr) == CPU_PART_THUNDERX_81XX) + affected = true; + else if (CPU_PART(midr) == CPU_PART_THUNDERX) { + if (CPU_VAR(midr) == 0) + /* ThunderX 1.x */ + affected = true; + else if (CPU_VAR(midr) == 1 && CPU_REV(midr) <= 1) + /* ThunderX 2.0 - 2.1 */ + affected = true; + } + + if (affected) { + /* ... */ + } +} + static void install_psci_bp_hardening(void) { -- 2.20.0