]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
PCI: dwc: Fail dw_pcie_host_init() if dw_pcie_wait_for_link() returns -ETIMEDOUT
authorManivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
Tue, 20 Jan 2026 17:47:44 +0000 (23:17 +0530)
committerManivannan Sadhasivam <mani@kernel.org>
Wed, 21 Jan 2026 09:19:16 +0000 (14:49 +0530)
The dw_pcie_wait_for_link() API now distinguishes link failures more
precisely:

-ENODEV: Device not found on the bus.
-EIO: Device found but inactive.
-ETIMEDOUT: Link failed to come up.

Out of these three errors, only -ETIMEDOUT represents a definitive link
failure since it signals that something is wrong with the link. For the
other two errors, there is a possibility that the link might come up later.
So fail dw_pcie_host_init() if -ETIMEDOUT is returned and skip the failure
otherwise.

Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
Reviewed-by: Niklas Cassel <cassel@kernel.org>
Link: https://patch.msgid.link/20260120-pci-dwc-suspend-rework-v4-5-2f32d5082549@oss.qualcomm.com
drivers/pci/controller/dwc/pcie-designware-host.c

index fad0cbedefbc6eca0db1d503c2b05d275436794d..a72406ef7e26e029054edba5a8559497541c19e5 100644 (file)
@@ -675,8 +675,13 @@ int dw_pcie_host_init(struct dw_pcie_rp *pp)
                        goto err_remove_edma;
        }
 
-       /* Ignore errors, the link may come up later */
-       dw_pcie_wait_for_link(pci);
+       /*
+        * Only fail on timeout error. Other errors indicate the device may
+        * become available later, so continue without failing.
+        */
+       ret = dw_pcie_wait_for_link(pci);
+       if (ret == -ETIMEDOUT)
+               goto err_stop_link;
 
        ret = pci_host_probe(bridge);
        if (ret)