]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
platform/x86/intel/ifs: Add stub driver for In-Field Scan
authorTony Luck <tony.luck@intel.com>
Fri, 6 May 2022 22:54:02 +0000 (15:54 -0700)
committerHans de Goede <hdegoede@redhat.com>
Thu, 12 May 2022 13:35:29 +0000 (15:35 +0200)
Cloud Service Providers that operate fleets of servers have reported
[1] occasions where they can detect that a CPU has gone bad due to
effects like electromigration, or isolated manufacturing defects.
However, that detection method is A/B testing seemingly random
application failures looking for a pattern. In-Field Scan (IFS) is
a driver for a platform capability to load a crafted 'scan image'
to run targeted low level diagnostics outside of the CPU's architectural
error detection capabilities.

Stub version of driver just does initial part of check for the IFS
feature. MSR_IA32_CORE_CAPS must enumerate the presence of the
MSR_INTEGRITY_CAPS MSR.

[1]: https://www.youtube.com/watch?v=QMF3rqhjYuM

Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Acked-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20220506225410.1652287-5-tony.luck@intel.com
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
MAINTAINERS
drivers/platform/x86/intel/Kconfig
drivers/platform/x86/intel/Makefile
drivers/platform/x86/intel/ifs/Kconfig [new file with mode: 0644]
drivers/platform/x86/intel/ifs/Makefile [new file with mode: 0644]
drivers/platform/x86/intel/ifs/core.c [new file with mode: 0644]

index fd768d43e048299a0cb36fefc86e78fe0388c98f..3ffc7c129b87e31b39533c0db86595b3ee8883ab 100644 (file)
@@ -9859,6 +9859,13 @@ B:       https://bugzilla.kernel.org
 T:     git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux.git
 F:     drivers/idle/intel_idle.c
 
+INTEL IN FIELD SCAN (IFS) DEVICE
+M:     Jithu Joseph <jithu.joseph@intel.com>
+R:     Ashok Raj <ashok.raj@intel.com>
+R:     Tony Luck <tony.luck@intel.com>
+S:     Maintained
+F:     drivers/platform/x86/intel/ifs
+
 INTEL INTEGRATED SENSOR HUB DRIVER
 M:     Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
 M:     Jiri Kosina <jikos@kernel.org>
index 1f01a8a23c570cfb889b013778b25f72c96a5b99..794968bda1153dca27f9a3abc96cd5253c745507 100644 (file)
@@ -4,6 +4,7 @@
 #
 
 source "drivers/platform/x86/intel/atomisp2/Kconfig"
+source "drivers/platform/x86/intel/ifs/Kconfig"
 source "drivers/platform/x86/intel/int1092/Kconfig"
 source "drivers/platform/x86/intel/int3472/Kconfig"
 source "drivers/platform/x86/intel/pmc/Kconfig"
index c61bc3e97121f7fdc6146c598e6c3078e33993e6..717933dd0cfdd764e77cb345d887a2772c5bb202 100644 (file)
@@ -5,6 +5,7 @@
 #
 
 obj-$(CONFIG_INTEL_ATOMISP2_PDX86)     += atomisp2/
+obj-$(CONFIG_INTEL_IFS)                        += ifs/
 obj-$(CONFIG_INTEL_SAR_INT1092)                += int1092/
 obj-$(CONFIG_INTEL_SKL_INT3472)                += int3472/
 obj-$(CONFIG_INTEL_PMC_CORE)           += pmc/
diff --git a/drivers/platform/x86/intel/ifs/Kconfig b/drivers/platform/x86/intel/ifs/Kconfig
new file mode 100644 (file)
index 0000000..d84491c
--- /dev/null
@@ -0,0 +1,13 @@
+config INTEL_IFS
+       tristate "Intel In Field Scan"
+       depends on X86 && 64BIT && SMP
+       select INTEL_IFS_DEVICE
+       help
+         Enable support for the In Field Scan capability in select
+         CPUs. The capability allows for running low level tests via
+         a scan image distributed by Intel via Github to validate CPU
+         operation beyond baseline RAS capabilities. To compile this
+         support as a module, choose M here. The module will be called
+         intel_ifs.
+
+         If unsure, say N.
diff --git a/drivers/platform/x86/intel/ifs/Makefile b/drivers/platform/x86/intel/ifs/Makefile
new file mode 100644 (file)
index 0000000..af90488
--- /dev/null
@@ -0,0 +1,3 @@
+obj-$(CONFIG_INTEL_IFS)                += intel_ifs.o
+
+intel_ifs-objs                 := core.o
diff --git a/drivers/platform/x86/intel/ifs/core.c b/drivers/platform/x86/intel/ifs/core.c
new file mode 100644 (file)
index 0000000..e3623ac
--- /dev/null
@@ -0,0 +1,48 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/* Copyright(c) 2022 Intel Corporation. */
+
+#include <linux/module.h>
+#include <linux/kdev_t.h>
+
+#include <asm/cpu_device_id.h>
+
+#define X86_MATCH(model)                               \
+       X86_MATCH_VENDOR_FAM_MODEL_FEATURE(INTEL, 6,    \
+               INTEL_FAM6_##model, X86_FEATURE_CORE_CAPABILITIES, NULL)
+
+static const struct x86_cpu_id ifs_cpu_ids[] __initconst = {
+       X86_MATCH(SAPPHIRERAPIDS_X),
+       {}
+};
+MODULE_DEVICE_TABLE(x86cpu, ifs_cpu_ids);
+
+static int __init ifs_init(void)
+{
+       const struct x86_cpu_id *m;
+       u64 msrval;
+
+       m = x86_match_cpu(ifs_cpu_ids);
+       if (!m)
+               return -ENODEV;
+
+       if (rdmsrl_safe(MSR_IA32_CORE_CAPS, &msrval))
+               return -ENODEV;
+
+       if (!(msrval & MSR_IA32_CORE_CAPS_INTEGRITY_CAPS))
+               return -ENODEV;
+
+       if (rdmsrl_safe(MSR_INTEGRITY_CAPS, &msrval))
+               return -ENODEV;
+
+       return 0;
+}
+
+static void __exit ifs_exit(void)
+{
+}
+
+module_init(ifs_init);
+module_exit(ifs_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("Intel In Field Scan (IFS) device");