From: Mike Rapoport Date: Wed, 2 Mar 2011 12:34:05 +0000 (+0200) Subject: ARM: tegra: add PCI Express power gating X-Git-Tag: firefly_0821_release~7613^2~1815^2~3 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=b96cc7fe190b9356633c70afae61ee0637b000ee;p=firefly-linux-kernel-4.4.55.git ARM: tegra: add PCI Express power gating Signed-off-by: Mike Rapoport Signed-off-by: Colin Cross --- diff --git a/arch/arm/mach-tegra/pcie.c b/arch/arm/mach-tegra/pcie.c index 6de5ef47c027..2941212b853c 100644 --- a/arch/arm/mach-tegra/pcie.c +++ b/arch/arm/mach-tegra/pcie.c @@ -39,6 +39,7 @@ #include #include #include +#include /* register definitions */ #define AFI_OFFSET 0x3800 @@ -688,13 +689,30 @@ static void tegra_pcie_power_off(void) tegra_periph_reset_assert(tegra_pcie.afi_clk); tegra_periph_reset_assert(tegra_pcie.pex_clk); + tegra_powergate_power_off(TEGRA_POWERGATE_PCIE); tegra_pcie_xclk_clamp(true); } -static int tegra_pcie_power_on(void) +static int tegra_pcie_power_regate(void) { + int err; + + tegra_pcie_power_off(); + tegra_pcie_xclk_clamp(true); + tegra_periph_reset_assert(tegra_pcie.pcie_xclk); + tegra_periph_reset_assert(tegra_pcie.afi_clk); + + err = tegra_powergate_sequence_power_up(TEGRA_POWERGATE_PCIE, + tegra_pcie.pex_clk); + if (err) { + pr_err("PCIE: powerup sequence failed: %d\n", err); + return err; + } + + tegra_periph_reset_deassert(tegra_pcie.afi_clk); + tegra_pcie_xclk_clamp(false); clk_enable(tegra_pcie.afi_clk); @@ -759,7 +777,7 @@ static int __init tegra_pcie_get_resources(void) return err; } - err = tegra_pcie_power_on(); + err = tegra_pcie_power_regate(); if (err) { pr_err("PCIE: failed to power up: %d\n", err); goto err_pwr_on;