Author: wmb Date: Tue Nov 16 00:23:53 2010 New Revision: 2024 URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2024
Log: OLPC XO-1.75 - GUI menu framework is in place and working.
Added: cpu/arm/olpc/1.75/mfgtest.fth cpu/arm/olpc/1.75/testicons.bth Modified: cpu/arm/olpc/1.75/devices.fth cpu/arm/olpc/1.75/fw.bth cpu/arm/olpc/1.75/olpc.bth cpu/arm/olpc/1.75/sound.fth dev/video/common/rectangle16.fth
Modified: cpu/arm/olpc/1.75/devices.fth ============================================================================== --- cpu/arm/olpc/1.75/devices.fth Mon Nov 15 22:21:13 2010 (r2023) +++ cpu/arm/olpc/1.75/devices.fth Tue Nov 16 00:23:53 2010 (r2024) @@ -174,6 +174,11 @@ ' w! to pixel! [then]
+ : color! ( r g b index -- ) 4drop ; + : color@ ( index -- r g b ) drop 0 0 0 ; + + fload ${BP}/dev/video/common/rectangle16.fth \ Rectangular graphics + : display-on init-xo-display \ Turns on DCON init-lcd
Modified: cpu/arm/olpc/1.75/fw.bth ============================================================================== --- cpu/arm/olpc/1.75/fw.bth Mon Nov 15 22:21:13 2010 (r2023) +++ cpu/arm/olpc/1.75/fw.bth Tue Nov 16 00:23:53 2010 (r2024) @@ -95,11 +95,11 @@ patch merge-rect-565 merge-rect merge-cursor \ Hack since we do all our user-level graphics in 565 patch merge-rect-565 merge-rect merge-cursor \ Hack since we do all our user-level graphics in 565
-[ifdef] notyet \ Uninstall the diag menu from the general user interface vector \ so exiting from emacs doesn't invoke the diag menu. ' quit to user-interface -fload ${BP}/cpu/x86/pc/olpc/via/mfgtest.fth +fload ${BP}/cpu/arm/olpc/1.75/mfgtest.fth +[ifdef] notyet fload ${BP}/cpu/x86/pc/olpc/via/bootmenu.fth [then]
Added: cpu/arm/olpc/1.75/mfgtest.fth ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ cpu/arm/olpc/1.75/mfgtest.fth Tue Nov 16 00:23:53 2010 (r2024) @@ -0,0 +1,250 @@ +\ See license at end of file +purpose: Menu for manufacturing tests + +h# f800 constant mfg-color-red +h# 07e0 constant mfg-color-green + +: 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 +; + +: mfg-test-dev ( $ -- ) + restore-scroller + ??cr ." Testing " 2dup type cr + locate-device if ." Can't find device node" cr 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 + ." Okay" cr + black-letters + mfg-color-green sq-border! + true to pass? + d# 2000 hold-message + then + else + ." 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 ( -- ) + restore-scroller + clear-screen + ." All automatic tests passed successfully." cr cr cr + green-screen + wait-return + cursor-off gui-alerts refresh + flush-keyboard +; + +d# 15 value #mfgtests + +: mfg-test-autorunner ( -- ) \ Unattended autorun of all tests + 5 #mfgtests + 5 ?do + i set-current-sq + refresh + d# 1000 ms + run-menu-item + pass? 0= ?leave + loop +; + +: play-item ( -- ) \ Interactive autorun of all tests + 5 #mfgtests + 5 ?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" mfg-test-dev ; +: spiflash-item ( -- ) " /flash" mfg-test-dev ; +: memory-item ( -- ) " /memory" mfg-test-dev ; +: usb-item ( -- ) " /usb" mfg-test-dev ; +: int-sd-item ( -- ) " int:0" mfg-test-dev ; +: ext-sd-item ( -- ) " ext:0" mfg-test-dev ; +: rtc-item ( -- ) " /rtc" mfg-test-dev ; +: display-item ( -- ) " /display" mfg-test-dev ; +: audio-item ( -- ) " /audio" mfg-test-dev ; +: camera-item ( -- ) " /camera" mfg-test-dev ; +: wlan-item ( -- ) " /wlan" mfg-test-dev ; +: timer-item ( -- ) " /timer" mfg-test-dev ; +: touchpad-item ( -- ) " /ec-spi/mouse" mfg-test-dev ; +: keyboard-item ( -- ) " /ec-spi/keyboard" mfg-test-dev ; +: switch-item ( -- ) " /switches" mfg-test-dev ; +: leds-item ( -- ) " /leds" mfg-test-dev ; +\ XXX need to test sensors like accelerometer and compass + +: olpc-menu-items ( -- ) + clear-menu + +\ " CPU" +\ ['] cpu-item cpu.icon 1 0 install-icon + + " SPI Flash: Contains EC code, firmware, manufacturing data." + ['] spiflash-item spi.icon 1 0 install-icon + + " RAM chips" + ['] memory-item ram.icon 1 1 install-icon + + " Internal mass storage" + ['] int-sd-item sdcard.icon 1 2 install-icon + + " Plug-in SD card" + ['] ext-sd-item sdcard.icon 1 3 install-icon + + " Wireless LAN" + ['] wlan-item wifi.icon 1 4 install-icon + + " Display" + ['] display-item display.icon 2 0 install-icon + + " Camera" + ['] camera-item camera.icon 2 1 install-icon + + " Audio: Speaker and microphone" + ['] audio-item audio.icon 2 2 install-icon + + " Battery" + ['] battery-item battery.icon 2 3 install-icon + + " RTC (Real-Time Clock)" + ['] rtc-item clock.icon 2 4 install-icon + + " USB ports" + ['] usb-item usb.icon 3 0 install-icon + + \ These are last because they require user participation. + \ The earlier tests are all included in automatic batch-mode. + + " Keyboard" + ['] keyboard-item keyboard.icon 3 1 install-icon + + " Touchpad" + ['] touchpad-item touchpad.icon 3 2 install-icon + + " LEDs" + ['] leds-item leds.icon 3 3 install-icon + + " Switches" + ['] switch-item ebook.icon 3 4 install-icon +; + +: full-menu ( -- ) + d# 4 to rows + d# 5 to cols + d# 180 to sq-size + d# 128 to image-size + d# 128 to icon-size + + olpc-menu-items + + " Run all non-interactive tests. (Press a key between tests to stop.)" + ['] play-item play.icon 0 1 selected install-icon + + " Exit selftest mode." + ['] quit-item quit.icon 0 3 install-icon +; + +' full-menu to root-menu +' noop to do-title + +: autorun-mfg-tests ( -- ) + ['] mfg-test-autorunner to run-menu \ Run menu automatically + true to diag-switch? + ['] olpc-menu-items ['] nest-menu catch drop + false to diag-switch? + 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
Modified: cpu/arm/olpc/1.75/olpc.bth ============================================================================== --- cpu/arm/olpc/1.75/olpc.bth Mon Nov 15 22:21:13 2010 (r2023) +++ cpu/arm/olpc/1.75/olpc.bth Tue Nov 16 00:23:53 2010 (r2024) @@ -10,6 +10,7 @@ in: ${BP}/dev/usb2/device/keyboard/build/usbkbd.fc in: ${BP}/dev/usb2/device/serial/build/usbserial.fc in: ${BP}/dev/usb2/device/storage/build/usbstorage.fc +in: testicons.bin build-now
fload ${BP}/cpu/arm/olpc/1.75/fw-version.fth @@ -103,7 +104,6 @@ " ${BP}/ofw/inet/telnetd.fth" " telnetd" $add-deflated-dropin [then]
-0 [if] \ " ${BP}/cpu/x86/pc/olpc/images/warnings.565" " warnings.565" $add-deflated-dropin " ${BP}/cpu/x86/pc/olpc/images/lightdot.565" " lightdot.565" $add-deflated-dropin " ${BP}/cpu/x86/pc/olpc/images/yellowdot.565" " yellowdot.565" $add-deflated-dropin @@ -123,7 +123,6 @@ " ${BP}/cpu/x86/pc/olpc/images/wireless.565" " wlan.565" $add-deflated-dropin " ${BP}/cpu/x86/pc/olpc/images/laptop.565" " int.565" $add-deflated-dropin " ${BP}/cpu/x86/pc/olpc/images/sd.565" " ext.565" $add-deflated-dropin -[then]
0 [if] " ${BP}/ofw/termemu/15x30pc.psf" " font" $add-deflated-dropin @@ -142,7 +141,6 @@
" sourceurl" " sourceurl" $add-dropin
-0 [if] " ${BP}/cpu/x86/pc/olpc/images/Edge1-8k-EQ-Comp-Amp-Short.wav" " splash" $add-deflated-dropin
\ icons for mfg test gui @@ -167,6 +165,7 @@ " ${BP}/cpu/x86/pc/olpc/images/leds.di" $add-file " ${BP}/cpu/x86/pc/olpc/images/ebook.di" $add-file
+0 [if] " ${BP}/cpu/x86/pc/olpc/via/build/nandblaster15_rx.bin" " nb15_rx" $add-deflated-dropin " ${BP}/cpu/x86/pc/olpc/via/build/nandblaster_tx.bin" " nb_tx" $add-deflated-dropin
Modified: cpu/arm/olpc/1.75/sound.fth ============================================================================== --- cpu/arm/olpc/1.75/sound.fth Mon Nov 15 22:21:13 2010 (r2023) +++ cpu/arm/olpc/1.75/sound.fth Tue Nov 16 00:23:53 2010 (r2024) @@ -354,7 +354,6 @@ true ; : close ( -- ) ; -.s cr
fload ${BP}/forth/lib/isin.fth fload ${BP}/forth/lib/tones.fth
Added: cpu/arm/olpc/1.75/testicons.bth ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ cpu/arm/olpc/1.75/testicons.bth Tue Nov 16 00:23:53 2010 (r2024) @@ -0,0 +1,11 @@ +purpose: Expand the test icons + +command: &builder &this +build-now + +" tar xfz ${BP}/cpu/x86/pc/olpc/via/testicons.tgz" expand$ $sh + +\ This forces the creation of a .log file, so we don't re-fetch +writing testicons.version +" 1" ofd @ fputs +ofd @ fclose
Modified: dev/video/common/rectangle16.fth ============================================================================== --- dev/video/common/rectangle16.fth Mon Nov 15 22:21:13 2010 (r2023) +++ dev/video/common/rectangle16.fth Tue Nov 16 00:23:53 2010 (r2024) @@ -52,28 +52,39 @@ 0= until c; code argb>565-pixel ( argb -- 565 ) - ax pop - ax bx mov d# 19 # bx shr d# 11 # bx shl \ Red - ax dx mov d# 24 # dx shl d# 27 # dx shr dx bx or \ Blue - d# 16 # ax shl d# 26 # ax shr d# 5 # ax shl bx ax or \ Green - ax push + mov r0,tos,lsr #3 \ Blue + and r0,tos,#0x1f + + and r1,tos,#0xfc00 \ Green + orr r0,r1,r1,lsr #5 + + and r1,tos,#0xf80000 \ Red + orr r0,r1,r1,lsr #8 + + mov tos,r0 c;
code argb>565 ( src dst #pixels -- ) - cx pop - di 0 [sp] xchg - si 4 [sp] xchg + mov r0,tos \ r0:#pixels + ldmia sp!,{r1,r2,tos} \ r1:dst r2:src
begin - ax lods - ax bx mov d# 19 # bx shr d# 11 # bx shl \ Red - ax dx mov d# 24 # dx shl d# 27 # dx shr dx bx or \ Blue - d# 16 # ax shl d# 26 # ax shr d# 5 # ax shl bx ax or \ Green - op: ax stos - loopa + ldr r3,[r2],#4 \ Get source pixel + + mov r4,r3,lsr #3 \ Blue + and r4,r3,#0x1f
- di pop - si pop + and r5,r3,#0xfc00 \ Green + orr r4,r5,r5,lsr #5 + + and r5,r3,#0xf80000 \ Red + orr r4,r5,r5,lsr #8 + + strh r4,[r1] + inc r4,#2 + + decs r0,#1 + 0= until c; [then] [ifdef] 386-assembler