diff options
Diffstat (limited to 'drivers/pci/controller/pcie-rcar.c')
| -rw-r--r-- | drivers/pci/controller/pcie-rcar.c | 16 | 
1 files changed, 13 insertions, 3 deletions
| diff --git a/drivers/pci/controller/pcie-rcar.c b/drivers/pci/controller/pcie-rcar.c index 874d75c9ee4a..c8febb009454 100644 --- a/drivers/pci/controller/pcie-rcar.c +++ b/drivers/pci/controller/pcie-rcar.c @@ -680,7 +680,11 @@ static int rcar_pcie_phy_init_gen3(struct rcar_pcie *pcie)  	if (err)  		return err; -	return phy_power_on(pcie->phy); +	err = phy_power_on(pcie->phy); +	if (err) +		phy_exit(pcie->phy); + +	return err;  }  static int rcar_msi_alloc(struct rcar_msi *chip) @@ -1165,7 +1169,7 @@ static int rcar_pcie_probe(struct platform_device *pdev)  	if (rcar_pcie_hw_init(pcie)) {  		dev_info(dev, "PCIe link down\n");  		err = -ENODEV; -		goto err_clk_disable; +		goto err_phy_shutdown;  	}  	data = rcar_pci_read_reg(pcie, MACSR); @@ -1177,7 +1181,7 @@ static int rcar_pcie_probe(struct platform_device *pdev)  			dev_err(dev,  				"failed to enable MSI support: %d\n",  				err); -			goto err_clk_disable; +			goto err_phy_shutdown;  		}  	} @@ -1191,6 +1195,12 @@ err_msi_teardown:  	if (IS_ENABLED(CONFIG_PCI_MSI))  		rcar_pcie_teardown_msi(pcie); +err_phy_shutdown: +	if (pcie->phy) { +		phy_power_off(pcie->phy); +		phy_exit(pcie->phy); +	} +  err_clk_disable:  	clk_disable_unprepare(pcie->bus_clk); |