PCI: Add pci_bus_crs_vendor_id() to detect CRS response data
Add pci_bus_crs_vendor_id() to determine whether data returned for a config read of the Vendor ID indicates a Configuration Request Retry Status (CRS) response. Per PCIe r3.1, sec 2.3.2, this data is only returned if: - CRS Software Visibility is enabled, - a config read includes both bytes of the Vendor ID, and - the read receives a CRS completion Signed-off-by: Sinan Kaya <okaya@codeaurora.org> [bhelgaas: changelog, change name to pci_bus_crs_vendor_id(), make static in probe.c, use it in pci_bus_read_dev_vendor_id()] Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
parent
9f98275671
commit
62bc6a6f74
|
@ -1853,6 +1853,11 @@ struct pci_dev *pci_alloc_dev(struct pci_bus *bus)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(pci_alloc_dev);
|
EXPORT_SYMBOL(pci_alloc_dev);
|
||||||
|
|
||||||
|
static bool pci_bus_crs_vendor_id(u32 l)
|
||||||
|
{
|
||||||
|
return (l & 0xffff) == 0x0001;
|
||||||
|
}
|
||||||
|
|
||||||
bool pci_bus_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *l,
|
bool pci_bus_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *l,
|
||||||
int crs_timeout)
|
int crs_timeout)
|
||||||
{
|
{
|
||||||
|
@ -1872,7 +1877,7 @@ bool pci_bus_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *l,
|
||||||
* by the PCIe spec. Ignore the device ID and only check for
|
* by the PCIe spec. Ignore the device ID and only check for
|
||||||
* (vendor id == 1).
|
* (vendor id == 1).
|
||||||
*/
|
*/
|
||||||
while ((*l & 0xffff) == 0x0001) {
|
while (pci_bus_crs_vendor_id(*l)) {
|
||||||
if (!crs_timeout)
|
if (!crs_timeout)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue