summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/pcie.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-tegra/pcie.c')
-rw-r--r--arch/arm/mach-tegra/pcie.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/arch/arm/mach-tegra/pcie.c b/arch/arm/mach-tegra/pcie.c
index b98d4892b5ee..1c4ee1b1f5ce 100644
--- a/arch/arm/mach-tegra/pcie.c
+++ b/arch/arm/mach-tegra/pcie.c
@@ -540,7 +540,7 @@ static void __devinit tegra_pcie_relax_enable(struct pci_dev *dev)
}
DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID, tegra_pcie_relax_enable);
-static void __init tegra_pcie_preinit(void)
+static void tegra_pcie_preinit(void)
{
pcie_io_space.name = "PCIe I/O Space";
pcie_io_space.start = PCIBIOS_MIN_IO;
@@ -1099,13 +1099,14 @@ 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);
- reg = afi_readl(reset_reg) | AFI_PEX_CTRL_RST;
- afi_writel(reg, reset_reg);
+ if (--retries) {
+ /* Pulse the PEX reset */
+ reg = afi_readl(reset_reg) & ~AFI_PEX_CTRL_RST;
+ afi_writel(reg, reset_reg);
+ reg = afi_readl(reset_reg) | AFI_PEX_CTRL_RST;
+ afi_writel(reg, reset_reg);
+ }
- retries--;
} while (retries);
return false;
@@ -1201,9 +1202,13 @@ static int tegra_pci_probe(struct platform_device *pdev)
static int tegra_pci_suspend(struct device *dev)
{
+ int ret = 0;
struct pci_dev *pdev = NULL;
int i, size, ndev = 0;
+ if (!tegra_pcie.num_ports)
+ return ret;
+
for_each_pci_dev(pdev) {
/* save state of pcie devices before powering off regulators */
pci_save_state(pdev);
@@ -1243,10 +1248,12 @@ static int tegra_pci_resume_noirq(struct device *dev)
static int tegra_pci_resume(struct device *dev)
{
- int ret;
+ int ret = 0;
int i, size, ndev = 0;
struct pci_dev *pdev = NULL;
+ if (!tegra_pcie.num_ports)
+ return ret;
ret = tegra_pcie_power_on();
tegra_pcie_enable_controller();
tegra_pcie_setup_translations();