]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
pcie: host: tegra: fix port register access
authorVidya Sagar <vidyas@nvidia.com>
Tue, 24 Nov 2015 18:08:35 +0000 (23:38 +0530)
committermobile promotions <svcmobile_promotions@nvidia.com>
Thu, 3 Dec 2015 17:42:03 +0000 (09:42 -0800)
access root port registers only if rootport is active

Bug 1705758

Change-Id: Iac2f2b673d30824188220ddddf3a037535ab1f34
Signed-off-by: Vidya Sagar <vidyas@nvidia.com>
Reviewed-on: http://git-master/r/837265
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
drivers/pci/host/pci-tegra.c

index 9eb1bca99e31ba2a366f956f4f08bb0b8d4bf97f..a006e2fa8b70eb05ba416911821c2c0a49e9f8a1 100644 (file)
@@ -831,6 +831,9 @@ static void tegra_pcie_enable_aer(struct tegra_pcie_port *port, bool enable)
        unsigned int data;
 
        PR_FUNC_LINE;
+       if (!port->status)
+               return;
+
        data = rp_readl(port, NV_PCIE2_RP_VEND_CTL1);
        if (enable)
                data |= PCIE2_RP_VEND_CTL1_ERPT;
@@ -3724,6 +3727,9 @@ static int tegra_pcie_ports_seq_show(struct seq_file *s, void *v)
 
        port = list_entry(v, struct tegra_pcie_port, list);
 
+       if (!port->status)
+               return 0;
+
        value = readl(port->base + RP_VEND_XP);
 
        if (value & RP_VEND_XP_DL_UP)
@@ -3882,8 +3888,9 @@ static int tegra_pcie_debugfs_init(struct tegra_pcie *pcie)
                goto remove;
 
        list_for_each_entry(port, &pcie->ports, list) {
-               if (tegra_pcie_port_debugfs_init(port))
-                       goto remove;
+               if (port->status)
+                       if (tegra_pcie_port_debugfs_init(port))
+                               goto remove;
        }
 
        return 0;
@@ -3904,11 +3911,12 @@ static int tegra_pcie_probe_complete(struct tegra_pcie *pcie)
        if (ret)
                return ret;
 
-       if (IS_ENABLED(CONFIG_DEBUG_FS)) {
-               int ret = tegra_pcie_debugfs_init(pcie);
-               if (ret < 0)
-                       dev_err(&pdev->dev, "failed to setup debugfs: %d\n",
-                               ret);
+       if (IS_ENABLED(CONFIG_DEBUG_FS))
+               if (pcie->num_ports) {
+                       int ret = tegra_pcie_debugfs_init(pcie);
+                       if (ret < 0)
+                               dev_err(&pdev->dev, "failed to setup debugfs: %d\n",
+                                       ret);
        }
 
        return 0;