Author: wmb Date: 2007-04-25 09:07:59 +0200 (Wed, 25 Apr 2007) New Revision: 320
Modified: cpu/x86/pc/olpc/draminit.fth cpu/x86/pc/olpc/resume.bth Log: OLPC suspend/resume - use PM register 0x30 as a breadcrumb register for resume, instead of looking at bit one of PM+0x54. This is needed because of LX errata 34, which sometimes requires an extra reset to init the memory DLL.
Modified: cpu/x86/pc/olpc/draminit.fth =================================================================== --- cpu/x86/pc/olpc/draminit.fth 2007-04-25 07:01:05 UTC (rev 319) +++ cpu/x86/pc/olpc/draminit.fth 2007-04-25 07:07:59 UTC (rev 320) @@ -51,8 +51,12 @@ 0000f001.00001400. 5140000f set-msr \ PMS BAR
\ It is tempting to test bit 0 of PM register 5c, but a 5536 erratum - \ prevents that bit from working. - 1454 port-rl 2 bitand 0<> if \ Wakeup event flag + \ prevents that bit from working. Bit 1 works, but LX errata 34 + \ sometimes requires that we reset the system to fix the memory DLL, + \ which destroys all the bits of PM register 5c. So we put a breadcrumb + \ in a PM register that we don't otherwise use. + 1430 port-rl h# 9999 # ax cmp = if \ Wakeup event flag + 0 1430 port-wl h# 1b # al mov al h# 80 # out char r 3f8 port-wb begin 3fd port-rb 40 bitand 0<> until resume-entry # sp mov sp jmp
Modified: cpu/x86/pc/olpc/resume.bth =================================================================== --- cpu/x86/pc/olpc/resume.bth 2007-04-25 07:01:05 UTC (rev 319) +++ cpu/x86/pc/olpc/resume.bth 2007-04-25 07:07:59 UTC (rev 320) @@ -258,6 +258,7 @@ \ This is pointless because register 14 is in the working power domain \ and does not retain the value across the suspend \ h# 4000.4601 h# 1414 port-wl \ Release SUSP# 5 mS after wakeup + h# 0000.9999 h# 1430 port-wl \ Breadcrumb indicating sleep h# 4000.0001 h# 1434 port-wl \ Turn on WORK_AUX (== MAIN_ON) at 32 uS h# 4000.0080 h# 1438 port-wl \ RESET_OUT# deassert at 4 mS h# 0002.ffff h# 1454 port-wl \ Clear wakeup type bits