ARM: tegra: power: implement LP1 suspend/resume for Tegra3
[linux-3.10.git] / arch / arm / mach-tegra / reset.h
1 /*
2  * arch/arm/mach-tegra/reset.h
3  *
4  * CPU reset dispatcher.
5  *
6  * Copyright (c) 2011, NVIDIA Corporation.
7  *
8  * This software is licensed under the terms of the GNU General Public
9  * License version 2, as published by the Free Software Foundation, and
10  * may be copied, distributed, and modified under those terms.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  */
18
19 #ifndef __MACH_TEGRA_RESET_H
20 #define __MACH_TEGRA_RESET_H
21
22 #define TEGRA_RESET_MASK_PRESENT        0
23 #define TEGRA_RESET_MASK_LP1            1
24 #define TEGRA_RESET_MASK_LP2            2
25 #define TEGRA_RESET_STARTUP_SECONDARY   3
26 #define TEGRA_RESET_STARTUP_LP2         4
27 #define TEGRA_RESET_STARTUP_LP1         5
28 #define TEGRA_RESET_DATA_SIZE           6
29
30 #ifndef __ASSEMBLY__
31
32 #include <linux/cpumask.h>
33
34 extern unsigned long __tegra_cpu_reset_handler_data[TEGRA_RESET_DATA_SIZE];
35
36 void __tegra_cpu_reset_handler_start(void);
37 void __tegra_cpu_reset_handler(void);
38 void __tegra_cpu_reset_handler_end(void);
39 void tegra_secondary_startup(void);
40
41 #define tegra_cpu_reset_handler_offset \
42                 ((u32)__tegra_cpu_reset_handler - \
43                  (u32)__tegra_cpu_reset_handler_start)
44
45 #define tegra_cpu_reset_handler_size \
46                 (__tegra_cpu_reset_handler_end - \
47                  __tegra_cpu_reset_handler_start)
48
49 #ifdef CONFIG_PM_SLEEP
50 #define tegra_cpu_lp1_mask ((unsigned long *)(IO_ADDRESS(TEGRA_RESET_HANDLER_BASE + \
51                 ((u32)&__tegra_cpu_reset_handler_data[TEGRA_RESET_MASK_LP1] - \
52                  (u32)__tegra_cpu_reset_handler_start))))
53
54 #define tegra_cpu_reset_handler_ptr ((u32 *)(IO_ADDRESS(TEGRA_RESET_HANDLER_BASE + \
55                 ((u32)__tegra_cpu_reset_handler_data - \
56                  (u32)__tegra_cpu_reset_handler_start))))
57
58 #define tegra_cpu_lp2_mask ((cpumask_t *)(IO_ADDRESS(TEGRA_RESET_HANDLER_BASE + \
59                 ((u32)&__tegra_cpu_reset_handler_data[TEGRA_RESET_MASK_LP2] - \
60                  (u32)__tegra_cpu_reset_handler_start))))
61 #endif
62
63 void __init tegra_cpu_reset_handler_init(void);
64
65 #ifdef CONFIG_PM_SLEEP
66 void tegra_cpu_reset_handler_save(void);
67 void tegra_cpu_reset_handler_restore(void);
68 #endif
69 #endif
70 #endif