1d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 27232398aSThierry Reding /* 37232398aSThierry Reding * Copyright (C) 2014 NVIDIA Corporation 47232398aSThierry Reding */ 57232398aSThierry Reding 67232398aSThierry Reding #ifndef __SOC_TEGRA_PM_H__ 77232398aSThierry Reding #define __SOC_TEGRA_PM_H__ 87232398aSThierry Reding 97741868fSDmitry Osipenko #include <linux/errno.h> 107741868fSDmitry Osipenko 117232398aSThierry Reding enum tegra_suspend_mode { 127232398aSThierry Reding TEGRA_SUSPEND_NONE = 0, 137232398aSThierry Reding TEGRA_SUSPEND_LP2, /* CPU voltage off */ 147232398aSThierry Reding TEGRA_SUSPEND_LP1, /* CPU voltage off, DRAM self-refresh */ 157232398aSThierry Reding TEGRA_SUSPEND_LP0, /* CPU + core voltage off, DRAM self-refresh */ 167232398aSThierry Reding TEGRA_MAX_SUSPEND_MODE, 179c93ccfcSDmitry Osipenko TEGRA_SUSPEND_NOT_READY, 187232398aSThierry Reding }; 197232398aSThierry Reding 20*0d7281b2SDmitry Osipenko #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_ARM) && defined(CONFIG_ARCH_TEGRA) 217232398aSThierry Reding enum tegra_suspend_mode 227232398aSThierry Reding tegra_pm_validate_suspend_mode(enum tegra_suspend_mode mode); 237232398aSThierry Reding 247232398aSThierry Reding /* low-level resume entry point */ 257232398aSThierry Reding void tegra_resume(void); 267741868fSDmitry Osipenko 271f3e18ecSDmitry Osipenko int tegra30_pm_secondary_cpu_suspend(unsigned long arg); 281f3e18ecSDmitry Osipenko void tegra_pm_clear_cpu_in_lp2(void); 291f3e18ecSDmitry Osipenko void tegra_pm_set_cpu_in_lp2(void); 301f3e18ecSDmitry Osipenko int tegra_pm_enter_lp2(void); 317741868fSDmitry Osipenko int tegra_pm_park_secondary_cpu(unsigned long cpu); 329c93ccfcSDmitry Osipenko void tegra_pm_init_suspend(void); 337232398aSThierry Reding #else 347232398aSThierry Reding static inline enum tegra_suspend_mode tegra_pm_validate_suspend_mode(enum tegra_suspend_mode mode)357232398aSThierry Redingtegra_pm_validate_suspend_mode(enum tegra_suspend_mode mode) 367232398aSThierry Reding { 377232398aSThierry Reding return TEGRA_SUSPEND_NONE; 387232398aSThierry Reding } 397232398aSThierry Reding tegra_resume(void)407232398aSThierry Redingstatic inline void tegra_resume(void) 417232398aSThierry Reding { 427232398aSThierry Reding } 437741868fSDmitry Osipenko tegra30_pm_secondary_cpu_suspend(unsigned long arg)441f3e18ecSDmitry Osipenkostatic inline int tegra30_pm_secondary_cpu_suspend(unsigned long arg) 457741868fSDmitry Osipenko { 467741868fSDmitry Osipenko return -ENOTSUPP; 477741868fSDmitry Osipenko } 487741868fSDmitry Osipenko tegra_pm_clear_cpu_in_lp2(void)491f3e18ecSDmitry Osipenkostatic inline void tegra_pm_clear_cpu_in_lp2(void) 507741868fSDmitry Osipenko { 517741868fSDmitry Osipenko } 527741868fSDmitry Osipenko tegra_pm_set_cpu_in_lp2(void)531f3e18ecSDmitry Osipenkostatic inline void tegra_pm_set_cpu_in_lp2(void) 547741868fSDmitry Osipenko { 557741868fSDmitry Osipenko } 567741868fSDmitry Osipenko tegra_pm_enter_lp2(void)571f3e18ecSDmitry Osipenkostatic inline int tegra_pm_enter_lp2(void) 587741868fSDmitry Osipenko { 597741868fSDmitry Osipenko return -ENOTSUPP; 607741868fSDmitry Osipenko } 617741868fSDmitry Osipenko tegra_pm_park_secondary_cpu(unsigned long cpu)627741868fSDmitry Osipenkostatic inline int tegra_pm_park_secondary_cpu(unsigned long cpu) 637741868fSDmitry Osipenko { 647741868fSDmitry Osipenko return -ENOTSUPP; 657741868fSDmitry Osipenko } 669c93ccfcSDmitry Osipenko tegra_pm_init_suspend(void)679c93ccfcSDmitry Osipenkostatic inline void tegra_pm_init_suspend(void) 689c93ccfcSDmitry Osipenko { 699c93ccfcSDmitry Osipenko } 707232398aSThierry Reding #endif /* CONFIG_PM_SLEEP */ 717232398aSThierry Reding 727232398aSThierry Reding #endif /* __SOC_TEGRA_PM_H__ */ 73