Commit c53df62c authored by Bartlomiej Dudek's avatar Bartlomiej Dudek Committed by Doug Ledford

IB/hfi1: Check return values from PCI config API calls

Ensure that return values from kernel PCI config access
API calls in HFI driver are checked and react properly if
they are not expected (i.e. not successful).
Reviewed-by: default avatarJakub Byczkowski <jakub.byczkowski@intel.com>
Signed-off-by: default avatarBartlomiej Dudek <bartlomiej.dudek@intel.com>
Signed-off-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent 967de358
...@@ -13846,9 +13846,10 @@ static void init_sc2vl_tables(struct hfi1_devdata *dd) ...@@ -13846,9 +13846,10 @@ static void init_sc2vl_tables(struct hfi1_devdata *dd)
* a reset following the (possible) FLR in this routine. * a reset following the (possible) FLR in this routine.
* *
*/ */
static void init_chip(struct hfi1_devdata *dd) static int init_chip(struct hfi1_devdata *dd)
{ {
int i; int i;
int ret = 0;
/* /*
* Put the HFI CSRs in a known state. * Put the HFI CSRs in a known state.
...@@ -13896,12 +13897,22 @@ static void init_chip(struct hfi1_devdata *dd) ...@@ -13896,12 +13897,22 @@ static void init_chip(struct hfi1_devdata *dd)
pcie_flr(dd->pcidev); pcie_flr(dd->pcidev);
/* restore command and BARs */ /* restore command and BARs */
restore_pci_variables(dd); ret = restore_pci_variables(dd);
if (ret) {
dd_dev_err(dd, "%s: Could not restore PCI variables\n",
__func__);
return ret;
}
if (is_ax(dd)) { if (is_ax(dd)) {
dd_dev_info(dd, "Resetting CSRs with FLR\n"); dd_dev_info(dd, "Resetting CSRs with FLR\n");
pcie_flr(dd->pcidev); pcie_flr(dd->pcidev);
restore_pci_variables(dd); ret = restore_pci_variables(dd);
if (ret) {
dd_dev_err(dd, "%s: Could not restore PCI variables\n",
__func__);
return ret;
}
} }
} else { } else {
dd_dev_info(dd, "Resetting CSRs with writes\n"); dd_dev_info(dd, "Resetting CSRs with writes\n");
...@@ -13929,6 +13940,7 @@ static void init_chip(struct hfi1_devdata *dd) ...@@ -13929,6 +13940,7 @@ static void init_chip(struct hfi1_devdata *dd)
write_csr(dd, ASIC_QSFP1_OUT, 0x1f); write_csr(dd, ASIC_QSFP1_OUT, 0x1f);
write_csr(dd, ASIC_QSFP2_OUT, 0x1f); write_csr(dd, ASIC_QSFP2_OUT, 0x1f);
init_chip_resources(dd); init_chip_resources(dd);
return ret;
} }
static void init_early_variables(struct hfi1_devdata *dd) static void init_early_variables(struct hfi1_devdata *dd)
...@@ -14914,7 +14926,9 @@ struct hfi1_devdata *hfi1_init_dd(struct pci_dev *pdev, ...@@ -14914,7 +14926,9 @@ struct hfi1_devdata *hfi1_init_dd(struct pci_dev *pdev,
goto bail_cleanup; goto bail_cleanup;
/* obtain chip sizes, reset chip CSRs */ /* obtain chip sizes, reset chip CSRs */
init_chip(dd); ret = init_chip(dd);
if (ret)
goto bail_cleanup;
/* read in the PCIe link speed information */ /* read in the PCIe link speed information */
ret = pcie_speeds(dd); ret = pcie_speeds(dd);
......
...@@ -1854,7 +1854,7 @@ int hfi1_pcie_ddinit(struct hfi1_devdata *dd, struct pci_dev *pdev); ...@@ -1854,7 +1854,7 @@ int hfi1_pcie_ddinit(struct hfi1_devdata *dd, struct pci_dev *pdev);
void hfi1_pcie_ddcleanup(struct hfi1_devdata *); void hfi1_pcie_ddcleanup(struct hfi1_devdata *);
int pcie_speeds(struct hfi1_devdata *dd); int pcie_speeds(struct hfi1_devdata *dd);
int request_msix(struct hfi1_devdata *dd, u32 msireq); int request_msix(struct hfi1_devdata *dd, u32 msireq);
void restore_pci_variables(struct hfi1_devdata *dd); int restore_pci_variables(struct hfi1_devdata *dd);
int do_pcie_gen3_transition(struct hfi1_devdata *dd); int do_pcie_gen3_transition(struct hfi1_devdata *dd);
int parse_platform_config(struct hfi1_devdata *dd); int parse_platform_config(struct hfi1_devdata *dd);
int get_platform_config_field(struct hfi1_devdata *dd, int get_platform_config_field(struct hfi1_devdata *dd,
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment