IB/hfi: Only read capability registers if the capability exists
commit 4c009af473b2026caaa26107e34d7cc68dad7756 upstream. During driver init, various registers are saved to allow restoration after an FLR or gen3 bump. Some of these registers are not available in some circumstances (i.e. Virtual machines). This bug makes the driver unusable when the PCI device is passed into a VM, it fails during probe. Delete unnecessary register read/write, and only access register if the capability exists. Fixes: a618b7e40af2 ("IB/hfi1: Move saving PCI values to a separate function") Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
074e2892a4
commit
907145e68e
@ -1129,7 +1129,6 @@ struct hfi1_devdata {
|
||||
u16 pcie_lnkctl;
|
||||
u16 pcie_devctl2;
|
||||
u32 pci_msix0;
|
||||
u32 pci_lnkctl3;
|
||||
u32 pci_tph2;
|
||||
|
||||
/*
|
||||
|
@ -411,15 +411,12 @@ int restore_pci_variables(struct hfi1_devdata *dd)
|
||||
if (ret)
|
||||
goto error;
|
||||
|
||||
ret = pci_write_config_dword(dd->pcidev, PCIE_CFG_SPCIE1,
|
||||
dd->pci_lnkctl3);
|
||||
if (ret)
|
||||
goto error;
|
||||
|
||||
ret = pci_write_config_dword(dd->pcidev, PCIE_CFG_TPH2, dd->pci_tph2);
|
||||
if (ret)
|
||||
goto error;
|
||||
|
||||
if (pci_find_ext_capability(dd->pcidev, PCI_EXT_CAP_ID_TPH)) {
|
||||
ret = pci_write_config_dword(dd->pcidev, PCIE_CFG_TPH2,
|
||||
dd->pci_tph2);
|
||||
if (ret)
|
||||
goto error;
|
||||
}
|
||||
return 0;
|
||||
|
||||
error:
|
||||
@ -469,15 +466,12 @@ int save_pci_variables(struct hfi1_devdata *dd)
|
||||
if (ret)
|
||||
goto error;
|
||||
|
||||
ret = pci_read_config_dword(dd->pcidev, PCIE_CFG_SPCIE1,
|
||||
&dd->pci_lnkctl3);
|
||||
if (ret)
|
||||
goto error;
|
||||
|
||||
ret = pci_read_config_dword(dd->pcidev, PCIE_CFG_TPH2, &dd->pci_tph2);
|
||||
if (ret)
|
||||
goto error;
|
||||
|
||||
if (pci_find_ext_capability(dd->pcidev, PCI_EXT_CAP_ID_TPH)) {
|
||||
ret = pci_read_config_dword(dd->pcidev, PCIE_CFG_TPH2,
|
||||
&dd->pci_tph2);
|
||||
if (ret)
|
||||
goto error;
|
||||
}
|
||||
return 0;
|
||||
|
||||
error:
|
||||
|
Loading…
x
Reference in New Issue
Block a user