linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V12 1/5] PCI: Don't ignore valid response before CRS timeout
@ 2017-08-23  4:56 Sinan Kaya
  2017-08-23  4:56 ` [PATCH V12 2/5] PCI: add pci_bus_crs_visibility_pending() function to detect CRS response Sinan Kaya
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Sinan Kaya @ 2017-08-23  4:56 UTC (permalink / raw)
  To: linux-arm-kernel

From: Bjorn Helgaas <bhelgaas@google.com>

While waiting for a device to become ready (i.e., to return a non-CRS
completion to a read of its Vendor ID), if we got a valid response to the
very last read before timing out, we printed a warning and gave up on the
device even though it was actually ready.

For a typical 60s timeout, we wait about 65s (it's not exact because of the
exponential backoff), but we treated devices that became ready between 33s
and 65s as though they failed.

Move the Device ID read later so we check whether the device is ready
immediately, before checking for a timeout.

Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
[okaya: reorder reads so that we check device presence after sleep]
Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
---
 drivers/pci/probe.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index c31310d..2849e0e 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -1847,17 +1847,18 @@ bool pci_bus_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *l,
 		if (!crs_timeout)
 			return false;
 
-		msleep(delay);
-		delay *= 2;
-		if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
-			return false;
-		/* Card hasn't responded in 60 seconds?  Must be stuck. */
 		if (delay > crs_timeout) {
 			printk(KERN_WARNING "pci %04x:%02x:%02x.%d: not responding\n",
 			       pci_domain_nr(bus), bus->number, PCI_SLOT(devfn),
 			       PCI_FUNC(devfn));
 			return false;
 		}
+
+		msleep(delay);
+		delay *= 2;
+
+		if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
+			return false;
 	}
 
 	return true;
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-08-23 22:24 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-23  4:56 [PATCH V12 1/5] PCI: Don't ignore valid response before CRS timeout Sinan Kaya
2017-08-23  4:56 ` [PATCH V12 2/5] PCI: add pci_bus_crs_visibility_pending() function to detect CRS response Sinan Kaya
2017-08-23  4:56 ` [PATCH V12 3/5] PCI: Factor out pci_bus_wait_crs() Sinan Kaya
2017-08-23  4:56 ` [PATCH V12 4/5] PCI: Handle CRS ("device not ready") returned by device after FLR Sinan Kaya
2017-08-23 21:38   ` Bjorn Helgaas
2017-08-23 21:51     ` Sinan Kaya
2017-08-23 22:24       ` Bjorn Helgaas
2017-08-23  4:56 ` [PATCH V12 5/5] PCI: Warn periodically while waiting for device to become ready Sinan Kaya

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).