diff options
Diffstat (limited to 'target/linux/olpc/files/arch/i386/kernel/olpc-sleep.S')
-rw-r--r-- | target/linux/olpc/files/arch/i386/kernel/olpc-sleep.S | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/target/linux/olpc/files/arch/i386/kernel/olpc-sleep.S b/target/linux/olpc/files/arch/i386/kernel/olpc-sleep.S new file mode 100644 index 0000000000..9535c9a941 --- /dev/null +++ b/target/linux/olpc/files/arch/i386/kernel/olpc-sleep.S @@ -0,0 +1,39 @@ +.text + +ENTRY(olpc_sleep_asm) +olpc_sleep: + ;; Get the value of PM1_CNT and store it off + + add 08h, ax + mov bx,dx + in dx,eax + or 2000h, ax + mov ax,di + + ;; flush the cache + wbinvd + + ;; GX2 must disable refresh before going into self-refresh + mov 2000000180xh, ecx + rdmsr + mov eax, esi + and 0FF0000FFh, eax + wrmsr + + ;; Now, put the memory into self refresh + mov 2004, cx + xor edx, edx + xor eax, eax + mov 04h, al + wrmsr + + ;; Thats all she wrote - time to go to sleep + + mov bx, dx + movzx di, eax + out eax, dx + + ;; + + + |