Message ID | 1474056395-21843-6-git-send-email-okaya@codeaurora.org (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Bjorn Helgaas |
Headers | show |
On 9/16/2016 4:06 PM, Sinan Kaya wrote: > An endpoint is allowed to issue CRS following an FLR request to indicate > that it is not ready to accept new requests. Changing the polling mechanism > in FLR wait function to go read the vendor ID instead of the command/status > register. A CRS indication will only be given if the address to be read is > vendor ID. > > Signed-off-by: Sinan Kaya <okaya@codeaurora.org> > --- > drivers/pci/pci.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c > index e913467..1def11e 100644 > --- a/drivers/pci/pci.c > +++ b/drivers/pci/pci.c > @@ -3729,7 +3729,8 @@ static void pci_flr_wait(struct pci_dev *dev) > > do { > msleep(100); > - pci_read_config_dword(dev, PCI_COMMAND, &id); > + pci_bus_read_dev_vendor_id(dev->bus, dev->devfn, &id, > + 60 * 1000); We found out during Mellanox CX3 testing that the card returns the vendor ID earlier during FLR while other cards are OK with this implementaiton. I think we need both of the reads to support the CRS for the endpoints and also the command id register read to make sure endpoint init is complete. > } while (i++ < 10 && id == ~0); > > if (id == ~0) >
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index e913467..1def11e 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -3729,7 +3729,8 @@ static void pci_flr_wait(struct pci_dev *dev) do { msleep(100); - pci_read_config_dword(dev, PCI_COMMAND, &id); + pci_bus_read_dev_vendor_id(dev->bus, dev->devfn, &id, + 60 * 1000); } while (i++ < 10 && id == ~0); if (id == ~0)
An endpoint is allowed to issue CRS following an FLR request to indicate that it is not ready to accept new requests. Changing the polling mechanism in FLR wait function to go read the vendor ID instead of the command/status register. A CRS indication will only be given if the address to be read is vendor ID. Signed-off-by: Sinan Kaya <okaya@codeaurora.org> --- drivers/pci/pci.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)