On Thu, May 28, 2026 at 1:04 AM fengchengwen <[email protected]> wrote: > > > > On 5/28/2026 1:35 PM, Zhiping Zhang wrote: > > On Wed, May 27, 2026 at 1:53 PM Alex Williamson <[email protected]> wrote: > >> > >>> > >> On Tue, 26 May 2026 07:43:53 -0700 > >> Zhiping Zhang <[email protected]> wrote: > >> > >>> Add pcie_tph_enabled_req_type() so drivers can query the enabled TPH > >>> requester mode without reaching into pci_dev internals. > >>> > >>> This keeps pci_dev::tph_req_type inside the PCI/TPH code and provides a > >>> !CONFIG_PCIE_TPH stub for callers. > >>> > >>> Signed-off-by: Zhiping Zhang <[email protected]> > >>> --- > >>> drivers/pci/tph.c | 12 ++++++++++++ > >>> include/linux/pci-tph.h | 2 ++ > >>> 2 files changed, 14 insertions(+) > >>> > >>> diff --git a/drivers/pci/tph.c b/drivers/pci/tph.c > >>> index 91145e8d9d95..6c4492075ae9 100644 > >>> --- a/drivers/pci/tph.c > >>> +++ b/drivers/pci/tph.c > >>> @@ -174,6 +174,18 @@ u32 pcie_tph_get_st_table_loc(struct pci_dev *pdev) > >>> } > >>> EXPORT_SYMBOL(pcie_tph_get_st_table_loc); > >>> > >>> +/** > >>> + * pcie_tph_enabled_req_type - Return the device's enabled TPH requester > >>> type > >>> + * @pdev: PCI device to query > >>> + * > >>> + * Return: PCI_TPH_REQ_DISABLE, PCI_TPH_REQ_TPH_ONLY or > >>> PCI_TPH_REQ_EXT_TPH. > >>> + */ > >>> +u8 pcie_tph_enabled_req_type(struct pci_dev *pdev) > >>> +{ > >>> + return pdev->tph_req_type; > >>> +} > >>> +EXPORT_SYMBOL(pcie_tph_enabled_req_type); > >>> + > >>> /* > >>> * Return the size of ST table. If ST table is not in TPH Requester > >>> Extended > >>> * Capability space, return 0. Otherwise return the ST Table Size + 1. > >>> diff --git a/include/linux/pci-tph.h b/include/linux/pci-tph.h > >>> index be68cd17f2f8..fe572737b409 100644 > >>> --- a/include/linux/pci-tph.h > >>> +++ b/include/linux/pci-tph.h > >>> @@ -30,6 +30,7 @@ void pcie_disable_tph(struct pci_dev *pdev); > >>> int pcie_enable_tph(struct pci_dev *pdev, int mode); > >>> u16 pcie_tph_get_st_table_size(struct pci_dev *pdev); > >>> u32 pcie_tph_get_st_table_loc(struct pci_dev *pdev); > >>> +u8 pcie_tph_enabled_req_type(struct pci_dev *pdev); > >>> #else > >>> static inline int pcie_tph_set_st_entry(struct pci_dev *pdev, > >>> unsigned int index, u16 tag) > >>> @@ -41,6 +42,7 @@ static inline int pcie_tph_get_cpu_st(struct pci_dev > >>> *dev, > >>> static inline void pcie_disable_tph(struct pci_dev *pdev) { } > >>> static inline int pcie_enable_tph(struct pci_dev *pdev, int mode) > >>> { return -EINVAL; } > >>> +static inline u8 pcie_tph_enabled_req_type(struct pci_dev *pdev) { > >>> return 0; } > >> > >> nit, s/0/PCI_TPH_REQ_DISABLE/ for consistency. Thanks, > > It need add #include <linux/pci.h> at beginning too, else it will counter > compile error like this: > > In file included from drivers/vdpa/mlx5/core/mr.c:8: > In file included from include/linux/mlx5/qp.h:36: > In file included from include/linux/mlx5/device.h:37: > In file included from include/rdma/ib_verbs.h:46: > >> include/linux/pci-tph.h:48:10: error: use of undeclared identifier > >> 'PCI_TPH_LOC_NONE' > 48 | { return PCI_TPH_LOC_NONE; } > | ^ > 1 error generated. >
Great catch — thanks for testing. I will add #include <linux/pci_regs.h> to pci-tph.h so the TPH macros (PCI_TPH_REQ_*, PCI_TPH_LOC_*) are in scope wherever the header is included. Thanks, Zhiping
