[openfirmware] [commit] r2443 - cpu/x86/pc/alex
repository service
svn at openfirmware.info
Tue Aug 9 20:24:28 CEST 2011
Author: lwalter
Date: Tue Aug 9 20:24:25 2011
New Revision: 2443
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2443
Log:
Add mfgtest support
Added:
cpu/x86/pc/alex/mfgtest.fth
Added: cpu/x86/pc/alex/mfgtest.fth
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ cpu/x86/pc/alex/mfgtest.fth Tue Aug 9 20:24:25 2011 (r2443)
@@ -0,0 +1,309 @@
+\ See license at end of file
+purpose: Menu for manufacturing tests
+
+h# f800 constant mfg-color-red
+h# 07e0 constant mfg-color-green
+
+: blank-screen ( -- )
+ h# ffff ( color )
+ 0 0 ( color x y )
+ screen-wh ( color x y w y )
+ fill-rectangle-noff ( )
+;
+
+: clear-n-restore-scroller ( -- )
+ blank-screen
+ restore-scroller
+;
+
+: flush-keyboard ( -- ) begin key? while key drop repeat ;
+
+: sq-border! ( bg -- ) current-sq sq >border ! ;
+
+warning off
+\ Intentional redefinitions. It would be better to change the name, but
+\ Quanta could be using these words directly in manufacturing test scripts.
+: red-screen ( -- ) h# ffff mfg-color-red " replace-color" $call-screen ;
+: green-screen ( -- ) h# ffff mfg-color-green " replace-color" $call-screen ;
+warning on
+
+0 value pass?
+
+: mfg-wait-return ( -- )
+ ." ... Press any key to proceed ... "
+ cursor-off
+ gui-alerts
+ begin
+ key? if key drop refresh exit then
+ mouse-ih if
+ 10 get-event if
+ \ Ignore movement, act only on a button down event
+ nip nip if wait-buttons-up refresh exit then
+ then
+ then
+ again
+;
+
+: dummy-test-dev ( $ -- )
+ clear-n-restore-scroller
+ ??cr ." Testing " type ." in the future" cr
+ mfg-color-green sq-border!
+ d# 2000 hold-message
+ cursor-off gui-alerts refresh
+ flush-keyboard
+;
+
+: mfg-test-dev ( $ -- )
+ clear-n-restore-scroller
+ ??cr ." Testing " 2dup type cr
+ locate-device if
+ ." Can't find device node" cr
+ flush-keyboard
+ mfg-wait-return
+ exit
+ then ( phandle )
+ " selftest" rot execute-phandle-method ( return abort? )
+ if
+ ?dup if
+ ??cr ." Selftest failed. Return code = " .d cr
+ mfg-color-red sq-border!
+ false to pass?
+ red-screen
+ flush-keyboard
+ mfg-wait-return
+ else
+ green-letters
+ ??cr ." Okay" cr
+ black-letters
+ mfg-color-green sq-border!
+ true to pass?
+ d# 2000 hold-message
+ then
+ else
+ ??cr ." Selftest failed due to abort" cr
+ mfg-color-red sq-border!
+ false to pass?
+ red-screen
+ flush-keyboard
+ mfg-wait-return
+ then
+ cursor-off gui-alerts refresh
+ flush-keyboard
+;
+
+: draw-error-border ( -- )
+ mfg-color-red d# 20 d# 20 d# 1160 d# 820 d# 20 box
+;
+
+icon: play.icon rom:play.565
+icon: quit.icon rom:quit.565
+icon: cpu.icon rom:cpu.565
+icon: spi.icon rom:spi.565
+icon: ram.icon rom:ram.565
+icon: sdcard.icon rom:sdcard.565
+icon: usb.icon rom:usb.565
+icon: battery.icon rom:battery.565
+icon: camera.icon rom:camera.565
+icon: wifi.icon rom:wifi.565
+icon: audio.icon rom:audio.565
+icon: touchpad.icon rom:touchpad.565
+icon: display.icon rom:display.565
+icon: keyboard.icon rom:keyboard.565
+icon: timer.icon rom:timer.565
+icon: clock.icon rom:clock.565
+icon: ebook.icon rom:ebook.565
+icon: leds.icon rom:leds.565
+
+: all-tests-passed ( -- )
+ clear-n-restore-scroller
+\ clear-screen
+ ." All automatic tests passed successfully." cr cr cr
+ green-screen
+ wait-return
+ cursor-off gui-alerts refresh
+ flush-keyboard
+;
+
+0 value #mfgtests
+6 value #mfgcols
+: #mfgtests++ ( -- ) #mfgtests 1+ to #mfgtests ;
+: #mfgrows ( -- rows ) #mfgtests #mfgcols /mod swap if 1+ then 1+ ;
+
+0 value cur-col
+0 value cur-row
+: cur-col++ ( -- ) cur-col 1+ to cur-col ;
+: cur-row++ ( -- ) cur-row 1+ to cur-row ;
+: set-col-row ( row col -- ) to cur-col to cur-row ;
+: add-icon ( -- )
+ cur-col #mfgcols = if
+ cur-row++ cur-row #mfgcols >= if abort" Too many icons" then
+ 0 to cur-col
+ then
+ cur-row cur-col install-icon
+ cur-col++
+;
+
+: mfg-test-autorunner ( -- ) \ Unattended autorun of all tests
+ #mfgcols #mfgtests + #mfgcols ?do
+ i set-current-sq
+ refresh
+ d# 1000 ms
+ run-menu-item
+ pass? 0= ?leave
+ loop
+;
+
+: play-item ( -- ) \ Interactive autorun of all tests
+ #mfgcols #mfgtests + #mfgcols ?do
+ i set-current-sq
+ refresh
+ d# 200 0 do
+ d# 10 ms key? if unloop unloop exit then
+ loop
+ run-menu-item
+ pass? 0= if unloop exit then
+ loop
+ all-tests-passed
+;
+: quit-item ( -- ) menu-done ;
+: cpu-item ( -- ) " /cpu" mfg-test-dev ;
+: battery-item ( -- ) " /battery" dummy-test-dev ;
+: spiflash-item ( -- ) " /flash" dummy-test-dev ;
+: memory-item ( -- ) " /memory" mfg-test-dev ;
+: usb-item ( -- ) " /usb" mfg-test-dev ;
+: int-sd-item ( -- ) " disk:0" dummy-test-dev ;
+: ext-sd-item ( -- ) " ext:0" mfg-test-dev ;
+: rtc-item ( -- ) " /rtc" mfg-test-dev ;
+: display-item ( -- ) " screen" mfg-test-dev ;
+: audio-item ( -- ) " /audio" dummy-test-dev ;
+: camera-item ( -- ) " /camera" mfg-test-dev ;
+: wlan-item ( -- ) " /wlan" dummy-test-dev ;
+: timer-item ( -- ) " /timer" mfg-test-dev ;
+: touchpad-item ( -- ) " /8042/mouse" mfg-test-dev ;
+: keyboard-item ( -- ) " /8042/keyboard" mfg-test-dev ;
+: switch-item ( -- ) " /switches" mfg-test-dev ;
+: leds-item ( -- ) " /leds" mfg-test-dev ;
+
+: olpc-menu-items ( -- )
+ clear-menu
+
+ 1 0 set-col-row
+ " CPU"
+ ['] cpu-item cpu.icon add-icon [ #mfgtests++ ]
+
+ " SPI Flash: Contains EC code, firmware, manufacturing data."
+ ['] spiflash-item spi.icon add-icon [ #mfgtests++ ]
+
+ " RAM chips"
+ ['] memory-item ram.icon add-icon [ #mfgtests++ ]
+
+ " Internal mass storage"
+ ['] int-sd-item sdcard.icon add-icon [ #mfgtests++ ]
+
+\ " Plug-in SD card"
+\ ['] ext-sd-item sdcard.icon add-icon [ #mfgtests++ ]
+
+ " Timer"
+ ['] timer-item timer.icon add-icon [ #mfgtests++ ]
+
+ " RTC (Real-Time Clock)"
+ ['] rtc-item clock.icon add-icon [ #mfgtests++ ]
+
+ " Keyboard"
+ ['] keyboard-item keyboard.icon add-icon [ #mfgtests++ ]
+
+ " Touchpad"
+ ['] touchpad-item touchpad.icon add-icon [ #mfgtests++ ]
+
+ " Display"
+ ['] display-item display.icon add-icon [ #mfgtests++ ]
+
+ " Camera"
+ ['] camera-item camera.icon add-icon [ #mfgtests++ ]
+
+ " Audio: Speaker and microphone"
+ ['] audio-item audio.icon add-icon [ #mfgtests++ ]
+
+ " Wireless LAN"
+ ['] wlan-item wifi.icon add-icon [ #mfgtests++ ]
+
+ " USB ports"
+ ['] usb-item usb.icon add-icon [ #mfgtests++ ]
+
+ " Battery"
+ ['] battery-item battery.icon add-icon [ #mfgtests++ ]
+
+ \ These are last because they require user participation.
+ \ The earlier tests are all included in automatic batch-mode.
+
+\ " LEDs"
+\ ['] leds-item leds.icon add-icon [ #mfgtests++ ]
+
+\ " Switches"
+\ ['] switch-item ebook.icon add-icon [ #mfgtests++ ]
+;
+
+: init-menu ( -- )
+ ?open-screen ?open-mouse
+ #mfgrows to rows
+ #mfgcols to cols
+ d# 180 to sq-size
+ d# 128 to image-size
+ d# 128 to icon-size
+ cursor-off
+;
+
+: full-menu ( -- )
+ init-menu
+ olpc-menu-items
+
+ " Run all non-interactive tests. (Press a key between tests to stop.)"
+ ['] play-item play.icon 0 0 selected install-icon
+
+ " Exit selftest mode."
+ ['] quit-item quit.icon 0 1 install-icon
+;
+
+' full-menu to root-menu
+' noop to do-title
+
+: autorun-mfg-tests ( -- )
+ init-menu
+ ['] run-menu behavior >r
+ ['] mfg-test-autorunner to run-menu \ Run menu automatically
+ true to diag-switch?
+ ['] olpc-menu-items ['] nest-menu catch drop
+ r> to run-menu
+ false to diag-switch?
+ clear-n-restore-scroller
+;
+
+: run-mfg-tests ( -- )
+ ['] full-menu ['] nest-menu catch drop
+ clear-n-restore-scroller
+;
+
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2009 Luke Gorrie
+\
+\ 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
More information about the openfirmware
mailing list