aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/olpc/files/arch/i386/kernel/olpc-sleep.S
diff options
context:
space:
mode:
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.S39
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
+
+ ;;
+
+
+