public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Tony Luck <tony.luck@intel.com>
To: Borislav Petkov <bp@alien8.de>
Cc: x86@kernel.org, linux-kernel@vger.kernel.org,
	patches@lists.linux.dev, Tony Luck <tony.luck@intel.com>,
	Thomas Gleixner <tglx@linutronix.de>
Subject: [PATCH v3 02/74] x86/cpu/vfm: Add new macros to work with (vendor/family/model) values
Date: Tue, 16 Apr 2024 14:19:04 -0700	[thread overview]
Message-ID: <20240416211941.9369-3-tony.luck@intel.com> (raw)
In-Reply-To: <20240416211941.9369-1-tony.luck@intel.com>

To avoid adding a slew of new macros for each new Intel CPU family
switch over from providing CPU model number #defines to a new
scheme that encodes vendor, family, and model in a single number.

Signed-off-by: Tony Luck <tony.luck@intel.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
---
 arch/x86/include/asm/cpu_device_id.h | 93 ++++++++++++++++++++++++++++
 1 file changed, 93 insertions(+)

diff --git a/arch/x86/include/asm/cpu_device_id.h b/arch/x86/include/asm/cpu_device_id.h
index bf4e065cf1e2..833f230aeafc 100644
--- a/arch/x86/include/asm/cpu_device_id.h
+++ b/arch/x86/include/asm/cpu_device_id.h
@@ -2,6 +2,39 @@
 #ifndef _ASM_X86_CPU_DEVICE_ID
 #define _ASM_X86_CPU_DEVICE_ID
 
+/*
+ * Can't use <linux/bitfield.h> because it generates expressions that
+ * cannot be used in structure initializers. Bitfield construction
+ * here must match the union in struct cpuinfo_86:
+ *	union {
+ *		struct {
+ *			__u8	x86_model;
+ *			__u8	x86;
+ *			__u8	x86_vendor;
+ *			__u8	x86_reserved;
+ *		};
+ *		__u32		x86_vfm;
+ *	};
+ */
+#define VFM_MODEL_BIT	0
+#define VFM_FAMILY_BIT	8
+#define VFM_VENDOR_BIT	16
+#define VFM_RSVD_BIT	24
+
+#define	VFM_MODEL_MASK	GENMASK(VFM_FAMILY_BIT - 1, VFM_MODEL_BIT)
+#define	VFM_FAMILY_MASK	GENMASK(VFM_VENDOR_BIT - 1, VFM_FAMILY_BIT)
+#define	VFM_VENDOR_MASK	GENMASK(VFM_RSVD_BIT - 1, VFM_VENDOR_BIT)
+
+#define VFM_MODEL(vfm)	(((vfm) & VFM_MODEL_MASK) >> VFM_MODEL_BIT)
+#define VFM_FAMILY(vfm)	(((vfm) & VFM_FAMILY_MASK) >> VFM_FAMILY_BIT)
+#define VFM_VENDOR(vfm)	(((vfm) & VFM_VENDOR_MASK) >> VFM_VENDOR_BIT)
+
+#define	VFM_MAKE(_vendor, _family, _model) (	\
+	((_model) << VFM_MODEL_BIT) |		\
+	((_family) << VFM_FAMILY_BIT) |		\
+	((_vendor) << VFM_VENDOR_BIT)		\
+)
+
 /*
  * Declare drivers belonging to specific x86 CPUs
  * Similar in spirit to pci_device_id and related PCI functions
@@ -49,6 +82,16 @@
 	.driver_data	= (unsigned long) _data				\
 }
 
+#define X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE(_vendor, _family, _model, \
+						    _steppings, _feature, _data) { \
+	.vendor		= _vendor,					\
+	.family		= _family,					\
+	.model		= _model,					\
+	.steppings	= _steppings,					\
+	.feature	= _feature,					\
+	.driver_data	= (unsigned long) _data				\
+}
+
 /**
  * X86_MATCH_VENDOR_FAM_MODEL_FEATURE - Macro for CPU matching
  * @_vendor:	The vendor name, e.g. INTEL, AMD, HYGON, ..., ANY
@@ -164,6 +207,56 @@
 	X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE(INTEL, 6, INTEL_FAM6_##model, \
 						     steppings, X86_FEATURE_ANY, data)
 
+/**
+ * X86_MATCH_VFM - Match encoded vendor/family/model
+ * @vfm:	Encoded 8-bits each for vendor, family, model
+ * @data:	Driver specific data or NULL. The internal storage
+ *		format is unsigned long. The supplied value, pointer
+ *		etc. is casted to unsigned long internally.
+ *
+ * Stepping and feature are set to wildcards
+ */
+#define X86_MATCH_VFM(vfm, data)			\
+	X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE(	\
+		VFM_VENDOR(vfm),			\
+		VFM_FAMILY(vfm),			\
+		VFM_MODEL(vfm),				\
+		X86_STEPPING_ANY, X86_FEATURE_ANY, data)
+
+/**
+ * X86_MATCH_VFM_STEPPINGS - Match encoded vendor/family/model/stepping
+ * @vfm:	Encoded 8-bits each for vendor, family, model
+ * @steppings:	Bitmask of steppings to match
+ * @data:	Driver specific data or NULL. The internal storage
+ *		format is unsigned long. The supplied value, pointer
+ *		etc. is casted to unsigned long internally.
+ *
+ * feature is set to wildcard
+ */
+#define X86_MATCH_VFM_STEPPINGS(vfm, steppings, data)	\
+	X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE(	\
+		VFM_VENDOR(vfm),			\
+		VFM_FAMILY(vfm),			\
+		VFM_MODEL(vfm),				\
+		steppings, X86_FEATURE_ANY, data)
+
+/**
+ * X86_MATCH_VFM_FEATURE - Match encoded vendor/family/model/feature
+ * @vfm:	Encoded 8-bits each for vendor, family, model
+ * @feature:	A X86_FEATURE bit
+ * @data:	Driver specific data or NULL. The internal storage
+ *		format is unsigned long. The supplied value, pointer
+ *		etc. is casted to unsigned long internally.
+ *
+ * Steppings is set to wildcard
+ */
+#define X86_MATCH_VFM_FEATURE(vfm, feature, data)	\
+	X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE(	\
+		VFM_VENDOR(vfm),			\
+		VFM_FAMILY(vfm),			\
+		VFM_MODEL(vfm),				\
+		X86_STEPPING_ANY, feature, data)
+
 /*
  * Match specific microcode revisions.
  *
-- 
2.44.0


  parent reply	other threads:[~2024-04-16 21:19 UTC|newest]

Thread overview: 119+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-16 21:19 [PATCH v3 00/74] New Intel CPUID families Tony Luck
2024-04-16 21:19 ` [PATCH v3 01/74] x86/cpu/vfm: Add/initialize x86_vfm field to struct cpuinfo_x86 Tony Luck
2024-04-22 10:01   ` [tip: x86/cpu] " tip-bot2 for Tony Luck
2024-04-16 21:19 ` Tony Luck [this message]
2024-04-17  7:42   ` [PATCH v3 02/74] x86/cpu/vfm: Add new macros to work with (vendor/family/model) values Amadeusz Sławiński
2024-04-22 10:01   ` [tip: x86/cpu] " tip-bot2 for Tony Luck
2024-04-16 21:19 ` [PATCH v3 03/74] x86/cpu/vfm: Update arch/x86/include/asm/intel-family.h Tony Luck
2024-04-22 10:01   ` [tip: x86/cpu] " tip-bot2 for Tony Luck
2024-04-16 21:19 ` [PATCH v3 04/74] x86/cpu/vfm: Update arch/x86/crypto/poly1305_glue.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 05/74] x86/cpu/vfm: Update arch/x86/crypto/twofish_glue_3way.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 06/74] x86/cpu/vfm: Update arch/x86/events/intel/cstate.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 07/74] x86/cpu/vfm: Update arch/x86/events/intel/lbr.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 08/74] x86/cpu/vfm: Update arch/x86/events/intel/pt.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 09/74] x86/cpu/vfm: Update arch/x86/events/intel/uncore.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 10/74] x86/cpu/vfm: Update arch/x86/events/intel/uncore_nhmex.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 11/74] x86/cpu/vfm: Update arch/x86/events/intel/uncore_snbep.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 12/74] x86/cpu/vfm: Update arch/x86/events/msr.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 13/74] x86/cpu/vfm: Update arch/x86/events/rapl.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 14/74] x86/cpu/vfm: Update arch/x86/kernel/apic/apic.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 15/74] x86/cpu/vfm: Update arch/x86/kernel/cpu/aperfmperf.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 16/74] x86/cpu/vfm: Update arch/x86/kernel/cpu/bugs.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 17/74] x86/cpu/vfm: Update arch/x86/kernel/cpu/common.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 18/74] x86/cpu/vfm: Update arch/x86/kernel/cpu/intel.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 19/74] x86/cpu/vfm: Update arch/x86/kernel/cpu/intel_epb.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 20/74] x86/cpu/vfm: Update arch/x86/kernel/cpu/match.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 21/74] x86/cpu/vfm: Update arch/x86/kernel/cpu/mce/core.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 22/74] x86/cpu/vfm: Update arch/x86/kernel/cpu/mce/intel.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 23/74] x86/cpu/vfm: Update arch/x86/kernel/cpu/mce/severity.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 24/74] x86/cpu/vfm: Update arch/x86/kernel/cpu/microcode/intel.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 25/74] x86/cpu/vfm: Update arch/x86/kernel/cpu/resctrl/core.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 26/74] x86/cpu/vfm: Update arch/x86/kernel/cpu/resctrl/pseudo_lock.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 27/74] x86/cpu/vfm: Update arch/x86/kernel/smpboot.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 28/74] x86/cpu/vfm: Update arch/x86/kernel/tsc.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 29/74] x86/cpu/vfm: Update arch/x86/kernel/tsc_msr.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 30/74] x86/cpu/vfm: Update arch/x86/kvm/pmu.c Tony Luck
2024-04-17 18:59   ` Sean Christopherson
2024-04-16 21:19 ` [PATCH v3 31/74] x86/cpu/vfm: Update arch/x86/kvm/vmx/vmx.c Tony Luck
2024-04-17 19:00   ` Sean Christopherson
2024-04-16 21:19 ` [PATCH v3 32/74] x86/cpu/vfm: Update arch/x86/mm/init.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 33/74] x86/cpu/vfm: Update arch/x86/pci/intel_mid_pci.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 34/74] x86/cpu/vfm: Update arch/x86/virt/vmx/tdx/tdx.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 35/74] x86/cpu/vfm: Update arch/x86/events/intel/core.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 36/74] x86/cpu/vfm: Update arch/x86/platform/intel-mid/intel-mid.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 37/74] x86/cpu/vfm: Update arch/x86/platform/atom/punit_atom_debug.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 38/74] x86/cpu/vfm: Update arch/x86/events/intel/core.c Tony Luck
2024-04-16 21:19 ` [PATCH v3 39/74] x86/cpu/vfm: Update arch/x86/boot/cpucheck.c Tony Luck
2024-04-16 21:21 ` [PATCH v3 40/74] x86/cpu/vfm: Update drivers/acpi/acpi_lpss.c Tony Luck
2024-04-17  8:25   ` Rafael J. Wysocki
2024-04-16 21:22 ` [PATCH v3 41/74] x86/cpu/vfm: Update drivers/acpi/x86/utils.c Tony Luck
2024-04-17  8:26   ` Rafael J. Wysocki
2024-04-16 21:22 ` [PATCH v3 42/74] x86/cpu/vfm: Update tpm files Tony Luck
2024-04-17 15:41   ` Jarkko Sakkinen
2024-04-17 16:38     ` Luck, Tony
2024-04-17 22:10       ` Jarkko Sakkinen
2024-04-17 16:07   ` Paul Menzel
2024-04-17 16:43     ` Luck, Tony
2024-04-17 22:48       ` Jarkko Sakkinen
2024-04-16 21:22 ` [PATCH v3 43/74] x86/cpu/vfm: Update drivers/cpufreq/intel_pstate.c Tony Luck
2024-04-17  8:20   ` Rafael J. Wysocki
2024-04-16 21:22 ` [PATCH v3 44/74] x86/cpu/vfm: Update drivers/cpufreq/speedstep-centrino.c Tony Luck
2024-04-17  8:21   ` Rafael J. Wysocki
2024-04-16 21:22 ` [PATCH v3 45/74] x86/cpu/vfm: Update drivers/edac/i10nm_base.c Tony Luck
2024-04-16 21:22 ` [PATCH v3 46/74] x86/cpu/vfm: Update drivers/edac/pnd2_edac.c Tony Luck
2024-04-16 21:22 ` [PATCH v3 47/74] x86/cpu/vfm: Update drivers/edac/sb_edac.c Tony Luck
2024-04-16 21:22 ` [PATCH v3 48/74] x86/cpu/vfm: Update drivers/edac/skx_base.c Tony Luck
2024-04-16 21:22 ` [PATCH v3 49/74] x86/cpu/vfm: Update drivers/extcon/extcon-axp288.c Tony Luck
2024-05-08 15:07   ` Chanwoo Choi
2024-04-16 21:22 ` [PATCH v3 50/74] x86/cpu/vfm: Update drivers/hwmon/peci/cputemp.c Tony Luck
2024-04-16 22:34   ` Guenter Roeck
2024-04-16 23:05     ` Luck, Tony
2024-04-16 23:37       ` Guenter Roeck
2024-04-16 23:57         ` Luck, Tony
2024-04-18 13:32           ` Winiarska, Iwona
2024-04-18 13:52             ` Guenter Roeck
2024-04-18 14:50               ` Winiarska, Iwona
2024-04-22 16:35                 ` Luck, Tony
2024-04-22 22:19                   ` Luck, Tony
2024-04-24 13:32                     ` Winiarska, Iwona
2024-04-24 17:43                       ` Luck, Tony
2024-04-16 21:22 ` [PATCH v3 51/74] x86/cpu/vfm: Update drivers/idle/intel_idle.c Tony Luck
2024-04-17  8:24   ` Rafael J. Wysocki
2024-04-16 21:22 ` [PATCH v3 52/74] x86/cpu/vfm: Update drivers/pci/pci-mid.c Tony Luck
2024-04-16 21:38   ` Bjorn Helgaas
2024-04-16 21:51     ` Luck, Tony
2024-04-17  8:47       ` Andy Shevchenko
2024-04-16 21:22 ` [PATCH v3 53/74] x86/cpu/vfm: Update drivers/peci/cpu.c Tony Luck
2024-04-16 21:22 ` [PATCH v3 54/74] x86/cpu/vfm: Update drivers/platform/x86/intel/ifs/core.c Tony Luck
2024-04-16 23:29   ` Joseph, Jithu
2024-04-16 21:22 ` [PATCH v3 55/74] x86/cpu/vfm: Update drivers/platform/x86/intel_ips.c Tony Luck
2024-04-16 21:22 ` [PATCH v3 56/74] x86/cpu/vfm: Update drivers/platform/x86/intel/pmc/core.c Tony Luck
2024-04-16 21:22 ` [PATCH v3 57/74] x86/cpu/vfm: Update drivers/platform/x86/intel/pmc/pltdrv.c Tony Luck
2024-04-16 21:22 ` [PATCH v3 58/74] x86/cpu/vfm: Update drivers/platform/x86/intel_scu_wdt.c Tony Luck
2024-04-16 21:22 ` [PATCH v3 59/74] x86/cpu/vfm: Update drivers/platform/x86/intel/speed_select_if/isst_if_common.c Tony Luck
2024-04-16 21:22 ` [PATCH v3 60/74] x86/cpu/vfm: Update drivers/platform/x86/intel/speed_select_if/isst_if_mbox_msr.c Tony Luck
2024-04-16 21:22 ` [PATCH v3 61/74] x86/cpu/vfm: Update drivers/platform/x86/intel/telemetry/debugfs.c Tony Luck
2024-04-16 21:22 ` [PATCH v3 62/74] x86/cpu/vfm: Update drivers/platform/x86/intel/telemetry/pltdrv.c Tony Luck
2024-04-16 21:22 ` [PATCH v3 63/74] x86/cpu/vfm: Update drivers/platform/x86/intel/turbo_max_3.c Tony Luck
2024-04-16 21:22 ` [PATCH v3 64/74] x86/cpu/vfm: Update drivers/platform/x86/intel/uncore-frequency/uncore-frequency.c Tony Luck
2024-04-16 21:22 ` [PATCH v3 65/74] x86/cpu/vfm: Update drivers/platform/x86/p2sb.c Tony Luck
2024-04-16 21:22 ` [PATCH v3 66/74] x86/cpu/vfm: Update drivers/powercap/intel_rapl_common.c Tony Luck
2024-04-17  8:21   ` Rafael J. Wysocki
2024-04-16 21:22 ` [PATCH v3 67/74] x86/cpu/vfm: Update drivers/powercap/intel_rapl_msr.c Tony Luck
2024-04-17  8:22   ` Rafael J. Wysocki
2024-04-16 21:22 ` [PATCH v3 68/74] x86/cpu/vfm: Update drivers/staging/media/atomisp/include/linux/atomisp_platform.h Tony Luck
2024-04-17  8:07   ` Andy Shevchenko
2024-04-17 16:24     ` Luck, Tony
2024-04-17 17:00       ` Andy Shevchenko
2024-04-17 17:31         ` Luck, Tony
2024-04-16 21:22 ` [PATCH v3 69/74] x86/cpu/vfm: Update intel_soc_dts_thermal.c Tony Luck
2024-04-17  8:23   ` Rafael J. Wysocki
2024-04-16 21:22 ` [PATCH v3 70/74] x86/cpu/vfm: Update drivers/thermal/intel/intel_tcc_cooling.c Tony Luck
2024-04-17  8:23   ` Rafael J. Wysocki
2024-04-16 21:22 ` [PATCH v3 71/74] x86/cpu/vfm: Update sound/soc/intel/avs/boards/es8336.c Tony Luck
2024-04-17  8:01   ` Amadeusz Sławiński
2024-04-16 21:23 ` [PATCH v3 72/74] x86/cpu/vfm: Update tools/power/x86/turbostat/turbostat.c Tony Luck
2024-04-17  8:24   ` Rafael J. Wysocki
2024-04-16 21:23 ` [PATCH v3 73/74] x86/cpu/vfm: Delete X86_MATCH_INTEL_FAM6_MODEL[_STEPPING]() macros Tony Luck
2024-04-16 21:23   ` [PATCH v3 74/74] x86/cpu/vfm: Delete all the *_FAM6_ CPU #defines Tony Luck
2024-04-16 23:31 ` [PATCH v3 00/74] New Intel CPUID families Luck, Tony

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=20240416211941.9369-3-tony.luck@intel.com \
    --to=tony.luck@intel.com \
    --cc=bp@alien8.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=patches@lists.linux.dev \
    --cc=tglx@linutronix.de \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox