[RFC/RFT 4/6] PCI: rockchip-dwc: add pcie bifurcation
Bjorn Helgaas
helgaas at kernel.org
Sat Apr 16 16:30:47 PDT 2022
On Sat, Apr 16, 2022 at 03:54:56PM +0200, Frank Wunderlich wrote:
> From: Frank Wunderlich <frank-w at public-files.de>
>
> PCIe Lanes can be split to 2 slots with bifurcation.
> Add support for this in existing pcie driver.
Please s/pcie/PCIe/ in subject and above to be consistent. You also
have kind of a random usage in other patches.
Mention the DT property used for this in the commit log.
Is the "rockchip,bifurcation" DT property something that should be
generalized so it's not rockchip-specific? Other controllers are
likely to support similar functionality.
> Co-developed-by: Peter Geis <pgwipeout at gmail.com>
> Signed-off-by: Frank Wunderlich <frank-w at public-files.de>
> ---
> drivers/pci/controller/dwc/pcie-dw-rockchip.c | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c
> index 863374604fb1..1b0c2115b32e 100644
> --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c
> +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c
> @@ -20,6 +20,7 @@
> #include <linux/platform_device.h>
> #include <linux/regmap.h>
> #include <linux/reset.h>
> +#include <linux/phy/pcie.h>
>
> #include "pcie-designware.h"
>
> @@ -59,6 +60,7 @@ struct rockchip_pcie {
> struct regulator *vpcie3v3;
> struct irq_domain *irq_domain;
> raw_spinlock_t irq_lock;
> + bool bifurcation;
> };
>
> static int rockchip_pcie_readl_apb(struct rockchip_pcie *rockchip,
> @@ -273,6 +275,12 @@ static int rockchip_pcie_phy_init(struct rockchip_pcie *rockchip)
> return dev_err_probe(dev, PTR_ERR(rockchip->phy),
> "missing PHY\n");
>
> + if (rockchip->bifurcation) {
> + ret = phy_set_mode_ext(rockchip->phy, PHY_MODE_PCIE, PHY_MODE_PCIE_BIFURCATION);
> + if (ret)
> + return ret;
> + }
> +
> ret = phy_init(rockchip->phy);
> if (ret < 0)
> return ret;
> @@ -345,6 +353,9 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
> }
> }
>
> + if (device_property_read_bool(dev, "rockchip,bifurcation"))
> + rockchip->bifurcation = true;
> +
> ret = rockchip_pcie_phy_init(rockchip);
> if (ret)
> goto disable_regulator;
> --
> 2.25.1
>
>
> --
> linux-phy mailing list
> linux-phy at lists.infradead.org
> https://lists.infradead.org/mailman/listinfo/linux-phy
More information about the Linux-rockchip
mailing list