[PATCH v1 00/10] Decouple PCI and auxbus details from Intel TPMI driver

Kuppuswamy Sathyanarayanan posted 10 patches 1 day, 19 hours ago
MAINTAINERS                              |   1 +
drivers/platform/x86/intel/Kconfig       |   4 +
drivers/platform/x86/intel/Makefile      |   1 +
drivers/platform/x86/intel/tpmi_common.c | 829 +++++++++++++++++++++++
drivers/platform/x86/intel/tpmi_common.h |  52 ++
drivers/platform/x86/intel/vsec.c        |   7 +-
drivers/platform/x86/intel/vsec_tpmi.c   | 822 +---------------------
include/linux/intel_vsec.h               |   5 +-
8 files changed, 905 insertions(+), 816 deletions(-)
create mode 100644 drivers/platform/x86/intel/tpmi_common.c
create mode 100644 drivers/platform/x86/intel/tpmi_common.h
[PATCH v1 00/10] Decouple PCI and auxbus details from Intel TPMI driver
Posted by Kuppuswamy Sathyanarayanan 1 day, 19 hours ago
Hi All,

This series is a no functional change refactor of the TPMI driver
(vsec_tpmi.c). It separates the code that does not care how TPMI was
discovered from the code that does.

TPMI is discovered today through a PCIe VSEC capability, with the PFS
table address computed relative to a PCI BAR. BARs are relocatable at
runtime by resource rebalancing, hot plug or error recovery, which ties
a platform wide register window to the lifecycle of one PCI function
and to an address an untrusted VMM can influence. That is a concern in
secure VM environments like TDX.

Newer Intel platforms will support ACPI table based TPMI enumeration.
The related ACPI spec is not public yet, so this series prepares the
driver ahead of it. Several places in vsec_tpmi.c assume the
enumerating device is a PCI device, or reach through a struct
intel_vsec_device just to get at a struct device, and neither holds
for an ACPI backend.

The series comes in three parts.

Patch 1 is a standalone cleanup. The feature device name was built in an
on-stack buffer and handed to the auxiliary bus, which stores the
pointer without copying the string.

Patches 2 to 8 each remove one PCI or intel_vsec_device dependency and
leave the code in place, so they are small and can be read on their own.

Patches 9 and 10 do the split. tpmi_probe() and tpmi_remove() become
intel_tpmi_init() and intel_tpmi_deinit(), which is the interface an
enumeration backend implements against, and the enumeration independent
code moves to a new intel-tpmi_common module. That leaves vsec_tpmi.c
with just the auxiliary driver binding to the "intel_vsec.tpmi" device
created by the Intel VSEC driver.

Tested on a GNR platform. TPMI feature enumeration, the debugfs
interface and the client drivers behave as before.

This series is based on v7.3-rc1.

Kuppuswamy Sathyanarayanan (10):
  platform/x86/intel/tpmi: Use static strings for the feature device
    names
  platform/x86/intel/vsec: Pass a struct device to
    intel_vsec_set_mapping()
  platform/x86/intel/tpmi: Remove unused vsec_dev from
    intel_tpmi_pm_feature
  platform/x86/intel/tpmi: Get tpmi_info directly from the parent device
  platform/x86/intel/tpmi: Keep the feature resources in intel_tpmi_info
  platform/x86/intel/tpmi: Describe a TPMI instance by its two devices
  platform/x86/intel/tpmi: Drop unused arg from tpmi_set_control_base()
  platform/x86/intel/tpmi: Do not assume TPMI is enumerated from PCI
  platform/x86/intel/tpmi: Split out enumeration independent init and
    exit
  platform/x86/intel/tpmi: Split off the PCI VSEC enumeration

 MAINTAINERS                              |   1 +
 drivers/platform/x86/intel/Kconfig       |   4 +
 drivers/platform/x86/intel/Makefile      |   1 +
 drivers/platform/x86/intel/tpmi_common.c | 829 +++++++++++++++++++++++
 drivers/platform/x86/intel/tpmi_common.h |  52 ++
 drivers/platform/x86/intel/vsec.c        |   7 +-
 drivers/platform/x86/intel/vsec_tpmi.c   | 822 +---------------------
 include/linux/intel_vsec.h               |   5 +-
 8 files changed, 905 insertions(+), 816 deletions(-)
 create mode 100644 drivers/platform/x86/intel/tpmi_common.c
 create mode 100644 drivers/platform/x86/intel/tpmi_common.h

-- 
2.43.0