Commit 6fc26a6c authored by Srinivas Pandruvada's avatar Srinivas Pandruvada Committed by Jia, Yingbao
Browse files

platform/x86/intel/tpmi: Add additional TPMI header fields

mainline inclusion
from mainline-v6.10
commit c8405cc815151a8b2fa6f7510ede8256228e45da
category: bugfix
bugzilla: https://gitee.com/openeuler/intel-kernel/issues/IB6QCJ
CVE: NA
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c8405cc815151a8b2fa6f7510ede8256228e45da



-------------------------------------------------

Intel-SIG: commit c8405cc81515 platform/x86/intel/tpmi: Add additional TPMI header fields.
Backport intel tpmi base driver update for 6.6 from 6.10

TPMI information header added additional fields in version 2. Some of the
reserved fields in version 1 are used to define new fields.

Parse new fields and export as part of platform data. These fields include:
- PCI segment ID
- Partition ID of the package: If a package is represented by more than
  one PCI device, then partition ID along with cdie_mask, describes the
  scope. For example to update get/set properties for a compute die, one
  of the PCI MMIO region is selected from the partition ID.
- cdie_mask: Mask of all compute dies in this partition.

Signed-off-by: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: default avatarZhang Rui <rui.zhang@intel.com>
Reviewed-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Link: https://lore.kernel.org/r/20240423204619.3946901-5-srinivas.pandruvada@linux.intel.com


Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
[ Yingbao Jia: amend commit log ]
Signed-off-by: default avatarYingbao Jia <yingbao.jia@intel.com>
parent 45bedbc8
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -128,6 +128,9 @@ struct intel_tpmi_info {
 * @dev:	PCI device number
 * @bus:	PCI bus number
 * @pkg:	CPU Package id
 * @segment:	PCI segment id
 * @partition:	Package Partition id
 * @cdie_mask:	Bitmap of compute dies in the current partition
 * @reserved:	Reserved for future use
 * @lock:	When set to 1 the register is locked and becomes read-only
 *		until next reset. Not for use by the OS driver.
@@ -139,7 +142,10 @@ struct tpmi_info_header {
	u64 dev:5;
	u64 bus:8;
	u64 pkg:8;
	u64 reserved:39;
	u64 segment:8;
	u64 partition:2;
	u64 cdie_mask:16;
	u64 reserved:13;
	u64 lock:1;
} __packed;

@@ -666,6 +672,7 @@ static int tpmi_create_devices(struct intel_tpmi_info *tpmi_info)

#define TPMI_INFO_BUS_INFO_OFFSET	0x08
#define TPMI_INFO_MAJOR_VERSION		0x00
#define TPMI_INFO_MINOR_VERSION		0x02

static int tpmi_process_info(struct intel_tpmi_info *tpmi_info,
			     struct intel_tpmi_pm_feature *pfs)
@@ -692,6 +699,12 @@ static int tpmi_process_info(struct intel_tpmi_info *tpmi_info,
	tpmi_info->plat_info.device_number = header.dev;
	tpmi_info->plat_info.function_number = header.fn;

	if (TPMI_MINOR_VERSION(feature_header) >= TPMI_INFO_MINOR_VERSION) {
		tpmi_info->plat_info.cdie_mask = header.cdie_mask;
		tpmi_info->plat_info.partition = header.partition;
		tpmi_info->plat_info.segment = header.segment;
	}

error_info_header:
	iounmap(info_mem);

+6 −0
Original line number Diff line number Diff line
@@ -27,7 +27,10 @@ enum intel_tpmi_id {

/**
 * struct intel_tpmi_plat_info - Platform information for a TPMI device instance
 * @cdie_mask:       Mask of all compute dies in the partition
 * @package_id:      CPU Package id
 * @partition:       Package partition id when multiple VSEC PCI devices per package
 * @segment:         PCI segment ID
 * @bus_number:      PCI bus number
 * @device_number:   PCI device number
 * @function_number: PCI function number
@@ -36,7 +39,10 @@ enum intel_tpmi_id {
 * struct is used to return data via tpmi_get_platform_data().
 */
struct intel_tpmi_plat_info {
	u16 cdie_mask;
	u8 package_id;
	u8 partition;
	u8 segment;
	u8 bus_number;
	u8 device_number;
	u8 function_number;