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