devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kishon Vijay Abraham I <kishon@ti.com>
To: devicetree@vger.kernel.org, linux-doc@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org,
	linux-pci@vger.kernel.org
Cc: rogerq@ti.com, balajitk@ti.com, Kishon Vijay Abraham I <kishon@ti.com>
Subject: [PATCH 04/17] phy: pipe3: insert delay to enumerate in GEN2 mode
Date: Tue, 6 May 2014 19:03:50 +0530	[thread overview]
Message-ID: <1399383244-14556-5-git-send-email-kishon@ti.com> (raw)
In-Reply-To: <1399383244-14556-1-git-send-email-kishon@ti.com>

8-bit delay value (0xF1) is required for GEN2 devices to be enumerated
consistently. Added an API to be called from PHY drivers to set this delay
value and called it from PIPE3 driver to set the delay value.

Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
---
 Documentation/devicetree/bindings/phy/ti-phy.txt |    4 +--
 drivers/phy/phy-omap-control.c                   |   41 ++++++++++++++++++++++
 drivers/phy/phy-ti-pipe3.c                       |    4 ++-
 include/linux/phy/omap_control_phy.h             |    9 +++++
 4 files changed, 55 insertions(+), 3 deletions(-)

diff --git a/Documentation/devicetree/bindings/phy/ti-phy.txt b/Documentation/devicetree/bindings/phy/ti-phy.txt
index d50f8ee..5653dc4 100644
--- a/Documentation/devicetree/bindings/phy/ti-phy.txt
+++ b/Documentation/devicetree/bindings/phy/ti-phy.txt
@@ -18,9 +18,9 @@ Required properties:
                         AM437 platform.
  - reg : Address and length of the register set for the device. It contains
    the address of "otghs_control" for control-phy-otghs or "power" register
-   for other types and "control_sma" for control-phy-pcie
+   for other types and "control_sma", "pcie_pcs" for control-phy-pcie
  - reg-names: should be "otghs_control" for control-phy-otghs,
-  "control_sma" for control-phy-pcie and "power" for other types.
+  "control_sma", "pcie_pcs" for control-phy-pcie and "power" for other types.
 
 omap_control_usb: omap-control-usb@4a002300 {
         compatible = "ti,control-phy-otghs";
diff --git a/drivers/phy/phy-omap-control.c b/drivers/phy/phy-omap-control.c
index 47a1b6c..6ba551b 100644
--- a/drivers/phy/phy-omap-control.c
+++ b/drivers/phy/phy-omap-control.c
@@ -61,6 +61,41 @@ void omap_control_pcie_tx_rx_control(struct device *dev, u8 ctrl)
 EXPORT_SYMBOL_GPL(omap_control_pcie_tx_rx_control);
 
 /**
+ * omap_control_pcie_pcs - set the PCS delay count
+ * @dev: the control module device
+ * @id: index of the pcie PHY (should be 1 or 2)
+ * @delay: 8 bit delay value
+ */
+void omap_control_pcie_pcs(struct device *dev, u8 id, u8 delay)
+{
+	u32 val;
+	struct omap_control_phy	*control_phy;
+
+	if (IS_ERR(dev) || !dev) {
+		pr_err("%s: invalid device\n", __func__);
+		return;
+	}
+
+	control_phy = dev_get_drvdata(dev);
+	if (!control_phy) {
+		dev_err(dev, "%s: invalid control phy device\n", __func__);
+		return;
+	}
+
+	if (control_phy->type != OMAP_CTRL_TYPE_PCIE) {
+		dev_err(dev, "%s: unsupported operation\n", __func__);
+		return;
+	}
+
+	val = readl(control_phy->pcie_pcs);
+	val &= ~(OMAP_CTRL_PCIE_PCS_MASK <<
+		(id * OMAP_CTRL_PCIE_PCS_DELAY_COUNT_SHIFT));
+	val |= delay << (id * OMAP_CTRL_PCIE_PCS_DELAY_COUNT_SHIFT);
+	writel(val, control_phy->pcie_pcs);
+}
+EXPORT_SYMBOL_GPL(omap_control_pcie_pcs);
+
+/**
  * omap_control_phy_power - power on/off the phy using control module reg
  * @dev: the control module device
  * @on: 0 or 1, based on powering on or off the PHY
@@ -335,6 +370,12 @@ static int omap_control_phy_probe(struct platform_device *pdev)
 		control_phy->ctrl_sma = devm_ioremap_resource(&pdev->dev, res);
 		if (IS_ERR(control_phy->ctrl_sma))
 			return PTR_ERR(control_phy->ctrl_sma);
+
+		res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
+						   "pcie_pcs");
+		control_phy->pcie_pcs = devm_ioremap_resource(&pdev->dev, res);
+		if (IS_ERR(control_phy->pcie_pcs))
+			return PTR_ERR(control_phy->pcie_pcs);
 	}
 
 	dev_set_drvdata(control_phy->dev, control_phy);
diff --git a/drivers/phy/phy-ti-pipe3.c b/drivers/phy/phy-ti-pipe3.c
index 5513aa0..a1a0e35 100644
--- a/drivers/phy/phy-ti-pipe3.c
+++ b/drivers/phy/phy-ti-pipe3.c
@@ -216,8 +216,10 @@ static int ti_pipe3_init(struct phy *x)
 	u32 val;
 	int ret = 0;
 
-	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")) {
+		omap_control_pcie_pcs(phy->control_dev, 0x1, 0xF1);
 		return 0;
+	}
 
 	/* Bring it out of IDLE if it is IDLE */
 	val = ti_pipe3_readl(phy->pll_ctrl_base, PLL_CONFIGURATION2);
diff --git a/include/linux/phy/omap_control_phy.h b/include/linux/phy/omap_control_phy.h
index 15cfbfe..6127c04 100644
--- a/include/linux/phy/omap_control_phy.h
+++ b/include/linux/phy/omap_control_phy.h
@@ -35,6 +35,7 @@ struct omap_control_phy {
 	u32 __iomem *power;
 	u32 __iomem *power_aux;
 	u32 __iomem *ctrl_sma;
+	u32 __iomem *pcie_pcs;
 
 	struct clk *sys_clk;
 
@@ -68,6 +69,9 @@ enum omap_control_usb_mode {
 #define	OMAP_CTRL_PCIE_TX_RX_CONTROL_SHIFT	0x10
 #define	OMAP_CTRL_PCIE_TX_RX_CONTROL_MASK	0x3
 
+#define	OMAP_CTRL_PCIE_PCS_MASK			0xff
+#define	OMAP_CTRL_PCIE_PCS_DELAY_COUNT_SHIFT	0x8
+
 #define	OMAP_CTRL_PCIE_PHY_TX_ACSPCIE		0x1
 #define	OMAP_CTRL_PCIE_PHY_RX_ACSPCIE		0x2
 #define	OMAP_CTRL_PCIE_PHY_TX_RX_ACSPCIE	0x3
@@ -84,6 +88,7 @@ void omap_control_phy_power(struct device *dev, int on);
 void omap_control_usb_set_mode(struct device *dev,
 			       enum omap_control_usb_mode mode);
 void omap_control_pcie_tx_rx_control(struct device *dev, u8 ctrl);
+void omap_control_pcie_pcs(struct device *dev, u8 id, u8 delay);
 #else
 
 static inline void omap_control_phy_power(struct device *dev, int on)
@@ -98,6 +103,10 @@ static inline void omap_control_usb_set_mode(struct device *dev,
 static inline void omap_control_pcie_tx_rx_control(struct device *dev, u8 ctrl)
 {
 }
+
+static inline void omap_control_pcie_pcs(struct device *dev, u8 id, u8 delay)
+{
+}
 #endif
 
 #endif	/* __OMAP_CONTROL_PHY_H__ */
-- 
1.7.9.5

  parent reply	other threads:[~2014-05-06 13:33 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-06 13:33 [PATCH 00/17] PCIe support for DRA7xx Kishon Vijay Abraham I
2014-05-06 13:33 ` [PATCH 01/17] phy: phy-omap-pipe3: Add support for PCIe PHY Kishon Vijay Abraham I
2014-05-14 12:57   ` Roger Quadros
2014-05-06 13:33 ` Kishon Vijay Abraham I [this message]
2014-05-14 13:20   ` [PATCH 04/17] phy: pipe3: insert delay to enumerate in GEN2 mode Roger Quadros
2014-05-06 13:33 ` [PATCH 05/17] pci: host: pcie-dra7xx: add support for pcie-dra7xx controller Kishon Vijay Abraham I
2014-05-06 13:44   ` Marek Vasut
     [not found]     ` <201405061544.28738.marex-ynQEQJNshbs@public.gmane.org>
2014-05-07  8:21       ` Kishon Vijay Abraham I
2014-05-09  9:43       ` Pavel Machek
     [not found]   ` <1399383244-14556-6-git-send-email-kishon-l0cyMroinI0@public.gmane.org>
2014-05-06 13:54     ` Arnd Bergmann
2014-05-07  8:44       ` Kishon Vijay Abraham I
2014-05-07  9:30         ` Arnd Bergmann
2014-05-09 11:29           ` Kishon Vijay Abraham I
2014-05-06 16:35   ` Jason Gunthorpe
2014-05-07  9:22     ` Kishon Vijay Abraham I
2014-05-07  9:25       ` Arnd Bergmann
2014-05-08  8:56         ` Jingoo Han
2014-05-08  9:16           ` Arnd Bergmann
2014-05-06 13:33 ` [PATCH 06/17] pci: host: pcie-designware: Use *base-mask* for configuring the iATU Kishon Vijay Abraham I
2014-05-06 13:59   ` Arnd Bergmann
2014-05-08  9:05     ` Jingoo Han
2014-05-08  9:18       ` Arnd Bergmann
2014-05-09 11:50         ` Kishon Vijay Abraham I
2014-05-12  1:44           ` Jingoo Han
2014-05-13 12:31         ` Kishon Vijay Abraham I
     [not found]           ` <537210BF.2050100-l0cyMroinI0@public.gmane.org>
2014-05-13 12:47             ` Arnd Bergmann
2014-05-13 13:26               ` Kishon Vijay Abraham I
     [not found]                 ` <53721D7F.9070200-l0cyMroinI0@public.gmane.org>
2014-05-13 13:27                   ` Arnd Bergmann
2014-05-13 13:34                     ` Arnd Bergmann
2014-05-14  5:44                       ` Kishon Vijay Abraham I
2014-05-14 12:45                         ` Arnd Bergmann
2014-05-14 15:04                           ` Kishon Vijay Abraham I
2014-05-16  9:00                           ` Kishon Vijay Abraham I
2014-05-19 12:45                             ` Arnd Bergmann
     [not found] ` <1399383244-14556-1-git-send-email-kishon-l0cyMroinI0@public.gmane.org>
2014-05-06 13:33   ` [PATCH 02/17] phy: omap-control: add external clock support for PCIe PHY Kishon Vijay Abraham I
     [not found]     ` <1399383244-14556-3-git-send-email-kishon-l0cyMroinI0@public.gmane.org>
2014-05-14 13:02       ` Roger Quadros
2014-05-06 13:33   ` [PATCH 03/17] phy: ti-pipe3: " Kishon Vijay Abraham I
2014-05-14 13:16     ` Roger Quadros
2014-05-14 15:19       ` Kishon Vijay Abraham I
2014-05-14 15:34         ` Nishanth Menon
2014-05-15  9:15           ` Kishon Vijay Abraham I
2014-05-15  9:25             ` Roger Quadros
2014-05-15 11:46               ` Nishanth Menon
2014-05-15 11:59                 ` Kishon Vijay Abraham I
2014-05-15 12:12                   ` Nishanth Menon
2014-05-15 12:18                     ` Kishon Vijay Abraham I
2014-05-15 12:33                       ` Nishanth Menon
2014-05-15 12:42                         ` Kishon Vijay Abraham I
2014-05-27  6:11                         ` Kishon Vijay Abraham I
2014-05-28  1:54                         ` Mike Turquette
2014-05-28 15:52                           ` Nishanth Menon
2014-05-06 13:33   ` [PATCH 07/17] ARM: dts: DRA7: Add divider table to optfclk_pciephy_div clock Kishon Vijay Abraham I
2014-05-06 13:33 ` [PATCH 08/17] ARM: dts: DRA7: Change the parent of apll_pcie_in_clk_mux to dpll_pcie_ref_m2ldo_ck Kishon Vijay Abraham I
2014-05-06 13:33 ` [PATCH 09/17] arm: dra7xx: Add hwmod data for pcie1 phy and pcie2 phy Kishon Vijay Abraham I
2014-05-06 13:33 ` [PATCH 10/17] arm: dra7xx: Add hwmod data for pcie1 and pcie2 subsystems Kishon Vijay Abraham I
2014-05-06 13:33 ` [PATCH 11/17] ARM: dts: dra7xx-clocks: Add missing 32khz clocks used for PHY Kishon Vijay Abraham I
     [not found]   ` <1399383244-14556-12-git-send-email-kishon-l0cyMroinI0@public.gmane.org>
2014-05-14 13:23     ` Roger Quadros
2014-05-14 15:19       ` Kishon Vijay Abraham I
2014-05-06 13:33 ` [PATCH 12/17] ARM: dts: dra7: Add dt data for PCIe PHY control module Kishon Vijay Abraham I
2014-05-06 13:33 ` [PATCH 13/17] ARM: dts: dra7: Add dt data for PCIe PHY Kishon Vijay Abraham I
2014-05-06 13:34 ` [PATCH 14/17] ARM: dts: dra7: Add dt data for PCIe controller Kishon Vijay Abraham I
2014-05-06 13:34 ` [PATCH 15/17] ARM: OMAP: Enable PCI for DRA7 Kishon Vijay Abraham I
2014-05-06 13:34 ` [TEMP PATCH 16/17] pci: host: pcie-dra7xx: use reset framework APIs to reset PCIe Kishon Vijay Abraham I
2014-05-06 13:41   ` Dan Murphy
2014-05-06 13:34 ` [TEMP PATCH 17/17] ARM: dts: dra7: Add *resets* property for PCIe dt node Kishon Vijay Abraham I
2014-05-06 13:40   ` Dan Murphy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1399383244-14556-5-git-send-email-kishon@ti.com \
    --to=kishon@ti.com \
    --cc=balajitk@ti.com \
    --cc=devicetree@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=rogerq@ti.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).