aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/olpc/files/arch/i386/kernel/olpc-sleep.S
diff options
context:
space:
mode:
authorJohn Crispin <john@openwrt.org>2007-12-30 17:38:08 +0000
committerJohn Crispin <john@openwrt.org>2007-12-30 17:38:08 +0000
commit42fc624cba0b06ab76cc3c467010ece84ff26ada (patch)
tree99ef0b8b5ee5085d87851201e1f5c2d202a30ad1 /target/linux/olpc/files/arch/i386/kernel/olpc-sleep.S
parent6588e58b880ab04c9fd186b8509e761ca3627887 (diff)
downloadupstream-42fc624cba0b06ab76cc3c467010ece84ff26ada.tar.gz
upstream-42fc624cba0b06ab76cc3c467010ece84ff26ada.tar.bz2
upstream-42fc624cba0b06ab76cc3c467010ece84ff26ada.zip
cleaning up olpc patch 1
SVN-Revision: 10060
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
+
+ ;;
+
+
+