summaryrefslogtreecommitdiff
path: root/drivers/pci
diff options
context:
space:
mode:
authorJay Agarwal <jagarwal@nvidia.com>2014-01-06 15:59:18 +0530
committerJay Agarwal <jagarwal@nvidia.com>2014-01-07 03:39:47 -0800
commit9e81b72520846f64e935ae07da362394f8386dd7 (patch)
tree3b0d6d55ce3978d5c9372484dc1e4cc40ca2d7e1 /drivers/pci
parente3df216ae143ddbbe8280a47743d849a6b932e1a (diff)
pcie: host: tegra: Disable msi for port driver
MSI for port driver results in panic, so disabled Bug 1421847 Change-Id: I5e9e10ad80cbf86d763be11b3f473ae7cea9f772 Signed-off-by: Jay Agarwal <jagarwal@nvidia.com> Reviewed-on: http://git-master/r/351374 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Venu Byravarasu <vbyravarasu@nvidia.com>
Diffstat (limited to 'drivers/pci')
-rw-r--r--drivers/pci/host/pci-tegra.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/drivers/pci/host/pci-tegra.c b/drivers/pci/host/pci-tegra.c
index 359c29da4695..c8417a096cc9 100644
--- a/drivers/pci/host/pci-tegra.c
+++ b/drivers/pci/host/pci-tegra.c
@@ -1394,15 +1394,23 @@ retry:
return false;
}
-static void tegra_pcie_apply_sw_war(int index)
+static void tegra_pcie_apply_sw_war(int index, bool enum_done)
{
unsigned int data;
+ struct pci_dev *pdev = NULL;
PR_FUNC_LINE;
- /* WAR for Eye diagram failure on lanes for T124 platforms */
- data = rp_readl(NV_PCIE2_RP_ECTL_1_R2, index);
- data |= PCIE2_RP_ECTL_1_R2_TX_DRV_CNTL_1C;
- rp_writel(data, NV_PCIE2_RP_ECTL_1_R2, index);
+ if (enum_done) {
+ /* disable msi for port driver to avoid panic */
+ for_each_pci_dev(pdev)
+ if (pci_pcie_type(pdev) == PCI_EXP_TYPE_ROOT_PORT)
+ pdev->msi_enabled = 0;
+ } else {
+ /* WAR for Eye diagram failure on lanes for T124 platforms */
+ data = rp_readl(NV_PCIE2_RP_ECTL_1_R2, index);
+ data |= PCIE2_RP_ECTL_1_R2_TX_DRV_CNTL_1C;
+ rp_writel(data, NV_PCIE2_RP_ECTL_1_R2, index);
+ }
}
/* Enable various features of root port */
@@ -1436,7 +1444,7 @@ static void tegra_pcie_enable_rp_features(int index)
data |= PCIE2_RP_VEND_CTL1_ERPT;
rp_writel(data, NV_PCIE2_RP_VEND_CTL1, index);
- tegra_pcie_apply_sw_war(index);
+ tegra_pcie_apply_sw_war(index, false);
}
static void tegra_pcie_disable_ctlr(int index)
@@ -1739,6 +1747,7 @@ static void tegra_pcie_enable_features(void)
tegra_pcie_pll_pdn();
tegra_pcie_enable_aspm();
+ tegra_pcie_apply_sw_war(0, true);
}
static int __init tegra_pcie_init(void)