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

svn at openfirmware.info svn at openfirmware.info
Wed Dec 9 16:04:23 CET 2009


Author: wmb
Date: 2009-12-09 16:04:23 +0100 (Wed, 09 Dec 2009)
New Revision: 1560

Added:
   cpu/x86/pc/olpc/via/initsmt.fth
Modified:
   cpu/x86/pc/olpc/via/smttags.fth
Log:
New version of smttags.fth


Added: cpu/x86/pc/olpc/via/initsmt.fth
===================================================================
--- cpu/x86/pc/olpc/via/initsmt.fth	                        (rev 0)
+++ cpu/x86/pc/olpc/via/initsmt.fth	2009-12-09 15:04:23 UTC (rev 1560)
@@ -0,0 +1,12 @@
+\ Inject some tag values to get the manufacturing process started
+: no-restart  ( -- )  no-kbc-reboot  kbc-on  d# 300 ms  ;
+patch no-restart io-spi-reprogrammed io-spi-start
+
+h# 202 msr@  swap h# ff invert and swap  h# 202 msr!  \ Uncache flash
+
+add-tag TS SMT
+add-tag MS cifs:\\bekins:bekind2 at 10.60.0.2\nb2_fvs
+add-tag BD u:\boot\olpc.fth cifs:\\bekins:bekind2 at 10.60.0.2\nb2_fvs\olpc.fth
+add-tag NT 10.60.0.2" evaluate
+
+.( Wrote TS, MS, BD, and NT) cr

Modified: cpu/x86/pc/olpc/via/smttags.fth
===================================================================
--- cpu/x86/pc/olpc/via/smttags.fth	2009-12-09 15:03:46 UTC (rev 1559)
+++ cpu/x86/pc/olpc/via/smttags.fth	2009-12-09 15:04:23 UTC (rev 1560)
@@ -1,15 +1,11 @@
 \ SMT test
 
-\ visible
+visible
 
-\ This is for testing, until we get the MS tag injected into the final image
-[ifdef] factory-server$
-: set-server  ( -- )
-   factory-server$  nip  0=  if
-      " cifs:\\bekins:bekind2 at 10.60.0.2\nb2_fvs" to factory-server$
-   then
+: mfg-ntp-server  ( -- name$ )
+   " NT" find-tag  if  ?-null  else  " 10.60.0.2"  then
 ;
-[then]
+' mfg-ntp-server to ntp-servers
 
 : .instructions  ( adr len -- )
    cr blue-letters  type  black-letters  cr
@@ -19,7 +15,7 @@
 ;
 
 d# 20 buffer: bn-buf  \ Buffer for scanned-in board number string
-: scanned-board#$  ( -- adr len )  bn-buf count  ;
+: board#$  ( -- adr len )  bn-buf count  ;
 
 : accept-to-buf  ( buf len -- actual )
    over 1+ swap accept  ( buf actual )
@@ -34,7 +30,7 @@
       " Please Input Board Number ......" .instructions
       bn-buf d# 20 accept-to-buf   ( n )
       d# 14 <>  if
-         " Wrong length, try again" .problem
+         " Wrong length (must be 14 characters), try again" .problem
       else
          bn-buf 1+ c@ [char] Q =  if  exit  then
          " Must begin with Q, try again" .problem
@@ -43,7 +39,7 @@
 ;
 
 d# 20 buffer: station#-buf
-: station#$  ( -- adr len )  station#-buf count  ;  \ e.g. 01
+: station#$  ( -- adr len )  station#-buf count  ;  \ e.g. J01
 
 : get-station#  ( -- )
    ." *****"
@@ -51,14 +47,11 @@
       " Please Input Station Number ......" .instructions
 
       station#-buf d# 20 accept-to-buf   ( n )
-      d# 2 <>  if
-         " Wrong length, try again" .problem
+      d# 3 <>  if
+         " Wrong length (must be like J01), try again" .problem
       else
-         station#$  push-decimal  $number  pop-base  if  ( )
-            " Must be a number, try again" .problem
-         else                                            ( n )
-            drop exit
-         then
+         station#-buf 1+ c@ [char] A [char] Z between  if  exit  then
+         " Must begin with A-Z, try again" .problem
       then
    again
 ;
@@ -70,13 +63,16 @@
 : get-opid  ( -- )
    ." *****"
    begin
-      " Please Operator ID ......" .instructions
+      " Please Input Operator ID ......" .instructions
       opid-buf d# 20 accept-to-buf   ( n )
-      d# 4 <>  if
-         " Wrong length, try again" .problem
+      d# 8 <>  if
+         " Wrong length (must be 8 digits), try again" .problem
       else
-         opid-buf 1+ c@ [char] A =  if  exit  then
-         " Must begin with A, try again" .problem
+         opid$  push-decimal  $number  pop-base  if  ( )
+            " Must be a number, try again" .problem
+         else                                            ( n )
+            drop exit
+         then
       then
    again
 ;
@@ -85,7 +81,7 @@
 d# 20 buffer: filename-buf
 : smt-filename$  ( -- )  filename-buf count  ;
 : set-filename  ( -- )
-   scanned-board#$ filename-buf place
+   board#$ filename-buf place
    " .txt" filename-buf $cat
 ;
 
@@ -97,21 +93,21 @@
 ;
 
 \ Upload the result data 
-: smt-result  ( pass? -- adr len )
+: smt-result  ( pass? -- )
    smt-filename$  open-temp-file
    if  " PASS"  else  " FAIL"  then  " RESULT="  put-key+value
    " PROCESS=FVT" put-key-line
    " STATION="    put-key-line
    " OPID="       put-key-line
    " GUID="       put-key-line
-   scanned-board#$ " MB_NUM=" put-key+value
+   board#$  " MB_NUM=" put-key+value
    " Result" submit-file
 ;
 
 \ Send the board number as the request and return the response data
 : smt-request$  ( -- adr len )
    smt-filename$ open-temp-file
-   scanned-board#$  " MB_NUM="  put-key+value
+   board#$          " MB_NUM="  put-key+value
    opid$            " OPID="    put-key+value
    station#$        " STATION=" put-key+value
    " Request" submit-file
@@ -125,19 +121,57 @@
    ($add-tag)                             ( )
 ;
 
+\ Remove possible trailing carriage return from the line
+: ?remove-cr  ( adr len -- adr len' )
+   dup  if                        ( adr len )
+      2dup + 1- c@ carret =  if   ( adr len )
+         1-
+      then
+   then
+;
+
+: put-tag  ( value$ key$ -- )
+   2swap  dup  if  add-null  then  2swap  ( value$' key$ )
+   ($add-tag)                             ( )
+;
+
+0 0 2value response$
+
+\ If the server sends us tags in the response file, we put
+\ them in the mfg data
+: write-new-tags  ( adr len -- )
+   begin  dup  while              ( adr len )
+      linefeed left-parse-string  ( rem$ line$ )
+      ?remove-cr                  ( rem$ line$ )
+      [char] = left-parse-string  ( rem$ value$ key$ )
+      dup 2 =  if                 ( rem$ value$ key$ )
+         put-tag                  ( rem$ )
+      else                        ( rem$ value$ key$ )
+         4drop                    ( rem$ )
+      then                        ( rem$ )
+   repeat                         ( adr len )
+   2drop                          ( )
+;
+
 \ Decode the server's response and insert appropriate mfg data tags
-: parse-smt-response  ( adr len -- error? )
-   drop  " Timeout" comp 0=  if  true exit  then
+: parse-smt-response  ( -- )
+   ." Server responded with:  "  cr  response$ list cr    ( )
 
+   response$ nip 0=  if  ." Null manufacturing data" cr  exit  then
+
+." Type q to skip tag write "  key dup emit  cr  [char] q =  if
+   2drop false exit
+then
+
    flash-write-enable
 
    clear-mfg-buf                          ( )
-\ XXX propagate tag values from response - code in Notes/mfgtags.fth
-   " "      " ww"  put-ascii-tag          ( )
-   " EN"    " SS"  put-ascii-tag          ( )
-   " ASSY"  " TS"  put-ascii-tag          ( )
-   " C1"    " SG"  put-ascii-tag          ( )
-   scanned-board#$  " B#"  put-ascii-tag  ( )
+   response$ write-new-tags               ( )
+\   " "      " ww"  put-ascii-tag         ( )
+\   " EN"    " SS"  put-ascii-tag         ( )
+\   " ASSY"  " TS"  put-ascii-tag         ( )
+\   " D3"    " SG"  put-ascii-tag         ( )
+\   board#$  " B#"  put-ascii-tag         ( )
    (put-mfg-data)                         ( )
 
    \ check-tags
@@ -148,114 +182,109 @@
    false
 ;
 
-\ Perform the exchange with the manufacturing server
-: smt-tag-exchange  ( -- error? )
-   smt-request$                    ( adr len )
-   2>r  2r@ parse-smt-response     ( error? r: adr len )
-   2r> free-mem                    ( error? )
-;
-
-d# 15 to #mfgtests
-
-: smt-tests  ( -- pass? )
-   5 #mfgtests +  5 do
-      i set-current-sq
-      refresh
-      d# 200 0 do
-         d# 10 ms  key? if  unloop unloop exit  then
-      loop
-      doit
-      pass? 0= if  unloop false exit  then
-   loop
-   all-tests-passed
-   true
-;
-
-0 value usb-ih
-: open-usb   ( -- )
-   " /usb:noprobe" open-dev to usb-ih
-   usb-ih 0= abort" Can't open USB!"  
-;
-: close-usb  ( -- )  usb-ih close-dev  0 to usb-ih  ;
 : silent-probe-usb  ( -- )
    " /" ['] (probe-usb2) scan-subtree
    " /" ['] (probe-usb1) scan-subtree
    report-disk report-net report-keyboard
 ;
-: usb-ports-changed?  ( -- flag )
-   open-usb
-   " ports-changed?" usb-ih $call-method  ( changed? )
-   close-usb
-;
 
-: ?reprobe-usb  ( -- )  usb-ports-changed?  if  silent-probe-usb  then  ;
-: reprobe-usb  ( -- )
-   begin  d# 100 ms  usb-ports-changed?  until
-   silent-probe-usb
-;
 : scanner?  ( -- flag )
    " usb-keyboard" expand-alias  if  2drop true  else  false  then
 ;   
 : wait-scanner  ( -- )
-   begin  scanner?  0= while  ( )
+   scanner?  0=  if
       " Connect USB barcode scanner"  .instructions
-      reprobe-usb
-   repeat
+      begin  d# 1000 ms  silent-probe-usb  scanner?  until
+   then
  ;
 : wired-lan?  ( -- flag )
    " /usb/ethernet" locate-device  if  false  else  drop true  then
 ;
 : wait-lan  ( -- )
-   begin  wired-lan?  0=  while
+   wired-lan?  0=  if
       " Connect USB Ethernet Adapter" .instructions
-      reprobe-usb
-   repeat
+      begin  d# 1000 ms  silent-probe-usb  wired-lan?  until
+   then
 ;
 : usb-key?  ( -- flag )
    " /usb/disk" locate-device  if  false  else  drop true  then
 ;
 : wait-usb-key  ( -- )
-   begin  usb-key?  0=  while
+   usb-key?  0=  if
       " Connect USB memory stick" .instructions
-      reprobe-usb
-   repeat
+      begin  d# 1000 ms  silent-probe-usb  usb-key?  until
+   then
 ;
 : wait-connections  ( -- )
-   ?reprobe-usb
+   silent-probe-usb
    wait-scanner
    wait-lan
    wait-usb-key
 ;             
 
-: do-smt-test  ( -- )
+0 value test-passed?
+: show-result-screen  ( -- )
+   restore-scroller
+   clear-screen
+   test-passed?  if
+      ." Selftest passed." cr cr cr
+      d# 2000 ms
+      green-screen
+   else
+      ." Selftest failed." cr cr cr
+      d# 2000 ms
+      red-screen
+   then
+;
+
+: finish-smt-test  ( pass? -- )
+   show-result-screen
+
+   cifs-connect
+   ." Uploading test result "  test-passed? smt-result  ." Done" cr
+   cifs-disconnect
+
+   test-passed?  if
+      ." Writing tags "  parse-smt-response  ." Done" cr
+   then
+
+   ." Powering off ..." d# 2000 ms
+   power-off
+;
+
+d# 15 to #mfgtests
+
+: smt-tests  ( -- )
+   5 #mfgtests +  5 do
+      i set-current-sq
+      refresh
+      d# 1000 ms
+      doit
+      pass? 0= if  false to test-passed?  finish-smt-test  unloop exit  then
+   loop
+   true to test-passed?  finish-smt-test
+;
+
+\ This modifies the menu to be non-interactive
+: doit-once  ( -- )  do-key  smt-tests  ;
+patch doit-once do-key menu-interact
+
+: start-smt-test  ( -- )
    wait-connections
 
    ." Setting clock "  ntp-set-clock  ." Done" cr
 
    get-info
+
    ." Connecting "  cifs-connect ." Done" cr
+   ." Getting tags from server "  smt-request$  to response$  ." Done" cr
+   cifs-disconnect
 
-   ." Writing mfg data tags "  smt-tag-exchange  ." Done" cr
-
-   ['] true is (diagnostic-mode?)
+   true to diag-switch?
    " patch smt-tests play-item mfgtest-menu" evaluate
    menu
-   ['] false is (diagnostic-mode?)
-
-   ." Uploading test result "  smt-result  ." Done" cr
-
-   cifs-disconnect
+   false to diag-switch?
 ;
 
-\ patch do-smt-test play-item mfgtest-menu
-
-true value once?
-: doit-once  ( -- )
-   do-key
-   once?  if
-      false to once?
-\      doit
-      smt-tests
-   then
-;
-patch doit-once do-key menu-interact
+\ Automatically run the sequence
+start-smt-test




More information about the openfirmware mailing list