linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto.
@ 2014-09-30  9:36 Richard Zhu
  2014-09-30  9:36 ` [PATCH v4 01/10] PCI: imx6: wait the clocks to stabilize after ref_en Richard Zhu
                   ` (9 more replies)
  0 siblings, 10 replies; 23+ messages in thread
From: Richard Zhu @ 2014-09-30  9:36 UTC (permalink / raw)
  To: linux-pci-owner; +Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey

The 10th patch is not sent out properly, re-send the patch-set again.

Main changes since the v3:
1. fix one potential assignment error of cfg start in designware driver when
IORESOURCE_MEM "config" is represented as cfg space resource.
2. Use "config" cfg space in imx6sx pcie dts.
3. Add more descriptive in the imx6sx pcie binding.
4. Sort the pre-fix of the patch-set, then it would be easier
for Bjorn and Shawn to merge them, after the patch-set is accepted.
5. rename the disp_axi clcok to pcie_inbound_axi.

[PATCH v4 01/10] PCI: imx6: wait the clocks to stabilize after ref_en
[PATCH v4 02/10] PCI: imx6: add imx6sx pcie support
[PATCH v4 03/10] PCI: imx6: Fix possible dead lock
[PATCH v4 04/10] PCI: designware: refine setup_rc and add msi data
[PATCH v4 05/10] PCI: designware: fix one potential assignment error
[PATCH v4 06/10] ARM: imx6qdl: enable pcie on imx6qdl sabreauto
[PATCH v4 07/10] ARM: imx6: update dts and binding for imx6sx pcie
[PATCH v4 08/10] ARM: imx6sx: add syscon into gpc dts
[PATCH v4 09/10] ARM: imx6sx: add imx6sx pcie related gpr bits
[PATCH v4 10/10] ARM: imx6sx: enable pcie on imx6sx sdb board

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

* [PATCH v4 01/10] PCI: imx6: wait the clocks to stabilize after ref_en
  2014-09-30  9:36 [PATCH v4]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu
@ 2014-09-30  9:36 ` Richard Zhu
  2014-09-30  9:36 ` [PATCH v4 02/10] PCI: imx6: add imx6sx pcie support Richard Zhu
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 23+ messages in thread
From: Richard Zhu @ 2014-09-30  9:36 UTC (permalink / raw)
  To: linux-pci-owner
  Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey, Richard Zhu

For boards without a reset gpio we skip the delay between enabling
the pcie_ref_clk and touching the RC registers for configuration.
System would be 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.

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

diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
index 233fe8a..eac96fb 100644
--- a/drivers/pci/host/pci-imx6.c
+++ b/drivers/pci/host/pci-imx6.c
@@ -275,15 +275,22 @@ 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);
+	/*
+	 * the async reset input need ref clock to sync internally,
+	 * when the ref clock comes after reset, internal synced
+	 * reset time is too short , cannot meet the requirement.
+	 * add one ~10us delay here.
+	 */
+	udelay(10);
 	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] 23+ messages in thread

* [PATCH v4 02/10] PCI: imx6: add imx6sx pcie support
  2014-09-30  9:36 [PATCH v4]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu
  2014-09-30  9:36 ` [PATCH v4 01/10] PCI: imx6: wait the clocks to stabilize after ref_en Richard Zhu
@ 2014-09-30  9:36 ` Richard Zhu
  2014-09-30 14:54   ` Lucas Stach
  2014-09-30  9:36 ` [PATCH v4 03/10] PCI: imx6: Fix possible dead lock Richard Zhu
                   ` (7 subsequent siblings)
  9 siblings, 1 reply; 23+ messages in thread
From: Richard Zhu @ 2014-09-30  9:36 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.
- disp_axi clock is required by pcie inbound axi port actually.
Add one more clock named pcie_inbound_axi for imx6sx pcie.

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

diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
index eac96fb..c74e87d 100644
--- a/drivers/pci/host/pci-imx6.c
+++ b/drivers/pci/host/pci-imx6.c
@@ -22,8 +22,10 @@
 #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>
 
@@ -35,11 +37,15 @@ struct imx6_pcie {
 	int			reset_gpio;
 	struct clk		*pcie_bus;
 	struct clk		*pcie_phy;
+	struct clk		*pcie_inbound_axi;
 	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 +83,18 @@ 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)
 
+/* GPC PCIE PHY bit definitions */
+#define GPC_CNTR			0
+#define GPC_CNTR_PCIE_PHY_PUP_REQ	BIT(7)
+
+static inline bool is_imx6sx_pcie(struct imx6_pcie *imx6_pcie)
+{
+	struct pcie_port *pp = &imx6_pcie->pp;
+	struct device_node *np = pp->dev->of_node;
+
+	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,18 +293,29 @@ 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);
-	/*
-	 * the async reset input need ref clock to sync internally,
-	 * when the ref clock comes after reset, internal synced
-	 * reset time is too short , cannot meet the requirement.
-	 * add one ~10us delay here.
-	 */
-	udelay(10);
-	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
-			IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16);
+	if (is_imx6sx_pcie(imx6_pcie)) {
+		ret = clk_prepare_enable(imx6_pcie->pcie_inbound_axi);
+		if (ret) {
+			dev_err(pp->dev, "unable to enable pcie clock\n");
+			goto err_inbound_axi;
+		}
+
+		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
+				IMX6SX_GPR12_PCIE_TEST_PD, 0);
+	} else {
+		/* power up core phy and enable ref clock */
+		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
+				IMX6Q_GPR1_PCIE_TEST_PD, 0);
+		/*
+		 * the async reset input need ref clock to sync internally,
+		 * when the ref clock comes after reset, internal synced
+		 * reset time is too short , cannot meet the requirement.
+		 * add one ~10us delay here.
+		 */
+		udelay(10);
+		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);
@@ -297,8 +326,19 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp)
 		msleep(100);
 		gpio_set_value(imx6_pcie->reset_gpio, 1);
 	}
+
+	/*
+	 * Release the PCIe PHY reset here, 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, 0);
+
 	return 0;
 
+err_inbound_axi:
+	clk_disable_unprepare(imx6_pcie->pcie);
 err_pcie:
 	clk_disable_unprepare(imx6_pcie->pcie_bus);
 err_pcie_bus:
@@ -311,6 +351,26 @@ err_pcie_phy:
 static void imx6_pcie_init_phy(struct pcie_port *pp)
 {
 	struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp);
+	int ret;
+
+	/* 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, GPC_CNTR,
+				GPC_CNTR_PCIE_PHY_PUP_REQ,
+				GPC_CNTR_PCIE_PHY_PUP_REQ);
+		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);
@@ -319,7 +379,7 @@ static void imx6_pcie_init_phy(struct pcie_port *pp)
 	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);
@@ -377,7 +437,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)
@@ -553,9 +614,50 @@ static int __init imx6_add_pcie_port(struct pcie_port *pp,
 	return 0;
 }
 
+#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,
+				IMX6SX_GPR12_PCIE_PM_TURN_OFF,
+				IMX6SX_GPR12_PCIE_PM_TURN_OFF);
+		udelay(10);
+		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
+				IMX6SX_GPR12_PCIE_PM_TURN_OFF, 0);
+	}
+
+	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,
+				IMX6SX_GPR5_PCIE_PERST, IMX6SX_GPR5_PCIE_PERST);
+		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR5,
+				IMX6SX_GPR5_PCIE_PERST, 0);
+		/*
+		 * controller maybe turn off, re-configure again
+		 */
+		dw_pcie_setup_rc(pp);
+
+		if (IS_ENABLED(CONFIG_PCI_MSI))
+			dw_pcie_msi_cfg_restore(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;
 	struct device_node *np = pdev->dev.of_node;
 	struct resource *dbi_base;
@@ -572,7 +674,7 @@ static int __init imx6_pcie_probe(struct platform_device *pdev)
 	hook_fault_code(16 + 6, imx6q_pcie_abort_handler, SIGBUS, 0,
 		"imprecise external abort");
 
-	dbi_base = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	dbi_base = platform_get_resource_byname(pdev, IORESOURCE_MEM, "rc_dbi");
 	pp->dbi_base = devm_ioremap_resource(&pdev->dev, dbi_base);
 	if (IS_ERR(pp->dbi_base))
 		return PTR_ERR(pp->dbi_base);
@@ -610,9 +712,28 @@ 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_inbound_axi = devm_clk_get(&pdev->dev,
+				"pcie_inbound_axi");
+		if (IS_ERR(imx6_pcie->pcie_inbound_axi)) {
+			dev_err(&pdev->dev,
+				"pcie clock source missing or invalid\n");
+			return PTR_ERR(imx6_pcie->pcie_inbound_axi);
+		}
+
+		imx6_pcie->pcie_regulator = devm_regulator_get(pp->dev,
+				"pcie-phy");
+
+		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);
@@ -623,6 +744,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;
 }
 
@@ -636,6 +760,7 @@ static void imx6_pcie_shutdown(struct platform_device *pdev)
 
 static const struct of_device_id imx6_pcie_of_match[] = {
 	{ .compatible = "fsl,imx6q-pcie", },
+	{ .compatible = "fsl,imx6sx-pcie", },
 	{},
 };
 MODULE_DEVICE_TABLE(of, imx6_pcie_of_match);
-- 
1.9.1


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

* [PATCH v4 03/10] PCI: imx6: Fix possible dead lock
  2014-09-30  9:36 [PATCH v4]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu
  2014-09-30  9:36 ` [PATCH v4 01/10] PCI: imx6: wait the clocks to stabilize after ref_en Richard Zhu
  2014-09-30  9:36 ` [PATCH v4 02/10] PCI: imx6: add imx6sx pcie support Richard Zhu
@ 2014-09-30  9:36 ` Richard Zhu
  2014-09-30 14:57   ` Lucas Stach
  2014-09-30  9:36 ` [PATCH v4 04/10] PCI: designware: refine setup_rc and add msi data restore Richard Zhu
                   ` (6 subsequent siblings)
  9 siblings, 1 reply; 23+ messages in thread
From: Richard Zhu @ 2014-09-30  9:36 UTC (permalink / raw)
  To: linux-pci-owner
  Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey, Richard Zhu

kernel report one possible dead lock during imx6sx pcie
suspend resume stress tests, after enable Lock Debugging.
platform: imx6sx sdb board + xhci(pcie2usb3.0 ep)

reason: usleep_range used in imx6_pcie_link_up maybe scheduled
out from dw_pcie_valid_config.isra...
About details, please see the following logs.

solution: replace the usleep_range(1000, 2000) by udelay(10) and
enlarge the loop counter.

logs:
[   50.643062] xhci_hcd 0000:01:00.0: Refused to change power state, currently in D3
[   50.653390]
[   50.654898] =========================================================
[   50.661343] [ INFO: possible irq lock inversion dependency detected ]
[   50.667792] 3.17.0-rc2-01341-gfc43ff7-dirty #101 Not tainted
[   50.673454] ---------------------------------------------------------
[   50.679898] kworker/u2:2/48 just changed the state of lock:
[   50.685477]  (pci_lock){+.....}, at: [<802d650c>] pci_bus_read_config_dword+0x44/0x94
[   50.693394] but this lock was taken by another, HARDIRQ-safe lock in the past:
[   50.700619]  (&irq_desc_lock_class){-.-...}

and interrupts could create inverse lock ordering between them.

[   50.710843]
[   50.710843] other info that might help us debug this:
[   50.717377]  Possible interrupt unsafe locking scenario:
[   50.717377]
[   50.724169]        CPU0                    CPU1
[   50.728702]        ----                    ----
[   50.733234]   lock(pci_lock);
[   50.736232]                                local_irq_disable();
[   50.742154]                                lock(&irq_desc_lock_class);
[   50.748713]                                lock(pci_lock);
[   50.754229]   <Interrupt>
[   50.756852]     lock(&irq_desc_lock_class);
[   50.761065]
[   50.761065]  *** DEADLOCK ***
...

[   52.119515] [<806e8ad0>] (schedule_hrtimeout_range) from [<80077e90>] (usleep_range+0x50/0x58)
[   52.128141] [<80077e40>] (usleep_range) from [<802f3694>] (imx6_pcie_link_up+0x48/0x16c)
[   52.136242] [<802f364c>] (imx6_pcie_link_up) from [<802f1b74>] (dw_pcie_valid_config.isra.10+0x40/0x7c)
[   52.145637]  r6:ae72606d r5:ae72606c r4:ae711228
[   52.150311] [<802f1b34>] (dw_pcie_valid_config.isra.10) from [<802f1ca8>] (dw_pcie_rd_conf+0x4c/0x154)
[   52.159620]  r7:00000000 r6:00000000 r5:ae711228 r4:ae726000
[   52.165355] [<802f1c5c>] (dw_pcie_rd_conf) from [<802d6534>] (pci_bus_read_config_dword+0x6c/0x94)
[   52.174316]  r9:adf4e910 r8:809bc51c r7:00000000 r6:60000153 r5:adc3fd5c r4:ae726000
[   52.182152] [<802d64c8>] (pci_bus_read_config_dword) from [<802db588>] (pci_restore_config_dword+0x54/0xa4)
[   52.191894]  r6:00000024 r5:0000000a r4:ae61e000
[   52.196570] [<802db534>] (pci_restore_config_dword) from [<802dd150>] (pci_restore_state.part.37+0x7c/0x1f8)
[   52.206399]  r8:802e086c r7:ae61dfe8 r6:519e2024 r5:ae61e000 r4:ae61dffc
[   52.213187] [<802dd0d4>] (pci_restore_state.part.37) from [<802dd2e8>] (pci_restore_state+0x1c/0x20)
[   52.222322]  r7:adc3fea8 r6:809d90e0 r5:ae61e000 r4:ae61e068
[   52.228056] [<802dd2cc>] (pci_restore_state) from [<802e0894>] (pci_pm_resume_noirq+0x28/0xa4)
[   52.236683] [<802e086c>] (pci_pm_resume_noirq) from [<8037ea1c>] (dpm_run_callback.isra.12+0x34/0x7c)

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

diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
index c74e87d..4334de6 100644
--- a/drivers/pci/host/pci-imx6.c
+++ b/drivers/pci/host/pci-imx6.c
@@ -519,7 +519,7 @@ static void imx6_pcie_reset_phy(struct pcie_port *pp)
 static int imx6_pcie_link_up(struct pcie_port *pp)
 {
 	u32 rc, debug_r0, rx_valid;
-	int count = 5;
+	int count = 500;
 
 	/*
 	 * Test if the PHY reports that the link is up and also that the LTSSM
@@ -550,7 +550,7 @@ static int imx6_pcie_link_up(struct pcie_port *pp)
 		 * Wait a little bit, then re-check if the link finished
 		 * the training.
 		 */
-		usleep_range(1000, 2000);
+		udelay(10);
 	}
 	/*
 	 * From L0, initiate MAC entry to gen2 if EP/RC supports gen2.
-- 
1.9.1


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

* [PATCH v4 04/10] PCI: designware: refine setup_rc and add msi data restore
  2014-09-30  9:36 [PATCH v4]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu
                   ` (2 preceding siblings ...)
  2014-09-30  9:36 ` [PATCH v4 03/10] PCI: imx6: Fix possible dead lock Richard Zhu
@ 2014-09-30  9:36 ` Richard Zhu
  2014-09-30 14:58   ` Lucas Stach
  2014-09-30  9:36 ` [PATCH v4 05/10] PCI: designware: fix one potential assignment error of cfg start Richard Zhu
                   ` (5 subsequent siblings)
  9 siblings, 1 reply; 23+ messages in thread
From: Richard Zhu @ 2014-09-30  9:36 UTC (permalink / raw)
  To: linux-pci-owner
  Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey, Richard Zhu

- move "program correct class for RC" from dw_pcie_host_init()
to dw_pcie_setup_rc(). since this is RC setup, it's
better to contained in dw_pcie_setup_rc function.
Then, RC can be re-setup really by dw_pcie_setup_rc().
- add one re-store msi data function. Because that
pcie controller maybe powered off during system suspend,
and the msi data configuration would be lost.
this functions can be used to restore the msi data
during the resume callback.

Signed-off-by: Richard Zhu <r65037@freescale.com>
---
 drivers/pci/host/pcie-designware.c | 15 ++++++++++++---
 drivers/pci/host/pcie-designware.h |  1 +
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/drivers/pci/host/pcie-designware.c b/drivers/pci/host/pcie-designware.c
index 538bbf3..ae1e6c5 100644
--- a/drivers/pci/host/pcie-designware.c
+++ b/drivers/pci/host/pcie-designware.c
@@ -194,6 +194,13 @@ void dw_pcie_msi_init(struct pcie_port *pp)
 	dw_pcie_wr_own_conf(pp, PCIE_MSI_ADDR_HI, 4, 0);
 }
 
+void dw_pcie_msi_cfg_restore(struct pcie_port *pp)
+{
+	dw_pcie_wr_own_conf(pp, PCIE_MSI_ADDR_LO, 4,
+			virt_to_phys((void *)pp->msi_data));
+	dw_pcie_wr_own_conf(pp, PCIE_MSI_ADDR_HI, 4, 0);
+}
+
 static int find_valid_pos0(struct pcie_port *pp, int msgvec, int pos, int *pos0)
 {
 	int flag = 1;
@@ -570,9 +577,6 @@ int __init dw_pcie_host_init(struct pcie_port *pp)
 
 	dw_pcie_wr_own_conf(pp, PCI_BASE_ADDRESS_0, 4, 0);
 
-	/* program correct class for RC */
-	dw_pcie_wr_own_conf(pp, PCI_CLASS_DEVICE, 2, PCI_CLASS_BRIDGE_PCI);
-
 	dw_pcie_rd_own_conf(pp, PCIE_LINK_WIDTH_SPEED_CONTROL, 4, &val);
 	val |= PORT_LOGIC_SPEED_CHANGE;
 	dw_pcie_wr_own_conf(pp, PCIE_LINK_WIDTH_SPEED_CONTROL, 4, val);
@@ -917,6 +921,11 @@ void dw_pcie_setup_rc(struct pcie_port *pp)
 	val = memlimit | membase;
 	dw_pcie_writel_rc(pp, val, PCI_MEMORY_BASE);
 
+	/* program correct class for RC */
+	dw_pcie_readl_rc(pp, PCI_CLASS_REVISION, &val);
+	val |= PCI_CLASS_BRIDGE_PCI << 16;
+	dw_pcie_writel_rc(pp, val, PCI_CLASS_REVISION);
+
 	/* setup command register */
 	dw_pcie_readl_rc(pp, PCI_COMMAND, &val);
 	val &= 0xffff0000;
diff --git a/drivers/pci/host/pcie-designware.h b/drivers/pci/host/pcie-designware.h
index a476e60..bb75715 100644
--- a/drivers/pci/host/pcie-designware.h
+++ b/drivers/pci/host/pcie-designware.h
@@ -83,6 +83,7 @@ int dw_pcie_cfg_read(void __iomem *addr, int where, int size, u32 *val);
 int dw_pcie_cfg_write(void __iomem *addr, int where, int size, u32 val);
 irqreturn_t dw_handle_msi_irq(struct pcie_port *pp);
 void dw_pcie_msi_init(struct pcie_port *pp);
+void dw_pcie_msi_cfg_restore(struct pcie_port *pp);
 int dw_pcie_link_up(struct pcie_port *pp);
 void dw_pcie_setup_rc(struct pcie_port *pp);
 int dw_pcie_host_init(struct pcie_port *pp);
-- 
1.9.1


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

* [PATCH v4 05/10] PCI: designware: fix one potential assignment error of cfg start
  2014-09-30  9:36 [PATCH v4]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu
                   ` (3 preceding siblings ...)
  2014-09-30  9:36 ` [PATCH v4 04/10] PCI: designware: refine setup_rc and add msi data restore Richard Zhu
@ 2014-09-30  9:36 ` Richard Zhu
  2014-09-30  9:36 ` [PATCH v4 06/10] ARM: imx6qdl: enable pcie on imx6qdl sabreauto Richard Zhu
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 23+ messages in thread
From: Richard Zhu @ 2014-09-30  9:36 UTC (permalink / raw)
  To: linux-pci-owner
  Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey, Richard Zhu

if va_cfg0_base/va_cfg1_base are initialized by
designware core, the pp->cfg.start is not initialized
properly, when IORESOURCE_MEM "config" is represented
as cfg space resource.
solution: assign cfg_res->start to pp->cfg.start.

Signed-off-by: Richard Zhu <r65037@freescale.com>
---
 drivers/pci/host/pcie-designware.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/pci/host/pcie-designware.c b/drivers/pci/host/pcie-designware.c
index ae1e6c5..f1f127f 100644
--- a/drivers/pci/host/pcie-designware.c
+++ b/drivers/pci/host/pcie-designware.c
@@ -444,6 +444,7 @@ int __init dw_pcie_host_init(struct pcie_port *pp)
 	if (cfg_res) {
 		pp->config.cfg0_size = resource_size(cfg_res)/2;
 		pp->config.cfg1_size = resource_size(cfg_res)/2;
+		pp->cfg.start = cfg_res->start;
 		pp->cfg0_base = cfg_res->start;
 		pp->cfg1_base = cfg_res->start + pp->config.cfg0_size;
 
-- 
1.9.1


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

* [PATCH v4 06/10] ARM: imx6qdl: enable pcie on imx6qdl sabreauto
  2014-09-30  9:36 [PATCH v4]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu
                   ` (4 preceding siblings ...)
  2014-09-30  9:36 ` [PATCH v4 05/10] PCI: designware: fix one potential assignment error of cfg start Richard Zhu
@ 2014-09-30  9:36 ` Richard Zhu
  2014-09-30  9:36 ` [PATCH v4 07/10] ARM: imx6: update dts and binding for imx6sx pcie Richard Zhu
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 23+ messages in thread
From: Richard Zhu @ 2014-09-30  9:36 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>
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>;
-- 
1.9.1


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

* [PATCH v4 07/10] ARM: imx6: update dts and binding for imx6sx pcie
  2014-09-30  9:36 [PATCH v4]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu
                   ` (5 preceding siblings ...)
  2014-09-30  9:36 ` [PATCH v4 06/10] ARM: imx6qdl: enable pcie on imx6qdl sabreauto Richard Zhu
@ 2014-09-30  9:36 ` Richard Zhu
  2014-09-30  9:36 ` [PATCH v4 08/10] ARM: imx6sx: add syscon into gpc dts Richard Zhu
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 23+ messages in thread
From: Richard Zhu @ 2014-09-30  9:36 UTC (permalink / raw)
  To: linux-pci-owner
  Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey, Richard Zhu

- imx6sx pcie phy has its own power regulator. Add the
pcie phy power suppy into im6sx pcie dts and binding.
- in order to align with imx6qdl's pcie dts, re-format
imx6sx pcie dts.
- in order to align with imx6qdl pcie dts format and
keep clean of imx6 pcie driver, keep the pcie phy clock
in imx6sx pcie dts, although it's the parent clk of the
pcie bus clock now, and would be enabled automatically
when pcie bus clock is enabled. secondly, it's
possible that the external osc maybe used as source
of the pcie_bus clk in board design in future.
- disp_axi clock is required by pcie inbound axi port.
Add one more clock named pcie_inbound_axi for imx6sx pcie.

Signed-off-by: Richard Zhu <r65037@freescale.com>
---
 .../devicetree/bindings/pci/fsl,imx6q-pcie.txt     |  8 +++++-
 arch/arm/boot/dts/imx6sx.dtsi                      | 32 ++++++++++++----------
 2 files changed, 25 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..ad81179 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.
@@ -13,6 +13,12 @@ Required properties:
 - clock-names: Must include the following additional entries:
 	- "pcie_phy"
 
+Additional required properties for imx6sx-pcie:
+- clock names: Must include the following additional entries:
+	- "pcie_inbound_axi"
+- power supplies:
+	- pcie-phy-supply: regulator used to power the PCIe PHY
+
 Example:
 
 	pcie@0x01000000 {
diff --git a/arch/arm/boot/dts/imx6sx.dtsi b/arch/arm/boot/dts/imx6sx.dtsi
index f4b9da6..eefedba 100644
--- a/arch/arm/boot/dts/imx6sx.dtsi
+++ b/arch/arm/boot/dts/imx6sx.dtsi
@@ -599,9 +599,9 @@
 					anatop-max-voltage = <1450000>;
 				};
 
-				reg_pcie: regulator-vddpcie@140 {
+				reg_pcie_phy: regulator-vddpcie-phy@140 {
 					compatible = "fsl,anatop-regulator";
-					regulator-name = "vddpcie";
+					regulator-name = "vddpcie-phy";
 					regulator-min-microvolt = <725000>;
 					regulator-max-microvolt = <1450000>;
 					anatop-reg-offset = <0x140>;
@@ -1184,24 +1184,28 @@
 
 		pcie: pcie@0x08000000 {
 			compatible = "fsl,imx6sx-pcie", "snps,dw-pcie";
-			reg = <0x08ffc000 0x4000>; /* DBI */
+			reg = <0x08ffc000 0x4000>, <0x08f00000 0x80000>;
+			reg-names = "rc_dbi", "config";
 			#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 = <0x81000000 0 0          0x08f80000 0 0x00010000 /* downstream I/O */
+				  0x82000000 0 0x08000000 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>,
+			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_LVDS1_OUT>,
+				 <&clks IMX6SX_CLK_PCIE_REF_125M>,
 				 <&clks IMX6SX_CLK_DISPLAY_AXI>;
-			clock-names = "pcie_ref_125m", "pcie_axi",
-				      "lvds_gate", "display_axi";
+			clock-names = "pcie", "pcie_bus", "pcie_phy", "pcie_inbound_axi";
+			pcie-phy-supply = <&reg_pcie_phy>;
 			status = "disabled";
 		};
 	};
-- 
1.9.1


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

* [PATCH v4 08/10] ARM: imx6sx: add syscon into gpc dts
  2014-09-30  9:36 [PATCH v4]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu
                   ` (6 preceding siblings ...)
  2014-09-30  9:36 ` [PATCH v4 07/10] ARM: imx6: update dts and binding for imx6sx pcie Richard Zhu
@ 2014-09-30  9:36 ` Richard Zhu
  2014-09-30  9:36 ` [PATCH v4 09/10] ARM: imx6sx: add imx6sx pcie related gpr bits definitions Richard Zhu
  2014-09-30  9:36 ` [PATCH v4 10/10] ARM: imx6sx: enable pcie on imx6sx sdb board Richard Zhu
  9 siblings, 0 replies; 23+ messages in thread
From: Richard Zhu @ 2014-09-30  9:36 UTC (permalink / raw)
  To: linux-pci-owner
  Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey, Richard Zhu

In order to manipulate gpc bits for imx6sx
pcie in driver, add syscon into gpc dts

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

diff --git a/arch/arm/boot/dts/imx6sx.dtsi b/arch/arm/boot/dts/imx6sx.dtsi
index eefedba..0c3822e 100644
--- a/arch/arm/boot/dts/imx6sx.dtsi
+++ b/arch/arm/boot/dts/imx6sx.dtsi
@@ -689,7 +689,8 @@
 			};
 
 			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>;
 			};
-- 
1.9.1


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

* [PATCH v4 09/10] ARM: imx6sx: add imx6sx pcie related gpr bits definitions
  2014-09-30  9:36 [PATCH v4]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu
                   ` (7 preceding siblings ...)
  2014-09-30  9:36 ` [PATCH v4 08/10] ARM: imx6sx: add syscon into gpc dts Richard Zhu
@ 2014-09-30  9:36 ` Richard Zhu
  2014-09-30  9:36 ` [PATCH v4 10/10] ARM: imx6sx: enable pcie on imx6sx sdb board Richard Zhu
  9 siblings, 0 replies; 23+ messages in thread
From: Richard Zhu @ 2014-09-30  9:36 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 | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
index ff44374..3273b87 100644
--- a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
+++ b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
@@ -301,6 +301,7 @@
 #define IMX6Q_GPR12_DEVICE_TYPE			(0xf << 12)
 #define IMX6Q_GPR12_PCIE_CTL_2			BIT(10)
 #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 +396,12 @@
 #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_PERST			BIT(18)
+
+#define IMX6SX_GPR12_PCIE_PM_TURN_OFF		BIT(16)
+#define IMX6SX_GPR12_PCIE_TEST_PD		BIT(30)
+#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] 23+ messages in thread

* [PATCH v4 10/10] ARM: imx6sx: enable pcie on imx6sx sdb board
  2014-09-30  9:36 [PATCH v4]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu
                   ` (8 preceding siblings ...)
  2014-09-30  9:36 ` [PATCH v4 09/10] ARM: imx6sx: add imx6sx pcie related gpr bits definitions Richard Zhu
@ 2014-09-30  9:36 ` Richard Zhu
  2014-09-30 16:21   ` Fabio Estevam
  9 siblings, 1 reply; 23+ messages in thread
From: Richard Zhu @ 2014-09-30  9:36 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>
---
 arch/arm/boot/dts/imx6sx-sdb.dts | 13 +++++++++++++
 1 file changed, 13 insertions(+)

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
-- 
1.9.1


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

* Re: [PATCH v4 02/10] PCI: imx6: add imx6sx pcie support
  2014-09-30  9:36 ` [PATCH v4 02/10] PCI: imx6: add imx6sx pcie support Richard Zhu
@ 2014-09-30 14:54   ` Lucas Stach
  2014-10-02  2:38     ` Hong-Xing.Zhu
  0 siblings, 1 reply; 23+ messages in thread
From: Lucas Stach @ 2014-09-30 14:54 UTC (permalink / raw)
  To: Richard Zhu; +Cc: linux-pci-owner, linux-pci, shawn.guo, festevam, tharvey

Am Dienstag, den 30.09.2014, 17:36 +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.
> - disp_axi clock is required by pcie inbound axi port actually.
> Add one more clock named pcie_inbound_axi for imx6sx pcie.
> 
> Signed-off-by: Richard Zhu <r65037@freescale.com>
> ---
>  drivers/pci/host/pci-imx6.c | 163 ++++++++++++++++++++++++++++++++++++++------
>  1 file changed, 144 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
> index eac96fb..c74e87d 100644
> --- a/drivers/pci/host/pci-imx6.c
> +++ b/drivers/pci/host/pci-imx6.c
> @@ -22,8 +22,10 @@
>  #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>
>  
> @@ -35,11 +37,15 @@ struct imx6_pcie {
>  	int			reset_gpio;
>  	struct clk		*pcie_bus;
>  	struct clk		*pcie_phy;
> +	struct clk		*pcie_inbound_axi;
>  	struct clk		*pcie;
>  	struct pcie_port	pp;
>  	struct regmap		*iomuxc_gpr;
> +	struct regmap		*gpc_ips_reg;
> +	struct regulator	*pcie_regulator;

I would expect this to be named pcie_phy_regulator.

>  	void __iomem		*mem_base;
>  };
> +static struct imx6_pcie *imx6_pcie;

No. This is just bad style. You have the pointer available embedded in
other structures at all relevant places. No global statics please.

>  
>  /* PCIe Root Complex registers (memory-mapped) */
>  #define PCIE_RC_LCR				0x7c
> @@ -77,6 +83,18 @@ 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)
>  
> +/* GPC PCIE PHY bit definitions */
> +#define GPC_CNTR			0
> +#define GPC_CNTR_PCIE_PHY_PUP_REQ	BIT(7)
> +
> +static inline bool is_imx6sx_pcie(struct imx6_pcie *imx6_pcie)
> +{
> +	struct pcie_port *pp = &imx6_pcie->pp;
> +	struct device_node *np = pp->dev->of_node;
> +
> +	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,18 +293,29 @@ 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);
> -	/*
> -	 * the async reset input need ref clock to sync internally,
> -	 * when the ref clock comes after reset, internal synced
> -	 * reset time is too short , cannot meet the requirement.
> -	 * add one ~10us delay here.
> -	 */
> -	udelay(10);
> -	regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
> -			IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16);
> +	if (is_imx6sx_pcie(imx6_pcie)) {
> +		ret = clk_prepare_enable(imx6_pcie->pcie_inbound_axi);
> +		if (ret) {
> +			dev_err(pp->dev, "unable to enable pcie clock\n");
> +			goto err_inbound_axi;
> +		}
> +
> +		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
> +				IMX6SX_GPR12_PCIE_TEST_PD, 0);
> +	} else {
> +		/* power up core phy and enable ref clock */
> +		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
> +				IMX6Q_GPR1_PCIE_TEST_PD, 0);
> +		/*
> +		 * the async reset input need ref clock to sync internally,
> +		 * when the ref clock comes after reset, internal synced
> +		 * reset time is too short , cannot meet the requirement.
> +		 * add one ~10us delay here.
> +		 */
> +		udelay(10);
> +		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);
> @@ -297,8 +326,19 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp)
>  		msleep(100);
>  		gpio_set_value(imx6_pcie->reset_gpio, 1);
>  	}
> +
> +	/*
> +	 * Release the PCIe PHY reset here, 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, 0);
> +
>  	return 0;
>  
> +err_inbound_axi:
> +	clk_disable_unprepare(imx6_pcie->pcie);
>  err_pcie:
>  	clk_disable_unprepare(imx6_pcie->pcie_bus);
>  err_pcie_bus:
> @@ -311,6 +351,26 @@ err_pcie_phy:
>  static void imx6_pcie_init_phy(struct pcie_port *pp)
>  {
>  	struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp);
> +	int ret;
> +
> +	/* 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, GPC_CNTR,
> +				GPC_CNTR_PCIE_PHY_PUP_REQ,
> +				GPC_CNTR_PCIE_PHY_PUP_REQ);
> +		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);
> @@ -319,7 +379,7 @@ static void imx6_pcie_init_phy(struct pcie_port *pp)
>  	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);
> @@ -377,7 +437,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)
> @@ -553,9 +614,50 @@ static int __init imx6_add_pcie_port(struct pcie_port *pp,
>  	return 0;
>  }
>  
> +#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,
> +				IMX6SX_GPR12_PCIE_PM_TURN_OFF,
> +				IMX6SX_GPR12_PCIE_PM_TURN_OFF);
> +		udelay(10);
> +		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
> +				IMX6SX_GPR12_PCIE_PM_TURN_OFF, 0);
> +	}
> +
> +	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,
> +				IMX6SX_GPR5_PCIE_PERST, IMX6SX_GPR5_PCIE_PERST);
> +		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR5,
> +				IMX6SX_GPR5_PCIE_PERST, 0);
> +		/*
> +		 * controller maybe turn off, re-configure again
> +		 */
> +		dw_pcie_setup_rc(pp);
> +
> +		if (IS_ENABLED(CONFIG_PCI_MSI))
> +			dw_pcie_msi_cfg_restore(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;
>  	struct device_node *np = pdev->dev.of_node;
>  	struct resource *dbi_base;
> @@ -572,7 +674,7 @@ static int __init imx6_pcie_probe(struct platform_device *pdev)
>  	hook_fault_code(16 + 6, imx6q_pcie_abort_handler, SIGBUS, 0,
>  		"imprecise external abort");
>  
> -	dbi_base = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> +	dbi_base = platform_get_resource_byname(pdev, IORESOURCE_MEM, "rc_dbi");

You are breaking old devicetrees here. "rc_dbi" isn't a documented name
and isn't available on old DTs. Besides the imx6q DT uses just "dbi" as
the name. Don't touch this code, it does exactly the right thing by
grabbing the first reg resource.

>  	pp->dbi_base = devm_ioremap_resource(&pdev->dev, dbi_base);
>  	if (IS_ERR(pp->dbi_base))
>  		return PTR_ERR(pp->dbi_base);
> @@ -610,9 +712,28 @@ 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_inbound_axi = devm_clk_get(&pdev->dev,
> +				"pcie_inbound_axi");
> +		if (IS_ERR(imx6_pcie->pcie_inbound_axi)) {
> +			dev_err(&pdev->dev,
> +				"pcie clock source missing or invalid\n");
> +			return PTR_ERR(imx6_pcie->pcie_inbound_axi);
> +		}
> +
> +		imx6_pcie->pcie_regulator = devm_regulator_get(pp->dev,
> +				"pcie-phy");
> +
> +		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);
> @@ -623,6 +744,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;
>  }
>  
> @@ -636,6 +760,7 @@ static void imx6_pcie_shutdown(struct platform_device *pdev)
>  
>  static const struct of_device_id imx6_pcie_of_match[] = {
>  	{ .compatible = "fsl,imx6q-pcie", },
> +	{ .compatible = "fsl,imx6sx-pcie", },
>  	{},
>  };
>  MODULE_DEVICE_TABLE(of, imx6_pcie_of_match);

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


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

* Re: [PATCH v4 03/10] PCI: imx6: Fix possible dead lock
  2014-09-30  9:36 ` [PATCH v4 03/10] PCI: imx6: Fix possible dead lock Richard Zhu
@ 2014-09-30 14:57   ` Lucas Stach
  0 siblings, 0 replies; 23+ messages in thread
From: Lucas Stach @ 2014-09-30 14:57 UTC (permalink / raw)
  To: Richard Zhu; +Cc: linux-pci-owner, linux-pci, shawn.guo, festevam, tharvey

Am Dienstag, den 30.09.2014, 17:36 +0800 schrieb Richard Zhu:
> kernel report one possible dead lock during imx6sx pcie
> suspend resume stress tests, after enable Lock Debugging.
> platform: imx6sx sdb board + xhci(pcie2usb3.0 ep)
> 
> reason: usleep_range used in imx6_pcie_link_up maybe scheduled
> out from dw_pcie_valid_config.isra...
> About details, please see the following logs.
> 
> solution: replace the usleep_range(1000, 2000) by udelay(10) and
> enlarge the loop counter.
> 
> logs:
> [   50.643062] xhci_hcd 0000:01:00.0: Refused to change power state, currently in D3
> [   50.653390]
> [   50.654898] =========================================================
> [   50.661343] [ INFO: possible irq lock inversion dependency detected ]
> [   50.667792] 3.17.0-rc2-01341-gfc43ff7-dirty #101 Not tainted
> [   50.673454] ---------------------------------------------------------
> [   50.679898] kworker/u2:2/48 just changed the state of lock:
> [   50.685477]  (pci_lock){+.....}, at: [<802d650c>] pci_bus_read_config_dword+0x44/0x94
> [   50.693394] but this lock was taken by another, HARDIRQ-safe lock in the past:
> [   50.700619]  (&irq_desc_lock_class){-.-...}
> 
> and interrupts could create inverse lock ordering between them.
> 
> [   50.710843]
> [   50.710843] other info that might help us debug this:
> [   50.717377]  Possible interrupt unsafe locking scenario:
> [   50.717377]
> [   50.724169]        CPU0                    CPU1
> [   50.728702]        ----                    ----
> [   50.733234]   lock(pci_lock);
> [   50.736232]                                local_irq_disable();
> [   50.742154]                                lock(&irq_desc_lock_class);
> [   50.748713]                                lock(pci_lock);
> [   50.754229]   <Interrupt>
> [   50.756852]     lock(&irq_desc_lock_class);
> [   50.761065]
> [   50.761065]  *** DEADLOCK ***
> ...
> 
> [   52.119515] [<806e8ad0>] (schedule_hrtimeout_range) from [<80077e90>] (usleep_range+0x50/0x58)
> [   52.128141] [<80077e40>] (usleep_range) from [<802f3694>] (imx6_pcie_link_up+0x48/0x16c)
> [   52.136242] [<802f364c>] (imx6_pcie_link_up) from [<802f1b74>] (dw_pcie_valid_config.isra.10+0x40/0x7c)
> [   52.145637]  r6:ae72606d r5:ae72606c r4:ae711228
> [   52.150311] [<802f1b34>] (dw_pcie_valid_config.isra.10) from [<802f1ca8>] (dw_pcie_rd_conf+0x4c/0x154)
> [   52.159620]  r7:00000000 r6:00000000 r5:ae711228 r4:ae726000
> [   52.165355] [<802f1c5c>] (dw_pcie_rd_conf) from [<802d6534>] (pci_bus_read_config_dword+0x6c/0x94)
> [   52.174316]  r9:adf4e910 r8:809bc51c r7:00000000 r6:60000153 r5:adc3fd5c r4:ae726000
> [   52.182152] [<802d64c8>] (pci_bus_read_config_dword) from [<802db588>] (pci_restore_config_dword+0x54/0xa4)
> [   52.191894]  r6:00000024 r5:0000000a r4:ae61e000
> [   52.196570] [<802db534>] (pci_restore_config_dword) from [<802dd150>] (pci_restore_state.part.37+0x7c/0x1f8)
> [   52.206399]  r8:802e086c r7:ae61dfe8 r6:519e2024 r5:ae61e000 r4:ae61dffc
> [   52.213187] [<802dd0d4>] (pci_restore_state.part.37) from [<802dd2e8>] (pci_restore_state+0x1c/0x20)
> [   52.222322]  r7:adc3fea8 r6:809d90e0 r5:ae61e000 r4:ae61e068
> [   52.228056] [<802dd2cc>] (pci_restore_state) from [<802e0894>] (pci_pm_resume_noirq+0x28/0xa4)
> [   52.236683] [<802e086c>] (pci_pm_resume_noirq) from [<8037ea1c>] (dpm_run_callback.isra.12+0x34/0x7c)
> 
> Signed-off-by: Richard Zhu <r65037@freescale.com>

NACK. I don't like this spinning with the CPU and you are now possibly
dumping 500 debug prints into the logs until you reach the timeout.
Please remove this patch from this series. It has nothing to do with the
imx6sx support and I'll try to post a (hopefully) better patch shortly.

> ---
>  drivers/pci/host/pci-imx6.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
> index c74e87d..4334de6 100644
> --- a/drivers/pci/host/pci-imx6.c
> +++ b/drivers/pci/host/pci-imx6.c
> @@ -519,7 +519,7 @@ static void imx6_pcie_reset_phy(struct pcie_port *pp)
>  static int imx6_pcie_link_up(struct pcie_port *pp)
>  {
>  	u32 rc, debug_r0, rx_valid;
> -	int count = 5;
> +	int count = 500;
>  
>  	/*
>  	 * Test if the PHY reports that the link is up and also that the LTSSM
> @@ -550,7 +550,7 @@ static int imx6_pcie_link_up(struct pcie_port *pp)
>  		 * Wait a little bit, then re-check if the link finished
>  		 * the training.
>  		 */
> -		usleep_range(1000, 2000);
> +		udelay(10);
>  	}
>  	/*
>  	 * From L0, initiate MAC entry to gen2 if EP/RC supports gen2.

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


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

* Re: [PATCH v4 04/10] PCI: designware: refine setup_rc and add msi data restore
  2014-09-30  9:36 ` [PATCH v4 04/10] PCI: designware: refine setup_rc and add msi data restore Richard Zhu
@ 2014-09-30 14:58   ` Lucas Stach
  2014-10-08  6:45     ` Hong-Xing.Zhu
  0 siblings, 1 reply; 23+ messages in thread
From: Lucas Stach @ 2014-09-30 14:58 UTC (permalink / raw)
  To: Richard Zhu; +Cc: linux-pci-owner, linux-pci, shawn.guo, festevam, tharvey

Am Dienstag, den 30.09.2014, 17:36 +0800 schrieb Richard Zhu:
> - move "program correct class for RC" from dw_pcie_host_init()
> to dw_pcie_setup_rc(). since this is RC setup, it's
> better to contained in dw_pcie_setup_rc function.
> Then, RC can be re-setup really by dw_pcie_setup_rc().
> - add one re-store msi data function. Because that
> pcie controller maybe powered off during system suspend,
> and the msi data configuration would be lost.
> this functions can be used to restore the msi data
> during the resume callback.
> 
> Signed-off-by: Richard Zhu <r65037@freescale.com>

NACK. I asked you to split this patch and move it before the imx6 pcie
changes in the series in order to not break compilation within the
series.

> ---
>  drivers/pci/host/pcie-designware.c | 15 ++++++++++++---
>  drivers/pci/host/pcie-designware.h |  1 +
>  2 files changed, 13 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/pci/host/pcie-designware.c b/drivers/pci/host/pcie-designware.c
> index 538bbf3..ae1e6c5 100644
> --- a/drivers/pci/host/pcie-designware.c
> +++ b/drivers/pci/host/pcie-designware.c
> @@ -194,6 +194,13 @@ void dw_pcie_msi_init(struct pcie_port *pp)
>  	dw_pcie_wr_own_conf(pp, PCIE_MSI_ADDR_HI, 4, 0);
>  }
>  
> +void dw_pcie_msi_cfg_restore(struct pcie_port *pp)
> +{
> +	dw_pcie_wr_own_conf(pp, PCIE_MSI_ADDR_LO, 4,
> +			virt_to_phys((void *)pp->msi_data));
> +	dw_pcie_wr_own_conf(pp, PCIE_MSI_ADDR_HI, 4, 0);
> +}
> +
>  static int find_valid_pos0(struct pcie_port *pp, int msgvec, int pos, int *pos0)
>  {
>  	int flag = 1;
> @@ -570,9 +577,6 @@ int __init dw_pcie_host_init(struct pcie_port *pp)
>  
>  	dw_pcie_wr_own_conf(pp, PCI_BASE_ADDRESS_0, 4, 0);
>  
> -	/* program correct class for RC */
> -	dw_pcie_wr_own_conf(pp, PCI_CLASS_DEVICE, 2, PCI_CLASS_BRIDGE_PCI);
> -
>  	dw_pcie_rd_own_conf(pp, PCIE_LINK_WIDTH_SPEED_CONTROL, 4, &val);
>  	val |= PORT_LOGIC_SPEED_CHANGE;
>  	dw_pcie_wr_own_conf(pp, PCIE_LINK_WIDTH_SPEED_CONTROL, 4, val);
> @@ -917,6 +921,11 @@ void dw_pcie_setup_rc(struct pcie_port *pp)
>  	val = memlimit | membase;
>  	dw_pcie_writel_rc(pp, val, PCI_MEMORY_BASE);
>  
> +	/* program correct class for RC */
> +	dw_pcie_readl_rc(pp, PCI_CLASS_REVISION, &val);
> +	val |= PCI_CLASS_BRIDGE_PCI << 16;
> +	dw_pcie_writel_rc(pp, val, PCI_CLASS_REVISION);
> +
>  	/* setup command register */
>  	dw_pcie_readl_rc(pp, PCI_COMMAND, &val);
>  	val &= 0xffff0000;
> diff --git a/drivers/pci/host/pcie-designware.h b/drivers/pci/host/pcie-designware.h
> index a476e60..bb75715 100644
> --- a/drivers/pci/host/pcie-designware.h
> +++ b/drivers/pci/host/pcie-designware.h
> @@ -83,6 +83,7 @@ int dw_pcie_cfg_read(void __iomem *addr, int where, int size, u32 *val);
>  int dw_pcie_cfg_write(void __iomem *addr, int where, int size, u32 val);
>  irqreturn_t dw_handle_msi_irq(struct pcie_port *pp);
>  void dw_pcie_msi_init(struct pcie_port *pp);
> +void dw_pcie_msi_cfg_restore(struct pcie_port *pp);
>  int dw_pcie_link_up(struct pcie_port *pp);
>  void dw_pcie_setup_rc(struct pcie_port *pp);
>  int dw_pcie_host_init(struct pcie_port *pp);

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


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

* Re: [PATCH v4 10/10] ARM: imx6sx: enable pcie on imx6sx sdb board
  2014-09-30  9:36 ` [PATCH v4 10/10] ARM: imx6sx: enable pcie on imx6sx sdb board Richard Zhu
@ 2014-09-30 16:21   ` Fabio Estevam
  2014-10-02  2:40     ` Hong-Xing.Zhu
  0 siblings, 1 reply; 23+ messages in thread
From: Fabio Estevam @ 2014-09-30 16:21 UTC (permalink / raw)
  To: Richard Zhu
  Cc: linux-pci-owner, linux-pci, Shawn Guo, Lucas Stach, Tim Harvey

Hi Richard,

On Tue, Sep 30, 2014 at 6:36 AM, Richard Zhu <r65037@freescale.com> wrote:
> Signed-off-by: Richard Zhu <r65037@freescale.com>
> ---
>  arch/arm/boot/dts/imx6sx-sdb.dts | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
>
> 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";
> +};

There is also GPIO2_1 which is the PCIE_PWR_EN signal and should be
added as a GPIO controlled regulator.

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

* Re: [PATCH v4 02/10] PCI: imx6: add imx6sx pcie support
  2014-09-30 14:54   ` Lucas Stach
@ 2014-10-02  2:38     ` Hong-Xing.Zhu
  2014-10-08  7:30       ` Hong-Xing.Zhu
  0 siblings, 1 reply; 23+ messages in thread
From: Hong-Xing.Zhu @ 2014-10-02  2:38 UTC (permalink / raw)
  To: Lucas Stach
  Cc: Hong-Xing.Zhu, linux-pci-owner, linux-pci, Shengchao Guo,
	festevam, tharvey

DQoNCg0KPiDU2iAyMDE0xOo51MIzMMjVo6zPws7nMTA6NTSjrCJMdWNhcyBTdGFjaCIgPGwuc3Rh
Y2hAcGVuZ3V0cm9uaXguZGU+INC0tcCjug0KPiANCj4gQW0gRGllbnN0YWcsIGRlbiAzMC4wOS4y
MDE0LCAxNzozNiArMDgwMCBzY2hyaWViIFJpY2hhcmQgWmh1Og0KPj4gLSBpbXg2c3ggcGNpZSBo
YXMgaXRzIG93biBzdGFuZGFsb25lIHBjaWUgcG93ZXIgc3VwcGx5Lg0KPj4gSW4gb3JkZXIgdG8g
dHVybiBvbiB0aGUgaW14NnN4IHBjaWUgcG93ZXIgZHVyaW5nDQo+PiBpbml0aWFsaXphdGlvbi4g
QWRkIHRoZSBwY2llIHJlZ3VsYXRvciBhbmQgdGhlIGdwYyByZWdtYXANCj4+IGludG8gdGhlIGlt
eDZzeCBwY2llIHN0cnVjdHVyZS4NCj4+IC0gaW14NnN4IHBjaWUgaGFzIHRoZSBuZXcgYWRkZWQg
cmVzZXQgbWVjaGFuaXNtLCBhZGQgdGhlDQo+PiByZXNldCBvcGVyYXRpb25zIGludG8gdGhlIGlu
aXRpYWxpemF0aW9uLg0KPj4gLSBSZWdpc3RlciBvbmUgUE0gY2FsbC1iYWNrLCBlbnRlci9leGl0
IEwyIHN0YXRlIG9mIHRoZSBBU1BNDQo+PiBkdXJpbmcgc3lzdGVtIHN1c3BlbmQvcmVzdW1lLg0K
Pj4gLSBkaXNwX2F4aSBjbG9jayBpcyByZXF1aXJlZCBieSBwY2llIGluYm91bmQgYXhpIHBvcnQg
YWN0dWFsbHkuDQo+PiBBZGQgb25lIG1vcmUgY2xvY2sgbmFtZWQgcGNpZV9pbmJvdW5kX2F4aSBm
b3IgaW14NnN4IHBjaWUuDQo+PiANCj4+IFNpZ25lZC1vZmYtYnk6IFJpY2hhcmQgWmh1IDxyNjUw
MzdAZnJlZXNjYWxlLmNvbT4NCj4+IC0tLQ0KPj4gZHJpdmVycy9wY2kvaG9zdC9wY2ktaW14Ni5j
IHwgMTYzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tDQo+PiAx
IGZpbGUgY2hhbmdlZCwgMTQ0IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQ0KPj4gDQo+
PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9wY2ktaW14Ni5jIGIvZHJpdmVycy9wY2kv
aG9zdC9wY2ktaW14Ni5jDQo+PiBpbmRleCBlYWM5NmZiLi5jNzRlODdkIDEwMDY0NA0KPj4gLS0t
IGEvZHJpdmVycy9wY2kvaG9zdC9wY2ktaW14Ni5jDQo+PiArKysgYi9kcml2ZXJzL3BjaS9ob3N0
L3BjaS1pbXg2LmMNCj4+IEBAIC0yMiw4ICsyMiwxMCBAQA0KPj4gI2luY2x1ZGUgPGxpbnV4L3Bj
aS5oPg0KPj4gI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPj4gI2luY2x1ZGUg
PGxpbnV4L3JlZ21hcC5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIu
aD4NCj4+ICNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZS5oPg0KPj4gI2luY2x1ZGUgPGxpbnV4L3Np
Z25hbC5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPg0KPj4gI2luY2x1ZGUg
PGxpbnV4L3R5cGVzLmg+DQo+PiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+PiANCj4+
IEBAIC0zNSwxMSArMzcsMTUgQEAgc3RydWN0IGlteDZfcGNpZSB7DQo+PiAgICBpbnQgICAgICAg
ICAgICByZXNldF9ncGlvOw0KPj4gICAgc3RydWN0IGNsayAgICAgICAgKnBjaWVfYnVzOw0KPj4g
ICAgc3RydWN0IGNsayAgICAgICAgKnBjaWVfcGh5Ow0KPj4gKyAgICBzdHJ1Y3QgY2xrICAgICAg
ICAqcGNpZV9pbmJvdW5kX2F4aTsNCj4+ICAgIHN0cnVjdCBjbGsgICAgICAgICpwY2llOw0KPj4g
ICAgc3RydWN0IHBjaWVfcG9ydCAgICBwcDsNCj4+ICAgIHN0cnVjdCByZWdtYXAgICAgICAgICpp
b211eGNfZ3ByOw0KPj4gKyAgICBzdHJ1Y3QgcmVnbWFwICAgICAgICAqZ3BjX2lwc19yZWc7DQo+
PiArICAgIHN0cnVjdCByZWd1bGF0b3IgICAgKnBjaWVfcmVndWxhdG9yOw0KPiANCj4gSSB3b3Vs
ZCBleHBlY3QgdGhpcyB0byBiZSBuYW1lZCBwY2llX3BoeV9yZWd1bGF0b3IuDQpPay4NCj4gDQo+
PiAgICB2b2lkIF9faW9tZW0gICAgICAgICptZW1fYmFzZTsNCj4+IH07DQo+PiArc3RhdGljIHN0
cnVjdCBpbXg2X3BjaWUgKmlteDZfcGNpZTsNCj4gDQo+IE5vLiBUaGlzIGlzIGp1c3QgYmFkIHN0
eWxlLiBZb3UgaGF2ZSB0aGUgcG9pbnRlciBhdmFpbGFibGUgZW1iZWRkZWQgaW4NCj4gb3RoZXIg
c3RydWN0dXJlcyBhdCBhbGwgcmVsZXZhbnQgcGxhY2VzLiBObyBnbG9iYWwgc3RhdGljcyBwbGVh
c2UuDQpPay4NCj4gDQo+PiANCj4+IC8qIFBDSWUgUm9vdCBDb21wbGV4IHJlZ2lzdGVycyAobWVt
b3J5LW1hcHBlZCkgKi8NCj4+ICNkZWZpbmUgUENJRV9SQ19MQ1IgICAgICAgICAgICAgICAgMHg3
Yw0KPj4gQEAgLTc3LDYgKzgzLDE4IEBAIHN0cnVjdCBpbXg2X3BjaWUgew0KPj4gI2RlZmluZSBQ
SFlfUlhfT1ZSRF9JTl9MT19SWF9EQVRBX0VOICgxIDw8IDUpDQo+PiAjZGVmaW5lIFBIWV9SWF9P
VlJEX0lOX0xPX1JYX1BMTF9FTiAoMSA8PCAzKQ0KPj4gDQo+PiArLyogR1BDIFBDSUUgUEhZIGJp
dCBkZWZpbml0aW9ucyAqLw0KPj4gKyNkZWZpbmUgR1BDX0NOVFIgICAgICAgICAgICAwDQo+PiAr
I2RlZmluZSBHUENfQ05UUl9QQ0lFX1BIWV9QVVBfUkVRICAgIEJJVCg3KQ0KPj4gKw0KPj4gK3N0
YXRpYyBpbmxpbmUgYm9vbCBpc19pbXg2c3hfcGNpZShzdHJ1Y3QgaW14Nl9wY2llICppbXg2X3Bj
aWUpDQo+PiArew0KPj4gKyAgICBzdHJ1Y3QgcGNpZV9wb3J0ICpwcCA9ICZpbXg2X3BjaWUtPnBw
Ow0KPj4gKyAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcHAtPmRldi0+b2Zfbm9kZTsNCj4+
ICsNCj4+ICsgICAgcmV0dXJuIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLGlteDZz
eC1wY2llIik7DQo+PiArfQ0KPj4gKw0KPj4gc3RhdGljIGludCBwY2llX3BoeV9wb2xsX2Fjayh2
b2lkIF9faW9tZW0gKmRiaV9iYXNlLCBpbnQgZXhwX3ZhbCkNCj4+IHsNCj4+ICAgIHUzMiB2YWw7
DQo+PiBAQCAtMjc1LDE4ICsyOTMsMjkgQEAgc3RhdGljIGludCBpbXg2X3BjaWVfZGVhc3NlcnRf
Y29yZV9yZXNldChzdHJ1Y3QgcGNpZV9wb3J0ICpwcCkNCj4+ICAgICAgICBnb3RvIGVycl9wY2ll
Ow0KPj4gICAgfQ0KPj4gDQo+PiAtICAgIC8qIHBvd2VyIHVwIGNvcmUgcGh5IGFuZCBlbmFibGUg
cmVmIGNsb2NrICovDQo+PiAtICAgIHJlZ21hcF91cGRhdGVfYml0cyhpbXg2X3BjaWUtPmlvbXV4
Y19ncHIsIElPTVVYQ19HUFIxLA0KPj4gLSAgICAgICAgICAgIElNWDZRX0dQUjFfUENJRV9URVNU
X1BELCAwIDw8IDE4KTsNCj4+IC0gICAgLyoNCj4+IC0gICAgICogdGhlIGFzeW5jIHJlc2V0IGlu
cHV0IG5lZWQgcmVmIGNsb2NrIHRvIHN5bmMgaW50ZXJuYWxseSwNCj4+IC0gICAgICogd2hlbiB0
aGUgcmVmIGNsb2NrIGNvbWVzIGFmdGVyIHJlc2V0LCBpbnRlcm5hbCBzeW5jZWQNCj4+IC0gICAg
ICogcmVzZXQgdGltZSBpcyB0b28gc2hvcnQgLCBjYW5ub3QgbWVldCB0aGUgcmVxdWlyZW1lbnQu
DQo+PiAtICAgICAqIGFkZCBvbmUgfjEwdXMgZGVsYXkgaGVyZS4NCj4+IC0gICAgICovDQo+PiAt
ICAgIHVkZWxheSgxMCk7DQo+PiAtICAgIHJlZ21hcF91cGRhdGVfYml0cyhpbXg2X3BjaWUtPmlv
bXV4Y19ncHIsIElPTVVYQ19HUFIxLA0KPj4gLSAgICAgICAgICAgIElNWDZRX0dQUjFfUENJRV9S
RUZfQ0xLX0VOLCAxIDw8IDE2KTsNCj4+ICsgICAgaWYgKGlzX2lteDZzeF9wY2llKGlteDZfcGNp
ZSkpIHsNCj4+ICsgICAgICAgIHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpbXg2X3BjaWUtPnBj
aWVfaW5ib3VuZF9heGkpOw0KPj4gKyAgICAgICAgaWYgKHJldCkgew0KPj4gKyAgICAgICAgICAg
IGRldl9lcnIocHAtPmRldiwgInVuYWJsZSB0byBlbmFibGUgcGNpZSBjbG9ja1xuIik7DQo+PiAr
ICAgICAgICAgICAgZ290byBlcnJfaW5ib3VuZF9heGk7DQo+PiArICAgICAgICB9DQo+PiArDQo+
PiArICAgICAgICByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLCBJT01V
WENfR1BSMTIsDQo+PiArICAgICAgICAgICAgICAgIElNWDZTWF9HUFIxMl9QQ0lFX1RFU1RfUEQs
IDApOw0KPj4gKyAgICB9IGVsc2Ugew0KPj4gKyAgICAgICAgLyogcG93ZXIgdXAgY29yZSBwaHkg
YW5kIGVuYWJsZSByZWYgY2xvY2sgKi8NCj4+ICsgICAgICAgIHJlZ21hcF91cGRhdGVfYml0cyhp
bXg2X3BjaWUtPmlvbXV4Y19ncHIsIElPTVVYQ19HUFIxLA0KPj4gKyAgICAgICAgICAgICAgICBJ
TVg2UV9HUFIxX1BDSUVfVEVTVF9QRCwgMCk7DQo+PiArICAgICAgICAvKg0KPj4gKyAgICAgICAg
ICogdGhlIGFzeW5jIHJlc2V0IGlucHV0IG5lZWQgcmVmIGNsb2NrIHRvIHN5bmMgaW50ZXJuYWxs
eSwNCj4+ICsgICAgICAgICAqIHdoZW4gdGhlIHJlZiBjbG9jayBjb21lcyBhZnRlciByZXNldCwg
aW50ZXJuYWwgc3luY2VkDQo+PiArICAgICAgICAgKiByZXNldCB0aW1lIGlzIHRvbyBzaG9ydCAs
IGNhbm5vdCBtZWV0IHRoZSByZXF1aXJlbWVudC4NCj4+ICsgICAgICAgICAqIGFkZCBvbmUgfjEw
dXMgZGVsYXkgaGVyZS4NCj4+ICsgICAgICAgICAqLw0KPj4gKyAgICAgICAgdWRlbGF5KDEwKTsN
Cj4+ICsgICAgICAgIHJlZ21hcF91cGRhdGVfYml0cyhpbXg2X3BjaWUtPmlvbXV4Y19ncHIsIElP
TVVYQ19HUFIxLA0KPj4gKyAgICAgICAgICAgICAgICBJTVg2UV9HUFIxX1BDSUVfUkVGX0NMS19F
TiwgMSA8PCAxNik7DQo+PiArICAgIH0NCj4+IA0KPj4gICAgLyogYWxsb3cgdGhlIGNsb2NrcyB0
byBzdGFiaWxpemUgKi8NCj4+ICAgIHVzbGVlcF9yYW5nZSgyMDAsIDUwMCk7DQo+PiBAQCAtMjk3
LDggKzMyNiwxOSBAQCBzdGF0aWMgaW50IGlteDZfcGNpZV9kZWFzc2VydF9jb3JlX3Jlc2V0KHN0
cnVjdCBwY2llX3BvcnQgKnBwKQ0KPj4gICAgICAgIG1zbGVlcCgxMDApOw0KPj4gICAgICAgIGdw
aW9fc2V0X3ZhbHVlKGlteDZfcGNpZS0+cmVzZXRfZ3BpbywgMSk7DQo+PiAgICB9DQo+PiArDQo+
PiArICAgIC8qDQo+PiArICAgICAqIFJlbGVhc2UgdGhlIFBDSWUgUEhZIHJlc2V0IGhlcmUsIHRo
YXQgd2UgaGF2ZSBzZXQgaW4NCj4+ICsgICAgICogaW14Nl9wY2llX2luaXRfcGh5KCkgbm93DQo+
PiArICAgICAqLw0KPj4gKyAgICBpZiAoaXNfaW14NnN4X3BjaWUoaW14Nl9wY2llKSkNCj4+ICsg
ICAgICAgIHJlZ21hcF91cGRhdGVfYml0cyhpbXg2X3BjaWUtPmlvbXV4Y19ncHIsIElPTVVYQ19H
UFI1LA0KPj4gKyAgICAgICAgICAgICAgICBJTVg2U1hfR1BSNV9QQ0lFX0JUTlJTVCwgMCk7DQo+
PiArDQo+PiAgICByZXR1cm4gMDsNCj4+IA0KPj4gK2Vycl9pbmJvdW5kX2F4aToNCj4+ICsgICAg
Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlteDZfcGNpZS0+cGNpZSk7DQo+PiBlcnJfcGNpZToNCj4+
ICAgIGNsa19kaXNhYmxlX3VucHJlcGFyZShpbXg2X3BjaWUtPnBjaWVfYnVzKTsNCj4+IGVycl9w
Y2llX2J1czoNCj4+IEBAIC0zMTEsNiArMzUxLDI2IEBAIGVycl9wY2llX3BoeToNCj4+IHN0YXRp
YyB2b2lkIGlteDZfcGNpZV9pbml0X3BoeShzdHJ1Y3QgcGNpZV9wb3J0ICpwcCkNCj4+IHsNCj4+
ICAgIHN0cnVjdCBpbXg2X3BjaWUgKmlteDZfcGNpZSA9IHRvX2lteDZfcGNpZShwcCk7DQo+PiAr
ICAgIGludCByZXQ7DQo+PiArDQo+PiArICAgIC8qIFBvd2VyIHVwIHRoZSBzZXBhcmF0ZSBkb21h
aW4gYXZhaWxhYmxlIG9uIGkuTVg2U1ggKi8NCj4+ICsgICAgaWYgKGlzX2lteDZzeF9wY2llKGlt
eDZfcGNpZSkpIHsNCj4+ICsgICAgICAgIC8qIEZvcmNlIFBDSWUgUEhZIHJlc2V0ICovDQo+PiAr
ICAgICAgICByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENf
R1BSNSwNCj4+ICsgICAgICAgICAgICAgICAgSU1YNlNYX0dQUjVfUENJRV9CVE5SU1QsDQo+PiAr
ICAgICAgICAgICAgICAgIElNWDZTWF9HUFI1X1BDSUVfQlROUlNUKTsNCj4+ICsNCj4+ICsgICAg
ICAgIHJlZ21hcF91cGRhdGVfYml0cyhpbXg2X3BjaWUtPmdwY19pcHNfcmVnLCBHUENfQ05UUiwN
Cj4+ICsgICAgICAgICAgICAgICAgR1BDX0NOVFJfUENJRV9QSFlfUFVQX1JFUSwNCj4+ICsgICAg
ICAgICAgICAgICAgR1BDX0NOVFJfUENJRV9QSFlfUFVQX1JFUSk7DQo+PiArICAgICAgICByZWd1
bGF0b3Jfc2V0X3ZvbHRhZ2UoaW14Nl9wY2llLT5wY2llX3JlZ3VsYXRvciwNCj4+ICsgICAgICAg
ICAgICAgICAgMTEwMDAwMCwgMTEwMDAwMCk7DQo+PiArICAgICAgICByZXQgPSByZWd1bGF0b3Jf
ZW5hYmxlKGlteDZfcGNpZS0+cGNpZV9yZWd1bGF0b3IpOw0KPj4gKyAgICAgICAgaWYgKHJldCkN
Cj4+ICsgICAgICAgICAgICBkZXZfaW5mbyhwcC0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBwY2ll
IHJlZ3VsYXRvci5cbiIpOw0KPj4gKyAgICAgICAgcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNp
ZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQUjEyLA0KPj4gKyAgICAgICAgICAgICAgICBJTVg2U1hf
R1BSMTJfUlhfRVFfTUFTSywgSU1YNlNYX0dQUjEyX1JYX0VRXzIpOw0KPj4gKyAgICB9DQo+PiAN
Cj4+ICAgIHJlZ21hcF91cGRhdGVfYml0cyhpbXg2X3BjaWUtPmlvbXV4Y19ncHIsIElPTVVYQ19H
UFIxMiwNCj4+ICAgICAgICAgICAgSU1YNlFfR1BSMTJfUENJRV9DVExfMiwgMCA8PCAxMCk7DQo+
PiBAQCAtMzE5LDcgKzM3OSw3IEBAIHN0YXRpYyB2b2lkIGlteDZfcGNpZV9pbml0X3BoeShzdHJ1
Y3QgcGNpZV9wb3J0ICpwcCkNCj4+ICAgIHJlZ21hcF91cGRhdGVfYml0cyhpbXg2X3BjaWUtPmlv
bXV4Y19ncHIsIElPTVVYQ19HUFIxMiwNCj4+ICAgICAgICAgICAgSU1YNlFfR1BSMTJfREVWSUNF
X1RZUEUsIFBDSV9FWFBfVFlQRV9ST09UX1BPUlQgPDwgMTIpOw0KPj4gICAgcmVnbWFwX3VwZGF0
ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQUjEyLA0KPj4gLSAgICAgICAg
ICAgIElNWDZRX0dQUjEyX0xPU19MRVZFTCwgOSA8PCA0KTsNCj4+ICsgICAgICAgICAgICBJTVg2
UV9HUFIxMl9MT1NfTEVWRUwsIElNWDZRX0dQUjEyX0xPU19MRVZFTF85KTsNCj4+IA0KPj4gICAg
cmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQUjgsDQo+
PiAgICAgICAgICAgIElNWDZRX0dQUjhfVFhfREVFTVBIX0dFTjEsIDAgPDwgMCk7DQo+PiBAQCAt
Mzc3LDcgKzQzNyw4IEBAIHN0YXRpYyBpbnQgaW14Nl9wY2llX3N0YXJ0X2xpbmsoc3RydWN0IHBj
aWVfcG9ydCAqcHApDQo+PiANCj4+ICAgIC8qIFN0YXJ0IExUU1NNLiAqLw0KPj4gICAgcmVnbWFw
X3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQUjEyLA0KPj4gLSAg
ICAgICAgICAgIElNWDZRX0dQUjEyX1BDSUVfQ1RMXzIsIDEgPDwgMTApOw0KPj4gKyAgICAgICAg
ICAgIElNWDZRX0dQUjEyX1BDSUVfQ1RMXzIsDQo+PiArICAgICAgICAgICAgSU1YNlFfR1BSMTJf
UENJRV9DVExfMik7DQo+PiANCj4+ICAgIHJldCA9IGlteDZfcGNpZV93YWl0X2Zvcl9saW5rKHBw
KTsNCj4+ICAgIGlmIChyZXQpDQo+PiBAQCAtNTUzLDkgKzYxNCw1MCBAQCBzdGF0aWMgaW50IF9f
aW5pdCBpbXg2X2FkZF9wY2llX3BvcnQoc3RydWN0IHBjaWVfcG9ydCAqcHAsDQo+PiAgICByZXR1
cm4gMDsNCj4+IH0NCj4+IA0KPj4gKyNpZmRlZiBDT05GSUdfUE1fU0xFRVANCj4+ICtzdGF0aWMg
aW50IHBjaV9pbXhfc3VzcGVuZCh2b2lkKQ0KPj4gK3sNCj4+ICsgICAgaWYgKGlzX2lteDZzeF9w
Y2llKGlteDZfcGNpZSkpIHsNCj4+ICsgICAgICAgIC8qIFBNX1RVUk5fT0ZGICovDQo+PiArICAg
ICAgICByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENfR1BS
MTIsDQo+PiArICAgICAgICAgICAgICAgIElNWDZTWF9HUFIxMl9QQ0lFX1BNX1RVUk5fT0ZGLA0K
Pj4gKyAgICAgICAgICAgICAgICBJTVg2U1hfR1BSMTJfUENJRV9QTV9UVVJOX09GRik7DQo+PiAr
ICAgICAgICB1ZGVsYXkoMTApOw0KPj4gKyAgICAgICAgcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZf
cGNpZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQUjEyLA0KPj4gKyAgICAgICAgICAgICAgICBJTVg2
U1hfR1BSMTJfUENJRV9QTV9UVVJOX09GRiwgMCk7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAg
cmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIHBjaV9pbXhfcmVzdW1lKHZv
aWQpDQo+PiArew0KPj4gKyAgICBzdHJ1Y3QgcGNpZV9wb3J0ICpwcCA9ICZpbXg2X3BjaWUtPnBw
Ow0KPj4gKw0KPj4gKyAgICBpZiAoaXNfaW14NnN4X3BjaWUoaW14Nl9wY2llKSkgew0KPj4gKyAg
ICAgICAgLyogUmVzZXQgaU1YNlNYIFBDSWUgKi8NCj4+ICsgICAgICAgIHJlZ21hcF91cGRhdGVf
Yml0cyhpbXg2X3BjaWUtPmlvbXV4Y19ncHIsIElPTVVYQ19HUFI1LA0KPj4gKyAgICAgICAgICAg
ICAgICBJTVg2U1hfR1BSNV9QQ0lFX1BFUlNULCBJTVg2U1hfR1BSNV9QQ0lFX1BFUlNUKTsNCj4+
ICsgICAgICAgIHJlZ21hcF91cGRhdGVfYml0cyhpbXg2X3BjaWUtPmlvbXV4Y19ncHIsIElPTVVY
Q19HUFI1LA0KPj4gKyAgICAgICAgICAgICAgICBJTVg2U1hfR1BSNV9QQ0lFX1BFUlNULCAwKTsN
Cj4+ICsgICAgICAgIC8qDQo+PiArICAgICAgICAgKiBjb250cm9sbGVyIG1heWJlIHR1cm4gb2Zm
LCByZS1jb25maWd1cmUgYWdhaW4NCj4+ICsgICAgICAgICAqLw0KPj4gKyAgICAgICAgZHdfcGNp
ZV9zZXR1cF9yYyhwcCk7DQo+PiArDQo+PiArICAgICAgICBpZiAoSVNfRU5BQkxFRChDT05GSUdf
UENJX01TSSkpDQo+PiArICAgICAgICAgICAgZHdfcGNpZV9tc2lfY2ZnX3Jlc3RvcmUocHApOw0K
Pj4gKyAgICB9DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgcGNp
X2lteF9zeXNjb3JlX29wcyA9IHsNCj4+ICsgICAgLnN1c3BlbmQgPSBwY2lfaW14X3N1c3BlbmQs
DQo+PiArICAgIC5yZXN1bWUgPSBwY2lfaW14X3Jlc3VtZSwNCj4+ICt9Ow0KPj4gKyNlbmRpZg0K
Pj4gKw0KPj4gc3RhdGljIGludCBfX2luaXQgaW14Nl9wY2llX3Byb2JlKHN0cnVjdCBwbGF0Zm9y
bV9kZXZpY2UgKnBkZXYpDQo+PiB7DQo+PiAtICAgIHN0cnVjdCBpbXg2X3BjaWUgKmlteDZfcGNp
ZTsNCj4+ICAgIHN0cnVjdCBwY2llX3BvcnQgKnBwOw0KPj4gICAgc3RydWN0IGRldmljZV9ub2Rl
ICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOw0KPj4gICAgc3RydWN0IHJlc291cmNlICpkYmlfYmFz
ZTsNCj4+IEBAIC01NzIsNyArNjc0LDcgQEAgc3RhdGljIGludCBfX2luaXQgaW14Nl9wY2llX3By
b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+PiAgICBob29rX2ZhdWx0X2NvZGUo
MTYgKyA2LCBpbXg2cV9wY2llX2Fib3J0X2hhbmRsZXIsIFNJR0JVUywgMCwNCj4+ICAgICAgICAi
aW1wcmVjaXNlIGV4dGVybmFsIGFib3J0Iik7DQo+PiANCj4+IC0gICAgZGJpX2Jhc2UgPSBwbGF0
Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOw0KPj4gKyAgICBkYmlf
YmFzZSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0s
ICJyY19kYmkiKTsNCj4gDQo+IFlvdSBhcmUgYnJlYWtpbmcgb2xkIGRldmljZXRyZWVzIGhlcmUu
ICJyY19kYmkiIGlzbid0IGEgZG9jdW1lbnRlZCBuYW1lDQo+IGFuZCBpc24ndCBhdmFpbGFibGUg
b24gb2xkIERUcy4gQmVzaWRlcyB0aGUgaW14NnEgRFQgdXNlcyBqdXN0ICJkYmkiIGFzDQo+IHRo
ZSBuYW1lLiBEb24ndCB0b3VjaCB0aGlzIGNvZGUsIGl0IGRvZXMgZXhhY3RseSB0aGUgcmlnaHQg
dGhpbmcgYnkNCj4gZ3JhYmJpbmcgdGhlIGZpcnN0IHJlZyByZXNvdXJjZS4NCg0KT2ssIGNoYW5n
ZXMgd291bGQgYmUgcmVtb3ZlZC4NCg0KPiANCj4+ICAgIHBwLT5kYmlfYmFzZSA9IGRldm1faW9y
ZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCBkYmlfYmFzZSk7DQo+PiAgICBpZiAoSVNfRVJSKHBw
LT5kYmlfYmFzZSkpDQo+PiAgICAgICAgcmV0dXJuIFBUUl9FUlIocHAtPmRiaV9iYXNlKTsNCj4+
IEBAIC02MTAsOSArNzEyLDI4IEBAIHN0YXRpYyBpbnQgX19pbml0IGlteDZfcGNpZV9wcm9iZShz
dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPj4gICAgICAgIHJldHVybiBQVFJfRVJSKGlt
eDZfcGNpZS0+cGNpZSk7DQo+PiAgICB9DQo+PiANCj4+IC0gICAgLyogR3JhYiBHUFIgY29uZmln
IHJlZ2lzdGVyIHJhbmdlICovDQo+PiAtICAgIGlteDZfcGNpZS0+aW9tdXhjX2dwciA9DQo+PiAt
ICAgICAgICAgc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfY29tcGF0aWJsZSgiZnNsLGlteDZxLWlv
bXV4Yy1ncHIiKTsNCj4+ICsgICAgaWYgKGlzX2lteDZzeF9wY2llKGlteDZfcGNpZSkpIHsNCj4+
ICsgICAgICAgIGlteDZfcGNpZS0+cGNpZV9pbmJvdW5kX2F4aSA9IGRldm1fY2xrX2dldCgmcGRl
di0+ZGV2LA0KPj4gKyAgICAgICAgICAgICAgICAicGNpZV9pbmJvdW5kX2F4aSIpOw0KPj4gKyAg
ICAgICAgaWYgKElTX0VSUihpbXg2X3BjaWUtPnBjaWVfaW5ib3VuZF9heGkpKSB7DQo+PiArICAg
ICAgICAgICAgZGV2X2VycigmcGRldi0+ZGV2LA0KPj4gKyAgICAgICAgICAgICAgICAicGNpZSBj
bG9jayBzb3VyY2UgbWlzc2luZyBvciBpbnZhbGlkXG4iKTsNCj4+ICsgICAgICAgICAgICByZXR1
cm4gUFRSX0VSUihpbXg2X3BjaWUtPnBjaWVfaW5ib3VuZF9heGkpOw0KPj4gKyAgICAgICAgfQ0K
Pj4gKw0KPj4gKyAgICAgICAgaW14Nl9wY2llLT5wY2llX3JlZ3VsYXRvciA9IGRldm1fcmVndWxh
dG9yX2dldChwcC0+ZGV2LA0KPj4gKyAgICAgICAgICAgICAgICAicGNpZS1waHkiKTsNCj4+ICsN
Cj4+ICsgICAgICAgIGlteDZfcGNpZS0+aW9tdXhjX2dwciA9DQo+PiArICAgICAgICAgICAgIHN5
c2Nvbl9yZWdtYXBfbG9va3VwX2J5X2NvbXBhdGlibGUNCj4+ICsgICAgICAgICAgICAgKCJmc2ws
aW14NnN4LWlvbXV4Yy1ncHIiKTsNCj4+ICsgICAgICAgIGlteDZfcGNpZS0+Z3BjX2lwc19yZWcg
PQ0KPj4gKyAgICAgICAgICAgICBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9jb21wYXRpYmxlKCJm
c2wsaW14NnN4LWdwYyIpOw0KPj4gKyAgICB9IGVsc2Ugew0KPj4gKyAgICAgICAgaW14Nl9wY2ll
LT5pb211eGNfZ3ByID0NCj4+ICsgICAgICAgICAgICBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9j
b21wYXRpYmxlDQo+PiArICAgICAgICAgICAgKCJmc2wsaW14NnEtaW9tdXhjLWdwciIpOw0KPj4g
KyAgICB9DQo+PiAgICBpZiAoSVNfRVJSKGlteDZfcGNpZS0+aW9tdXhjX2dwcikpIHsNCj4+ICAg
ICAgICBkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZmluZCBpb211eGMgcmVnaXN0ZXJz
XG4iKTsNCj4+ICAgICAgICByZXR1cm4gUFRSX0VSUihpbXg2X3BjaWUtPmlvbXV4Y19ncHIpOw0K
Pj4gQEAgLTYyMyw2ICs3NDQsOSBAQCBzdGF0aWMgaW50IF9faW5pdCBpbXg2X3BjaWVfcHJvYmUo
c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4+ICAgICAgICByZXR1cm4gcmV0Ow0KPj4g
DQo+PiAgICBwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbXg2X3BjaWUpOw0KPj4gKyNpZmRl
ZiBDT05GSUdfUE1fU0xFRVANCj4+ICsgICAgcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnBjaV9pbXhf
c3lzY29yZV9vcHMpOw0KPj4gKyNlbmRpZg0KPj4gICAgcmV0dXJuIDA7DQo+PiB9DQo+PiANCj4+
IEBAIC02MzYsNiArNzYwLDcgQEAgc3RhdGljIHZvaWQgaW14Nl9wY2llX3NodXRkb3duKHN0cnVj
dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+PiANCj4+IHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Zf
ZGV2aWNlX2lkIGlteDZfcGNpZV9vZl9tYXRjaFtdID0gew0KPj4gICAgeyAuY29tcGF0aWJsZSA9
ICJmc2wsaW14NnEtcGNpZSIsIH0sDQo+PiArICAgIHsgLmNvbXBhdGlibGUgPSAiZnNsLGlteDZz
eC1wY2llIiwgfSwNCj4+ICAgIHt9LA0KPj4gfTsNCj4+IE1PRFVMRV9ERVZJQ0VfVEFCTEUob2Ys
IGlteDZfcGNpZV9vZl9tYXRjaCk7DQo+IA0KPiAtLSANCj4gUGVuZ3V0cm9uaXggZS5LLiAgICAg
ICAgICAgICB8IEx1Y2FzIFN0YWNoICAgICAgICAgICAgICAgICB8DQo+IEluZHVzdHJpYWwgTGlu
dXggU29sdXRpb25zICAgfCBodHRwOi8vd3d3LnBlbmd1dHJvbml4LmRlLyAgfA0KPiANCj4gDQpC
ZXN0IHJlZ2FyZHMNClJpY2hhcmQ=

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

* Re: [PATCH v4 10/10] ARM: imx6sx: enable pcie on imx6sx sdb board
  2014-09-30 16:21   ` Fabio Estevam
@ 2014-10-02  2:40     ` Hong-Xing.Zhu
  2014-10-08  6:41       ` Hong-Xing.Zhu
  0 siblings, 1 reply; 23+ messages in thread
From: Hong-Xing.Zhu @ 2014-10-02  2:40 UTC (permalink / raw)
  To: Fabio Estevam
  Cc: Hong-Xing.Zhu, linux-pci-owner, linux-pci, Shengchao Guo,
	Lucas Stach, Tim Harvey

WWVzLCAgUENJRV9QV1JfRU4gd291bGQgYmUgYWRkZWQgbGF0ZXIuDQpUaGFua3MsIEZhYmlvLg0K
DQpCZXN0IHJlZ2FyZHMNClJpY2hhcmQNCg0KPiDU2iAyMDE0xOoxMNTCMcjVo6zJz87nMTI6MjGj
rCJGYWJpbyBFc3RldmFtIiA8ZmVzdGV2YW1AZ21haWwuY29tPiDQtLXAo7oNCj4gDQo+IEhpIFJp
Y2hhcmQsDQo+IA0KPj4gT24gVHVlLCBTZXAgMzAsIDIwMTQgYXQgNjozNiBBTSwgUmljaGFyZCBa
aHUgPHI2NTAzN0BmcmVlc2NhbGUuY29tPiB3cm90ZToNCj4+IFNpZ25lZC1vZmYtYnk6IFJpY2hh
cmQgWmh1IDxyNjUwMzdAZnJlZXNjYWxlLmNvbT4NCj4+IC0tLQ0KPj4gYXJjaC9hcm0vYm9vdC9k
dHMvaW14NnN4LXNkYi5kdHMgfCAxMyArKysrKysrKysrKysrDQo+PiAxIGZpbGUgY2hhbmdlZCwg
MTMgaW5zZXJ0aW9ucygrKQ0KPj4gDQo+PiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMv
aW14NnN4LXNkYi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c3gtc2RiLmR0cw0KPj4gaW5k
ZXggYTM5ODBkOS4uMjk3NjkxMyAxMDA2NDQNCj4+IC0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lt
eDZzeC1zZGIuZHRzDQo+PiArKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c3gtc2RiLmR0cw0K
Pj4gQEAgLTI1MSw2ICsyNTEsMTMgQEANCj4+ICAgICAgICB9Ow0KPj4gfTsNCj4+IA0KPj4gKyZw
Y2llIHsNCj4+ICsgICAgICAgcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsNCj4+ICsgICAgICAg
cGluY3RybC0wID0gPCZwaW5jdHJsX3BjaWU+Ow0KPj4gKyAgICAgICByZXNldC1ncGlvID0gPCZn
cGlvMiAwIDA+Ow0KPj4gKyAgICAgICBzdGF0dXMgPSAib2theSI7DQo+PiArfTsNCj4gDQo+IFRo
ZXJlIGlzIGFsc28gR1BJTzJfMSB3aGljaCBpcyB0aGUgUENJRV9QV1JfRU4gc2lnbmFsIGFuZCBz
aG91bGQgYmUNCj4gYWRkZWQgYXMgYSBHUElPIGNvbnRyb2xsZWQgcmVndWxhdG9yLg0K

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

* RE: [PATCH v4 10/10] ARM: imx6sx: enable pcie on imx6sx sdb board
  2014-10-02  2:40     ` Hong-Xing.Zhu
@ 2014-10-08  6:41       ` Hong-Xing.Zhu
  2014-10-09  1:11         ` Fabio Estevam
  0 siblings, 1 reply; 23+ messages in thread
From: Hong-Xing.Zhu @ 2014-10-08  6:41 UTC (permalink / raw)
  To: Hong-Xing.Zhu, Fabio Estevam
  Cc: linux-pci-owner, linux-pci, Shengchao Guo, Lucas Stach, Tim Harvey

SGkgRmFiaW86DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogWmh1IFJp
Y2hhcmQtUjY1MDM3DQo+IFNlbnQ6IFRodXJzZGF5LCBPY3RvYmVyIDAyLCAyMDE0IDEwOjQwIEFN
DQo+IFRvOiBGYWJpbyBFc3RldmFtDQo+IENjOiBaaHUgUmljaGFyZC1SNjUwMzc7IGxpbnV4LXBj
aS1vd25lckB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LQ0KPiBwY2lAdmdlci5rZXJuZWwub3JnOyBH
dW8gU2hhd24tUjY1MDczOyBMdWNhcyBTdGFjaDsgVGltIEhhcnZleQ0KPiBTdWJqZWN0OiBSZTog
W1BBVENIIHY0IDEwLzEwXSBBUk06IGlteDZzeDogZW5hYmxlIHBjaWUgb24gaW14NnN4IHNkYiBi
b2FyZA0KPiANCj4gWWVzLCAgUENJRV9QV1JfRU4gd291bGQgYmUgYWRkZWQgbGF0ZXIuDQo+IFRo
YW5rcywgRmFiaW8uDQo+IA0KPiBCZXN0IHJlZ2FyZHMNCj4gUmljaGFyZA0KPiANCj4gPiDU2iAy
MDE0xOoxMNTCMcjVo6zJz87nMTI6MjGjrCJGYWJpbyBFc3RldmFtIiA8ZmVzdGV2YW1AZ21haWwu
Y29tPiDQtLXAo7oNCj4gPg0KPiA+IEhpIFJpY2hhcmQsDQo+ID4NCj4gPj4gT24gVHVlLCBTZXAg
MzAsIDIwMTQgYXQgNjozNiBBTSwgUmljaGFyZCBaaHUgPHI2NTAzN0BmcmVlc2NhbGUuY29tPiB3
cm90ZToNCj4gPj4gU2lnbmVkLW9mZi1ieTogUmljaGFyZCBaaHUgPHI2NTAzN0BmcmVlc2NhbGUu
Y29tPg0KPiA+PiAtLS0NCj4gPj4gYXJjaC9hcm0vYm9vdC9kdHMvaW14NnN4LXNkYi5kdHMgfCAx
MyArKysrKysrKysrKysrDQo+ID4+IDEgZmlsZSBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspDQo+
ID4+DQo+ID4+IGRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2c3gtc2RiLmR0cw0K
PiA+PiBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzeC1zZGIuZHRzDQo+ID4+IGluZGV4IGEzOTgw
ZDkuLjI5NzY5MTMgMTAwNjQ0DQo+ID4+IC0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzeC1z
ZGIuZHRzDQo+ID4+ICsrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzeC1zZGIuZHRzDQo+ID4+
IEBAIC0yNTEsNiArMjUxLDEzIEBADQo+ID4+ICAgICAgICB9Ow0KPiA+PiB9Ow0KPiA+Pg0KPiA+
PiArJnBjaWUgew0KPiA+PiArICAgICAgIHBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7DQo+ID4+
ICsgICAgICAgcGluY3RybC0wID0gPCZwaW5jdHJsX3BjaWU+Ow0KPiA+PiArICAgICAgIHJlc2V0
LWdwaW8gPSA8JmdwaW8yIDAgMD47DQo+ID4+ICsgICAgICAgc3RhdHVzID0gIm9rYXkiOw0KPiA+
PiArfTsNCj4gPg0KPiA+IFRoZXJlIGlzIGFsc28gR1BJTzJfMSB3aGljaCBpcyB0aGUgUENJRV9Q
V1JfRU4gc2lnbmFsIGFuZCBzaG91bGQgYmUNCj4gPiBhZGRlZCBhcyBhIEdQSU8gY29udHJvbGxl
ZCByZWd1bGF0b3IuDQpbUmljaGFyZF0gVGhlIEdJUE8gY29udHJvbGxlZCByZWd1bGF0b3IgaXMg
ZGlzY2FyZGVkIGluIHRoZSBsYXRlc3Qga2VybmVsLCBpdCBpcyBwb2ludGVkIG91dCBieSBMdWNh
cyBpbiB0aGUNCnByZXZpb3VzIHJldmlldy4NCiINCj4gQEAgLTUwMiw2ICs1MDMsNyBAQA0KPiAg
JnBjaWUgew0KPiAgCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7DQo+ICAJcGluY3RybC0wID0g
PCZwaW5jdHJsX3BjaWU+Ow0KPiArCXBvd2VyLW9uLWdwaW8gPSA8JmdwaW8zIDE5IDA+Ow0KPiAg
CXJlc2V0LWdwaW8gPSA8JmdwaW83IDEyIDA+Ow0KPiAgCXN0YXR1cyA9ICJva2F5IjsNCj4gIH07
DQoNClRoaXMgaHVuayBpcyB3cm9uZy4gVGhlcmUgaXMgbm8gInBvd2VyLW9uLWdwaW8iIGluIHRo
ZSBiaW5kaW5nIGFueW1vcmUuDQpBbHNvIHRoZXJlIGlzIGFscmVhZHkgYSBjaGFuZ2UgaW4gU2hh
d25zIHRyZWUgdG8gbW9kZWwgdGhpcyBhcyBhIGFsd2F5cy1vbiByZWd1bGF0b3IuIElmIHdlIHJl
YWxseSB3YW50IHRvIGNvbnRyb2wgcGNpIGJ1cyBwb3dlciB0aGlzIG5lZWRzIHRvIGJlIGRvbmUg
dGhyb3VnaCB0aGlzIHJlZ3VsYXRvciwgbm90IHNvbWUgYXJiaXRyYXJ5IGdwaW8gaGFjay4NCiIN
Cg0KQmVzdCBSZWdhcmRzDQpSaWNoYXJkIFpodQ0KDQo=

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

* RE: [PATCH v4 04/10] PCI: designware: refine setup_rc and add msi data restore
  2014-09-30 14:58   ` Lucas Stach
@ 2014-10-08  6:45     ` Hong-Xing.Zhu
  0 siblings, 0 replies; 23+ messages in thread
From: Hong-Xing.Zhu @ 2014-10-08  6:45 UTC (permalink / raw)
  To: Lucas Stach; +Cc: linux-pci-owner, linux-pci, Shengchao Guo, festevam, tharvey

DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEx1Y2FzIFN0YWNoIFttYWls
dG86bC5zdGFjaEBwZW5ndXRyb25peC5kZV0NCj4gU2VudDogVHVlc2RheSwgU2VwdGVtYmVyIDMw
LCAyMDE0IDEwOjU4IFBNDQo+IFRvOiBaaHUgUmljaGFyZC1SNjUwMzcNCj4gQ2M6IGxpbnV4LXBj
aS1vd25lckB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmc7IEd1byBT
aGF3bi0NCj4gUjY1MDczOyBmZXN0ZXZhbUBnbWFpbC5jb207IHRoYXJ2ZXlAZ2F0ZXdvcmtzLmNv
bQ0KPiBTdWJqZWN0OiBSZTogW1BBVENIIHY0IDA0LzEwXSBQQ0k6IGRlc2lnbndhcmU6IHJlZmlu
ZSBzZXR1cF9yYyBhbmQgYWRkIG1zaQ0KPiBkYXRhIHJlc3RvcmUNCj4gDQo+IEFtIERpZW5zdGFn
LCBkZW4gMzAuMDkuMjAxNCwgMTc6MzYgKzA4MDAgc2NocmllYiBSaWNoYXJkIFpodToNCj4gPiAt
IG1vdmUgInByb2dyYW0gY29ycmVjdCBjbGFzcyBmb3IgUkMiIGZyb20gZHdfcGNpZV9ob3N0X2lu
aXQoKSB0bw0KPiA+IGR3X3BjaWVfc2V0dXBfcmMoKS4gc2luY2UgdGhpcyBpcyBSQyBzZXR1cCwg
aXQncyBiZXR0ZXIgdG8gY29udGFpbmVkDQo+ID4gaW4gZHdfcGNpZV9zZXR1cF9yYyBmdW5jdGlv
bi4NCj4gPiBUaGVuLCBSQyBjYW4gYmUgcmUtc2V0dXAgcmVhbGx5IGJ5IGR3X3BjaWVfc2V0dXBf
cmMoKS4NCj4gPiAtIGFkZCBvbmUgcmUtc3RvcmUgbXNpIGRhdGEgZnVuY3Rpb24uIEJlY2F1c2Ug
dGhhdCBwY2llIGNvbnRyb2xsZXINCj4gPiBtYXliZSBwb3dlcmVkIG9mZiBkdXJpbmcgc3lzdGVt
IHN1c3BlbmQsIGFuZCB0aGUgbXNpIGRhdGENCj4gPiBjb25maWd1cmF0aW9uIHdvdWxkIGJlIGxv
c3QuDQo+ID4gdGhpcyBmdW5jdGlvbnMgY2FuIGJlIHVzZWQgdG8gcmVzdG9yZSB0aGUgbXNpIGRh
dGEgZHVyaW5nIHRoZSByZXN1bWUNCj4gPiBjYWxsYmFjay4NCj4gPg0KPiA+IFNpZ25lZC1vZmYt
Ynk6IFJpY2hhcmQgWmh1IDxyNjUwMzdAZnJlZXNjYWxlLmNvbT4NCj4gDQo+IE5BQ0suIEkgYXNr
ZWQgeW91IHRvIHNwbGl0IHRoaXMgcGF0Y2ggYW5kIG1vdmUgaXQgYmVmb3JlIHRoZSBpbXg2IHBj
aWUgY2hhbmdlcw0KPiBpbiB0aGUgc2VyaWVzIGluIG9yZGVyIHRvIG5vdCBicmVhayBjb21waWxh
dGlvbiB3aXRoaW4gdGhlIHNlcmllcy4NCj4gDQpbUmljaGFyZF0gT2suIEFjY2VwdGVkLg0KPiA+
IC0tLQ0KPiA+ICBkcml2ZXJzL3BjaS9ob3N0L3BjaWUtZGVzaWdud2FyZS5jIHwgMTUgKysrKysr
KysrKysrLS0tDQo+ID4gZHJpdmVycy9wY2kvaG9zdC9wY2llLWRlc2lnbndhcmUuaCB8ICAxICsN
Cj4gPiAgMiBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQ0K
PiA+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1kZXNpZ253YXJlLmMN
Cj4gPiBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1kZXNpZ253YXJlLmMNCj4gPiBpbmRleCA1Mzhi
YmYzLi5hZTFlNmM1IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1kZXNp
Z253YXJlLmMNCj4gPiArKysgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtZGVzaWdud2FyZS5jDQo+
ID4gQEAgLTE5NCw2ICsxOTQsMTMgQEAgdm9pZCBkd19wY2llX21zaV9pbml0KHN0cnVjdCBwY2ll
X3BvcnQgKnBwKQ0KPiA+ICAJZHdfcGNpZV93cl9vd25fY29uZihwcCwgUENJRV9NU0lfQUREUl9I
SSwgNCwgMCk7ICB9DQo+ID4NCj4gPiArdm9pZCBkd19wY2llX21zaV9jZmdfcmVzdG9yZShzdHJ1
Y3QgcGNpZV9wb3J0ICpwcCkgew0KPiA+ICsJZHdfcGNpZV93cl9vd25fY29uZihwcCwgUENJRV9N
U0lfQUREUl9MTywgNCwNCj4gPiArCQkJdmlydF90b19waHlzKCh2b2lkICopcHAtPm1zaV9kYXRh
KSk7DQo+ID4gKwlkd19wY2llX3dyX293bl9jb25mKHBwLCBQQ0lFX01TSV9BRERSX0hJLCA0LCAw
KTsgfQ0KPiA+ICsNCj4gPiAgc3RhdGljIGludCBmaW5kX3ZhbGlkX3BvczAoc3RydWN0IHBjaWVf
cG9ydCAqcHAsIGludCBtc2d2ZWMsIGludCBwb3MsDQo+ID4gaW50ICpwb3MwKSAgew0KPiA+ICAJ
aW50IGZsYWcgPSAxOw0KPiA+IEBAIC01NzAsOSArNTc3LDYgQEAgaW50IF9faW5pdCBkd19wY2ll
X2hvc3RfaW5pdChzdHJ1Y3QgcGNpZV9wb3J0ICpwcCkNCj4gPg0KPiA+ICAJZHdfcGNpZV93cl9v
d25fY29uZihwcCwgUENJX0JBU0VfQUREUkVTU18wLCA0LCAwKTsNCj4gPg0KPiA+IC0JLyogcHJv
Z3JhbSBjb3JyZWN0IGNsYXNzIGZvciBSQyAqLw0KPiA+IC0JZHdfcGNpZV93cl9vd25fY29uZihw
cCwgUENJX0NMQVNTX0RFVklDRSwgMiwgUENJX0NMQVNTX0JSSURHRV9QQ0kpOw0KPiA+IC0NCj4g
PiAgCWR3X3BjaWVfcmRfb3duX2NvbmYocHAsIFBDSUVfTElOS19XSURUSF9TUEVFRF9DT05UUk9M
LCA0LCAmdmFsKTsNCj4gPiAgCXZhbCB8PSBQT1JUX0xPR0lDX1NQRUVEX0NIQU5HRTsNCj4gPiAg
CWR3X3BjaWVfd3Jfb3duX2NvbmYocHAsIFBDSUVfTElOS19XSURUSF9TUEVFRF9DT05UUk9MLCA0
LCB2YWwpOyBAQA0KPiA+IC05MTcsNiArOTIxLDExIEBAIHZvaWQgZHdfcGNpZV9zZXR1cF9yYyhz
dHJ1Y3QgcGNpZV9wb3J0ICpwcCkNCj4gPiAgCXZhbCA9IG1lbWxpbWl0IHwgbWVtYmFzZTsNCj4g
PiAgCWR3X3BjaWVfd3JpdGVsX3JjKHBwLCB2YWwsIFBDSV9NRU1PUllfQkFTRSk7DQo+ID4NCj4g
PiArCS8qIHByb2dyYW0gY29ycmVjdCBjbGFzcyBmb3IgUkMgKi8NCj4gPiArCWR3X3BjaWVfcmVh
ZGxfcmMocHAsIFBDSV9DTEFTU19SRVZJU0lPTiwgJnZhbCk7DQo+ID4gKwl2YWwgfD0gUENJX0NM
QVNTX0JSSURHRV9QQ0kgPDwgMTY7DQo+ID4gKwlkd19wY2llX3dyaXRlbF9yYyhwcCwgdmFsLCBQ
Q0lfQ0xBU1NfUkVWSVNJT04pOw0KPiA+ICsNCj4gPiAgCS8qIHNldHVwIGNvbW1hbmQgcmVnaXN0
ZXIgKi8NCj4gPiAgCWR3X3BjaWVfcmVhZGxfcmMocHAsIFBDSV9DT01NQU5ELCAmdmFsKTsNCj4g
PiAgCXZhbCAmPSAweGZmZmYwMDAwOw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0
L3BjaWUtZGVzaWdud2FyZS5oDQo+ID4gYi9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtZGVzaWdud2Fy
ZS5oDQo+ID4gaW5kZXggYTQ3NmU2MC4uYmI3NTcxNSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJz
L3BjaS9ob3N0L3BjaWUtZGVzaWdud2FyZS5oDQo+ID4gKysrIGIvZHJpdmVycy9wY2kvaG9zdC9w
Y2llLWRlc2lnbndhcmUuaA0KPiA+IEBAIC04Myw2ICs4Myw3IEBAIGludCBkd19wY2llX2NmZ19y
ZWFkKHZvaWQgX19pb21lbSAqYWRkciwgaW50IHdoZXJlLA0KPiA+IGludCBzaXplLCB1MzIgKnZh
bCk7ICBpbnQgZHdfcGNpZV9jZmdfd3JpdGUodm9pZCBfX2lvbWVtICphZGRyLCBpbnQNCj4gPiB3
aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpOyAgaXJxcmV0dXJuX3QgZHdfaGFuZGxlX21zaV9pcnEo
c3RydWN0DQo+ID4gcGNpZV9wb3J0ICpwcCk7ICB2b2lkIGR3X3BjaWVfbXNpX2luaXQoc3RydWN0
IHBjaWVfcG9ydCAqcHApOw0KPiA+ICt2b2lkIGR3X3BjaWVfbXNpX2NmZ19yZXN0b3JlKHN0cnVj
dCBwY2llX3BvcnQgKnBwKTsNCj4gPiAgaW50IGR3X3BjaWVfbGlua191cChzdHJ1Y3QgcGNpZV9w
b3J0ICpwcCk7ICB2b2lkDQo+ID4gZHdfcGNpZV9zZXR1cF9yYyhzdHJ1Y3QgcGNpZV9wb3J0ICpw
cCk7ICBpbnQgZHdfcGNpZV9ob3N0X2luaXQoc3RydWN0DQo+ID4gcGNpZV9wb3J0ICpwcCk7DQo+
IA0KPiAtLQ0KPiBQZW5ndXRyb25peCBlLksuICAgICAgICAgICAgIHwgTHVjYXMgU3RhY2ggICAg
ICAgICAgICAgICAgIHwNCj4gSW5kdXN0cmlhbCBMaW51eCBTb2x1dGlvbnMgICB8IGh0dHA6Ly93
d3cucGVuZ3V0cm9uaXguZGUvICB8DQoNCg0KQmVzdCBSZWdhcmRzDQpSaWNoYXJkIFpodQ0KDQo=

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

* RE: [PATCH v4 02/10] PCI: imx6: add imx6sx pcie support
  2014-10-02  2:38     ` Hong-Xing.Zhu
@ 2014-10-08  7:30       ` Hong-Xing.Zhu
  0 siblings, 0 replies; 23+ messages in thread
From: Hong-Xing.Zhu @ 2014-10-08  7:30 UTC (permalink / raw)
  To: Lucas Stach; +Cc: linux-pci-owner, linux-pci, Shengchao Guo, festevam, tharvey

DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFpodSBSaWNoYXJkLVI2NTAz
Nw0KPiBTZW50OiBUaHVyc2RheSwgT2N0b2JlciAwMiwgMjAxNCAxMDozOSBBTQ0KPiBUbzogTHVj
YXMgU3RhY2gNCj4gQ2M6IFpodSBSaWNoYXJkLVI2NTAzNzsgbGludXgtcGNpLW93bmVyQHZnZXIu
a2VybmVsLm9yZzsgbGludXgtDQo+IHBjaUB2Z2VyLmtlcm5lbC5vcmc7IEd1byBTaGF3bi1SNjUw
NzM7IGZlc3RldmFtQGdtYWlsLmNvbTsNCj4gdGhhcnZleUBnYXRld29ya3MuY29tDQo+IFN1Ympl
Y3Q6IFJlOiBbUEFUQ0ggdjQgMDIvMTBdIFBDSTogaW14NjogYWRkIGlteDZzeCBwY2llIHN1cHBv
cnQNCj4gDQo+IA0KPiANCj4gDQo+ID4g1NogMjAxNMTqOdTCMzDI1aOsz8LO5zEwOjU0o6wiTHVj
YXMgU3RhY2giIDxsLnN0YWNoQHBlbmd1dHJvbml4LmRlPiDQtLXAo7oNCj4gPg0KPiA+IEFtIERp
ZW5zdGFnLCBkZW4gMzAuMDkuMjAxNCwgMTc6MzYgKzA4MDAgc2NocmllYiBSaWNoYXJkIFpodToN
Cj4gPj4gLSBpbXg2c3ggcGNpZSBoYXMgaXRzIG93biBzdGFuZGFsb25lIHBjaWUgcG93ZXIgc3Vw
cGx5Lg0KPiA+PiBJbiBvcmRlciB0byB0dXJuIG9uIHRoZSBpbXg2c3ggcGNpZSBwb3dlciBkdXJp
bmcgaW5pdGlhbGl6YXRpb24uIEFkZA0KPiA+PiB0aGUgcGNpZSByZWd1bGF0b3IgYW5kIHRoZSBn
cGMgcmVnbWFwIGludG8gdGhlIGlteDZzeCBwY2llIHN0cnVjdHVyZS4NCj4gPj4gLSBpbXg2c3gg
cGNpZSBoYXMgdGhlIG5ldyBhZGRlZCByZXNldCBtZWNoYW5pc20sIGFkZCB0aGUgcmVzZXQNCj4g
Pj4gb3BlcmF0aW9ucyBpbnRvIHRoZSBpbml0aWFsaXphdGlvbi4NCj4gPj4gLSBSZWdpc3RlciBv
bmUgUE0gY2FsbC1iYWNrLCBlbnRlci9leGl0IEwyIHN0YXRlIG9mIHRoZSBBU1BNIGR1cmluZw0K
PiA+PiBzeXN0ZW0gc3VzcGVuZC9yZXN1bWUuDQo+ID4+IC0gZGlzcF9heGkgY2xvY2sgaXMgcmVx
dWlyZWQgYnkgcGNpZSBpbmJvdW5kIGF4aSBwb3J0IGFjdHVhbGx5Lg0KPiA+PiBBZGQgb25lIG1v
cmUgY2xvY2sgbmFtZWQgcGNpZV9pbmJvdW5kX2F4aSBmb3IgaW14NnN4IHBjaWUuDQo+ID4+DQo+
ID4+IFNpZ25lZC1vZmYtYnk6IFJpY2hhcmQgWmh1IDxyNjUwMzdAZnJlZXNjYWxlLmNvbT4NCj4g
Pj4gLS0tDQo+ID4+IGRyaXZlcnMvcGNpL2hvc3QvcGNpLWlteDYuYyB8IDE2Mw0KPiA+PiArKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQ0KPiA+PiAxIGZpbGUgY2hh
bmdlZCwgMTQ0IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQ0KPiA+Pg0KPiA+PiBkaWZm
IC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9wY2ktaW14Ni5jDQo+ID4+IGIvZHJpdmVycy9wY2kv
aG9zdC9wY2ktaW14Ni5jIGluZGV4IGVhYzk2ZmIuLmM3NGU4N2QgMTAwNjQ0DQo+ID4+IC0tLSBh
L2RyaXZlcnMvcGNpL2hvc3QvcGNpLWlteDYuYw0KPiA+PiArKysgYi9kcml2ZXJzL3BjaS9ob3N0
L3BjaS1pbXg2LmMNCj4gPj4gQEAgLTIyLDggKzIyLDEwIEBADQo+ID4+ICNpbmNsdWRlIDxsaW51
eC9wY2kuaD4NCj4gPj4gI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiA+PiAj
aW5jbHVkZSA8bGludXgvcmVnbWFwLmg+DQo+ID4+ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9y
L2NvbnN1bWVyLmg+DQo+ID4+ICNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZS5oPg0KPiA+PiAjaW5j
bHVkZSA8bGludXgvc2lnbmFsLmg+DQo+ID4+ICsjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMu
aD4NCj4gPj4gI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQo+ID4+ICNpbmNsdWRlIDxsaW51eC9p
bnRlcnJ1cHQuaD4NCj4gPj4NCj4gPj4gQEAgLTM1LDExICszNywxNSBAQCBzdHJ1Y3QgaW14Nl9w
Y2llIHsNCj4gPj4gICAgaW50ICAgICAgICAgICAgcmVzZXRfZ3BpbzsNCj4gPj4gICAgc3RydWN0
IGNsayAgICAgICAgKnBjaWVfYnVzOw0KPiA+PiAgICBzdHJ1Y3QgY2xrICAgICAgICAqcGNpZV9w
aHk7DQo+ID4+ICsgICAgc3RydWN0IGNsayAgICAgICAgKnBjaWVfaW5ib3VuZF9heGk7DQo+ID4+
ICAgIHN0cnVjdCBjbGsgICAgICAgICpwY2llOw0KPiA+PiAgICBzdHJ1Y3QgcGNpZV9wb3J0ICAg
IHBwOw0KPiA+PiAgICBzdHJ1Y3QgcmVnbWFwICAgICAgICAqaW9tdXhjX2dwcjsNCj4gPj4gKyAg
ICBzdHJ1Y3QgcmVnbWFwICAgICAgICAqZ3BjX2lwc19yZWc7DQo+ID4+ICsgICAgc3RydWN0IHJl
Z3VsYXRvciAgICAqcGNpZV9yZWd1bGF0b3I7DQo+ID4NCj4gPiBJIHdvdWxkIGV4cGVjdCB0aGlz
IHRvIGJlIG5hbWVkIHBjaWVfcGh5X3JlZ3VsYXRvci4NCj4gT2suDQo+ID4NCj4gPj4gICAgdm9p
ZCBfX2lvbWVtICAgICAgICAqbWVtX2Jhc2U7DQo+ID4+IH07DQo+ID4+ICtzdGF0aWMgc3RydWN0
IGlteDZfcGNpZSAqaW14Nl9wY2llOw0KPiA+DQo+ID4gTm8uIFRoaXMgaXMganVzdCBiYWQgc3R5
bGUuIFlvdSBoYXZlIHRoZSBwb2ludGVyIGF2YWlsYWJsZSBlbWJlZGRlZCBpbg0KPiA+IG90aGVy
IHN0cnVjdHVyZXMgYXQgYWxsIHJlbGV2YW50IHBsYWNlcy4gTm8gZ2xvYmFsIHN0YXRpY3MgcGxl
YXNlLg0KPiBPay4NCkhpIEx1Y2FzOg0KUmVnYXJkaW5nIHRvIHRoZSBkZWZpbml0aW9ucyhwYXN0
ZWQgYmVsb3cpIG9mIHRoZSBzdHJ1Y3Qgc3lzY29yZV9vcHMsIGJvdGggc3VzcGVuZCBhbmQgcmVz
dW1lDQpvZiB0aGUgc3lzY29yZV9vcHMgaXMgdm9pZCB0eXBlIGZ1bmN0aW9ucy4NCklmIHRoZXJl
IGlzIG5vIHRoZSBzdGF0aWMgZ2xvYmFsIHN0cnVjdCBpbXg2X3BjaWUsIEkgZG9uJ3Qga25vdyBo
b3cgaXQgY2FuIGJlIHVzZWQgaW4gc3VzcGVuZC9yZXN1bWUgb2YgcGNpX2lteF9zeXNjb3JlX29w
cy4NCnN0cnVjdCBzeXNjb3JlX29wcyB7DQogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbm9kZTsN
CiAgICAgICAgaW50ICgqc3VzcGVuZCkodm9pZCk7DQogICAgICAgIHZvaWQgKCpyZXN1bWUpKHZv
aWQpOw0KICAgICAgICB2b2lkICgqc2h1dGRvd24pKHZvaWQpOw0KfTsNCg0KQmVzdCBSZWdhcmRz
DQpSaWNoYXJkIFpodQ0KDQo+ID4NCj4gPj4NCj4gPj4gLyogUENJZSBSb290IENvbXBsZXggcmVn
aXN0ZXJzIChtZW1vcnktbWFwcGVkKSAqLw0KPiA+PiAjZGVmaW5lIFBDSUVfUkNfTENSICAgICAg
ICAgICAgICAgIDB4N2MNCj4gPj4gQEAgLTc3LDYgKzgzLDE4IEBAIHN0cnVjdCBpbXg2X3BjaWUg
eyAjZGVmaW5lDQo+ID4+IFBIWV9SWF9PVlJEX0lOX0xPX1JYX0RBVEFfRU4gKDEgPDwgNSkgI2Rl
ZmluZQ0KPiA+PiBQSFlfUlhfT1ZSRF9JTl9MT19SWF9QTExfRU4gKDEgPDwgMykNCj4gPj4NCj4g
Pj4gKy8qIEdQQyBQQ0lFIFBIWSBiaXQgZGVmaW5pdGlvbnMgKi8NCj4gPj4gKyNkZWZpbmUgR1BD
X0NOVFIgICAgICAgICAgICAwDQo+ID4+ICsjZGVmaW5lIEdQQ19DTlRSX1BDSUVfUEhZX1BVUF9S
RVEgICAgQklUKDcpDQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19pbXg2c3hf
cGNpZShzdHJ1Y3QgaW14Nl9wY2llICppbXg2X3BjaWUpIHsNCj4gPj4gKyAgICBzdHJ1Y3QgcGNp
ZV9wb3J0ICpwcCA9ICZpbXg2X3BjaWUtPnBwOw0KPiA+PiArICAgIHN0cnVjdCBkZXZpY2Vfbm9k
ZSAqbnAgPSBwcC0+ZGV2LT5vZl9ub2RlOw0KPiA+PiArDQo+ID4+ICsgICAgcmV0dXJuIG9mX2Rl
dmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLGlteDZzeC1wY2llIik7IH0NCj4gPj4gKw0KPiA+
PiBzdGF0aWMgaW50IHBjaWVfcGh5X3BvbGxfYWNrKHZvaWQgX19pb21lbSAqZGJpX2Jhc2UsIGlu
dCBleHBfdmFsKSB7DQo+ID4+ICAgIHUzMiB2YWw7DQo+ID4+IEBAIC0yNzUsMTggKzI5MywyOSBA
QCBzdGF0aWMgaW50IGlteDZfcGNpZV9kZWFzc2VydF9jb3JlX3Jlc2V0KHN0cnVjdA0KPiBwY2ll
X3BvcnQgKnBwKQ0KPiA+PiAgICAgICAgZ290byBlcnJfcGNpZTsNCj4gPj4gICAgfQ0KPiA+Pg0K
PiA+PiAtICAgIC8qIHBvd2VyIHVwIGNvcmUgcGh5IGFuZCBlbmFibGUgcmVmIGNsb2NrICovDQo+
ID4+IC0gICAgcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9NVVhD
X0dQUjEsDQo+ID4+IC0gICAgICAgICAgICBJTVg2UV9HUFIxX1BDSUVfVEVTVF9QRCwgMCA8PCAx
OCk7DQo+ID4+IC0gICAgLyoNCj4gPj4gLSAgICAgKiB0aGUgYXN5bmMgcmVzZXQgaW5wdXQgbmVl
ZCByZWYgY2xvY2sgdG8gc3luYyBpbnRlcm5hbGx5LA0KPiA+PiAtICAgICAqIHdoZW4gdGhlIHJl
ZiBjbG9jayBjb21lcyBhZnRlciByZXNldCwgaW50ZXJuYWwgc3luY2VkDQo+ID4+IC0gICAgICog
cmVzZXQgdGltZSBpcyB0b28gc2hvcnQgLCBjYW5ub3QgbWVldCB0aGUgcmVxdWlyZW1lbnQuDQo+
ID4+IC0gICAgICogYWRkIG9uZSB+MTB1cyBkZWxheSBoZXJlLg0KPiA+PiAtICAgICAqLw0KPiA+
PiAtICAgIHVkZWxheSgxMCk7DQo+ID4+IC0gICAgcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNp
ZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQUjEsDQo+ID4+IC0gICAgICAgICAgICBJTVg2UV9HUFIx
X1BDSUVfUkVGX0NMS19FTiwgMSA8PCAxNik7DQo+ID4+ICsgICAgaWYgKGlzX2lteDZzeF9wY2ll
KGlteDZfcGNpZSkpIHsNCj4gPj4gKyAgICAgICAgcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGlt
eDZfcGNpZS0+cGNpZV9pbmJvdW5kX2F4aSk7DQo+ID4+ICsgICAgICAgIGlmIChyZXQpIHsNCj4g
Pj4gKyAgICAgICAgICAgIGRldl9lcnIocHAtPmRldiwgInVuYWJsZSB0byBlbmFibGUgcGNpZSBj
bG9ja1xuIik7DQo+ID4+ICsgICAgICAgICAgICBnb3RvIGVycl9pbmJvdW5kX2F4aTsNCj4gPj4g
KyAgICAgICAgfQ0KPiA+PiArDQo+ID4+ICsgICAgICAgIHJlZ21hcF91cGRhdGVfYml0cyhpbXg2
X3BjaWUtPmlvbXV4Y19ncHIsIElPTVVYQ19HUFIxMiwNCj4gPj4gKyAgICAgICAgICAgICAgICBJ
TVg2U1hfR1BSMTJfUENJRV9URVNUX1BELCAwKTsNCj4gPj4gKyAgICB9IGVsc2Ugew0KPiA+PiAr
ICAgICAgICAvKiBwb3dlciB1cCBjb3JlIHBoeSBhbmQgZW5hYmxlIHJlZiBjbG9jayAqLw0KPiA+
PiArICAgICAgICByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLCBJT01V
WENfR1BSMSwNCj4gPj4gKyAgICAgICAgICAgICAgICBJTVg2UV9HUFIxX1BDSUVfVEVTVF9QRCwg
MCk7DQo+ID4+ICsgICAgICAgIC8qDQo+ID4+ICsgICAgICAgICAqIHRoZSBhc3luYyByZXNldCBp
bnB1dCBuZWVkIHJlZiBjbG9jayB0byBzeW5jIGludGVybmFsbHksDQo+ID4+ICsgICAgICAgICAq
IHdoZW4gdGhlIHJlZiBjbG9jayBjb21lcyBhZnRlciByZXNldCwgaW50ZXJuYWwgc3luY2VkDQo+
ID4+ICsgICAgICAgICAqIHJlc2V0IHRpbWUgaXMgdG9vIHNob3J0ICwgY2Fubm90IG1lZXQgdGhl
IHJlcXVpcmVtZW50Lg0KPiA+PiArICAgICAgICAgKiBhZGQgb25lIH4xMHVzIGRlbGF5IGhlcmUu
DQo+ID4+ICsgICAgICAgICAqLw0KPiA+PiArICAgICAgICB1ZGVsYXkoMTApOw0KPiA+PiArICAg
ICAgICByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENfR1BS
MSwNCj4gPj4gKyAgICAgICAgICAgICAgICBJTVg2UV9HUFIxX1BDSUVfUkVGX0NMS19FTiwgMSA8
PCAxNik7DQo+ID4+ICsgICAgfQ0KPiA+Pg0KPiA+PiAgICAvKiBhbGxvdyB0aGUgY2xvY2tzIHRv
IHN0YWJpbGl6ZSAqLw0KPiA+PiAgICB1c2xlZXBfcmFuZ2UoMjAwLCA1MDApOw0KPiA+PiBAQCAt
Mjk3LDggKzMyNiwxOSBAQCBzdGF0aWMgaW50IGlteDZfcGNpZV9kZWFzc2VydF9jb3JlX3Jlc2V0
KHN0cnVjdA0KPiBwY2llX3BvcnQgKnBwKQ0KPiA+PiAgICAgICAgbXNsZWVwKDEwMCk7DQo+ID4+
ICAgICAgICBncGlvX3NldF92YWx1ZShpbXg2X3BjaWUtPnJlc2V0X2dwaW8sIDEpOw0KPiA+PiAg
ICB9DQo+ID4+ICsNCj4gPj4gKyAgICAvKg0KPiA+PiArICAgICAqIFJlbGVhc2UgdGhlIFBDSWUg
UEhZIHJlc2V0IGhlcmUsIHRoYXQgd2UgaGF2ZSBzZXQgaW4NCj4gPj4gKyAgICAgKiBpbXg2X3Bj
aWVfaW5pdF9waHkoKSBub3cNCj4gPj4gKyAgICAgKi8NCj4gPj4gKyAgICBpZiAoaXNfaW14NnN4
X3BjaWUoaW14Nl9wY2llKSkNCj4gPj4gKyAgICAgICAgcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZf
cGNpZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQUjUsDQo+ID4+ICsgICAgICAgICAgICAgICAgSU1Y
NlNYX0dQUjVfUENJRV9CVE5SU1QsIDApOw0KPiA+PiArDQo+ID4+ICAgIHJldHVybiAwOw0KPiA+
Pg0KPiA+PiArZXJyX2luYm91bmRfYXhpOg0KPiA+PiArICAgIGNsa19kaXNhYmxlX3VucHJlcGFy
ZShpbXg2X3BjaWUtPnBjaWUpOw0KPiA+PiBlcnJfcGNpZToNCj4gPj4gICAgY2xrX2Rpc2FibGVf
dW5wcmVwYXJlKGlteDZfcGNpZS0+cGNpZV9idXMpOw0KPiA+PiBlcnJfcGNpZV9idXM6DQo+ID4+
IEBAIC0zMTEsNiArMzUxLDI2IEBAIGVycl9wY2llX3BoeToNCj4gPj4gc3RhdGljIHZvaWQgaW14
Nl9wY2llX2luaXRfcGh5KHN0cnVjdCBwY2llX3BvcnQgKnBwKSB7DQo+ID4+ICAgIHN0cnVjdCBp
bXg2X3BjaWUgKmlteDZfcGNpZSA9IHRvX2lteDZfcGNpZShwcCk7DQo+ID4+ICsgICAgaW50IHJl
dDsNCj4gPj4gKw0KPiA+PiArICAgIC8qIFBvd2VyIHVwIHRoZSBzZXBhcmF0ZSBkb21haW4gYXZh
aWxhYmxlIG9uIGkuTVg2U1ggKi8NCj4gPj4gKyAgICBpZiAoaXNfaW14NnN4X3BjaWUoaW14Nl9w
Y2llKSkgew0KPiA+PiArICAgICAgICAvKiBGb3JjZSBQQ0llIFBIWSByZXNldCAqLw0KPiA+PiAr
ICAgICAgICByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENf
R1BSNSwNCj4gPj4gKyAgICAgICAgICAgICAgICBJTVg2U1hfR1BSNV9QQ0lFX0JUTlJTVCwNCj4g
Pj4gKyAgICAgICAgICAgICAgICBJTVg2U1hfR1BSNV9QQ0lFX0JUTlJTVCk7DQo+ID4+ICsNCj4g
Pj4gKyAgICAgICAgcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+Z3BjX2lwc19yZWcsIEdQ
Q19DTlRSLA0KPiA+PiArICAgICAgICAgICAgICAgIEdQQ19DTlRSX1BDSUVfUEhZX1BVUF9SRVEs
DQo+ID4+ICsgICAgICAgICAgICAgICAgR1BDX0NOVFJfUENJRV9QSFlfUFVQX1JFUSk7DQo+ID4+
ICsgICAgICAgIHJlZ3VsYXRvcl9zZXRfdm9sdGFnZShpbXg2X3BjaWUtPnBjaWVfcmVndWxhdG9y
LA0KPiA+PiArICAgICAgICAgICAgICAgIDExMDAwMDAsIDExMDAwMDApOw0KPiA+PiArICAgICAg
ICByZXQgPSByZWd1bGF0b3JfZW5hYmxlKGlteDZfcGNpZS0+cGNpZV9yZWd1bGF0b3IpOw0KPiA+
PiArICAgICAgICBpZiAocmV0KQ0KPiA+PiArICAgICAgICAgICAgZGV2X2luZm8ocHAtPmRldiwg
ImZhaWxlZCB0byBlbmFibGUgcGNpZSByZWd1bGF0b3IuXG4iKTsNCj4gPj4gKyAgICAgICAgcmVn
bWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQUjEyLA0KPiA+
PiArICAgICAgICAgICAgICAgIElNWDZTWF9HUFIxMl9SWF9FUV9NQVNLLCBJTVg2U1hfR1BSMTJf
UlhfRVFfMik7DQo+ID4+ICsgICAgfQ0KPiA+Pg0KPiA+PiAgICByZWdtYXBfdXBkYXRlX2JpdHMo
aW14Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENfR1BSMTIsDQo+ID4+ICAgICAgICAgICAgSU1Y
NlFfR1BSMTJfUENJRV9DVExfMiwgMCA8PCAxMCk7IEBAIC0zMTksNyArMzc5LDcgQEANCj4gPj4g
c3RhdGljIHZvaWQgaW14Nl9wY2llX2luaXRfcGh5KHN0cnVjdCBwY2llX3BvcnQgKnBwKQ0KPiA+
PiAgICByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENfR1BS
MTIsDQo+ID4+ICAgICAgICAgICAgSU1YNlFfR1BSMTJfREVWSUNFX1RZUEUsIFBDSV9FWFBfVFlQ
RV9ST09UX1BPUlQgPDwgMTIpOw0KPiA+PiAgICByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2ll
LT5pb211eGNfZ3ByLCBJT01VWENfR1BSMTIsDQo+ID4+IC0gICAgICAgICAgICBJTVg2UV9HUFIx
Ml9MT1NfTEVWRUwsIDkgPDwgNCk7DQo+ID4+ICsgICAgICAgICAgICBJTVg2UV9HUFIxMl9MT1Nf
TEVWRUwsIElNWDZRX0dQUjEyX0xPU19MRVZFTF85KTsNCj4gPj4NCj4gPj4gICAgcmVnbWFwX3Vw
ZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQUjgsDQo+ID4+ICAgICAg
ICAgICAgSU1YNlFfR1BSOF9UWF9ERUVNUEhfR0VOMSwgMCA8PCAwKTsgQEAgLTM3Nyw3ICs0Mzcs
OCBAQA0KPiA+PiBzdGF0aWMgaW50IGlteDZfcGNpZV9zdGFydF9saW5rKHN0cnVjdCBwY2llX3Bv
cnQgKnBwKQ0KPiA+Pg0KPiA+PiAgICAvKiBTdGFydCBMVFNTTS4gKi8NCj4gPj4gICAgcmVnbWFw
X3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQUjEyLA0KPiA+PiAt
ICAgICAgICAgICAgSU1YNlFfR1BSMTJfUENJRV9DVExfMiwgMSA8PCAxMCk7DQo+ID4+ICsgICAg
ICAgICAgICBJTVg2UV9HUFIxMl9QQ0lFX0NUTF8yLA0KPiA+PiArICAgICAgICAgICAgSU1YNlFf
R1BSMTJfUENJRV9DVExfMik7DQo+ID4+DQo+ID4+ICAgIHJldCA9IGlteDZfcGNpZV93YWl0X2Zv
cl9saW5rKHBwKTsNCj4gPj4gICAgaWYgKHJldCkNCj4gPj4gQEAgLTU1Myw5ICs2MTQsNTAgQEAg
c3RhdGljIGludCBfX2luaXQgaW14Nl9hZGRfcGNpZV9wb3J0KHN0cnVjdCBwY2llX3BvcnQNCj4g
KnBwLA0KPiA+PiAgICByZXR1cm4gMDsNCj4gPj4gfQ0KPiA+Pg0KPiA+PiArI2lmZGVmIENPTkZJ
R19QTV9TTEVFUA0KPiA+PiArc3RhdGljIGludCBwY2lfaW14X3N1c3BlbmQodm9pZCkNCj4gPj4g
K3sNCj4gPj4gKyAgICBpZiAoaXNfaW14NnN4X3BjaWUoaW14Nl9wY2llKSkgew0KPiA+PiArICAg
ICAgICAvKiBQTV9UVVJOX09GRiAqLw0KPiA+PiArICAgICAgICByZWdtYXBfdXBkYXRlX2JpdHMo
aW14Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENfR1BSMTIsDQo+ID4+ICsgICAgICAgICAgICAg
ICAgSU1YNlNYX0dQUjEyX1BDSUVfUE1fVFVSTl9PRkYsDQo+ID4+ICsgICAgICAgICAgICAgICAg
SU1YNlNYX0dQUjEyX1BDSUVfUE1fVFVSTl9PRkYpOw0KPiA+PiArICAgICAgICB1ZGVsYXkoMTAp
Ow0KPiA+PiArICAgICAgICByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3By
LCBJT01VWENfR1BSMTIsDQo+ID4+ICsgICAgICAgICAgICAgICAgSU1YNlNYX0dQUjEyX1BDSUVf
UE1fVFVSTl9PRkYsIDApOw0KPiA+PiArICAgIH0NCj4gPj4gKw0KPiA+PiArICAgIHJldHVybiAw
Ow0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgdm9pZCBwY2lfaW14X3Jlc3VtZSh2b2lk
KQ0KPiA+PiArew0KPiA+PiArICAgIHN0cnVjdCBwY2llX3BvcnQgKnBwID0gJmlteDZfcGNpZS0+
cHA7DQo+ID4+ICsNCj4gPj4gKyAgICBpZiAoaXNfaW14NnN4X3BjaWUoaW14Nl9wY2llKSkgew0K
PiA+PiArICAgICAgICAvKiBSZXNldCBpTVg2U1ggUENJZSAqLw0KPiA+PiArICAgICAgICByZWdt
YXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENfR1BSNSwNCj4gPj4g
KyAgICAgICAgICAgICAgICBJTVg2U1hfR1BSNV9QQ0lFX1BFUlNULCBJTVg2U1hfR1BSNV9QQ0lF
X1BFUlNUKTsNCj4gPj4gKyAgICAgICAgcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9t
dXhjX2dwciwgSU9NVVhDX0dQUjUsDQo+ID4+ICsgICAgICAgICAgICAgICAgSU1YNlNYX0dQUjVf
UENJRV9QRVJTVCwgMCk7DQo+ID4+ICsgICAgICAgIC8qDQo+ID4+ICsgICAgICAgICAqIGNvbnRy
b2xsZXIgbWF5YmUgdHVybiBvZmYsIHJlLWNvbmZpZ3VyZSBhZ2Fpbg0KPiA+PiArICAgICAgICAg
Ki8NCj4gPj4gKyAgICAgICAgZHdfcGNpZV9zZXR1cF9yYyhwcCk7DQo+ID4+ICsNCj4gPj4gKyAg
ICAgICAgaWYgKElTX0VOQUJMRUQoQ09ORklHX1BDSV9NU0kpKQ0KPiA+PiArICAgICAgICAgICAg
ZHdfcGNpZV9tc2lfY2ZnX3Jlc3RvcmUocHApOw0KPiA+PiArICAgIH0NCj4gPj4gK30NCj4gPj4g
Kw0KPiA+PiArc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBwY2lfaW14X3N5c2NvcmVfb3BzID0g
ew0KPiA+PiArICAgIC5zdXNwZW5kID0gcGNpX2lteF9zdXNwZW5kLA0KPiA+PiArICAgIC5yZXN1
bWUgPSBwY2lfaW14X3Jlc3VtZSwNCj4gPj4gK307DQo+ID4+ICsjZW5kaWYNCj4gPj4gKw0KPiA+
PiBzdGF0aWMgaW50IF9faW5pdCBpbXg2X3BjaWVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj
ZSAqcGRldikgew0KPiA+PiAtICAgIHN0cnVjdCBpbXg2X3BjaWUgKmlteDZfcGNpZTsNCj4gPj4g
ICAgc3RydWN0IHBjaWVfcG9ydCAqcHA7DQo+ID4+ICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAg
PSBwZGV2LT5kZXYub2Zfbm9kZTsNCj4gPj4gICAgc3RydWN0IHJlc291cmNlICpkYmlfYmFzZTsN
Cj4gPj4gQEAgLTU3Miw3ICs2NzQsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBpbXg2X3BjaWVfcHJv
YmUoc3RydWN0DQo+IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPj4gICAgaG9va19mYXVsdF9j
b2RlKDE2ICsgNiwgaW14NnFfcGNpZV9hYm9ydF9oYW5kbGVyLCBTSUdCVVMsIDAsDQo+ID4+ICAg
ICAgICAiaW1wcmVjaXNlIGV4dGVybmFsIGFib3J0Iik7DQo+ID4+DQo+ID4+IC0gICAgZGJpX2Jh
c2UgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOw0KPiA+
PiArICAgIGRiaV9iYXNlID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JF
U09VUkNFX01FTSwNCj4gPj4gKyAicmNfZGJpIik7DQo+ID4NCj4gPiBZb3UgYXJlIGJyZWFraW5n
IG9sZCBkZXZpY2V0cmVlcyBoZXJlLiAicmNfZGJpIiBpc24ndCBhIGRvY3VtZW50ZWQNCj4gPiBu
YW1lIGFuZCBpc24ndCBhdmFpbGFibGUgb24gb2xkIERUcy4gQmVzaWRlcyB0aGUgaW14NnEgRFQg
dXNlcyBqdXN0DQo+ID4gImRiaSIgYXMgdGhlIG5hbWUuIERvbid0IHRvdWNoIHRoaXMgY29kZSwg
aXQgZG9lcyBleGFjdGx5IHRoZSByaWdodA0KPiA+IHRoaW5nIGJ5IGdyYWJiaW5nIHRoZSBmaXJz
dCByZWcgcmVzb3VyY2UuDQo+IA0KPiBPaywgY2hhbmdlcyB3b3VsZCBiZSByZW1vdmVkLg0KPiAN
Cj4gPg0KPiA+PiAgICBwcC0+ZGJpX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYt
PmRldiwgZGJpX2Jhc2UpOw0KPiA+PiAgICBpZiAoSVNfRVJSKHBwLT5kYmlfYmFzZSkpDQo+ID4+
ICAgICAgICByZXR1cm4gUFRSX0VSUihwcC0+ZGJpX2Jhc2UpOw0KPiA+PiBAQCAtNjEwLDkgKzcx
MiwyOCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbXg2X3BjaWVfcHJvYmUoc3RydWN0DQo+IHBsYXRm
b3JtX2RldmljZSAqcGRldikNCj4gPj4gICAgICAgIHJldHVybiBQVFJfRVJSKGlteDZfcGNpZS0+
cGNpZSk7DQo+ID4+ICAgIH0NCj4gPj4NCj4gPj4gLSAgICAvKiBHcmFiIEdQUiBjb25maWcgcmVn
aXN0ZXIgcmFuZ2UgKi8NCj4gPj4gLSAgICBpbXg2X3BjaWUtPmlvbXV4Y19ncHIgPQ0KPiA+PiAt
ICAgICAgICAgc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfY29tcGF0aWJsZSgiZnNsLGlteDZxLWlv
bXV4Yy1ncHIiKTsNCj4gPj4gKyAgICBpZiAoaXNfaW14NnN4X3BjaWUoaW14Nl9wY2llKSkgew0K
PiA+PiArICAgICAgICBpbXg2X3BjaWUtPnBjaWVfaW5ib3VuZF9heGkgPSBkZXZtX2Nsa19nZXQo
JnBkZXYtPmRldiwNCj4gPj4gKyAgICAgICAgICAgICAgICAicGNpZV9pbmJvdW5kX2F4aSIpOw0K
PiA+PiArICAgICAgICBpZiAoSVNfRVJSKGlteDZfcGNpZS0+cGNpZV9pbmJvdW5kX2F4aSkpIHsN
Cj4gPj4gKyAgICAgICAgICAgIGRldl9lcnIoJnBkZXYtPmRldiwNCj4gPj4gKyAgICAgICAgICAg
ICAgICAicGNpZSBjbG9jayBzb3VyY2UgbWlzc2luZyBvciBpbnZhbGlkXG4iKTsNCj4gPj4gKyAg
ICAgICAgICAgIHJldHVybiBQVFJfRVJSKGlteDZfcGNpZS0+cGNpZV9pbmJvdW5kX2F4aSk7DQo+
ID4+ICsgICAgICAgIH0NCj4gPj4gKw0KPiA+PiArICAgICAgICBpbXg2X3BjaWUtPnBjaWVfcmVn
dWxhdG9yID0gZGV2bV9yZWd1bGF0b3JfZ2V0KHBwLT5kZXYsDQo+ID4+ICsgICAgICAgICAgICAg
ICAgInBjaWUtcGh5Iik7DQo+ID4+ICsNCj4gPj4gKyAgICAgICAgaW14Nl9wY2llLT5pb211eGNf
Z3ByID0NCj4gPj4gKyAgICAgICAgICAgICBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9jb21wYXRp
YmxlDQo+ID4+ICsgICAgICAgICAgICAgKCJmc2wsaW14NnN4LWlvbXV4Yy1ncHIiKTsNCj4gPj4g
KyAgICAgICAgaW14Nl9wY2llLT5ncGNfaXBzX3JlZyA9DQo+ID4+ICsgICAgICAgICAgICAgc3lz
Y29uX3JlZ21hcF9sb29rdXBfYnlfY29tcGF0aWJsZSgiZnNsLGlteDZzeC1ncGMiKTsNCj4gPj4g
KyAgICB9IGVsc2Ugew0KPiA+PiArICAgICAgICBpbXg2X3BjaWUtPmlvbXV4Y19ncHIgPQ0KPiA+
PiArICAgICAgICAgICAgc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfY29tcGF0aWJsZQ0KPiA+PiAr
ICAgICAgICAgICAgKCJmc2wsaW14NnEtaW9tdXhjLWdwciIpOw0KPiA+PiArICAgIH0NCj4gPj4g
ICAgaWYgKElTX0VSUihpbXg2X3BjaWUtPmlvbXV4Y19ncHIpKSB7DQo+ID4+ICAgICAgICBkZXZf
ZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZmluZCBpb211eGMgcmVnaXN0ZXJzXG4iKTsNCj4g
Pj4gICAgICAgIHJldHVybiBQVFJfRVJSKGlteDZfcGNpZS0+aW9tdXhjX2dwcik7IEBAIC02MjMs
NiArNzQ0LDkgQEANCj4gPj4gc3RhdGljIGludCBfX2luaXQgaW14Nl9wY2llX3Byb2JlKHN0cnVj
dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4+ICAgICAgICByZXR1cm4gcmV0Ow0KPiA+Pg0K
PiA+PiAgICBwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbXg2X3BjaWUpOw0KPiA+PiArI2lm
ZGVmIENPTkZJR19QTV9TTEVFUA0KPiA+PiArICAgIHJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZwY2lf
aW14X3N5c2NvcmVfb3BzKTsNCj4gPj4gKyNlbmRpZg0KPiA+PiAgICByZXR1cm4gMDsNCj4gPj4g
fQ0KPiA+Pg0KPiA+PiBAQCAtNjM2LDYgKzc2MCw3IEBAIHN0YXRpYyB2b2lkIGlteDZfcGNpZV9z
aHV0ZG93bihzdHJ1Y3QNCj4gPj4gcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+Pg0KPiA+PiBz
dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBpbXg2X3BjaWVfb2ZfbWF0Y2hbXSA9IHsN
Cj4gPj4gICAgeyAuY29tcGF0aWJsZSA9ICJmc2wsaW14NnEtcGNpZSIsIH0sDQo+ID4+ICsgICAg
eyAuY29tcGF0aWJsZSA9ICJmc2wsaW14NnN4LXBjaWUiLCB9LA0KPiA+PiAgICB7fSwNCj4gPj4g
fTsNCj4gPj4gTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaW14Nl9wY2llX29mX21hdGNoKTsNCj4g
Pg0KPiA+IC0tDQo+ID4gUGVuZ3V0cm9uaXggZS5LLiAgICAgICAgICAgICB8IEx1Y2FzIFN0YWNo
ICAgICAgICAgICAgICAgICB8DQo+ID4gSW5kdXN0cmlhbCBMaW51eCBTb2x1dGlvbnMgICB8IGh0
dHA6Ly93d3cucGVuZ3V0cm9uaXguZGUvICB8DQo+ID4NCj4gPg0KPiBCZXN0IHJlZ2FyZHMNCj4g
UmljaGFyZA0K

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

* Re: [PATCH v4 10/10] ARM: imx6sx: enable pcie on imx6sx sdb board
  2014-10-08  6:41       ` Hong-Xing.Zhu
@ 2014-10-09  1:11         ` Fabio Estevam
  2014-10-09  5:39           ` Hong-Xing.Zhu
  0 siblings, 1 reply; 23+ messages in thread
From: Fabio Estevam @ 2014-10-09  1:11 UTC (permalink / raw)
  To: Hong-Xing.Zhu
  Cc: linux-pci-owner, linux-pci, Shengchao Guo, Lucas Stach, Tim Harvey

On Wed, Oct 8, 2014 at 3:41 AM, Hong-Xing.Zhu@freescale.com
<Hong-Xing.Zhu@freescale.com> wrote:

> This hunk is wrong. There is no "power-on-gpio" in the binding anymore.
> Also there is already a change in Shawns tree to model this as a always-on regulator. If we really want to control pci bus power this needs to be done through this regulator, not some arbitrary gpio hack.

Yes, I never asked you to include 'power-on-gpio'. What needs to be
done is the same as in imx6qdl-sabresd, which passes the regulator
that powers the PCI slot. You can refer to Shawn's tree or linux-next.

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

* RE: [PATCH v4 10/10] ARM: imx6sx: enable pcie on imx6sx sdb board
  2014-10-09  1:11         ` Fabio Estevam
@ 2014-10-09  5:39           ` Hong-Xing.Zhu
  0 siblings, 0 replies; 23+ messages in thread
From: Hong-Xing.Zhu @ 2014-10-09  5:39 UTC (permalink / raw)
  To: Fabio Estevam; +Cc: linux-pci, Shengchao Guo, Lucas Stach, Tim Harvey

DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEZhYmlvIEVzdGV2YW0gW21h
aWx0bzpmZXN0ZXZhbUBnbWFpbC5jb21dDQo+IFNlbnQ6IFRodXJzZGF5LCBPY3RvYmVyIDA5LCAy
MDE0IDk6MTEgQU0NCj4gVG86IFpodSBSaWNoYXJkLVI2NTAzNw0KPiBDYzogbGludXgtcGNpLW93
bmVyQHZnZXIua2VybmVsLm9yZzsgbGludXgtcGNpQHZnZXIua2VybmVsLm9yZzsgR3VvIFNoYXdu
LQ0KPiBSNjUwNzM7IEx1Y2FzIFN0YWNoOyBUaW0gSGFydmV5DQo+IFN1YmplY3Q6IFJlOiBbUEFU
Q0ggdjQgMTAvMTBdIEFSTTogaW14NnN4OiBlbmFibGUgcGNpZSBvbiBpbXg2c3ggc2RiIGJvYXJk
DQo+IA0KPiBPbiBXZWQsIE9jdCA4LCAyMDE0IGF0IDM6NDEgQU0sIEhvbmctWGluZy5aaHVAZnJl
ZXNjYWxlLmNvbSA8SG9uZy0NCj4gWGluZy5aaHVAZnJlZXNjYWxlLmNvbT4gd3JvdGU6DQo+IA0K
PiA+IFRoaXMgaHVuayBpcyB3cm9uZy4gVGhlcmUgaXMgbm8gInBvd2VyLW9uLWdwaW8iIGluIHRo
ZSBiaW5kaW5nIGFueW1vcmUuDQo+ID4gQWxzbyB0aGVyZSBpcyBhbHJlYWR5IGEgY2hhbmdlIGlu
IFNoYXducyB0cmVlIHRvIG1vZGVsIHRoaXMgYXMgYSBhbHdheXMtb24NCj4gcmVndWxhdG9yLiBJ
ZiB3ZSByZWFsbHkgd2FudCB0byBjb250cm9sIHBjaSBidXMgcG93ZXIgdGhpcyBuZWVkcyB0byBi
ZSBkb25lDQo+IHRocm91Z2ggdGhpcyByZWd1bGF0b3IsIG5vdCBzb21lIGFyYml0cmFyeSBncGlv
IGhhY2suDQo+IA0KPiBZZXMsIEkgbmV2ZXIgYXNrZWQgeW91IHRvIGluY2x1ZGUgJ3Bvd2VyLW9u
LWdwaW8nLiBXaGF0IG5lZWRzIHRvIGJlIGRvbmUgaXMNCj4gdGhlIHNhbWUgYXMgaW4gaW14NnFk
bC1zYWJyZXNkLCB3aGljaCBwYXNzZXMgdGhlIHJlZ3VsYXRvciB0aGF0IHBvd2VycyB0aGUgUENJ
DQo+IHNsb3QuIFlvdSBjYW4gcmVmZXIgdG8gU2hhd24ncyB0cmVlIG9yIGxpbnV4LW5leHQuDQpb
UmljaGFyZF0gVW5kZXJzdGFuZCwgdGhhbmtzIGEgbG90Lg0KDQpCVFcsIHRoZSBlbWFpbCBuYW1l
IGNoYW5nZSBpcyBzdGlsbCBvbi1nb2luZywgd291bGQgYmUgZmluaXNoZWQgbGF0ZXIuDQoNCkJl
c3QgUmVnYXJkcw0KUmljaGFyZCBaaHUNCg0K

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

* [PATCH v4 05/10] PCI: designware: fix one potential assignment error of cfg start
  2014-09-30  9:19 [PATCH v4]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu
@ 2014-09-30  9:19 ` Richard Zhu
  0 siblings, 0 replies; 23+ messages in thread
From: Richard Zhu @ 2014-09-30  9:19 UTC (permalink / raw)
  To: linux-pci-owner
  Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey, Richard Zhu

if va_cfg0_base/va_cfg1_base are initialized by
designware core, the pp->cfg.start is not initialized
properly, when IORESOURCE_MEM "config" is represented
as cfg space resource.
solution: assign cfg_res->start to pp->cfg.start.

Signed-off-by: Richard Zhu <r65037@freescale.com>
---
 drivers/pci/host/pcie-designware.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/pci/host/pcie-designware.c b/drivers/pci/host/pcie-designware.c
index ae1e6c5..f1f127f 100644
--- a/drivers/pci/host/pcie-designware.c
+++ b/drivers/pci/host/pcie-designware.c
@@ -444,6 +444,7 @@ int __init dw_pcie_host_init(struct pcie_port *pp)
 	if (cfg_res) {
 		pp->config.cfg0_size = resource_size(cfg_res)/2;
 		pp->config.cfg1_size = resource_size(cfg_res)/2;
+		pp->cfg.start = cfg_res->start;
 		pp->cfg0_base = cfg_res->start;
 		pp->cfg1_base = cfg_res->start + pp->config.cfg0_size;
 
-- 
1.9.1


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

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

Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-09-30  9:36 [PATCH v4]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu
2014-09-30  9:36 ` [PATCH v4 01/10] PCI: imx6: wait the clocks to stabilize after ref_en Richard Zhu
2014-09-30  9:36 ` [PATCH v4 02/10] PCI: imx6: add imx6sx pcie support Richard Zhu
2014-09-30 14:54   ` Lucas Stach
2014-10-02  2:38     ` Hong-Xing.Zhu
2014-10-08  7:30       ` Hong-Xing.Zhu
2014-09-30  9:36 ` [PATCH v4 03/10] PCI: imx6: Fix possible dead lock Richard Zhu
2014-09-30 14:57   ` Lucas Stach
2014-09-30  9:36 ` [PATCH v4 04/10] PCI: designware: refine setup_rc and add msi data restore Richard Zhu
2014-09-30 14:58   ` Lucas Stach
2014-10-08  6:45     ` Hong-Xing.Zhu
2014-09-30  9:36 ` [PATCH v4 05/10] PCI: designware: fix one potential assignment error of cfg start Richard Zhu
2014-09-30  9:36 ` [PATCH v4 06/10] ARM: imx6qdl: enable pcie on imx6qdl sabreauto Richard Zhu
2014-09-30  9:36 ` [PATCH v4 07/10] ARM: imx6: update dts and binding for imx6sx pcie Richard Zhu
2014-09-30  9:36 ` [PATCH v4 08/10] ARM: imx6sx: add syscon into gpc dts Richard Zhu
2014-09-30  9:36 ` [PATCH v4 09/10] ARM: imx6sx: add imx6sx pcie related gpr bits definitions Richard Zhu
2014-09-30  9:36 ` [PATCH v4 10/10] ARM: imx6sx: enable pcie on imx6sx sdb board Richard Zhu
2014-09-30 16:21   ` Fabio Estevam
2014-10-02  2:40     ` Hong-Xing.Zhu
2014-10-08  6:41       ` Hong-Xing.Zhu
2014-10-09  1:11         ` Fabio Estevam
2014-10-09  5:39           ` Hong-Xing.Zhu
  -- strict thread matches above, loose matches on Subject: below --
2014-09-30  9:19 [PATCH v4]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu
2014-09-30  9:19 ` [PATCH v4 05/10] PCI: designware: fix one potential assignment error of cfg start Richard 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).