Commit d1b6f2e2 authored by Thomas Richard's avatar Thomas Richard Committed by Krzysztof Wilczyński

PCI: cadence: Extract link setup sequence from cdns_pcie_host_setup()

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.comSigned-off-by: default avatarThomas Richard <thomas.richard@bootlin.com>
Signed-off-by: default avatarKrzysztof Wilczyński <kwilczynski@kernel.org>
Reviewed-by: default avatarSiddharth Vadapalli <s-vadapalli@ti.com>
parent 82c4be41
...@@ -497,6 +497,30 @@ static int cdns_pcie_host_init(struct device *dev, ...@@ -497,6 +497,30 @@ static int cdns_pcie_host_init(struct device *dev,
return cdns_pcie_host_init_address_translation(rc); 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) int cdns_pcie_host_setup(struct cdns_pcie_rc *rc)
{ {
struct device *dev = rc->pcie.dev; struct device *dev = rc->pcie.dev;
...@@ -533,20 +557,9 @@ int cdns_pcie_host_setup(struct cdns_pcie_rc *rc) ...@@ -533,20 +557,9 @@ int cdns_pcie_host_setup(struct cdns_pcie_rc *rc)
return PTR_ERR(rc->cfg_base); return PTR_ERR(rc->cfg_base);
rc->cfg_res = res; rc->cfg_res = res;
if (rc->quirk_detect_quiet_flag) ret = cdns_pcie_host_link_setup(rc);
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) if (ret)
dev_dbg(dev, "PCIe link never came up\n"); return ret;
for (bar = RP_BAR0; bar <= RP_NO_BAR; bar++) for (bar = RP_BAR0; bar <= RP_NO_BAR; bar++)
rc->avail_ib_bar[bar] = true; rc->avail_ib_bar[bar] = true;
......
...@@ -521,10 +521,16 @@ static inline bool cdns_pcie_link_up(struct cdns_pcie *pcie) ...@@ -521,10 +521,16 @@ static inline bool cdns_pcie_link_up(struct cdns_pcie *pcie)
} }
#ifdef CONFIG_PCIE_CADENCE_HOST #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); int cdns_pcie_host_setup(struct cdns_pcie_rc *rc);
void __iomem *cdns_pci_map_bus(struct pci_bus *bus, unsigned int devfn, void __iomem *cdns_pci_map_bus(struct pci_bus *bus, unsigned int devfn,
int where); int where);
#else #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) static inline int cdns_pcie_host_setup(struct cdns_pcie_rc *rc)
{ {
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment