[openfirmware] r1407 - cpu/x86/pc/olpc/via

svn at openfirmware.info svn at openfirmware.info
Fri Oct 9 02:07:12 CEST 2009


Author: wmb
Date: 2009-10-09 02:07:12 +0200 (Fri, 09 Oct 2009)
New Revision: 1407

Added:
   cpu/x86/pc/olpc/via/cstate.fth
Modified:
   cpu/x86/pc/olpc/via/fsupdate.fth
   cpu/x86/pc/olpc/via/fw.bth
   cpu/x86/pc/olpc/via/romreset.bth
Log:
Via - Added C-state testing words c{0-4}-test


Added: cpu/x86/pc/olpc/via/cstate.fth
===================================================================
--- cpu/x86/pc/olpc/via/cstate.fth	                        (rev 0)
+++ cpu/x86/pc/olpc/via/cstate.fth	2009-10-09 00:07:12 UTC (rev 1407)
@@ -0,0 +1,118 @@
+purpose: Test for processor C-states
+\ See license at end of file
+
+: cpu-temperature  ( -- degrees-C )  h# 1169 msr@ drop  ;
+: show-temperature  ( -- )  space cpu-temperature .d  ;
+
+variable start-time
+variable sleep-time
+: acpi-time@  ( -- t0 )  8 acpi-l@  ;
+
+: arb-dis  ( -- )  1 h# 22 pc!  ;
+: arb-ena  ( -- )  0 h# 22 pc!  ;
+: bm-rld-on   ( -- )  4 acpi-w@ 2 or 4 acpi-w!  ;
+: bm-rld-off  ( -- )  4 acpi-w@ 2 invert and 4 acpi-w!  ;
+
+\ Setting this makes C3 behave the same as C4
+\ So there are two ways to get into C4 -
+\   Either set this bit and read the LVL_3 register,
+\   or just read the LVL_4 register
+
+: lower-c3-voltage  ( -- )  h# 26 acpi-b@ 1 or h# 26 acpi-b!  ;
+
+: can-idle?  ( -- flag )
+   interrupts-enabled?  if  \ Interrupts must be enabled
+      h# 21 pc@ 1 and 0=    \ Timer must be running
+   else
+      false
+   then
+;
+
+defer do-idle  ' noop to do-idle
+
+: safe-idle  ( -- )  can-idle?  if  do-idle  then  ;
+' safe-idle to stdin-idle
+
+alias c1-idle halt
+
+: c2-idle  ( -- )  h# 14 acpi-b@ drop  ;
+: c3-idle  ( -- )  arb-dis  h# 15 acpi-b@ drop   arb-ena  ;
+: c4-idle  ( -- )  arb-dis  h# 16 acpi-b@ drop   arb-ena  ;
+code c5-idle  ( -- )  acpi-io-base h# 17 + # dx mov  wbinvd  dx al in  c;
+
+alias default-idle-state c2-idle
+' default-idle-state to do-idle
+
+: enter-idle  ( -- )
+   acpi-time@   ( t )
+   do-idle      ( t )
+   acpi-time@ swap -  sleep-time +!
+;
+: idle-ms  ( ms -- )
+   tick-msecs +     ( limit )
+   begin  enter-idle  dup tick-msecs -  0<= until  ( limit )
+   drop
+;
+: idling  ( xt -- )
+   to do-idle
+   cursor-off
+   sleep-time off
+   acpi-time@ start-time !
+   begin
+     green-letters (cr show-temperature  d# 1024 idle-ms
+     black-letters (cr show-temperature  d# 1024 idle-ms
+   key?  until
+   acpi-time@  start-time @ -
+   cursor-on
+   ." Slept " sleep-time @ .d ." of " .d ." ticks" cr
+   ['] default-idle-state to do-idle
+;
+: .idling  ( $ -- )
+   ." Idling in " type ."  state, showing core temperature" cr
+;
+: c0-test  ( -- )
+   " C0" .idling
+   ['] noop  idling
+;
+: c1-test  ( -- )
+   " C1" .idling
+   ['] c1-idle  idling
+;
+: c2-test  ( -- )
+   " C2" .idling
+   ['] c2-idle  idling
+;
+: c3-test  ( -- )
+   bm-rld-on
+   " C3" .idling
+   ['] c3-idle  idling
+;
+: c4-test  ( -- )
+   bm-rld-on
+   " C4" .idling
+   ['] c4-idle idling
+;
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2009 FirmWorks
+\ 
+\ Permission is hereby granted, free of charge, to any person obtaining
+\ a copy of this software and associated documentation files (the
+\ "Software"), to deal in the Software without restriction, including
+\ without limitation the rights to use, copy, modify, merge, publish,
+\ distribute, sublicense, and/or sell copies of the Software, and to
+\ permit persons to whom the Software is furnished to do so, subject to
+\ the following conditions:
+\ 
+\ The above copyright notice and this permission notice shall be
+\ included in all copies or substantial portions of the Software.
+\ 
+\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+\
+\ LICENSE_END

Modified: cpu/x86/pc/olpc/via/fsupdate.fth
===================================================================
--- cpu/x86/pc/olpc/via/fsupdate.fth	2009-10-08 23:06:25 UTC (rev 1406)
+++ cpu/x86/pc/olpc/via/fsupdate.fth	2009-10-09 00:07:12 UTC (rev 1407)
@@ -3,9 +3,6 @@
 
 \ Depends on words from security.fth and copynand.fth
 
-: cpu-temperature  ( -- degrees-C )  h# 1169 msr@ drop  ;
-: show-temperature  ( -- )  space cpu-temperature .d  ;
-
 : get-hex#  ( -- n )
    safe-parse-word
    push-hex $number pop-base  " Bad number" ?nand-abort

Modified: cpu/x86/pc/olpc/via/fw.bth
===================================================================
--- cpu/x86/pc/olpc/via/fw.bth	2009-10-08 23:06:25 UTC (rev 1406)
+++ cpu/x86/pc/olpc/via/fw.bth	2009-10-09 00:07:12 UTC (rev 1407)
@@ -300,6 +300,9 @@
 
 fload ${BP}/ofw/gui/loadmenu.fth
 fload ${BP}/ofw/gui/insticon.fth
+
+fload ${BP}/cpu/x86/pc/olpc/via/cstate.fth   \ C-state tests
+
 \ Uninstall the diag menu from the general user interface vector
 \ so exiting from emacs doesn't invoke the diag menu.
 ' quit to user-interface
@@ -514,9 +517,6 @@
 
 " dhcp" ' ip-address  set-config-string-default
 
-: c1-idle  ( -- )  interrupts-enabled?  if  halt  then  ;
-' c1-idle to stdin-idle
-
 : fast-boot?  ( -- flag )
 [ifdef] rom-loaded
    button-x game-key?  0=

Modified: cpu/x86/pc/olpc/via/romreset.bth
===================================================================
--- cpu/x86/pc/olpc/via/romreset.bth	2009-10-08 23:06:25 UTC (rev 1406)
+++ cpu/x86/pc/olpc/via/romreset.bth	2009-10-09 00:07:12 UTC (rev 1407)
@@ -119,6 +119,7 @@
    fload ${BP}/cpu/x86/pc/olpc/via/starthostctl.fth
 
    acpi-io-base 1 + 8888 config-ww   \ Set ACPI base address
+   acpi-io-base wbsplit 0292 config-wb  0293 config-wb  \ ACPI base address for C-states, big-endian
 
 [ifdef] debug-startup
    cominit #) call




More information about the openfirmware mailing list