[openfirmware] r1566 - cpu/x86/pc/olpc/via
svn at openfirmware.info
svn at openfirmware.info
Thu Dec 10 23:57:37 CET 2009
Author: wmb
Date: 2009-12-10 23:57:37 +0100 (Thu, 10 Dec 2009)
New Revision: 1566
Added:
cpu/x86/pc/olpc/via/assy.fth
Log:
Initial revision of ASSY phase manufacturing test script.
Added: cpu/x86/pc/olpc/via/assy.fth
===================================================================
--- cpu/x86/pc/olpc/via/assy.fth (rev 0)
+++ cpu/x86/pc/olpc/via/assy.fth 2009-12-10 22:57:37 UTC (rev 1566)
@@ -0,0 +1,261 @@
+\ Manufacturing test boot script for ASSY state
+
+: swid$ ( -- adr len ) " OFW ASSY test $Revision$" ;
+
+\ Location of the files containing KA tag data
+: ka-dir$ ( -- adr len ) " http:\\10.1.0.1\ka\" ;
+
+\ 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
+;
+
+[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]
+
+: put-ka-tag ( value$ key$ -- )
+ 2over 8 min ka-dir$ " %s%s" sprintf ( value$ key$ filename$ )
+ $read-file if ( value$ key$ )
+ ." ERROR: No KA tag file for " 2swap type cr ( key$ )
+ 2drop ( )
+ else ( value$ key$ file-data$ )
+ 2swap ($add-tag) ( value$ )
+ 2drop ( )
+ then
+;
+
+: put-tag ( value$ key$ -- )
+ 2dup " KA" $= if ( value$ key$ )
+ put-ka-tag exit
+ then ( value$ key$ )
+ 2swap dup if add-null then 2swap ( value$' key$ )
+ ($add-tag) ( )
+;
+
+: .instructions ( adr len -- )
+ cr blue-letters type black-letters cr
+;
+: .problem ( adr len -- )
+ red-letters type black-letters cr
+;
+
+: check-smt-status ( -- )
+ " SS" find-tag 0= abort" Board failed SMT !!!" ( adr len )
+ -null ( adr len' )
+ " EN" $= 0= abort" Board failed SMT !!!" ( )
+;
+
+: fwver$ ( -- adr len ) h# ffff.ffc6 6 ;
+: board#$ ( -- adr len )
+ " B#" find-tag 0= abort" Missing B# tag !!!"
+ -null
+;
+
+d# 20 buffer: sn-buf
+: sn$ ( -- adr len ) sn-buf count ;
+
+: try-get-sn ( -- )
+ sn-buf 1+ d# 20 accept ( n )
+ d# 12 <> if
+ " Wrong length, try again" .problem
+ false exit
+ then
+ sn-buf 1+ " TSHC" comp if
+ " Must begin with TSHC, try again" .problem
+ false exit
+ then
+ sn-buf 2+ sn-buf 1+ d# 11 move \ Elide the T
+ d# 11 sn-buf c!
+ true
+;
+
+: get-sn ( -- )
+ ." *****"
+
+ begin
+ " Please Input Serial Number ......" .instructions
+ try-get-sn
+ until
+;
+
+d# 38 buffer: uuid-buf
+: uuid$ ( -- ) uuid-buf count ;
+
+: uuid-bytes ( n -- )
+ push-hex
+ 0 ?do
+ random-byte (.2) 2dup upper uuid-buf $cat
+ loop
+ pop-base
+;
+
+: make-uuid ( -- )
+ 0 uuid-buf c!
+ 4 uuid-bytes " -" uuid-buf $cat
+ 2 uuid-bytes " -" uuid-buf $cat
+ 2 uuid-bytes " -" uuid-buf $cat
+ 2 uuid-bytes " -" uuid-buf $cat
+ 6 uuid-bytes
+;
+
+d# 20 buffer: mac-buf
+: mac$ ( -- ) mac-buf count ;
+
+: format-mac-address ( adr len -- )
+ 0 mac-buf c!
+ push-hex
+ drop
+ 5 0 do ( adr )
+ dup c@ (.2) mac-buf $cat ( adr )
+ " -" mac-buf $cat ( adr )
+ 1+ ( adr )
+ loop ( adr )
+ c@ (.2) mac-buf $cat ( )
+ mac$ upper ( )
+ pop-base
+;
+
+: get-mac ( -- )
+ " /wlan:force" open-dev ?dup if ( wlan-ih )
+ >r
+ " local-mac-address" r@ ihandle>phandle get-package-property if
+ " XX-XX-XX-XX-XX-XX" mac-buf place
+ else ( adr len )
+ format-mac-address ( )
+ then
+ r> close-dev
+ else
+ " XX-XX-XX-XX-XX-XX" mac-buf place
+ then
+;
+
+: swdl-date$ ( -- adr len )
+ push-decimal
+ today swap rot <# u# u# drop u# u# drop u# u# u# u# u#>
+ pop-base
+;
+: get-info ( -- )
+ check-smt-status
+ get-mac
+ make-uuid
+ get-sn
+;
+
+0 0 2value response$
+
+: clear-mfg-buf ( -- )
+ mfg-data-buf /flash-block h# ff fill
+;
+
+: execute-downloads ( adr len -- )
+ begin dup while ( adr len )
+ linefeed left-parse-string ( rem$ line$ )
+ ?remove-cr ( rem$ line$ )
+ [char] : left-parse-string ( rem$ value$ key$ )
+ " Command" $= if ( rem$ value$ )
+ evaluate ( rem$ )
+ then ( rem$ value$ )
+ 2drop ( rem$ )
+ repeat ( rem$ )
+ 2drop ( )
+;
+
+: parse-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 ( )
+;
+
+: inject-tags ( -- )
+ flash-write-enable
+ clear-mfg-buf
+
+ " " " ww" put-tag
+ sn$ " SN" put-tag
+ fwver$ " BV" put-tag
+ swid$ " T#" put-tag
+ uuid$ " U#" put-tag
+ mac$ " WM" put-tag
+ swdl-date$ " SD" put-tag
+
+\ " EN" " SS" put-tag
+\ " NA" " FQ" put-tag
+
+ response$ parse-tags
+ (put-mfg-data)
+ flash-write-disable
+;
+
+: make-assy-request ( -- )
+ sn$ " %s.txt" sprintf open-temp-file
+ mac$ " WM:" put-key+value
+ uuid$ " U#:" put-key+value
+ swid$ " T#:" put-key+value
+ fwver$ " BV:" put-key+value
+ board#$ " B#:" put-key+value
+ sn$ " SN:" put-key+value
+;
+
+: assy-tag-exchange ( -- )
+ make-assy-request ( )
+ " Request" submit-file ( )
+ " Response" get-response to response$
+;
+
+: silent-probe-usb ( -- )
+ " /" ['] (probe-usb2) scan-subtree
+ " /" ['] (probe-usb1) scan-subtree
+ report-disk report-net report-keyboard
+;
+
+: wired-lan? ( -- flag )
+ " /usb/ethernet" locate-device if false else drop true then
+;
+: wait-lan ( -- )
+ wired-lan? 0= if
+ " Connect USB Ethernet Adapter" .instructions
+ begin d# 1000 ms silent-probe-usb wired-lan? until
+ then
+;
+
+: start-assy-test ( -- )
+ wait-lan
+
+ get-info
+
+ ." Getting server response "
+ cifs-connect assy-tag-exchange cifs-disconnect
+ ." Done" cr
+
+ execute-downloads
+ inject-tags
+
+ ." Powering off ..." d# 2000 ms
+ power-off
+;
+
+start-assy-test
More information about the openfirmware
mailing list