18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (C) 2014 NVIDIA Corporation
48c2ecf20Sopenharmony_ci */
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#ifndef __SOC_TEGRA_PM_H__
78c2ecf20Sopenharmony_ci#define __SOC_TEGRA_PM_H__
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#include <linux/errno.h>
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_cienum tegra_suspend_mode {
128c2ecf20Sopenharmony_ci	TEGRA_SUSPEND_NONE = 0,
138c2ecf20Sopenharmony_ci	TEGRA_SUSPEND_LP2, /* CPU voltage off */
148c2ecf20Sopenharmony_ci	TEGRA_SUSPEND_LP1, /* CPU voltage off, DRAM self-refresh */
158c2ecf20Sopenharmony_ci	TEGRA_SUSPEND_LP0, /* CPU + core voltage off, DRAM self-refresh */
168c2ecf20Sopenharmony_ci	TEGRA_MAX_SUSPEND_MODE,
178c2ecf20Sopenharmony_ci};
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_ARM)
208c2ecf20Sopenharmony_cienum tegra_suspend_mode
218c2ecf20Sopenharmony_citegra_pm_validate_suspend_mode(enum tegra_suspend_mode mode);
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_ci/* low-level resume entry point */
248c2ecf20Sopenharmony_civoid tegra_resume(void);
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_ciint tegra30_pm_secondary_cpu_suspend(unsigned long arg);
278c2ecf20Sopenharmony_civoid tegra_pm_clear_cpu_in_lp2(void);
288c2ecf20Sopenharmony_civoid tegra_pm_set_cpu_in_lp2(void);
298c2ecf20Sopenharmony_ciint tegra_pm_enter_lp2(void);
308c2ecf20Sopenharmony_ciint tegra_pm_park_secondary_cpu(unsigned long cpu);
318c2ecf20Sopenharmony_ci#else
328c2ecf20Sopenharmony_cistatic inline enum tegra_suspend_mode
338c2ecf20Sopenharmony_citegra_pm_validate_suspend_mode(enum tegra_suspend_mode mode)
348c2ecf20Sopenharmony_ci{
358c2ecf20Sopenharmony_ci	return TEGRA_SUSPEND_NONE;
368c2ecf20Sopenharmony_ci}
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_cistatic inline void tegra_resume(void)
398c2ecf20Sopenharmony_ci{
408c2ecf20Sopenharmony_ci}
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_cistatic inline int tegra30_pm_secondary_cpu_suspend(unsigned long arg)
438c2ecf20Sopenharmony_ci{
448c2ecf20Sopenharmony_ci	return -ENOTSUPP;
458c2ecf20Sopenharmony_ci}
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_cistatic inline void tegra_pm_clear_cpu_in_lp2(void)
488c2ecf20Sopenharmony_ci{
498c2ecf20Sopenharmony_ci}
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_cistatic inline void tegra_pm_set_cpu_in_lp2(void)
528c2ecf20Sopenharmony_ci{
538c2ecf20Sopenharmony_ci}
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_cistatic inline int tegra_pm_enter_lp2(void)
568c2ecf20Sopenharmony_ci{
578c2ecf20Sopenharmony_ci	return -ENOTSUPP;
588c2ecf20Sopenharmony_ci}
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_cistatic inline int tegra_pm_park_secondary_cpu(unsigned long cpu)
618c2ecf20Sopenharmony_ci{
628c2ecf20Sopenharmony_ci	return -ENOTSUPP;
638c2ecf20Sopenharmony_ci}
648c2ecf20Sopenharmony_ci#endif /* CONFIG_PM_SLEEP */
658c2ecf20Sopenharmony_ci
668c2ecf20Sopenharmony_ci#endif /* __SOC_TEGRA_PM_H__ */
67