* [PATCH 0/2] ti-pipe3: PCIe x2 lane mode configuration in dra72
@ 2017-12-19 9:45 Kishon Vijay Abraham I
2017-12-19 9:45 ` [PATCH 1/2] dt-bindings: phy: ti-pipe3: Add dt binding to use USB3 PHY for PCIe Kishon Vijay Abraham I
2017-12-19 9:45 ` [PATCH 2/2] phy: ti-pipe3: configure usb3 phy to be used as pcie phy Kishon Vijay Abraham I
0 siblings, 2 replies; 4+ messages in thread
From: Kishon Vijay Abraham I @ 2017-12-19 9:45 UTC (permalink / raw)
To: Rob Herring, Mark Rutland, kishon
Cc: devicetree, linux-pci, linux-kernel, nsekhar
DRA72 uses the same pipe3 PHY for the 2nd lane of PCIE and USB3 PHY.
By default it is configured to be used as USB3 PHY and some special
configuration has to be done inorder to use it for the 2nd lane of PCIE.
This series adds a new dt property and the configuration required to
enable 2nd lane of PCIE.
Kishon Vijay Abraham I (2):
dt-bindings: phy: ti-pipe3: Add dt binding to use USB3 PHY for PCIe
phy: ti-pipe3: configure usb3 phy to be used as pcie phy
Documentation/devicetree/bindings/phy/ti-phy.txt | 2 +
drivers/phy/ti/phy-ti-pipe3.c | 47 +++++++++++++++++++++---
2 files changed, 43 insertions(+), 6 deletions(-)
--
2.11.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/2] dt-bindings: phy: ti-pipe3: Add dt binding to use USB3 PHY for PCIe
2017-12-19 9:45 [PATCH 0/2] ti-pipe3: PCIe x2 lane mode configuration in dra72 Kishon Vijay Abraham I
@ 2017-12-19 9:45 ` Kishon Vijay Abraham I
2017-12-20 20:55 ` Rob Herring
2017-12-19 9:45 ` [PATCH 2/2] phy: ti-pipe3: configure usb3 phy to be used as pcie phy Kishon Vijay Abraham I
1 sibling, 1 reply; 4+ messages in thread
From: Kishon Vijay Abraham I @ 2017-12-19 9:45 UTC (permalink / raw)
To: Rob Herring, Mark Rutland, kishon
Cc: devicetree, linux-pci, linux-kernel, nsekhar
DRA72 uses USB3 PHY for the 2nd lane of PCIE. Add dt bindings property
to indicate if the USB3 PHY should be used for 2nd lane of PCIe.
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
---
Documentation/devicetree/bindings/phy/ti-phy.txt | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/phy/ti-phy.txt b/Documentation/devicetree/bindings/phy/ti-phy.txt
index cd13e6157088..907a046e794b 100644
--- a/Documentation/devicetree/bindings/phy/ti-phy.txt
+++ b/Documentation/devicetree/bindings/phy/ti-phy.txt
@@ -93,6 +93,8 @@ Optional properties:
register that contains the SATA_PLL_SOFT_RESET bit. Only valid for sata_phy.
- syscon-pcs : phandle/offset pair. Phandle to the system control module and the
register offset to write the PCS delay value.
+ - "ti,configure-as-pcie" : property to indicate if the PHY should be
+ configured as PCIE PHY.
Deprecated properties:
- ctrl-module : phandle of the control module used by PHY driver to power on
--
2.11.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] phy: ti-pipe3: configure usb3 phy to be used as pcie phy
2017-12-19 9:45 [PATCH 0/2] ti-pipe3: PCIe x2 lane mode configuration in dra72 Kishon Vijay Abraham I
2017-12-19 9:45 ` [PATCH 1/2] dt-bindings: phy: ti-pipe3: Add dt binding to use USB3 PHY for PCIe Kishon Vijay Abraham I
@ 2017-12-19 9:45 ` Kishon Vijay Abraham I
1 sibling, 0 replies; 4+ messages in thread
From: Kishon Vijay Abraham I @ 2017-12-19 9:45 UTC (permalink / raw)
To: Rob Herring, Mark Rutland, kishon
Cc: devicetree, linux-pci, linux-kernel, nsekhar
DRA72 uses USB3 PHY for the 2nd lane of PCIE. The configuration
required to make USB3 PHY used for the 2nd lane of PCIe is done
here.
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
---
drivers/phy/ti/phy-ti-pipe3.c | 47 +++++++++++++++++++++++++++++++++++++------
1 file changed, 41 insertions(+), 6 deletions(-)
diff --git a/drivers/phy/ti/phy-ti-pipe3.c b/drivers/phy/ti/phy-ti-pipe3.c
index 68ce4a082b9b..d5a7cc435fb7 100644
--- a/drivers/phy/ti/phy-ti-pipe3.c
+++ b/drivers/phy/ti/phy-ti-pipe3.c
@@ -56,6 +56,12 @@
#define SATA_PLL_SOFT_RESET BIT(18)
+#define PHY_RX_ANA_PRGRAMMABILITY_REG 0xC
+#define MEM_EN_PLLBYP BIT(7)
+
+#define PHY_TX_TEST_CONFIG 0x2C
+#define MEM_ENTESTCLK BIT(31)
+
#define PIPE3_PHY_PWRCTL_CLK_CMD_MASK 0x003FC000
#define PIPE3_PHY_PWRCTL_CLK_CMD_SHIFT 14
@@ -110,6 +116,10 @@
#define PLL_IDLE_TIME 100 /* in milliseconds */
#define PLL_LOCK_TIME 100 /* in milliseconds */
+#define PIPE3_PHY_DISABLE_SYNC_POWER BIT(4)
+
+#define CONFIGURE_AS_PCIE BIT(0)
+
struct pipe3_dpll_params {
u16 m;
u8 n;
@@ -141,6 +151,7 @@ struct ti_pipe3 {
unsigned int power_reg; /* power reg. index within syscon */
unsigned int pcie_pcs_reg; /* pcs reg. index in syscon */
bool sata_refclk_enabled;
+ u32 flags;
};
static struct pipe3_dpll_map dpll_map_usb[] = {
@@ -233,11 +244,22 @@ static int ti_pipe3_power_on(struct phy *x)
rate = rate / 1000000;
mask = OMAP_CTRL_PIPE3_PHY_PWRCTL_CLK_CMD_MASK |
OMAP_CTRL_PIPE3_PHY_PWRCTL_CLK_FREQ_MASK;
- val = PIPE3_PHY_TX_RX_POWERON << PIPE3_PHY_PWRCTL_CLK_CMD_SHIFT;
+ val = PIPE3_PHY_TX_RX_POWERON;
+ if (phy->flags & CONFIGURE_AS_PCIE)
+ val |= PIPE3_PHY_DISABLE_SYNC_POWER;
+ val <<= PIPE3_PHY_PWRCTL_CLK_CMD_SHIFT;
val |= rate << OMAP_CTRL_PIPE3_PHY_PWRCTL_CLK_FREQ_SHIFT;
ret = regmap_update_bits(phy->phy_power_syscon, phy->power_reg,
mask, val);
+
+ if (phy->flags & CONFIGURE_AS_PCIE) {
+ ret = regmap_update_bits(phy->phy_power_syscon, phy->power_reg,
+ mask, val);
+ if (ret < 0)
+ return ret;
+ }
+
return ret;
}
@@ -335,6 +357,19 @@ static int ti_pipe3_init(struct phy *x)
int ret = 0;
ti_pipe3_enable_clocks(phy);
+
+ if (phy->flags & CONFIGURE_AS_PCIE) {
+ val = ti_pipe3_readl(phy->phy_rx,
+ PHY_RX_ANA_PRGRAMMABILITY_REG);
+ val |= MEM_EN_PLLBYP;
+ ti_pipe3_writel(phy->phy_rx, PHY_RX_ANA_PRGRAMMABILITY_REG,
+ val);
+ val = ti_pipe3_readl(phy->phy_tx, PHY_TX_TEST_CONFIG);
+ val |= MEM_ENTESTCLK;
+ ti_pipe3_writel(phy->phy_tx, PHY_TX_TEST_CONFIG, val);
+ return 0;
+ }
+
/*
* Set pcie_pcs register to 0x96 for proper functioning of phy
* as recommended in AM572x TRM SPRUHZ6, section 18.5.2.2, table
@@ -395,7 +430,8 @@ static int ti_pipe3_exit(struct phy *x)
return 0;
/* PCIe doesn't have internal DPLL */
- if (!of_device_is_compatible(phy->dev->of_node, "ti,phy-pipe3-pcie")) {
+ if (!of_device_is_compatible(phy->dev->of_node, "ti,phy-pipe3-pcie") &&
+ !(phy->flags & CONFIGURE_AS_PCIE)) {
/* Put DPLL in IDLE mode */
val = ti_pipe3_readl(phy->pll_ctrl_base, PLL_CONFIGURATION2);
val |= PLL_IDLE;
@@ -589,12 +625,8 @@ static int ti_pipe3_get_tx_rx_base(struct ti_pipe3 *phy)
{
struct resource *res;
struct device *dev = phy->dev;
- struct device_node *node = dev->of_node;
struct platform_device *pdev = to_platform_device(dev);
- if (!of_device_is_compatible(node, "ti,phy-pipe3-pcie"))
- return 0;
-
res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
"phy_rx");
phy->phy_rx = devm_ioremap_resource(dev, res);
@@ -666,6 +698,9 @@ static int ti_pipe3_probe(struct platform_device *pdev)
if (ret)
return ret;
+ if (of_property_read_bool(node, "ti,configure-as-pcie"))
+ phy->flags |= CONFIGURE_AS_PCIE;
+
platform_set_drvdata(pdev, phy);
pm_runtime_enable(dev);
--
2.11.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2] dt-bindings: phy: ti-pipe3: Add dt binding to use USB3 PHY for PCIe
2017-12-19 9:45 ` [PATCH 1/2] dt-bindings: phy: ti-pipe3: Add dt binding to use USB3 PHY for PCIe Kishon Vijay Abraham I
@ 2017-12-20 20:55 ` Rob Herring
0 siblings, 0 replies; 4+ messages in thread
From: Rob Herring @ 2017-12-20 20:55 UTC (permalink / raw)
To: Kishon Vijay Abraham I
Cc: Mark Rutland, devicetree, linux-pci, linux-kernel, nsekhar
On Tue, Dec 19, 2017 at 03:15:39PM +0530, Kishon Vijay Abraham I wrote:
> DRA72 uses USB3 PHY for the 2nd lane of PCIE. Add dt bindings property
> to indicate if the USB3 PHY should be used for 2nd lane of PCIe.
>
> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
> ---
> Documentation/devicetree/bindings/phy/ti-phy.txt | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/phy/ti-phy.txt b/Documentation/devicetree/bindings/phy/ti-phy.txt
> index cd13e6157088..907a046e794b 100644
> --- a/Documentation/devicetree/bindings/phy/ti-phy.txt
> +++ b/Documentation/devicetree/bindings/phy/ti-phy.txt
> @@ -93,6 +93,8 @@ Optional properties:
> register that contains the SATA_PLL_SOFT_RESET bit. Only valid for sata_phy.
> - syscon-pcs : phandle/offset pair. Phandle to the system control module and the
> register offset to write the PCS delay value.
> + - "ti,configure-as-pcie" : property to indicate if the PHY should be
> + configured as PCIE PHY.
This is not that uncommon as PCIe, 10Gb eth, USB3, SATA are all very
electrically similar and the same phy can drive all of them AIUI. The DT
already contains the necessary information too because you have a phys
property creating a link to PCI host. The problem is either the client
side would need to set the mode or you'd have to search all "phys"
properties to find the link. There's already a DT function to iterate
thru all named properties.
Rob
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-12-20 20:55 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-12-19 9:45 [PATCH 0/2] ti-pipe3: PCIe x2 lane mode configuration in dra72 Kishon Vijay Abraham I
2017-12-19 9:45 ` [PATCH 1/2] dt-bindings: phy: ti-pipe3: Add dt binding to use USB3 PHY for PCIe Kishon Vijay Abraham I
2017-12-20 20:55 ` Rob Herring
2017-12-19 9:45 ` [PATCH 2/2] phy: ti-pipe3: configure usb3 phy to be used as pcie phy Kishon Vijay Abraham I
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).