The new CPU Idle driver has all necessary features in order to allow
the deepest idling state on Tegra30 SoC where the whole CPU cluster is
power-gated using the coupled idle state.

Signed-off-by: Dmitry Osipenko <dig...@gmail.com>
---

Please note that outer_disable() has a WARN_ON(num_online_cpus > 1)
and it doesn't know that we turned off those secondary CPUs, hence the
outer_cache.disable() is now invoked directly.

 arch/arm/mach-tegra/pm.c        | 4 ++--
 drivers/cpuidle/cpuidle-tegra.c | 4 +---
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/arch/arm/mach-tegra/pm.c b/arch/arm/mach-tegra/pm.c
index f9c9bce9e15d..cc941b0c97e8 100644
--- a/arch/arm/mach-tegra/pm.c
+++ b/arch/arm/mach-tegra/pm.c
@@ -146,8 +146,8 @@ static int tegra_sleep_cpu(unsigned long v2p)
         * if any of secondary CPU's is online and this is the LP2-idle
         * code-path only for Tegra20/30.
         */
-       if (trusted_foundations_registered())
-               outer_disable();
+       if (trusted_foundations_registered() && outer_cache.disable)
+               outer_cache.disable();
 
        /*
         * Note that besides of setting up CPU reset vector this firmware
diff --git a/drivers/cpuidle/cpuidle-tegra.c b/drivers/cpuidle/cpuidle-tegra.c
index 3fad4a0cbc78..31eeef22c0ff 100644
--- a/drivers/cpuidle/cpuidle-tegra.c
+++ b/drivers/cpuidle/cpuidle-tegra.c
@@ -202,10 +202,8 @@ static int tegra_cpuidle_probe(struct platform_device 
*pdev)
        switch (tegra_get_chip_id()) {
        case TEGRA20:
                tegra_idle_driver.states[1].disabled = true;
-               tegra_idle_driver.states[3].disabled = true;
-               break;
+               /* fall through */
        case TEGRA30:
-               tegra_idle_driver.states[2].disabled = true;
                tegra_idle_driver.states[3].disabled = true;
                break;
        case TEGRA114:
-- 
2.22.0

Reply via email to