All of lore.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: 120+ 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   ` 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 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.