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

Reply via email to