Archive-only list for patches
 help / color / mirror / Atom feed
From: Tony Luck <tony.luck@intel.com>
To: patches@lists.linux.dev
Cc: Tony Luck <tony.luck@intel.com>
Subject: [PATCH 02/74] x86/cpu/vfm: Add new macros to work with (vendor/family/model) values
Date: Thu, 28 Mar 2024 09:26:56 -0700	[thread overview]
Message-ID: <20240328162820.242778-2-tony.luck@intel.com> (raw)
In-Reply-To: <20240328090459.242500-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>
---
 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 eb8fcede9e3b..0e98d3fd0d38 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_vendor;
+ *			__u8	x86;
+ *			__u8	x86_model;
+ *			__u8	x86_reserved;
+ *		};
+ *		__u32		x86_vfm;
+ *	};
+ */
+#define VFM_VENDOR_BIT	0
+#define VFM_FAMILY_BIT	8
+#define VFM_MODEL_BIT	16
+#define VFM_RSVD_BIT	24
+
+#define	VFM_VENDOR_MASK	GENMASK(VFM_FAMILY_BIT - 1, VFM_VENDOR_BIT)
+#define	VFM_FAMILY_MASK	GENMASK(VFM_MODEL_BIT - 1, VFM_FAMILY_BIT)
+#define	VFM_MODEL_MASK	GENMASK(VFM_RSVD_BIT - 1, VFM_MODEL_BIT)
+
+#define VFM_VENDOR(vfm)	(((vfm) & VFM_VENDOR_MASK) >> VFM_VENDOR_BIT)
+#define VFM_FAMILY(vfm)	(((vfm) & VFM_FAMILY_MASK) >> VFM_FAMILY_BIT)
+#define VFM_MODEL(vfm)	(((vfm) & VFM_MODEL_MASK) >> VFM_MODEL_BIT)
+
+#define	VFM_MAKE(_vendor, _family, _model) (	\
+	((_vendor) << VFM_VENDOR_BIT) |		\
+	((_family) << VFM_FAMILY_BIT) |		\
+	((_model) << VFM_MODEL_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-03-28 16:28 UTC|newest]

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

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=20240328162820.242778-2-tony.luck@intel.com \
    --to=tony.luck@intel.com \
    --cc=patches@lists.linux.dev \
    /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