/* * SA11x0 Assembler Sleep/WakeUp Management Routines * * Copyright (c) 2001 Cliff Brake <cbrake@accelent.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License. * * History: * * 2001-02-06: Cliff Brake Initial code * * 2001-08-29: Nicolas Pitre Simplified. * * 2002-05-27: Nicolas Pitre Revisited, more cleanup and simplification. * Storage is on the stack now.
*/
.text /* * sa1100_finish_suspend() * * Causes sa11x0 to enter sleep state * * Must be aligned to a cacheline.
*/
.balign 32
ENTRY(sa1100_finish_suspend)
@ disable clock switching
mcr p15, 0, r1, c15, c2, 2
@ Pre-load __loop_udelay into the I-cache
mov r0, #1
bl __loop_udelay
mov r0, r0
@ The following must all exist in a single cache line to
@ avoid accessing memory until this sequence is complete,
@ otherwise we occasionally hang.
@ Adjust memory timing before lowering CPU clock
str r4, [r6]
@ delay 90us and set CPU PLL to lowest speed
@ fixes resume problem on high speed SA1110
mov r0, #90
bl __loop_udelay
mov r1, #0
str r1, [r5]
mov r0, #90
bl __loop_udelay
/* * SA1110 SDRAM controller workaround. register values: * * r0 = &MSC0 * r1 = &MSC1 * r2 = &MSC2 * r3 = MSC0 value * r4 = MSC1 value * r5 = MSC2 value * r6 = &MDREFR * r7 = first MDREFR value * r8 = second MDREFR value * r9 = &MDCNFG * r10 = MDCNFG value * r11 = third MDREFR value * r12 = &PMCR * r13 = PMCR value (1)
*/
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.