linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto.
@ 2014-09-23  4:11 Richard Zhu
  2014-09-23  4:11 ` [PATCH v2 1/5] PCI: imx6: enable pcie on " Richard Zhu
                   ` (5 more replies)
  0 siblings, 6 replies; 31+ messages in thread
From: Richard Zhu @ 2014-09-23  4:11 UTC (permalink / raw)
  To: linux-pci-owner; +Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey

Hi Tim:
After I changed the wait clocks stabilize delay after pcie_ref_en is set
in this patch-set.
Can you help to make a double check whether it's ok or not at your side?

Thanks in advanced.

Main changes since the v1:
1. Regarding to Lucas' comments, seperated the enalbe pcie on
imx6qdl sabreauto patch.
2. Add the description why the wait clock stabilize delay should
be run after pcie_ref_en is set.
3. Return 0 directly in suspend call back.

Main changes since the RFC:
Thanks for quick review from Lucas.
1. seperate the smashed patch-set.
2. remove the "power-on-gpio".
3. add/update the pcie-supply of the dts and binding.
4. 

[PATCH v2 1/5] PCI: imx6: enable pcie on imx6qdl sabreauto
[PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en
[PATCH v2 3/5] PCI: imx6: update dts and binding for imx6sx pcie
[PATCH v2 4/5] PCI: imx6: add imx6sx pcie related gpr bits
[PATCH v2 5/5] PCI: imx6: add imx6sx pcie support

^ permalink raw reply	[flat|nested] 31+ messages in thread

* [PATCH v2 1/5] PCI: imx6: enable pcie on imx6qdl sabreauto
  2014-09-23  4:11 [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu
@ 2014-09-23  4:11 ` Richard Zhu
  2014-09-23  9:19   ` Lucas Stach
  2014-09-23 12:40   ` Fabio Estevam
  2014-09-23  4:11 ` [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en Richard Zhu
                   ` (4 subsequent siblings)
  5 siblings, 2 replies; 31+ messages in thread
From: Richard Zhu @ 2014-09-23  4:11 UTC (permalink / raw)
  To: linux-pci-owner
  Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey, Richard Zhu

- enable pcie on imx6qdl sabreauto boards.

Signed-off-by: Richard Zhu <r65037@freescale.com>
---
 arch/arm/boot/dts/imx6qdl-sabreauto.dtsi | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
index 009abd6..d6040a5 100644
--- a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
+++ b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
@@ -410,6 +410,10 @@
 	};
 };
 
+&pcie {
+	status = "okay";
+};
+
 &pwm3 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&pinctrl_pwm3>;
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en
  2014-09-23  4:11 [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu
  2014-09-23  4:11 ` [PATCH v2 1/5] PCI: imx6: enable pcie on " Richard Zhu
@ 2014-09-23  4:11 ` Richard Zhu
  2014-09-23  9:56   ` Lucas Stach
                     ` (2 more replies)
  2014-09-23  4:11 ` [PATCH v2 3/5] PCI: imx6: update dts and binding for imx6sx pcie Richard Zhu
                   ` (3 subsequent siblings)
  5 siblings, 3 replies; 31+ messages in thread
From: Richard Zhu @ 2014-09-23  4:11 UTC (permalink / raw)
  To: linux-pci-owner
  Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey, Richard Zhu

- a while delay is mandatory required after pcie_ref_clk_en
is set. Otherwise, the system would be hang on imx6qdl ard
boards, because that imx6qdl boards don't have the reset_gpio.
- the clocks should be stable already after the
"clk_prepare_enable" is return. So I think it's ok to move the
usleep delay after the pcie_ref_en is set.

Signed-off-by: Richard Zhu <r65037@freescale.com>
---
 drivers/pci/host/pci-imx6.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
index 233fe8a..bc4222b 100644
--- a/drivers/pci/host/pci-imx6.c
+++ b/drivers/pci/host/pci-imx6.c
@@ -275,15 +275,15 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp)
 		goto err_pcie;
 	}
 
-	/* allow the clocks to stabilize */
-	usleep_range(200, 500);
-
 	/* power up core phy and enable ref clock */
 	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
 			IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18);
 	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
 			IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16);
 
+	/* allow the clocks to stabilize */
+	usleep_range(200, 500);
+
 	/* Some boards don't have PCIe reset GPIO. */
 	if (gpio_is_valid(imx6_pcie->reset_gpio)) {
 		gpio_set_value(imx6_pcie->reset_gpio, 0);
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH v2 3/5] PCI: imx6: update dts and binding for imx6sx pcie
  2014-09-23  4:11 [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu
  2014-09-23  4:11 ` [PATCH v2 1/5] PCI: imx6: enable pcie on " Richard Zhu
  2014-09-23  4:11 ` [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en Richard Zhu
@ 2014-09-23  4:11 ` Richard Zhu
  2014-09-23 10:19   ` Lucas Stach
  2014-09-23  4:11 ` [PATCH v2 4/5] PCI: imx6: add imx6sx pcie related gpr bits definitions Richard Zhu
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 31+ messages in thread
From: Richard Zhu @ 2014-09-23  4:11 UTC (permalink / raw)
  To: linux-pci-owner
  Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey, Richard Zhu

- imx6sx pcie has its own power regulator.
add the pcie power suppy into dts and binding.
- enable pcie on imx6sx soc.

Signed-off-by: Richard Zhu <r65037@freescale.com>
---
 .../devicetree/bindings/pci/fsl,imx6q-pcie.txt     |  4 ++-
 arch/arm/boot/dts/imx6sx-sdb.dts                   | 13 +++++++++
 arch/arm/boot/dts/imx6sx.dtsi                      | 33 +++++++++++++---------
 arch/arm/mach-imx/Kconfig                          |  1 +
 4 files changed, 36 insertions(+), 15 deletions(-)

diff --git a/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt b/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt
index 9455fd0..d3b5704 100644
--- a/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt
+++ b/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt
@@ -4,7 +4,7 @@ This PCIe host controller is based on the Synopsis Designware PCIe IP
 and thus inherits all the common properties defined in designware-pcie.txt.
 
 Required properties:
-- compatible: "fsl,imx6q-pcie"
+- compatible: "fsl,imx6q-pcie", "fsl,imx6sx-pcie"
 - reg: base addresse and length of the pcie controller
 - interrupts: A list of interrupt outputs of the controller. Must contain an
   entry for each entry in the interrupt-names property.
@@ -12,6 +12,7 @@ Required properties:
 	- "msi": The interrupt that is asserted when an MSI is received
 - clock-names: Must include the following additional entries:
 	- "pcie_phy"
+- regulator: regulator used by imx6sx pcie module.
 
 Example:
 
@@ -35,4 +36,5 @@ Example:
 		                <0 0 0 4 &intc GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&clks 144>, <&clks 206>, <&clks 189>;
 		clock-names = "pcie", "pcie_bus", "pcie_phy";
+		pcie-supply = <&reg_pcie>;
 	};
diff --git a/arch/arm/boot/dts/imx6sx-sdb.dts b/arch/arm/boot/dts/imx6sx-sdb.dts
index a3980d9..2976913 100644
--- a/arch/arm/boot/dts/imx6sx-sdb.dts
+++ b/arch/arm/boot/dts/imx6sx-sdb.dts
@@ -251,6 +251,13 @@
 	};
 };
 
+&pcie {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_pcie>;
+	reset-gpio = <&gpio2 0 0>;
+	status = "okay";
+};
+
 &ssi2 {
 	status = "okay";
 };
@@ -365,6 +372,12 @@
 			>;
 		};
 
+		pinctrl_pcie: pciegrp {
+			fsl,pins = <
+				MX6SX_PAD_ENET1_COL__GPIO2_IO_0 0x17059
+			>;
+		};
+
 		pinctrl_vcc_sd3: vccsd3grp {
 			fsl,pins = <
 				MX6SX_PAD_KEY_COL1__GPIO2_IO_11		0x17059
diff --git a/arch/arm/boot/dts/imx6sx.dtsi b/arch/arm/boot/dts/imx6sx.dtsi
index f4b9da6..4911160 100644
--- a/arch/arm/boot/dts/imx6sx.dtsi
+++ b/arch/arm/boot/dts/imx6sx.dtsi
@@ -689,9 +689,11 @@
 			};
 
 			gpc: gpc@020dc000 {
-				compatible = "fsl,imx6sx-gpc", "fsl,imx6q-gpc";
+				compatible = "fsl,imx6sx-gpc",
+					     "fsl,imx6q-gpc", "syscon";
 				reg = <0x020dc000 0x4000>;
 				interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
+				pcie-supply = <&reg_pcie>;
 			};
 
 			iomuxc: iomuxc@020e0000 {
@@ -1188,20 +1190,23 @@
 			#address-cells = <3>;
 			#size-cells = <2>;
 			device_type = "pci";
-				  /* configuration space */
-			ranges = <0x00000800 0 0x08f00000 0x08f00000 0 0x00080000
-				  /* downstream I/O */
-				  0x81000000 0 0          0x08f80000 0 0x00010000
-				  /* non-prefetchable memory */
-				  0x82000000 0 0x08000000 0x08000000 0 0x00f00000>;
+			ranges = <0x00000800 0 0x01f00000 0x08f00000 0 0x00080000 /* configuration space */
+				  0x81000000 0 0          0x08f80000 0 0x00010000 /* downstream I/O */
+				  0x82000000 0 0x01000000 0x08000000 0 0x00f00000>; /* non-prefetchable memory */
 			num-lanes = <1>;
-			interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>;
-			clocks = <&clks IMX6SX_CLK_PCIE_REF_125M>,
-				 <&clks IMX6SX_CLK_PCIE_AXI>,
-				 <&clks IMX6SX_CLK_LVDS1_OUT>,
-				 <&clks IMX6SX_CLK_DISPLAY_AXI>;
-			clock-names = "pcie_ref_125m", "pcie_axi",
-				      "lvds_gate", "display_axi";
+			interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
+			interrupt-names = "msi";
+			#interrupt-cells = <1>;
+			interrupt-map-mask = <0 0 0 0x7>;
+			interrupt-map = <0 0 0 1 &intc GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
+			                <0 0 0 2 &intc GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>,
+			                <0 0 0 3 &intc GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
+			                <0 0 0 4 &intc GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&clks IMX6SX_CLK_PCIE_AXI>,
+				 <&clks IMX6SX_CLK_DISPLAY_AXI>,
+				 <&clks IMX6SX_CLK_LVDS1_OUT>;
+			clock-names = "pcie", "pcie_phy", "pcie_bus";
+			pcie-supply = <&reg_pcie>;
 			status = "disabled";
 		};
 	};
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
index be9a51a..0a055f0 100644
--- a/arch/arm/mach-imx/Kconfig
+++ b/arch/arm/mach-imx/Kconfig
@@ -718,6 +718,7 @@ config SOC_IMX6SL
 
 config SOC_IMX6SX
 	bool "i.MX6 SoloX support"
+	select PCI_DOMAINS if PCI
 	select PINCTRL_IMX6SX
 	select SOC_IMX6
 
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH v2 4/5] PCI: imx6: add imx6sx pcie related gpr bits definitions
  2014-09-23  4:11 [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu
                   ` (2 preceding siblings ...)
  2014-09-23  4:11 ` [PATCH v2 3/5] PCI: imx6: update dts and binding for imx6sx pcie Richard Zhu
@ 2014-09-23  4:11 ` Richard Zhu
  2014-09-23 10:21   ` Lucas Stach
  2014-09-23  4:11 ` [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support Richard Zhu
  2014-09-23  9:18 ` [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Lucas Stach
  5 siblings, 1 reply; 31+ messages in thread
From: Richard Zhu @ 2014-09-23  4:11 UTC (permalink / raw)
  To: linux-pci-owner
  Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey, Richard Zhu

Signed-off-by: Richard Zhu <r65037@freescale.com>
---
 include/linux/mfd/syscon/imx6q-iomuxc-gpr.h | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
index ff44374..f02875e 100644
--- a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
+++ b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
@@ -113,10 +113,12 @@
 #define IMX6Q_GPR1_MIPI_IPU1_MUX_GASKET		0x0
 #define IMX6Q_GPR1_MIPI_IPU1_MUX_IOMUX		BIT(19)
 #define IMX6Q_GPR1_PCIE_TEST_PD			BIT(18)
+#define IMX6Q_GPR1_PCIE_TEST_PD_CLR		0x0
 #define IMX6Q_GPR1_IPU_VPU_MUX_MASK		BIT(17)
 #define IMX6Q_GPR1_IPU_VPU_MUX_IPU1		0x0
 #define IMX6Q_GPR1_IPU_VPU_MUX_IPU2		BIT(17)
 #define IMX6Q_GPR1_PCIE_REF_CLK_EN		BIT(16)
+#define IMX6Q_GPR1_PCIE_REF_CLK_CLR		0x0
 #define IMX6Q_GPR1_USB_EXP_MODE			BIT(15)
 #define IMX6Q_GPR1_PCIE_INT			BIT(14)
 #define IMX6Q_GPR1_USB_OTG_ID_SEL_MASK		BIT(13)
@@ -300,7 +302,9 @@
 #define IMX6Q_GPR12_ARMP_APB_CLK_EN		BIT(24)
 #define IMX6Q_GPR12_DEVICE_TYPE			(0xf << 12)
 #define IMX6Q_GPR12_PCIE_CTL_2			BIT(10)
+#define IMX6Q_GPR12_PCIE_CTL_2_CLR		0x0
 #define IMX6Q_GPR12_LOS_LEVEL			(0x1f << 4)
+#define IMX6Q_GPR12_LOS_LEVEL_9			(0x9 << 4)
 
 #define IMX6Q_GPR13_SDMA_STOP_REQ		BIT(30)
 #define IMX6Q_GPR13_CAN2_STOP_REQ		BIT(29)
@@ -395,4 +399,14 @@
 #define IMX6SL_GPR1_FEC_CLOCK_MUX1_SEL_MASK    (0x3 << 17)
 #define IMX6SL_GPR1_FEC_CLOCK_MUX2_SEL_MASK    (0x1 << 14)
 
+/* For imx6sx iomux gpr register field define */
+#define IMX6SX_GPR5_PCIE_BTNRST			BIT(19)
+#define IMX6SX_GPR5_PCIE_BTNRST_CLR		0x0
+#define IMX6SX_GPR5_PCIE_PERST			BIT(18)
+#define IMX6SX_GPR5_PCIE_PERST_CLR		0x0
+
+#define IMX6SX_GPR12_PCIE_TEST_PD		BIT(30)
+#define IMX6SX_GPR12_PCIE_TEST_PD_CLR		0x0
+#define IMX6SX_GPR12_RX_EQ_MASK			(0x7 << 0)
+#define IMX6SX_GPR12_RX_EQ_2			(0x2 << 0)
 #endif /* __LINUX_IMX6Q_IOMUXC_GPR_H */
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support
  2014-09-23  4:11 [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu
                   ` (3 preceding siblings ...)
  2014-09-23  4:11 ` [PATCH v2 4/5] PCI: imx6: add imx6sx pcie related gpr bits definitions Richard Zhu
@ 2014-09-23  4:11 ` Richard Zhu
  2014-09-23 11:00   ` Lucas Stach
  2014-09-23  9:18 ` [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Lucas Stach
  5 siblings, 1 reply; 31+ messages in thread
From: Richard Zhu @ 2014-09-23  4:11 UTC (permalink / raw)
  To: linux-pci-owner
  Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey, Richard Zhu

- imx6sx pcie has its own standalone pcie power supply.
In order to turn on the imx6sx pcie power during
initialization. Add the pcie regulator and the gpc regmap
into the imx6sx pcie structure.
- imx6sx pcie has the new added reset mechanism, add the
reset operations into the initialization.
- Register one PM call-back, enter/exit L2 state of the ASPM
during system suspend/resume.

Signed-off-by: Richard Zhu <r65037@freescale.com>
---
 drivers/pci/host/pci-imx6.c | 164 +++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 146 insertions(+), 18 deletions(-)

diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
index bc4222b..99ecb5d 100644
--- a/drivers/pci/host/pci-imx6.c
+++ b/drivers/pci/host/pci-imx6.c
@@ -18,12 +18,16 @@
 #include <linux/mfd/syscon.h>
 #include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
 #include <linux/module.h>
+#include <linux/of_address.h>
+#include <linux/of_device.h>
 #include <linux/of_gpio.h>
 #include <linux/pci.h>
 #include <linux/platform_device.h>
 #include <linux/regmap.h>
+#include <linux/regulator/consumer.h>
 #include <linux/resource.h>
 #include <linux/signal.h>
+#include <linux/syscore_ops.h>
 #include <linux/types.h>
 #include <linux/interrupt.h>
 
@@ -31,15 +35,30 @@
 
 #define to_imx6_pcie(x)	container_of(x, struct imx6_pcie, pp)
 
+/* The pcie who have standalone power domain */
+#define PCIE_PHY_HAS_PWR_DOMAIN		BIT(0)
+
+struct imx_pcie_data {
+	unsigned int flags;
+};
+
+static const struct imx_pcie_data imx6sx_pcie_data = {
+	.flags = PCIE_PHY_HAS_PWR_DOMAIN,
+};
+
 struct imx6_pcie {
 	int			reset_gpio;
+	const struct		imx_pcie_data *data;
 	struct clk		*pcie_bus;
 	struct clk		*pcie_phy;
 	struct clk		*pcie;
 	struct pcie_port	pp;
 	struct regmap		*iomuxc_gpr;
+	struct regmap		*gpc_ips_reg;
+	struct regulator	*pcie_regulator;
 	void __iomem		*mem_base;
 };
+static struct imx6_pcie *imx6_pcie;
 
 /* PCIe Root Complex registers (memory-mapped) */
 #define PCIE_RC_LCR				0x7c
@@ -77,6 +96,11 @@ struct imx6_pcie {
 #define PHY_RX_OVRD_IN_LO_RX_DATA_EN (1 << 5)
 #define PHY_RX_OVRD_IN_LO_RX_PLL_EN (1 << 3)
 
+static inline bool is_imx6sx_pcie(struct imx6_pcie *imx6_pcie)
+{
+	return imx6_pcie->data == &imx6sx_pcie_data;
+}
+
 static int pcie_phy_poll_ack(void __iomem *dbi_base, int exp_val)
 {
 	u32 val;
@@ -275,11 +299,17 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp)
 		goto err_pcie;
 	}
 
-	/* power up core phy and enable ref clock */
-	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
-			IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18);
-	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
-			IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16);
+	if (is_imx6sx_pcie(imx6_pcie)) {
+		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
+				IMX6SX_GPR12_PCIE_TEST_PD,
+				IMX6SX_GPR12_PCIE_TEST_PD_CLR);
+	} else {
+		/* power up core phy and enable ref clock */
+		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
+				IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18);
+		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
+				IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16);
+	}
 
 	/* allow the clocks to stabilize */
 	usleep_range(200, 500);
@@ -290,6 +320,18 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp)
 		msleep(100);
 		gpio_set_value(imx6_pcie->reset_gpio, 1);
 	}
+
+	/*
+	 * iMX6SX PCIe has the stand-alone power domain.
+	 * refer to the initialization for iMX6SX PCIe,
+	 * release the PCIe PHY reset here,
+	 * before LTSSM enable is set.
+	 */
+	if (is_imx6sx_pcie(imx6_pcie))
+		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR5,
+				IMX6SX_GPR5_PCIE_BTNRST,
+				IMX6SX_GPR5_PCIE_BTNRST_CLR);
+
 	return 0;
 
 err_pcie:
@@ -304,15 +346,38 @@ err_pcie_phy:
 static void imx6_pcie_init_phy(struct pcie_port *pp)
 {
 	struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp);
+	int ret;
+
+	/*
+	 * iMX6SX PCIe has the stand-alone power domain
+	 * add the initialization here for iMX6SX PCIe.
+	 */
+	if (is_imx6sx_pcie(imx6_pcie)) {
+		/* Force PCIe PHY reset */
+		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR5,
+				IMX6SX_GPR5_PCIE_BTNRST,
+				IMX6SX_GPR5_PCIE_BTNRST);
+
+		regmap_update_bits(imx6_pcie->gpc_ips_reg, 0, 1 << 7, 1 << 7);
+		/* Power up PCIe PHY, ANATOP_REG_CORE offset 0x140, bit13-9 */
+		regulator_set_voltage(imx6_pcie->pcie_regulator,
+				1100000, 1100000);
+		ret = regulator_enable(imx6_pcie->pcie_regulator);
+		if (ret)
+			dev_info(pp->dev, "failed to enable pcie regulator.\n");
+		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
+				IMX6SX_GPR12_RX_EQ_MASK, IMX6SX_GPR12_RX_EQ_2);
+	}
 
 	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
-			IMX6Q_GPR12_PCIE_CTL_2, 0 << 10);
+			IMX6Q_GPR12_PCIE_CTL_2,
+			IMX6Q_GPR12_PCIE_CTL_2_CLR);
 
 	/* configure constant input signal to the pcie ctrl and phy */
 	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
 			IMX6Q_GPR12_DEVICE_TYPE, PCI_EXP_TYPE_ROOT_PORT << 12);
 	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
-			IMX6Q_GPR12_LOS_LEVEL, 9 << 4);
+			IMX6Q_GPR12_LOS_LEVEL, IMX6Q_GPR12_LOS_LEVEL_9);
 
 	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8,
 			IMX6Q_GPR8_TX_DEEMPH_GEN1, 0 << 0);
@@ -370,7 +435,8 @@ static int imx6_pcie_start_link(struct pcie_port *pp)
 
 	/* Start LTSSM. */
 	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
-			IMX6Q_GPR12_PCIE_CTL_2, 1 << 10);
+			IMX6Q_GPR12_PCIE_CTL_2,
+			IMX6Q_GPR12_PCIE_CTL_2);
 
 	ret = imx6_pcie_wait_for_link(pp);
 	if (ret)
@@ -546,10 +612,64 @@ static int __init imx6_add_pcie_port(struct pcie_port *pp,
 	return 0;
 }
 
+static const struct of_device_id imx6_pcie_of_match[] = {
+	{ .compatible = "fsl,imx6q-pcie", },
+	{ .compatible = "fsl,imx6sx-pcie", .data = &imx6sx_pcie_data},
+	{},
+};
+MODULE_DEVICE_TABLE(of, imx6_pcie_of_match);
+
+#ifdef CONFIG_PM_SLEEP
+static int pci_imx_suspend(void)
+{
+	if (is_imx6sx_pcie(imx6_pcie)) {
+		/* PM_TURN_OFF */
+		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
+				BIT(16), 1 << 16);
+		udelay(10);
+		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
+				BIT(16), 0 << 16);
+	}
+
+	return 0;
+}
+
+static void pci_imx_resume(void)
+{
+	struct pcie_port *pp = &imx6_pcie->pp;
+
+	if (is_imx6sx_pcie(imx6_pcie)) {
+		/* reset iMX6SX PCIe */
+		regmap_update_bits(imx6_pcie->iomuxc_gpr,
+				IOMUXC_GPR5, BIT(18), 1 << 18);
+
+		regmap_update_bits(imx6_pcie->iomuxc_gpr,
+				IOMUXC_GPR5, BIT(18), 0 << 18);
+
+		/*
+		 * controller maybe turn off, re-configure again
+		 * Set the CLASS_REV of RC CFG header to
+		 * PCI_CLASS_BRIDGE_PCI
+		 */
+		writel(readl(pp->dbi_base + PCI_CLASS_REVISION)
+			| (PCI_CLASS_BRIDGE_PCI << 16),
+			pp->dbi_base + PCI_CLASS_REVISION);
+
+		dw_pcie_setup_rc(pp);
+	}
+}
+
+static struct syscore_ops pci_imx_syscore_ops = {
+	.suspend = pci_imx_suspend,
+	.resume = pci_imx_resume,
+};
+#endif
+
 static int __init imx6_pcie_probe(struct platform_device *pdev)
 {
-	struct imx6_pcie *imx6_pcie;
 	struct pcie_port *pp;
+	const struct of_device_id *of_id =
+			of_match_device(imx6_pcie_of_match, &pdev->dev);
 	struct device_node *np = pdev->dev.of_node;
 	struct resource *dbi_base;
 	int ret;
@@ -560,6 +680,7 @@ static int __init imx6_pcie_probe(struct platform_device *pdev)
 
 	pp = &imx6_pcie->pp;
 	pp->dev = &pdev->dev;
+	imx6_pcie->data = of_id->data;
 
 	/* Added for PCI abort handling */
 	hook_fault_code(16 + 6, imx6q_pcie_abort_handler, SIGBUS, 0,
@@ -603,9 +724,19 @@ static int __init imx6_pcie_probe(struct platform_device *pdev)
 		return PTR_ERR(imx6_pcie->pcie);
 	}
 
-	/* Grab GPR config register range */
-	imx6_pcie->iomuxc_gpr =
-		 syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr");
+	if (is_imx6sx_pcie(imx6_pcie)) {
+		imx6_pcie->pcie_regulator = devm_regulator_get(pp->dev, "pcie");
+
+		imx6_pcie->iomuxc_gpr =
+			 syscon_regmap_lookup_by_compatible
+			 ("fsl,imx6sx-iomuxc-gpr");
+		imx6_pcie->gpc_ips_reg =
+			 syscon_regmap_lookup_by_compatible("fsl,imx6sx-gpc");
+	} else {
+		imx6_pcie->iomuxc_gpr =
+			syscon_regmap_lookup_by_compatible
+			("fsl,imx6q-iomuxc-gpr");
+	}
 	if (IS_ERR(imx6_pcie->iomuxc_gpr)) {
 		dev_err(&pdev->dev, "unable to find iomuxc registers\n");
 		return PTR_ERR(imx6_pcie->iomuxc_gpr);
@@ -616,6 +747,9 @@ static int __init imx6_pcie_probe(struct platform_device *pdev)
 		return ret;
 
 	platform_set_drvdata(pdev, imx6_pcie);
+#ifdef CONFIG_PM_SLEEP
+	register_syscore_ops(&pci_imx_syscore_ops);
+#endif
 	return 0;
 }
 
@@ -627,12 +761,6 @@ static void imx6_pcie_shutdown(struct platform_device *pdev)
 	imx6_pcie_assert_core_reset(&imx6_pcie->pp);
 }
 
-static const struct of_device_id imx6_pcie_of_match[] = {
-	{ .compatible = "fsl,imx6q-pcie", },
-	{},
-};
-MODULE_DEVICE_TABLE(of, imx6_pcie_of_match);
-
 static struct platform_driver imx6_pcie_driver = {
 	.driver = {
 		.name	= "imx6q-pcie",
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* Re: [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto.
  2014-09-23  4:11 [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu
                   ` (4 preceding siblings ...)
  2014-09-23  4:11 ` [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support Richard Zhu
@ 2014-09-23  9:18 ` Lucas Stach
  2014-09-23  9:29   ` Hong-Xing.Zhu
  5 siblings, 1 reply; 31+ messages in thread
From: Lucas Stach @ 2014-09-23  9:18 UTC (permalink / raw)
  To: Richard Zhu; +Cc: linux-pci-owner, linux-pci, shawn.guo, festevam, tharvey

Hi Richard,

Am Dienstag, den 23.09.2014, 12:11 +0800 schrieb Richard Zhu:
> Hi Tim:
> After I changed the wait clocks stabilize delay after pcie_ref_en is set
> in this patch-set.
> Can you help to make a double check whether it's ok or not at your side?
> 
> Thanks in advanced.
> 
I'll go through this series today. Please give me some time to properly
comment on every patch before posting a new version of the series.
Thanks.

> Main changes since the v1:
> 1. Regarding to Lucas' comments, seperated the enalbe pcie on
> imx6qdl sabreauto patch.
> 2. Add the description why the wait clock stabilize delay should
> be run after pcie_ref_en is set.
> 3. Return 0 directly in suspend call back.
> 
> Main changes since the RFC:
> Thanks for quick review from Lucas.
> 1. seperate the smashed patch-set.
> 2. remove the "power-on-gpio".
> 3. add/update the pcie-supply of the dts and binding.
> 4. 
> 
> [PATCH v2 1/5] PCI: imx6: enable pcie on imx6qdl sabreauto
> [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en
> [PATCH v2 3/5] PCI: imx6: update dts and binding for imx6sx pcie
> [PATCH v2 4/5] PCI: imx6: add imx6sx pcie related gpr bits
> [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support

-- 
Pengutronix e.K.             | Lucas Stach                 |
Industrial Linux Solutions   | http://www.pengutronix.de/  |


^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 1/5] PCI: imx6: enable pcie on imx6qdl sabreauto
  2014-09-23  4:11 ` [PATCH v2 1/5] PCI: imx6: enable pcie on " Richard Zhu
@ 2014-09-23  9:19   ` Lucas Stach
  2014-09-23 12:40   ` Fabio Estevam
  1 sibling, 0 replies; 31+ messages in thread
From: Lucas Stach @ 2014-09-23  9:19 UTC (permalink / raw)
  To: Richard Zhu; +Cc: linux-pci-owner, linux-pci, shawn.guo, festevam, tharvey

Am Dienstag, den 23.09.2014, 12:11 +0800 schrieb Richard Zhu:
> - enable pcie on imx6qdl sabreauto boards.
> 
> Signed-off-by: Richard Zhu <r65037@freescale.com>

Reviewed-by: Lucas Stach <l.stach@pengutronix.de>
> ---
>  arch/arm/boot/dts/imx6qdl-sabreauto.dtsi | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
> index 009abd6..d6040a5 100644
> --- a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
> +++ b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
> @@ -410,6 +410,10 @@
>  	};
>  };
>  
> +&pcie {
> +	status = "okay";
> +};
> +
>  &pwm3 {
>  	pinctrl-names = "default";
>  	pinctrl-0 = <&pinctrl_pwm3>;

-- 
Pengutronix e.K.             | Lucas Stach                 |
Industrial Linux Solutions   | http://www.pengutronix.de/  |


^ permalink raw reply	[flat|nested] 31+ messages in thread

* RE: [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto.
  2014-09-23  9:18 ` [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Lucas Stach
@ 2014-09-23  9:29   ` Hong-Xing.Zhu
  0 siblings, 0 replies; 31+ messages in thread
From: Hong-Xing.Zhu @ 2014-09-23  9:29 UTC (permalink / raw)
  To: Lucas Stach; +Cc: linux-pci-owner, linux-pci, Shengchao Guo, festevam, tharvey

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBMdWNhcyBTdGFjaCBbbWFpbHRv
Omwuc3RhY2hAcGVuZ3V0cm9uaXguZGVdDQo+IFNlbnQ6IFR1ZXNkYXksIFNlcHRlbWJlciAyMywg
MjAxNCA1OjE5IFBNDQo+IFRvOiBaaHUgUmljaGFyZC1SNjUwMzcNCj4gQ2M6IGxpbnV4LXBjaS1v
d25lckB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmc7IEd1byBTaGF3
bi0NCj4gUjY1MDczOyBmZXN0ZXZhbUBnbWFpbC5jb207IHRoYXJ2ZXlAZ2F0ZXdvcmtzLmNvbQ0K
PiBTdWJqZWN0OiBSZTogW1BBVENIIHYyXVBDSTogaW14NjogZW5hYmxlIHBjaWUgb24gaW14NnN4
IHNkYiBhbmQgaW14NnFkbA0KPiBzYWJyZWF1dG8uDQo+IA0KPiBIaSBSaWNoYXJkLA0KPiANCj4g
QW0gRGllbnN0YWcsIGRlbiAyMy4wOS4yMDE0LCAxMjoxMSArMDgwMCBzY2hyaWViIFJpY2hhcmQg
Wmh1Og0KPiA+IEhpIFRpbToNCj4gPiBBZnRlciBJIGNoYW5nZWQgdGhlIHdhaXQgY2xvY2tzIHN0
YWJpbGl6ZSBkZWxheSBhZnRlciBwY2llX3JlZl9lbiBpcw0KPiA+IHNldCBpbiB0aGlzIHBhdGNo
LXNldC4NCj4gPiBDYW4geW91IGhlbHAgdG8gbWFrZSBhIGRvdWJsZSBjaGVjayB3aGV0aGVyIGl0
J3Mgb2sgb3Igbm90IGF0IHlvdXIgc2lkZT8NCj4gPg0KPiA+IFRoYW5rcyBpbiBhZHZhbmNlZC4N
Cj4gPg0KPiBJJ2xsIGdvIHRocm91Z2ggdGhpcyBzZXJpZXMgdG9kYXkuIFBsZWFzZSBnaXZlIG1l
IHNvbWUgdGltZSB0byBwcm9wZXJseQ0KPiBjb21tZW50IG9uIGV2ZXJ5IHBhdGNoIGJlZm9yZSBw
b3N0aW5nIGEgbmV3IHZlcnNpb24gb2YgdGhlIHNlcmllcy4NCj4gVGhhbmtzLg0KPiANCg0KT2sg
bm8gcHJvYmxlbSwgdGhhbmtzIGEgbG90IGZvciB5b3VyIGtpbmRseSBoZWxwLg0KDQpCZXN0IFJl
Z2FyZHMNClJpY2hhcmQgWmh1DQoNCj4gPiBNYWluIGNoYW5nZXMgc2luY2UgdGhlIHYxOg0KPiA+
IDEuIFJlZ2FyZGluZyB0byBMdWNhcycgY29tbWVudHMsIHNlcGVyYXRlZCB0aGUgZW5hbGJlIHBj
aWUgb24gaW14NnFkbA0KPiA+IHNhYnJlYXV0byBwYXRjaC4NCj4gPiAyLiBBZGQgdGhlIGRlc2Ny
aXB0aW9uIHdoeSB0aGUgd2FpdCBjbG9jayBzdGFiaWxpemUgZGVsYXkgc2hvdWxkIGJlDQo+ID4g
cnVuIGFmdGVyIHBjaWVfcmVmX2VuIGlzIHNldC4NCj4gPiAzLiBSZXR1cm4gMCBkaXJlY3RseSBp
biBzdXNwZW5kIGNhbGwgYmFjay4NCj4gPg0KPiA+IE1haW4gY2hhbmdlcyBzaW5jZSB0aGUgUkZD
Og0KPiA+IFRoYW5rcyBmb3IgcXVpY2sgcmV2aWV3IGZyb20gTHVjYXMuDQo+ID4gMS4gc2VwZXJh
dGUgdGhlIHNtYXNoZWQgcGF0Y2gtc2V0Lg0KPiA+IDIuIHJlbW92ZSB0aGUgInBvd2VyLW9uLWdw
aW8iLg0KPiA+IDMuIGFkZC91cGRhdGUgdGhlIHBjaWUtc3VwcGx5IG9mIHRoZSBkdHMgYW5kIGJp
bmRpbmcuDQo+ID4gNC4NCj4gPg0KPiA+IFtQQVRDSCB2MiAxLzVdIFBDSTogaW14NjogZW5hYmxl
IHBjaWUgb24gaW14NnFkbCBzYWJyZWF1dG8gW1BBVENIIHYyDQo+ID4gMi81XSBQQ0k6IGlteDY6
IHdhaXQgdGhlIGNsb2NrcyB0byBzdGFiaWxpemUgYWZ0ZXIgcmVmX2VuIFtQQVRDSCB2Mg0KPiA+
IDMvNV0gUENJOiBpbXg2OiB1cGRhdGUgZHRzIGFuZCBiaW5kaW5nIGZvciBpbXg2c3ggcGNpZSBb
UEFUQ0ggdjIgNC81XQ0KPiA+IFBDSTogaW14NjogYWRkIGlteDZzeCBwY2llIHJlbGF0ZWQgZ3By
IGJpdHMgW1BBVENIIHYyIDUvNV0gUENJOiBpbXg2Og0KPiA+IGFkZCBpbXg2c3ggcGNpZSBzdXBw
b3J0DQo+IA0KPiAtLQ0KPiBQZW5ndXRyb25peCBlLksuICAgICAgICAgICAgIHwgTHVjYXMgU3Rh
Y2ggICAgICAgICAgICAgICAgIHwNCj4gSW5kdXN0cmlhbCBMaW51eCBTb2x1dGlvbnMgICB8IGh0
dHA6Ly93d3cucGVuZ3V0cm9uaXguZGUvICB8DQoNCg==

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en
  2014-09-23  4:11 ` [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en Richard Zhu
@ 2014-09-23  9:56   ` Lucas Stach
  2014-09-23 12:28     ` Tim Harvey
  2014-09-23 12:45   ` Fabio Estevam
  2014-10-24  1:51   ` Fabio Estevam
  2 siblings, 1 reply; 31+ messages in thread
From: Lucas Stach @ 2014-09-23  9:56 UTC (permalink / raw)
  To: Richard Zhu; +Cc: linux-pci-owner, linux-pci, shawn.guo, festevam, tharvey

Am Dienstag, den 23.09.2014, 12:11 +0800 schrieb Richard Zhu:
> - a while delay is mandatory required after pcie_ref_clk_en
> is set. Otherwise, the system would be hang on imx6qdl ard
> boards, because that imx6qdl boards don't have the reset_gpio.
> - the clocks should be stable already after the
> "clk_prepare_enable" is return. So I think it's ok to move the
> usleep delay after the pcie_ref_en is set.
> 

You are describing a lot of the conditions around the issue, but not the
issue itself, which makes it hard to follow your commit message. After
looking at the code I think the problem is this (and should be described
accordingly):

For boards without a reset gpio we skip the delay between enabling the
pcie_ref_clk and touching the RC registers for configuration. Apparently
this hangs when the clocks are not yet settled in the DW PCIe core. So
we need to make sure that there is always an appropriate delay between
those two actions.

I have not found this constraint anywhere in the i.MX6 Reference Manual,
nor in the DW PCIe documents I have access to, which makes me a bit feel
a bit unhappy about this. Richard, do you have better info on why this
delay is needed and how long it needs to be? Or is this just empirical?

In general I'm ok with this patch, but still want a confirmation from
Tim that this doesn't break anything.

> Signed-off-by: Richard Zhu <r65037@freescale.com>
> ---
>  drivers/pci/host/pci-imx6.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
> index 233fe8a..bc4222b 100644
> --- a/drivers/pci/host/pci-imx6.c
> +++ b/drivers/pci/host/pci-imx6.c
> @@ -275,15 +275,15 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp)
>  		goto err_pcie;
>  	}
>  
> -	/* allow the clocks to stabilize */
> -	usleep_range(200, 500);
> -
>  	/* power up core phy and enable ref clock */
>  	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
>  			IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18);
>  	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
>  			IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16);
>  
> +	/* allow the clocks to stabilize */
> +	usleep_range(200, 500);
> +
>  	/* Some boards don't have PCIe reset GPIO. */
>  	if (gpio_is_valid(imx6_pcie->reset_gpio)) {
>  		gpio_set_value(imx6_pcie->reset_gpio, 0);

-- 
Pengutronix e.K.             | Lucas Stach                 |
Industrial Linux Solutions   | http://www.pengutronix.de/  |


^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 3/5] PCI: imx6: update dts and binding for imx6sx pcie
  2014-09-23  4:11 ` [PATCH v2 3/5] PCI: imx6: update dts and binding for imx6sx pcie Richard Zhu
@ 2014-09-23 10:19   ` Lucas Stach
  2014-09-24  9:43     ` Hong-Xing.Zhu
  0 siblings, 1 reply; 31+ messages in thread
From: Lucas Stach @ 2014-09-23 10:19 UTC (permalink / raw)
  To: Richard Zhu; +Cc: linux-pci-owner, linux-pci, shawn.guo, festevam, tharvey

Am Dienstag, den 23.09.2014, 12:11 +0800 schrieb Richard Zhu:
> - imx6sx pcie has its own power regulator.
> add the pcie power suppy into dts and binding.
> - enable pcie on imx6sx soc.
> 
> Signed-off-by: Richard Zhu <r65037@freescale.com>
> ---
>  .../devicetree/bindings/pci/fsl,imx6q-pcie.txt     |  4 ++-
>  arch/arm/boot/dts/imx6sx-sdb.dts                   | 13 +++++++++
>  arch/arm/boot/dts/imx6sx.dtsi                      | 33 +++++++++++++---------
>  arch/arm/mach-imx/Kconfig                          |  1 +
>  4 files changed, 36 insertions(+), 15 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt b/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt
> index 9455fd0..d3b5704 100644
> --- a/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt
> +++ b/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt
> @@ -4,7 +4,7 @@ This PCIe host controller is based on the Synopsis Designware PCIe IP
>  and thus inherits all the common properties defined in designware-pcie.txt.
>  
>  Required properties:
> -- compatible: "fsl,imx6q-pcie"
> +- compatible: "fsl,imx6q-pcie", "fsl,imx6sx-pcie"
>  - reg: base addresse and length of the pcie controller
>  - interrupts: A list of interrupt outputs of the controller. Must contain an
>    entry for each entry in the interrupt-names property.
> @@ -12,6 +12,7 @@ Required properties:
>  	- "msi": The interrupt that is asserted when an MSI is received
>  - clock-names: Must include the following additional entries:
>  	- "pcie_phy"
> +- regulator: regulator used by imx6sx pcie module.
>  

There are multiple issues with this line:
It should move into it's own section that clearly states that this is a
required property only for compatible fsl,imx6sx-pcie.
It doesn't mention the actual name of the supply.
The name you are using in the example below is too broad: what is this
supply used for? Is it feeding the whole PCIe partition, or just the
PHY? In either case it should be named something like pcie-core-supply
or pcie-phy-supply. We may later add regulators that can be clearly
differentiated by their name.

>  Example:
>  
> @@ -35,4 +36,5 @@ Example:
>  		                <0 0 0 4 &intc GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
>  		clocks = <&clks 144>, <&clks 206>, <&clks 189>;
>  		clock-names = "pcie", "pcie_bus", "pcie_phy";
> +		pcie-supply = <&reg_pcie>;
>  	};
> diff --git a/arch/arm/boot/dts/imx6sx-sdb.dts b/arch/arm/boot/dts/imx6sx-sdb.dts
> index a3980d9..2976913 100644
> --- a/arch/arm/boot/dts/imx6sx-sdb.dts
> +++ b/arch/arm/boot/dts/imx6sx-sdb.dts
> @@ -251,6 +251,13 @@
>  	};
>  };
>  
> +&pcie {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&pinctrl_pcie>;
> +	reset-gpio = <&gpio2 0 0>;
> +	status = "okay";
> +};
> +

This is adding PCIe support to a single board and has nothing to do with
the binding. Split out into another patch.

>  &ssi2 {
>  	status = "okay";
>  };
> @@ -365,6 +372,12 @@
>  			>;
>  		};
>  
> +		pinctrl_pcie: pciegrp {
> +			fsl,pins = <
> +				MX6SX_PAD_ENET1_COL__GPIO2_IO_0 0x17059
> +			>;
> +		};
> +
>  		pinctrl_vcc_sd3: vccsd3grp {
>  			fsl,pins = <
>  				MX6SX_PAD_KEY_COL1__GPIO2_IO_11		0x17059
> diff --git a/arch/arm/boot/dts/imx6sx.dtsi b/arch/arm/boot/dts/imx6sx.dtsi
> index f4b9da6..4911160 100644
> --- a/arch/arm/boot/dts/imx6sx.dtsi
> +++ b/arch/arm/boot/dts/imx6sx.dtsi
> @@ -689,9 +689,11 @@
>  			};
>  
>  			gpc: gpc@020dc000 {
> -				compatible = "fsl,imx6sx-gpc", "fsl,imx6q-gpc";
> +				compatible = "fsl,imx6sx-gpc",
> +					     "fsl,imx6q-gpc", "syscon";

This has nothing to do with the imx6sx binding change. Split out into
another patch with own justification.

>  				reg = <0x020dc000 0x4000>;
>  				interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
> +				pcie-supply = <&reg_pcie>;

This shouldn't be here.

>  			};
>  
>  			iomuxc: iomuxc@020e0000 {
> @@ -1188,20 +1190,23 @@
>  			#address-cells = <3>;
>  			#size-cells = <2>;
>  			device_type = "pci";
> -				  /* configuration space */
> -			ranges = <0x00000800 0 0x08f00000 0x08f00000 0 0x00080000
> -				  /* downstream I/O */
> -				  0x81000000 0 0          0x08f80000 0 0x00010000
> -				  /* non-prefetchable memory */
> -				  0x82000000 0 0x08000000 0x08000000 0 0x00f00000>;
> +			ranges = <0x00000800 0 0x01f00000 0x08f00000 0 0x00080000 /* configuration space */
> +				  0x81000000 0 0          0x08f80000 0 0x00010000 /* downstream I/O */
> +				  0x82000000 0 0x01000000 0x08000000 0 0x00f00000>; /* non-prefetchable memory */

You are changing the configuration space here. Was it wrong before? If
so this needs to be mentioned in the commit message. Also config space
assigned in ranges is deprecated. Please add it to the regs property as
done on imx6q.

>  			num-lanes = <1>;
> -			interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>;
> -			clocks = <&clks IMX6SX_CLK_PCIE_REF_125M>,
> -				 <&clks IMX6SX_CLK_PCIE_AXI>,
> -				 <&clks IMX6SX_CLK_LVDS1_OUT>,
> -				 <&clks IMX6SX_CLK_DISPLAY_AXI>;
> -			clock-names = "pcie_ref_125m", "pcie_axi",
> -				      "lvds_gate", "display_axi";
> +			interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;

Again, changing something without mentioning if it was wrong before.

> +			interrupt-names = "msi";
> +			#interrupt-cells = <1>;
> +			interrupt-map-mask = <0 0 0 0x7>;
> +			interrupt-map = <0 0 0 1 &intc GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
> +			                <0 0 0 2 &intc GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>,
> +			                <0 0 0 3 &intc GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
> +			                <0 0 0 4 &intc GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
> +			clocks = <&clks IMX6SX_CLK_PCIE_AXI>,
> +				 <&clks IMX6SX_CLK_DISPLAY_AXI>,
> +				 <&clks IMX6SX_CLK_LVDS1_OUT>;
> +			clock-names = "pcie", "pcie_phy", "pcie_bus";

Is this display_axi clock really feeding the PHY, or is it just a parent
of pcie_axi that needs to be enabled for pcie_axi to work? In that case
we need to make pcie_phy clock optional for imx6sx and model the
relationship between pcie_axi and display_axi in the clock driver.

I will not allow the enabling of clocks not directly related to the PCIe
core to creep back into this driver. It has cost me quite some time and
a binding change to correct this for imx6q.

> +			pcie-supply = <&reg_pcie>;
>  			status = "disabled";
>  		};
>  	};
> diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
> index be9a51a..0a055f0 100644
> --- a/arch/arm/mach-imx/Kconfig
> +++ b/arch/arm/mach-imx/Kconfig
> @@ -718,6 +718,7 @@ config SOC_IMX6SL
>  
>  config SOC_IMX6SX
>  	bool "i.MX6 SoloX support"
> +	select PCI_DOMAINS if PCI
>  	select PINCTRL_IMX6SX
>  	select SOC_IMX6
>  
This change is completely unrelated. Also I don't see why you need this.
If you need this for imx6sx please look at the linux-pci ML, Phil
Edworthy posted a patch to enable this for all ARM devices and I would
like to see your option there.

regards,
Lucas

-- 
Pengutronix e.K.             | Lucas Stach                 |
Industrial Linux Solutions   | http://www.pengutronix.de/  |


^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 4/5] PCI: imx6: add imx6sx pcie related gpr bits definitions
  2014-09-23  4:11 ` [PATCH v2 4/5] PCI: imx6: add imx6sx pcie related gpr bits definitions Richard Zhu
@ 2014-09-23 10:21   ` Lucas Stach
  2014-09-24  4:45     ` Hong-Xing.Zhu
  0 siblings, 1 reply; 31+ messages in thread
From: Lucas Stach @ 2014-09-23 10:21 UTC (permalink / raw)
  To: Richard Zhu; +Cc: linux-pci-owner, linux-pci, shawn.guo, festevam, tharvey

Am Dienstag, den 23.09.2014, 12:11 +0800 schrieb Richard Zhu:
> Signed-off-by: Richard Zhu <r65037@freescale.com>

I don't think those _CLR defines make any sense. Can we just use the
mask and a value of 0 in the regmap updates? I don't see how those
defines add any value.

> ---
>  include/linux/mfd/syscon/imx6q-iomuxc-gpr.h | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
> index ff44374..f02875e 100644
> --- a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
> +++ b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
> @@ -113,10 +113,12 @@
>  #define IMX6Q_GPR1_MIPI_IPU1_MUX_GASKET		0x0
>  #define IMX6Q_GPR1_MIPI_IPU1_MUX_IOMUX		BIT(19)
>  #define IMX6Q_GPR1_PCIE_TEST_PD			BIT(18)
> +#define IMX6Q_GPR1_PCIE_TEST_PD_CLR		0x0
>  #define IMX6Q_GPR1_IPU_VPU_MUX_MASK		BIT(17)
>  #define IMX6Q_GPR1_IPU_VPU_MUX_IPU1		0x0
>  #define IMX6Q_GPR1_IPU_VPU_MUX_IPU2		BIT(17)
>  #define IMX6Q_GPR1_PCIE_REF_CLK_EN		BIT(16)
> +#define IMX6Q_GPR1_PCIE_REF_CLK_CLR		0x0
>  #define IMX6Q_GPR1_USB_EXP_MODE			BIT(15)
>  #define IMX6Q_GPR1_PCIE_INT			BIT(14)
>  #define IMX6Q_GPR1_USB_OTG_ID_SEL_MASK		BIT(13)
> @@ -300,7 +302,9 @@
>  #define IMX6Q_GPR12_ARMP_APB_CLK_EN		BIT(24)
>  #define IMX6Q_GPR12_DEVICE_TYPE			(0xf << 12)
>  #define IMX6Q_GPR12_PCIE_CTL_2			BIT(10)
> +#define IMX6Q_GPR12_PCIE_CTL_2_CLR		0x0
>  #define IMX6Q_GPR12_LOS_LEVEL			(0x1f << 4)
> +#define IMX6Q_GPR12_LOS_LEVEL_9			(0x9 << 4)
>  
>  #define IMX6Q_GPR13_SDMA_STOP_REQ		BIT(30)
>  #define IMX6Q_GPR13_CAN2_STOP_REQ		BIT(29)
> @@ -395,4 +399,14 @@
>  #define IMX6SL_GPR1_FEC_CLOCK_MUX1_SEL_MASK    (0x3 << 17)
>  #define IMX6SL_GPR1_FEC_CLOCK_MUX2_SEL_MASK    (0x1 << 14)
>  
> +/* For imx6sx iomux gpr register field define */
> +#define IMX6SX_GPR5_PCIE_BTNRST			BIT(19)
> +#define IMX6SX_GPR5_PCIE_BTNRST_CLR		0x0
> +#define IMX6SX_GPR5_PCIE_PERST			BIT(18)
> +#define IMX6SX_GPR5_PCIE_PERST_CLR		0x0
> +
> +#define IMX6SX_GPR12_PCIE_TEST_PD		BIT(30)
> +#define IMX6SX_GPR12_PCIE_TEST_PD_CLR		0x0
> +#define IMX6SX_GPR12_RX_EQ_MASK			(0x7 << 0)
> +#define IMX6SX_GPR12_RX_EQ_2			(0x2 << 0)
>  #endif /* __LINUX_IMX6Q_IOMUXC_GPR_H */

-- 
Pengutronix e.K.             | Lucas Stach                 |
Industrial Linux Solutions   | http://www.pengutronix.de/  |


^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support
  2014-09-23  4:11 ` [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support Richard Zhu
@ 2014-09-23 11:00   ` Lucas Stach
  2014-09-24  7:09     ` Hong-Xing.Zhu
  0 siblings, 1 reply; 31+ messages in thread
From: Lucas Stach @ 2014-09-23 11:00 UTC (permalink / raw)
  To: Richard Zhu; +Cc: linux-pci-owner, linux-pci, shawn.guo, festevam, tharvey

Am Dienstag, den 23.09.2014, 12:11 +0800 schrieb Richard Zhu:
> - imx6sx pcie has its own standalone pcie power supply.
> In order to turn on the imx6sx pcie power during
> initialization. Add the pcie regulator and the gpc regmap
> into the imx6sx pcie structure.
> - imx6sx pcie has the new added reset mechanism, add the
> reset operations into the initialization.
> - Register one PM call-back, enter/exit L2 state of the ASPM
> during system suspend/resume.
> 
> Signed-off-by: Richard Zhu <r65037@freescale.com>
> ---
>  drivers/pci/host/pci-imx6.c | 164 +++++++++++++++++++++++++++++++++++++++-----
>  1 file changed, 146 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
> index bc4222b..99ecb5d 100644
> --- a/drivers/pci/host/pci-imx6.c
> +++ b/drivers/pci/host/pci-imx6.c
> @@ -18,12 +18,16 @@
>  #include <linux/mfd/syscon.h>
>  #include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
>  #include <linux/module.h>
> +#include <linux/of_address.h>
> +#include <linux/of_device.h>
>  #include <linux/of_gpio.h>
>  #include <linux/pci.h>
>  #include <linux/platform_device.h>
>  #include <linux/regmap.h>
> +#include <linux/regulator/consumer.h>
>  #include <linux/resource.h>
>  #include <linux/signal.h>
> +#include <linux/syscore_ops.h>
>  #include <linux/types.h>
>  #include <linux/interrupt.h>
>  
> @@ -31,15 +35,30 @@
>  
>  #define to_imx6_pcie(x)	container_of(x, struct imx6_pcie, pp)
>  
> +/* The pcie who have standalone power domain */
> +#define PCIE_PHY_HAS_PWR_DOMAIN		BIT(0)
> +
> +struct imx_pcie_data {
> +	unsigned int flags;
> +};
> +
> +static const struct imx_pcie_data imx6sx_pcie_data = {
> +	.flags = PCIE_PHY_HAS_PWR_DOMAIN,
> +};
> +

You don't use this flag anywhere else so all the above is not needed if
you rewrite the below...

>  struct imx6_pcie {
>  	int			reset_gpio;
> +	const struct		imx_pcie_data *data;
>  	struct clk		*pcie_bus;
>  	struct clk		*pcie_phy;
>  	struct clk		*pcie;
>  	struct pcie_port	pp;
>  	struct regmap		*iomuxc_gpr;
> +	struct regmap		*gpc_ips_reg;
> +	struct regulator	*pcie_regulator;
>  	void __iomem		*mem_base;
>  };
> +static struct imx6_pcie *imx6_pcie;
>  
>  /* PCIe Root Complex registers (memory-mapped) */
>  #define PCIE_RC_LCR				0x7c
> @@ -77,6 +96,11 @@ struct imx6_pcie {
>  #define PHY_RX_OVRD_IN_LO_RX_DATA_EN (1 << 5)
>  #define PHY_RX_OVRD_IN_LO_RX_PLL_EN (1 << 3)
>  
> +static inline bool is_imx6sx_pcie(struct imx6_pcie *imx6_pcie)
> +{
> +	return imx6_pcie->data == &imx6sx_pcie_data;

... to return of_device_is_compatible(np, "fsl,imx6sx-pcie");

> +}
> +
>  static int pcie_phy_poll_ack(void __iomem *dbi_base, int exp_val)
>  {
>  	u32 val;
> @@ -275,11 +299,17 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp)
>  		goto err_pcie;
>  	}
>  
> -	/* power up core phy and enable ref clock */
> -	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
> -			IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18);
> -	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
> -			IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16);
> +	if (is_imx6sx_pcie(imx6_pcie)) {
> +		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
> +				IMX6SX_GPR12_PCIE_TEST_PD,
> +				IMX6SX_GPR12_PCIE_TEST_PD_CLR);
> +	} else {
> +		/* power up core phy and enable ref clock */
> +		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
> +				IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18);
> +		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
> +				IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16);
> +	}
>  
>  	/* allow the clocks to stabilize */
>  	usleep_range(200, 500);
> @@ -290,6 +320,18 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp)
>  		msleep(100);
>  		gpio_set_value(imx6_pcie->reset_gpio, 1);
>  	}
> +
> +	/*
> +	 * iMX6SX PCIe has the stand-alone power domain.
> +	 * refer to the initialization for iMX6SX PCIe,
> +	 * release the PCIe PHY reset here,
> +	 * before LTSSM enable is set.
> +	 */

This comment is confusing. I don't see how this has something to do with
the power-domain. It should read something like "Release the PHY reset,
that we have set in imx6_pcie_init_phy() now."

> +	if (is_imx6sx_pcie(imx6_pcie))
> +		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR5,
> +				IMX6SX_GPR5_PCIE_BTNRST,
> +				IMX6SX_GPR5_PCIE_BTNRST_CLR);
> +
>  	return 0;
>  
>  err_pcie:
> @@ -304,15 +346,38 @@ err_pcie_phy:
>  static void imx6_pcie_init_phy(struct pcie_port *pp)
>  {
>  	struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp);
> +	int ret;
> +
> +	/*
> +	 * iMX6SX PCIe has the stand-alone power domain
> +	 * add the initialization here for iMX6SX PCIe.
> +	 */

Again this could be phrased better: "Power up the separate domain
available on i.MX6SX"

> +	if (is_imx6sx_pcie(imx6_pcie)) {
> +		/* Force PCIe PHY reset */
> +		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR5,
> +				IMX6SX_GPR5_PCIE_BTNRST,
> +				IMX6SX_GPR5_PCIE_BTNRST);
> +
> +		regmap_update_bits(imx6_pcie->gpc_ips_reg, 0, 1 << 7, 1 << 7);

Magic values here. Also this is the only time we need to access
gpc_ips_reg. So if this is a prerequisite to enabling the ANATOP
regulator, I would argue it should be done in the regulator driver.

> +		/* Power up PCIe PHY, ANATOP_REG_CORE offset 0x140, bit13-9 */

Oh so this is actually a PHY regulator, not feeding the whole core, but
just the PHY? You could remove the comment it is clear what you are
doing from the code and the offsets are of no interest in the PCIe
driver.

> +		regulator_set_voltage(imx6_pcie->pcie_regulator,
> +				1100000, 1100000);
> +		ret = regulator_enable(imx6_pcie->pcie_regulator);
> +		if (ret)
> +			dev_info(pp->dev, "failed to enable pcie regulator.\n");
> +		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
> +				IMX6SX_GPR12_RX_EQ_MASK, IMX6SX_GPR12_RX_EQ_2);
> +	}
>  
>  	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
> -			IMX6Q_GPR12_PCIE_CTL_2, 0 << 10);
> +			IMX6Q_GPR12_PCIE_CTL_2,
> +			IMX6Q_GPR12_PCIE_CTL_2_CLR);
>  
>  	/* configure constant input signal to the pcie ctrl and phy */
>  	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
>  			IMX6Q_GPR12_DEVICE_TYPE, PCI_EXP_TYPE_ROOT_PORT << 12);
>  	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
> -			IMX6Q_GPR12_LOS_LEVEL, 9 << 4);
> +			IMX6Q_GPR12_LOS_LEVEL, IMX6Q_GPR12_LOS_LEVEL_9);
>  
>  	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8,
>  			IMX6Q_GPR8_TX_DEEMPH_GEN1, 0 << 0);
> @@ -370,7 +435,8 @@ static int imx6_pcie_start_link(struct pcie_port *pp)
>  
>  	/* Start LTSSM. */
>  	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
> -			IMX6Q_GPR12_PCIE_CTL_2, 1 << 10);
> +			IMX6Q_GPR12_PCIE_CTL_2,
> +			IMX6Q_GPR12_PCIE_CTL_2);
>  
>  	ret = imx6_pcie_wait_for_link(pp);
>  	if (ret)
> @@ -546,10 +612,64 @@ static int __init imx6_add_pcie_port(struct pcie_port *pp,
>  	return 0;
>  }
>  
> +static const struct of_device_id imx6_pcie_of_match[] = {
> +	{ .compatible = "fsl,imx6q-pcie", },
> +	{ .compatible = "fsl,imx6sx-pcie", .data = &imx6sx_pcie_data},
> +	{},
> +};
> +MODULE_DEVICE_TABLE(of, imx6_pcie_of_match);
> +

Why are you moving the match table? This seems like unnecessary churn to
me.

> +#ifdef CONFIG_PM_SLEEP
> +static int pci_imx_suspend(void)
> +{
> +	if (is_imx6sx_pcie(imx6_pcie)) {
> +		/* PM_TURN_OFF */
> +		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
> +				BIT(16), 1 << 16);
> +		udelay(10);
> +		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
> +				BIT(16), 0 << 16);

Magic numbers here. Please add defines for those.

> +	}
> +
> +	return 0;
> +}
> +
> +static void pci_imx_resume(void)
> +{
> +	struct pcie_port *pp = &imx6_pcie->pp;
> +
> +	if (is_imx6sx_pcie(imx6_pcie)) {
> +		/* reset iMX6SX PCIe */
> +		regmap_update_bits(imx6_pcie->iomuxc_gpr,
> +				IOMUXC_GPR5, BIT(18), 1 << 18);
> +
> +		regmap_update_bits(imx6_pcie->iomuxc_gpr,
> +				IOMUXC_GPR5, BIT(18), 0 << 18);
> +

Again magic numbers here. Please add defines for those.

> +		/*
> +		 * controller maybe turn off, re-configure again
> +		 * Set the CLASS_REV of RC CFG header to
> +		 * PCI_CLASS_BRIDGE_PCI
> +		 */
> +		writel(readl(pp->dbi_base + PCI_CLASS_REVISION)
> +			| (PCI_CLASS_BRIDGE_PCI << 16),
> +			pp->dbi_base + PCI_CLASS_REVISION);
> +

Can't we just move the call to set this from dw_pcie_host_init() to
dw_pcie_setup_rc() so we don't need to do this ourselves? It seems to be
the more logical change.

> +		dw_pcie_setup_rc(pp);
> +	}
> +}
> +
> +static struct syscore_ops pci_imx_syscore_ops = {
> +	.suspend = pci_imx_suspend,
> +	.resume = pci_imx_resume,
> +};
> +#endif
> +

Why does this need to be syscore_ops instead of dev_pm_ops?

>  static int __init imx6_pcie_probe(struct platform_device *pdev)
>  {
> -	struct imx6_pcie *imx6_pcie;
>  	struct pcie_port *pp;
> +	const struct of_device_id *of_id =
> +			of_match_device(imx6_pcie_of_match, &pdev->dev);
>  	struct device_node *np = pdev->dev.of_node;
>  	struct resource *dbi_base;
>  	int ret;
> @@ -560,6 +680,7 @@ static int __init imx6_pcie_probe(struct platform_device *pdev)
>  
>  	pp = &imx6_pcie->pp;
>  	pp->dev = &pdev->dev;
> +	imx6_pcie->data = of_id->data;
>  
>  	/* Added for PCI abort handling */
>  	hook_fault_code(16 + 6, imx6q_pcie_abort_handler, SIGBUS, 0,
> @@ -603,9 +724,19 @@ static int __init imx6_pcie_probe(struct platform_device *pdev)
>  		return PTR_ERR(imx6_pcie->pcie);
>  	}
>  
> -	/* Grab GPR config register range */
> -	imx6_pcie->iomuxc_gpr =
> -		 syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr");
> +	if (is_imx6sx_pcie(imx6_pcie)) {
> +		imx6_pcie->pcie_regulator = devm_regulator_get(pp->dev, "pcie");
> +
> +		imx6_pcie->iomuxc_gpr =
> +			 syscon_regmap_lookup_by_compatible
> +			 ("fsl,imx6sx-iomuxc-gpr");
> +		imx6_pcie->gpc_ips_reg =
> +			 syscon_regmap_lookup_by_compatible("fsl,imx6sx-gpc");
> +	} else {
> +		imx6_pcie->iomuxc_gpr =
> +			syscon_regmap_lookup_by_compatible
> +			("fsl,imx6q-iomuxc-gpr");
> +	}
>  	if (IS_ERR(imx6_pcie->iomuxc_gpr)) {
>  		dev_err(&pdev->dev, "unable to find iomuxc registers\n");
>  		return PTR_ERR(imx6_pcie->iomuxc_gpr);
> @@ -616,6 +747,9 @@ static int __init imx6_pcie_probe(struct platform_device *pdev)
>  		return ret;
>  
>  	platform_set_drvdata(pdev, imx6_pcie);
> +#ifdef CONFIG_PM_SLEEP
> +	register_syscore_ops(&pci_imx_syscore_ops);
> +#endif
>  	return 0;
>  }
>  
> @@ -627,12 +761,6 @@ static void imx6_pcie_shutdown(struct platform_device *pdev)
>  	imx6_pcie_assert_core_reset(&imx6_pcie->pp);
>  }
>  
> -static const struct of_device_id imx6_pcie_of_match[] = {
> -	{ .compatible = "fsl,imx6q-pcie", },
> -	{},
> -};
> -MODULE_DEVICE_TABLE(of, imx6_pcie_of_match);
> -
>  static struct platform_driver imx6_pcie_driver = {
>  	.driver = {
>  		.name	= "imx6q-pcie",

-- 
Pengutronix e.K.             | Lucas Stach                 |
Industrial Linux Solutions   | http://www.pengutronix.de/  |


^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en
  2014-09-23  9:56   ` Lucas Stach
@ 2014-09-23 12:28     ` Tim Harvey
  2014-09-25  5:21       ` Hong-Xing.Zhu
  2014-10-01 18:00       ` Tim Harvey
  0 siblings, 2 replies; 31+ messages in thread
From: Tim Harvey @ 2014-09-23 12:28 UTC (permalink / raw)
  To: Lucas Stach, Richard Zhu
  Cc: linux-pci-owner, linux-pci, Shawn Guo, Fabio Estevam

On Tue, Sep 23, 2014 at 2:56 AM, Lucas Stach <l.stach@pengutronix.de> wrote:
> Am Dienstag, den 23.09.2014, 12:11 +0800 schrieb Richard Zhu:
>> - a while delay is mandatory required after pcie_ref_clk_en
>> is set. Otherwise, the system would be hang on imx6qdl ard
>> boards, because that imx6qdl boards don't have the reset_gpio.
>> - the clocks should be stable already after the
>> "clk_prepare_enable" is return. So I think it's ok to move the
>> usleep delay after the pcie_ref_en is set.
>>
>
> You are describing a lot of the conditions around the issue, but not the
> issue itself, which makes it hard to follow your commit message. After
> looking at the code I think the problem is this (and should be described
> accordingly):
>
> For boards without a reset gpio we skip the delay between enabling the
> pcie_ref_clk and touching the RC registers for configuration. Apparently
> this hangs when the clocks are not yet settled in the DW PCIe core. So
> we need to make sure that there is always an appropriate delay between
> those two actions.
>
> I have not found this constraint anywhere in the i.MX6 Reference Manual,
> nor in the DW PCIe documents I have access to, which makes me a bit feel
> a bit unhappy about this. Richard, do you have better info on why this
> delay is needed and how long it needs to be? Or is this just empirical?
>
> In general I'm ok with this patch, but still want a confirmation from
> Tim that this doesn't break anything.

I agree with Lucas' comments and also agree that this can use some
testing. Based on my previous findings PCI link is very fragile. It
will take me a few days to get a proper test setup in a thermal
chamber with a host of boards but I will report back when I have
findings.

Tim

>
>> Signed-off-by: Richard Zhu <r65037@freescale.com>
>> ---
>>  drivers/pci/host/pci-imx6.c | 6 +++---
>>  1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
>> index 233fe8a..bc4222b 100644
>> --- a/drivers/pci/host/pci-imx6.c
>> +++ b/drivers/pci/host/pci-imx6.c
>> @@ -275,15 +275,15 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp)
>>               goto err_pcie;
>>       }
>>
>> -     /* allow the clocks to stabilize */
>> -     usleep_range(200, 500);
>> -
>>       /* power up core phy and enable ref clock */
>>       regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
>>                       IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18);
>>       regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
>>                       IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16);
>>
>> +     /* allow the clocks to stabilize */
>> +     usleep_range(200, 500);
>> +
>>       /* Some boards don't have PCIe reset GPIO. */
>>       if (gpio_is_valid(imx6_pcie->reset_gpio)) {
>>               gpio_set_value(imx6_pcie->reset_gpio, 0);
>
> --
> Pengutronix e.K.             | Lucas Stach                 |
> Industrial Linux Solutions   | http://www.pengutronix.de/  |
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-pci" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 1/5] PCI: imx6: enable pcie on imx6qdl sabreauto
  2014-09-23  4:11 ` [PATCH v2 1/5] PCI: imx6: enable pcie on " Richard Zhu
  2014-09-23  9:19   ` Lucas Stach
@ 2014-09-23 12:40   ` Fabio Estevam
  2014-09-24  2:54     ` Hong-Xing.Zhu
  1 sibling, 1 reply; 31+ messages in thread
From: Fabio Estevam @ 2014-09-23 12:40 UTC (permalink / raw)
  To: Richard Zhu
  Cc: linux-pci-owner, linux-pci, Shawn Guo, Lucas Stach, Tim Harvey

Hi Richard,

On Tue, Sep 23, 2014 at 1:11 AM, Richard Zhu <r65037@freescale.com> wrote:
> - enable pcie on imx6qdl sabreauto boards.
>
> Signed-off-by: Richard Zhu <r65037@freescale.com>
> ---
>  arch/arm/boot/dts/imx6qdl-sabreauto.dtsi | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
> index 009abd6..d6040a5 100644
> --- a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
> +++ b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
> @@ -410,6 +410,10 @@
>         };
>  };
>
> +&pcie {
> +       status = "okay";
> +};

It would be better if you could pass the PCI reset pin that comes from
the GPIO expander.

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en
  2014-09-23  4:11 ` [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en Richard Zhu
  2014-09-23  9:56   ` Lucas Stach
@ 2014-09-23 12:45   ` Fabio Estevam
  2014-10-24  1:51   ` Fabio Estevam
  2 siblings, 0 replies; 31+ messages in thread
From: Fabio Estevam @ 2014-09-23 12:45 UTC (permalink / raw)
  To: Richard Zhu
  Cc: linux-pci-owner, linux-pci, Shawn Guo, Lucas Stach, Tim Harvey

On Tue, Sep 23, 2014 at 1:11 AM, Richard Zhu <r65037@freescale.com> wrote:
> - a while delay is mandatory required after pcie_ref_clk_en
> is set. Otherwise, the system would be hang on imx6qdl ard
> boards, because that imx6qdl boards don't have the reset_gpio.

The mx6qdl sabreauto boards do have PCI reset pins. They come from the
I2C MAX7310 expander.

Yes, there are boards that do not have PCI reset GPIO, but this commit
log need to be rewritten.

^ permalink raw reply	[flat|nested] 31+ messages in thread

* RE: [PATCH v2 1/5] PCI: imx6: enable pcie on imx6qdl sabreauto
  2014-09-23 12:40   ` Fabio Estevam
@ 2014-09-24  2:54     ` Hong-Xing.Zhu
  2014-09-24 21:04       ` Fabio Estevam
  0 siblings, 1 reply; 31+ messages in thread
From: Hong-Xing.Zhu @ 2014-09-24  2:54 UTC (permalink / raw)
  To: Fabio Estevam
  Cc: linux-pci-owner, linux-pci, Shengchao Guo, Lucas Stach, Tim Harvey

SGkgRmFiaW8NCg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEZhYmlv
IEVzdGV2YW0gW21haWx0bzpmZXN0ZXZhbUBnbWFpbC5jb21dDQo+IFNlbnQ6IFR1ZXNkYXksIFNl
cHRlbWJlciAyMywgMjAxNCA4OjQxIFBNDQo+IFRvOiBaaHUgUmljaGFyZC1SNjUwMzcNCj4gQ2M6
IGxpbnV4LXBjaS1vd25lckB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5v
cmc7IEd1byBTaGF3bi0NCj4gUjY1MDczOyBMdWNhcyBTdGFjaDsgVGltIEhhcnZleQ0KPiBTdWJq
ZWN0OiBSZTogW1BBVENIIHYyIDEvNV0gUENJOiBpbXg2OiBlbmFibGUgcGNpZSBvbiBpbXg2cWRs
IHNhYnJlYXV0bw0KPiANCj4gSGkgUmljaGFyZCwNCj4gDQo+IE9uIFR1ZSwgU2VwIDIzLCAyMDE0
IGF0IDE6MTEgQU0sIFJpY2hhcmQgWmh1IDxyNjUwMzdAZnJlZXNjYWxlLmNvbT4gd3JvdGU6DQo+
ID4gLSBlbmFibGUgcGNpZSBvbiBpbXg2cWRsIHNhYnJlYXV0byBib2FyZHMuDQo+ID4NCj4gPiBT
aWduZWQtb2ZmLWJ5OiBSaWNoYXJkIFpodSA8cjY1MDM3QGZyZWVzY2FsZS5jb20+DQo+ID4gLS0t
DQo+ID4gIGFyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtc2FicmVhdXRvLmR0c2kgfCA0ICsrKysN
Cj4gPiAgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQ0KPiA+DQo+ID4gZGlmZiAtLWdp
dCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtc2FicmVhdXRvLmR0c2kNCj4gPiBiL2FyY2gv
YXJtL2Jvb3QvZHRzL2lteDZxZGwtc2FicmVhdXRvLmR0c2kNCj4gPiBpbmRleCAwMDlhYmQ2Li5k
NjA0MGE1IDEwMDY0NA0KPiA+IC0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtc2FicmVh
dXRvLmR0c2kNCj4gPiArKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXNhYnJlYXV0by5k
dHNpDQo+ID4gQEAgLTQxMCw2ICs0MTAsMTAgQEANCj4gPiAgICAgICAgIH07DQo+ID4gIH07DQo+
ID4NCj4gPiArJnBjaWUgew0KPiA+ICsgICAgICAgc3RhdHVzID0gIm9rYXkiOw0KPiA+ICt9Ow0K
PiANCj4gSXQgd291bGQgYmUgYmV0dGVyIGlmIHlvdSBjb3VsZCBwYXNzIHRoZSBQQ0kgcmVzZXQg
cGluIHRoYXQgY29tZXMgZnJvbSB0aGUNCj4gR1BJTyBleHBhbmRlci4NCltSaWNoYXJkXSA2cWRs
IHNhYnJlYXV0byBib2FyZHMgZG9uJ3QgaGF2ZSB0aGUgcGNpZSByZXNldCBncGlvIGluIHRoZSBi
b2FyZCBkZXNpZ24gYXQgYWxsLg0KDQpCZXN0IFJlZ2FyZHMNClJpY2hhcmQgWmh1DQo=

^ permalink raw reply	[flat|nested] 31+ messages in thread

* RE: [PATCH v2 4/5] PCI: imx6: add imx6sx pcie related gpr bits definitions
  2014-09-23 10:21   ` Lucas Stach
@ 2014-09-24  4:45     ` Hong-Xing.Zhu
  0 siblings, 0 replies; 31+ messages in thread
From: Hong-Xing.Zhu @ 2014-09-24  4:45 UTC (permalink / raw)
  To: Lucas Stach; +Cc: linux-pci-owner, linux-pci, Shengchao Guo, festevam, tharvey

DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEx1Y2FzIFN0YWNoIFttYWls
dG86bC5zdGFjaEBwZW5ndXRyb25peC5kZV0NCj4gU2VudDogVHVlc2RheSwgU2VwdGVtYmVyIDIz
LCAyMDE0IDY6MjEgUE0NCj4gVG86IFpodSBSaWNoYXJkLVI2NTAzNw0KPiBDYzogbGludXgtcGNp
LW93bmVyQHZnZXIua2VybmVsLm9yZzsgbGludXgtcGNpQHZnZXIua2VybmVsLm9yZzsgR3VvIFNo
YXduLQ0KPiBSNjUwNzM7IGZlc3RldmFtQGdtYWlsLmNvbTsgdGhhcnZleUBnYXRld29ya3MuY29t
DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjIgNC81XSBQQ0k6IGlteDY6IGFkZCBpbXg2c3ggcGNp
ZSByZWxhdGVkIGdwciBiaXRzDQo+IGRlZmluaXRpb25zDQo+IA0KPiBBbSBEaWVuc3RhZywgZGVu
IDIzLjA5LjIwMTQsIDEyOjExICswODAwIHNjaHJpZWIgUmljaGFyZCBaaHU6DQo+ID4gU2lnbmVk
LW9mZi1ieTogUmljaGFyZCBaaHUgPHI2NTAzN0BmcmVlc2NhbGUuY29tPg0KPiANCj4gSSBkb24n
dCB0aGluayB0aG9zZSBfQ0xSIGRlZmluZXMgbWFrZSBhbnkgc2Vuc2UuIENhbiB3ZSBqdXN0IHVz
ZSB0aGUgbWFzayBhbmQNCj4gYSB2YWx1ZSBvZiAwIGluIHRoZSByZWdtYXAgdXBkYXRlcz8gSSBk
b24ndCBzZWUgaG93IHRob3NlIGRlZmluZXMgYWRkIGFueQ0KPiB2YWx1ZS4NCj4gDQoNCltSaWNo
YXJkXSBPay4NCkJlc3QgUmVnYXJkcw0KUmljaGFyZCBaaHUNCj4gPiAtLS0NCj4gPiAgaW5jbHVk
ZS9saW51eC9tZmQvc3lzY29uL2lteDZxLWlvbXV4Yy1ncHIuaCB8IDE0ICsrKysrKysrKysrKysr
DQo+ID4gIDEgZmlsZSBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspDQo+ID4NCj4gPiBkaWZmIC0t
Z2l0IGEvaW5jbHVkZS9saW51eC9tZmQvc3lzY29uL2lteDZxLWlvbXV4Yy1ncHIuaA0KPiA+IGIv
aW5jbHVkZS9saW51eC9tZmQvc3lzY29uL2lteDZxLWlvbXV4Yy1ncHIuaA0KPiA+IGluZGV4IGZm
NDQzNzQuLmYwMjg3NWUgMTAwNjQ0DQo+ID4gLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvc3lzY29u
L2lteDZxLWlvbXV4Yy1ncHIuaA0KPiA+ICsrKyBiL2luY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi9p
bXg2cS1pb211eGMtZ3ByLmgNCj4gPiBAQCAtMTEzLDEwICsxMTMsMTIgQEANCj4gPiAgI2RlZmlu
ZSBJTVg2UV9HUFIxX01JUElfSVBVMV9NVVhfR0FTS0VUCQkweDANCj4gPiAgI2RlZmluZSBJTVg2
UV9HUFIxX01JUElfSVBVMV9NVVhfSU9NVVgJCUJJVCgxOSkNCj4gPiAgI2RlZmluZSBJTVg2UV9H
UFIxX1BDSUVfVEVTVF9QRAkJCUJJVCgxOCkNCj4gPiArI2RlZmluZSBJTVg2UV9HUFIxX1BDSUVf
VEVTVF9QRF9DTFIJCTB4MA0KPiA+ICAjZGVmaW5lIElNWDZRX0dQUjFfSVBVX1ZQVV9NVVhfTUFT
SwkJQklUKDE3KQ0KPiA+ICAjZGVmaW5lIElNWDZRX0dQUjFfSVBVX1ZQVV9NVVhfSVBVMQkJMHgw
DQo+ID4gICNkZWZpbmUgSU1YNlFfR1BSMV9JUFVfVlBVX01VWF9JUFUyCQlCSVQoMTcpDQo+ID4g
ICNkZWZpbmUgSU1YNlFfR1BSMV9QQ0lFX1JFRl9DTEtfRU4JCUJJVCgxNikNCj4gPiArI2RlZmlu
ZSBJTVg2UV9HUFIxX1BDSUVfUkVGX0NMS19DTFIJCTB4MA0KPiA+ICAjZGVmaW5lIElNWDZRX0dQ
UjFfVVNCX0VYUF9NT0RFCQkJQklUKDE1KQ0KPiA+ICAjZGVmaW5lIElNWDZRX0dQUjFfUENJRV9J
TlQJCQlCSVQoMTQpDQo+ID4gICNkZWZpbmUgSU1YNlFfR1BSMV9VU0JfT1RHX0lEX1NFTF9NQVNL
CQlCSVQoMTMpDQo+ID4gQEAgLTMwMCw3ICszMDIsOSBAQA0KPiA+ICAjZGVmaW5lIElNWDZRX0dQ
UjEyX0FSTVBfQVBCX0NMS19FTgkJQklUKDI0KQ0KPiA+ICAjZGVmaW5lIElNWDZRX0dQUjEyX0RF
VklDRV9UWVBFCQkJKDB4ZiA8PCAxMikNCj4gPiAgI2RlZmluZSBJTVg2UV9HUFIxMl9QQ0lFX0NU
TF8yCQkJQklUKDEwKQ0KPiA+ICsjZGVmaW5lIElNWDZRX0dQUjEyX1BDSUVfQ1RMXzJfQ0xSCQkw
eDANCj4gPiAgI2RlZmluZSBJTVg2UV9HUFIxMl9MT1NfTEVWRUwJCQkoMHgxZiA8PCA0KQ0KPiA+
ICsjZGVmaW5lIElNWDZRX0dQUjEyX0xPU19MRVZFTF85CQkJKDB4OSA8PCA0KQ0KPiA+DQo+ID4g
ICNkZWZpbmUgSU1YNlFfR1BSMTNfU0RNQV9TVE9QX1JFUQkJQklUKDMwKQ0KPiA+ICAjZGVmaW5l
IElNWDZRX0dQUjEzX0NBTjJfU1RPUF9SRVEJCUJJVCgyOSkNCj4gPiBAQCAtMzk1LDQgKzM5OSwx
NCBAQA0KPiA+ICAjZGVmaW5lIElNWDZTTF9HUFIxX0ZFQ19DTE9DS19NVVgxX1NFTF9NQVNLICAg
ICgweDMgPDwgMTcpDQo+ID4gICNkZWZpbmUgSU1YNlNMX0dQUjFfRkVDX0NMT0NLX01VWDJfU0VM
X01BU0sgICAgKDB4MSA8PCAxNCkNCj4gPg0KPiA+ICsvKiBGb3IgaW14NnN4IGlvbXV4IGdwciBy
ZWdpc3RlciBmaWVsZCBkZWZpbmUgKi8NCj4gPiArI2RlZmluZSBJTVg2U1hfR1BSNV9QQ0lFX0JU
TlJTVAkJCUJJVCgxOSkNCj4gPiArI2RlZmluZSBJTVg2U1hfR1BSNV9QQ0lFX0JUTlJTVF9DTFIJ
CTB4MA0KPiA+ICsjZGVmaW5lIElNWDZTWF9HUFI1X1BDSUVfUEVSU1QJCQlCSVQoMTgpDQo+ID4g
KyNkZWZpbmUgSU1YNlNYX0dQUjVfUENJRV9QRVJTVF9DTFIJCTB4MA0KPiA+ICsNCj4gPiArI2Rl
ZmluZSBJTVg2U1hfR1BSMTJfUENJRV9URVNUX1BECQlCSVQoMzApDQo+ID4gKyNkZWZpbmUgSU1Y
NlNYX0dQUjEyX1BDSUVfVEVTVF9QRF9DTFIJCTB4MA0KPiA+ICsjZGVmaW5lIElNWDZTWF9HUFIx
Ml9SWF9FUV9NQVNLCQkJKDB4NyA8PCAwKQ0KPiA+ICsjZGVmaW5lIElNWDZTWF9HUFIxMl9SWF9F
UV8yCQkJKDB4MiA8PCAwKQ0KPiA+ICAjZW5kaWYgLyogX19MSU5VWF9JTVg2UV9JT01VWENfR1BS
X0ggKi8NCj4gDQo+IC0tDQo+IFBlbmd1dHJvbml4IGUuSy4gICAgICAgICAgICAgfCBMdWNhcyBT
dGFjaCAgICAgICAgICAgICAgICAgfA0KPiBJbmR1c3RyaWFsIExpbnV4IFNvbHV0aW9ucyAgIHwg
aHR0cDovL3d3dy5wZW5ndXRyb25peC5kZS8gIHwNCg0K

^ permalink raw reply	[flat|nested] 31+ messages in thread

* RE: [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support
  2014-09-23 11:00   ` Lucas Stach
@ 2014-09-24  7:09     ` Hong-Xing.Zhu
  2014-09-24  9:46       ` Lucas Stach
  0 siblings, 1 reply; 31+ messages in thread
From: Hong-Xing.Zhu @ 2014-09-24  7:09 UTC (permalink / raw)
  To: Lucas Stach; +Cc: linux-pci-owner, linux-pci, Shengchao Guo, festevam, tharvey

DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEx1Y2FzIFN0YWNoIFttYWls
dG86bC5zdGFjaEBwZW5ndXRyb25peC5kZV0NCj4gU2VudDogVHVlc2RheSwgU2VwdGVtYmVyIDIz
LCAyMDE0IDc6MDAgUE0NCj4gVG86IFpodSBSaWNoYXJkLVI2NTAzNw0KPiBDYzogbGludXgtcGNp
LW93bmVyQHZnZXIua2VybmVsLm9yZzsgbGludXgtcGNpQHZnZXIua2VybmVsLm9yZzsgR3VvIFNo
YXduLQ0KPiBSNjUwNzM7IGZlc3RldmFtQGdtYWlsLmNvbTsgdGhhcnZleUBnYXRld29ya3MuY29t
DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjIgNS81XSBQQ0k6IGlteDY6IGFkZCBpbXg2c3ggcGNp
ZSBzdXBwb3J0DQo+IA0KPiBBbSBEaWVuc3RhZywgZGVuIDIzLjA5LjIwMTQsIDEyOjExICswODAw
IHNjaHJpZWIgUmljaGFyZCBaaHU6DQo+ID4gLSBpbXg2c3ggcGNpZSBoYXMgaXRzIG93biBzdGFu
ZGFsb25lIHBjaWUgcG93ZXIgc3VwcGx5Lg0KPiA+IEluIG9yZGVyIHRvIHR1cm4gb24gdGhlIGlt
eDZzeCBwY2llIHBvd2VyIGR1cmluZyBpbml0aWFsaXphdGlvbi4gQWRkDQo+ID4gdGhlIHBjaWUg
cmVndWxhdG9yIGFuZCB0aGUgZ3BjIHJlZ21hcCBpbnRvIHRoZSBpbXg2c3ggcGNpZSBzdHJ1Y3R1
cmUuDQo+ID4gLSBpbXg2c3ggcGNpZSBoYXMgdGhlIG5ldyBhZGRlZCByZXNldCBtZWNoYW5pc20s
IGFkZCB0aGUgcmVzZXQNCj4gPiBvcGVyYXRpb25zIGludG8gdGhlIGluaXRpYWxpemF0aW9uLg0K
PiA+IC0gUmVnaXN0ZXIgb25lIFBNIGNhbGwtYmFjaywgZW50ZXIvZXhpdCBMMiBzdGF0ZSBvZiB0
aGUgQVNQTSBkdXJpbmcNCj4gPiBzeXN0ZW0gc3VzcGVuZC9yZXN1bWUuDQo+ID4NCj4gPiBTaWdu
ZWQtb2ZmLWJ5OiBSaWNoYXJkIFpodSA8cjY1MDM3QGZyZWVzY2FsZS5jb20+DQo+ID4gLS0tDQo+
ID4gIGRyaXZlcnMvcGNpL2hvc3QvcGNpLWlteDYuYyB8IDE2NA0KPiA+ICsrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tDQo+ID4gIDEgZmlsZSBjaGFuZ2VkLCAxNDYg
aW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0pDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJp
dmVycy9wY2kvaG9zdC9wY2ktaW14Ni5jIGIvZHJpdmVycy9wY2kvaG9zdC9wY2ktaW14Ni5jDQo+
ID4gaW5kZXggYmM0MjIyYi4uOTllY2I1ZCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3BjaS9o
b3N0L3BjaS1pbXg2LmMNCj4gPiArKysgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1pbXg2LmMNCj4g
PiBAQCAtMTgsMTIgKzE4LDE2IEBADQo+ID4gICNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+
DQo+ID4gICNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uL2lteDZxLWlvbXV4Yy1ncHIuaD4NCj4g
PiAgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfYWRk
cmVzcy5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+DQo+ID4gICNpbmNsdWRl
IDxsaW51eC9vZl9ncGlvLmg+DQo+ID4gICNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCj4gPiAgI2lu
Y2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiA+ICAjaW5jbHVkZSA8bGludXgvcmVn
bWFwLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4NCj4gPiAg
I2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+DQo+ID4gICNpbmNsdWRlIDxsaW51eC9zaWduYWwu
aD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+DQo+ID4gICNpbmNsdWRlIDxs
aW51eC90eXBlcy5oPg0KPiA+ICAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+ID4NCj4g
PiBAQCAtMzEsMTUgKzM1LDMwIEBADQo+ID4NCj4gPiAgI2RlZmluZSB0b19pbXg2X3BjaWUoeCkJ
Y29udGFpbmVyX29mKHgsIHN0cnVjdCBpbXg2X3BjaWUsIHBwKQ0KPiA+DQo+ID4gKy8qIFRoZSBw
Y2llIHdobyBoYXZlIHN0YW5kYWxvbmUgcG93ZXIgZG9tYWluICovDQo+ID4gKyNkZWZpbmUgUENJ
RV9QSFlfSEFTX1BXUl9ET01BSU4JCUJJVCgwKQ0KPiA+ICsNCj4gPiArc3RydWN0IGlteF9wY2ll
X2RhdGEgew0KPiA+ICsJdW5zaWduZWQgaW50IGZsYWdzOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr
c3RhdGljIGNvbnN0IHN0cnVjdCBpbXhfcGNpZV9kYXRhIGlteDZzeF9wY2llX2RhdGEgPSB7DQo+
ID4gKwkuZmxhZ3MgPSBQQ0lFX1BIWV9IQVNfUFdSX0RPTUFJTiwNCj4gPiArfTsNCj4gPiArDQo+
IA0KPiBZb3UgZG9uJ3QgdXNlIHRoaXMgZmxhZyBhbnl3aGVyZSBlbHNlIHNvIGFsbCB0aGUgYWJv
dmUgaXMgbm90IG5lZWRlZCBpZiB5b3UNCj4gcmV3cml0ZSB0aGUgYmVsb3cuLi4NCltSaWNoYXJk
XSBZb3VyIHN1Z2dlc3QgaXMgZ3JlYXQsIHRoYW5rcy4NCj4gDQo+ID4gIHN0cnVjdCBpbXg2X3Bj
aWUgew0KPiA+ICAJaW50CQkJcmVzZXRfZ3BpbzsNCj4gPiArCWNvbnN0IHN0cnVjdAkJaW14X3Bj
aWVfZGF0YSAqZGF0YTsNCj4gPiAgCXN0cnVjdCBjbGsJCSpwY2llX2J1czsNCj4gPiAgCXN0cnVj
dCBjbGsJCSpwY2llX3BoeTsNCj4gPiAgCXN0cnVjdCBjbGsJCSpwY2llOw0KPiA+ICAJc3RydWN0
IHBjaWVfcG9ydAlwcDsNCj4gPiAgCXN0cnVjdCByZWdtYXAJCSppb211eGNfZ3ByOw0KPiA+ICsJ
c3RydWN0IHJlZ21hcAkJKmdwY19pcHNfcmVnOw0KPiA+ICsJc3RydWN0IHJlZ3VsYXRvcgkqcGNp
ZV9yZWd1bGF0b3I7DQo+ID4gIAl2b2lkIF9faW9tZW0JCSptZW1fYmFzZTsNCj4gPiAgfTsNCj4g
PiArc3RhdGljIHN0cnVjdCBpbXg2X3BjaWUgKmlteDZfcGNpZTsNCj4gPg0KPiA+ICAvKiBQQ0ll
IFJvb3QgQ29tcGxleCByZWdpc3RlcnMgKG1lbW9yeS1tYXBwZWQpICovDQo+ID4gICNkZWZpbmUg
UENJRV9SQ19MQ1IJCQkJMHg3Yw0KPiA+IEBAIC03Nyw2ICs5NiwxMSBAQCBzdHJ1Y3QgaW14Nl9w
Y2llIHsNCj4gPiAgI2RlZmluZSBQSFlfUlhfT1ZSRF9JTl9MT19SWF9EQVRBX0VOICgxIDw8IDUp
ICAjZGVmaW5lDQo+ID4gUEhZX1JYX09WUkRfSU5fTE9fUlhfUExMX0VOICgxIDw8IDMpDQo+ID4N
Cj4gPiArc3RhdGljIGlubGluZSBib29sIGlzX2lteDZzeF9wY2llKHN0cnVjdCBpbXg2X3BjaWUg
KmlteDZfcGNpZSkgew0KPiA+ICsJcmV0dXJuIGlteDZfcGNpZS0+ZGF0YSA9PSAmaW14NnN4X3Bj
aWVfZGF0YTsNCj4gDQo+IC4uLiB0byByZXR1cm4gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAs
ICJmc2wsaW14NnN4LXBjaWUiKTsNCj4gDQpbUmljaGFyZF0gRXhhY3RseSwgdGhhbmtzLg0KPiA+
ICt9DQo+ID4gKw0KPiA+ICBzdGF0aWMgaW50IHBjaWVfcGh5X3BvbGxfYWNrKHZvaWQgX19pb21l
bSAqZGJpX2Jhc2UsIGludCBleHBfdmFsKSAgew0KPiA+ICAJdTMyIHZhbDsNCj4gPiBAQCAtMjc1
LDExICsyOTksMTcgQEAgc3RhdGljIGludCBpbXg2X3BjaWVfZGVhc3NlcnRfY29yZV9yZXNldChz
dHJ1Y3QNCj4gcGNpZV9wb3J0ICpwcCkNCj4gPiAgCQlnb3RvIGVycl9wY2llOw0KPiA+ICAJfQ0K
PiA+DQo+ID4gLQkvKiBwb3dlciB1cCBjb3JlIHBoeSBhbmQgZW5hYmxlIHJlZiBjbG9jayAqLw0K
PiA+IC0JcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQ
UjEsDQo+ID4gLQkJCUlNWDZRX0dQUjFfUENJRV9URVNUX1BELCAwIDw8IDE4KTsNCj4gPiAtCXJl
Z21hcF91cGRhdGVfYml0cyhpbXg2X3BjaWUtPmlvbXV4Y19ncHIsIElPTVVYQ19HUFIxLA0KPiA+
IC0JCQlJTVg2UV9HUFIxX1BDSUVfUkVGX0NMS19FTiwgMSA8PCAxNik7DQo+ID4gKwlpZiAoaXNf
aW14NnN4X3BjaWUoaW14Nl9wY2llKSkgew0KPiA+ICsJCXJlZ21hcF91cGRhdGVfYml0cyhpbXg2
X3BjaWUtPmlvbXV4Y19ncHIsIElPTVVYQ19HUFIxMiwNCj4gPiArCQkJCUlNWDZTWF9HUFIxMl9Q
Q0lFX1RFU1RfUEQsDQo+ID4gKwkJCQlJTVg2U1hfR1BSMTJfUENJRV9URVNUX1BEX0NMUik7DQo+
ID4gKwl9IGVsc2Ugew0KPiA+ICsJCS8qIHBvd2VyIHVwIGNvcmUgcGh5IGFuZCBlbmFibGUgcmVm
IGNsb2NrICovDQo+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dw
ciwgSU9NVVhDX0dQUjEsDQo+ID4gKwkJCQlJTVg2UV9HUFIxX1BDSUVfVEVTVF9QRCwgMCA8PCAx
OCk7DQo+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9N
VVhDX0dQUjEsDQo+ID4gKwkJCQlJTVg2UV9HUFIxX1BDSUVfUkVGX0NMS19FTiwgMSA8PCAxNik7
DQo+ID4gKwl9DQo+ID4NCj4gPiAgCS8qIGFsbG93IHRoZSBjbG9ja3MgdG8gc3RhYmlsaXplICov
DQo+ID4gIAl1c2xlZXBfcmFuZ2UoMjAwLCA1MDApOw0KPiA+IEBAIC0yOTAsNiArMzIwLDE4IEBA
IHN0YXRpYyBpbnQgaW14Nl9wY2llX2RlYXNzZXJ0X2NvcmVfcmVzZXQoc3RydWN0DQo+IHBjaWVf
cG9ydCAqcHApDQo+ID4gIAkJbXNsZWVwKDEwMCk7DQo+ID4gIAkJZ3Bpb19zZXRfdmFsdWUoaW14
Nl9wY2llLT5yZXNldF9ncGlvLCAxKTsNCj4gPiAgCX0NCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJ
ICogaU1YNlNYIFBDSWUgaGFzIHRoZSBzdGFuZC1hbG9uZSBwb3dlciBkb21haW4uDQo+ID4gKwkg
KiByZWZlciB0byB0aGUgaW5pdGlhbGl6YXRpb24gZm9yIGlNWDZTWCBQQ0llLA0KPiA+ICsJICog
cmVsZWFzZSB0aGUgUENJZSBQSFkgcmVzZXQgaGVyZSwNCj4gPiArCSAqIGJlZm9yZSBMVFNTTSBl
bmFibGUgaXMgc2V0Lg0KPiA+ICsJICovDQo+IA0KPiBUaGlzIGNvbW1lbnQgaXMgY29uZnVzaW5n
LiBJIGRvbid0IHNlZSBob3cgdGhpcyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlDQo+IHBv
d2VyLWRvbWFpbi4gSXQgc2hvdWxkIHJlYWQgc29tZXRoaW5nIGxpa2UgIlJlbGVhc2UgdGhlIFBI
WSByZXNldCwgdGhhdCB3ZQ0KPiBoYXZlIHNldCBpbiBpbXg2X3BjaWVfaW5pdF9waHkoKSBub3cu
Ig0KW1JpY2hhcmRdT2suDQo+IA0KPiA+ICsJaWYgKGlzX2lteDZzeF9wY2llKGlteDZfcGNpZSkp
DQo+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9NVVhD
X0dQUjUsDQo+ID4gKwkJCQlJTVg2U1hfR1BSNV9QQ0lFX0JUTlJTVCwNCj4gPiArCQkJCUlNWDZT
WF9HUFI1X1BDSUVfQlROUlNUX0NMUik7DQo+ID4gKw0KPiA+ICAJcmV0dXJuIDA7DQo+ID4NCj4g
PiAgZXJyX3BjaWU6DQo+ID4gQEAgLTMwNCwxNSArMzQ2LDM4IEBAIGVycl9wY2llX3BoeToNCj4g
PiAgc3RhdGljIHZvaWQgaW14Nl9wY2llX2luaXRfcGh5KHN0cnVjdCBwY2llX3BvcnQgKnBwKSAg
ew0KPiA+ICAJc3RydWN0IGlteDZfcGNpZSAqaW14Nl9wY2llID0gdG9faW14Nl9wY2llKHBwKTsN
Cj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIGlNWDZTWCBQQ0llIGhh
cyB0aGUgc3RhbmQtYWxvbmUgcG93ZXIgZG9tYWluDQo+ID4gKwkgKiBhZGQgdGhlIGluaXRpYWxp
emF0aW9uIGhlcmUgZm9yIGlNWDZTWCBQQ0llLg0KPiA+ICsJICovDQo+IA0KPiBBZ2FpbiB0aGlz
IGNvdWxkIGJlIHBocmFzZWQgYmV0dGVyOiAiUG93ZXIgdXAgdGhlIHNlcGFyYXRlIGRvbWFpbiBh
dmFpbGFibGUgb24NCj4gaS5NWDZTWCINCltSaWNoYXJkXSBPay4NCj4gDQo+ID4gKwlpZiAoaXNf
aW14NnN4X3BjaWUoaW14Nl9wY2llKSkgew0KPiA+ICsJCS8qIEZvcmNlIFBDSWUgUEhZIHJlc2V0
ICovDQo+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9N
VVhDX0dQUjUsDQo+ID4gKwkJCQlJTVg2U1hfR1BSNV9QQ0lFX0JUTlJTVCwNCj4gPiArCQkJCUlN
WDZTWF9HUFI1X1BDSUVfQlROUlNUKTsNCj4gPiArDQo+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRz
KGlteDZfcGNpZS0+Z3BjX2lwc19yZWcsIDAsIDEgPDwgNywgMSA8PCA3KTsNCj4gDQo+IE1hZ2lj
IHZhbHVlcyBoZXJlLiBBbHNvIHRoaXMgaXMgdGhlIG9ubHkgdGltZSB3ZSBuZWVkIHRvIGFjY2Vz
cyBncGNfaXBzX3JlZy4NCj4gU28gaWYgdGhpcyBpcyBhIHByZXJlcXVpc2l0ZSB0byBlbmFibGlu
ZyB0aGUgQU5BVE9QIHJlZ3VsYXRvciwgSSB3b3VsZCBhcmd1ZQ0KPiBpdCBzaG91bGQgYmUgZG9u
ZSBpbiB0aGUgcmVndWxhdG9yIGRyaXZlci4NCltSaWNoYXJkXU1hZ2ljIHZhbHVlcyB3b3VsZCBi
ZSByZXBsYWNlZC4NClllcywgdGhpcyBpcyB0aGUgb25seSB0aW1lIHdlIG5lZWQgdG8gYWNjZXNz
IGdwY19pcHNfcmVnLg0KSXQncyBhIGxpdHRsZSBjb21wbGV4IHRvIGFkZCB0aGUgR1BDIG1hbmlw
dWxhdGlvbnMgaW4NCiBBTkFUT1AvcmVndWxhdG9yIGZyYW1ld29yay9kcml2ZXIgY29kZXMuDQpT
aW5jZSBBTkFUT1AgcmVndWxhdG9yIGlzIGNvbW1vbiBmcmFtZXdvcmsgYW5kIGRyaXZlciwgaXQn
cyBoYXJkIHRvIG1hbmlwdWxhdGUNCkdQQyBiaXRzIGluIEFOQVRPUC9yZWd1bGF0b3IgZHJpdmVy
Lg0KSW4gb3JkZXIgdG8gYmUgZWFzaWVyLCBJIGFkZCB0aGUgR1BDIGJpdHMgbWFuaXB1bGF0aW9u
IGhlcmUgZGlyZWN0bHkuDQpIb3cgZG8geW91IHRoaW5rIGFib3V0IHRoYXQ/DQo+IA0KPiA+ICsJ
CS8qIFBvd2VyIHVwIFBDSWUgUEhZLCBBTkFUT1BfUkVHX0NPUkUgb2Zmc2V0IDB4MTQwLCBiaXQx
My05ICovDQo+IA0KPiBPaCBzbyB0aGlzIGlzIGFjdHVhbGx5IGEgUEhZIHJlZ3VsYXRvciwgbm90
IGZlZWRpbmcgdGhlIHdob2xlIGNvcmUsIGJ1dCBqdXN0DQo+IHRoZSBQSFk/IFlvdSBjb3VsZCBy
ZW1vdmUgdGhlIGNvbW1lbnQgaXQgaXMgY2xlYXIgd2hhdCB5b3UgYXJlIGRvaW5nIGZyb20gdGhl
DQo+IGNvZGUgYW5kIHRoZSBvZmZzZXRzIGFyZSBvZiBubyBpbnRlcmVzdCBpbiB0aGUgUENJZSBk
cml2ZXIuDQpbUmljaGFyZF0geWVzLCBpdCBpcyBhIFBIWSByZWd1bGF0b3IsIG5vdCB1c2VkIHRv
IGZlZWQgdGhlIHdob2xlIGNvcmUuDQpPaywgdGhlIGNvbW1lbnQgd291bGQgYmUgcmVtb3ZlZC4N
Cj4gDQo+ID4gKwkJcmVndWxhdG9yX3NldF92b2x0YWdlKGlteDZfcGNpZS0+cGNpZV9yZWd1bGF0
b3IsDQo+ID4gKwkJCQkxMTAwMDAwLCAxMTAwMDAwKTsNCj4gPiArCQlyZXQgPSByZWd1bGF0b3Jf
ZW5hYmxlKGlteDZfcGNpZS0+cGNpZV9yZWd1bGF0b3IpOw0KPiA+ICsJCWlmIChyZXQpDQo+ID4g
KwkJCWRldl9pbmZvKHBwLT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIHBjaWUgcmVndWxhdG9yLlxu
Iik7DQo+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9N
VVhDX0dQUjEyLA0KPiA+ICsJCQkJSU1YNlNYX0dQUjEyX1JYX0VRX01BU0ssIElNWDZTWF9HUFIx
Ml9SWF9FUV8yKTsNCj4gPiArCX0NCj4gPg0KPiA+ICAJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZf
cGNpZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQUjEyLA0KPiA+IC0JCQlJTVg2UV9HUFIxMl9QQ0lF
X0NUTF8yLCAwIDw8IDEwKTsNCj4gPiArCQkJSU1YNlFfR1BSMTJfUENJRV9DVExfMiwNCj4gPiAr
CQkJSU1YNlFfR1BSMTJfUENJRV9DVExfMl9DTFIpOw0KPiA+DQo+ID4gIAkvKiBjb25maWd1cmUg
Y29uc3RhbnQgaW5wdXQgc2lnbmFsIHRvIHRoZSBwY2llIGN0cmwgYW5kIHBoeSAqLw0KPiA+ICAJ
cmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQUjEyLA0K
PiA+ICAJCQlJTVg2UV9HUFIxMl9ERVZJQ0VfVFlQRSwgUENJX0VYUF9UWVBFX1JPT1RfUE9SVCA8
PCAxMik7DQo+ID4gIAlyZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLCBJ
T01VWENfR1BSMTIsDQo+ID4gLQkJCUlNWDZRX0dQUjEyX0xPU19MRVZFTCwgOSA8PCA0KTsNCj4g
PiArCQkJSU1YNlFfR1BSMTJfTE9TX0xFVkVMLCBJTVg2UV9HUFIxMl9MT1NfTEVWRUxfOSk7DQo+
ID4NCj4gPiAgCXJlZ21hcF91cGRhdGVfYml0cyhpbXg2X3BjaWUtPmlvbXV4Y19ncHIsIElPTVVY
Q19HUFI4LA0KPiA+ICAJCQlJTVg2UV9HUFI4X1RYX0RFRU1QSF9HRU4xLCAwIDw8IDApOyBAQCAt
MzcwLDcgKzQzNSw4IEBAIHN0YXRpYw0KPiBpbnQNCj4gPiBpbXg2X3BjaWVfc3RhcnRfbGluayhz
dHJ1Y3QgcGNpZV9wb3J0ICpwcCkNCj4gPg0KPiA+ICAJLyogU3RhcnQgTFRTU00uICovDQo+ID4g
IAlyZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENfR1BSMTIs
DQo+ID4gLQkJCUlNWDZRX0dQUjEyX1BDSUVfQ1RMXzIsIDEgPDwgMTApOw0KPiA+ICsJCQlJTVg2
UV9HUFIxMl9QQ0lFX0NUTF8yLA0KPiA+ICsJCQlJTVg2UV9HUFIxMl9QQ0lFX0NUTF8yKTsNCj4g
Pg0KPiA+ICAJcmV0ID0gaW14Nl9wY2llX3dhaXRfZm9yX2xpbmsocHApOw0KPiA+ICAJaWYgKHJl
dCkNCj4gPiBAQCAtNTQ2LDEwICs2MTIsNjQgQEAgc3RhdGljIGludCBfX2luaXQgaW14Nl9hZGRf
cGNpZV9wb3J0KHN0cnVjdCBwY2llX3BvcnQNCj4gKnBwLA0KPiA+ICAJcmV0dXJuIDA7DQo+ID4g
IH0NCj4gPg0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBpbXg2X3BjaWVf
b2ZfbWF0Y2hbXSA9IHsNCj4gPiArCXsgLmNvbXBhdGlibGUgPSAiZnNsLGlteDZxLXBjaWUiLCB9
LA0KPiA+ICsJeyAuY29tcGF0aWJsZSA9ICJmc2wsaW14NnN4LXBjaWUiLCAuZGF0YSA9ICZpbXg2
c3hfcGNpZV9kYXRhfSwNCj4gPiArCXt9LA0KPiA+ICt9Ow0KPiA+ICtNT0RVTEVfREVWSUNFX1RB
QkxFKG9mLCBpbXg2X3BjaWVfb2ZfbWF0Y2gpOw0KPiA+ICsNCj4gDQo+IFdoeSBhcmUgeW91IG1v
dmluZyB0aGUgbWF0Y2ggdGFibGU/IFRoaXMgc2VlbXMgbGlrZSB1bm5lY2Vzc2FyeSBjaHVybiB0
byBtZS4NCltSaWNoYXJkXSBpdCBpcyB1c2VkIGJ5IF9wcm9iZSBpbiB2MiBwYXRjaC1zZXQuIENo
YW5nZXMgd291bGQgYmUgZGlzY2FyZGVkIGluIG5leHQgdmVyc2lvbiBwYXRjaC1zZXQuDQo+IA0K
PiA+ICsjaWZkZWYgQ09ORklHX1BNX1NMRUVQDQo+ID4gK3N0YXRpYyBpbnQgcGNpX2lteF9zdXNw
ZW5kKHZvaWQpDQo+ID4gK3sNCj4gPiArCWlmIChpc19pbXg2c3hfcGNpZShpbXg2X3BjaWUpKSB7
DQo+ID4gKwkJLyogUE1fVFVSTl9PRkYgKi8NCj4gPiArCQlyZWdtYXBfdXBkYXRlX2JpdHMoaW14
Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENfR1BSMTIsDQo+ID4gKwkJCQlCSVQoMTYpLCAxIDw8
IDE2KTsNCj4gPiArCQl1ZGVsYXkoMTApOw0KPiA+ICsJCXJlZ21hcF91cGRhdGVfYml0cyhpbXg2
X3BjaWUtPmlvbXV4Y19ncHIsIElPTVVYQ19HUFIxMiwNCj4gPiArCQkJCUJJVCgxNiksIDAgPDwg
MTYpOw0KPiANCj4gTWFnaWMgbnVtYmVycyBoZXJlLiBQbGVhc2UgYWRkIGRlZmluZXMgZm9yIHRo
b3NlLg0KW1JpY2hhcmRdIE9rLg0KPiANCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsN
Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcGNpX2lteF9yZXN1bWUodm9pZCkNCj4g
PiArew0KPiA+ICsJc3RydWN0IHBjaWVfcG9ydCAqcHAgPSAmaW14Nl9wY2llLT5wcDsNCj4gPiAr
DQo+ID4gKwlpZiAoaXNfaW14NnN4X3BjaWUoaW14Nl9wY2llKSkgew0KPiA+ICsJCS8qIHJlc2V0
IGlNWDZTWCBQQ0llICovDQo+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9t
dXhjX2dwciwNCj4gPiArCQkJCUlPTVVYQ19HUFI1LCBCSVQoMTgpLCAxIDw8IDE4KTsNCj4gPiAr
DQo+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwNCj4gPiAr
CQkJCUlPTVVYQ19HUFI1LCBCSVQoMTgpLCAwIDw8IDE4KTsNCj4gPiArDQo+IA0KPiBBZ2FpbiBt
YWdpYyBudW1iZXJzIGhlcmUuIFBsZWFzZSBhZGQgZGVmaW5lcyBmb3IgdGhvc2UuDQpbUmljaGFy
ZF0gT2suDQo+IA0KPiA+ICsJCS8qDQo+ID4gKwkJICogY29udHJvbGxlciBtYXliZSB0dXJuIG9m
ZiwgcmUtY29uZmlndXJlIGFnYWluDQo+ID4gKwkJICogU2V0IHRoZSBDTEFTU19SRVYgb2YgUkMg
Q0ZHIGhlYWRlciB0bw0KPiA+ICsJCSAqIFBDSV9DTEFTU19CUklER0VfUENJDQo+ID4gKwkJICov
DQo+ID4gKwkJd3JpdGVsKHJlYWRsKHBwLT5kYmlfYmFzZSArIFBDSV9DTEFTU19SRVZJU0lPTikN
Cj4gPiArCQkJfCAoUENJX0NMQVNTX0JSSURHRV9QQ0kgPDwgMTYpLA0KPiA+ICsJCQlwcC0+ZGJp
X2Jhc2UgKyBQQ0lfQ0xBU1NfUkVWSVNJT04pOw0KPiA+ICsNCj4gDQo+IENhbid0IHdlIGp1c3Qg
bW92ZSB0aGUgY2FsbCB0byBzZXQgdGhpcyBmcm9tIGR3X3BjaWVfaG9zdF9pbml0KCkgdG8NCj4g
ZHdfcGNpZV9zZXR1cF9yYygpIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gdGhpcyBvdXJzZWx2ZXM/
IEl0IHNlZW1zIHRvIGJlIHRoZQ0KPiBtb3JlIGxvZ2ljYWwgY2hhbmdlLg0KW1JpY2hhcmRdZHdf
cGNpZV9ob3N0X2luaXQgY29udGFpbnMgdGhlIHdob2xlIHJlLWluaXRpYWxpemF0aW9uIGFuZCBy
ZS1saW5rLXVwDQogYWdhaW4gb2YgdGhlIHBjaWUgbW9kdWxlLiBJdCdzIG5vdCBwcm9wZXIgdG8g
cmUtY2FsbCBkd19wY2llX2hvc3RfaW5pdCgpLg0KSSBmaW5kIHRoYXQgdGhlIG1zaSBpbml0IHNo
b3VsZCBiZSByZS1jb25maWd1cmVkIGFnYWluIGFmdGVyIHJlc3VtZSBiYWNrLg0KU28sIHRoZSBk
ZWZpbml0aW9ucyBvZiB0aGUgIlBDSUVfTVNJX0FERFJfTE8iIGFuZCAiUENJRV9NU0lfQUREUl9I
SSIgd291bGQgYmUgdXNlZA0KaGVyZS4NCg0KQlRXLCBkbyB5b3Uga25vdyB3aHkgdGhlICIvKiBT
eW5vcHNpcyBzcGVjaWZpYyBQQ0lFIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovIg0KaXMgbm90
IGRlZmluZWQgaW4gcGNpZS1kZXNpZ253YXJlLmgsIGJ1dCBpbiBwY2llLWRlc2lnbndhcmUuYz8N
Cg0KPiANCj4gPiArCQlkd19wY2llX3NldHVwX3JjKHBwKTsNCj4gPiArCX0NCj4gPiArfQ0KPiA+
ICsNCj4gPiArc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBwY2lfaW14X3N5c2NvcmVfb3BzID0g
ew0KPiA+ICsJLnN1c3BlbmQgPSBwY2lfaW14X3N1c3BlbmQsDQo+ID4gKwkucmVzdW1lID0gcGNp
X2lteF9yZXN1bWUsDQo+ID4gK307DQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gDQo+IFdoeSBkb2Vz
IHRoaXMgbmVlZCB0byBiZSBzeXNjb3JlX29wcyBpbnN0ZWFkIG9mIGRldl9wbV9vcHM/DQpbUmlj
aGFyZF0gUE1fVFVSTl9PRkYgbXNnIHNob3VsZCBiZSBzZW50IG91dCBhdCB0aGUgZW5kIG9mIHRo
ZSBzdXNwZW5kIG9mIHBjaWUgc3Vic3lzdGVtLg0KUmVzdW1lIGFuZCByZS1jb25maWd1cmUgb2Yg
cmMgY29udHJvbGxlciBzaG91bGQgYmUgZG9uZSBiZWZvcmUgdGhlIHJlc3VtZSBvZiBwY2llIHN1
YnN5c3RlbS4NClNvLCBzeXNjb3JlX29wcyBpcyB1c2VkIGhlcmUuDQo+IA0KPiA+ICBzdGF0aWMg
aW50IF9faW5pdCBpbXg2X3BjaWVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikg
IHsNCj4gPiAtCXN0cnVjdCBpbXg2X3BjaWUgKmlteDZfcGNpZTsNCj4gPiAgCXN0cnVjdCBwY2ll
X3BvcnQgKnBwOw0KPiA+ICsJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQgPQ0KPiA+
ICsJCQlvZl9tYXRjaF9kZXZpY2UoaW14Nl9wY2llX29mX21hdGNoLCAmcGRldi0+ZGV2KTsNCj4g
PiAgCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsNCj4gPiAgCXN0
cnVjdCByZXNvdXJjZSAqZGJpX2Jhc2U7DQo+ID4gIAlpbnQgcmV0Ow0KPiA+IEBAIC01NjAsNiAr
NjgwLDcgQEAgc3RhdGljIGludCBfX2luaXQgaW14Nl9wY2llX3Byb2JlKHN0cnVjdA0KPiA+IHBs
YXRmb3JtX2RldmljZSAqcGRldikNCj4gPg0KPiA+ICAJcHAgPSAmaW14Nl9wY2llLT5wcDsNCj4g
PiAgCXBwLT5kZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ICsJaW14Nl9wY2llLT5kYXRhID0gb2ZfaWQt
PmRhdGE7DQo+ID4NCj4gPiAgCS8qIEFkZGVkIGZvciBQQ0kgYWJvcnQgaGFuZGxpbmcgKi8NCj4g
PiAgCWhvb2tfZmF1bHRfY29kZSgxNiArIDYsIGlteDZxX3BjaWVfYWJvcnRfaGFuZGxlciwgU0lH
QlVTLCAwLCBAQA0KPiA+IC02MDMsOSArNzI0LDE5IEBAIHN0YXRpYyBpbnQgX19pbml0IGlteDZf
cGNpZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlDQo+ICpwZGV2KQ0KPiA+ICAJCXJldHVy
biBQVFJfRVJSKGlteDZfcGNpZS0+cGNpZSk7DQo+ID4gIAl9DQo+ID4NCj4gPiAtCS8qIEdyYWIg
R1BSIGNvbmZpZyByZWdpc3RlciByYW5nZSAqLw0KPiA+IC0JaW14Nl9wY2llLT5pb211eGNfZ3By
ID0NCj4gPiAtCQkgc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfY29tcGF0aWJsZSgiZnNsLGlteDZx
LWlvbXV4Yy1ncHIiKTsNCj4gPiArCWlmIChpc19pbXg2c3hfcGNpZShpbXg2X3BjaWUpKSB7DQo+
ID4gKwkJaW14Nl9wY2llLT5wY2llX3JlZ3VsYXRvciA9IGRldm1fcmVndWxhdG9yX2dldChwcC0+
ZGV2LCAicGNpZSIpOw0KPiA+ICsNCj4gPiArCQlpbXg2X3BjaWUtPmlvbXV4Y19ncHIgPQ0KPiA+
ICsJCQkgc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfY29tcGF0aWJsZQ0KPiA+ICsJCQkgKCJmc2ws
aW14NnN4LWlvbXV4Yy1ncHIiKTsNCj4gPiArCQlpbXg2X3BjaWUtPmdwY19pcHNfcmVnID0NCj4g
PiArCQkJIHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X2NvbXBhdGlibGUoImZzbCxpbXg2c3gtZ3Bj
Iik7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWlteDZfcGNpZS0+aW9tdXhjX2dwciA9DQo+ID4g
KwkJCXN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X2NvbXBhdGlibGUNCj4gPiArCQkJKCJmc2wsaW14
NnEtaW9tdXhjLWdwciIpOw0KPiA+ICsJfQ0KPiA+ICAJaWYgKElTX0VSUihpbXg2X3BjaWUtPmlv
bXV4Y19ncHIpKSB7DQo+ID4gIAkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGZpbmQg
aW9tdXhjIHJlZ2lzdGVyc1xuIik7DQo+ID4gIAkJcmV0dXJuIFBUUl9FUlIoaW14Nl9wY2llLT5p
b211eGNfZ3ByKTsgQEAgLTYxNiw2ICs3NDcsOSBAQCBzdGF0aWMNCj4gPiBpbnQgX19pbml0IGlt
eDZfcGNpZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ICAJCXJldHVy
biByZXQ7DQo+ID4NCj4gPiAgCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGlteDZfcGNpZSk7
DQo+ID4gKyNpZmRlZiBDT05GSUdfUE1fU0xFRVANCj4gPiArCXJlZ2lzdGVyX3N5c2NvcmVfb3Bz
KCZwY2lfaW14X3N5c2NvcmVfb3BzKTsNCj4gPiArI2VuZGlmDQo+ID4gIAlyZXR1cm4gMDsNCj4g
PiAgfQ0KPiA+DQo+ID4gQEAgLTYyNywxMiArNzYxLDYgQEAgc3RhdGljIHZvaWQgaW14Nl9wY2ll
X3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UNCj4gKnBkZXYpDQo+ID4gIAlpbXg2X3Bj
aWVfYXNzZXJ0X2NvcmVfcmVzZXQoJmlteDZfcGNpZS0+cHApOw0KPiA+ICB9DQo+ID4NCj4gPiAt
c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaW14Nl9wY2llX29mX21hdGNoW10gPSB7
DQo+ID4gLQl7IC5jb21wYXRpYmxlID0gImZzbCxpbXg2cS1wY2llIiwgfSwNCj4gPiAtCXt9LA0K
PiA+IC19Ow0KPiA+IC1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBpbXg2X3BjaWVfb2ZfbWF0Y2gp
Ow0KPiA+IC0NCj4gPiAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW14Nl9wY2llX2Ry
aXZlciA9IHsNCj4gPiAgCS5kcml2ZXIgPSB7DQo+ID4gIAkJLm5hbWUJPSAiaW14NnEtcGNpZSIs
DQo+IA0KPiAtLQ0KPiBQZW5ndXRyb25peCBlLksuICAgICAgICAgICAgIHwgTHVjYXMgU3RhY2gg
ICAgICAgICAgICAgICAgIHwNCj4gSW5kdXN0cmlhbCBMaW51eCBTb2x1dGlvbnMgICB8IGh0dHA6
Ly93d3cucGVuZ3V0cm9uaXguZGUvICB8DQoNCg0KQmVzdCBSZWdhcmRzDQpSaWNoYXJkIFpodQ0K
DQo=

^ permalink raw reply	[flat|nested] 31+ messages in thread

* RE: [PATCH v2 3/5] PCI: imx6: update dts and binding for imx6sx pcie
  2014-09-23 10:19   ` Lucas Stach
@ 2014-09-24  9:43     ` Hong-Xing.Zhu
  0 siblings, 0 replies; 31+ messages in thread
From: Hong-Xing.Zhu @ 2014-09-24  9:43 UTC (permalink / raw)
  To: Lucas Stach; +Cc: linux-pci-owner, linux-pci, Shengchao Guo, festevam, tharvey

DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEx1Y2FzIFN0YWNoIFttYWls
dG86bC5zdGFjaEBwZW5ndXRyb25peC5kZV0NCj4gU2VudDogVHVlc2RheSwgU2VwdGVtYmVyIDIz
LCAyMDE0IDY6MTkgUE0NCj4gVG86IFpodSBSaWNoYXJkLVI2NTAzNw0KPiBDYzogbGludXgtcGNp
LW93bmVyQHZnZXIua2VybmVsLm9yZzsgbGludXgtcGNpQHZnZXIua2VybmVsLm9yZzsgR3VvIFNo
YXduLQ0KPiBSNjUwNzM7IGZlc3RldmFtQGdtYWlsLmNvbTsgdGhhcnZleUBnYXRld29ya3MuY29t
DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjIgMy81XSBQQ0k6IGlteDY6IHVwZGF0ZSBkdHMgYW5k
IGJpbmRpbmcgZm9yIGlteDZzeCBwY2llDQo+IA0KPiBBbSBEaWVuc3RhZywgZGVuIDIzLjA5LjIw
MTQsIDEyOjExICswODAwIHNjaHJpZWIgUmljaGFyZCBaaHU6DQo+ID4gLSBpbXg2c3ggcGNpZSBo
YXMgaXRzIG93biBwb3dlciByZWd1bGF0b3IuDQo+ID4gYWRkIHRoZSBwY2llIHBvd2VyIHN1cHB5
IGludG8gZHRzIGFuZCBiaW5kaW5nLg0KPiA+IC0gZW5hYmxlIHBjaWUgb24gaW14NnN4IHNvYy4N
Cj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IFJpY2hhcmQgWmh1IDxyNjUwMzdAZnJlZXNjYWxlLmNv
bT4NCj4gPiAtLS0NCj4gPiAgLi4uL2RldmljZXRyZWUvYmluZGluZ3MvcGNpL2ZzbCxpbXg2cS1w
Y2llLnR4dCAgICAgfCAgNCArKy0NCj4gPiAgYXJjaC9hcm0vYm9vdC9kdHMvaW14NnN4LXNkYi5k
dHMgICAgICAgICAgICAgICAgICAgfCAxMyArKysrKysrKysNCj4gPiAgYXJjaC9hcm0vYm9vdC9k
dHMvaW14NnN4LmR0c2kgICAgICAgICAgICAgICAgICAgICAgfCAzMyArKysrKysrKysrKysrLS0t
LS0tDQo+IC0tLQ0KPiA+ICBhcmNoL2FybS9tYWNoLWlteC9LY29uZmlnICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAxICsNCj4gPiAgNCBmaWxlcyBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCsp
LCAxNSBkZWxldGlvbnMoLSkNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Rl
dmljZXRyZWUvYmluZGluZ3MvcGNpL2ZzbCxpbXg2cS1wY2llLnR4dA0KPiA+IGIvRG9jdW1lbnRh
dGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BjaS9mc2wsaW14NnEtcGNpZS50eHQNCj4gPiBpbmRl
eCA5NDU1ZmQwLi5kM2I1NzA0IDEwMDY0NA0KPiA+IC0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNl
dHJlZS9iaW5kaW5ncy9wY2kvZnNsLGlteDZxLXBjaWUudHh0DQo+ID4gKysrIGIvRG9jdW1lbnRh
dGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BjaS9mc2wsaW14NnEtcGNpZS50eHQNCj4gPiBAQCAt
NCw3ICs0LDcgQEAgVGhpcyBQQ0llIGhvc3QgY29udHJvbGxlciBpcyBiYXNlZCBvbiB0aGUgU3lu
b3BzaXMNCj4gPiBEZXNpZ253YXJlIFBDSWUgSVAgIGFuZCB0aHVzIGluaGVyaXRzIGFsbCB0aGUg
Y29tbW9uIHByb3BlcnRpZXMgZGVmaW5lZCBpbg0KPiBkZXNpZ253YXJlLXBjaWUudHh0Lg0KPiA+
DQo+ID4gIFJlcXVpcmVkIHByb3BlcnRpZXM6DQo+ID4gLS0gY29tcGF0aWJsZTogImZzbCxpbXg2
cS1wY2llIg0KPiA+ICstIGNvbXBhdGlibGU6ICJmc2wsaW14NnEtcGNpZSIsICJmc2wsaW14NnN4
LXBjaWUiDQo+ID4gIC0gcmVnOiBiYXNlIGFkZHJlc3NlIGFuZCBsZW5ndGggb2YgdGhlIHBjaWUg
Y29udHJvbGxlcg0KPiA+ICAtIGludGVycnVwdHM6IEEgbGlzdCBvZiBpbnRlcnJ1cHQgb3V0cHV0
cyBvZiB0aGUgY29udHJvbGxlci4gTXVzdCBjb250YWluDQo+IGFuDQo+ID4gICAgZW50cnkgZm9y
IGVhY2ggZW50cnkgaW4gdGhlIGludGVycnVwdC1uYW1lcyBwcm9wZXJ0eS4NCj4gPiBAQCAtMTIs
NiArMTIsNyBAQCBSZXF1aXJlZCBwcm9wZXJ0aWVzOg0KPiA+ICAJLSAibXNpIjogVGhlIGludGVy
cnVwdCB0aGF0IGlzIGFzc2VydGVkIHdoZW4gYW4gTVNJIGlzIHJlY2VpdmVkDQo+ID4gIC0gY2xv
Y2stbmFtZXM6IE11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgZW50cmllczoN
Cj4gPiAgCS0gInBjaWVfcGh5Ig0KPiA+ICstIHJlZ3VsYXRvcjogcmVndWxhdG9yIHVzZWQgYnkg
aW14NnN4IHBjaWUgbW9kdWxlLg0KPiA+DQo+IA0KPiBUaGVyZSBhcmUgbXVsdGlwbGUgaXNzdWVz
IHdpdGggdGhpcyBsaW5lOg0KPiBJdCBzaG91bGQgbW92ZSBpbnRvIGl0J3Mgb3duIHNlY3Rpb24g
dGhhdCBjbGVhcmx5IHN0YXRlcyB0aGF0IHRoaXMgaXMgYQ0KPiByZXF1aXJlZCBwcm9wZXJ0eSBv
bmx5IGZvciBjb21wYXRpYmxlIGZzbCxpbXg2c3gtcGNpZS4NCj4gSXQgZG9lc24ndCBtZW50aW9u
IHRoZSBhY3R1YWwgbmFtZSBvZiB0aGUgc3VwcGx5Lg0KPiBUaGUgbmFtZSB5b3UgYXJlIHVzaW5n
IGluIHRoZSBleGFtcGxlIGJlbG93IGlzIHRvbyBicm9hZDogd2hhdCBpcyB0aGlzIHN1cHBseQ0K
PiB1c2VkIGZvcj8gSXMgaXQgZmVlZGluZyB0aGUgd2hvbGUgUENJZSBwYXJ0aXRpb24sIG9yIGp1
c3QgdGhlIFBIWT8gSW4gZWl0aGVyDQo+IGNhc2UgaXQgc2hvdWxkIGJlIG5hbWVkIHNvbWV0aGlu
ZyBsaWtlIHBjaWUtY29yZS1zdXBwbHkgb3IgcGNpZS1waHktc3VwcGx5LiBXZQ0KPiBtYXkgbGF0
ZXIgYWRkIHJlZ3VsYXRvcnMgdGhhdCBjYW4gYmUgY2xlYXJseSBkaWZmZXJlbnRpYXRlZCBieSB0
aGVpciBuYW1lLg0KPiANCltSaWNoYXJkXXBjaWUtcGh5LXN1cHBseSBwcm9wZXJ0eSBpcyBtb3Zl
ZCBpbnRvICJQb3dlciBzdXBwbGllcyBmb3IgaW14NnN4OiIgc2VjdGlvbi4NClRoaXMgcmVndWxh
dG9yIGlzIGp1c3QgZmVlZGluZyBvbmx5IHRoZSBQSFkuIFdvdWxkIGJlIHJlbmFtZWQgdG8gcGNp
ZV9waHktc3VwcGx5IGxhdGVyLg0KDQoNCj4gPiAgRXhhbXBsZToNCj4gPg0KPiA+IEBAIC0zNSw0
ICszNiw1IEBAIEV4YW1wbGU6DQo+ID4gIAkJICAgICAgICAgICAgICAgIDwwIDAgMCA0ICZpbnRj
IEdJQ19TUEkgMTIwIElSUV9UWVBFX0xFVkVMX0hJR0g+Ow0KPiA+ICAJCWNsb2NrcyA9IDwmY2xr
cyAxNDQ+LCA8JmNsa3MgMjA2PiwgPCZjbGtzIDE4OT47DQo+ID4gIAkJY2xvY2stbmFtZXMgPSAi
cGNpZSIsICJwY2llX2J1cyIsICJwY2llX3BoeSI7DQo+ID4gKwkJcGNpZS1zdXBwbHkgPSA8JnJl
Z19wY2llPjsNCj4gPiAgCX07DQo+ID4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lt
eDZzeC1zZGIuZHRzDQo+ID4gYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c3gtc2RiLmR0cw0KPiA+
IGluZGV4IGEzOTgwZDkuLjI5NzY5MTMgMTAwNjQ0DQo+ID4gLS0tIGEvYXJjaC9hcm0vYm9vdC9k
dHMvaW14NnN4LXNkYi5kdHMNCj4gPiArKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c3gtc2Ri
LmR0cw0KPiA+IEBAIC0yNTEsNiArMjUxLDEzIEBADQo+ID4gIAl9Ow0KPiA+ICB9Ow0KPiA+DQo+
ID4gKyZwY2llIHsNCj4gPiArCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7DQo+ID4gKwlwaW5j
dHJsLTAgPSA8JnBpbmN0cmxfcGNpZT47DQo+ID4gKwlyZXNldC1ncGlvID0gPCZncGlvMiAwIDA+
Ow0KPiA+ICsJc3RhdHVzID0gIm9rYXkiOw0KPiA+ICt9Ow0KPiA+ICsNCj4gDQo+IFRoaXMgaXMg
YWRkaW5nIFBDSWUgc3VwcG9ydCB0byBhIHNpbmdsZSBib2FyZCBhbmQgaGFzIG5vdGhpbmcgdG8g
ZG8gd2l0aCB0aGUNCj4gYmluZGluZy4gU3BsaXQgb3V0IGludG8gYW5vdGhlciBwYXRjaC4NCltS
aWNoYXJkXSBPay4NCj4gDQo+ID4gICZzc2kyIHsNCj4gPiAgCXN0YXR1cyA9ICJva2F5IjsNCj4g
PiAgfTsNCj4gPiBAQCAtMzY1LDYgKzM3MiwxMiBAQA0KPiA+ICAJCQk+Ow0KPiA+ICAJCX07DQo+
ID4NCj4gPiArCQlwaW5jdHJsX3BjaWU6IHBjaWVncnAgew0KPiA+ICsJCQlmc2wscGlucyA9IDwN
Cj4gPiArCQkJCU1YNlNYX1BBRF9FTkVUMV9DT0xfX0dQSU8yX0lPXzAgMHgxNzA1OQ0KPiA+ICsJ
CQk+Ow0KPiA+ICsJCX07DQo+ID4gKw0KPiA+ICAJCXBpbmN0cmxfdmNjX3NkMzogdmNjc2QzZ3Jw
IHsNCj4gPiAgCQkJZnNsLHBpbnMgPSA8DQo+ID4gIAkJCQlNWDZTWF9QQURfS0VZX0NPTDFfX0dQ
SU8yX0lPXzExCQkweDE3MDU5DQo+ID4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lt
eDZzeC5kdHNpDQo+ID4gYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c3guZHRzaSBpbmRleCBmNGI5
ZGE2Li40OTExMTYwIDEwMDY0NA0KPiA+IC0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzeC5k
dHNpDQo+ID4gKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnN4LmR0c2kNCj4gPiBAQCAtNjg5
LDkgKzY4OSwxMSBAQA0KPiA+ICAJCQl9Ow0KPiA+DQo+ID4gIAkJCWdwYzogZ3BjQDAyMGRjMDAw
IHsNCj4gPiAtCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDZzeC1ncGMiLCAiZnNsLGlteDZxLWdw
YyI7DQo+ID4gKwkJCQljb21wYXRpYmxlID0gImZzbCxpbXg2c3gtZ3BjIiwNCj4gPiArCQkJCQkg
ICAgICJmc2wsaW14NnEtZ3BjIiwgInN5c2NvbiI7DQo+IA0KPiBUaGlzIGhhcyBub3RoaW5nIHRv
IGRvIHdpdGggdGhlIGlteDZzeCBiaW5kaW5nIGNoYW5nZS4gU3BsaXQgb3V0IGludG8gYW5vdGhl
cg0KPiBwYXRjaCB3aXRoIG93biBqdXN0aWZpY2F0aW9uLg0KW1JpY2hhcmRdIE9rLg0KPiANCj4g
PiAgCQkJCXJlZyA9IDwweDAyMGRjMDAwIDB4NDAwMD47DQo+ID4gIAkJCQlpbnRlcnJ1cHRzID0g
PEdJQ19TUEkgODkgSVJRX1RZUEVfTEVWRUxfSElHSD47DQo+ID4gKwkJCQlwY2llLXN1cHBseSA9
IDwmcmVnX3BjaWU+Ow0KPiANCj4gVGhpcyBzaG91bGRuJ3QgYmUgaGVyZS4NCltSaWNoYXJkXSB3
b3VsZCBiZSByZW1vdmVkLg0KPiANCj4gPiAgCQkJfTsNCj4gPg0KPiA+ICAJCQlpb211eGM6IGlv
bXV4Y0AwMjBlMDAwMCB7DQo+ID4gQEAgLTExODgsMjAgKzExOTAsMjMgQEANCj4gPiAgCQkJI2Fk
ZHJlc3MtY2VsbHMgPSA8Mz47DQo+ID4gIAkJCSNzaXplLWNlbGxzID0gPDI+Ow0KPiA+ICAJCQlk
ZXZpY2VfdHlwZSA9ICJwY2kiOw0KPiA+IC0JCQkJICAvKiBjb25maWd1cmF0aW9uIHNwYWNlICov
DQo+ID4gLQkJCXJhbmdlcyA9IDwweDAwMDAwODAwIDAgMHgwOGYwMDAwMCAweDA4ZjAwMDAwIDAg
MHgwMDA4MDAwMA0KPiA+IC0JCQkJICAvKiBkb3duc3RyZWFtIEkvTyAqLw0KPiA+IC0JCQkJICAw
eDgxMDAwMDAwIDAgMCAgICAgICAgICAweDA4ZjgwMDAwIDAgMHgwMDAxMDAwMA0KPiA+IC0JCQkJ
ICAvKiBub24tcHJlZmV0Y2hhYmxlIG1lbW9yeSAqLw0KPiA+IC0JCQkJICAweDgyMDAwMDAwIDAg
MHgwODAwMDAwMCAweDA4MDAwMDAwIDAgMHgwMGYwMDAwMD47DQo+ID4gKwkJCXJhbmdlcyA9IDww
eDAwMDAwODAwIDAgMHgwMWYwMDAwMCAweDA4ZjAwMDAwIDAgMHgwMDA4MDAwMCAvKg0KPiBjb25m
aWd1cmF0aW9uIHNwYWNlICovDQo+ID4gKwkJCQkgIDB4ODEwMDAwMDAgMCAwICAgICAgICAgIDB4
MDhmODAwMDAgMCAweDAwMDEwMDAwIC8qDQo+IGRvd25zdHJlYW0gSS9PICovDQo+ID4gKwkJCQkg
IDB4ODIwMDAwMDAgMCAweDAxMDAwMDAwIDB4MDgwMDAwMDAgMCAweDAwZjAwMDAwPjsgLyoNCj4g
PiArbm9uLXByZWZldGNoYWJsZSBtZW1vcnkgKi8NCj4gDQo+IFlvdSBhcmUgY2hhbmdpbmcgdGhl
IGNvbmZpZ3VyYXRpb24gc3BhY2UgaGVyZS4gV2FzIGl0IHdyb25nIGJlZm9yZT8gSWYgc28gdGhp
cw0KPiBuZWVkcyB0byBiZSBtZW50aW9uZWQgaW4gdGhlIGNvbW1pdCBtZXNzYWdlLiBBbHNvIGNv
bmZpZyBzcGFjZSBhc3NpZ25lZCBpbg0KPiByYW5nZXMgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIGFk
ZCBpdCB0byB0aGUgcmVncyBwcm9wZXJ0eSBhcyBkb25lIG9uIGlteDZxLg0KPiANCltSaWNoYXJk
XSBObywgaXQgaXNuJ3Qgd3JvbmcgYmVmb3JlLiBNeSBzcGVsbC1taXN0YWtlcyBoZXJlLg0KV291
bGQgYmUgY2hhbmdlZCBsYXRlci4NClRoZXJlIGFyZSBkaWZmZXJlbmNlcyBvZiB0aGUgbWVtb3J5
IHJhbmdlcw0KIG9mIHBjaWUgY2ZnL2lvL21lbSBiZXR3ZWVuIGlteDZzeCBhbmQgaW14NnFkbC4N
Ck9uIGlteDZxLCB0aGUgb2Zmc2V0IGlzIDB4MDF4eF94eHh4LCBvbiBpbXg2c3gsIHRoZSBvZmZz
ZXQgaXMgMHgwOHh4XzAwMDAuDQpUaGUgb3RoZXJzIGFyZSBzYW1lIHRvIGVhY2ggb3RoZXIuDQoN
Cj4gPiAgCQkJbnVtLWxhbmVzID0gPDE+Ow0KPiA+IC0JCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkg
MTIzIElSUV9UWVBFX0xFVkVMX0hJR0g+Ow0KPiA+IC0JCQljbG9ja3MgPSA8JmNsa3MgSU1YNlNY
X0NMS19QQ0lFX1JFRl8xMjVNPiwNCj4gPiAtCQkJCSA8JmNsa3MgSU1YNlNYX0NMS19QQ0lFX0FY
ST4sDQo+ID4gLQkJCQkgPCZjbGtzIElNWDZTWF9DTEtfTFZEUzFfT1VUPiwNCj4gPiAtCQkJCSA8
JmNsa3MgSU1YNlNYX0NMS19ESVNQTEFZX0FYST47DQo+ID4gLQkJCWNsb2NrLW5hbWVzID0gInBj
aWVfcmVmXzEyNW0iLCAicGNpZV9heGkiLA0KPiA+IC0JCQkJICAgICAgImx2ZHNfZ2F0ZSIsICJk
aXNwbGF5X2F4aSI7DQo+ID4gKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMjAgSVJRX1RZUEVf
TEVWRUxfSElHSD47DQo+IA0KPiBBZ2FpbiwgY2hhbmdpbmcgc29tZXRoaW5nIHdpdGhvdXQgbWVu
dGlvbmluZyBpZiBpdCB3YXMgd3JvbmcgYmVmb3JlLg0KW1JpY2hhcmRdSXQncyBub3Qgd3Jvbmcg
YmVmb3JlLCBqdXN0IGFsaWduIHdpdGggaW14NnFkbCBpbiAzLjE3LXJjMiBrZXJuZWwuDQo+IA0K
PiA+ICsJCQlpbnRlcnJ1cHQtbmFtZXMgPSAibXNpIjsNCj4gPiArCQkJI2ludGVycnVwdC1jZWxs
cyA9IDwxPjsNCj4gPiArCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDAgMCAwIDB4Nz47DQo+ID4g
KwkJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmaW50YyBHSUNfU1BJIDEyMyBJUlFfVFlQRV9M
RVZFTF9ISUdIPiwNCj4gPiArCQkJICAgICAgICAgICAgICAgIDwwIDAgMCAyICZpbnRjIEdJQ19T
UEkgMTIyIElSUV9UWVBFX0xFVkVMX0hJR0g+LA0KPiA+ICsJCQkgICAgICAgICAgICAgICAgPDAg
MCAwIDMgJmludGMgR0lDX1NQSSAxMjEgSVJRX1RZUEVfTEVWRUxfSElHSD4sDQo+ID4gKwkJCSAg
ICAgICAgICAgICAgICA8MCAwIDAgNCAmaW50YyBHSUNfU1BJIDEyMCBJUlFfVFlQRV9MRVZFTF9I
SUdIPjsNCj4gPiArCQkJY2xvY2tzID0gPCZjbGtzIElNWDZTWF9DTEtfUENJRV9BWEk+LA0KPiA+
ICsJCQkJIDwmY2xrcyBJTVg2U1hfQ0xLX0RJU1BMQVlfQVhJPiwNCj4gPiArCQkJCSA8JmNsa3Mg
SU1YNlNYX0NMS19MVkRTMV9PVVQ+Ow0KPiA+ICsJCQljbG9jay1uYW1lcyA9ICJwY2llIiwgInBj
aWVfcGh5IiwgInBjaWVfYnVzIjsNCj4gDQo+IElzIHRoaXMgZGlzcGxheV9heGkgY2xvY2sgcmVh
bGx5IGZlZWRpbmcgdGhlIFBIWSwgb3IgaXMgaXQganVzdCBhIHBhcmVudCBvZg0KPiBwY2llX2F4
aSB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIHBjaWVfYXhpIHRvIHdvcms/IEluIHRoYXQg
Y2FzZSB3ZSBuZWVkDQo+IHRvIG1ha2UgcGNpZV9waHkgY2xvY2sgb3B0aW9uYWwgZm9yIGlteDZz
eCBhbmQgbW9kZWwgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuDQo+IHBjaWVfYXhpIGFuZCBkaXNw
bGF5X2F4aSBpbiB0aGUgY2xvY2sgZHJpdmVyLg0KPiANCj4gSSB3aWxsIG5vdCBhbGxvdyB0aGUg
ZW5hYmxpbmcgb2YgY2xvY2tzIG5vdCBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBQQ0llIGNvcmUN
Cj4gdG8gY3JlZXAgYmFjayBpbnRvIHRoaXMgZHJpdmVyLiBJdCBoYXMgY29zdCBtZSBxdWl0ZSBz
b21lIHRpbWUgYW5kIGEgYmluZGluZw0KPiBjaGFuZ2UgdG8gY29ycmVjdCB0aGlzIGZvciBpbXg2
cS4NCltSaWNoYXJkXUNvbmZpcm1lZCB0aGF0IHRoZSBkaXNwbGF5X2F4aSBpcyBub3QgcmVsYXRl
ZCB0byBwY2llIGNsay4NCk9ubHkgdGhlIGRpc3BheV9wb2RmIGlzIHJlcXVpcmVkIHRvIGJlIG9w
ZW5lZCBmb3IgcGNpZV9heGkuDQpBbmQgaXQgaXMgY29uc3RydWN0ZWQgYWxyZWFkeSBpbiBhcmNo
L2FybS9tYWNoLWlteC9jbGstaW14NnN4LmMuDQpJJ20gZ2xhZCB0aGF0IHlvdSBjb25zaXN0IHRv
IG1ha2UgY29tbWVudHMgb24gdGhlIHdyb25nLXVzYWdlIG9mIGRpc3BsYXlfYXhpIGNsb2NrLg0K
VGhhbmtzLg0KDQo+IA0KPiA+ICsJCQlwY2llLXN1cHBseSA9IDwmcmVnX3BjaWU+Ow0KPiA+ICAJ
CQlzdGF0dXMgPSAiZGlzYWJsZWQiOw0KPiA+ICAJCX07DQo+ID4gIAl9Ow0KPiA+IGRpZmYgLS1n
aXQgYS9hcmNoL2FybS9tYWNoLWlteC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1pbXgvS2NvbmZp
Zw0KPiA+IGluZGV4IGJlOWE1MWEuLjBhMDU1ZjAgMTAwNjQ0DQo+ID4gLS0tIGEvYXJjaC9hcm0v
bWFjaC1pbXgvS2NvbmZpZw0KPiA+ICsrKyBiL2FyY2gvYXJtL21hY2gtaW14L0tjb25maWcNCj4g
PiBAQCAtNzE4LDYgKzcxOCw3IEBAIGNvbmZpZyBTT0NfSU1YNlNMDQo+ID4NCj4gPiAgY29uZmln
IFNPQ19JTVg2U1gNCj4gPiAgCWJvb2wgImkuTVg2IFNvbG9YIHN1cHBvcnQiDQo+ID4gKwlzZWxl
Y3QgUENJX0RPTUFJTlMgaWYgUENJDQo+ID4gIAlzZWxlY3QgUElOQ1RSTF9JTVg2U1gNCj4gPiAg
CXNlbGVjdCBTT0NfSU1YNg0KPiA+DQo+IFRoaXMgY2hhbmdlIGlzIGNvbXBsZXRlbHkgdW5yZWxh
dGVkLiBBbHNvIEkgZG9uJ3Qgc2VlIHdoeSB5b3UgbmVlZCB0aGlzLg0KPiBJZiB5b3UgbmVlZCB0
aGlzIGZvciBpbXg2c3ggcGxlYXNlIGxvb2sgYXQgdGhlIGxpbnV4LXBjaSBNTCwgUGhpbCBFZHdv
cnRoeQ0KPiBwb3N0ZWQgYSBwYXRjaCB0byBlbmFibGUgdGhpcyBmb3IgYWxsIEFSTSBkZXZpY2Vz
IGFuZCBJIHdvdWxkIGxpa2UgdG8gc2VlIHlvdXINCj4gb3B0aW9uIHRoZXJlLg0KW1JpY2hhcmRd
IFdvdWxkIGJlIHJlbW92ZWQuDQo+IA0KPiByZWdhcmRzLA0KPiBMdWNhcw0KPiANCj4gLS0NCj4g
UGVuZ3V0cm9uaXggZS5LLiAgICAgICAgICAgICB8IEx1Y2FzIFN0YWNoICAgICAgICAgICAgICAg
ICB8DQo+IEluZHVzdHJpYWwgTGludXggU29sdXRpb25zICAgfCBodHRwOi8vd3d3LnBlbmd1dHJv
bml4LmRlLyAgfA0KDQoNCkJlc3QgUmVnYXJkcw0KUmljaGFyZCBaaHUNCg0K

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support
  2014-09-24  7:09     ` Hong-Xing.Zhu
@ 2014-09-24  9:46       ` Lucas Stach
  2014-09-24 10:15         ` Hong-Xing.Zhu
  0 siblings, 1 reply; 31+ messages in thread
From: Lucas Stach @ 2014-09-24  9:46 UTC (permalink / raw)
  To: Hong-Xing.Zhu
  Cc: linux-pci-owner, linux-pci, Shengchao Guo, festevam, tharvey

Am Mittwoch, den 24.09.2014, 07:09 +0000 schrieb
Hong-Xing.Zhu@freescale.com:

[...]

> > > +	if (is_imx6sx_pcie(imx6_pcie)) {
> > > +		/* Force PCIe PHY reset */
> > > +		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR5,
> > > +				IMX6SX_GPR5_PCIE_BTNRST,
> > > +				IMX6SX_GPR5_PCIE_BTNRST);
> > > +
> > > +		regmap_update_bits(imx6_pcie->gpc_ips_reg, 0, 1 << 7, 1 << 7);
> > 
> > Magic values here. Also this is the only time we need to access gpc_ips_reg.
> > So if this is a prerequisite to enabling the ANATOP regulator, I would argue
> > it should be done in the regulator driver.
> [Richard]Magic values would be replaced.
> Yes, this is the only time we need to access gpc_ips_reg.
> It's a little complex to add the GPC manipulations in
>  ANATOP/regulator framework/driver codes.
> Since ANATOP regulator is common framework and driver, it's hard to manipulate
> GPC bits in ANATOP/regulator driver.
> In order to be easier, I add the GPC bits manipulation here directly.
> How do you think about that?

I still think it would be better to handle this in the regulator driver.
But as I don't yet have a reference manual for the imx6sx: can you
please describe what this bit does exactly? Maybe this helps me to
understand where the call should be placed.


> > 
> > > +		/* Power up PCIe PHY, ANATOP_REG_CORE offset 0x140, bit13-9 */
> > 
> > Oh so this is actually a PHY regulator, not feeding the whole core, but just
> > the PHY? You could remove the comment it is clear what you are doing from the
> > code and the offsets are of no interest in the PCIe driver.
> [Richard] yes, it is a PHY regulator, not used to feed the whole core.

Ok, so I expect this to be called "pcie-phy-supply" in the binding.

> > 
> > > +		regulator_set_voltage(imx6_pcie->pcie_regulator,
> > > +				1100000, 1100000);
> > > +		ret = regulator_enable(imx6_pcie->pcie_regulator);
> > > +		if (ret)
> > > +			dev_info(pp->dev, "failed to enable pcie regulator.\n");
> > > +		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
> > > +				IMX6SX_GPR12_RX_EQ_MASK, IMX6SX_GPR12_RX_EQ_2);
> > > +	}
> > >
> > >  	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
> > > -			IMX6Q_GPR12_PCIE_CTL_2, 0 << 10);
> > > +			IMX6Q_GPR12_PCIE_CTL_2,
> > > +			IMX6Q_GPR12_PCIE_CTL_2_CLR);
> > >
> > >  	/* configure constant input signal to the pcie ctrl and phy */
> > >  	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
> > >  			IMX6Q_GPR12_DEVICE_TYPE, PCI_EXP_TYPE_ROOT_PORT << 12);
> > >  	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
> > > -			IMX6Q_GPR12_LOS_LEVEL, 9 << 4);
> > > +			IMX6Q_GPR12_LOS_LEVEL, IMX6Q_GPR12_LOS_LEVEL_9);
> > >
> > >  	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8,
> > >  			IMX6Q_GPR8_TX_DEEMPH_GEN1, 0 << 0); @@ -370,7 +435,8 @@ static

[...]

> > > +static void pci_imx_resume(void)
> > > +{
> > > +	struct pcie_port *pp = &imx6_pcie->pp;
> > > +
> > > +	if (is_imx6sx_pcie(imx6_pcie)) {
> > > +		/* reset iMX6SX PCIe */
> > > +		regmap_update_bits(imx6_pcie->iomuxc_gpr,
> > > +				IOMUXC_GPR5, BIT(18), 1 << 18);
> > > +
> > > +		regmap_update_bits(imx6_pcie->iomuxc_gpr,
> > > +				IOMUXC_GPR5, BIT(18), 0 << 18);
> > > +
> > 
> > Again magic numbers here. Please add defines for those.
> [Richard] Ok.
> > 
> > > +		/*
> > > +		 * controller maybe turn off, re-configure again
> > > +		 * Set the CLASS_REV of RC CFG header to
> > > +		 * PCI_CLASS_BRIDGE_PCI
> > > +		 */
> > > +		writel(readl(pp->dbi_base + PCI_CLASS_REVISION)
> > > +			| (PCI_CLASS_BRIDGE_PCI << 16),
> > > +			pp->dbi_base + PCI_CLASS_REVISION);
> > > +
> > 
> > Can't we just move the call to set this from dw_pcie_host_init() to
> > dw_pcie_setup_rc() so we don't need to do this ourselves? It seems to be the
> > more logical change.
> [Richard]dw_pcie_host_init contains the whole re-initialization and re-link-up
>  again of the pcie module. It's not proper to re-call dw_pcie_host_init().
> I find that the msi init should be re-configured again after resume back.
> So, the definitions of the "PCIE_MSI_ADDR_LO" and "PCIE_MSI_ADDR_HI" would be used
> here.
> 

I seems you misunderstood my comment here. I'm not saying we should call
dw_pcie_host_init() here, which would be clearly wrong.

What I'm saying is that the call to set up the CLASS_REV register is
currently done in dw_pcie_host_init(), but from a quick look at the code
I think it is safe to move this call to dw_pcie_setup_rc().
If you move it to this function there would no need to do it explicitly
from this resume hook again.

> BTW, do you know why the "/* Synopsis specific PCIE configuration registers */"
> is not defined in pcie-designware.h, but in pcie-designware.c?
> 

Most probably because the setup for the DW PCIe core should be handled
through pcie-designware.c and not through the individual SoC drivers.

> > 
> > > +		dw_pcie_setup_rc(pp);
> > > +	}
> > > +}
> > > +
> > > +static struct syscore_ops pci_imx_syscore_ops = {
> > > +	.suspend = pci_imx_suspend,
> > > +	.resume = pci_imx_resume,
> > > +};
> > > +#endif
> > > +
> > 
> > Why does this need to be syscore_ops instead of dev_pm_ops?
> [Richard] PM_TURN_OFF msg should be sent out at the end of the suspend of pcie subsystem.
> Resume and re-configure of rc controller should be done before the resume of pcie subsystem.
> So, syscore_ops is used here.

Ok, makes sense.

Regards,
Lucas

-- 
Pengutronix e.K.             | Lucas Stach                 |
Industrial Linux Solutions   | http://www.pengutronix.de/  |


^ permalink raw reply	[flat|nested] 31+ messages in thread

* RE: [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support
  2014-09-24  9:46       ` Lucas Stach
@ 2014-09-24 10:15         ` Hong-Xing.Zhu
  0 siblings, 0 replies; 31+ messages in thread
From: Hong-Xing.Zhu @ 2014-09-24 10:15 UTC (permalink / raw)
  To: Lucas Stach; +Cc: linux-pci-owner, linux-pci, Shengchao Guo, festevam, tharvey

DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEx1Y2FzIFN0YWNoIFttYWls
dG86bC5zdGFjaEBwZW5ndXRyb25peC5kZV0NCj4gU2VudDogV2VkbmVzZGF5LCBTZXB0ZW1iZXIg
MjQsIDIwMTQgNTo0NiBQTQ0KPiBUbzogWmh1IFJpY2hhcmQtUjY1MDM3DQo+IENjOiBsaW51eC1w
Y2ktb3duZXJAdmdlci5rZXJuZWwub3JnOyBsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnOyBHdW8g
U2hhd24tDQo+IFI2NTA3MzsgZmVzdGV2YW1AZ21haWwuY29tOyB0aGFydmV5QGdhdGV3b3Jrcy5j
b20NCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2MiA1LzVdIFBDSTogaW14NjogYWRkIGlteDZzeCBw
Y2llIHN1cHBvcnQNCj4gDQo+IEFtIE1pdHR3b2NoLCBkZW4gMjQuMDkuMjAxNCwgMDc6MDkgKzAw
MDAgc2NocmllYg0KPiBIb25nLVhpbmcuWmh1QGZyZWVzY2FsZS5jb206DQo+IA0KPiBbLi4uXQ0K
PiANCj4gPiA+ID4gKwlpZiAoaXNfaW14NnN4X3BjaWUoaW14Nl9wY2llKSkgew0KPiA+ID4gPiAr
CQkvKiBGb3JjZSBQQ0llIFBIWSByZXNldCAqLw0KPiA+ID4gPiArCQlyZWdtYXBfdXBkYXRlX2Jp
dHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENfR1BSNSwNCj4gPiA+ID4gKwkJCQlJTVg2
U1hfR1BSNV9QQ0lFX0JUTlJTVCwNCj4gPiA+ID4gKwkJCQlJTVg2U1hfR1BSNV9QQ0lFX0JUTlJT
VCk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+
Z3BjX2lwc19yZWcsIDAsIDEgPDwgNywgMSA8PCA3KTsNCj4gPiA+DQo+ID4gPiBNYWdpYyB2YWx1
ZXMgaGVyZS4gQWxzbyB0aGlzIGlzIHRoZSBvbmx5IHRpbWUgd2UgbmVlZCB0byBhY2Nlc3MNCj4g
Z3BjX2lwc19yZWcuDQo+ID4gPiBTbyBpZiB0aGlzIGlzIGEgcHJlcmVxdWlzaXRlIHRvIGVuYWJs
aW5nIHRoZSBBTkFUT1AgcmVndWxhdG9yLCBJDQo+ID4gPiB3b3VsZCBhcmd1ZSBpdCBzaG91bGQg
YmUgZG9uZSBpbiB0aGUgcmVndWxhdG9yIGRyaXZlci4NCj4gPiBbUmljaGFyZF1NYWdpYyB2YWx1
ZXMgd291bGQgYmUgcmVwbGFjZWQuDQo+ID4gWWVzLCB0aGlzIGlzIHRoZSBvbmx5IHRpbWUgd2Ug
bmVlZCB0byBhY2Nlc3MgZ3BjX2lwc19yZWcuDQo+ID4gSXQncyBhIGxpdHRsZSBjb21wbGV4IHRv
IGFkZCB0aGUgR1BDIG1hbmlwdWxhdGlvbnMgaW4NCj4gPiBBTkFUT1AvcmVndWxhdG9yIGZyYW1l
d29yay9kcml2ZXIgY29kZXMuDQo+ID4gU2luY2UgQU5BVE9QIHJlZ3VsYXRvciBpcyBjb21tb24g
ZnJhbWV3b3JrIGFuZCBkcml2ZXIsIGl0J3MgaGFyZCB0bw0KPiA+IG1hbmlwdWxhdGUgR1BDIGJp
dHMgaW4gQU5BVE9QL3JlZ3VsYXRvciBkcml2ZXIuDQo+ID4gSW4gb3JkZXIgdG8gYmUgZWFzaWVy
LCBJIGFkZCB0aGUgR1BDIGJpdHMgbWFuaXB1bGF0aW9uIGhlcmUgZGlyZWN0bHkuDQo+ID4gSG93
IGRvIHlvdSB0aGluayBhYm91dCB0aGF0Pw0KPiANCj4gSSBzdGlsbCB0aGluayBpdCB3b3VsZCBi
ZSBiZXR0ZXIgdG8gaGFuZGxlIHRoaXMgaW4gdGhlIHJlZ3VsYXRvciBkcml2ZXIuDQo+IEJ1dCBh
cyBJIGRvbid0IHlldCBoYXZlIGEgcmVmZXJlbmNlIG1hbnVhbCBmb3IgdGhlIGlteDZzeDogY2Fu
IHlvdSBwbGVhc2UNCj4gZGVzY3JpYmUgd2hhdCB0aGlzIGJpdCBkb2VzIGV4YWN0bHk/IE1heWJl
IHRoaXMgaGVscHMgbWUgdG8gdW5kZXJzdGFuZCB3aGVyZQ0KPiB0aGUgY2FsbCBzaG91bGQgYmUg
cGxhY2VkLg0KW1JpY2hhcmRdIEhpIEx1Y2FzOg0KSGVyZSBpdCBpczoNCkJpdCA3IG9mIEdQQyBJ
bnRlcmZhY2UgY29udHJvbCByZWdpc3RlciAoR1BDX0NOVFIpLCBsb2NhdGVkIGluIEdlbmVyYWwg
UG93ZXIgQ29udHJvbGxlcg0KDQpQQ0lFX1BIWV9QVVBfUkVRDQoNClBDSUUgUEhZIHBvd2VyIHVw
IHJlcXVlc3QuIFNlbGYtY2xlYXIgYml0Lg0KTk9URTogU29mdHdhcmUgbWF5IGRpcmVjdGx5IGNv
bnRyb2wgZGlzcGxheSBwb3dlciBnYXRlIGFuZCB1dGlsaXplIGhhcmR3YXJlIGNvbnRyb2wgZm9y
IHJlc2V0IHNlcXVlbmNlLg0KMCDigJQgTm8gUmVxdWVzdA0KMSDigJQgUmVxdWVzdCBwb3dlciB1
cCBzZXF1ZW5jZQ0KPiANCj4gDQo+ID4gPg0KPiA+ID4gPiArCQkvKiBQb3dlciB1cCBQQ0llIFBI
WSwgQU5BVE9QX1JFR19DT1JFIG9mZnNldCAweDE0MCwgYml0MTMtOSAqLw0KPiA+ID4NCj4gPiA+
IE9oIHNvIHRoaXMgaXMgYWN0dWFsbHkgYSBQSFkgcmVndWxhdG9yLCBub3QgZmVlZGluZyB0aGUg
d2hvbGUgY29yZSwNCj4gPiA+IGJ1dCBqdXN0IHRoZSBQSFk/IFlvdSBjb3VsZCByZW1vdmUgdGhl
IGNvbW1lbnQgaXQgaXMgY2xlYXIgd2hhdCB5b3UNCj4gPiA+IGFyZSBkb2luZyBmcm9tIHRoZSBj
b2RlIGFuZCB0aGUgb2Zmc2V0cyBhcmUgb2Ygbm8gaW50ZXJlc3QgaW4gdGhlIFBDSWUNCj4gZHJp
dmVyLg0KPiA+IFtSaWNoYXJkXSB5ZXMsIGl0IGlzIGEgUEhZIHJlZ3VsYXRvciwgbm90IHVzZWQg
dG8gZmVlZCB0aGUgd2hvbGUgY29yZS4NCj4gDQo+IE9rLCBzbyBJIGV4cGVjdCB0aGlzIHRvIGJl
IGNhbGxlZCAicGNpZS1waHktc3VwcGx5IiBpbiB0aGUgYmluZGluZy4NCltSaWNoYXJkXSBUaGFu
a3MuDQo+IA0KPiA+ID4NCj4gPiA+ID4gKwkJcmVndWxhdG9yX3NldF92b2x0YWdlKGlteDZfcGNp
ZS0+cGNpZV9yZWd1bGF0b3IsDQo+ID4gPiA+ICsJCQkJMTEwMDAwMCwgMTEwMDAwMCk7DQo+ID4g
PiA+ICsJCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoaW14Nl9wY2llLT5wY2llX3JlZ3VsYXRvcik7
DQo+ID4gPiA+ICsJCWlmIChyZXQpDQo+ID4gPiA+ICsJCQlkZXZfaW5mbyhwcC0+ZGV2LCAiZmFp
bGVkIHRvIGVuYWJsZSBwY2llIHJlZ3VsYXRvci5cbiIpOw0KPiA+ID4gPiArCQlyZWdtYXBfdXBk
YXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENfR1BSMTIsDQo+ID4gPiA+ICsJ
CQkJSU1YNlNYX0dQUjEyX1JYX0VRX01BU0ssIElNWDZTWF9HUFIxMl9SWF9FUV8yKTsNCj4gPiA+
ID4gKwl9DQo+ID4gPiA+DQo+ID4gPiA+ICAJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+
aW9tdXhjX2dwciwgSU9NVVhDX0dQUjEyLA0KPiA+ID4gPiAtCQkJSU1YNlFfR1BSMTJfUENJRV9D
VExfMiwgMCA8PCAxMCk7DQo+ID4gPiA+ICsJCQlJTVg2UV9HUFIxMl9QQ0lFX0NUTF8yLA0KPiA+
ID4gPiArCQkJSU1YNlFfR1BSMTJfUENJRV9DVExfMl9DTFIpOw0KPiA+ID4gPg0KPiA+ID4gPiAg
CS8qIGNvbmZpZ3VyZSBjb25zdGFudCBpbnB1dCBzaWduYWwgdG8gdGhlIHBjaWUgY3RybCBhbmQg
cGh5ICovDQo+ID4gPiA+ICAJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dw
ciwgSU9NVVhDX0dQUjEyLA0KPiA+ID4gPiAgCQkJSU1YNlFfR1BSMTJfREVWSUNFX1RZUEUsIFBD
SV9FWFBfVFlQRV9ST09UX1BPUlQgPDwgMTIpOw0KPiA+ID4gPiAgCXJlZ21hcF91cGRhdGVfYml0
cyhpbXg2X3BjaWUtPmlvbXV4Y19ncHIsIElPTVVYQ19HUFIxMiwNCj4gPiA+ID4gLQkJCUlNWDZR
X0dQUjEyX0xPU19MRVZFTCwgOSA8PCA0KTsNCj4gPiA+ID4gKwkJCUlNWDZRX0dQUjEyX0xPU19M
RVZFTCwgSU1YNlFfR1BSMTJfTE9TX0xFVkVMXzkpOw0KPiA+ID4gPg0KPiA+ID4gPiAgCXJlZ21h
cF91cGRhdGVfYml0cyhpbXg2X3BjaWUtPmlvbXV4Y19ncHIsIElPTVVYQ19HUFI4LA0KPiA+ID4g
PiAgCQkJSU1YNlFfR1BSOF9UWF9ERUVNUEhfR0VOMSwgMCA8PCAwKTsgQEAgLTM3MCw3ICs0MzUs
OCBAQA0KPiBzdGF0aWMNCj4gDQo+IFsuLi5dDQo+IA0KPiA+ID4gPiArc3RhdGljIHZvaWQgcGNp
X2lteF9yZXN1bWUodm9pZCkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKwlzdHJ1Y3QgcGNpZV9wb3J0
ICpwcCA9ICZpbXg2X3BjaWUtPnBwOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJaWYgKGlzX2lteDZz
eF9wY2llKGlteDZfcGNpZSkpIHsNCj4gPiA+ID4gKwkJLyogcmVzZXQgaU1YNlNYIFBDSWUgKi8N
Cj4gPiA+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwNCj4g
PiA+ID4gKwkJCQlJT01VWENfR1BSNSwgQklUKDE4KSwgMSA8PCAxOCk7DQo+ID4gPiA+ICsNCj4g
PiA+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwNCj4gPiA+
ID4gKwkJCQlJT01VWENfR1BSNSwgQklUKDE4KSwgMCA8PCAxOCk7DQo+ID4gPiA+ICsNCj4gPiA+
DQo+ID4gPiBBZ2FpbiBtYWdpYyBudW1iZXJzIGhlcmUuIFBsZWFzZSBhZGQgZGVmaW5lcyBmb3Ig
dGhvc2UuDQo+ID4gW1JpY2hhcmRdIE9rLg0KPiA+ID4NCj4gPiA+ID4gKwkJLyoNCj4gPiA+ID4g
KwkJICogY29udHJvbGxlciBtYXliZSB0dXJuIG9mZiwgcmUtY29uZmlndXJlIGFnYWluDQo+ID4g
PiA+ICsJCSAqIFNldCB0aGUgQ0xBU1NfUkVWIG9mIFJDIENGRyBoZWFkZXIgdG8NCj4gPiA+ID4g
KwkJICogUENJX0NMQVNTX0JSSURHRV9QQ0kNCj4gPiA+ID4gKwkJICovDQo+ID4gPiA+ICsJCXdy
aXRlbChyZWFkbChwcC0+ZGJpX2Jhc2UgKyBQQ0lfQ0xBU1NfUkVWSVNJT04pDQo+ID4gPiA+ICsJ
CQl8IChQQ0lfQ0xBU1NfQlJJREdFX1BDSSA8PCAxNiksDQo+ID4gPiA+ICsJCQlwcC0+ZGJpX2Jh
c2UgKyBQQ0lfQ0xBU1NfUkVWSVNJT04pOw0KPiA+ID4gPiArDQo+ID4gPg0KPiA+ID4gQ2FuJ3Qg
d2UganVzdCBtb3ZlIHRoZSBjYWxsIHRvIHNldCB0aGlzIGZyb20gZHdfcGNpZV9ob3N0X2luaXQo
KSB0bw0KPiA+ID4gZHdfcGNpZV9zZXR1cF9yYygpIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gdGhp
cyBvdXJzZWx2ZXM/IEl0IHNlZW1zDQo+ID4gPiB0byBiZSB0aGUgbW9yZSBsb2dpY2FsIGNoYW5n
ZS4NCj4gPiBbUmljaGFyZF1kd19wY2llX2hvc3RfaW5pdCBjb250YWlucyB0aGUgd2hvbGUgcmUt
aW5pdGlhbGl6YXRpb24gYW5kDQo+ID4gcmUtbGluay11cCAgYWdhaW4gb2YgdGhlIHBjaWUgbW9k
dWxlLiBJdCdzIG5vdCBwcm9wZXIgdG8gcmUtY2FsbA0KPiBkd19wY2llX2hvc3RfaW5pdCgpLg0K
PiA+IEkgZmluZCB0aGF0IHRoZSBtc2kgaW5pdCBzaG91bGQgYmUgcmUtY29uZmlndXJlZCBhZ2Fp
biBhZnRlciByZXN1bWUgYmFjay4NCj4gPiBTbywgdGhlIGRlZmluaXRpb25zIG9mIHRoZSAiUENJ
RV9NU0lfQUREUl9MTyIgYW5kICJQQ0lFX01TSV9BRERSX0hJIg0KPiA+IHdvdWxkIGJlIHVzZWQg
aGVyZS4NCj4gPg0KPiANCj4gSSBzZWVtcyB5b3UgbWlzdW5kZXJzdG9vZCBteSBjb21tZW50IGhl
cmUuIEknbSBub3Qgc2F5aW5nIHdlIHNob3VsZCBjYWxsDQo+IGR3X3BjaWVfaG9zdF9pbml0KCkg
aGVyZSwgd2hpY2ggd291bGQgYmUgY2xlYXJseSB3cm9uZy4NCj4gDQo+IFdoYXQgSSdtIHNheWlu
ZyBpcyB0aGF0IHRoZSBjYWxsIHRvIHNldCB1cCB0aGUgQ0xBU1NfUkVWIHJlZ2lzdGVyIGlzIGN1
cnJlbnRseQ0KPiBkb25lIGluIGR3X3BjaWVfaG9zdF9pbml0KCksIGJ1dCBmcm9tIGEgcXVpY2sg
bG9vayBhdCB0aGUgY29kZSBJIHRoaW5rIGl0IGlzDQo+IHNhZmUgdG8gbW92ZSB0aGlzIGNhbGwg
dG8gZHdfcGNpZV9zZXR1cF9yYygpLg0KPiBJZiB5b3UgbW92ZSBpdCB0byB0aGlzIGZ1bmN0aW9u
IHRoZXJlIHdvdWxkIG5vIG5lZWQgdG8gZG8gaXQgZXhwbGljaXRseSBmcm9tDQo+IHRoaXMgcmVz
dW1lIGhvb2sgYWdhaW4uDQpbUmljaGFyZF0gVW5kZXJzdG9vZCwgdGhhbmtzLg0KVGhlbiwgSSB3
b3VsZCBtb3ZlIHRoZSBzZXR1cCBvZiB0aGUgQ0xBU1NfUkVWIHJlZ2lzdGVyIHRvIGR3X3BjaWVf
c2V0X3JjKCkgbGF0ZXIuDQo+IA0KPiA+IEJUVywgZG8geW91IGtub3cgd2h5IHRoZSAiLyogU3lu
b3BzaXMgc3BlY2lmaWMgUENJRSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycw0KPiAqLyINCj4gPiBp
cyBub3QgZGVmaW5lZCBpbiBwY2llLWRlc2lnbndhcmUuaCwgYnV0IGluIHBjaWUtZGVzaWdud2Fy
ZS5jPw0KPiA+DQo+IA0KPiBNb3N0IHByb2JhYmx5IGJlY2F1c2UgdGhlIHNldHVwIGZvciB0aGUg
RFcgUENJZSBjb3JlIHNob3VsZCBiZSBoYW5kbGVkIHRocm91Z2gNCj4gcGNpZS1kZXNpZ253YXJl
LmMgYW5kIG5vdCB0aHJvdWdoIHRoZSBpbmRpdmlkdWFsIFNvQyBkcml2ZXJzLg0KPiANCltSaWNo
YXJkXSBHb3QgdGhhdCwgdGhhbmtzLg0KPiA+ID4NCj4gPiA+ID4gKwkJZHdfcGNpZV9zZXR1cF9y
YyhwcCk7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0
aWMgc3RydWN0IHN5c2NvcmVfb3BzIHBjaV9pbXhfc3lzY29yZV9vcHMgPSB7DQo+ID4gPiA+ICsJ
LnN1c3BlbmQgPSBwY2lfaW14X3N1c3BlbmQsDQo+ID4gPiA+ICsJLnJlc3VtZSA9IHBjaV9pbXhf
cmVzdW1lLA0KPiA+ID4gPiArfTsNCj4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiArDQo+ID4gPg0K
PiA+ID4gV2h5IGRvZXMgdGhpcyBuZWVkIHRvIGJlIHN5c2NvcmVfb3BzIGluc3RlYWQgb2YgZGV2
X3BtX29wcz8NCj4gPiBbUmljaGFyZF0gUE1fVFVSTl9PRkYgbXNnIHNob3VsZCBiZSBzZW50IG91
dCBhdCB0aGUgZW5kIG9mIHRoZSBzdXNwZW5kIG9mDQo+IHBjaWUgc3Vic3lzdGVtLg0KPiA+IFJl
c3VtZSBhbmQgcmUtY29uZmlndXJlIG9mIHJjIGNvbnRyb2xsZXIgc2hvdWxkIGJlIGRvbmUgYmVm
b3JlIHRoZSByZXN1bWUgb2YNCj4gcGNpZSBzdWJzeXN0ZW0uDQo+ID4gU28sIHN5c2NvcmVfb3Bz
IGlzIHVzZWQgaGVyZS4NCj4gDQo+IE9rLCBtYWtlcyBzZW5zZS4NCltSaWNoYXJkXVRoYW5rcy4N
Cj4gDQo+IFJlZ2FyZHMsDQo+IEx1Y2FzDQo+IA0KPiAtLQ0KPiBQZW5ndXRyb25peCBlLksuICAg
ICAgICAgICAgIHwgTHVjYXMgU3RhY2ggICAgICAgICAgICAgICAgIHwNCj4gSW5kdXN0cmlhbCBM
aW51eCBTb2x1dGlvbnMgICB8IGh0dHA6Ly93d3cucGVuZ3V0cm9uaXguZGUvICB8DQoNCg0KQmVz
dCBSZWdhcmRzDQpSaWNoYXJkIFpodQ0KDQo=

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 1/5] PCI: imx6: enable pcie on imx6qdl sabreauto
  2014-09-24  2:54     ` Hong-Xing.Zhu
@ 2014-09-24 21:04       ` Fabio Estevam
  2014-09-25  1:21         ` Hong-Xing.Zhu
  0 siblings, 1 reply; 31+ messages in thread
From: Fabio Estevam @ 2014-09-24 21:04 UTC (permalink / raw)
  To: Hong-Xing.Zhu
  Cc: linux-pci-owner, linux-pci, Shengchao Guo, Lucas Stach, Tim Harvey

Hi Richard,

On Tue, Sep 23, 2014 at 11:54 PM, Hong-Xing.Zhu@freescale.com
<Hong-Xing.Zhu@freescale.com> wrote:

> [Richard] 6qdl sabreauto boards don't have the pcie reset gpio in the board design at all.

I have just downloaded the mx6 sabreauto board schematics from
freescale.com and it matches the one I have seen before.

You can search for the CPU_PER_RST_B signal. It is connected via R785
0 ohm resistor to PCIE_RST_B.

CPU_PER_RST_B can be controlled via MAX7310 pin IO/2.

^ permalink raw reply	[flat|nested] 31+ messages in thread

* RE: [PATCH v2 1/5] PCI: imx6: enable pcie on imx6qdl sabreauto
  2014-09-24 21:04       ` Fabio Estevam
@ 2014-09-25  1:21         ` Hong-Xing.Zhu
  2014-09-25  1:39           ` Fabio Estevam
  0 siblings, 1 reply; 31+ messages in thread
From: Hong-Xing.Zhu @ 2014-09-25  1:21 UTC (permalink / raw)
  To: Fabio Estevam
  Cc: linux-pci-owner, linux-pci, Shengchao Guo, Lucas Stach, Tim Harvey

SGkgRmFiaW86DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogRmFiaW8g
RXN0ZXZhbSBbbWFpbHRvOmZlc3RldmFtQGdtYWlsLmNvbV0NCj4gU2VudDogVGh1cnNkYXksIFNl
cHRlbWJlciAyNSwgMjAxNCA1OjA0IEFNDQo+IFRvOiBaaHUgUmljaGFyZC1SNjUwMzcNCj4gQ2M6
IGxpbnV4LXBjaS1vd25lckB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5v
cmc7IEd1byBTaGF3bi0NCj4gUjY1MDczOyBMdWNhcyBTdGFjaDsgVGltIEhhcnZleQ0KPiBTdWJq
ZWN0OiBSZTogW1BBVENIIHYyIDEvNV0gUENJOiBpbXg2OiBlbmFibGUgcGNpZSBvbiBpbXg2cWRs
IHNhYnJlYXV0bw0KPiANCj4gSGkgUmljaGFyZCwNCj4gDQo+IE9uIFR1ZSwgU2VwIDIzLCAyMDE0
IGF0IDExOjU0IFBNLCBIb25nLVhpbmcuWmh1QGZyZWVzY2FsZS5jb20gPEhvbmctDQo+IFhpbmcu
Wmh1QGZyZWVzY2FsZS5jb20+IHdyb3RlOg0KPiANCj4gPiBbUmljaGFyZF0gNnFkbCBzYWJyZWF1
dG8gYm9hcmRzIGRvbid0IGhhdmUgdGhlIHBjaWUgcmVzZXQgZ3BpbyBpbiB0aGUgYm9hcmQNCj4g
ZGVzaWduIGF0IGFsbC4NCj4gDQo+IEkgaGF2ZSBqdXN0IGRvd25sb2FkZWQgdGhlIG14NiBzYWJy
ZWF1dG8gYm9hcmQgc2NoZW1hdGljcyBmcm9tIGZyZWVzY2FsZS5jb20NCj4gYW5kIGl0IG1hdGNo
ZXMgdGhlIG9uZSBJIGhhdmUgc2VlbiBiZWZvcmUuDQo+IA0KPiBZb3UgY2FuIHNlYXJjaCBmb3Ig
dGhlIENQVV9QRVJfUlNUX0Igc2lnbmFsLiBJdCBpcyBjb25uZWN0ZWQgdmlhIFI3ODUNCj4gMCBv
aG0gcmVzaXN0b3IgdG8gUENJRV9SU1RfQi4NCj4gDQo+IENQVV9QRVJfUlNUX0IgY2FuIGJlIGNv
bnRyb2xsZWQgdmlhIE1BWDczMTAgcGluIElPLzIuDQpbUmljaGFyZF0gWWVzIGl0IGlzLiBPbiBB
UkQgYm9hcmQsIHRoZSBQQ0lFX1JTVF9CIGlzIGNvbm5lY3RlZCB0byBDUFVfUEVSX1JTVF9CLg0K
QnV0IHRoaXMgaXMgbm90IG9uZSBzaWduYWwgdGhhdCBjYW4gYmUgY29udHJvbGxlZCBieSBQQ0lF
IG1vZHVsZSBpdHNlbGYuDQpJdCBpcyBraWNrZWQgb25jZSBhdCB0aGUgbW9tZW50IHdoZW4gdGhl
IGJvYXJkIGlzIHBvd2VyZWQgdXAuDQoNCkJlc3QgUmVnYXJkcw0KUmljaGFyZCBaaHUNCg==

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 1/5] PCI: imx6: enable pcie on imx6qdl sabreauto
  2014-09-25  1:21         ` Hong-Xing.Zhu
@ 2014-09-25  1:39           ` Fabio Estevam
  2014-09-25  2:02             ` Hong-Xing.Zhu
  0 siblings, 1 reply; 31+ messages in thread
From: Fabio Estevam @ 2014-09-25  1:39 UTC (permalink / raw)
  To: Hong-Xing.Zhu
  Cc: linux-pci-owner, linux-pci, Shengchao Guo, Lucas Stach, Tim Harvey

On Wed, Sep 24, 2014 at 10:21 PM, Hong-Xing.Zhu@freescale.com
<Hong-Xing.Zhu@freescale.com> wrote:
> [Richard] Yes it is. On ARD board, the PCIE_RST_B is connected to CPU_PER_RST_B.
> But this is not one signal that can be controlled by PCIE module itself.

Let's take imx6qdl-sabresd.dtsi for example:

&pcie {
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_pcie>;
    reset-gpio = <&gpio7 12 0>;
    status = "okay";
};

It uses GPIO7_12 for PCI reset.

For sabreauto we just need to change to something like this format:

reset-gpio = <&max7310_b 2 0>;

> It is kicked once at the moment when the board is powered up.

Yes, the signal is connected to power-on and it can also be
independently controlled via MAX7310.

Anyway, no need to change this if you don't want. I can send a patch
adding the reset later :-)

^ permalink raw reply	[flat|nested] 31+ messages in thread

* RE: [PATCH v2 1/5] PCI: imx6: enable pcie on imx6qdl sabreauto
  2014-09-25  1:39           ` Fabio Estevam
@ 2014-09-25  2:02             ` Hong-Xing.Zhu
  0 siblings, 0 replies; 31+ messages in thread
From: Hong-Xing.Zhu @ 2014-09-25  2:02 UTC (permalink / raw)
  To: Fabio Estevam
  Cc: linux-pci-owner, linux-pci, Shengchao Guo, Lucas Stach, Tim Harvey

SGkgRmFiaW86DQoNCg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEZh
YmlvIEVzdGV2YW0gW21haWx0bzpmZXN0ZXZhbUBnbWFpbC5jb21dDQo+IFNlbnQ6IFRodXJzZGF5
LCBTZXB0ZW1iZXIgMjUsIDIwMTQgOTo0MCBBTQ0KPiBUbzogWmh1IFJpY2hhcmQtUjY1MDM3DQo+
IENjOiBsaW51eC1wY2ktb3duZXJAdmdlci5rZXJuZWwub3JnOyBsaW51eC1wY2lAdmdlci5rZXJu
ZWwub3JnOyBHdW8gU2hhd24tDQo+IFI2NTA3MzsgTHVjYXMgU3RhY2g7IFRpbSBIYXJ2ZXkNCj4g
U3ViamVjdDogUmU6IFtQQVRDSCB2MiAxLzVdIFBDSTogaW14NjogZW5hYmxlIHBjaWUgb24gaW14
NnFkbCBzYWJyZWF1dG8NCj4gDQo+IE9uIFdlZCwgU2VwIDI0LCAyMDE0IGF0IDEwOjIxIFBNLCBI
b25nLVhpbmcuWmh1QGZyZWVzY2FsZS5jb20gPEhvbmctDQo+IFhpbmcuWmh1QGZyZWVzY2FsZS5j
b20+IHdyb3RlOg0KPiA+IFtSaWNoYXJkXSBZZXMgaXQgaXMuIE9uIEFSRCBib2FyZCwgdGhlIFBD
SUVfUlNUX0IgaXMgY29ubmVjdGVkIHRvDQo+IENQVV9QRVJfUlNUX0IuDQo+ID4gQnV0IHRoaXMg
aXMgbm90IG9uZSBzaWduYWwgdGhhdCBjYW4gYmUgY29udHJvbGxlZCBieSBQQ0lFIG1vZHVsZSBp
dHNlbGYuDQo+IA0KPiBMZXQncyB0YWtlIGlteDZxZGwtc2FicmVzZC5kdHNpIGZvciBleGFtcGxl
Og0KPiANCj4gJnBjaWUgew0KPiAgICAgcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsNCj4gICAg
IHBpbmN0cmwtMCA9IDwmcGluY3RybF9wY2llPjsNCj4gICAgIHJlc2V0LWdwaW8gPSA8JmdwaW83
IDEyIDA+Ow0KPiAgICAgc3RhdHVzID0gIm9rYXkiOw0KPiB9Ow0KPiANCj4gSXQgdXNlcyBHUElP
N18xMiBmb3IgUENJIHJlc2V0Lg0KPiANCj4gRm9yIHNhYnJlYXV0byB3ZSBqdXN0IG5lZWQgdG8g
Y2hhbmdlIHRvIHNvbWV0aGluZyBsaWtlIHRoaXMgZm9ybWF0Og0KPiANCj4gcmVzZXQtZ3BpbyA9
IDwmbWF4NzMxMF9iIDIgMD47DQo+IA0KPiA+IEl0IGlzIGtpY2tlZCBvbmNlIGF0IHRoZSBtb21l
bnQgd2hlbiB0aGUgYm9hcmQgaXMgcG93ZXJlZCB1cC4NCj4gDQo+IFllcywgdGhlIHNpZ25hbCBp
cyBjb25uZWN0ZWQgdG8gcG93ZXItb24gYW5kIGl0IGNhbiBhbHNvIGJlIGluZGVwZW5kZW50bHkN
Cj4gY29udHJvbGxlZCB2aWEgTUFYNzMxMC4NCj4gDQo+IEFueXdheSwgbm8gbmVlZCB0byBjaGFu
Z2UgdGhpcyBpZiB5b3UgZG9uJ3Qgd2FudC4gSSBjYW4gc2VuZCBhIHBhdGNoIGFkZGluZw0KPiB0
aGUgcmVzZXQgbGF0ZXIgOi0pDQoNCltSaWNoYXJkXSBPbmUgbW9yZSBkZXBlbmRlbmN5LCB0aGlz
IHNpZ25hbCB3b3VsZCBiZSBzaGFyZS11c2VkIGJ5IG11bHRpLW1vZHVsZXMuDQpJJ20gYWZyYWlk
IHRoZSBvcGVyYXRpb25zIG9mIHRoZSBwY2llLXJlc2V0LWIgd291bGQgYnJpbmcgdW4tZXhjZXB0
aW9uYWwgdG8gb3RoZXIgbW9kdWxlcy4NCg0KQmVzdCBSZWdhcmRzDQpSaWNoYXJkIFpodQ0K

^ permalink raw reply	[flat|nested] 31+ messages in thread

* RE: [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en
  2014-09-23 12:28     ` Tim Harvey
@ 2014-09-25  5:21       ` Hong-Xing.Zhu
  2014-10-01 18:00       ` Tim Harvey
  1 sibling, 0 replies; 31+ messages in thread
From: Hong-Xing.Zhu @ 2014-09-25  5:21 UTC (permalink / raw)
  To: Tim Harvey, Lucas Stach
  Cc: linux-pci-owner, linux-pci, Shengchao Guo, Fabio Estevam

DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFRpbSBIYXJ2ZXkgW21haWx0
bzp0aGFydmV5QGdhdGV3b3Jrcy5jb21dDQo+IFNlbnQ6IFR1ZXNkYXksIFNlcHRlbWJlciAyMywg
MjAxNCA4OjI5IFBNDQo+IFRvOiBMdWNhcyBTdGFjaDsgWmh1IFJpY2hhcmQtUjY1MDM3DQo+IENj
OiBsaW51eC1wY2ktb3duZXJAdmdlci5rZXJuZWwub3JnOyBsaW51eC1wY2lAdmdlci5rZXJuZWwu
b3JnOyBHdW8gU2hhd24tDQo+IFI2NTA3MzsgRmFiaW8gRXN0ZXZhbQ0KPiBTdWJqZWN0OiBSZTog
W1BBVENIIHYyIDIvNV0gUENJOiBpbXg2OiB3YWl0IHRoZSBjbG9ja3MgdG8gc3RhYmlsaXplIGFm
dGVyDQo+IHJlZl9lbg0KPiANCj4gT24gVHVlLCBTZXAgMjMsIDIwMTQgYXQgMjo1NiBBTSwgTHVj
YXMgU3RhY2ggPGwuc3RhY2hAcGVuZ3V0cm9uaXguZGU+IHdyb3RlOg0KPiA+IEFtIERpZW5zdGFn
LCBkZW4gMjMuMDkuMjAxNCwgMTI6MTEgKzA4MDAgc2NocmllYiBSaWNoYXJkIFpodToNCj4gPj4g
LSBhIHdoaWxlIGRlbGF5IGlzIG1hbmRhdG9yeSByZXF1aXJlZCBhZnRlciBwY2llX3JlZl9jbGtf
ZW4gaXMgc2V0Lg0KPiA+PiBPdGhlcndpc2UsIHRoZSBzeXN0ZW0gd291bGQgYmUgaGFuZyBvbiBp
bXg2cWRsIGFyZCBib2FyZHMsIGJlY2F1c2UNCj4gPj4gdGhhdCBpbXg2cWRsIGJvYXJkcyBkb24n
dCBoYXZlIHRoZSByZXNldF9ncGlvLg0KPiA+PiAtIHRoZSBjbG9ja3Mgc2hvdWxkIGJlIHN0YWJs
ZSBhbHJlYWR5IGFmdGVyIHRoZSAiY2xrX3ByZXBhcmVfZW5hYmxlIg0KPiA+PiBpcyByZXR1cm4u
IFNvIEkgdGhpbmsgaXQncyBvayB0byBtb3ZlIHRoZSB1c2xlZXAgZGVsYXkgYWZ0ZXIgdGhlDQo+
ID4+IHBjaWVfcmVmX2VuIGlzIHNldC4NCj4gPj4NCj4gPg0KPiA+IFlvdSBhcmUgZGVzY3JpYmlu
ZyBhIGxvdCBvZiB0aGUgY29uZGl0aW9ucyBhcm91bmQgdGhlIGlzc3VlLCBidXQgbm90DQo+ID4g
dGhlIGlzc3VlIGl0c2VsZiwgd2hpY2ggbWFrZXMgaXQgaGFyZCB0byBmb2xsb3cgeW91ciBjb21t
aXQgbWVzc2FnZS4NCj4gPiBBZnRlciBsb29raW5nIGF0IHRoZSBjb2RlIEkgdGhpbmsgdGhlIHBy
b2JsZW0gaXMgdGhpcyAoYW5kIHNob3VsZCBiZQ0KPiA+IGRlc2NyaWJlZA0KPiA+IGFjY29yZGlu
Z2x5KToNCj4gPg0KPiA+IEZvciBib2FyZHMgd2l0aG91dCBhIHJlc2V0IGdwaW8gd2Ugc2tpcCB0
aGUgZGVsYXkgYmV0d2VlbiBlbmFibGluZyB0aGUNCj4gPiBwY2llX3JlZl9jbGsgYW5kIHRvdWNo
aW5nIHRoZSBSQyByZWdpc3RlcnMgZm9yIGNvbmZpZ3VyYXRpb24uDQo+ID4gQXBwYXJlbnRseSB0
aGlzIGhhbmdzIHdoZW4gdGhlIGNsb2NrcyBhcmUgbm90IHlldCBzZXR0bGVkIGluIHRoZSBEVw0K
PiA+IFBDSWUgY29yZS4gU28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGVyZSBpcyBhbHdh
eXMgYW4gYXBwcm9wcmlhdGUNCj4gPiBkZWxheSBiZXR3ZWVuIHRob3NlIHR3byBhY3Rpb25zLg0K
W1JpY2hhcmRdIFRoYW5rcy4NCj4gPg0KPiA+IEkgaGF2ZSBub3QgZm91bmQgdGhpcyBjb25zdHJh
aW50IGFueXdoZXJlIGluIHRoZSBpLk1YNiBSZWZlcmVuY2UNCj4gPiBNYW51YWwsIG5vciBpbiB0
aGUgRFcgUENJZSBkb2N1bWVudHMgSSBoYXZlIGFjY2VzcyB0bywgd2hpY2ggbWFrZXMgbWUNCj4g
PiBhIGJpdCBmZWVsIGEgYml0IHVuaGFwcHkgYWJvdXQgdGhpcy4gUmljaGFyZCwgZG8geW91IGhh
dmUgYmV0dGVyIGluZm8NCj4gPiBvbiB3aHkgdGhpcyBkZWxheSBpcyBuZWVkZWQgYW5kIGhvdyBs
b25nIGl0IG5lZWRzIHRvIGJlPyBPciBpcyB0aGlzIGp1c3QNCj4gZW1waXJpY2FsPw0KW1JpY2hh
cmRdIEkgdXNlZCB0byBmaXggb25lIGxlc3MgdGhhbiAwLjMlIHBlcmNlbnRhZ2UgcmFuZG9tbHkg
bGluayBkb3duIGlzc3VlDQpkdXJpbmcgdGhlIHdhcm0tcmVzZXQgbG9vcCBzdHJlc3MgdGVzdHMu
DQpJIHVzZWQgZ2V0IHNvbWUgaW5mbyBmcm9tIGRlc2lnbiB0ZWFtIHRoYXQgIiB0aGUgYXN5bmMg
cmVzZXQgaW5wdXQgbmVlZCByZWYgY2xvY2sgdG8gc3luYyBpbnRlcm5hbGx5LCB3aGVuIHRoZSBy
ZWYgY2xvY2sgY29tZXMgYWZ0ZXIgcmVzZXQsIGludGVybmFsIHN5bmNlZCByZXNldCB0aW1lIGlz
IHRvbyBzaG9ydCAsIGNhbm5vdCBtZWV0IHRoZSByZXF1aXJlbWVudC4iICJhdCBsZWFzdCA0dXMg
ZGVsYXkgaXMgcmVxdWlyZWQgYWZ0ZXIgcmVmIGNsb2NrIHN0YWJsZSBhbmQgYmVmb3JlIHNzcF9l
biBpcyBhc3NlcnQiDQpJIHdvdWxkIGFkZCBhYm91dCAxMHVzIGRlbGF5IGp1c3QgYmV0d2VlbiBj
bG9ja3MgYXJlIHN0YWJsZSBhbmQgc3NwX2VuIGlzIGFzc2VydCBsYXRlci4NCj4gPg0KPiA+IElu
IGdlbmVyYWwgSSdtIG9rIHdpdGggdGhpcyBwYXRjaCwgYnV0IHN0aWxsIHdhbnQgYSBjb25maXJt
YXRpb24gZnJvbQ0KPiA+IFRpbSB0aGF0IHRoaXMgZG9lc24ndCBicmVhayBhbnl0aGluZy4NCj4g
DQo+IEkgYWdyZWUgd2l0aCBMdWNhcycgY29tbWVudHMgYW5kIGFsc28gYWdyZWUgdGhhdCB0aGlz
IGNhbiB1c2Ugc29tZSB0ZXN0aW5nLg0KPiBCYXNlZCBvbiBteSBwcmV2aW91cyBmaW5kaW5ncyBQ
Q0kgbGluayBpcyB2ZXJ5IGZyYWdpbGUuIEl0IHdpbGwgdGFrZSBtZSBhIGZldw0KPiBkYXlzIHRv
IGdldCBhIHByb3BlciB0ZXN0IHNldHVwIGluIGEgdGhlcm1hbCBjaGFtYmVyIHdpdGggYSBob3N0
IG9mIGJvYXJkcyBidXQNCj4gSSB3aWxsIHJlcG9ydCBiYWNrIHdoZW4gSSBoYXZlIGZpbmRpbmdz
Lg0KPiANCj4gVGltDQo+IA0KDQoNCkJlc3QgUmVnYXJkcw0KUmljaGFyZCBaaHUNCg0KPiA+DQo+
ID4+IFNpZ25lZC1vZmYtYnk6IFJpY2hhcmQgWmh1IDxyNjUwMzdAZnJlZXNjYWxlLmNvbT4NCj4g
Pj4gLS0tDQo+ID4+ICBkcml2ZXJzL3BjaS9ob3N0L3BjaS1pbXg2LmMgfCA2ICsrKy0tLQ0KPiA+
PiAgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkNCj4gPj4N
Cj4gPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWlteDYuYw0KPiA+PiBiL2Ry
aXZlcnMvcGNpL2hvc3QvcGNpLWlteDYuYyBpbmRleCAyMzNmZThhLi5iYzQyMjJiIDEwMDY0NA0K
PiA+PiAtLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS1pbXg2LmMNCj4gPj4gKysrIGIvZHJpdmVy
cy9wY2kvaG9zdC9wY2ktaW14Ni5jDQo+ID4+IEBAIC0yNzUsMTUgKzI3NSwxNSBAQCBzdGF0aWMg
aW50IGlteDZfcGNpZV9kZWFzc2VydF9jb3JlX3Jlc2V0KHN0cnVjdA0KPiBwY2llX3BvcnQgKnBw
KQ0KPiA+PiAgICAgICAgICAgICAgIGdvdG8gZXJyX3BjaWU7DQo+ID4+ICAgICAgIH0NCj4gPj4N
Cj4gPj4gLSAgICAgLyogYWxsb3cgdGhlIGNsb2NrcyB0byBzdGFiaWxpemUgKi8NCj4gPj4gLSAg
ICAgdXNsZWVwX3JhbmdlKDIwMCwgNTAwKTsNCj4gPj4gLQ0KPiA+PiAgICAgICAvKiBwb3dlciB1
cCBjb3JlIHBoeSBhbmQgZW5hYmxlIHJlZiBjbG9jayAqLw0KPiA+PiAgICAgICByZWdtYXBfdXBk
YXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENfR1BSMSwNCj4gPj4gICAgICAg
ICAgICAgICAgICAgICAgIElNWDZRX0dQUjFfUENJRV9URVNUX1BELCAwIDw8IDE4KTsNCj4gPj4g
ICAgICAgcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQ
UjEsDQo+ID4+ICAgICAgICAgICAgICAgICAgICAgICBJTVg2UV9HUFIxX1BDSUVfUkVGX0NMS19F
TiwgMSA8PCAxNik7DQo+ID4+DQo+ID4+ICsgICAgIC8qIGFsbG93IHRoZSBjbG9ja3MgdG8gc3Rh
YmlsaXplICovDQo+ID4+ICsgICAgIHVzbGVlcF9yYW5nZSgyMDAsIDUwMCk7DQo+ID4+ICsNCj4g
Pj4gICAgICAgLyogU29tZSBib2FyZHMgZG9uJ3QgaGF2ZSBQQ0llIHJlc2V0IEdQSU8uICovDQo+
ID4+ICAgICAgIGlmIChncGlvX2lzX3ZhbGlkKGlteDZfcGNpZS0+cmVzZXRfZ3BpbykpIHsNCj4g
Pj4gICAgICAgICAgICAgICBncGlvX3NldF92YWx1ZShpbXg2X3BjaWUtPnJlc2V0X2dwaW8sIDAp
Ow0KPiA+DQo+ID4gLS0NCj4gPiBQZW5ndXRyb25peCBlLksuICAgICAgICAgICAgIHwgTHVjYXMg
U3RhY2ggICAgICAgICAgICAgICAgIHwNCj4gPiBJbmR1c3RyaWFsIExpbnV4IFNvbHV0aW9ucyAg
IHwgaHR0cDovL3d3dy5wZW5ndXRyb25peC5kZS8gIHwNCj4gPg0KPiA+IC0tDQo+ID4gVG8gdW5z
dWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4
LXBjaSINCj4gPiBpbiB0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2Vy
bmVsLm9yZyBNb3JlIG1ham9yZG9tbw0KPiA+IGluZm8gYXQgIGh0dHA6Ly92Z2VyLmtlcm5lbC5v
cmcvbWFqb3Jkb21vLWluZm8uaHRtbA0K

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en
  2014-09-23 12:28     ` Tim Harvey
  2014-09-25  5:21       ` Hong-Xing.Zhu
@ 2014-10-01 18:00       ` Tim Harvey
  2014-10-02  2:26         ` Hong-Xing.Zhu
  1 sibling, 1 reply; 31+ messages in thread
From: Tim Harvey @ 2014-10-01 18:00 UTC (permalink / raw)
  To: Lucas Stach, Richard Zhu
  Cc: linux-pci-owner, linux-pci, Shawn Guo, Fabio Estevam

On Tue, Sep 23, 2014 at 5:28 AM, Tim Harvey <tharvey@gateworks.com> wrote:
> On Tue, Sep 23, 2014 at 2:56 AM, Lucas Stach <l.stach@pengutronix.de> wrote:
>> Am Dienstag, den 23.09.2014, 12:11 +0800 schrieb Richard Zhu:
>>> - a while delay is mandatory required after pcie_ref_clk_en
>>> is set. Otherwise, the system would be hang on imx6qdl ard
>>> boards, because that imx6qdl boards don't have the reset_gpio.
>>> - the clocks should be stable already after the
>>> "clk_prepare_enable" is return. So I think it's ok to move the
>>> usleep delay after the pcie_ref_en is set.
>>>
>>
>> You are describing a lot of the conditions around the issue, but not the
>> issue itself, which makes it hard to follow your commit message. After
>> looking at the code I think the problem is this (and should be described
>> accordingly):
>>
>> For boards without a reset gpio we skip the delay between enabling the
>> pcie_ref_clk and touching the RC registers for configuration. Apparently
>> this hangs when the clocks are not yet settled in the DW PCIe core. So
>> we need to make sure that there is always an appropriate delay between
>> those two actions.
>>
>> I have not found this constraint anywhere in the i.MX6 Reference Manual,
>> nor in the DW PCIe documents I have access to, which makes me a bit feel
>> a bit unhappy about this. Richard, do you have better info on why this
>> delay is needed and how long it needs to be? Or is this just empirical?
>>
>> In general I'm ok with this patch, but still want a confirmation from
>> Tim that this doesn't break anything.
>
> I agree with Lucas' comments and also agree that this can use some
> testing. Based on my previous findings PCI link is very fragile. It
> will take me a few days to get a proper test setup in a thermal
> chamber with a host of boards but I will report back when I have
> findings.
>
> Tim
>
>>
>>> Signed-off-by: Richard Zhu <r65037@freescale.com>
>>> ---
>>>  drivers/pci/host/pci-imx6.c | 6 +++---
>>>  1 file changed, 3 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
>>> index 233fe8a..bc4222b 100644
>>> --- a/drivers/pci/host/pci-imx6.c
>>> +++ b/drivers/pci/host/pci-imx6.c
>>> @@ -275,15 +275,15 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp)
>>>               goto err_pcie;
>>>       }
>>>
>>> -     /* allow the clocks to stabilize */
>>> -     usleep_range(200, 500);
>>> -
>>>       /* power up core phy and enable ref clock */
>>>       regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
>>>                       IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18);
>>>       regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
>>>                       IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16);
>>>
>>> +     /* allow the clocks to stabilize */
>>> +     usleep_range(200, 500);
>>> +
>>>       /* Some boards don't have PCIe reset GPIO. */
>>>       if (gpio_is_valid(imx6_pcie->reset_gpio)) {
>>>               gpio_set_value(imx6_pcie->reset_gpio, 0);
>>

I tested this across temperature over 300+ boots each on several IMX6
based boards with switches and did not encounter any link failures.

Tested-by: Tim Harvey <tharvey@gateworks.com>

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en
  2014-10-01 18:00       ` Tim Harvey
@ 2014-10-02  2:26         ` Hong-Xing.Zhu
  0 siblings, 0 replies; 31+ messages in thread
From: Hong-Xing.Zhu @ 2014-10-02  2:26 UTC (permalink / raw)
  To: Tim Harvey
  Cc: Lucas Stach, Hong-Xing.Zhu, linux-pci-owner, linux-pci,
	Shengchao Guo, Fabio Estevam

VGhhbmtzIFRpbS4NCg0KQmVzdCByZWdhcmRzDQpSaWNoYXJkDQoNCj4g1NogMjAxNMTqMTDUwjLI
1aOsyc/O5zI6MDCjrCJUaW0gSGFydmV5IiA8dGhhcnZleUBnYXRld29ya3MuY29tPiDQtLXAo7oN
Cj4gDQo+PiBPbiBUdWUsIFNlcCAyMywgMjAxNCBhdCA1OjI4IEFNLCBUaW0gSGFydmV5IDx0aGFy
dmV5QGdhdGV3b3Jrcy5jb20+IHdyb3RlOg0KPj4+IE9uIFR1ZSwgU2VwIDIzLCAyMDE0IGF0IDI6
NTYgQU0sIEx1Y2FzIFN0YWNoIDxsLnN0YWNoQHBlbmd1dHJvbml4LmRlPiB3cm90ZToNCj4+PiBB
bSBEaWVuc3RhZywgZGVuIDIzLjA5LjIwMTQsIDEyOjExICswODAwIHNjaHJpZWIgUmljaGFyZCBa
aHU6DQo+Pj4+IC0gYSB3aGlsZSBkZWxheSBpcyBtYW5kYXRvcnkgcmVxdWlyZWQgYWZ0ZXIgcGNp
ZV9yZWZfY2xrX2VuDQo+Pj4+IGlzIHNldC4gT3RoZXJ3aXNlLCB0aGUgc3lzdGVtIHdvdWxkIGJl
IGhhbmcgb24gaW14NnFkbCBhcmQNCj4+Pj4gYm9hcmRzLCBiZWNhdXNlIHRoYXQgaW14NnFkbCBi
b2FyZHMgZG9uJ3QgaGF2ZSB0aGUgcmVzZXRfZ3Bpby4NCj4+Pj4gLSB0aGUgY2xvY2tzIHNob3Vs
ZCBiZSBzdGFibGUgYWxyZWFkeSBhZnRlciB0aGUNCj4+Pj4gImNsa19wcmVwYXJlX2VuYWJsZSIg
aXMgcmV0dXJuLiBTbyBJIHRoaW5rIGl0J3Mgb2sgdG8gbW92ZSB0aGUNCj4+Pj4gdXNsZWVwIGRl
bGF5IGFmdGVyIHRoZSBwY2llX3JlZl9lbiBpcyBzZXQuDQo+Pj4gDQo+Pj4gWW91IGFyZSBkZXNj
cmliaW5nIGEgbG90IG9mIHRoZSBjb25kaXRpb25zIGFyb3VuZCB0aGUgaXNzdWUsIGJ1dCBub3Qg
dGhlDQo+Pj4gaXNzdWUgaXRzZWxmLCB3aGljaCBtYWtlcyBpdCBoYXJkIHRvIGZvbGxvdyB5b3Vy
IGNvbW1pdCBtZXNzYWdlLiBBZnRlcg0KPj4+IGxvb2tpbmcgYXQgdGhlIGNvZGUgSSB0aGluayB0
aGUgcHJvYmxlbSBpcyB0aGlzIChhbmQgc2hvdWxkIGJlIGRlc2NyaWJlZA0KPj4+IGFjY29yZGlu
Z2x5KToNCj4+PiANCj4+PiBGb3IgYm9hcmRzIHdpdGhvdXQgYSByZXNldCBncGlvIHdlIHNraXAg
dGhlIGRlbGF5IGJldHdlZW4gZW5hYmxpbmcgdGhlDQo+Pj4gcGNpZV9yZWZfY2xrIGFuZCB0b3Vj
aGluZyB0aGUgUkMgcmVnaXN0ZXJzIGZvciBjb25maWd1cmF0aW9uLiBBcHBhcmVudGx5DQo+Pj4g
dGhpcyBoYW5ncyB3aGVuIHRoZSBjbG9ja3MgYXJlIG5vdCB5ZXQgc2V0dGxlZCBpbiB0aGUgRFcg
UENJZSBjb3JlLiBTbw0KPj4+IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgaXMgYWx3
YXlzIGFuIGFwcHJvcHJpYXRlIGRlbGF5IGJldHdlZW4NCj4+PiB0aG9zZSB0d28gYWN0aW9ucy4N
Cj4+PiANCj4+PiBJIGhhdmUgbm90IGZvdW5kIHRoaXMgY29uc3RyYWludCBhbnl3aGVyZSBpbiB0
aGUgaS5NWDYgUmVmZXJlbmNlIE1hbnVhbCwNCj4+PiBub3IgaW4gdGhlIERXIFBDSWUgZG9jdW1l
bnRzIEkgaGF2ZSBhY2Nlc3MgdG8sIHdoaWNoIG1ha2VzIG1lIGEgYml0IGZlZWwNCj4+PiBhIGJp
dCB1bmhhcHB5IGFib3V0IHRoaXMuIFJpY2hhcmQsIGRvIHlvdSBoYXZlIGJldHRlciBpbmZvIG9u
IHdoeSB0aGlzDQo+Pj4gZGVsYXkgaXMgbmVlZGVkIGFuZCBob3cgbG9uZyBpdCBuZWVkcyB0byBi
ZT8gT3IgaXMgdGhpcyBqdXN0IGVtcGlyaWNhbD8NCj4+PiANCj4+PiBJbiBnZW5lcmFsIEknbSBv
ayB3aXRoIHRoaXMgcGF0Y2gsIGJ1dCBzdGlsbCB3YW50IGEgY29uZmlybWF0aW9uIGZyb20NCj4+
PiBUaW0gdGhhdCB0aGlzIGRvZXNuJ3QgYnJlYWsgYW55dGhpbmcuDQo+PiANCj4+IEkgYWdyZWUg
d2l0aCBMdWNhcycgY29tbWVudHMgYW5kIGFsc28gYWdyZWUgdGhhdCB0aGlzIGNhbiB1c2Ugc29t
ZQ0KPj4gdGVzdGluZy4gQmFzZWQgb24gbXkgcHJldmlvdXMgZmluZGluZ3MgUENJIGxpbmsgaXMg
dmVyeSBmcmFnaWxlLiBJdA0KPj4gd2lsbCB0YWtlIG1lIGEgZmV3IGRheXMgdG8gZ2V0IGEgcHJv
cGVyIHRlc3Qgc2V0dXAgaW4gYSB0aGVybWFsDQo+PiBjaGFtYmVyIHdpdGggYSBob3N0IG9mIGJv
YXJkcyBidXQgSSB3aWxsIHJlcG9ydCBiYWNrIHdoZW4gSSBoYXZlDQo+PiBmaW5kaW5ncy4NCj4+
IA0KPj4gVGltDQo+PiANCj4+PiANCj4+Pj4gU2lnbmVkLW9mZi1ieTogUmljaGFyZCBaaHUgPHI2
NTAzN0BmcmVlc2NhbGUuY29tPg0KPj4+PiAtLS0NCj4+Pj4gZHJpdmVycy9wY2kvaG9zdC9wY2kt
aW14Ni5jIHwgNiArKystLS0NCj4+Pj4gMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwg
MyBkZWxldGlvbnMoLSkNCj4+Pj4gDQo+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0
L3BjaS1pbXg2LmMgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1pbXg2LmMNCj4+Pj4gaW5kZXggMjMz
ZmU4YS4uYmM0MjIyYiAxMDA2NDQNCj4+Pj4gLS0tIGEvZHJpdmVycy9wY2kvaG9zdC9wY2ktaW14
Ni5jDQo+Pj4+ICsrKyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWlteDYuYw0KPj4+PiBAQCAtMjc1
LDE1ICsyNzUsMTUgQEAgc3RhdGljIGludCBpbXg2X3BjaWVfZGVhc3NlcnRfY29yZV9yZXNldChz
dHJ1Y3QgcGNpZV9wb3J0ICpwcCkNCj4+Pj4gICAgICAgICAgICAgIGdvdG8gZXJyX3BjaWU7DQo+
Pj4+ICAgICAgfQ0KPj4+PiANCj4+Pj4gLSAgICAgLyogYWxsb3cgdGhlIGNsb2NrcyB0byBzdGFi
aWxpemUgKi8NCj4+Pj4gLSAgICAgdXNsZWVwX3JhbmdlKDIwMCwgNTAwKTsNCj4+Pj4gLQ0KPj4+
PiAgICAgIC8qIHBvd2VyIHVwIGNvcmUgcGh5IGFuZCBlbmFibGUgcmVmIGNsb2NrICovDQo+Pj4+
ICAgICAgcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQ
UjEsDQo+Pj4+ICAgICAgICAgICAgICAgICAgICAgIElNWDZRX0dQUjFfUENJRV9URVNUX1BELCAw
IDw8IDE4KTsNCj4+Pj4gICAgICByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNf
Z3ByLCBJT01VWENfR1BSMSwNCj4+Pj4gICAgICAgICAgICAgICAgICAgICAgSU1YNlFfR1BSMV9Q
Q0lFX1JFRl9DTEtfRU4sIDEgPDwgMTYpOw0KPj4+PiANCj4+Pj4gKyAgICAgLyogYWxsb3cgdGhl
IGNsb2NrcyB0byBzdGFiaWxpemUgKi8NCj4+Pj4gKyAgICAgdXNsZWVwX3JhbmdlKDIwMCwgNTAw
KTsNCj4+Pj4gKw0KPj4+PiAgICAgIC8qIFNvbWUgYm9hcmRzIGRvbid0IGhhdmUgUENJZSByZXNl
dCBHUElPLiAqLw0KPj4+PiAgICAgIGlmIChncGlvX2lzX3ZhbGlkKGlteDZfcGNpZS0+cmVzZXRf
Z3BpbykpIHsNCj4+Pj4gICAgICAgICAgICAgIGdwaW9fc2V0X3ZhbHVlKGlteDZfcGNpZS0+cmVz
ZXRfZ3BpbywgMCk7DQo+IA0KPiBJIHRlc3RlZCB0aGlzIGFjcm9zcyB0ZW1wZXJhdHVyZSBvdmVy
IDMwMCsgYm9vdHMgZWFjaCBvbiBzZXZlcmFsIElNWDYNCj4gYmFzZWQgYm9hcmRzIHdpdGggc3dp
dGNoZXMgYW5kIGRpZCBub3QgZW5jb3VudGVyIGFueSBsaW5rIGZhaWx1cmVzLg0KPiANCj4gVGVz
dGVkLWJ5OiBUaW0gSGFydmV5IDx0aGFydmV5QGdhdGV3b3Jrcy5jb20+DQo=

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en
  2014-09-23  4:11 ` [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en Richard Zhu
  2014-09-23  9:56   ` Lucas Stach
  2014-09-23 12:45   ` Fabio Estevam
@ 2014-10-24  1:51   ` Fabio Estevam
  2014-10-24  2:46     ` Richard.Zhu
  2 siblings, 1 reply; 31+ messages in thread
From: Fabio Estevam @ 2014-10-24  1:51 UTC (permalink / raw)
  To: Richard Zhu
  Cc: linux-pci-owner, linux-pci, Shawn Guo, Lucas Stach, Tim Harvey,
	Bjorn Helgaas

Hi Richard,

On Tue, Sep 23, 2014 at 1:11 AM, Richard Zhu <r65037@freescale.com> wrote:
> - a while delay is mandatory required after pcie_ref_clk_en
> is set. Otherwise, the system would be hang on imx6qdl ard
> boards, because that imx6qdl boards don't have the reset_gpio.
> - the clocks should be stable already after the
> "clk_prepare_enable" is return. So I think it's ok to move the
> usleep delay after the pcie_ref_en is set.
>
> Signed-off-by: Richard Zhu <r65037@freescale.com>

Tested-by: Fabio Estevam <fabio.estevam@freescale.com>

Without this patch we notice that the kernel does not boot anymore
since commit  3fce0e882f61 (PCI: imx6: Delay enabling reference clock
for SS until it stabilizes) on a system that does not pass the PCI
gpio reset in the dtb. This causes a regression on mx6 nitrogen
boards.

I would suggest that you resend this patch only so that it could be
applied into 3.18 as a bug fix.

^ permalink raw reply	[flat|nested] 31+ messages in thread

* RE: [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en
  2014-10-24  1:51   ` Fabio Estevam
@ 2014-10-24  2:46     ` Richard.Zhu
  0 siblings, 0 replies; 31+ messages in thread
From: Richard.Zhu @ 2014-10-24  2:46 UTC (permalink / raw)
  To: Fabio Estevam
  Cc: linux-pci-owner, linux-pci, Shengchao Guo, Lucas Stach,
	Tim Harvey, Bjorn Helgaas

DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEZhYmlvIEVzdGV2YW0gW21h
aWx0bzpmZXN0ZXZhbUBnbWFpbC5jb21dDQo+IFNlbnQ6IEZyaWRheSwgT2N0b2JlciAyNCwgMjAx
NCA5OjUxIEFNDQo+IFRvOiBaaHUgUmljaGFyZC1SNjUwMzcNCj4gQ2M6IGxpbnV4LXBjaS1vd25l
ckB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmc7IEd1byBTaGF3bi0N
Cj4gUjY1MDczOyBMdWNhcyBTdGFjaDsgVGltIEhhcnZleTsgQmpvcm4gSGVsZ2Fhcw0KPiBTdWJq
ZWN0OiBSZTogW1BBVENIIHYyIDIvNV0gUENJOiBpbXg2OiB3YWl0IHRoZSBjbG9ja3MgdG8gc3Rh
YmlsaXplIGFmdGVyDQo+IHJlZl9lbg0KPiANCj4gSGkgUmljaGFyZCwNCj4gDQo+IE9uIFR1ZSwg
U2VwIDIzLCAyMDE0IGF0IDE6MTEgQU0sIFJpY2hhcmQgWmh1IDxyNjUwMzdAZnJlZXNjYWxlLmNv
bT4gd3JvdGU6DQo+ID4gLSBhIHdoaWxlIGRlbGF5IGlzIG1hbmRhdG9yeSByZXF1aXJlZCBhZnRl
ciBwY2llX3JlZl9jbGtfZW4gaXMgc2V0Lg0KPiA+IE90aGVyd2lzZSwgdGhlIHN5c3RlbSB3b3Vs
ZCBiZSBoYW5nIG9uIGlteDZxZGwgYXJkIGJvYXJkcywgYmVjYXVzZQ0KPiA+IHRoYXQgaW14NnFk
bCBib2FyZHMgZG9uJ3QgaGF2ZSB0aGUgcmVzZXRfZ3Bpby4NCj4gPiAtIHRoZSBjbG9ja3Mgc2hv
dWxkIGJlIHN0YWJsZSBhbHJlYWR5IGFmdGVyIHRoZSAiY2xrX3ByZXBhcmVfZW5hYmxlIg0KPiA+
IGlzIHJldHVybi4gU28gSSB0aGluayBpdCdzIG9rIHRvIG1vdmUgdGhlIHVzbGVlcCBkZWxheSBh
ZnRlciB0aGUNCj4gPiBwY2llX3JlZl9lbiBpcyBzZXQuDQo+ID4NCj4gPiBTaWduZWQtb2ZmLWJ5
OiBSaWNoYXJkIFpodSA8cjY1MDM3QGZyZWVzY2FsZS5jb20+DQo+IA0KPiBUZXN0ZWQtYnk6IEZh
YmlvIEVzdGV2YW0gPGZhYmlvLmVzdGV2YW1AZnJlZXNjYWxlLmNvbT4NCj4gDQo+IFdpdGhvdXQg
dGhpcyBwYXRjaCB3ZSBub3RpY2UgdGhhdCB0aGUga2VybmVsIGRvZXMgbm90IGJvb3QgYW55bW9y
ZSBzaW5jZQ0KPiBjb21taXQgIDNmY2UwZTg4MmY2MSAoUENJOiBpbXg2OiBEZWxheSBlbmFibGlu
ZyByZWZlcmVuY2UgY2xvY2sgZm9yIFNTIHVudGlsDQo+IGl0IHN0YWJpbGl6ZXMpIG9uIGEgc3lz
dGVtIHRoYXQgZG9lcyBub3QgcGFzcyB0aGUgUENJIGdwaW8gcmVzZXQgaW4gdGhlIGR0Yi4NCj4g
VGhpcyBjYXVzZXMgYSByZWdyZXNzaW9uIG9uIG14NiBuaXRyb2dlbiBib2FyZHMuDQo+IA0KPiBJ
IHdvdWxkIHN1Z2dlc3QgdGhhdCB5b3UgcmVzZW5kIHRoaXMgcGF0Y2ggb25seSBzbyB0aGF0IGl0
IGNvdWxkIGJlIGFwcGxpZWQNCj4gaW50byAzLjE4IGFzIGEgYnVnIGZpeC4NCg0KDQpPa2F5LCBJ
IHdvdWxkIHNlbmQgb3V0IHRoZSBwYXRjaCB0b2RheS4NCg0KQmVzdCBSZWdhcmRzDQpSaWNoYXJk
IFpodQ0K

^ permalink raw reply	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2014-10-24  5:17 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-09-23  4:11 [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu
2014-09-23  4:11 ` [PATCH v2 1/5] PCI: imx6: enable pcie on " Richard Zhu
2014-09-23  9:19   ` Lucas Stach
2014-09-23 12:40   ` Fabio Estevam
2014-09-24  2:54     ` Hong-Xing.Zhu
2014-09-24 21:04       ` Fabio Estevam
2014-09-25  1:21         ` Hong-Xing.Zhu
2014-09-25  1:39           ` Fabio Estevam
2014-09-25  2:02             ` Hong-Xing.Zhu
2014-09-23  4:11 ` [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en Richard Zhu
2014-09-23  9:56   ` Lucas Stach
2014-09-23 12:28     ` Tim Harvey
2014-09-25  5:21       ` Hong-Xing.Zhu
2014-10-01 18:00       ` Tim Harvey
2014-10-02  2:26         ` Hong-Xing.Zhu
2014-09-23 12:45   ` Fabio Estevam
2014-10-24  1:51   ` Fabio Estevam
2014-10-24  2:46     ` Richard.Zhu
2014-09-23  4:11 ` [PATCH v2 3/5] PCI: imx6: update dts and binding for imx6sx pcie Richard Zhu
2014-09-23 10:19   ` Lucas Stach
2014-09-24  9:43     ` Hong-Xing.Zhu
2014-09-23  4:11 ` [PATCH v2 4/5] PCI: imx6: add imx6sx pcie related gpr bits definitions Richard Zhu
2014-09-23 10:21   ` Lucas Stach
2014-09-24  4:45     ` Hong-Xing.Zhu
2014-09-23  4:11 ` [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support Richard Zhu
2014-09-23 11:00   ` Lucas Stach
2014-09-24  7:09     ` Hong-Xing.Zhu
2014-09-24  9:46       ` Lucas Stach
2014-09-24 10:15         ` Hong-Xing.Zhu
2014-09-23  9:18 ` [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Lucas Stach
2014-09-23  9:29   ` Hong-Xing.Zhu

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).