|
@@ -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,
|