diff options
Diffstat (limited to 'arch/arm/mach-tegra/pcie.c')
-rw-r--r-- | arch/arm/mach-tegra/pcie.c | 23 |
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(); |