OLD | NEW |
---|---|
(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 | |
OLD | NEW |