1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /*
- * sleep mode for CSR SiRFprimaII
- *
- * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company.
- *
- * Licensed under GPLv2 or later.
- */
- #include <linux/linkage.h>
- #include <asm/ptrace.h>
- #include <asm/assembler.h>
- #include "pm.h"
- #define DENALI_CTL_22_OFF 0x58
- #define DENALI_CTL_112_OFF 0x1c0
- .text
- ENTRY(sirfsoc_finish_suspend)
- @ r5: mem controller
- ldr r0, =sirfsoc_memc_base
- ldr r5, [r0]
- @ r6: pwrc base offset
- ldr r0, =sirfsoc_pwrc_base
- ldr r6, [r0]
- @ r7: rtc iobrg controller
- ldr r0, =sirfsoc_rtciobrg_base
- ldr r7, [r0]
- @ Read the power control register and set the
- @ sleep force bit.
- add r0, r6, #SIRFSOC_PWRC_PDN_CTRL
- bl __sirfsoc_rtc_iobrg_readl
- orr r0,r0,#SIRFSOC_PWR_SLEEPFORCE
- add r1, r6, #SIRFSOC_PWRC_PDN_CTRL
- bl sirfsoc_rtc_iobrg_pre_writel
- mov r1, #0x1
- @ read the MEM ctl register and set the self
- @ refresh bit
- ldr r2, [r5, #DENALI_CTL_22_OFF]
- orr r2, r2, #0x1
- @ Following code has to run from cache since
- @ the RAM is going to self refresh mode
- .align 5
- str r2, [r5, #DENALI_CTL_22_OFF]
- 1:
- ldr r4, [r5, #DENALI_CTL_112_OFF]
- tst r4, #0x1
- bne 1b
- @ write SLEEPFORCE through rtc iobridge
- str r1, [r7]
- @ wait rtc io bridge sync
- 1:
- ldr r3, [r7]
- tst r3, #0x01
- bne 1b
- b .
|