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

svn at openfirmware.info svn at openfirmware.info
Thu Dec 10 07:06:18 CET 2009


Author: wmb
Date: 2009-12-10 07:06:18 +0100 (Thu, 10 Dec 2009)
New Revision: 1565

Added:
   cpu/x86/pc/olpc/via/after_runin.fth
Log:
Initial checkin of after_runin.fth


Added: cpu/x86/pc/olpc/via/after_runin.fth
===================================================================
--- cpu/x86/pc/olpc/via/after_runin.fth	                        (rev 0)
+++ cpu/x86/pc/olpc/via/after_runin.fth	2009-12-10 06:06:18 UTC (rev 1565)
@@ -0,0 +1,84 @@
+\ Post-runin boot script $Revision$
+
+\ The Linux-based runin selftests put this file at int:\runin\olpc.fth
+\ after they have finished.  On the next reboot, OFW thus boots this
+\ script instead of int:\boot\olpc.fth .  This script either displays
+\ the failure log (if int:\runin\fail.log is present) or modifies the
+\ manufacturing data tags to cause the next boot to enter final test.
+
+[ifndef] $read-file
+\ Read entire file into allocated memory
+: $read-file  ( filename$ -- true | data$ false )
+   open-dev  ?dup  0=  if  true exit  then  >r  ( r: ih )
+   " size" r@ $call-method  drop   ( len r: ih )
+   dup alloc-mem  swap             ( adr len r: ih )
+   2dup " read" r@ $call-method    ( adr len actual r: ih )
+   r> close-dev                    ( adr len actual )
+   over <>  if                     ( adr len )
+      free-mem  true exit
+   then                            ( adr len )
+   false
+;
+[then]
+
+[ifndef] $(delete-tag)
+: ($delete-tag)  ( adr len -- )
+   2dup  ram-find-tag  0=  if  2drop exit  then  ( tagname$ ram-value$ )
+   2nip                         ( ram-value$ )
+
+   2dup + c@ h# 80 and          ( ram-value$ tag-style )
+   if  4  else  5  then  +  >r  ( tag-adr tag-len )
+   ram-last-mfg-data  >r        ( tag-adr r: len bot-adr ) 
+   r@  2r@ +                    ( tag-adr src-adr dst-adr r: len bot-adr )    
+   rot r@ -                     ( src-adr dst-adr copy-len r: len bot-adr ) 
+   move                         ( r: len bot-adr )
+   r> r> h# ff fill             ( )
+;
+[then]
+
+h# 128 buffer: ms-value
+h# 128 buffer: bd-value
+
+: set-tags-for-fqa  ( -- )
+   " NM" find-tag  if  ms-value place  then
+   " NB" find-tag  if  bd-value place  then
+
+   get-mfg-data
+
+   " TS" ($delete-tag)
+   " MS" ($delete-tag)
+   " BD" ($delete-tag)
+   " NM" ($delete-tag)
+   " NB" ($delete-tag)
+
+   ms-value count " MS" ($add-tag)
+   bd-value count " BD" ($add-tag)
+   " FINAL"       " TS" ($add-tag)
+
+   put-mfg-data
+;
+
+: fail-log-file$  ( -- name$ )  " int:\runin\fail.log"   ;
+
+: after-runin  ( -- )
+   fail-log-file$ $read-file  0=  if  ( adr len )
+      page
+      show-fail
+      ." Type a key to see the failure log"
+      key drop  cr cr
+      list
+   else
+      set-tags-for-fqa
+      " int:\runin\olpc.fth" $delete-all
+
+      page
+      show-pass
+      ." System is ready for final test" cr
+   then
+
+   ." Type a key to power off"
+   key cr
+   power-off
+;
+
+after-runin




More information about the openfirmware mailing list