diff options
Diffstat (limited to 'drivers/pci/controller/pcie-xilinx-nwl.c')
| -rw-r--r-- | drivers/pci/controller/pcie-xilinx-nwl.c | 45 | 
1 files changed, 6 insertions, 39 deletions
| diff --git a/drivers/pci/controller/pcie-xilinx-nwl.c b/drivers/pci/controller/pcie-xilinx-nwl.c index 9bd1427f2fd6..f3cf7d61924f 100644 --- a/drivers/pci/controller/pcie-xilinx-nwl.c +++ b/drivers/pci/controller/pcie-xilinx-nwl.c @@ -166,7 +166,6 @@ struct nwl_pcie {  	int irq_misc;  	u32 ecam_value;  	u8 last_busno; -	u8 root_busno;  	struct nwl_msi msi;  	struct irq_domain *legacy_irq_domain;  	raw_spinlock_t leg_mask_lock; @@ -217,13 +216,11 @@ static bool nwl_pcie_valid_device(struct pci_bus *bus, unsigned int devfn)  	struct nwl_pcie *pcie = bus->sysdata;  	/* Check link before accessing downstream ports */ -	if (bus->number != pcie->root_busno) { +	if (!pci_is_root_bus(bus)) {  		if (!nwl_pcie_link_up(pcie))  			return false; -	} - -	/* Only one device down on each root port */ -	if (bus->number == pcie->root_busno && devfn > 0) +	} else if (devfn > 0) +		/* Only one device down on each root port */  		return false;  	return true; @@ -586,7 +583,6 @@ static int nwl_pcie_enable_msi(struct nwl_pcie *pcie)  	/* Get msi_1 IRQ number */  	msi->irq_msi1 = platform_get_irq_byname(pdev, "msi1");  	if (msi->irq_msi1 < 0) { -		dev_err(dev, "failed to get IRQ#%d\n", msi->irq_msi1);  		ret = -EINVAL;  		goto err;  	} @@ -597,7 +593,6 @@ static int nwl_pcie_enable_msi(struct nwl_pcie *pcie)  	/* Get msi_0 IRQ number */  	msi->irq_msi0 = platform_get_irq_byname(pdev, "msi0");  	if (msi->irq_msi0 < 0) { -		dev_err(dev, "failed to get IRQ#%d\n", msi->irq_msi0);  		ret = -EINVAL;  		goto err;  	} @@ -728,11 +723,8 @@ static int nwl_pcie_bridge_init(struct nwl_pcie *pcie)  	/* Get misc IRQ number */  	pcie->irq_misc = platform_get_irq_byname(pdev, "misc"); -	if (pcie->irq_misc < 0) { -		dev_err(dev, "failed to get misc IRQ %d\n", -			pcie->irq_misc); +	if (pcie->irq_misc < 0)  		return -EINVAL; -	}  	err = devm_request_irq(dev, pcie->irq_misc,  			       nwl_pcie_misc_handler, IRQF_SHARED, @@ -797,10 +789,8 @@ static int nwl_pcie_parse_dt(struct nwl_pcie *pcie,  	/* Get intx IRQ number */  	pcie->irq_intx = platform_get_irq_byname(pdev, "intx"); -	if (pcie->irq_intx < 0) { -		dev_err(dev, "failed to get intx IRQ %d\n", pcie->irq_intx); +	if (pcie->irq_intx < 0)  		return pcie->irq_intx; -	}  	irq_set_chained_handler_and_data(pcie->irq_intx,  					 nwl_pcie_leg_handler, pcie); @@ -817,8 +807,6 @@ static int nwl_pcie_probe(struct platform_device *pdev)  {  	struct device *dev = &pdev->dev;  	struct nwl_pcie *pcie; -	struct pci_bus *bus; -	struct pci_bus *child;  	struct pci_host_bridge *bridge;  	int err; @@ -843,25 +831,14 @@ static int nwl_pcie_probe(struct platform_device *pdev)  		return err;  	} -	err = pci_parse_request_of_pci_ranges(dev, &bridge->windows, -					      &bridge->dma_ranges, NULL); -	if (err) { -		dev_err(dev, "Getting bridge resources failed\n"); -		return err; -	} -  	err = nwl_pcie_init_irq_domain(pcie);  	if (err) {  		dev_err(dev, "Failed creating IRQ Domain\n");  		return err;  	} -	bridge->dev.parent = dev;  	bridge->sysdata = pcie; -	bridge->busnr = pcie->root_busno;  	bridge->ops = &nwl_pcie_ops; -	bridge->map_irq = of_irq_parse_and_map_pci; -	bridge->swizzle_irq = pci_common_swizzle;  	if (IS_ENABLED(CONFIG_PCI_MSI)) {  		err = nwl_pcie_enable_msi(pcie); @@ -871,17 +848,7 @@ static int nwl_pcie_probe(struct platform_device *pdev)  		}  	} -	err = pci_scan_root_bus_bridge(bridge); -	if (err) -		return err; - -	bus = bridge->bus; - -	pci_assign_unassigned_bus_resources(bus); -	list_for_each_entry(child, &bus->children, node) -		pcie_bus_configure_settings(child); -	pci_bus_add_devices(bus); -	return 0; +	return pci_host_probe(bridge);  }  static struct platform_driver nwl_pcie_driver = { |