| From b8a125653020622994ad1c9b87638637d113e20b Mon Sep 17 00:00:00 2001 |
| From: Dien Pham <dien.pham.ry@rvc.renesas.com> |
| Date: Sun, 8 Apr 2018 15:09:25 +0200 |
| Subject: [PATCH 1427/1795] PCI: rcar: Use runtime PM to control controller |
| clock |
| |
| The controller clock can be switched off during suspend/resume, |
| let runtime PM take care of that. |
| |
| Signed-off-by: Dien Pham <dien.pham.ry@rvc.renesas.com> |
| Signed-off-by: Hien Dang <hien.dang.eb@renesas.com> |
| Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com> |
| Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> |
| Cc: Geert Uytterhoeven <geert+renesas@glider.be> |
| Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> |
| Cc: Phil Edworthy <phil.edworthy@renesas.com> |
| Cc: Simon Horman <horms+renesas@verge.net.au> |
| Cc: Wolfram Sang <wsa@the-dreams.de> |
| Cc: linux-renesas-soc@vger.kernel.org |
| To: linux-pci@vger.kernel.org |
| Reviewed-by: Simon Horman <horms+renesas@verge.net.au> |
| Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| (cherry picked from commit 0df6150e7ceb8967c0f4e953a4468a5c7b184be8) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| --- |
| drivers/pci/host/pcie-rcar.c | 38 ++++++++++++------------------------ |
| 1 file changed, 12 insertions(+), 26 deletions(-) |
| |
| diff --git a/drivers/pci/host/pcie-rcar.c b/drivers/pci/host/pcie-rcar.c |
| index c37699d0dcf9..dc0d1f4c6517 100644 |
| --- a/drivers/pci/host/pcie-rcar.c |
| +++ b/drivers/pci/host/pcie-rcar.c |
| @@ -145,7 +145,6 @@ struct rcar_pcie { |
| void __iomem *base; |
| struct list_head resources; |
| int root_bus_nr; |
| - struct clk *clk; |
| struct clk *bus_clk; |
| struct rcar_msi msi; |
| }; |
| @@ -917,24 +916,14 @@ static int rcar_pcie_get_resources(struct rcar_pcie *pcie) |
| if (IS_ERR(pcie->base)) |
| return PTR_ERR(pcie->base); |
| |
| - pcie->clk = devm_clk_get(dev, "pcie"); |
| - if (IS_ERR(pcie->clk)) { |
| - dev_err(dev, "cannot get platform clock\n"); |
| - return PTR_ERR(pcie->clk); |
| - } |
| - err = clk_prepare_enable(pcie->clk); |
| - if (err) |
| - return err; |
| - |
| pcie->bus_clk = devm_clk_get(dev, "pcie_bus"); |
| if (IS_ERR(pcie->bus_clk)) { |
| dev_err(dev, "cannot get pcie bus clock\n"); |
| - err = PTR_ERR(pcie->bus_clk); |
| - goto fail_clk; |
| + return PTR_ERR(pcie->bus_clk); |
| } |
| err = clk_prepare_enable(pcie->bus_clk); |
| if (err) |
| - goto fail_clk; |
| + return err; |
| |
| i = irq_of_parse_and_map(dev->of_node, 0); |
| if (!i) { |
| @@ -956,8 +945,6 @@ static int rcar_pcie_get_resources(struct rcar_pcie *pcie) |
| |
| err_map_reg: |
| clk_disable_unprepare(pcie->bus_clk); |
| -fail_clk: |
| - clk_disable_unprepare(pcie->clk); |
| |
| return err; |
| } |
| @@ -1127,22 +1114,22 @@ static int rcar_pcie_probe(struct platform_device *pdev) |
| if (err) |
| goto err_free_bridge; |
| |
| + pm_runtime_enable(pcie->dev); |
| + err = pm_runtime_get_sync(pcie->dev); |
| + if (err < 0) { |
| + dev_err(pcie->dev, "pm_runtime_get_sync failed\n"); |
| + goto err_pm_disable; |
| + } |
| + |
| err = rcar_pcie_get_resources(pcie); |
| if (err < 0) { |
| dev_err(dev, "failed to request resources: %d\n", err); |
| - goto err_free_resource_list; |
| + goto err_pm_put; |
| } |
| |
| err = rcar_pcie_parse_map_dma_ranges(pcie, dev->of_node); |
| if (err) |
| - goto err_free_resource_list; |
| - |
| - pm_runtime_enable(dev); |
| - err = pm_runtime_get_sync(dev); |
| - if (err < 0) { |
| - dev_err(dev, "pm_runtime_get_sync failed\n"); |
| - goto err_pm_disable; |
| - } |
| + goto err_pm_put; |
| |
| /* Failure to get a link might just be that no cards are inserted */ |
| hw_init_fn = of_device_get_match_data(dev); |
| @@ -1177,9 +1164,8 @@ static int rcar_pcie_probe(struct platform_device *pdev) |
| |
| err_pm_disable: |
| pm_runtime_disable(dev); |
| - |
| -err_free_resource_list: |
| pci_free_resource_list(&pcie->resources); |
| + |
| err_free_bridge: |
| pci_free_host_bridge(bridge); |
| |
| -- |
| 2.19.0 |
| |