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. if (retries >= LINK_WAIT_MAX_RETRIES) { dev_err(pci->dev, "Phy link never came up\n"); return -ETIMEDOUT; } offset = ... val = ... dev_info(...) return 0; }