Merge branch 'gup_flag-cleanups'
[cascardo/linux.git] / drivers / pci / host / pcie-iproc-bcma.c
index 0d7bee4..8ce0890 100644 (file)
@@ -42,19 +42,24 @@ static int iproc_pcie_bcma_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 
 static int iproc_pcie_bcma_probe(struct bcma_device *bdev)
 {
+       struct device *dev = &bdev->dev;
        struct iproc_pcie *pcie;
        LIST_HEAD(res);
        struct resource res_mem;
        int ret;
 
-       pcie = devm_kzalloc(&bdev->dev, sizeof(*pcie), GFP_KERNEL);
+       pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL);
        if (!pcie)
                return -ENOMEM;
 
-       pcie->dev = &bdev->dev;
-       bcma_set_drvdata(bdev, pcie);
+       pcie->dev = dev;
 
        pcie->base = bdev->io_addr;
+       if (!pcie->base) {
+               dev_err(dev, "no controller registers\n");
+               return -ENOMEM;
+       }
+
        pcie->base_addr = bdev->addr;
 
        res_mem.start = bdev->addr_s[0];
@@ -67,10 +72,11 @@ static int iproc_pcie_bcma_probe(struct bcma_device *bdev)
 
        ret = iproc_pcie_setup(pcie, &res);
        if (ret)
-               dev_err(pcie->dev, "PCIe controller setup failed\n");
+               dev_err(dev, "PCIe controller setup failed\n");
 
        pci_free_resource_list(&res);
 
+       bcma_set_drvdata(bdev, pcie);
        return ret;
 }