ARM: tegra: pcie: Remove dock detect variable
[linux-3.10.git] / arch / arm / mach-tegra / sleep.h
1 /*
2  * Copyright (c) 2010-2013, NVIDIA CORPORATION. All rights reserved.
3  *
4  * This program is free software; you can redistribute it and/or modify it
5  * under the terms and conditions of the GNU General Public License,
6  * version 2, as published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope it will be useful, but WITHOUT
9  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
11  * more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
15  */
16
17 #ifndef __MACH_TEGRA_SLEEP_H
18 #define __MACH_TEGRA_SLEEP_H
19
20 #include "iomap.h"
21
22 #ifndef CONFIG_TEGRA_USE_SECURE_KERNEL
23 /* FIXME: The code associated with this should be removed if our change to
24    save the diagnostic regsiter in the CPU context is accepted. */
25 #define USE_TEGRA_DIAG_REG_SAVE 1
26 #else
27 #define USE_TEGRA_DIAG_REG_SAVE 0
28 #endif
29
30 #define TEGRA_POWER_LP1_AUDIO           (1 << 25) /* do not turn off pll-p in LP1 */
31
32 #ifdef CONFIG_ARCH_TEGRA_HAS_SYMMETRIC_CPU_PWR_GATE
33
34 /* Power gate CRAIL partition */
35 #define TEGRA_POWER_CLUSTER_PART_CRAIL  (1 << 25)
36
37 /* Power gate CxNC partition */
38 #define TEGRA_POWER_CLUSTER_PART_NONCPU (1 << 24)
39
40 #define TEGRA_POWER_CLUSTER_PART_MASK   (TEGRA_POWER_CLUSTER_PART_CRAIL | \
41                                                 TEGRA_POWER_CLUSTER_PART_NONCPU)
42 #define TEGRA_POWER_CLUSTER_PART_DEFAULT TEGRA_POWER_CLUSTER_PART_CRAIL
43 #else
44 #define TEGRA_POWER_CLUSTER_PART_DEFAULT 0
45 #endif
46 #define TEGRA_POWER_CLUSTER_PART_SHIFT  24
47 #define TEGRA_POWER_CLUSTER_FORCE_SHIFT 2
48 #define TEGRA_POWER_CLUSTER_FORCE_MASK  (1 << TEGRA_POWER_CLUSTER_FORCE_SHIFT)
49
50 /* Stop MC clock */
51 #define TEGRA_POWER_STOP_MC_CLK         (1 << 23)
52
53 #define TEGRA_POWER_SDRAM_SELFREFRESH   (1 << 26) /* SDRAM is in self-refresh */
54 #define TEGRA_POWER_HOTPLUG_SHUTDOWN    (1 << 27) /* Hotplug shutdown */
55 #define TEGRA_POWER_CLUSTER_G           (1 << 28) /* G CPU */
56 #define TEGRA_POWER_CLUSTER_LP          (1 << 29) /* LP CPU */
57 #define TEGRA_POWER_CLUSTER_MASK        (TEGRA_POWER_CLUSTER_G | \
58                                                 TEGRA_POWER_CLUSTER_LP)
59 #define TEGRA_POWER_CLUSTER_IMMEDIATE   (1 << 30) /* Immediate wake */
60 #define TEGRA_POWER_CLUSTER_FORCE       (1 << 31) /* Force switch */
61
62 #define TEGRA_IRAM_CODE_AREA            (TEGRA_IRAM_BASE + SZ_4K)
63
64 #define PMC_SCRATCH1_ECO                0x264
65
66 /* PMC_LP_STATE_SCRATCH_REG is used to store the Warmboot flag for LP0 */
67 #define PMC_SCRATCH0                    0x50
68
69 /* PMC_LP_STATE_SCRATCH_REG is used to store the Warmboot flag for LP0 */
70 #define PMC_LP_STATE_SCRATCH_REG        0x50
71 #define PMC_LP_STATE_BIT_OFFSET         28
72 #define PMC_LP_STATE_BIT_MASK           0x3
73 #define PMC_LP_STATE_LP0                0
74 #define PMC_LP_STATE_LP1                1
75 #define PMC_LP_STATE_LP1BB              2
76
77
78 #define PMC_SCRATCH1_ECO                0x264
79
80 /* PMC registers to query occurence of BB paging event */
81 #define PMC_IPC_STS                     0x500
82 #define PMC_IPC_STS_MEM_REQ_SOON        (1 << 4)
83 #define PMC_IPC_STS_MEM_REQ             (1 << 3)
84
85 #define PMC_IPC_SET                     0x504
86 #define PMC_IPC_SET_MEM_STS             (1 << 5)
87
88 #define PMC_IPC_CLR                     0x508
89 #define PMC_IPC_CLR_MEM_STS             (1 << 5)
90
91 /* PMC register to program mem_req->0 interrupt for LP1BB */
92 #define PMC_WAKE_STATUS                 0x14
93
94 #define PMC_WAKE2_MASK                  0x160
95 #define PMC_WAKE2_LEVEL                 0x164
96 #define PMC_WAKE2_STATUS                0x168
97 #define PMC_WAKE2_BB_MEM_REQ            (1 << 29)
98
99 /* Additional PMC Control register */
100 #define PMC_CTRL2                       0x440
101 #define PMC_CTRL2_WAKE_DET_EN           (1 << 9)
102
103 /* PMC register for sampling of PMC_WAKE_LVL values */
104 #define PMC_AUTO_WAKE_LVL               0xd8
105
106 /* PMC_SCRATCH2 is used for PLLM boot state if PLLM auto-restart is enabled */
107 #define PMC_SCRATCH2                    0x58
108 /* PMC_SCRATCH37-39 and 41 are used for tegra_pen_lock in Tegra2 idle
109  * PMC_SCRATCH37[25] is used to query Audio HUB */
110 #define PMC_SCRATCH37                   0x130
111
112 #define PMC_SCRATCH38                   0x134
113 /* PMC_SCRATCH39 stores the reset vector of the AVP (always 0) after LP0 */
114 #define PMC_SCRATCH39                   0x138
115 /* PMC_SCRATCH41 stores the reset vector of the CPU after LP0 and LP1 */
116 #define PMC_SCRATCH41                   0x140
117
118 /* Legacy Interrupt Controller register to allow PMC Wake events
119  * to be propagated to LIC as interrupts.
120  */
121 #define TRI_ICTLR_VIRQ_CPU              0x0
122 #define TRI_ICTLR_CPU_IER_SET           0x24
123 #define TRI_ICTLR_CPU_IER_CLR           0x28
124 #define TRI_ICTLR_PMC_WAKE_INT          (1 << 12)
125
126 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
127 #define CPU_RESETTABLE                  2
128 #define CPU_RESETTABLE_SOON             1
129 #define CPU_NOT_RESETTABLE              0
130 #endif
131
132 #define FLOW_CTRL_HALT_CPU0_EVENTS      0x0
133 #define   FLOW_CTRL_WAITEVENT           (2 << 29)
134 #define   FLOW_CTRL_WAIT_FOR_INTERRUPT  (4 << 29)
135 #define   FLOW_CTRL_JTAG_RESUME         (1 << 28)
136 #define   FLOW_CTRL_HALT_CPU_IRQ        (1 << 10)
137 #define   FLOW_CTRL_HALT_CPU_FIQ        (1 << 8)
138 #define   FLOW_CTRL_HALT_LIC_IRQ        (1 << 11)
139 #define   FLOW_CTRL_HALT_LIC_FIQ        (1 << 10)
140 #define   FLOW_CTRL_HALT_GIC_IRQ        (1 << 9)
141 #define   FLOW_CTRL_HALT_GIC_FIQ        (1 << 8)
142 #define   FLOW_CTRL_IMMEDIATE_WAKE      (1 << 3)
143 #define FLOW_CTRL_CPU0_CSR              0x8
144 #define   FLOW_CTRL_CSR_INTR_FLAG               (1 << 15)
145 #define   FLOW_CTRL_CSR_EVENT_FLAG              (1 << 14)
146 #define   FLOW_CTRL_CSR_ENABLE_EXT_NONE (0)
147 #define   FLOW_CTRL_CSR_ENABLE_EXT_CRAIL        (1<<13)
148 #define   FLOW_CTRL_CSR_ENABLE_EXT_NCPU (1<<12)
149 #define   FLOW_CTRL_CSR_ENABLE_EXT_MASK ( \
150                                         FLOW_CTRL_CSR_ENABLE_EXT_NCPU | \
151                                         FLOW_CTRL_CSR_ENABLE_EXT_CRAIL )
152 #define   FLOW_CTRL_CSR_ENABLE_EXT_EMU FLOW_CTRL_CSR_ENABLE_EXT_MASK
153 #define   FLOW_CTRL_CSR_IMMEDIATE_WAKE          (1<<3)
154 #define   FLOW_CTRL_CSR_SWITCH_CLUSTER          (1<<2)
155 #define   FLOW_CTRL_CSR_ENABLE                  (1 << 0)
156
157 #define FLOW_CTRL_HALT_CPU1_EVENTS      0x14
158 #define FLOW_CTRL_CPU1_CSR              0x18
159
160 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
161 #define FLOW_CTRL_CSR_WFE_CPU0          (1 << 4)
162 #define FLOW_CTRL_CSR_WFE_BITMAP        (3 << 4)
163 #define FLOW_CTRL_CSR_WFI_BITMAP        0
164 #else
165 #define FLOW_CTRL_CSR_WFE_BITMAP        (0xF << 4)
166 #define FLOW_CTRL_CSR_WFI_CPU0          (1 << 8)
167 #define FLOW_CTRL_CSR_WFI_BITMAP        (0xF << 8)
168 #endif
169
170 #ifdef CONFIG_CACHE_L2X0
171 #define TEGRA_PL310_VIRT (TEGRA_ARM_PL310_BASE - IO_CPU_PHYS + IO_CPU_VIRT)
172 #endif
173 #ifdef CONFIG_HAVE_ARM_SCU
174 #define TEGRA_ARM_PERIF_VIRT (TEGRA_ARM_PERIF_BASE - IO_CPU_PHYS \
175                                         + IO_CPU_VIRT)
176 #endif
177 #define TEGRA_FLOW_CTRL_VIRT (TEGRA_FLOW_CTRL_BASE - IO_PPSB_PHYS \
178                                         + IO_PPSB_VIRT)
179 #define TEGRA_CLK_RESET_VIRT (TEGRA_CLK_RESET_BASE - IO_PPSB_PHYS \
180                                         + IO_PPSB_VIRT)
181
182 #ifdef __ASSEMBLY__
183 /* waits until the microsecond counter (base) ticks, for exact timing loops */
184 .macro  wait_for_us, rd, base, tmp
185         ldr    \rd, [\base]
186 1001:   ldr    \tmp, [\base]
187         cmp    \rd, \tmp
188         beq    1001b
189         mov    \tmp, \rd
190 .endm
191
192 /* waits until the microsecond counter (base) is > rn */
193 .macro  wait_until, rn, base, tmp
194         add     \rn, \rn, #1
195 1002:   ldr     \tmp, [\base]
196         sub     \tmp, \tmp, \rn
197         ands    \tmp, \tmp, #0x80000000
198         dmb
199         bne     1002b
200 .endm
201
202 /* returns the offset of the flow controller halt register for a cpu */
203 .macro cpu_to_halt_reg rd, rcpu
204         cmp     \rcpu, #0
205         subne   \rd, \rcpu, #1
206         movne   \rd, \rd, lsl #3
207         addne   \rd, \rd, #0x14
208         moveq   \rd, #0
209 .endm
210
211 /* returns the offset of the flow controller csr register for a cpu */
212 .macro cpu_to_csr_reg rd, rcpu
213         cmp     \rcpu, #0
214         subne   \rd, \rcpu, #1
215         movne   \rd, \rd, lsl #3
216         addne   \rd, \rd, #0x18
217         moveq   \rd, #8
218 .endm
219
220 /* Issue a Dummy DVM op to make subsequent DSB issue a DVM_SYNC
221    in A15. This is for a bug where DSB-lite( with no DVM_SYNC component)
222    doesn't trigger the logic returned to drain all other DSBs. */
223 .macro dummy_dvm_op, tmp1, tmp2
224         mrc     p15, 0, \tmp1, c0, c0, 0
225         movw    \tmp2, #0xC0F0                  @ Cortex a15 part number
226         and     \tmp1, \tmp1, \tmp2
227         cmp     \tmp1, \tmp2
228         moveq   \tmp1, #0
229         mcreq   p15, 0, \tmp1, c7, c5, 6
230 .endm
231
232 /* returns the ID of the current processor */
233 .macro cpu_id, rd
234         mrc     p15, 0, \rd, c0, c0, 5
235         and     \rd, \rd, #0xF
236 .endm
237
238 /* loads a 32-bit value into a register without a data access */
239 .macro mov32, reg, val
240         movw    \reg, #:lower16:\val
241         movt    \reg, #:upper16:\val
242 .endm
243
244 /* Macro to exit SMP coherency. */
245 .macro exit_smp, tmp1, tmp2
246         mrc     p15, 0, \tmp1, c1, c0, 1        @ ACTLR
247         bic     \tmp1, \tmp1, #(1<<6) | (1<<0)  @ clear ACTLR.SMP | ACTLR.FW
248 #ifdef CONFIG_ARM_ERRATA_799270
249         ldr     \tmp2, =TEGRA_CLK_RESET_VIRT
250         ldr     \tmp2, [\tmp2, #0x70]           @ BOND_OUT_L
251         and     \tmp2, \tmp2, #0
252         orr     \tmp1, \tmp1, \tmp2
253 #endif
254         mcr     p15, 0, \tmp1, c1, c0, 1        @ ACTLR
255         isb
256         dummy_dvm_op    \tmp1, \tmp2            @ dummy dvm op for cortex_a15
257         dsb
258 #ifdef CONFIG_HAVE_ARM_SCU
259         cpu_id  \tmp1
260         mov     \tmp1, \tmp1, lsl #2
261         mov     \tmp2, #0xf
262         mov     \tmp2, \tmp2, lsl \tmp1
263         mov32   \tmp1, TEGRA_ARM_PERIF_VIRT + 0xC
264         str     \tmp2, [\tmp1]                  @ invalidate SCU tags for CPU
265         dsb
266 #endif
267 .endm
268
269 #define DEBUG_CONTEXT_STACK     0
270
271 /* pops a debug check token from the stack */
272 .macro  pop_stack_token tmp1, tmp2
273 #if DEBUG_CONTEXT_STACK
274         mov32   \tmp1, 0xBAB1F00D
275         ldmfd   sp!, {\tmp2}
276         cmp     \tmp1, \tmp2
277         movne   pc, #0
278 #endif
279 .endm
280
281 /* pushes a debug check token onto the stack */
282 .macro  push_stack_token tmp1
283 #if DEBUG_CONTEXT_STACK
284         mov32   \tmp1, 0xBAB1F00D
285         stmfd   sp!, {\tmp1}
286 #endif
287 .endm
288
289 #else   /* !defined(__ASSEMBLY__) */
290
291 #include <linux/io.h>
292
293 #ifdef CONFIG_HOTPLUG_CPU
294 void tegra20_hotplug_init(void);
295 void tegra30_hotplug_init(void);
296 #else
297 static inline void tegra20_hotplug_init(void) {}
298 static inline void tegra30_hotplug_init(void) {}
299 #endif
300
301 #define FLOW_CTRL_HALT_CPU(cpu) (IO_ADDRESS(TEGRA_FLOW_CTRL_BASE) +     \
302         ((cpu) ? (FLOW_CTRL_HALT_CPU1_EVENTS + 8 * ((cpu) - 1)) :       \
303          FLOW_CTRL_HALT_CPU0_EVENTS))
304
305 #define FLOW_CTRL_CPU_CSR(cpu)  (IO_ADDRESS(TEGRA_FLOW_CTRL_BASE) +     \
306         ((cpu) ? (FLOW_CTRL_CPU1_CSR + 8 * ((cpu) - 1)) :       \
307          FLOW_CTRL_CPU0_CSR))
308
309 static inline void flowctrl_writel(unsigned long val, void __iomem *addr)
310 {
311         writel(val, addr);
312 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
313         wmb();
314 #endif
315         (void)__raw_readl(addr);
316 }
317
318 void tegra_pen_lock(void);
319 void tegra_pen_unlock(void);
320 int tegra_sleep_cpu_finish(unsigned long v2p);
321 void tegra_resume(void);
322 void tegra_flush_l1_cache(void);
323 void tegra_flush_cache(void);
324
325 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
326 extern unsigned int tegra2_iram_start;
327 extern unsigned int tegra2_iram_end;
328 int  tegra2_cpu_is_resettable_soon(void);
329 void tegra2_cpu_reset(int cpu);
330 void tegra2_cpu_set_resettable_soon(void);
331 void tegra2_cpu_clear_resettable(void);
332 int tegra2_sleep_core_finish(unsigned long int);
333 void tegra2_sleep_wfi(unsigned long v2p);
334 int tegra2_finish_sleep_cpu_secondary(unsigned long int);
335 #else
336 extern unsigned int tegra3_iram_start;
337 extern unsigned int tegra3_iram_end;
338 #ifdef CONFIG_TEGRA_LP1_LOW_COREVOLTAGE
339 extern unsigned int lp1_register_pmuslave_addr;
340 extern unsigned int lp1_register_i2c_base_addr;
341 extern unsigned int lp1_register_core_lowvolt;
342 extern unsigned int lp1_register_core_highvolt;
343 #endif
344 int tegra3_sleep_core_finish(unsigned long int);
345 int tegra3_sleep_cpu_secondary_finish(unsigned long int);
346 int tegra3_stop_mc_clk_finish(unsigned long int);
347 #endif
348
349 #ifdef CONFIG_TEGRA_USE_SECURE_KERNEL
350 extern unsigned long tegra_resume_timestamps_start;
351 extern unsigned long tegra_resume_timestamps_end;
352 #ifndef CONFIG_ARCH_TEGRA_11x_SOC
353 extern unsigned long tegra_resume_smc_entry_time;
354 extern unsigned long tegra_resume_smc_exit_time;
355 #endif
356 extern unsigned long tegra_resume_entry_time;
357 #endif
358 #if defined(CONFIG_CACHE_L2X0) && defined(CONFIG_PM_SLEEP)
359 extern unsigned long tegra_resume_l2_init;
360 #endif
361
362 static inline void *tegra_iram_start(void)
363 {
364 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
365         return &tegra2_iram_start;
366 #else
367         return &tegra3_iram_start;
368 #endif
369 }
370
371 static inline void *tegra_iram_end(void)
372 {
373 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
374         return &tegra2_iram_end;
375 #else
376         return &tegra3_iram_end;
377 #endif
378 }
379
380 #ifdef CONFIG_TEGRA_LP1_LOW_COREVOLTAGE
381 static inline void *tegra_lp1_register_pmuslave_addr(void)
382 {
383 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
384         return NULL;
385 #else
386         return &lp1_register_pmuslave_addr;
387 #endif
388 }
389
390 static inline void *tegra_lp1_register_i2c_base_addr(void)
391 {
392 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
393         return NULL;
394 #else
395         return &lp1_register_i2c_base_addr;
396 #endif
397 }
398
399 static inline void *tegra_lp1_register_core_lowvolt(void)
400 {
401 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
402         return NULL;
403 #else
404         return &lp1_register_core_lowvolt;
405 #endif
406 }
407
408 static inline void *tegra_lp1_register_core_highvolt(void)
409 {
410 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
411         return NULL;
412 #else
413         return &lp1_register_core_highvolt;
414 #endif
415 }
416 #endif /* For CONFIG_TEGRA_LP1_LOW_COREVOLTAGE */
417 #endif
418 #endif