summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/pcie.c
diff options
context:
space:
mode:
authorJay Agarwal <jagarwal@nvidia.com>2012-02-27 20:19:20 +0530
committerSimone Willett <swillett@nvidia.com>2012-03-07 22:14:35 -0800
commit65b1807ed71f72a6f3d8d47e70e4f42d9a874518 (patch)
tree3ad94d36cecb338d2f3a4c278fd408441620329a /arch/arm/mach-tegra/pcie.c
parentd4729f6e4ba0416f0f38383cfe440518653cabaa (diff)
tegra: pcie: Fix individual port detection on T20
This commit fix two issues. 1. MMIO space should be reserved for T30 as well 2. There is a bug in link reset sequence causing problem in detecting the other slot as well on T20 bug 826956 bug 637871 Reviewed-on: http://git-master/r/66814 (cherry picked from commit 11ce98902d0687646eb30a4bd1f9a1d5e8da34ce) Change-Id: I1843e3a1d897a36768b05b33ab7624889191d011 Signed-off-by: Manoj Chourasia <mchourasia@nvidia.com> Reviewed-on: http://git-master/r/86134 Reviewed-by: Simone Willett <swillett@nvidia.com> Tested-by: Simone Willett <swillett@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/pcie.c')
-rw-r--r--arch/arm/mach-tegra/pcie.c27
1 files changed, 11 insertions, 16 deletions
diff --git a/arch/arm/mach-tegra/pcie.c b/arch/arm/mach-tegra/pcie.c
index e16910cbe93c..462142f88072 100644
--- a/arch/arm/mach-tegra/pcie.c
+++ b/arch/arm/mach-tegra/pcie.c
@@ -236,15 +236,9 @@
#define MMIO_BASE (TEGRA_PCIE_BASE + SZ_4M)
#define MMIO_SIZE SZ_64K
#define MEM_BASE_0 (TEGRA_PCIE_BASE + SZ_256M)
-#define MEM_SIZE_0 SZ_128M
-#define MEM_BASE_1 (MEM_BASE_0 + MEM_SIZE_0)
-#define MEM_SIZE_1 SZ_128M
-#define MEM_SIZE (MEM_SIZE_0 + MEM_SIZE_1)
-#define PREFETCH_MEM_BASE_0 (MEM_BASE_1 + MEM_SIZE_1)
-#define PREFETCH_MEM_SIZE_0 SZ_128M
-#define PREFETCH_MEM_BASE_1 (PREFETCH_MEM_BASE_0 + PREFETCH_MEM_SIZE_0)
-#define PREFETCH_MEM_SIZE_1 SZ_128M
-#define PREFETCH_MEM_SIZE (PREFETCH_MEM_SIZE_0 + PREFETCH_MEM_SIZE_1)
+#define MEM_SIZE SZ_256M
+#define PREFETCH_MEM_BASE_0 (MEM_BASE_0 + MEM_SIZE)
+#define PREFETCH_MEM_SIZE SZ_512M
#else
@@ -992,6 +986,7 @@ static int __init tegra_pcie_get_resources(void)
goto err_map_reg;
}
res_mmio = &tegra_pcie.res_mmio;
+
err = request_resource(&iomem_resource, res_mmio);
if (err) {
pr_err("PCIE: Failed to request resources: %d\n", err);
@@ -1045,6 +1040,13 @@ static bool tegra_pcie_check_link(struct tegra_pcie_port *pp, int idx,
int timeout;
do {
+ /* Pulse the PEX reset */
+ reg = afi_readl(reset_reg) & ~AFI_PEX_CTRL_RST;
+ afi_writel(reg, reset_reg);
+ mdelay(1);
+ reg = afi_readl(reset_reg) | AFI_PEX_CTRL_RST;
+ afi_writel(reg, reset_reg);
+
timeout = TEGRA_PCIE_LINKUP_TIMEOUT;
while (timeout) {
reg = readl(pp->base + RP_VEND_XP);
@@ -1073,13 +1075,6 @@ static bool tegra_pcie_check_link(struct tegra_pcie_port *pp, int idx,
}
retry:
- /* Pulse the PEX reset */
- reg = afi_readl(reset_reg) | AFI_PEX_CTRL_RST;
- afi_writel(reg, reset_reg);
- mdelay(1);
- reg = afi_readl(reset_reg) & ~AFI_PEX_CTRL_RST;
- afi_writel(reg, reset_reg);
-
retries--;
} while (retries);