| From 8bea6b4f39d8099d95679ee330137b73dce46aef Mon Sep 17 00:00:00 2001 |
| From: Marek Vasut <marek.vasut@gmail.com> |
| Date: Fri, 29 Jun 2018 13:47:38 -0500 |
| Subject: [PATCH 1562/1795] PCI: rcar: Shut the PHY down in failpath |
| |
| If anything fails past phy_init_fn() and the system is a Gen3 with |
| a PHY, the PHY will be left on and inited. This is caused by the |
| phy_init_fn, which is in fact a pointer to rcar_pcie_phy_init_gen3() |
| function, which starts the PHY, yet has no counterpart in the failpath. |
| Add that counterpart. |
| |
| Fixes: 517ca93a7159 ("PCI: rcar: Add R-Car gen3 PHY support") |
| Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com> |
| Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> |
| Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> |
| Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| Acked-by: Simon Horman <horms+renesas@verge.net.au> |
| Cc: Geert Uytterhoeven <geert+renesas@glider.be> |
| Cc: Phil Edworthy <phil.edworthy@renesas.com> |
| Cc: Wolfram Sang <wsa@the-dreams.de> |
| (cherry picked from commit 4050360f964694a3ac0c83badd1a441207c86889) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| |
| Conflicts: |
| drivers/pci/controller/pcie-rcar.c |
| drivers/pci/host/pcie-rcar.c |
| --- |
| drivers/pci/host/pcie-rcar.c | 10 ++++++++-- |
| 1 file changed, 8 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/pci/host/pcie-rcar.c b/drivers/pci/host/pcie-rcar.c |
| index 23251c6cde5c..2c0af4772c39 100644 |
| --- a/drivers/pci/host/pcie-rcar.c |
| +++ b/drivers/pci/host/pcie-rcar.c |
| @@ -1166,7 +1166,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); |
| @@ -1178,7 +1178,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; |
| } |
| } |
| |
| @@ -1192,6 +1192,12 @@ static int rcar_pcie_probe(struct platform_device *pdev) |
| 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); |
| |
| -- |
| 2.19.0 |
| |