mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v2 00/19] Decouple PCI and auxbus details from Intel TPMI driver
@ 2026-09-24 18:23 Kuppuswamy Sathyanarayanan
  2026-09-24 18:23 ` [PATCH v2 01/19] platform/x86/intel/tpmi: Use static strings for the feature device names Kuppuswamy Sathyanarayanan
                   ` (18 more replies)
  0 siblings, 19 replies; 26+ messages in thread
From: Kuppuswamy Sathyanarayanan @ 2026-09-24 18:23 UTC (permalink / raw)
  To: Srinivas Pandruvada, Hans de Goede, Ilpo Järvinen, David E Box
  Cc: Andy Shevchenko, platform-driver-x86, linux-kernel

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 four 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.

Patches 11 to 19 are code improvements to tpmi_common.c. Some of them
come from Ilpo's review of v1. Others were suggested by Andy in an
internal review of this series, and since they touch the same code I
have included them here as well. Each patch carries a Suggested-by tag
for whoever suggested it.

They are separate patches on top of the move in patch 10, as Ilpo asked,
so that patch 10 stays a pure code move and can still be reviewed with a
diff-of-diffs against the original vsec_tpmi.c. Each of them does one
thing to tpmi_common.c and nothing else.

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

Changes since v1:
 - Added patches 11 to 19, from Ilpo's review of v1 and Andy's internal
   review. Patches 1 to 10 are unchanged and carry the Reviewed-by tags
   they collected.
 - Patch 11: include the headers tpmi_common.c uses directly instead of
   relying on other headers to pull them in, drop the redundant io.h and
   sort the block.
 - Patch 12: turn TPMI_GET_SINGLE_ENTRY_SIZE() into a function, so the
   u32 to byte conversion reads as a multiply by sizeof(u32), the
   statement expression goes away and the argument is evaluated once.
 - Patch 13: take tpmi_dev_lock with guard() in
   tpmi_read_feature_status() and drop the unlock label.
 - Patch 14: use __free(kfree) and guard() in tpmi_mem_dump_show() so the
   ioremap() failure can return from the loop.
 - Patch 15: build each TPMI control mailbox word in one expression.
 - Patch 16: use DEFINE_SHOW_STORE_ATTRIBUTE() for the mem_write debugfs
   file.
 - Patch 17: scnprintf() instead of snprintf().
 - Patch 18: declare the loop counters in their loops.
 - Patch 19: make the device creation policy a comment on
   tpmi_create_devices() and split the condition it described.

This series is based on v7.3-rc1.

Kuppuswamy Sathyanarayanan (19):
  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
  platform/x86/intel/tpmi: Include the headers tpmi_common.c relies on
  platform/x86/intel/tpmi: Turn TPMI_GET_SINGLE_ENTRY_SIZE() into a
    function
  platform/x86/intel/tpmi: Use guard() for tpmi_dev_lock in the status
    read
  platform/x86/intel/tpmi: Use scope based cleanup in the memory dump
  platform/x86/intel/tpmi: Build the TPMI control words in one
    expression
  platform/x86/intel/tpmi: Use DEFINE_SHOW_STORE_ATTRIBUTE() for
    mem_write
  platform/x86/intel/tpmi: Use scnprintf() to build the debugfs names
  platform/x86/intel/tpmi: Declare the loop counters in their loops
  platform/x86/intel/tpmi: Describe the device creation policy on the
    function

 MAINTAINERS                              |   1 +
 drivers/platform/x86/intel/Kconfig       |   4 +
 drivers/platform/x86/intel/Makefile      |   1 +
 drivers/platform/x86/intel/tpmi_common.c | 824 +++++++++++++++++++++++
 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, 900 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


^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2026-09-24 21:19 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-24 18:23 [PATCH v2 00/19] Decouple PCI and auxbus details from Intel TPMI driver Kuppuswamy Sathyanarayanan
2026-09-24 18:23 ` [PATCH v2 01/19] platform/x86/intel/tpmi: Use static strings for the feature device names Kuppuswamy Sathyanarayanan
2026-09-24 18:23 ` [PATCH v2 02/19] platform/x86/intel/vsec: Pass a struct device to intel_vsec_set_mapping() Kuppuswamy Sathyanarayanan
2026-09-24 18:23 ` [PATCH v2 03/19] platform/x86/intel/tpmi: Remove unused vsec_dev from intel_tpmi_pm_feature Kuppuswamy Sathyanarayanan
2026-09-24 18:23 ` [PATCH v2 04/19] platform/x86/intel/tpmi: Get tpmi_info directly from the parent device Kuppuswamy Sathyanarayanan
2026-09-24 18:23 ` [PATCH v2 05/19] platform/x86/intel/tpmi: Keep the feature resources in intel_tpmi_info Kuppuswamy Sathyanarayanan
2026-09-24 18:23 ` [PATCH v2 06/19] platform/x86/intel/tpmi: Describe a TPMI instance by its two devices Kuppuswamy Sathyanarayanan
2026-09-24 18:23 ` [PATCH v2 07/19] platform/x86/intel/tpmi: Drop unused arg from tpmi_set_control_base() Kuppuswamy Sathyanarayanan
2026-09-24 18:23 ` [PATCH v2 08/19] platform/x86/intel/tpmi: Do not assume TPMI is enumerated from PCI Kuppuswamy Sathyanarayanan
2026-09-24 18:23 ` [PATCH v2 09/19] platform/x86/intel/tpmi: Split out enumeration independent init and exit Kuppuswamy Sathyanarayanan
2026-09-24 18:23 ` [PATCH v2 10/19] platform/x86/intel/tpmi: Split off the PCI VSEC enumeration Kuppuswamy Sathyanarayanan
2026-09-24 18:23 ` [PATCH v2 11/19] platform/x86/intel/tpmi: Include the headers tpmi_common.c relies on Kuppuswamy Sathyanarayanan
2026-09-24 21:10   ` Andy Shevchenko
2026-09-24 18:23 ` [PATCH v2 12/19] platform/x86/intel/tpmi: Turn TPMI_GET_SINGLE_ENTRY_SIZE() into a function Kuppuswamy Sathyanarayanan
2026-09-24 18:23 ` [PATCH v2 13/19] platform/x86/intel/tpmi: Use guard() for tpmi_dev_lock in the status read Kuppuswamy Sathyanarayanan
2026-09-24 21:15   ` Andy Shevchenko
2026-09-24 18:23 ` [PATCH v2 14/19] platform/x86/intel/tpmi: Use scope based cleanup in the memory dump Kuppuswamy Sathyanarayanan
2026-09-24 18:23 ` [PATCH v2 15/19] platform/x86/intel/tpmi: Build the TPMI control words in one expression Kuppuswamy Sathyanarayanan
2026-09-24 21:14   ` Andy Shevchenko
2026-09-24 18:23 ` [PATCH v2 16/19] platform/x86/intel/tpmi: Use DEFINE_SHOW_STORE_ATTRIBUTE() for mem_write Kuppuswamy Sathyanarayanan
2026-09-24 21:14   ` Andy Shevchenko
2026-09-24 18:23 ` [PATCH v2 17/19] platform/x86/intel/tpmi: Use scnprintf() to build the debugfs names Kuppuswamy Sathyanarayanan
2026-09-24 18:23 ` [PATCH v2 18/19] platform/x86/intel/tpmi: Declare the loop counters in their loops Kuppuswamy Sathyanarayanan
2026-09-24 21:17   ` Andy Shevchenko
2026-09-24 18:23 ` [PATCH v2 19/19] platform/x86/intel/tpmi: Describe the device creation policy on the function Kuppuswamy Sathyanarayanan
2026-09-24 21:19   ` Andy Shevchenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®