]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
PCI: cadence-ep: Introduce cdns_pcie_ep_disable() helper for cleanup
authorSiddharth Vadapalli <s-vadapalli@ti.com>
Thu, 17 Apr 2025 12:44:07 +0000 (18:14 +0530)
committerBjorn Helgaas <bhelgaas@google.com>
Mon, 2 Jun 2025 21:02:37 +0000 (16:02 -0500)
Introduce the helper function cdns_pcie_ep_disable() which will undo the
configuration performed by cdns_pcie_ep_setup(). Also, export it for use
by the existing callers of cdns_pcie_ep_setup(), thereby allowing them
to cleanup on their exit path.

Signed-off-by: Siddharth Vadapalli <s-vadapalli@ti.com>
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Link: https://patch.msgid.link/20250417124408.2752248-4-s-vadapalli@ti.com
drivers/pci/controller/cadence/pcie-cadence-ep.c
drivers/pci/controller/cadence/pcie-cadence.h

index 387c0c49333b792734afd18b79cad96f3c80d150..26534b6f3a87e9685a180776148bf83b925e64f5 100644 (file)
@@ -646,6 +646,17 @@ static const struct pci_epc_ops cdns_pcie_epc_ops = {
        .get_features   = cdns_pcie_ep_get_features,
 };
 
+void cdns_pcie_ep_disable(struct cdns_pcie_ep *ep)
+{
+       struct device *dev = ep->pcie.dev;
+       struct pci_epc *epc = to_pci_epc(dev);
+
+       pci_epc_deinit_notify(epc);
+       pci_epc_mem_free_addr(epc, ep->irq_phys_addr, ep->irq_cpu_addr,
+                             SZ_128K);
+       pci_epc_mem_exit(epc);
+}
+EXPORT_SYMBOL_GPL(cdns_pcie_ep_disable);
 
 int cdns_pcie_ep_setup(struct cdns_pcie_ep *ep)
 {
index 40ff5aadc94fe41445be006d8dec0a2f23df1b1a..a149845d341ae4b314acc4d384599d5f4669a5f3 100644 (file)
@@ -544,11 +544,16 @@ static inline void __iomem *cdns_pci_map_bus(struct pci_bus *bus, unsigned int d
 
 #if IS_ENABLED(CONFIG_PCIE_CADENCE_EP)
 int cdns_pcie_ep_setup(struct cdns_pcie_ep *ep);
+void cdns_pcie_ep_disable(struct cdns_pcie_ep *ep);
 #else
 static inline int cdns_pcie_ep_setup(struct cdns_pcie_ep *ep)
 {
        return 0;
 }
+
+static inline void cdns_pcie_ep_disable(struct cdns_pcie_ep *ep)
+{
+}
 #endif
 
 void cdns_pcie_detect_quiet_min_delay_set(struct cdns_pcie *pcie);