All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jithu Joseph <jithu.joseph@intel.com>
To: hdegoede@redhat.com, markgross@kernel.org
Cc: tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
	dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com,
	corbet@lwn.net, gregkh@linuxfoundation.org,
	andriy.shevchenko@linux.intel.com, jithu.joseph@intel.com,
	ashok.raj@intel.com, tony.luck@intel.com, rostedt@goodmis.org,
	linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org,
	platform-driver-x86@vger.kernel.org, patches@lists.linux.dev,
	ravi.v.shankar@intel.com
Subject: [RFC 03/10] platform/x86/intel/ifs: Add driver for In-Field Scan
Date: Tue,  1 Mar 2022 11:54:50 -0800	[thread overview]
Message-ID: <20220301195457.21152-4-jithu.joseph@intel.com> (raw)
In-Reply-To: <20220301195457.21152-1-jithu.joseph@intel.com>

In-Field Scan (IFS) provides hardware hooks to perform core tests and
report failures for portions of silicon that lack error detection
capabilities, which will be available in some server SKUs starting with
Sapphire Rapids. It offers infrastructure to specific users such as cloud
providers or OEMs to schedule tests and find in-field failures due to aging
in silicon that might not necessarily be reported with normal machine
checks.

Add basic parts of the IFS module (initialization and check IFS capability
support in a processor).

MSR IA32_CORE_CAPABILITY is a feature-enumerating MSR, bit 2 of which
reports MSR_INTEGRITY_CAPABILITIES. Processor that supports IFS
should reports the MSR_INTEGRITY_CAPABILITIES enabled.

Please check the latest Intel 64 and IA-32 Architectures Software
Developer's Manual for more detailed information on the MSR and the
MSR_INTEGRITY_CAPABILITIES.

Originally-by: Kyung Min Park <kyung.min.park@intel.com>
Signed-off-by: Jithu Joseph <jithu.joseph@intel.com>
Reviewed-by: Ashok Raj <ashok.raj@intel.com>
Reviewed-by: Tony Luck <tony.luck@intel.com>
---
 MAINTAINERS                             |  7 ++++
 drivers/platform/x86/intel/Kconfig      |  1 +
 drivers/platform/x86/intel/Makefile     |  1 +
 drivers/platform/x86/intel/ifs/Kconfig  |  9 +++++
 drivers/platform/x86/intel/ifs/Makefile |  7 ++++
 drivers/platform/x86/intel/ifs/core.c   | 49 +++++++++++++++++++++++++
 drivers/platform/x86/intel/ifs/ifs.h    | 14 +++++++
 7 files changed, 88 insertions(+)
 create mode 100644 drivers/platform/x86/intel/ifs/Kconfig
 create mode 100644 drivers/platform/x86/intel/ifs/Makefile
 create mode 100644 drivers/platform/x86/intel/ifs/core.c
 create mode 100644 drivers/platform/x86/intel/ifs/ifs.h

diff --git a/MAINTAINERS b/MAINTAINERS
index 777cd6fa2b3d..4c9912c0d725 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -9685,6 +9685,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) DRIVER
+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>
diff --git a/drivers/platform/x86/intel/Kconfig b/drivers/platform/x86/intel/Kconfig
index 8e65086bb6c8..7339e7daf0a1 100644
--- a/drivers/platform/x86/intel/Kconfig
+++ b/drivers/platform/x86/intel/Kconfig
@@ -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/int33fe/Kconfig"
 source "drivers/platform/x86/intel/int3472/Kconfig"
diff --git a/drivers/platform/x86/intel/Makefile b/drivers/platform/x86/intel/Makefile
index 35f2066578b2..bd7f2ef5e767 100644
--- a/drivers/platform/x86/intel/Makefile
+++ b/drivers/platform/x86/intel/Makefile
@@ -5,6 +5,7 @@
 #
 
 obj-$(CONFIG_INTEL_ATOMISP2_PDX86)	+= atomisp2/
+obj-$(CONFIG_INTEL_IFS)			+= ifs/
 obj-$(CONFIG_INTEL_SAR_INT1092)		+= int1092/
 obj-$(CONFIG_INTEL_CHT_INT33FE)		+= int33fe/
 obj-$(CONFIG_INTEL_SKL_INT3472)		+= int3472/
diff --git a/drivers/platform/x86/intel/ifs/Kconfig b/drivers/platform/x86/intel/ifs/Kconfig
new file mode 100644
index 000000000000..88e3d4fa1759
--- /dev/null
+++ b/drivers/platform/x86/intel/ifs/Kconfig
@@ -0,0 +1,9 @@
+config INTEL_IFS
+	tristate "Intel In Field Scan"
+	depends on X86 && 64BIT && SMP
+	help
+	  Enable support for In Field Scan in Intel CPU to perform core
+	  logic test in the field. To compile this driver 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
index 000000000000..05b4925402b4
--- /dev/null
+++ b/drivers/platform/x86/intel/ifs/Makefile
@@ -0,0 +1,7 @@
+#
+# Makefile for the In-Field Scan driver
+#
+
+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
index 000000000000..fb3c864d3085
--- /dev/null
+++ b/drivers/platform/x86/intel/ifs/core.c
@@ -0,0 +1,49 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/* Copyright(c) 2021 Intel Corporation.
+ *
+ * Author: Jithu Joseph <jithu.joseph@intel.com>
+ */
+
+#include <linux/module.h>
+#include <asm/cpu_device_id.h>
+
+#include "ifs.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 ia32_core_caps;
+
+	/* ifs capability check */
+	m = x86_match_cpu(ifs_cpu_ids);
+	if (!m)
+		return -ENODEV;
+	if (rdmsrl_safe(MSR_IA32_CORE_CAPS, &ia32_core_caps))
+		return -ENODEV;
+	if (!(ia32_core_caps & MSR_IA32_CORE_CAPS_INTEGRITY))
+		return -ENODEV;
+
+	return 0;
+}
+
+static void __exit ifs_exit(void)
+{
+	pr_info("unloaded 'In-Field Scan' module\n");
+}
+
+MODULE_LICENSE("GPL");
+MODULE_INFO(name, "ifs");
+MODULE_DESCRIPTION("ifs");
+module_init(ifs_init);
+module_exit(ifs_exit);
diff --git a/drivers/platform/x86/intel/ifs/ifs.h b/drivers/platform/x86/intel/ifs/ifs.h
new file mode 100644
index 000000000000..f3f924fced06
--- /dev/null
+++ b/drivers/platform/x86/intel/ifs/ifs.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/* Copyright(c) 2021 Intel Corporation.
+ *
+ * Author: Jithu Joseph <jithu.joseph@intel.com>
+ */
+
+#ifndef _IFS_H_
+#define _IFS_H_
+
+/* These bits are in the IA32_CORE_CAPABILITIES MSR */
+#define MSR_IA32_CORE_CAPS_INTEGRITY_BIT	2
+#define MSR_IA32_CORE_CAPS_INTEGRITY		BIT(MSR_IA32_CORE_CAPS_INTEGRITY_BIT)
+
+#endif
-- 
2.17.1


  parent reply	other threads:[~2022-03-01 19:55 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-01 19:54 [RFC 00/10] Introduce In Field Scan driver Jithu Joseph
2022-03-01 19:54 ` [RFC 01/10] x86/microcode/intel: expose collect_cpu_info_early() for IFS Jithu Joseph
2022-03-01 20:08   ` Greg KH
2022-03-02  0:56     ` Joseph, Jithu
2022-03-02 10:30   ` Borislav Petkov
2022-03-03  1:34     ` Joseph, Jithu
2022-03-01 19:54 ` [RFC 02/10] Documentation: In-Field Scan Jithu Joseph
2022-03-01 20:07   ` Greg KH
2022-03-02  0:58     ` Joseph, Jithu
2022-03-01 19:54 ` Jithu Joseph [this message]
2022-03-02 23:24   ` [RFC 03/10] platform/x86/intel/ifs: Add driver for " Williams, Dan J
2022-03-02 23:31     ` Raj, Ashok
2022-03-03  0:02     ` Luck, Tony
2022-03-03  2:04     ` Joseph, Jithu
2022-03-01 19:54 ` [RFC 04/10] platform/x86/intel/ifs: Load IFS Image Jithu Joseph
2022-03-03  2:58   ` Williams, Dan J
2022-03-01 19:54 ` [RFC 05/10] platform/x86/intel/ifs: Check IFS Image sanity Jithu Joseph
2022-03-01 19:54 ` [RFC 06/10] platform/x86/intel/ifs: Authenticate and copy to secured memory Jithu Joseph
2022-03-01 19:54 ` [RFC 07/10] platform/x86/intel/ifs: Create kthreads for online cpus for scan test Jithu Joseph
2022-03-03  4:17   ` Williams, Dan J
2022-03-03 19:59     ` Luck, Tony
2022-03-04 19:20     ` Joseph, Jithu
2022-03-07 16:52       ` Dan Williams
2022-03-07 17:46         ` Luck, Tony
2022-03-10 21:42           ` Kok, Auke
2022-03-01 19:54 ` [RFC 08/10] platform/x86/intel/ifs: Add IFS sysfs interface Jithu Joseph
2022-03-04  0:31   ` Williams, Dan J
2022-03-04 16:51     ` Luck, Tony
2022-03-04 20:42     ` Joseph, Jithu
2022-03-04 21:01       ` Luck, Tony
2022-03-21 21:15         ` Luck, Tony
2022-03-07 17:38       ` Dan Williams
2022-03-07 19:09         ` Joseph, Jithu
2022-03-07 19:15           ` Dan Williams
2022-03-07 19:55             ` Joseph, Jithu
2022-03-07 20:25               ` Dan Williams
2022-03-07 20:56                 ` Joseph, Jithu
2022-03-07 21:28                   ` Dan Williams
2022-03-07 21:30                   ` gregkh
2022-03-07 21:33                     ` Luck, Tony
2022-03-01 19:54 ` [RFC 09/10] platform/x86/intel/ifs: add ABI documentation for IFS Jithu Joseph
2022-03-04  0:57   ` Williams, Dan J
2022-03-01 19:54 ` [RFC 10/10] trace: platform/x86/intel/ifs: Add trace point to track Intel IFS operations Jithu Joseph
2022-03-01 20:17   ` Steven Rostedt
2022-03-02  1:02     ` Joseph, Jithu
2022-03-01 20:10 ` [RFC 00/10] Introduce In Field Scan driver Greg KH
2022-03-01 20:14   ` Greg KH
2022-03-14 23:10     ` Luck, Tony
2022-03-15  7:34       ` Greg KH
2022-03-15 14:59         ` Luck, Tony
2022-03-15 15:26           ` Greg KH
2022-03-15 16:04             ` Dan Williams
2022-03-15 16:09               ` Dan Williams
2022-03-15 16:10             ` Luck, Tony
2022-03-16  8:09               ` Greg KH
2022-03-02 15:33   ` Steven Rostedt
2022-03-02 16:20     ` Greg KH
2022-03-02 13:59 ` Andy Lutomirski
2022-03-02 20:29   ` Luck, Tony
2022-03-02 21:18     ` Andy Lutomirski
2022-03-02 21:41       ` Luck, Tony
2022-03-02 23:11 ` Williams, Dan J

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220301195457.21152-4-jithu.joseph@intel.com \
    --to=jithu.joseph@intel.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=ashok.raj@intel.com \
    --cc=bp@alien8.de \
    --cc=corbet@lwn.net \
    --cc=dave.hansen@linux.intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hdegoede@redhat.com \
    --cc=hpa@zytor.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=markgross@kernel.org \
    --cc=mingo@redhat.com \
    --cc=patches@lists.linux.dev \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=ravi.v.shankar@intel.com \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    --cc=tony.luck@intel.com \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.