| From 7eeab08976490e3ebb71ebbab0c0e7221b3b5a65 Mon Sep 17 00:00:00 2001 |
| From: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> |
| Date: Thu, 3 May 2018 22:40:54 +0300 |
| Subject: [PATCH 1431/1795] PCI: rcar: Add R-Car gen3 PHY support |
| |
| On R-Car gen3 SoCs the PCIe PHY has its own register region, thus we |
| need to add the corresponding code in rcar_pcie_hw_init_gen3() and call |
| devm_phy_optional_get() at the driver's probing time, so that the |
| existing R-Car gen3 device trees (not having a PHY node) would still |
| work (we only need to power up the PHY on R-Car V3H). |
| |
| Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> |
| [lorenzo.pieralisi@arm.com: updated commit log] |
| Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> |
| Reviewed-by: Simon Horman <horms+renesas@verge.net.au> |
| Reviewed-by: Rob Herring <robh@kernel.org> |
| |
| (cherry picked from commit 517ca93a7159eb94eeef829f6ca036456050115c) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| --- |
| .../devicetree/bindings/pci/rcar-pci.txt | 5 ++++ |
| drivers/pci/host/pcie-rcar.c | 27 +++++++++++++++++-- |
| 2 files changed, 30 insertions(+), 2 deletions(-) |
| |
| diff --git a/Documentation/devicetree/bindings/pci/rcar-pci.txt b/Documentation/devicetree/bindings/pci/rcar-pci.txt |
| index 1fb614e615da..4376c69ea20a 100644 |
| --- a/Documentation/devicetree/bindings/pci/rcar-pci.txt |
| +++ b/Documentation/devicetree/bindings/pci/rcar-pci.txt |
| @@ -32,6 +32,11 @@ compatible: "renesas,pcie-r8a7743" for the R8A7743 SoC; |
| and PCIe bus clocks. |
| - clock-names: from common clock binding: should be "pcie" and "pcie_bus". |
| |
| +Optional properties: |
| +- phys: from common PHY binding: PHY phandle and specifier (only make sense |
| + for R-Car gen3 SoCs where the PCIe PHYs have their own register blocks). |
| +- phy-names: from common PHY binding: should be "pcie". |
| + |
| Example: |
| |
| SoC-specific DT Entry: |
| diff --git a/drivers/pci/host/pcie-rcar.c b/drivers/pci/host/pcie-rcar.c |
| index d8a2849a941f..695465df4580 100644 |
| --- a/drivers/pci/host/pcie-rcar.c |
| +++ b/drivers/pci/host/pcie-rcar.c |
| @@ -28,6 +28,7 @@ |
| #include <linux/of_pci.h> |
| #include <linux/of_platform.h> |
| #include <linux/pci.h> |
| +#include <linux/phy/phy.h> |
| #include <linux/platform_device.h> |
| #include <linux/pm_runtime.h> |
| #include <linux/slab.h> |
| @@ -144,6 +145,7 @@ static inline struct rcar_msi *to_rcar_msi(struct msi_controller *chip) |
| /* Structure representing the PCIe interface */ |
| struct rcar_pcie { |
| struct device *dev; |
| + struct phy *phy; |
| void __iomem *base; |
| struct list_head resources; |
| int root_bus_nr; |
| @@ -670,6 +672,21 @@ static int rcar_pcie_hw_init_gen2(struct rcar_pcie *pcie) |
| return rcar_pcie_hw_init(pcie); |
| } |
| |
| +static int rcar_pcie_hw_init_gen3(struct rcar_pcie *pcie) |
| +{ |
| + int err; |
| + |
| + err = phy_init(pcie->phy); |
| + if (err) |
| + return err; |
| + |
| + err = phy_power_on(pcie->phy); |
| + if (err) |
| + return err; |
| + |
| + return rcar_pcie_hw_init(pcie); |
| +} |
| + |
| static int rcar_msi_alloc(struct rcar_msi *chip) |
| { |
| int msi; |
| @@ -919,6 +936,10 @@ static int rcar_pcie_get_resources(struct rcar_pcie *pcie) |
| struct resource res; |
| int err, i; |
| |
| + pcie->phy = devm_phy_optional_get(dev, "pcie"); |
| + if (IS_ERR(pcie->phy)) |
| + return PTR_ERR(pcie->phy); |
| + |
| err = of_address_to_resource(dev->of_node, 0, &res); |
| if (err) |
| return err; |
| @@ -1059,8 +1080,10 @@ static const struct of_device_id rcar_pcie_of_match[] = { |
| .data = rcar_pcie_hw_init_gen2 }, |
| { .compatible = "renesas,pcie-rcar-gen2", |
| .data = rcar_pcie_hw_init_gen2 }, |
| - { .compatible = "renesas,pcie-r8a7795", .data = rcar_pcie_hw_init }, |
| - { .compatible = "renesas,pcie-rcar-gen3", .data = rcar_pcie_hw_init }, |
| + { .compatible = "renesas,pcie-r8a7795", |
| + .data = rcar_pcie_hw_init_gen3 }, |
| + { .compatible = "renesas,pcie-rcar-gen3", |
| + .data = rcar_pcie_hw_init_gen3 }, |
| {}, |
| }; |
| |
| -- |
| 2.19.0 |
| |