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

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: 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 #define ASSEMBLY_SOURCE_FILE 1
25
26 #include "asm/arch/nvbl_assembly.h"
27 #include "asm/arch/nvbl_arm_cpsr.h"
28 #include "asm/arch/nvbl_memmap_nvap.h"
29 #include "asm/arch/tegra2.h"
30 #include "asm/arch/nv_drf_asm.h"
31
32 /* -----------------------------------
33 * Compile-time code options
34 * -----------------------------------
35 */
36
37 /* CPU Clock Source -- DO NOT CHOOSE PLL-X */
38 #define CPU_CLOCK_SOURCE CLK_RST_CONTROLLER_CCLK_BURST_POLICY_0_CWAKEUP_I DLE_SOURCE_PLLP_OUT0
39
40 /* Scratch map */
41 #define APBDEV_PMC_SCRATCH_FOR_LP_EXIT_TIME_0 APBDEV_PMC_SCRATCH1_0
42
43 /*Misc warmboot parameters */
44 #define AP20_WB0_RUN_ADDRESS 0x40020000
45
46 /*Apertures bases */
47 #define CSITE_PA_BASE 0x70040000 /* Base address for arcsite.h re gisters */
48 #define CLK_RST_PA_BASE 0x60006000 /* Base address for arclk_rst.h registers */
49 #define EVP_PA_BASE 0x6000F000 /* Base address for arevp.h regi sters */
50 #define FLOW_PA_BASE 0x60007000 /* Base address for arflow_ctlr. h registers */
51 #define PMC_PA_BASE 0x7000E400 /* Base address for arapbpm.h re gisters */
52 #define TIMERUS_PA_BASE 0x60005010 /* Base address for artimerus.h registers */
53 #define PG_UP_PA_BASE 0x60000000 /* Base address for arpg.h regis ters */
54 #define MISC_PA_BASE 0x70000000 /* Base address for arapb_misc.h registers */
55
56 /* -----------------------------------
57 * Compile-time debug code enables
58 * -----------------------------------
59 */
60
61 #define DEBUG_DO_NOT_RESET_CORESIGHT 0 /* Set non-zero to skip resettin g CoreSight */
62
63 TEXT
64 ALIGN 4
65
Tom Warren 2010/11/12 00:12:40 This code is very ugly - it looks like we're using
yelin 2010/11/15 23:21:21 Done.
66 /* ------------------------------------------------------
67 * Prototype:
68 * void wb_start(void)
69 *
70 * Input:
71 *
72 * Output:
73 * None
74 *
75 * Registers Used:
76 * ALL
77 *
78 * Description:
79 * This function restarts the CPU and then waits for the AVP driver to
80 * tell it where to transfer control to finish restoration of the AVP state.
81 * ----------------------------------------------------------------------------- --
82 */
83
84 EXPORT wb_start
85 wb_start LABEL
86
87 DCD 0, 0, 0, 0
88 DCD 0, 0, 0, 0
89 DCD 0, 0, 0, 0
90 DCD 0, 0, 0, 0
91
92 start LABEL
93
94 LDR r0, =MISC_PA_BASE /* R0 = MISC PA base address */
95 LDR r1, =NV_DRF_DEF(APB_MISC_PP, CONFIG_CTL, JTAG, ENABLE) \
96 _OR_ NV_DRF_DEF(APB_MISC_PP, CONFIG_CTL, TBE, ENABLE)
97 STR r1, [r0, #NV_DRF_OFFSET(APB_MISC_PP, CONFIG_CTL)]
98
99 /* -----------------------------------------------------------------
100 * Load up the base addresses for the register blocks.
101 * -----------------------------------------------------------------
102 */
103 LDR r5, =PMC_PA_BASE /* R5 = PMC PA base address */
104 LDR r6, =FLOW_PA_BASE /* R6 = FLOW PA base address */
105 LDR r7, =TIMERUS_PA_BASE /* R7 = TIMERUS PA base address */
106 LDR r8, =CLK_RST_PA_BASE /* R8 = CLK PA base address */
107 LDR r9, =EVP_PA_BASE /* R9 = EVP PA base address */
108 LDR r10,=CSITE_PA_BASE /* R10 = CSITE base address */
109
110 /* -----------------------------------------------------------------
111 * Are we running where we're supposed to be?
112 * -----------------------------------------------------------------
113 */
114
115 LDR r0, =AP20_WB0_RUN_ADDRESS /* R0 = expected load address */
116 ADD r1, pc, #here-(.+8) /* R1 = &here */
117
118 here LABEL
119 SUB r1, r1, #(here-start) /* R1 = actual load address */
120 LDR r2, =PG_UP_PA_BASE /* R2 = PG PA base address */
121 LDR r3, [r2, #PG_UP_TAG_0] /* R3 = processor tag */
122 LDR r2, =PG_UP_TAG_0_PID_COP /* R2 = AVP processor tag */
123 CMP r0, r1 /* Addresses match? */
124 CMPEQ r2, r3 /* Processor tags match? */
125 BNE do_reset /* No -- reset the chip */
126
127 /* -----------------------------------------------------------------
128 * Get a snapshot of the Usec count. This is a good indicator of
129 * the overhead of BOOTROM after a wake-up event.
130 * -----------------------------------------------------------------
131 */
132
133 LDR r11, [r7, #TIMERUS_CNTR_1US_0]
134
135 /* ==================================================================
136 * BEGIN CPU COMPLEX INITIALIZATON
137 * ==================================================================
138 */
139
140 #if !DEBUG_DO_NOT_RESET_CORESIGHT
141
142 /* ----------------------------------------------------------------
143 * Assert CoreSight reset.
144 * ----------------------------------------------------------------
145 */
146
147 MOV r1, #NV_DRF_MASK(CLK_RST_CONTROLLER,RST_DEV_U_SET,SET_CSITE_RST)
148 STR r1, [r8, #CLK_RST_CONTROLLER_RST_DEV_U_SET_0]
149
150 #endif /*!DEBUG_DO_NOT_RESET_CORESIGHT */
151
152 /* Set the drive strength */
153 ldr r1, [r8, #CLK_RST_CONTROLLER_OSC_CTRL_0]
154 ldr r3, =NV_DRF_MASK(CLK_RST_CONTROLLER, OSC_CTRL, XOFS) \
155 _OR_ NV_DRF_MASK(CLK_RST_CONTROLLER, OSC_CTRL, XOE)
156 bic r1, r1, r3
157 ldr r3, =NV_DRF_NUM(CLK_RST_CONTROLLER, OSC_CTRL, XOFS, 0x4) \
158 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, OSC_CTRL, XOE, 0x1)
159 orr r3, r1, r3
160 str r3, [r8, #CLK_RST_CONTROLLER_OSC_CTRL_0]
161
162 /* -----------------------------------------------------------------
163 * Power up the CPU complex if necessary.
164 * -----------------------------------------------------------------
165 */
166
167 LDR r3, [r5, #APBDEV_PMC_PWRGATE_STATUS_0]
168 TST r3, #NV_DRF_MASK(APBDEV_PMC, PWRGATE_STATUS, CPU)
169
170 LDREQ r2, =NV_DRF_DEF(APBDEV_PMC, PWRGATE_TOGGLE, PARTID, CP) \
171 _OR_ NV_DRF_DEF(APBDEV_PMC, PWRGATE_TOGGLE, START, ENABLE)
172 STREQ r2, [r5, #APBDEV_PMC_PWRGATE_TOGGLE_0]
173
174 is_cpu_on LABEL
175 LDR r3, [r5, #APBDEV_PMC_PWRGATE_STATUS_0]
176 TST r3, #NV_DRF_MASK(APBDEV_PMC, PWRGATE_STATUS, CPU)
177 BEQ is_cpu_on
178
179 /* -----------------------------------------------------------------
180 * Remove the I/O clamps from the CPU power partition.
181 * -----------------------------------------------------------------
182 */
183
184 MOV r3, #NV_DRF_DEF(APBDEV_PMC, REMOVE_CLAMPING_CMD, CPU, ENABLE)
185 STR r3, [r5, #APBDEV_PMC_REMOVE_CLAMPING_CMD_0]
186
187 LDR r3, =NV_DRF_NUM(FLOW_CTLR, HALT_COP_EVENTS, ZERO, 0x14) \
188 _OR_ NV_DRF_NUM(FLOW_CTLR, HALT_COP_EVENTS, MSEC, 1) \
189 _OR_ NV_DRF_NUM(FLOW_CTLR, HALT_COP_EVENTS, MODE, 2)
190 STR r3, [r6, #FLOW_CTLR_HALT_COP_EVENTS_0]
191
192 /* ------------------------------------------------------------------
193 * Assert CPU complex reset.
194 * ------------------------------------------------------------------
195 */
196
197 MOV r1, #NV_DRF_MASK(CLK_RST_CONTROLLER,RST_DEV_L_SET,SET_CPU_RST)
198 STR r1, [r8, #CLK_RST_CONTROLLER_RST_DEV_L_SET_0]
199
200 /* ------------------------------------------------------------------
201 * Hold both CPUs in reset.
202 * ------------------------------------------------------------------
203 */
204
205 LDR r3, =NV_DRF_NUM(CLK_RST_CONTROLLER, RST_CPU_CMPLX_SET, SET_CPURE SET1, 1) \
206 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, RST_CPU_CMPLX_SET, SET_DBGRE SET1, 1) \
207 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, RST_CPU_CMPLX_SET, SET_DERES ET1, 1) \
208 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, RST_CPU_CMPLX_SET, SET_CPURE SET0, 1) \
209 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, RST_CPU_CMPLX_SET, SET_DBGRE SET0, 1) \
210 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, RST_CPU_CMPLX_SET, SET_DERES ET0, 1)
211 STR r3, [r8, #CLK_RST_CONTROLLER_RST_CPU_CMPLX_SET_0]
212
213 /* ------------------------------------------------------------------
214 * Halt CPU1 at the flow controller for uni-processor configurations.
215 * ------------------------------------------------------------------
216 */
217
218 MOV r3, #NV_DRF_DEF(FLOW_CTLR, HALT_CPU1_EVENTS, MODE, FLOW_MODE_STO P)
219 STR r3, [r6, #FLOW_CTLR_HALT_CPU1_EVENTS_0]
220
221 /* -----------------------------------------------------------------
222 * Set the CPU reset vector. SCRATCH41 contains the physical
223 * address of the CPU-side restoration code.
224 * -----------------------------------------------------------------
225 */
226
227 LDR r3, [r5, #APBDEV_PMC_SCRATCH41_0]
228 STR r3, [r9, #EVP_CPU_RESET_VECTOR_0]
229
230 /* ------------------------------------------------------------------
231 * Select CPU complex clock source.
232 * ------------------------------------------------------------------
233 */
234
235 LDR r3, =(CPU_CLOCK_SOURCE _SHL_ NV_DRF_SHIFT(CLK_RST_CONTROLLER, CC LK_BURST_POLICY, CWAKEUP_FIQ_SOURCE)) \
236 _OR_ (CPU_CLOCK_SOURCE _SHL_ NV_DRF_SHIFT(CLK_RST_CONTROLLER, CC LK_BURST_POLICY, CWAKEUP_IRQ_SOURCE)) \
237 _OR_ (CPU_CLOCK_SOURCE _SHL_ NV_DRF_SHIFT(CLK_RST_CONTROLLER, CC LK_BURST_POLICY, CWAKEUP_RUN_SOURCE)) \
238 _OR_ (CPU_CLOCK_SOURCE _SHL_ NV_DRF_SHIFT(CLK_RST_CONTROLLER, CC LK_BURST_POLICY, CWAKEUP_IDLE_SOURCE)) \
239 _OR_ NV_DRF_DEF(CLK_RST_CONTROLLER, CCLK_BURST_POLICY, CPU_STATE , RUN)
240 STR r3, [r8, #CLK_RST_CONTROLLER_CCLK_BURST_POLICY_0]
241
242 /* ------------------------------------------------------------------
243 * Start the CPU0 clock and stop the CPU1 clock.
244 * ------------------------------------------------------------------
245 */
246
247 LDR r3, =NV_DRF_DEF(CLK_RST_CONTROLLER, CLK_CPU_CMPLX, CPU_BRIDGE_CL KDIV, DEFAULT) \
248 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, CLK_CPU_CMPLX, CPU0_CLK_STP, 0) \
249 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, CLK_CPU_CMPLX, CPU1_CLK_STP, 1)
250 STR r3, [r8, #CLK_RST_CONTROLLER_CLK_CPU_CMPLX_0]
251
252 /* ------------------------------------------------------------------
253 * Enable the CPU complex clock.
254 * ------------------------------------------------------------------
255 */
256
257 MOV r3, #NV_DRF_MASK(CLK_RST_CONTROLLER,CLK_ENB_L_SET,SET_CLK_ENB_CP U)
258 STR r3, [r8, #CLK_RST_CONTROLLER_CLK_ENB_L_SET_0]
259
260 /* -----------------------------------------------------------------
261 * Make sure the resets were held for at least 2 microseconds.
262 * -----------------------------------------------------------------
263 */
264
265 ADD r3, r11, #2
266
267 wait LABEL
268 LDR r2, [r7, #TIMERUS_CNTR_1US_0]
269 CMP r2, r3
270 BLE wait
271
272 #if !DEBUG_DO_NOT_RESET_CORESIGHT
273
274 /* -----------------------------------------------------------------
275 * De-assert CoreSight reset.
276 * NOTE: We're leaving the CoreSight clock on the oscillator for
277 * now. It will be restored to its original clock source
278 * when the CPU-side restoration code runs.
279 * -----------------------------------------------------------------
280 */
281
282 MOV r1, #NV_DRF_MASK(CLK_RST_CONTROLLER,RST_DEV_U_CLR,CLR_CSITE_RST)
283 STR r1, [r8, #CLK_RST_CONTROLLER_RST_DEV_U_CLR_0]
284
285 #endif /*!DEBUG_DO_NOT_RESET_CORESIGHT */
286
287 LDR r1, =0xC5ACCE55 /* R0 = CoreSight unlock value * /
288 LDR r2, =CSITE_CPUDBG0_LAR_0 /* R1 = CPU0 lock offset */
289 LDR r3, =CSITE_CPUDBG1_LAR_0 /* R2 = CPU1 lock offset */
290 STR r1, [r10, r2] /* Unlock CPU0 */
291 STR r1, [r10, r3] /* Unlock CPU1 */
292
293 /* -----------------------------------------------------------------
294 * Sample the microsecond timestamp again. This is the time we must
295 * use when returning from LP0 for PLL stabilization delays.
296 * ----------------------------------------------------------------
297 */
298
299 LDR r11, [r7, #TIMERUS_CNTR_1US_0]
300 STR r11, [r5, #APBDEV_PMC_SCRATCH_FOR_LP_EXIT_TIME_0]
301
302 /* -----------------------------------------------------------------
303 * Get the oscillator frequency. For 19.2 MHz, just use 19 to
304 * make the calculations easier.
305 * -----------------------------------------------------------------
306 */
307
308 LDR r4, [r7, #TIMERUS_USEC_CFG_0]
309 AND r4, r4, #NV_DRF_MASK(TIMERUS, USEC_CFG, USEC_DIVISOR)
310 ADD r4, r4, #1
311 CMP r4, #26
312 MOVGT r4, #19
313
314 /* PLLX_BASE.PLLX_DIVM */
315 LDR r0, [r5, #APBDEV_PMC_SCRATCH3_0]
316 AND r2, r0, #APBDEV_PMC_SCRATCH3_0_CLK_RST_PLLX_BASE_PLLX_DIVM_DEFAU LT_MASK
317 CMP r2, r4
318 MOVEQ r4, #0
319 MOVNE r4, #1
320
321 /* PLLX_BASE.PLLX_DIVN */
322 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)
323 LDR r3, =APBDEV_PMC_SCRATCH3_0_CLK_RST_PLLX_BASE_PLLX_DIVN_DEFAULT_M ASK
324 AND r1, r0, r3
325 ORR r2, r2, r1, LSL #CLK_RST_CONTROLLER_PLLX_BASE_0_PLLX_DIVN_SHIFT
326 MOV r4, r1, LSL r4
327
328 /* PLLX_BASE.PLLX_DIVP */
329 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)
330 AND r1, r0, #APBDEV_PMC_SCRATCH3_0_CLK_RST_PLLX_BASE_PLLX_DIVP_DEFAU LT_MASK
331 ORR r2, r2, r1, LSL #CLK_RST_CONTROLLER_PLLX_BASE_0_PLLX_DIVP_SHIFT
332 MOV r4, r4, ASR r1
333
334 /* PLLX_BASE.PLLX_BYPASS_ENABLE | PLLX_BASE.PLLX_ENABLE_DISABLE | PLLX_B ASE.PLLX_REF_DIS_REF_ENABLE */
335 ORR r2, r2, #NV_DRF_DEF(CLK_RST_CONTROLLER, PLLX_BASE, PLLX_BYPASS, ENABLE) \
336 _OR_ NV_DRF_DEF(CLK_RST_CONTROLLER, PLLX_BASE, PLLX_ENABLE, DISA BLE) \
337 _OR_ NV_DRF_DEF(CLK_RST_CONTROLLER, PLLX_BASE, PLLX_REF_DIS, REF _ENABLE)
338
339 /* PLLX_MISC_DCCON must be set for frequencies > 600 MHz. */
340 CMP r4, #600
341 MOVLT r3, #0
342 MOVGE r3, #NV_DRF_DEF(CLK_RST_CONTROLLER,PLLX_MISC,PLLX_DCCON,DEFAULT)
343
344 /* PLLX_MISC_LFCON */
345 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)
346 AND r1, r0, #APBDEV_PMC_SCRATCH3_0_CLK_RST_PLLX_MISC_LFCON_DEFAULT_M ASK
347 ORR r3, r3, r1, LSL #CLK_RST_CONTROLLER_PLLX_MISC_0_PLLX_LFCON_SHIFT
348
349 /* PLLX_MISC_CPCON */
350 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)
351 AND r1, r0, #APBDEV_PMC_SCRATCH3_0_CLK_RST_PLLX_MISC_LFCON_DEFAULT_M ASK
352 ORR r3, r3, r1, LSL #CLK_RST_CONTROLLER_PLLX_MISC_0_PLLX_CPCON_SHIFT
353
354 STR r3, [r8, #CLK_RST_CONTROLLER_PLLX_MISC_0]
355 STR r2, [r8, #CLK_RST_CONTROLLER_PLLX_BASE_0]
356 ORR r2, r2, #NV_DRF_DEF(CLK_RST_CONTROLLER, PLLX_BASE, PLLX_ENABLE, ENABLE)
357 STR r2, [r8, #CLK_RST_CONTROLLER_PLLX_BASE_0]
358 BIC r2, r2, #NV_DRF_DEF(CLK_RST_CONTROLLER, PLLX_BASE, PLLX_BYPASS, ENABLE)
359 STR r2, [r8, #CLK_RST_CONTROLLER_PLLX_BASE_0]
360
361 MOV r3, #0
362 STR r3, [r6, #FLOW_CTLR_HALT_CPU_EVENTS_0]
363
364 LDR r3, =NV_DRF_NUM(CLK_RST_CONTROLLER, RST_CPU_CMPLX_CLR, CLR_CPURE SET0, 1) \
365 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, RST_CPU_CMPLX_CLR, CLR_DBGRE SET0, 1) \
366 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, RST_CPU_CMPLX_CLR, CLR_DERES ET0, 1)
367 STR r3, [r8, #CLK_RST_CONTROLLER_RST_CPU_CMPLX_CLR_0]
368
369 LDR r1, = NV_DRF_DEF(CLK_RST_CONTROLLER, PLLM_OUT, PLLM_OUT1_RSTN, R ESET_DISABLE) \
370 _OR_ NV_DRF_DEF(CLK_RST_CONTROLLER, PLLM_OUT, PLLM_OUT1_CLKEN, E NABLE) \
371 _OR_ NV_DRF_NUM(CLK_RST_CONTROLLER, PLLM_OUT, PLLM_OUT1_RATIO, 0 x8)
372 STR r1, [r8, #CLK_RST_CONTROLLER_PLLM_OUT_0]
373
374 LDR r2, =NV_DRF_DEF(CLK_RST_CONTROLLER, SCLK_BURST_POLICY, SWAKEUP_F IQ_SOURCE, PLLM_OUT1) \
375 _OR_ NV_DRF_DEF(CLK_RST_CONTROLLER, SCLK_BURST_POLICY, SWAKEUP_I RQ_SOURCE, PLLM_OUT1) \
376 _OR_ NV_DRF_DEF(CLK_RST_CONTROLLER, SCLK_BURST_POLICY, SWAKEUP_R UN_SOURCE, PLLM_OUT1) \
377 _OR_ NV_DRF_DEF(CLK_RST_CONTROLLER, SCLK_BURST_POLICY, SWAKEUP_I DLE_SOURCE, PLLM_OUT1) \
378 _OR_ NV_DRF_DEF(CLK_RST_CONTROLLER, SCLK_BURST_POLICY, SYS_STATE , IDLE)
379 STR r2, [r8, #CLK_RST_CONTROLLER_SCLK_BURST_POLICY_0]
380 B avp_resume
381
382 LTORG
383 ALIGN 4
384
385 avp_resume LABEL
386
387 MOV r1, #NV_DRF_MASK(CLK_RST_CONTROLLER,RST_DEV_L_CLR,CLR_CPU_RST)
388 STR r1, [r8, #CLK_RST_CONTROLLER_RST_DEV_L_CLR_0]
389
390 avp_halt LABEL
391
392 MOV r3, #NV_DRF_DEF(FLOW_CTLR, HALT_COP_EVENTS, MODE, FLOW_MODE_STOP )
393 ORR r3, r3, #NV_DRF_NUM(FLOW_CTLR, HALT_COP_EVENTS, JTAG, 1)
394 STR r3, [r6, #FLOW_CTLR_HALT_COP_EVENTS_0]
395 B avp_halt
396
397 /* ----------------------------------------------------------------------------- --
398 * Prototype:
399 * do_reset
400 *
401 * Input:
402 * None
403 *
404 * Output:
405 * None
406 *
407 * Registers Used:
408 * All
409 *
410 * Description:
411 * Execution comes here it something goes wrong. The chip is reset and a
412 * cold boot is performed.
413 * ----------------------------------------------------------------------------- --
414 */
415
416 do_reset LABEL
417
418 MOV r0, #NV_DRF_DEF(CLK_RST_CONTROLLER, RST_DEVICES_L, SWR_TRIG_SYS_ RST, ENABLE)
419 STR r0, [r8, #CLK_RST_CONTROLLER_RST_DEVICES_L_0]
420 B .
421
422 LTORG
423
424 EXPORT wb_end
425 wb_end LABEL
426
427 END
428
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698