[openfirmware] r1570 - cpu/x86/pc/olpc/via
svn at openfirmware.info
svn at openfirmware.info
Fri Dec 11 06:24:29 CET 2009
Author: wmb
Date: 2009-12-11 06:24:29 +0100 (Fri, 11 Dec 2009)
New Revision: 1570
Added:
cpu/x86/pc/olpc/via/runin.fth
Removed:
cpu/x86/pc/olpc/via/after_runin.fth
Log:
OLPC manufacturing tests - Renamed script from after_runin.fth to runin.fth .
Deleted: cpu/x86/pc/olpc/via/after_runin.fth
===================================================================
--- cpu/x86/pc/olpc/via/after_runin.fth 2009-12-11 05:22:40 UTC (rev 1569)
+++ cpu/x86/pc/olpc/via/after_runin.fth 2009-12-11 05:24:29 UTC (rev 1570)
@@ -1,343 +0,0 @@
-\ Post-runin boot script $Revision$
-
-visible
-
-\ 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]
-
-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
- exit
- then
- sn-buf 1+ " TSHC" comp if
- " Must begin with TSHC, try again" .problem
- exit
- then
- sn-buf 2+ sn-buf 1+ d# 11 move \ Elide the T
- d# 11 sn-buf c!
-;
-
-: get-sn ( -- )
- ." *****"
-
- begin
- " Please Input Serial Number ......" .instructions
- try-get-sn
- sn-acquired? until
-;
-
-: board#$ ( -- adr len )
- " B#" find-tag 0= abort" Missing B# tag !!!"
- -null
-;
-
-: get-info ( -- )
- get-sn
-;
-
-0 0 2value response$
-
-\ Send the board number as the request and return the response data
-: final-tag-exchange ( -- )
- board#$ " %s.txt" open-temp-file
- sn$ " SN:" put-key+value
- " Request" submit-file
- " Response" get-response to response$
-;
-
-0 value test-passed?
-: show-result-screen ( -- )
- restore-scroller
- clear-screen
- test-passed? if
- ." Selftest passed." cr cr cr
- green-screen
- else
- ." Selftest failed." cr cr cr
- red-screen
- then
- d# 2000 ms
-;
-
-: 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 ( -- )
- get-mfg-data
-
- " TS" ($delete-tag)
- " MS" ($delete-tag)
- " BD" ($delete-tag)
-
- " SHIP" " TS" ($add-tag)
-
- response$ parse-tags
-
- put-mfg-data
-;
-
-: mfg-ntp-server ( -- name$ )
- " NT" find-tag if ?-null else " 10.60.0.2" then
-;
-' mfg-ntp-server to ntp-servers
-
-d# 4 constant rtc-threshold
-: verify-rtc-date ( -- )
- ." Getting time from NTP server "
- begin ntp-timestamp while ." Retry " repeat ( d.timestamp )
- cr
- ntp>time&date unix-seconds> ( ntp-seconds )
- today unix-seconds> ( ntp-seconds rtc-seconds )
- - ( difference )
- dup rtc-threshold > if ( difference )
- page show-fail
- ." Clock lost " .d ." seconds since SMT" cr
- begin halt again
- else
- abs rtc-threshold > if
- page show-fail
- ." Clock gained " .d ." seconds since SMT" cr
- begin halt again
- then
- then
-;
-
-: finish-final-test ( -- )
- show-result-screen
-
- test-passed? 0= if
- ." Type a key to power off "
- key drop cr power-off
- then
-
- wait-lan
- wait-scanner
-
- get-info
-
- verify-rtc-date
-
- cifs-connect
- ." Connecting to server " final-tag-exchange ." Done" cr
- cifs-disconnect
-
- inject-tags
-
- ." Powering off ..." d# 2000 ms
- power-off
-;
-
-
-d# 15 to #mfgtests
-
-: final-tests ( -- )
- 5 #mfgtests + 5 do
- i set-current-sq
- refresh
- d# 1000 ms
- doit
- pass? 0= if false to test-passed? finish-final-test unloop exit then
- loop
- true to test-passed? finish-final-test
-;
-
-\ Make the "wait for SD insertion" step highly visible
-dev ext
-warning @ warning off
-: selftest ( -- ) page show-pass selftest ;
-warning !
-dend
-
-\ This modifies the menu to be non-interactive
-: doit-once ( -- ) do-key final-tests ;
-patch doit-once do-key menu-interact
-
-: silent-probe-usb ( -- )
- " /" ['] (probe-usb2) scan-subtree
- " /" ['] (probe-usb1) scan-subtree
- report-disk report-net report-keyboard
-;
-
-: scanner? ( -- flag )
- " usb-keyboard" expand-alias if 2drop true else false then
-;
-: wait-scanner ( -- )
- scanner? 0= if
- " Connect USB barcode scanner" .instructions
- 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 ( -- )
- wired-lan? 0= if
- " Connect USB Ethernet Adapter" .instructions
- 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 ( -- )
- usb-key? 0= if
- " Connect USB memory stick" .instructions
- begin d# 1000 ms silent-probe-usb usb-key? until
- then
-;
-: wait-connections ( -- )
- silent-probe-usb
- wait-scanner
- wait-lan
-\ wait-usb-key
-;
-
-: 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
-
- 5 to test-station
- true to diag-switch?
- " patch final-tests play-item mfgtest-menu" evaluate
- menu
- \ Shouldn't get here because the menu never exits
- then
-
- ." Type a key to power off"
- key cr
- power-off
-;
-
-after-runin
-
-SN:SHC946009D3
-B#:QTFJCA94400297
-P#:1CL11ZU0KDU
-M#:CL1
-LA:USA
-CC:2222XXXXXX
-F#:F6
-L#:J
-S#:CL1XL00802000
-T#:TSIMG_V3.0.6
-WM:00-17-C4-B9-39-ED
-MN:XO-1
-BV:Q2E34
-U#:A4112195-98FE-419A-A77B-9F33C08FF913
-SD:241109
-IM_IP:10.1.0.2
-IM_ROOT:CL1XL00802000
-IM_NAME:CL1XL00802000
-WP:0
-Countries:Alabama
-LO:en_US.UTF-8
-KA:USInternational_Keyboard
-KM:olpc
-KL:us
-KV:olpc
-ak:0
-sk:20
-SG:79
-DT:20091124152811
-
-SET WO=304027439
-
-Use these info to check the tags inside the SPI flash.
-
-Write the following tags from response file:
-
-WP:
-SG:
-
-Get date time from NTP server 10.1.0.1 and write MD tag
- MD: 20081014T200700Z
-
-Set TS tag to SHIP
-
-Send the following information to shop flow
-
-SN:
-M#:
-U#:
-P#:
-B#:
-LA:
-CC:
-F#:
-L#:
-S#:
-T#:
-BV:
-TS:
-SS:
-FQ:
-SD:
-WM:
-MN:
-KL:
-KV:
-KM:
-LO:
-WP:
-RESULT:PASS
-
-
-
Copied: cpu/x86/pc/olpc/via/runin.fth (from rev 1569, cpu/x86/pc/olpc/via/after_runin.fth)
===================================================================
--- cpu/x86/pc/olpc/via/runin.fth (rev 0)
+++ cpu/x86/pc/olpc/via/runin.fth 2009-12-11 05:24:29 UTC (rev 1570)
@@ -0,0 +1,343 @@
+\ Post-runin boot script $Revision$
+
+visible
+
+\ 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]
+
+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
+ exit
+ then
+ sn-buf 1+ " TSHC" comp if
+ " Must begin with TSHC, try again" .problem
+ exit
+ then
+ sn-buf 2+ sn-buf 1+ d# 11 move \ Elide the T
+ d# 11 sn-buf c!
+;
+
+: get-sn ( -- )
+ ." *****"
+
+ begin
+ " Please Input Serial Number ......" .instructions
+ try-get-sn
+ sn-acquired? until
+;
+
+: board#$ ( -- adr len )
+ " B#" find-tag 0= abort" Missing B# tag !!!"
+ -null
+;
+
+: get-info ( -- )
+ get-sn
+;
+
+0 0 2value response$
+
+\ Send the board number as the request and return the response data
+: final-tag-exchange ( -- )
+ board#$ " %s.txt" open-temp-file
+ sn$ " SN:" put-key+value
+ " Request" submit-file
+ " Response" get-response to response$
+;
+
+0 value test-passed?
+: show-result-screen ( -- )
+ restore-scroller
+ clear-screen
+ test-passed? if
+ ." Selftest passed." cr cr cr
+ green-screen
+ else
+ ." Selftest failed." cr cr cr
+ red-screen
+ then
+ d# 2000 ms
+;
+
+: 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 ( -- )
+ get-mfg-data
+
+ " TS" ($delete-tag)
+ " MS" ($delete-tag)
+ " BD" ($delete-tag)
+
+ " SHIP" " TS" ($add-tag)
+
+ response$ parse-tags
+
+ put-mfg-data
+;
+
+: mfg-ntp-server ( -- name$ )
+ " NT" find-tag if ?-null else " 10.60.0.2" then
+;
+' mfg-ntp-server to ntp-servers
+
+d# 4 constant rtc-threshold
+: verify-rtc-date ( -- )
+ ." Getting time from NTP server "
+ begin ntp-timestamp while ." Retry " repeat ( d.timestamp )
+ cr
+ ntp>time&date unix-seconds> ( ntp-seconds )
+ today unix-seconds> ( ntp-seconds rtc-seconds )
+ - ( difference )
+ dup rtc-threshold > if ( difference )
+ page show-fail
+ ." Clock lost " .d ." seconds since SMT" cr
+ begin halt again
+ else
+ abs rtc-threshold > if
+ page show-fail
+ ." Clock gained " .d ." seconds since SMT" cr
+ begin halt again
+ then
+ then
+;
+
+: finish-final-test ( -- )
+ show-result-screen
+
+ test-passed? 0= if
+ ." Type a key to power off "
+ key drop cr power-off
+ then
+
+ wait-lan
+ wait-scanner
+
+ get-info
+
+ verify-rtc-date
+
+ cifs-connect
+ ." Connecting to server " final-tag-exchange ." Done" cr
+ cifs-disconnect
+
+ inject-tags
+
+ ." Powering off ..." d# 2000 ms
+ power-off
+;
+
+
+d# 15 to #mfgtests
+
+: final-tests ( -- )
+ 5 #mfgtests + 5 do
+ i set-current-sq
+ refresh
+ d# 1000 ms
+ doit
+ pass? 0= if false to test-passed? finish-final-test unloop exit then
+ loop
+ true to test-passed? finish-final-test
+;
+
+\ Make the "wait for SD insertion" step highly visible
+dev ext
+warning @ warning off
+: selftest ( -- ) page show-pass selftest ;
+warning !
+dend
+
+\ This modifies the menu to be non-interactive
+: doit-once ( -- ) do-key final-tests ;
+patch doit-once do-key menu-interact
+
+: silent-probe-usb ( -- )
+ " /" ['] (probe-usb2) scan-subtree
+ " /" ['] (probe-usb1) scan-subtree
+ report-disk report-net report-keyboard
+;
+
+: scanner? ( -- flag )
+ " usb-keyboard" expand-alias if 2drop true else false then
+;
+: wait-scanner ( -- )
+ scanner? 0= if
+ " Connect USB barcode scanner" .instructions
+ 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 ( -- )
+ wired-lan? 0= if
+ " Connect USB Ethernet Adapter" .instructions
+ 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 ( -- )
+ usb-key? 0= if
+ " Connect USB memory stick" .instructions
+ begin d# 1000 ms silent-probe-usb usb-key? until
+ then
+;
+: wait-connections ( -- )
+ silent-probe-usb
+ wait-scanner
+ wait-lan
+\ wait-usb-key
+;
+
+: 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
+
+ 5 to test-station
+ true to diag-switch?
+ " patch final-tests play-item mfgtest-menu" evaluate
+ menu
+ \ Shouldn't get here because the menu never exits
+ then
+
+ ." Type a key to power off"
+ key cr
+ power-off
+;
+
+after-runin
+
+SN:SHC946009D3
+B#:QTFJCA94400297
+P#:1CL11ZU0KDU
+M#:CL1
+LA:USA
+CC:2222XXXXXX
+F#:F6
+L#:J
+S#:CL1XL00802000
+T#:TSIMG_V3.0.6
+WM:00-17-C4-B9-39-ED
+MN:XO-1
+BV:Q2E34
+U#:A4112195-98FE-419A-A77B-9F33C08FF913
+SD:241109
+IM_IP:10.1.0.2
+IM_ROOT:CL1XL00802000
+IM_NAME:CL1XL00802000
+WP:0
+Countries:Alabama
+LO:en_US.UTF-8
+KA:USInternational_Keyboard
+KM:olpc
+KL:us
+KV:olpc
+ak:0
+sk:20
+SG:79
+DT:20091124152811
+
+SET WO=304027439
+
+Use these info to check the tags inside the SPI flash.
+
+Write the following tags from response file:
+
+WP:
+SG:
+
+Get date time from NTP server 10.1.0.1 and write MD tag
+ MD: 20081014T200700Z
+
+Set TS tag to SHIP
+
+Send the following information to shop flow
+
+SN:
+M#:
+U#:
+P#:
+B#:
+LA:
+CC:
+F#:
+L#:
+S#:
+T#:
+BV:
+TS:
+SS:
+FQ:
+SD:
+WM:
+MN:
+KL:
+KV:
+KM:
+LO:
+WP:
+RESULT:PASS
+
+
+
More information about the openfirmware
mailing list