📄 omap-sleep.s
字号:
#include <linux/linkage.h>
#include <asm/assembler.h>
.text
ENTRY(tps_deep_sleep)
// Clear EMIFS global power-down enable bit (PDE) in EMIFS_CONFIG register
ldr r0, REG_EMIFS_CONFIG
ldr r1, [r0]
ldr r2, MSK_EMIFS_CONFIG_PDE
and r1, r1, r2
str r1, [r0]
// Set IMIF power-down bit (PWD_EN) in EMIFS_CONFIG register
ldr r1, [r0]
orr r1, r1, #0x00000004
str r1, [r0]
// Set CLK, PWD and SLRF bits of SDRAM Controller
ldr r0, REG_EMIFF_SDRAM_CONFIG
ldr r1, [r0]
orr r1, r1, #0x0C000001
str r1, [r0]
// Set EMIFS global power-down enable bit (PDE) in EMIFS_CONFIG register
ldr r0, REG_EMIFS_CONFIG
ldr r1, [r0]
orr r1, r1, #0x08
str r1, [r0]
// Put DPLL in Bypass
ldr r0, REG_DPLL1_CTL
ldrh r1, [r0]
ldr r2, MSK_DPLL1_CTL
and r1, r1, r2
strh r1, [r0]
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
// Stop the GPIO (XOR), API, HSAB, LB, and LCD clocks if running
ldr r0, REG_ARM_IDLECT2
ldrh r1, [r0]
ldr r2, MSK_ARM_IDLECT2_STOP
and r1, r1, r2
strh r1, [r0]
// Idle all of the ARM-based clocks and Go to sleep
ldr r0, REG_ARM_IDLECT1
ldr r1, MSK_ARM_IDLECT1_SLEEP
strh r1, [r0]
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov pc, lr
REG_EMIFS_CONFIG:
.word 0xFFFECC0C
REG_EMIFF_SDRAM_CONFIG:
.word 0xFFFECC20
REG_ARM_IDLECT1:
.word 0xFFFECE04
REG_ARM_IDLECT2:
.word 0xFFFECE08
REG_DPLL1_CTL:
.word 0xFFFECF00
MSK_DPLL1_CTL:
.word 0xFFFFFFE3
MSK_EMIFS_CONFIG_PDE:
.word 0xFFFFFFF7
MSK_ARM_IDLECT2_STOP:
.word 0xFFFFF987
MSK_ARM_IDLECT1_SLEEP:
.word 0x00000EC7
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -