Merge branches 'pci/host-aardvark', 'pci/host-altera', 'pci/host-artpec', 'pci/host...
[cascardo/linux.git] / drivers / pci / host / pci-aardvark.c
index ef9893f..e4a5b7e 100644 (file)
@@ -848,7 +848,7 @@ static int advk_pcie_parse_request_of_pci_ranges(struct advk_pcie *pcie)
        int err, res_valid = 0;
        struct device *dev = &pcie->pdev->dev;
        struct device_node *np = dev->of_node;
-       struct resource_entry *win;
+       struct resource_entry *win, *tmp;
        resource_size_t iobase;
 
        INIT_LIST_HEAD(&pcie->resources);
@@ -862,7 +862,7 @@ static int advk_pcie_parse_request_of_pci_ranges(struct advk_pcie *pcie)
        if (err)
                goto out_release_res;
 
-       resource_list_for_each_entry(win, &pcie->resources) {
+       resource_list_for_each_entry_safe(win, tmp, &pcie->resources) {
                struct resource *res = win->res;
 
                switch (resource_type(res)) {
@@ -874,9 +874,11 @@ static int advk_pcie_parse_request_of_pci_ranges(struct advk_pcie *pcie)
                                             lower_32_bits(res->start),
                                             OB_PCIE_IO);
                        err = pci_remap_iospace(res, iobase);
-                       if (err)
+                       if (err) {
                                dev_warn(dev, "error %d: failed to map resource %pR\n",
                                         err, res);
+                               resource_list_destroy_entry(win);
+                       }
                        break;
                case IORESOURCE_MEM:
                        advk_pcie_set_ob_win(pcie, 0,
@@ -925,10 +927,8 @@ static int advk_pcie_probe(struct platform_device *pdev)
 
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        pcie->base = devm_ioremap_resource(&pdev->dev, res);
-       if (IS_ERR(pcie->base)) {
-               dev_err(&pdev->dev, "Failed to map registers\n");
+       if (IS_ERR(pcie->base))
                return PTR_ERR(pcie->base);
-       }
 
        irq = platform_get_irq(pdev, 0);
        ret = devm_request_irq(&pdev->dev, irq, advk_pcie_irq_handler,