On 24/02/15 04:18PM, Thomas Richard wrote: > 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. > > Signed-off-by: Thomas Richard <thomas.richard@xxxxxxxxxxx> LGTM. Reviewed-by: Siddharth Vadapalli <s-vadapalli@xxxxxx> Regards, Siddharth. > --- > drivers/pci/controller/cadence/pcie-cadence-host.c | 39 ++++++++++++++-------- > drivers/pci/controller/cadence/pcie-cadence.h | 6 ++++ > 2 files changed, 32 insertions(+), 13 deletions(-) > > diff --git a/drivers/pci/controller/cadence/pcie-cadence-host.c b/drivers/pci/controller/cadence/pcie-cadence-host.c > index 5b14f7ee3c79..93d9922730af 100644 > --- a/drivers/pci/controller/cadence/pcie-cadence-host.c > +++ b/drivers/pci/controller/cadence/pcie-cadence-host.c > @@ -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; > diff --git a/drivers/pci/controller/cadence/pcie-cadence.h b/drivers/pci/controller/cadence/pcie-cadence.h > index 373cb50fcd15..4c687aeb810e 100644 > --- a/drivers/pci/controller/cadence/pcie-cadence.h > +++ b/drivers/pci/controller/cadence/pcie-cadence.h > @@ -515,10 +515,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; > > -- > 2.39.2 > >