From 9b5cd0948b67e1750498b5ff85267e87d3b4c5b3 Mon Sep 17 00:00:00 2001 From: Wei Yongjun Date: Sat, 12 Oct 2013 14:11:02 +0800 Subject: [PATCH 1/5] PCI: imx6: Remove redundant dev_err() in imx6_pcie_probe() There is an error message within devm_ioremap_resource() already, so remove the dev_err() call to avoid redundant error message. Signed-off-by: Wei Yongjun Signed-off-by: Bjorn Helgaas Reviewed-by: Jingoo Han Acked-by: Shawn Guo --- drivers/pci/host/pci-imx6.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c index 5afa9226a080..51338ac5775d 100644 --- a/drivers/pci/host/pci-imx6.c +++ b/drivers/pci/host/pci-imx6.c @@ -439,7 +439,6 @@ static int __init imx6_pcie_probe(struct platform_device *pdev) pp->dbi_base = devm_ioremap_resource(&pdev->dev, dbi_base); if (IS_ERR(pp->dbi_base)) { - dev_err(&pdev->dev, "unable to remap dbi_base\n"); ret = PTR_ERR(pp->dbi_base); goto err; } From 4ec3ed7f5e91e9325c810dcb995ef5a55e4a79a6 Mon Sep 17 00:00:00 2001 From: Tim Harvey Date: Thu, 17 Oct 2013 17:27:22 -0700 Subject: [PATCH 2/5] PCI: imx6: Fix imprecise abort handler An imprecise abort is triggered when a port behind a switch is accessed and no device is present. At enumeration, imprecise aborts are not enabled thus this ends up getting deferred until the kernel has completed init. At that point we must not adjust PC - the handler must do nothing, but a handler must exist. This fixes random crashes that occur right after freeing init. Tested-by: Marek Vasut Signed-off-by: Tim Harvey Signed-off-by: Bjorn Helgaas Acked-by: Shawn Guo Acked-by: Marek Vasut --- drivers/pci/host/pci-imx6.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c index 51338ac5775d..7426ad961b81 100644 --- a/drivers/pci/host/pci-imx6.c +++ b/drivers/pci/host/pci-imx6.c @@ -200,12 +200,6 @@ static int pcie_phy_write(void __iomem *dbi_base, int addr, int data) static int imx6q_pcie_abort_handler(unsigned long addr, unsigned int fsr, struct pt_regs *regs) { - /* - * If it was an imprecise abort, then we need to correct the - * return address to be _after_ the instruction. - */ - if (fsr & (1 << 10)) - regs->ARM_pc += 4; return 0; } From 017f10e1c78e14d48be7a28f2c33a32dae15fee5 Mon Sep 17 00:00:00 2001 From: Marek Vasut Date: Tue, 22 Oct 2013 22:12:18 -0700 Subject: [PATCH 3/5] PCI: imx6: Increase link startup timeout A longer link startup timeout is required when certain PCI switches are attached to the root complex. This was tested with a Pericom switch and a PLX switch. Signed-off-by: Marek Vasut Signed-off-by: Bjorn Helgaas Acked-by: Tim Harvey Acked-by: Shawn Guo --- drivers/pci/host/pci-imx6.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c index 7426ad961b81..baafb397a698 100644 --- a/drivers/pci/host/pci-imx6.c +++ b/drivers/pci/host/pci-imx6.c @@ -318,7 +318,7 @@ static void imx6_pcie_host_init(struct pcie_port *pp) while (!dw_pcie_link_up(pp)) { usleep_range(100, 1000); count++; - if (count >= 10) { + if (count >= 200) { dev_err(pp->dev, "phy link never came up\n"); dev_dbg(pp->dev, "DEBUG_R0: 0x%08x, DEBUG_R1: 0x%08x\n", From 8bcadbe17207aee0df4a1f5cb41371d71bf3e4b0 Mon Sep 17 00:00:00 2001 From: Sachin Kamat Date: Mon, 21 Oct 2013 14:36:41 +0530 Subject: [PATCH 4/5] PCI: imx6: Remove redundant of_match_ptr imx6_pcie_of_match is always compiled in because PCI_IMX6 depends on SOC_IMX6Q, which only supports OF build. Hence of_match_ptr is not required. [bhelgaas: add changelog details from Shawn] Signed-off-by: Sachin Kamat Signed-off-by: Bjorn Helgaas Acked-by: Shawn Guo Cc: Sean Cross --- drivers/pci/host/pci-imx6.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c index baafb397a698..0a435b8f54c2 100644 --- a/drivers/pci/host/pci-imx6.c +++ b/drivers/pci/host/pci-imx6.c @@ -551,7 +551,7 @@ static struct platform_driver imx6_pcie_driver = { .driver = { .name = "imx6q-pcie", .owner = THIS_MODULE, - .of_match_table = of_match_ptr(imx6_pcie_of_match), + .of_match_table = imx6_pcie_of_match, }, }; From f216f57ffe6eede3c8a763add65d331e688f8c56 Mon Sep 17 00:00:00 2001 From: Marek Vasut Date: Tue, 15 Oct 2013 18:06:38 +0200 Subject: [PATCH 5/5] PCI: imx6: Probe the PCIe in fs_initcall() Probe the PCIe driver in fs_initcall() instead of module_init() to assure that pci_assign_unassigned_resources() will be called early. This function is called in dw_pcie_host_init(), which is in turn called from imx6_add_pcie_port(), which is called from imx6_pcie_probe(). If this is not called early, we will hit resource collisions since pcieport driver is then probed way too late. Signed-off-by: Marek Vasut Signed-off-by: Bjorn Helgaas Acked-by: Shawn Guo Cc: Frank Li Cc: Jingoo Han Cc: Mohit KUMAR Cc: Pratyush Anand Cc: Richard Zhu Cc: Sascha Hauer Cc: Sean Cross Cc: Siva Reddy Kallam Cc: Srikanth T Shivanand Cc: Tim Harvey Cc: Troy Kisky Cc: Yinghai Lu --- drivers/pci/host/pci-imx6.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c index 0a435b8f54c2..bd70af8f31ac 100644 --- a/drivers/pci/host/pci-imx6.c +++ b/drivers/pci/host/pci-imx6.c @@ -561,7 +561,7 @@ static int __init imx6_pcie_init(void) { return platform_driver_probe(&imx6_pcie_driver, imx6_pcie_probe); } -module_init(imx6_pcie_init); +fs_initcall(imx6_pcie_init); MODULE_AUTHOR("Sean Cross "); MODULE_DESCRIPTION("Freescale i.MX6 PCIe host controller driver");