diff options
Diffstat (limited to 'drivers/pci/controller/pci-mvebu.c')
| -rw-r--r-- | drivers/pci/controller/pci-mvebu.c | 23 | 
1 files changed, 10 insertions, 13 deletions
| diff --git a/drivers/pci/controller/pci-mvebu.c b/drivers/pci/controller/pci-mvebu.c index eee82838f4ba..ed13e81cd691 100644 --- a/drivers/pci/controller/pci-mvebu.c +++ b/drivers/pci/controller/pci-mvebu.c @@ -958,25 +958,16 @@ static void mvebu_pcie_powerdown(struct mvebu_pcie_port *port)  }  /* - * We can't use devm_of_pci_get_host_bridge_resources() because we - * need to parse our special DT properties encoding the MEM and IO - * apertures. + * devm_of_pci_get_host_bridge_resources() only sets up translateable resources, + * so we need extra resource setup parsing our special DT properties encoding + * the MEM and IO apertures.   */  static int mvebu_pcie_parse_request_resources(struct mvebu_pcie *pcie)  {  	struct device *dev = &pcie->pdev->dev; -	struct device_node *np = dev->of_node;  	struct pci_host_bridge *bridge = pci_host_bridge_from_priv(pcie);  	int ret; -	/* Get the bus range */ -	ret = of_pci_parse_bus_range(np, &pcie->busn); -	if (ret) { -		dev_err(dev, "failed to parse bus-range property: %d\n", ret); -		return ret; -	} -	pci_add_resource(&bridge->windows, &pcie->busn); -  	/* Get the PCIe memory aperture */  	mvebu_mbus_get_pcie_mem_aperture(&pcie->mem);  	if (resource_size(&pcie->mem) == 0) { @@ -986,6 +977,9 @@ static int mvebu_pcie_parse_request_resources(struct mvebu_pcie *pcie)  	pcie->mem.name = "PCI MEM";  	pci_add_resource(&bridge->windows, &pcie->mem); +	ret = devm_request_resource(dev, &iomem_resource, &pcie->mem); +	if (ret) +		return ret;  	/* Get the PCIe IO aperture */  	mvebu_mbus_get_pcie_io_aperture(&pcie->io); @@ -999,9 +993,12 @@ static int mvebu_pcie_parse_request_resources(struct mvebu_pcie *pcie)  		pcie->realio.name = "PCI I/O";  		pci_add_resource(&bridge->windows, &pcie->realio); +		ret = devm_request_resource(dev, &ioport_resource, &pcie->realio); +		if (ret) +			return ret;  	} -	return devm_request_pci_bus_resources(dev, &bridge->windows); +	return 0;  }  /* |