Re: [PATCH v6 2/3] PCI: cadence: Add HPA IP debugfs for LTSSM status

From: Hans Zhang

Date: Wed May 20 2026 - 11:07:39 EST




On 5/20/26 15:26, Aksh Garg wrote:


On 19/05/26 18:06, Hans Zhang wrote:
Add debugfs support for HPA-based Cadence PCIe controllers. A new file
'ltssm_status' is created under debugfs, allowing users to read the
current LTSSM state as a string and raw value.

Signed-off-by: Hans Zhang <18255117159@xxxxxxx>
---
  Documentation/ABI/testing/debugfs-cdns-pcie   |   5 +
  drivers/pci/controller/cadence/Kconfig        |   9 +
  drivers/pci/controller/cadence/Makefile       |   1 +
  drivers/pci/controller/cadence/pci-sky1.c     |   4 +
  .../controller/cadence/pcie-cadence-debugfs.c | 208 ++++++++++++++++++
  .../cadence/pcie-cadence-host-hpa.c           |  19 +-
  drivers/pci/controller/cadence/pcie-cadence.h | 153 +++++++++++++
  7 files changed, 398 insertions(+), 1 deletion(-)
  create mode 100644 Documentation/ABI/testing/debugfs-cdns-pcie
  create mode 100644 drivers/pci/controller/cadence/pcie-cadence- debugfs.c

diff --git a/Documentation/ABI/testing/debugfs-cdns-pcie b/ Documentation/ABI/testing/debugfs-cdns-pcie
new file mode 100644
index 000000000000..c1104e28e4ee
--- /dev/null
+++ b/Documentation/ABI/testing/debugfs-cdns-pcie
@@ -0,0 +1,5 @@
+What:        /sys/kernel/debug/cdns_pcie_<dev>/ltssm_status
+Date:        March 2026
+Contact:    Hans Zhang <18255117159@xxxxxxx>
+Description:    (RO) Read will return the current PCIe LTSSM state in both
+        string and raw value.
\ No newline at end of file
diff --git a/drivers/pci/controller/cadence/Kconfig b/drivers/pci/ controller/cadence/Kconfig
index 9e651d545973..cb010bc97aad 100644
--- a/drivers/pci/controller/cadence/Kconfig
+++ b/drivers/pci/controller/cadence/Kconfig
@@ -6,6 +6,15 @@ menu "Cadence-based PCIe controllers"
  config PCIE_CADENCE
      tristate
+config PCIE_CADENCE_DEBUGFS
+    tristate "Cadence PCIe debugfs entries"
+    depends on DEBUG_FS
+    depends on PCIE_CADENCE_HOST || PCIE_CADENCE_EP
+    help
+      Say Y here to enable debugfs entries for the PCIe controller. These
+      entries provide various debug features related to the controller and
+      the LTSSM status of link can be displayed.
+
  config PCIE_CADENCE_HOST
      tristate
      depends on OF

Sashiko pointed the compilation issues when this is build as a module.
The linkage issue needs to be resolved if we want this as a module.
Also, if we build it as m, it would requires MODULE_LICENSE() and MODULE_DESCRIPTION().

Hi Aksh,

Will add.



diff --git a/drivers/pci/controller/cadence/Makefile b/drivers/pci/ controller/cadence/Makefile
index b8ec1cecfaa8..2cdc4617e0c2 100644
--- a/drivers/pci/controller/cadence/Makefile
+++ b/drivers/pci/controller/cadence/Makefile
@@ -4,6 +4,7 @@ pcie-cadence-host-mod-y := pcie-cadence-host-common.o pcie-cadence-host.o pcie-c
  pcie-cadence-ep-mod-y := pcie-cadence-ep.o
  obj-$(CONFIG_PCIE_CADENCE) = pcie-cadence-mod.o
+obj-$(CONFIG_PCIE_CADENCE_DEBUGFS) += pcie-cadence-debugfs.o
  obj-$(CONFIG_PCIE_CADENCE_HOST) += pcie-cadence-host-mod.o
  obj-$(CONFIG_PCIE_CADENCE_EP) += pcie-cadence-ep-mod.o
  obj-$(CONFIG_PCIE_CADENCE_PLAT) += pcie-cadence-plat.o
diff --git a/drivers/pci/controller/cadence/pci-sky1.c b/drivers/pci/ controller/cadence/pci-sky1.c
index e1f4a98e2ab6..b8632f1d3156 100644
--- a/drivers/pci/controller/cadence/pci-sky1.c
+++ b/drivers/pci/controller/cadence/pci-sky1.c
@@ -221,6 +221,10 @@ MODULE_DEVICE_TABLE(of, of_sky1_pcie_match);

[ ... ]

  /**
@@ -447,6 +583,7 @@ void cdns_pcie_host_disable(struct cdns_pcie_rc *rc);
  void __iomem *cdns_pci_map_bus(struct pci_bus *bus, unsigned int devfn,
                     int where);
  int cdns_pcie_hpa_host_setup(struct cdns_pcie_rc *rc);
+void cdns_pcie_hpa_host_disable(struct cdns_pcie_rc *rc);
  #else
  static inline int cdns_pcie_host_link_setup(struct cdns_pcie_rc *rc)
  {
@@ -472,6 +609,10 @@ static inline void cdns_pcie_host_disable(struct cdns_pcie_rc *rc)
  {
  }
+static inline void cdns_pcie_hpa_host_disable(struct cdns_pcie_rc *rc)
+{
+}
+
  static inline void __iomem *cdns_pci_map_bus(struct pci_bus *bus, unsigned int devfn,
                           int where)
  {
@@ -535,4 +676,16 @@ bool cdns_pcie_hpa_link_up(struct cdns_pcie *pcie);
  extern const struct dev_pm_ops cdns_pcie_pm_ops;
+#ifdef CONFIG_PCIE_CADENCE_DEBUGFS

Use "#if IS_ENABLED(CONFIG_PCIE_CADENCE_DEBUGFS)" to resolve the compilation error when building as a module.


Will change.

Best regards,
Hans

+void cdns_pcie_debugfs_deinit(struct cdns_pcie *pci);
+void cdns_pcie_debugfs_init(struct cdns_pcie *pci);
+#else
+static inline void cdns_pcie_debugfs_deinit(struct cdns_pcie *pci)
+{
+}
+static inline void cdns_pcie_debugfs_init(struct cdns_pcie *pci)
+{
+}
+#endif
+
  #endif /* _PCIE_CADENCE_H */