blob: 08477d7bfab93fde69840ef7e945fb2a22bc983e [file] [log] [blame]
David Brazdil0f672f62019-12-10 10:32:29 +00001/* SPDX-License-Identifier: GPL-2.0-only */
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00002/*
3 * Copyright (C) 2014 NVIDIA Corporation
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00004 */
5
6#ifndef __SOC_TEGRA_PM_H__
7#define __SOC_TEGRA_PM_H__
8
Olivier Deprez157378f2022-04-04 15:47:50 +02009#include <linux/errno.h>
10
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000011enum tegra_suspend_mode {
12 TEGRA_SUSPEND_NONE = 0,
13 TEGRA_SUSPEND_LP2, /* CPU voltage off */
14 TEGRA_SUSPEND_LP1, /* CPU voltage off, DRAM self-refresh */
15 TEGRA_SUSPEND_LP0, /* CPU + core voltage off, DRAM self-refresh */
16 TEGRA_MAX_SUSPEND_MODE,
17};
18
19#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_ARM)
20enum tegra_suspend_mode
21tegra_pm_validate_suspend_mode(enum tegra_suspend_mode mode);
22
23/* low-level resume entry point */
24void tegra_resume(void);
Olivier Deprez157378f2022-04-04 15:47:50 +020025
26int tegra30_pm_secondary_cpu_suspend(unsigned long arg);
27void tegra_pm_clear_cpu_in_lp2(void);
28void tegra_pm_set_cpu_in_lp2(void);
29int tegra_pm_enter_lp2(void);
30int tegra_pm_park_secondary_cpu(unsigned long cpu);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000031#else
32static inline enum tegra_suspend_mode
33tegra_pm_validate_suspend_mode(enum tegra_suspend_mode mode)
34{
35 return TEGRA_SUSPEND_NONE;
36}
37
38static inline void tegra_resume(void)
39{
40}
Olivier Deprez157378f2022-04-04 15:47:50 +020041
42static inline int tegra30_pm_secondary_cpu_suspend(unsigned long arg)
43{
44 return -ENOTSUPP;
45}
46
47static inline void tegra_pm_clear_cpu_in_lp2(void)
48{
49}
50
51static inline void tegra_pm_set_cpu_in_lp2(void)
52{
53}
54
55static inline int tegra_pm_enter_lp2(void)
56{
57 return -ENOTSUPP;
58}
59
60static inline int tegra_pm_park_secondary_cpu(unsigned long cpu)
61{
62 return -ENOTSUPP;
63}
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000064#endif /* CONFIG_PM_SLEEP */
65
66#endif /* __SOC_TEGRA_PM_H__ */