Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 62bc6a6f authored by Sinan Kaya's avatar Sinan Kaya Committed by Bjorn Helgaas
Browse files

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: default avatarSinan 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: default avatarBjorn Helgaas <bhelgaas@google.com>
parent 9f982756
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -1853,6 +1853,11 @@ struct pci_dev *pci_alloc_dev(struct pci_bus *bus)
}
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,
				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
	 * (vendor id == 1).
	 */
	while ((*l & 0xffff) == 0x0001) {
	while (pci_bus_crs_vendor_id(*l)) {
		if (!crs_timeout)
			return false;