nfp: don't set aux pointers if ioremap failed
authorJakub Kicinski <jakub.kicinski@netronome.com>
Mon, 29 May 2017 00:52:55 +0000 (17:52 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 30 May 2017 15:27:04 +0000 (11:27 -0400)
If ioremap of PCIe ctrl memory failed we can still get to it through
PCI config space, therefore we allow ioremap() to fail.  When if fails,
however, we must leave all the IOMEM pointers as NULL.  Currently we
would calculate csr and em pointers, adding offsets to the potential
NULL value and therefore making the NULL-checks throughout the code
ineffective.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/netronome/nfp/nfpcore/nfp6000_pcie.c

index 43dc68e01274225c79fea7760ac303a8a2409a85..1fde213d5b83d439f3b47bf56b39826561d499d7 100644 (file)
@@ -639,19 +639,23 @@ static int enable_bars(struct nfp6000_pcie *nfp, u16 interface)
                nfp6000_bar_write(nfp, bar, barcfg_msix_general);
 
                nfp->expl.data = bar->iomem + NFP_PCIE_SRAM + 0x1000;
+
+               if (nfp->pdev->device == PCI_DEVICE_ID_NETRONOME_NFP4000 ||
+                   nfp->pdev->device == PCI_DEVICE_ID_NETRONOME_NFP6000) {
+                       nfp->iomem.csr = bar->iomem + NFP_PCIE_BAR(0);
+               } else {
+                       int pf = nfp->pdev->devfn & 7;
+
+                       nfp->iomem.csr = bar->iomem + NFP_PCIE_BAR(pf);
+               }
+               nfp->iomem.em = bar->iomem + NFP_PCIE_EM;
        }
 
        if (nfp->pdev->device == PCI_DEVICE_ID_NETRONOME_NFP4000 ||
-           nfp->pdev->device == PCI_DEVICE_ID_NETRONOME_NFP6000) {
-               nfp->iomem.csr = bar->iomem + NFP_PCIE_BAR(0);
+           nfp->pdev->device == PCI_DEVICE_ID_NETRONOME_NFP6000)
                expl_groups = 4;
-       } else {
-               int pf = nfp->pdev->devfn & 7;
-
-               nfp->iomem.csr = bar->iomem + NFP_PCIE_BAR(pf);
+       else
                expl_groups = 1;
-       }
-       nfp->iomem.em = bar->iomem + NFP_PCIE_EM;
 
        /* Configure, and lock, BAR0.1 for PCIe XPB (MSI-X PBA) */
        bar = &nfp->bar[1];