diff options
Diffstat (limited to 'drivers/pci/controller/dwc/pcie-uniphier.c')
| -rw-r--r-- | drivers/pci/controller/dwc/pcie-uniphier.c | 11 | 
1 files changed, 8 insertions, 3 deletions
| diff --git a/drivers/pci/controller/dwc/pcie-uniphier.c b/drivers/pci/controller/dwc/pcie-uniphier.c index d5dc40289cce..3f30ee4a00b3 100644 --- a/drivers/pci/controller/dwc/pcie-uniphier.c +++ b/drivers/pci/controller/dwc/pcie-uniphier.c @@ -270,6 +270,7 @@ static int uniphier_pcie_config_legacy_irq(struct pcie_port *pp)  	struct uniphier_pcie_priv *priv = to_uniphier_pcie(pci);  	struct device_node *np = pci->dev->of_node;  	struct device_node *np_intc; +	int ret = 0;  	np_intc = of_get_child_by_name(np, "legacy-interrupt-controller");  	if (!np_intc) { @@ -280,20 +281,24 @@ static int uniphier_pcie_config_legacy_irq(struct pcie_port *pp)  	pp->irq = irq_of_parse_and_map(np_intc, 0);  	if (!pp->irq) {  		dev_err(pci->dev, "Failed to get an IRQ entry in legacy-interrupt-controller\n"); -		return -EINVAL; +		ret = -EINVAL; +		goto out_put_node;  	}  	priv->legacy_irq_domain = irq_domain_add_linear(np_intc, PCI_NUM_INTX,  						&uniphier_intx_domain_ops, pp);  	if (!priv->legacy_irq_domain) {  		dev_err(pci->dev, "Failed to get INTx domain\n"); -		return -ENODEV; +		ret = -ENODEV; +		goto out_put_node;  	}  	irq_set_chained_handler_and_data(pp->irq, uniphier_pcie_irq_handler,  					 pp); -	return 0; +out_put_node: +	of_node_put(np_intc); +	return ret;  }  static int uniphier_pcie_host_init(struct pcie_port *pp) |