]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
PCI: cadence: Extract link setup sequence from cdns_pcie_host_setup()
authorThomas Richard <thomas.richard@bootlin.com>
Wed, 19 Jun 2024 10:15:09 +0000 (12:15 +0200)
committerKrzysztof Wilczyński <kwilczynski@kernel.org>
Tue, 3 Sep 2024 18:27:12 +0000 (18:27 +0000)
The function cdns_pcie_host_setup() mixes probe structure and link setup.

The link setup must be done during the resume sequence. So extract it from
cdns_pcie_host_setup() and create a dedicated function.

Link: https://lore.kernel.org/linux-pci/20240102-j7200-pcie-s2r-v7-1-a2f9156da6c3@bootlin.com
Signed-off-by: Thomas Richard <thomas.richard@bootlin.com>
Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
Reviewed-by: Siddharth Vadapalli <s-vadapalli@ti.com>
drivers/pci/controller/cadence/pcie-cadence-host.c
drivers/pci/controller/cadence/pcie-cadence.h

index 5b14f7ee3c798ed8ad6b381ddac92b626c55b03d..93d9922730af56f92dd42372e70ea19d3cc61d59 100644 (file)
@@ -497,6 +497,30 @@ static int cdns_pcie_host_init(struct device *dev,
        return cdns_pcie_host_init_address_translation(rc);
 }
 
+int cdns_pcie_host_link_setup(struct cdns_pcie_rc *rc)
+{
+       struct cdns_pcie *pcie = &rc->pcie;
+       struct device *dev = rc->pcie.dev;
+       int ret;
+
+       if (rc->quirk_detect_quiet_flag)
+               cdns_pcie_detect_quiet_min_delay_set(&rc->pcie);
+
+       cdns_pcie_host_enable_ptm_response(pcie);
+
+       ret = cdns_pcie_start_link(pcie);
+       if (ret) {
+               dev_err(dev, "Failed to start link\n");
+               return ret;
+       }
+
+       ret = cdns_pcie_host_start_link(rc);
+       if (ret)
+               dev_dbg(dev, "PCIe link never came up\n");
+
+       return 0;
+}
+
 int cdns_pcie_host_setup(struct cdns_pcie_rc *rc)
 {
        struct device *dev = rc->pcie.dev;
@@ -533,20 +557,9 @@ int cdns_pcie_host_setup(struct cdns_pcie_rc *rc)
                return PTR_ERR(rc->cfg_base);
        rc->cfg_res = res;
 
-       if (rc->quirk_detect_quiet_flag)
-               cdns_pcie_detect_quiet_min_delay_set(&rc->pcie);
-
-       cdns_pcie_host_enable_ptm_response(pcie);
-
-       ret = cdns_pcie_start_link(pcie);
-       if (ret) {
-               dev_err(dev, "Failed to start link\n");
-               return ret;
-       }
-
-       ret = cdns_pcie_host_start_link(rc);
+       ret = cdns_pcie_host_link_setup(rc);
        if (ret)
-               dev_dbg(dev, "PCIe link never came up\n");
+               return ret;
 
        for (bar = RP_BAR0; bar <= RP_NO_BAR; bar++)
                rc->avail_ib_bar[bar] = true;
index 7a66a2f815dcea38c78b1f172f54d7cdd5deb5ad..1d37d5f9f811c9ad6a2c69b7af7d6f8a86624e56 100644 (file)
@@ -521,10 +521,16 @@ static inline bool cdns_pcie_link_up(struct cdns_pcie *pcie)
 }
 
 #ifdef CONFIG_PCIE_CADENCE_HOST
+int cdns_pcie_host_link_setup(struct cdns_pcie_rc *rc);
 int cdns_pcie_host_setup(struct cdns_pcie_rc *rc);
 void __iomem *cdns_pci_map_bus(struct pci_bus *bus, unsigned int devfn,
                               int where);
 #else
+static inline int cdns_pcie_host_link_setup(struct cdns_pcie_rc *rc)
+{
+       return 0;
+}
+
 static inline int cdns_pcie_host_setup(struct cdns_pcie_rc *rc)
 {
        return 0;