aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2
diff options
context:
space:
mode:
authorSantosh Shilimkar <santosh.shilimkar@ti.com>2011-01-23 11:07:03 -0500
committerKevin Hilman <khilman@ti.com>2011-03-10 15:23:12 -0500
commit46f557cb453b9f3b6dc36b8179c2c36932a2ea64 (patch)
treeb7db81ebf5aebfead54bbdede102a5980121108f /arch/arm/mach-omap2
parentc9749a352383d4d2d25eb28062afd1a7eee115b7 (diff)
OMAP3: PM: Remove un-necessary cp15 registers form low power cpu context
The current code saves few un-necessary registers which are read-only or write-only, unused CP15 registers. Remove them and keep only necessary CP15 registers part of low power context save/restore. Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com> Signed-off-by: Kevin Hilman <khilman@ti.com>
Diffstat (limited to 'arch/arm/mach-omap2')
-rw-r--r--arch/arm/mach-omap2/sleep34xx.S156
1 files changed, 40 insertions, 116 deletions
diff --git a/arch/arm/mach-omap2/sleep34xx.S b/arch/arm/mach-omap2/sleep34xx.S
index f75a166f0a21..99e43cc5a503 100644
--- a/arch/arm/mach-omap2/sleep34xx.S
+++ b/arch/arm/mach-omap2/sleep34xx.S
@@ -214,66 +214,29 @@ save_context_wfi:
214 beq clean_caches 214 beq clean_caches
215 215
216l1_logic_lost: 216l1_logic_lost:
217 /* Store sp and spsr to SDRAM */ 217 mov r4, sp @ Store sp
218 mov r4, sp 218 mrs r5, spsr @ Store spsr
219 mrs r5, spsr 219 mov r6, lr @ Store lr
220 mov r6, lr
221 stmia r8!, {r4-r6} 220 stmia r8!, {r4-r6}
222 /* Save all ARM registers */ 221
223 /* Coprocessor access control register */ 222 mrc p15, 0, r4, c1, c0, 2 @ Coprocessor access control register
224 mrc p15, 0, r6, c1, c0, 2 223 mrc p15, 0, r5, c2, c0, 0 @ TTBR0
225 stmia r8!, {r6} 224 mrc p15, 0, r6, c2, c0, 1 @ TTBR1
226 /* TTBR0, TTBR1 and Translation table base control */ 225 mrc p15, 0, r7, c2, c0, 2 @ TTBCR
227 mrc p15, 0, r4, c2, c0, 0
228 mrc p15, 0, r5, c2, c0, 1
229 mrc p15, 0, r6, c2, c0, 2
230 stmia r8!, {r4-r6}
231 /*
232 * Domain access control register, data fault status register,
233 * and instruction fault status register
234 */
235 mrc p15, 0, r4, c3, c0, 0
236 mrc p15, 0, r5, c5, c0, 0
237 mrc p15, 0, r6, c5, c0, 1
238 stmia r8!, {r4-r6}
239 /*
240 * Data aux fault status register, instruction aux fault status,
241 * data fault address register and instruction fault address register
242 */
243 mrc p15, 0, r4, c5, c1, 0
244 mrc p15, 0, r5, c5, c1, 1
245 mrc p15, 0, r6, c6, c0, 0
246 mrc p15, 0, r7, c6, c0, 2
247 stmia r8!, {r4-r7}
248 /*
249 * user r/w thread and process ID, user r/o thread and process ID,
250 * priv only thread and process ID, cache size selection
251 */
252 mrc p15, 0, r4, c13, c0, 2
253 mrc p15, 0, r5, c13, c0, 3
254 mrc p15, 0, r6, c13, c0, 4
255 mrc p15, 2, r7, c0, c0, 0
256 stmia r8!, {r4-r7} 226 stmia r8!, {r4-r7}
257 /* Data TLB lockdown, instruction TLB lockdown registers */
258 mrc p15, 0, r5, c10, c0, 0
259 mrc p15, 0, r6, c10, c0, 1
260 stmia r8!, {r5-r6}
261 /* Secure or non secure vector base address, FCSE PID, Context PID*/
262 mrc p15, 0, r4, c12, c0, 0
263 mrc p15, 0, r5, c13, c0, 0
264 mrc p15, 0, r6, c13, c0, 1
265 stmia r8!, {r4-r6}
266 /* Primary remap, normal remap registers */
267 mrc p15, 0, r4, c10, c2, 0
268 mrc p15, 0, r5, c10, c2, 1
269 stmia r8!,{r4-r5}
270 227
271 /* Store current cpsr*/ 228 mrc p15, 0, r4, c3, c0, 0 @ Domain access Control Register
272 mrs r2, cpsr 229 mrc p15, 0, r5, c10, c2, 0 @ PRRR
273 stmia r8!, {r2} 230 mrc p15, 0, r6, c10, c2, 1 @ NMRR
231 stmia r8!,{r4-r6}
232
233 mrc p15, 0, r4, c13, c0, 1 @ Context ID
234 mrc p15, 0, r5, c13, c0, 2 @ User r/w thread and process ID
235 mrc p15, 0, r6, c12, c0, 0 @ Secure or NS vector base address
236 mrs r7, cpsr @ Store current cpsr
237 stmia r8!, {r4-r7}
274 238
275 mrc p15, 0, r4, c1, c0, 0 239 mrc p15, 0, r4, c1, c0, 0 @ save control register
276 /* save control register */
277 stmia r8!, {r4} 240 stmia r8!, {r4}
278 241
279clean_caches: 242clean_caches:
@@ -489,68 +452,29 @@ skipl2reen:
489 ldr r4, scratchpad_base 452 ldr r4, scratchpad_base
490 ldr r3, [r4,#0xBC] 453 ldr r3, [r4,#0xBC]
491 adds r3, r3, #16 454 adds r3, r3, #16
455
492 ldmia r3!, {r4-r6} 456 ldmia r3!, {r4-r6}
493 mov sp, r4 457 mov sp, r4 @ Restore sp
494 msr spsr_cxsf, r5 458 msr spsr_cxsf, r5 @ Restore spsr
495 mov lr, r6 459 mov lr, r6 @ Restore lr
496
497 ldmia r3!, {r4-r9}
498 /* Coprocessor access Control Register */
499 mcr p15, 0, r4, c1, c0, 2
500
501 /* TTBR0 */
502 MCR p15, 0, r5, c2, c0, 0
503 /* TTBR1 */
504 MCR p15, 0, r6, c2, c0, 1
505 /* Translation table base control register */
506 MCR p15, 0, r7, c2, c0, 2
507 /* Domain access Control Register */
508 MCR p15, 0, r8, c3, c0, 0
509 /* Data fault status Register */
510 MCR p15, 0, r9, c5, c0, 0
511
512 ldmia r3!,{r4-r8}
513 /* Instruction fault status Register */
514 MCR p15, 0, r4, c5, c0, 1
515 /* Data Auxiliary Fault Status Register */
516 MCR p15, 0, r5, c5, c1, 0
517 /* Instruction Auxiliary Fault Status Register*/
518 MCR p15, 0, r6, c5, c1, 1
519 /* Data Fault Address Register */
520 MCR p15, 0, r7, c6, c0, 0
521 /* Instruction Fault Address Register*/
522 MCR p15, 0, r8, c6, c0, 2
523 ldmia r3!,{r4-r7}
524 460
525 /* User r/w thread and process ID */ 461 ldmia r3!, {r4-r7}
526 MCR p15, 0, r4, c13, c0, 2 462 mcr p15, 0, r4, c1, c0, 2 @ Coprocessor access Control Register
527 /* User ro thread and process ID */ 463 mcr p15, 0, r5, c2, c0, 0 @ TTBR0
528 MCR p15, 0, r5, c13, c0, 3 464 mcr p15, 0, r6, c2, c0, 1 @ TTBR1
529 /* Privileged only thread and process ID */ 465 mcr p15, 0, r7, c2, c0, 2 @ TTBCR
530 MCR p15, 0, r6, c13, c0, 4 466
531 /* Cache size selection */ 467 ldmia r3!,{r4-r6}
532 MCR p15, 2, r7, c0, c0, 0 468 mcr p15, 0, r4, c3, c0, 0 @ Domain access Control Register
533 ldmia r3!,{r4-r8} 469 mcr p15, 0, r5, c10, c2, 0 @ PRRR
534 /* Data TLB lockdown registers */ 470 mcr p15, 0, r6, c10, c2, 1 @ NMRR
535 MCR p15, 0, r4, c10, c0, 0 471
536 /* Instruction TLB lockdown registers */ 472
537 MCR p15, 0, r5, c10, c0, 1 473 ldmia r3!,{r4-r7}
538 /* Secure or Nonsecure Vector Base Address */ 474 mcr p15, 0, r4, c13, c0, 1 @ Context ID
539 MCR p15, 0, r6, c12, c0, 0 475 mcr p15, 0, r5, c13, c0, 2 @ User r/w thread and process ID
540 /* FCSE PID */ 476 mrc p15, 0, r6, c12, c0, 0 @ Secure or NS vector base address
541 MCR p15, 0, r7, c13, c0, 0 477 msr cpsr, r7 @ store cpsr
542 /* Context PID */
543 MCR p15, 0, r8, c13, c0, 1
544
545 ldmia r3!,{r4-r5}
546 /* Primary memory remap register */
547 MCR p15, 0, r4, c10, c2, 0
548 /* Normal memory remap register */
549 MCR p15, 0, r5, c10, c2, 1
550
551 /* Restore cpsr */
552 ldmia r3!,{r4} @ load CPSR from SDRAM
553 msr cpsr, r4 @ store cpsr
554 478
555 /* Enabling MMU here */ 479 /* Enabling MMU here */
556 mrc p15, 0, r7, c2, c0, 2 @ Read TTBRControl 480 mrc p15, 0, r7, c2, c0, 2 @ Read TTBRControl