Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(124)

Side by Side Diff: arch/arm/cpu/arm_cortexa9/tegra2/warmboot_avp.S

Issue 4841001: Tegra2: implement Warmboot code and lp0_vec (Closed) Base URL: http://git.chromium.org/git/u-boot-next.git@chromeos-v2010.09
Patch Set: Add GPL headers & fix some 80-column issues Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 /*
2 * (C) Copyright 2010
3 * NVIDIA Corporation <www.nvidia.com>
4 *
5 * See file CREDITS for list of people who contributed to this
6 * project.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation; either version 2 of
11 * the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21 * MA 02111-1307 USA
22 */
23
24 #include "asm/arch/nvbl_arm_cpsr.h"
25 #include "asm/arch/nvbl_memmap_nvap.h"
26 #include "asm/arch/tegra2.h"
27 #include "asm/arch/nv_drf_asm.h"
28
29 /* -----------------------------------
30 * Compile-time code options
31 * -----------------------------------
32 */
33
34 /* CPU Clock Source -- DO NOT CHOOSE PLL-X */
35 #define CPU_CLOCK_SOURCE CLK_RST_CONTROLLER_CCLK_BURST_POLICY_0_CWAKEUP_I DLE_SOURCE_PLLP_OUT0
36
37 /* Scratch map */
38 #define APBDEV_PMC_SCRATCH_FOR_LP_EXIT_TIME_0 APBDEV_PMC_SCRATCH1_0
39
40 /*Misc warmboot parameters */
41 #define AP20_WB0_RUN_ADDRESS 0x40020000
42
43 /*Apertures bases */
44 #define CSITE_PA_BASE 0x70040000 /* Base address for arcsite.h re gisters */
45 #define CLK_RST_PA_BASE 0x60006000 /* Base address for arclk_rst.h registers */
46 #define EVP_PA_BASE 0x6000F000 /* Base address for arevp.h regi sters */
47 #define FLOW_PA_BASE 0x60007000 /* Base address for arflow_ctlr. h registers */
48 #define PMC_PA_BASE 0x7000E400 /* Base address for arapbpm.h re gisters */
49 #define TIMERUS_PA_BASE 0x60005010 /* Base address for artimerus.h registers */
50 #define PG_UP_PA_BASE 0x60000000 /* Base address for arpg.h regis ters */
51 #define MISC_PA_BASE 0x70000000 /* Base address for arapb_misc.h registers */
52
53 /* -----------------------------------
54 * Compile-time debug code enables
55 * -----------------------------------
56 */
57
58 #define DEBUG_DO_NOT_RESET_CORESIGHT 0 /* Set non-zero to skip resettin g CoreSight */
59
60 .section .text
61 .align 4
62
63 /* ------------------------------------------------------
64 * Prototype:
65 * void wb_start(void)
66 *
67 * Input:
68 *
69 * Output:
70 * None
71 *
72 * Registers Used:
73 * ALL
74 *
75 * Description:
76 * This function restarts the CPU and then waits for the AVP driver to
77 * tell it where to transfer control to finish restoration of the AVP state.
78 * ----------------------------------------------------------------------------- --
79 */
80
81 .globl wb_start
82 wb_start:
83
84 .word 0, 0, 0, 0
85 .word 0, 0, 0, 0
86 .word 0, 0, 0, 0
87 .word 0, 0, 0, 0
88
89 start:
90
91 ldr r0, =MISC_PA_BASE /* R0 = MISC PA base address */
92 ldr r1, =NV_DRF_DEF(APB_MISC_PP, CONFIG_CTL, JTAG, ENABLE) \
93 _OR_ NV_DRF_DEF(APB_MISC_PP, CONFIG_CTL, TBE, ENABLE)
94 str r1, [r0, #NV_DRF_OFFSET(APB_MISC_PP, CONFIG_CTL)]
95
96 /* -----------------------------------------------------------------
97 * Load up the base addresses for the register blocks.
98 * -----------------------------------------------------------------
99 */
100 ldr r5, =PMC_PA_BASE /* R5 = PMC PA base address */
101 ldr r6, =FLOW_PA_BASE /* R6 = FLOW PA base address */
102 ldr r7, =TIMERUS_PA_BASE /* R7 = TIMERUS PA base address */
103 ldr r8, =CLK_RST_PA_BASE /* R8 = CLK PA base address */
104 ldr r9, =EVP_PA_BASE /* R9 = EVP PA base address */
105 ldr r10,=CSITE_PA_BASE /* R10 = CSITE base address */
106
107 /* -----------------------------------------------------------------
108 * Are we running where we're supposed to be?
109 * -----------------------------------------------------------------
110 */
111
112 ldr r0, =AP20_WB0_RUN_ADDRESS /* R0 = expected load address */
113 add r1, pc, #here-(.+8) /* R1 = &here */
114
115 here:
116 sub r1, r1, #(here-start) /* R1 = actual load address */
117 ldr r2, =PG_UP_PA_BASE /* R2 = PG PA base address */
118 ldr r3, [r2, #PG_UP_TAG_0] /* R3 = processor tag */
119 ldr r2, =PG_UP_TAG_0_PID_COP /* R2 = AVP processor tag */
120 cmp r0, r1 /* Addresses match? */
121 cmpeq r2, r3 /* Processor tags match? */
122 bne do_reset /* No -- reset the chip */
123
124 /* -----------------------------------------------------------------
125 * Get a snapshot of the Usec count. This is a good indicator of
126 * the overhead of BOOTROM after a wake-up event.
127 * -----------------------------------------------------------------
128 */
129
130 ldr r11, [r7, #TIMERUS_CNTR_1US_0]
131
132 /* ==================================================================
133 * BEGIN CPU COMPLEX INITIALIZATON
134 * ==================================================================
135 */
136
137 #if !DEBUG_DO_NOT_RESET_CORESIGHT
138
139 /* ----------------------------------------------------------------
140 * Assert CoreSight reset.
141 * ----------------------------------------------------------------
142 */
143
144 mov r1, #NV_DRF_MASK(CLK_RST_CONTROLLER,RST_DEV_U_SET,SET_CSITE_RST)
145 str r1, [r8, #CLK_RST_CONTROLLER_RST_DEV_U_SET_0]
146
147 #endif /*!DEBUG_DO_NOT_RESET_CORESIGHT */
148
149 /* Set the drive strength */
150 ldr r1, [r8, #CLK_RST_CONTROLLER_OSC_CTRL_0]
151 ldr r3, =NV_DRF_MASK(CLK_RST_CONTROLLER, OSC_CTRL, XOFS) \
152 _OR_ NV_DRF_MASK(CLK_RST_CONTROLLER, OSC_CTRL, XOE)
153 bic r1, r1, r3
154 ldr r3, =NV_DRF_NUM(CLK_RST_CONTROLLER, OSC_CTRL, XOFS, 0x4) \
155 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, OSC_CTRL, XOE, 0x1)
156 orr r3, r1, r3
157 str r3, [r8, #CLK_RST_CONTROLLER_OSC_CTRL_0]
158
159 /* -----------------------------------------------------------------
160 * Power up the CPU complex if necessary.
161 * -----------------------------------------------------------------
162 */
163
164 ldr r3, [r5, #APBDEV_PMC_PWRGATE_STATUS_0]
165 tst r3, #NV_DRF_MASK(APBDEV_PMC, PWRGATE_STATUS, CPU)
166
167 ldreq r2, =NV_DRF_DEF(APBDEV_PMC, PWRGATE_TOGGLE, PARTID, CP) \
168 _OR_ NV_DRF_DEF(APBDEV_PMC, PWRGATE_TOGGLE, START, ENABLE)
169 streq r2, [r5, #APBDEV_PMC_PWRGATE_TOGGLE_0]
170
171 is_cpu_on:
172 ldr r3, [r5, #APBDEV_PMC_PWRGATE_STATUS_0]
173 tst r3, #NV_DRF_MASK(APBDEV_PMC, PWRGATE_STATUS, CPU)
174 beq is_cpu_on
175
176 /* -----------------------------------------------------------------
177 * Remove the I/O clamps from the CPU power partition.
178 * -----------------------------------------------------------------
179 */
180
181 mov r3, #NV_DRF_DEF(APBDEV_PMC, REMOVE_CLAMPING_CMD, CPU, ENABLE)
182 str r3, [r5, #APBDEV_PMC_REMOVE_CLAMPING_CMD_0]
183
184 ldr r3, =NV_DRF_NUM(FLOW_CTLR, HALT_COP_EVENTS, ZERO, 0x14) \
185 _OR_ NV_DRF_NUM(FLOW_CTLR, HALT_COP_EVENTS, MSEC, 1) \
186 _OR_ NV_DRF_NUM(FLOW_CTLR, HALT_COP_EVENTS, MODE, 2)
187 str r3, [r6, #FLOW_CTLR_HALT_COP_EVENTS_0]
188
189 /* ------------------------------------------------------------------
190 * Assert CPU complex reset.
191 * ------------------------------------------------------------------
192 */
193
194 mov r1, #NV_DRF_MASK(CLK_RST_CONTROLLER,RST_DEV_L_SET,SET_CPU_RST)
195 str r1, [r8, #CLK_RST_CONTROLLER_RST_DEV_L_SET_0]
196
197 /* ------------------------------------------------------------------
198 * Hold both CPUs in reset.
199 * ------------------------------------------------------------------
200 */
201
202 ldr r3, =NV_DRF_NUM(CLK_RST_CONTROLLER, RST_CPU_CMPLX_SET, SET_CPURE SET1, 1) \
203 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, RST_CPU_CMPLX_SET, SET_DBGRE SET1, 1) \
204 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, RST_CPU_CMPLX_SET, SET_DERES ET1, 1) \
205 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, RST_CPU_CMPLX_SET, SET_CPURE SET0, 1) \
206 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, RST_CPU_CMPLX_SET, SET_DBGRE SET0, 1) \
207 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, RST_CPU_CMPLX_SET, SET_DERES ET0, 1)
208 str r3, [r8, #CLK_RST_CONTROLLER_RST_CPU_CMPLX_SET_0]
209
210 /* ------------------------------------------------------------------
211 * Halt CPU1 at the flow controller for uni-processor configurations.
212 * ------------------------------------------------------------------
213 */
214
215 mov r3, #NV_DRF_DEF(FLOW_CTLR, HALT_CPU1_EVENTS, MODE, FLOW_MODE_STO P)
216 str r3, [r6, #FLOW_CTLR_HALT_CPU1_EVENTS_0]
217
218 /* -----------------------------------------------------------------
219 * Set the CPU reset vector. SCRATCH41 contains the physical
220 * address of the CPU-side restoration code.
221 * -----------------------------------------------------------------
222 */
223
224 ldr r3, [r5, #APBDEV_PMC_SCRATCH41_0]
225 str r3, [r9, #EVP_CPU_RESET_VECTOR_0]
226
227 /* ------------------------------------------------------------------
228 * Select CPU complex clock source.
229 * ------------------------------------------------------------------
230 */
231
232 ldr r3, =(CPU_CLOCK_SOURCE _SHL_ NV_DRF_SHIFT(CLK_RST_CONTROLLER, CC LK_BURST_POLICY, CWAKEUP_FIQ_SOURCE)) \
233 _OR_ (CPU_CLOCK_SOURCE _SHL_ NV_DRF_SHIFT(CLK_RST_CONTROLLER, CC LK_BURST_POLICY, CWAKEUP_IRQ_SOURCE)) \
234 _OR_ (CPU_CLOCK_SOURCE _SHL_ NV_DRF_SHIFT(CLK_RST_CONTROLLER, CC LK_BURST_POLICY, CWAKEUP_RUN_SOURCE)) \
235 _OR_ (CPU_CLOCK_SOURCE _SHL_ NV_DRF_SHIFT(CLK_RST_CONTROLLER, CC LK_BURST_POLICY, CWAKEUP_IDLE_SOURCE)) \
236 _OR_ NV_DRF_DEF(CLK_RST_CONTROLLER, CCLK_BURST_POLICY, CPU_STATE , RUN)
237 str r3, [r8, #CLK_RST_CONTROLLER_CCLK_BURST_POLICY_0]
238
239 /* ------------------------------------------------------------------
240 * Start the CPU0 clock and stop the CPU1 clock.
241 * ------------------------------------------------------------------
242 */
243
244 ldr r3, =NV_DRF_DEF(CLK_RST_CONTROLLER, CLK_CPU_CMPLX, CPU_BRIDGE_CL KDIV, DEFAULT) \
245 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, CLK_CPU_CMPLX, CPU0_CLK_STP, 0) \
246 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, CLK_CPU_CMPLX, CPU1_CLK_STP, 1)
247 str r3, [r8, #CLK_RST_CONTROLLER_CLK_CPU_CMPLX_0]
248
249 /* ------------------------------------------------------------------
250 * Enable the CPU complex clock.
251 * ------------------------------------------------------------------
252 */
253
254 mov r3, #NV_DRF_MASK(CLK_RST_CONTROLLER,CLK_ENB_L_SET,SET_CLK_ENB_CP U)
255 str r3, [r8, #CLK_RST_CONTROLLER_CLK_ENB_L_SET_0]
256
257 /* -----------------------------------------------------------------
258 * Make sure the resets were held for at least 2 microseconds.
259 * -----------------------------------------------------------------
260 */
261
262 add r3, r11, #2
263
264 wait:
265 ldr r2, [r7, #TIMERUS_CNTR_1US_0]
266 cmp r2, r3
267 ble wait
268
269 #if !DEBUG_DO_NOT_RESET_CORESIGHT
270
271 /* -----------------------------------------------------------------
272 * De-assert CoreSight reset.
273 * NOTE: We're leaving the CoreSight clock on the oscillator for
274 * now. It will be restored to its original clock source
275 * when the CPU-side restoration code runs.
276 * -----------------------------------------------------------------
277 */
278
279 mov r1, #NV_DRF_MASK(CLK_RST_CONTROLLER,RST_DEV_U_CLR,CLR_CSITE_RST)
280 str r1, [r8, #CLK_RST_CONTROLLER_RST_DEV_U_CLR_0]
281
282 #endif /*!DEBUG_DO_NOT_RESET_CORESIGHT */
283
284 ldr r1, =0xC5ACCE55 /* R0 = CoreSight unlock value * /
285 ldr r2, =CSITE_CPUDBG0_LAR_0 /* R1 = CPU0 lock offset */
286 ldr r3, =CSITE_CPUDBG1_LAR_0 /* R2 = CPU1 lock offset */
287 str r1, [r10, r2] /* Unlock CPU0 */
288 str r1, [r10, r3] /* Unlock CPU1 */
289
290 /* -----------------------------------------------------------------
291 * Sample the microsecond timestamp again. This is the time we must
292 * use when returning from LP0 for PLL stabilization delays.
293 * ----------------------------------------------------------------
294 */
295
296 ldr r11, [r7, #TIMERUS_CNTR_1US_0]
297 str r11, [r5, #APBDEV_PMC_SCRATCH_FOR_LP_EXIT_TIME_0]
298
299 /* -----------------------------------------------------------------
300 * Get the oscillator frequency. For 19.2 MHz, just use 19 to
301 * make the calculations easier.
302 * -----------------------------------------------------------------
303 */
304
305 ldr r4, [r7, #TIMERUS_USEC_CFG_0]
306 and r4, r4, #NV_DRF_MASK(TIMERUS, USEC_CFG, USEC_DIVISOR)
307 add r4, r4, #1
308 cmp r4, #26
309 MOVGT r4, #19
310
311 /* PLLX_BASE.PLLX_DIVM */
312 ldr r0, [r5, #APBDEV_PMC_SCRATCH3_0]
313 and r2, r0, #APBDEV_PMC_SCRATCH3_0_CLK_RST_PLLX_BASE_PLLX_DIVM_DEFAU LT_MASK
314 cmp r2, r4
315 moveq r4, #0
316 movne r4, #1
317
318 /* PLLX_BASE.PLLX_DIVN */
319 mov r0, r0, ASR #(APBDEV_PMC_SCRATCH3_0_CLK_RST_PLLX_BASE_PLLX_DIVN_ SHIFT - APBDEV_PMC_SCRATCH3_0_CLK_RST_PLLX_BASE_PLLX_DIVM_SHIFT)
320 ldr r3, =APBDEV_PMC_SCRATCH3_0_CLK_RST_PLLX_BASE_PLLX_DIVN_DEFAULT_M ASK
321 and r1, r0, r3
322 orr r2, r2, r1, LSL #CLK_RST_CONTROLLER_PLLX_BASE_0_PLLX_DIVN_SHIFT
323 mov r4, r1, LSL r4
324
325 /* PLLX_BASE.PLLX_DIVP */
326 mov r0, r0, ASR #(APBDEV_PMC_SCRATCH3_0_CLK_RST_PLLX_BASE_PLLX_DIVP_ SHIFT - APBDEV_PMC_SCRATCH3_0_CLK_RST_PLLX_BASE_PLLX_DIVN_SHIFT)
327 and r1, r0, #APBDEV_PMC_SCRATCH3_0_CLK_RST_PLLX_BASE_PLLX_DIVP_DEFAU LT_MASK
328 orr r2, r2, r1, LSL #CLK_RST_CONTROLLER_PLLX_BASE_0_PLLX_DIVP_SHIFT
329 mov r4, r4, ASR r1
330
331 /* PLLX_BASE.PLLX_BYPASS_ENABLE | PLLX_BASE.PLLX_ENABLE_DISABLE | PLLX_B ASE.PLLX_REF_DIS_REF_ENABLE */
332 orr r2, r2, #NV_DRF_DEF(CLK_RST_CONTROLLER, PLLX_BASE, PLLX_BYPASS, ENABLE) \
333 _OR_ NV_DRF_DEF(CLK_RST_CONTROLLER, PLLX_BASE, PLLX_ENABLE, DISA BLE) \
334 _OR_ NV_DRF_DEF(CLK_RST_CONTROLLER, PLLX_BASE, PLLX_REF_DIS, REF _ENABLE)
335
336 /* PLLX_MISC_DCCON must be set for frequencies > 600 MHz. */
337 cmp r4, #600
338 movlt r3, #0
339 movge r3, #NV_DRF_DEF(CLK_RST_CONTROLLER,PLLX_MISC,PLLX_DCCON,DEFAULT)
340
341 /* PLLX_MISC_LFCON */
342 mov r0, r0, ASR #(APBDEV_PMC_SCRATCH3_0_CLK_RST_PLLX_MISC_LFCON_SHIF T - APBDEV_PMC_SCRATCH3_0_CLK_RST_PLLX_BASE_PLLX_DIVP_SHIFT)
343 and r1, r0, #APBDEV_PMC_SCRATCH3_0_CLK_RST_PLLX_MISC_LFCON_DEFAULT_M ASK
344 orr r3, r3, r1, LSL #CLK_RST_CONTROLLER_PLLX_MISC_0_PLLX_LFCON_SHIFT
345
346 /* PLLX_MISC_CPCON */
347 mov r0, r0, ASR #(APBDEV_PMC_SCRATCH3_0_CLK_RST_PLLX_MISC_CPCON_SHIF T - APBDEV_PMC_SCRATCH3_0_CLK_RST_PLLX_MISC_LFCON_SHIFT)
348 and r1, r0, #APBDEV_PMC_SCRATCH3_0_CLK_RST_PLLX_MISC_LFCON_DEFAULT_M ASK
349 orr r3, r3, r1, LSL #CLK_RST_CONTROLLER_PLLX_MISC_0_PLLX_CPCON_SHIFT
350
351 str r3, [r8, #CLK_RST_CONTROLLER_PLLX_MISC_0]
352 str r2, [r8, #CLK_RST_CONTROLLER_PLLX_BASE_0]
353 orr r2, r2, #NV_DRF_DEF(CLK_RST_CONTROLLER, PLLX_BASE, PLLX_ENABLE, ENABLE)
354 str r2, [r8, #CLK_RST_CONTROLLER_PLLX_BASE_0]
355 BIC r2, r2, #NV_DRF_DEF(CLK_RST_CONTROLLER, PLLX_BASE, PLLX_BYPASS, ENABLE)
356 str r2, [r8, #CLK_RST_CONTROLLER_PLLX_BASE_0]
357
358 mov r3, #0
359 str r3, [r6, #FLOW_CTLR_HALT_CPU_EVENTS_0]
360
361 ldr r3, =NV_DRF_NUM(CLK_RST_CONTROLLER, RST_CPU_CMPLX_CLR, CLR_CPURE SET0, 1) \
362 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, RST_CPU_CMPLX_CLR, CLR_DBGRE SET0, 1) \
363 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, RST_CPU_CMPLX_CLR, CLR_DERES ET0, 1)
364 str r3, [r8, #CLK_RST_CONTROLLER_RST_CPU_CMPLX_CLR_0]
365
366 ldr r1, = NV_DRF_DEF(CLK_RST_CONTROLLER, PLLM_OUT, PLLM_OUT1_RSTN, R ESET_DISABLE) \
367 _OR_ NV_DRF_DEF(CLK_RST_CONTROLLER, PLLM_OUT, PLLM_OUT1_CLKEN, E NABLE) \
368 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, PLLM_OUT, PLLM_OUT1_RATIO, 0 x8)
369 str r1, [r8, #CLK_RST_CONTROLLER_PLLM_OUT_0]
370
371 ldr r2, =NV_DRF_DEF(CLK_RST_CONTROLLER, SCLK_BURST_POLICY, SWAKEUP_F IQ_SOURCE, PLLM_OUT1) \
372 _OR_ NV_DRF_DEF(CLK_RST_CONTROLLER, SCLK_BURST_POLICY, SWAKEUP_I RQ_SOURCE, PLLM_OUT1) \
373 _OR_ NV_DRF_DEF(CLK_RST_CONTROLLER, SCLK_BURST_POLICY, SWAKEUP_R UN_SOURCE, PLLM_OUT1) \
374 _OR_ NV_DRF_DEF(CLK_RST_CONTROLLER, SCLK_BURST_POLICY, SWAKEUP_I DLE_SOURCE, PLLM_OUT1) \
375 _OR_ NV_DRF_DEF(CLK_RST_CONTROLLER, SCLK_BURST_POLICY, SYS_STATE , IDLE)
376 str r2, [r8, #CLK_RST_CONTROLLER_SCLK_BURST_POLICY_0]
377 b avp_resume
378
379 .ltorg
380 .align 4
381
382 avp_resume:
383
384 mov r1, #NV_DRF_MASK(CLK_RST_CONTROLLER,RST_DEV_L_CLR,CLR_CPU_RST)
385 str r1, [r8, #CLK_RST_CONTROLLER_RST_DEV_L_CLR_0]
386
387 avp_halt:
388
389 mov r3, #NV_DRF_DEF(FLOW_CTLR, HALT_COP_EVENTS, MODE, FLOW_MODE_STOP )
390 orr r3, r3, #NV_DRF_NUM(FLOW_CTLR, HALT_COP_EVENTS, JTAG, 1)
391 str r3, [r6, #FLOW_CTLR_HALT_COP_EVENTS_0]
392 b avp_halt
393
394 /* ----------------------------------------------------------------------------- --
395 * Prototype:
396 * do_reset
397 *
398 * Input:
399 * None
400 *
401 * Output:
402 * None
403 *
404 * Registers Used:
405 * All
406 *
407 * Description:
408 * Execution comes here it something goes wrong. The chip is reset and a
409 * cold boot is performed.
410 * ----------------------------------------------------------------------------- --
411 */
412
413 do_reset:
414
415 mov r0, #NV_DRF_DEF(CLK_RST_CONTROLLER, RST_DEVICES_L, SWR_TRIG_SYS_ RST, ENABLE)
416 str r0, [r8, #CLK_RST_CONTROLLER_RST_DEVICES_L_0]
417 b .
418
419 .ltorg
420
421 .globl wb_end
422 wb_end:
423
424 .end
425
OLDNEW
« no previous file with comments | « arch/arm/cpu/arm_cortexa9/tegra2/warmboot.c ('k') | arch/arm/include/asm/arch-tegra2/nv_drf_asm.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698