On Mon, Mar 28, 2022 at 04:31:53PM -0700, Joe Perches wrote: > On Thu, 2022-03-24 at 04:37 +0300, Serge Semin wrote: > > Printing just "link up" isn't that much informative especially when it > > comes to working with the PCI Express bus. Even if the link is up, due to > > multiple reasons the bus performance can degrade to slower speeds or to > > narrower width than both Root Port and its partner is capable of. In that > > case it would be handy to know the link specifications as early as > > possible. So let's add a more verbose message to the busy-wait link-state > > method, which will contain the link speed generation and the PCIe bus > > width in case if the link up state is discovered. Otherwise an error will > > be printed to the system log. > > > > Signed-off-by: Serge Semin <Sergey.Semin@xxxxxxxxxxxxxxxxxxxx> > > --- > > drivers/pci/controller/dwc/pcie-designware.c | 22 +++++++++++++++----- > > 1 file changed, 17 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/pci/controller/dwc/pcie-designware.c b/drivers/pci/controller/dwc/pcie-designware.c > [] > > @@ -528,14 +528,26 @@ int dw_pcie_wait_for_link(struct dw_pcie *pci) > > > > /* Check if the link is up or not */ > > for (retries = 0; retries < LINK_WAIT_MAX_RETRIES; retries++) { > > - if (dw_pcie_link_up(pci)) { > > - dev_info(pci->dev, "Link up\n"); > > - return 0; > > - } > > + if (dw_pcie_link_up(pci)) > > + break; > > + > > usleep_range(LINK_WAIT_USLEEP_MIN, LINK_WAIT_USLEEP_MAX); > > } > > > > - dev_info(pci->dev, "Phy link never came up\n"); > > + if (retries < LINK_WAIT_MAX_RETRIES) { > > + u32 offset, val; > > + > > + offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP); > > + val = dw_pcie_readw_dbi(pci, offset + PCI_EXP_LNKSTA); > > + > > + dev_info(pci->dev, "PCIe Gen.%u x%u link up\n", > > + FIELD_GET(PCI_EXP_LNKSTA_CLS, val), > > + FIELD_GET(PCI_EXP_LNKSTA_NLW, val)); > > + > > + return 0; > > + } > > + > > + dev_err(pci->dev, "Phy link never came up\n"); > > > > return -ETIMEDOUT; > > } > > IMO: it's generally bette to test the error condition and unindent > the typical return. Absolutely right. Thanks for noticing that. No idea why I haven't done the way you said 'cause it seems neater, more maintainable than what I suggested here. -Sergey > > if (retries >= LINK_WAIT_MAX_RETRIES) { > dev_err(pci->dev, "Phy link never came up\n"); > return -ETIMEDOUT; > } > > offset = ... > val = ... > dev_info(...) > > return 0; > } >