Tegra: default platform handler for the CPU_STANDBY state
authorVarun Wadekar <vwadekar@nvidia.com>
Thu, 28 Dec 2017 02:10:12 +0000 (18:10 -0800)
committerVarun Wadekar <vwadekar@nvidia.com>
Thu, 31 Jan 2019 16:45:32 +0000 (08:45 -0800)
This patch adds a default implementation for the platform specific
CPU standby power handler. Tegra SoCs can override this handler
with their own implementations.

Change-Id: I91e513842f194b1e2b1defa2d833bb4d9df5f06b
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
plat/nvidia/tegra/common/tegra_pm.c
plat/nvidia/tegra/include/tegra_private.h

index 2805272712c0c8f642f7f5b076196a090b432864..fbc0f11688e31bbf65796ae22c8d33b18f0ae1bc 100644 (file)
@@ -41,6 +41,7 @@ uint8_t tegra_fake_system_suspend;
  * provide typical implementations that will be overridden by a SoC.
  */
 #pragma weak tegra_soc_pwr_domain_suspend_pwrdown_early
+#pragma weak tegra_soc_cpu_standby
 #pragma weak tegra_soc_pwr_domain_suspend
 #pragma weak tegra_soc_pwr_domain_on
 #pragma weak tegra_soc_pwr_domain_off
@@ -55,6 +56,12 @@ int32_t tegra_soc_pwr_domain_suspend_pwrdown_early(const psci_power_state_t *tar
        return PSCI_E_NOT_SUPPORTED;
 }
 
+int32_t tegra_soc_cpu_standby(plat_local_state_t cpu_state)
+{
+       (void)cpu_state;
+       return PSCI_E_SUCCESS;
+}
+
 int32_t tegra_soc_pwr_domain_suspend(const psci_power_state_t *target_state)
 {
        (void)target_state;
@@ -141,6 +148,10 @@ void tegra_cpu_standby(plat_local_state_t cpu_state)
 {
        (void)cpu_state;
 
+       /* Tegra SoC specific handler */
+       if (tegra_soc_cpu_standby(cpu_state) != PSCI_E_SUCCESS)
+               ERROR("%s failed\n", __func__);
+
        /*
         * Enter standby state
         * dsb is good practice before using wfi to enter low power states
index 68b462425e014f3996ab5dc251be5d460cf72d64..40aeaf85f1ac7208aaeca825f09dcb4fb88d0d5e 100644 (file)
@@ -97,6 +97,7 @@ extern uint8_t tegra_fake_system_suspend;
 void tegra_pm_system_suspend_entry(void);
 void tegra_pm_system_suspend_exit(void);
 int32_t tegra_system_suspended(void);
+int32_t tegra_soc_cpu_standby(plat_local_state_t cpu_state);
 int32_t tegra_soc_pwr_domain_suspend(const psci_power_state_t *target_state);
 int32_t tegra_soc_pwr_domain_on(u_register_t mpidr);
 int32_t tegra_soc_pwr_domain_off(const psci_power_state_t *target_state);