Skip to content

Commit

Permalink
platform/x86/intel/tpmi: Add additional TPMI header fields
Browse files Browse the repository at this point in the history
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: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Zhang Rui <rui.zhang@intel.com>
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Link: https://lore.kernel.org/r/20240423204619.3946901-5-srinivas.pandruvada@linux.intel.com
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  • Loading branch information
Srinivas Pandruvada authored and Hans de Goede committed Apr 29, 2024
1 parent 1192534 commit c8405cc
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 1 deletion.
15 changes: 14 additions & 1 deletion drivers/platform/x86/intel/tpmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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;

Expand Down Expand Up @@ -667,6 +673,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)
Expand All @@ -693,6 +700,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);

Expand Down
6 changes: 6 additions & 0 deletions include/linux/intel_tpmi.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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;
Expand Down

0 comments on commit c8405cc

Please sign in to comment.