ARM: tegra12: set CPU rate to 2.2GHz for sku 0x87
[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_C0_L2_TAG_LATENCY   6
29 #define TEGRA_RESET_C0_L2_DATA_LATENCY  7
30 #define TEGRA_RESET_C1_L2_TAG_LATENCY   8
31 #define TEGRA_RESET_C1_L2_DATA_LATENCY  9
32 #define TEGRA_RESET_MASK_MC_CLK         10
33 #define TEGRA_RESET_DATA_SIZE           11
34
35 #define RESET_DATA(x)   ((TEGRA_RESET_##x)*4)
36
37 #ifndef __ASSEMBLY__
38
39 #include <linux/cpumask.h>
40
41 extern unsigned long __tegra_cpu_reset_handler_data[TEGRA_RESET_DATA_SIZE];
42
43 void __tegra_cpu_reset_handler_start(void);
44 void __tegra_cpu_reset_handler(void);
45 void __tegra_cpu_reset_handler_end(void);
46 void tegra_secondary_startup(void);
47
48 #ifdef CONFIG_PM_SLEEP
49 #define tegra_cpu_lp1_mask ((unsigned long *)(IO_ADDRESS(TEGRA_RESET_HANDLER_BASE + \
50                 ((u32)&__tegra_cpu_reset_handler_data[TEGRA_RESET_MASK_LP1] - \
51                  (u32)__tegra_cpu_reset_handler_start))))
52
53 #define tegra_mc_clk_mask ((unsigned long *)(IO_ADDRESS(TEGRA_RESET_HANDLER_BASE + \
54                 ((u32)&__tegra_cpu_reset_handler_data[TEGRA_RESET_MASK_MC_CLK] - \
55                  (u32)__tegra_cpu_reset_handler_start))))
56
57 #define tegra_cpu_reset_handler_ptr ((u32 *)(IO_ADDRESS(TEGRA_RESET_HANDLER_BASE + \
58                 ((u32)__tegra_cpu_reset_handler_data - \
59                  (u32)__tegra_cpu_reset_handler_start))))
60
61 #define tegra_cpu_lp2_mask ((cpumask_t *)(IO_ADDRESS(TEGRA_RESET_HANDLER_BASE + \
62                 ((u32)&__tegra_cpu_reset_handler_data[TEGRA_RESET_MASK_LP2] - \
63                  (u32)__tegra_cpu_reset_handler_start))))
64 #endif
65
66 #define tegra_cpu_c0_l2_tag_latency \
67         __tegra_cpu_reset_handler_data[TEGRA_RESET_C0_L2_TAG_LATENCY]
68
69 #define tegra_cpu_c0_l2_tag_latency_iram \
70         ((u32 *)(IO_ADDRESS(TEGRA_RESET_HANDLER_BASE +                  \
71         ((u32)&__tegra_cpu_reset_handler_data[TEGRA_RESET_C0_L2_TAG_LATENCY] \
72          - (u32)__tegra_cpu_reset_handler_start))))
73
74 #define tegra_cpu_c0_l2_data_latency \
75         __tegra_cpu_reset_handler_data[TEGRA_RESET_C0_L2_DATA_LATENCY]
76
77 #define tegra_cpu_c0_l2_data_latency_iram \
78         ((u32 *)(IO_ADDRESS(TEGRA_RESET_HANDLER_BASE +                  \
79         ((u32)&__tegra_cpu_reset_handler_data[TEGRA_RESET_C0_L2_DATA_LATENCY] \
80          - (u32)__tegra_cpu_reset_handler_start))))
81
82 #define tegra_cpu_c1_l2_tag_latency \
83         __tegra_cpu_reset_handler_data[TEGRA_RESET_C1_L2_TAG_LATENCY]
84
85 #define tegra_cpu_c1_l2_tag_latency_iram \
86         ((u32 *)(IO_ADDRESS(TEGRA_RESET_HANDLER_BASE +                  \
87         ((u32)&__tegra_cpu_reset_handler_data[TEGRA_RESET_C1_L2_TAG_LATENCY] \
88          - (u32)__tegra_cpu_reset_handler_start))))
89
90 #define tegra_cpu_c1_l2_data_latency \
91         __tegra_cpu_reset_handler_data[TEGRA_RESET_C1_L2_DATA_LATENCY]
92
93 #define tegra_cpu_c1_l2_data_latency_iram \
94         ((u32 *)(IO_ADDRESS(TEGRA_RESET_HANDLER_BASE +                  \
95         ((u32)&__tegra_cpu_reset_handler_data[TEGRA_RESET_C1_L2_DATA_LATENCY] \
96          - (u32)__tegra_cpu_reset_handler_start))))
97
98 #define tegra_cpu_reset_handler_offset \
99                 ((u32)__tegra_cpu_reset_handler - \
100                  (u32)__tegra_cpu_reset_handler_start)
101
102 #define tegra_cpu_reset_handler_size \
103                 (__tegra_cpu_reset_handler_end - \
104                  __tegra_cpu_reset_handler_start)
105
106 void __init tegra_cpu_reset_handler_init(void);
107
108 #ifdef CONFIG_PM_SLEEP
109 void tegra_cpu_reset_handler_save(void);
110 void tegra_cpu_reset_handler_restore(void);
111 #endif
112 #endif
113 #endif