diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2020-12-15 10:48:07 +0100 | 
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2020-12-15 10:48:07 +0100 | 
| commit | 3c41e57a1e168d879e923c5583adeae47eec9f64 (patch) | |
| tree | e6272012c4b766189be2821316a3d23d115f5195 /drivers/pci/controller | |
| parent | d14ce74f1fb376ccbbc0b05ded477ada51253729 (diff) | |
| parent | 2f5fbc4305d07725bfebaedb09e57271315691ef (diff) | |
Merge tag 'irqchip-5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms into irq/core
Pull irqchip updates for 5.11 from Marc Zyngier:
  - Preliminary support for managed interrupts on platform devices
  - Correctly identify allocation of MSIs proxyied by another device
  - Remove the fasteoi IPI flow which has been proved useless
  - Generalise the Ocelot support to new SoCs
  - Improve GICv4.1 vcpu entry, matching the corresponding KVM optimisation
  - Work around spurious interrupts on Qualcomm PDC
  - Random fixes and cleanups
Link: https://lore.kernel.org/r/20201212135626.1479884-1-maz@kernel.org
Diffstat (limited to 'drivers/pci/controller')
| -rw-r--r-- | drivers/pci/controller/dwc/pcie-designware-host.c | 8 | ||||
| -rw-r--r-- | drivers/pci/controller/pci-mvebu.c | 23 | 
2 files changed, 16 insertions, 15 deletions
| diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c index 674f32db85ca..44c2a6572199 100644 --- a/drivers/pci/controller/dwc/pcie-designware-host.c +++ b/drivers/pci/controller/dwc/pcie-designware-host.c @@ -586,8 +586,12 @@ void dw_pcie_setup_rc(struct pcie_port *pp)  	 * ATU, so we should not program the ATU here.  	 */  	if (pp->bridge->child_ops == &dw_child_pcie_ops) { -		struct resource_entry *entry = -			resource_list_first_type(&pp->bridge->windows, IORESOURCE_MEM); +		struct resource_entry *tmp, *entry = NULL; + +		/* Get last memory resource entry */ +		resource_list_for_each_entry(tmp, &pp->bridge->windows) +			if (resource_type(tmp->res) == IORESOURCE_MEM) +				entry = tmp;  		dw_pcie_prog_outbound_atu(pci, PCIE_ATU_REGION_INDEX0,  					  PCIE_ATU_TYPE_MEM, entry->res->start, 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;  }  /* | 
