[openfirmware] [commit] r3049 - cpu/arm/mmp2 cpu/arm/olpc cpu/arm/olpc/1.75 cpu/arm/olpc/3.0 cpu/x86/pc/olpc dev/olpc/dcon dev/olpc/kb3700 dev/olpc/mmp2camera dev/olpc/spiflash

repository service svn at openfirmware.info
Wed Jul 11 03:50:11 CEST 2012


Author: wmb
Date: Wed Jul 11 03:50:11 2012
New Revision: 3049
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/3049

Log:
OLPC - omnibus change to greatly reduce the number of platform-specific ifdefs.  The GPIOs are now named in <platform>/config.fth and referenced by name in common code.  The drivers that differ between platforms are loaded in <platform>/fw.bth instead of in build-fw.fth .  Hopefully this will make the code easier to maintain.

Added:
   cpu/arm/olpc/1.75/config-a1.fth
   cpu/arm/olpc/1.75/gamekey-a1.fth
   cpu/arm/olpc/gpio-gamekeys.fth
   cpu/arm/olpc/keypad-gamekeys.fth
   cpu/arm/olpc/save-fw.fth
   cpu/arm/olpc/test-tweaks.fth
   cpu/arm/olpc/usb.fth
Modified:
   cpu/arm/mmp2/dramrecal.fth
   cpu/arm/mmp2/sspspi.fth
   cpu/arm/olpc/1.75/compass.fth
   cpu/arm/olpc/1.75/config.fth
   cpu/arm/olpc/1.75/fw.bth
   cpu/arm/olpc/1.75/lcdcfg.fth
   cpu/arm/olpc/1.75/leds.fth
   cpu/arm/olpc/1.75/olpc.bth
   cpu/arm/olpc/1.75/usb.fth
   cpu/arm/olpc/3.0/config.fth
   cpu/arm/olpc/3.0/fw.bth
   cpu/arm/olpc/3.0/lcdcfg.fth
   cpu/arm/olpc/3.0/leds.fth
   cpu/arm/olpc/3.0/olpc.bth
   cpu/arm/olpc/3.0/switches.fth
   cpu/arm/olpc/3.0/usb.fth
   cpu/arm/olpc/addrs.fth
   cpu/arm/olpc/boardrev.fth
   cpu/arm/olpc/build-fw.fth
   cpu/arm/olpc/emmc.fth
   cpu/arm/olpc/lcd.fth
   cpu/arm/olpc/prefw.fth
   cpu/arm/olpc/probemem.fth
   cpu/arm/olpc/rtc.fth
   cpu/arm/olpc/sdhci.fth
   cpu/arm/olpc/sound.fth
   cpu/x86/pc/olpc/sound.fth
   dev/olpc/dcon/mmp2dcon.fth
   dev/olpc/kb3700/spicmd.fth
   dev/olpc/mmp2camera/platform.fth
   dev/olpc/spiflash/spiui.fth

Modified: cpu/arm/mmp2/dramrecal.fth
==============================================================================
--- cpu/arm/mmp2/dramrecal.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/mmp2/dramrecal.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -647,8 +647,10 @@
 \ How to wakeup from SP:
 : setup-key-wakeup  ( -- )
    d# 24 d# 15 do  h# b0 i af!  loop  \ Wake SoC on game keys
-   h# 220 d#  71 af!  \ Wake SoC on KBD CLK falling edge
-   h# 221 d# 160 af!  \ Wake SoC on TPD CLK falling edge
+[ifdef] soc-kbd-clk-gpio#
+   h# 220 soc-kbd-clk-gpio# af!  \ Wake SoC on KBD CLK falling edge
+   h# 221 soc-tpd-clk-gpio# af!  \ Wake SoC on TPD CLK falling edge
+[then]
    h# 4  h# 4c +mpmu  io-set  \ Pin edge (GPIO per datasheet) wakes SoC
    ['] disable-int40 d# 40 interrupt-handler!
    d# 40 enable-interrupt  \ SP to PJ4 communications interrupt
@@ -749,11 +751,16 @@
    \ end mmp2_pm_enter_lowpower_mode(state)
 ;
 
-: keyboard-power-on   ( -- )  d# 148 gpio-clr  ;
-: keyboard-power-off  ( -- )  d# 148 gpio-set  ;
-: wlan-power-on   ( -- )  d# 34 gpio-set  ;
-: wlan-power-off  ( -- )  d# 34 gpio-clr  h# 040 d# 34 af!  h# 040 d# 57 af!  h# 040 d# 58 af!  ;
-: wlan-stay-on  ( -- )  h# 140 d# 34 af!  h# 140 d# 57 af!  h# 140 d# 58 af!  ;
+[ifdef] soc-en-kbd-pwr-gpio#
+: keyboard-power-on   ( -- )  soc-en-kbd-pwr-gpio# gpio-clr  ;
+: keyboard-power-off  ( -- )  soc-en-kbd-pwr-gpio# gpio-set  ;
+[else]
+: keyboard-power-on   ( -- )  ;
+: keyboard-power-off  ( -- )  ;
+[then]
+: wlan-power-on   ( -- )  en-wlan-pwr-gpio# gpio-set  ;
+: wlan-power-off  ( -- )  en-wlan-pwr-gpio# gpio-clr  h# 040 en-wlan-pwr-gpio# af!  h# 040 wlan-pd-gpio# af!  h# 040 wlan-reset-gpio# af!  ;
+: wlan-stay-on  ( -- )  h# 140 en-wlan-pwr-gpio# af!  h# 140 wlan-pd-gpio# af!  h# 140 wlan-reset-gpio# af!  ;
 
 0 value sleep-mask
 : screen-sleep

Modified: cpu/arm/mmp2/sspspi.fth
==============================================================================
--- cpu/arm/mmp2/sspspi.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/mmp2/sspspi.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -20,12 +20,12 @@
    h# 07 ssp-sscr0 io!
    0 ssp-sscr1 io!
    h# 87 ssp-sscr0 io!   
-   d# 46 gpio-set
-   d# 46 gpio-dir-out
-   h# c0 d# 46 af!
+   spi-flash-cs-gpio# gpio-set
+   spi-flash-cs-gpio# gpio-dir-out
+   h# c0 spi-flash-cs-gpio# af!
 ;
-: ssp-spi-cs-on   ( -- )  d# 46 gpio-clr  ;
-: ssp-spi-cs-off  ( -- )  d# 46 gpio-set  ;
+: ssp-spi-cs-on   ( -- )  spi-flash-cs-gpio# gpio-clr  ;
+: ssp-spi-cs-off  ( -- )  spi-flash-cs-gpio# gpio-set  ;
 
 code ssp-spi-out-in  ( bo -- bi )
    set r0,`ssp-base +io #`

Modified: cpu/arm/olpc/1.75/compass.fth
==============================================================================
--- cpu/arm/olpc/1.75/compass.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/1.75/compass.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -2,8 +2,8 @@
 " compass" name
 
 : set-compass-slave  ( -- )
-   4 to smb-clock-gpio#
-   5 to smb-data-gpio#
+   compass-scl-gpio# to smb-clock-gpio#
+   compass-sda-gpio# to smb-data-gpio#
    h# 3c to smb-slave
    smb-data-gpio# gpio-dir-out
 ;

Added: cpu/arm/olpc/1.75/config-a1.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/olpc/1.75/config-a1.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -0,0 +1,88 @@
+create cl2-a1
+create debug-startup
+create olpc
+create olpc-cl2
+create trust-ec-keyboard
+create use-null-nvram
+create use-elf
+create has-sp-kbd
+create has-dcon
+
+fload ${BP}/cpu/arm/mmp2/hwaddrs.fth
+fload ${BP}/cpu/arm/olpc/addrs.fth
+
+[ifdef] use-flash-nvram
+h# d.0000 constant nvram-offset
+[then]
+
+h#  e.0000 constant mfg-data-offset     \ Offset to manufacturing data area in SPI FLASH
+h#  f.0000 constant mfg-data-end-offset \ Offset to end of manufacturing data area in SPI FLASH
+h#  f.ffd8 constant crc-offset
+
+h# 10.0000 constant /rom           \ Total size of SPI FLASH
+
+: signature$    " CL2"  ;
+: model$        " olpc,XO-1.75"  ;
+: compatible$   " olpc,xo-1.75"  ;
+
+: touchscreen-driver$  " ${BP}/cpu/arm/olpc/rm3150-touchscreen.fth"  ;
+d#  9999 constant machine-type  \ Backwards compatibility with non-device-tree kernel
+
+char 3 constant expected-ec-version
+h# 10000 value /ec-flash
+
+h# 10000 constant l2-#sets
+
+d# 108 constant cam-scl-gpio#
+d# 109 constant cam-sda-gpio#
+
+d# 102 constant cam-rst-gpio#
+d# 145 constant cam-pwr-gpio#
+
+d#  46 constant spi-flash-cs-gpio#
+
+d# 155 constant ec-spi-cmd-gpio#
+d# 125 constant ec-spi-ack-gpio#
+
+d# 162 constant dcon-scl-gpio#
+d# 163 constant dcon-sda-gpio#
+
+d# 124 constant dcon-irq-gpio#
+d# 151 constant dcon-load-gpio#
+
+d#  34 constant en-wlan-pwr-gpio#
+d#  57 constant wlan-pd-gpio#
+d#  58 constant wlan-reset-gpio#
+
+d# 146 constant usb-hub-reset-gpio#
+
+d# 149 constant emmc-rst-gpio#
+
+d#  73 constant sec-trg-gpio#
+
+d#  97 constant rtc-scl-gpio#
+d#  98 constant rtc-sda-gpio#
+
+d# 129 constant lid-switch-gpio#
+d# 128 constant ebook-mode-gpio#
+
+d# 143 constant mic-ac/dc-gpio#
+d#   8 constant audio-reset-gpio#
+d#  97 constant hp-plug-gpio#
+
+d#  10 constant led-storage-gpio#
+d#  11 constant vid2-gpio#
+
+d# 160 constant soc-tpd-clk-gpio#
+d# 107 constant soc-tpd-dat-gpio#
+
+d#  71 constant soc-kbd-clk-gpio#
+d#  72 constant soc-kbd-dat-gpio#
+d# 148 constant soc-en-kbd-pwr-gpio#
+
+d# 144 constant cam-pwrdn-gpio#
+
+d#   4 constant compass-scl-gpio#
+d#   5 constant compass-sda-gpio#
+
+d#  20 constant rotate-gpio#

Modified: cpu/arm/olpc/1.75/config.fth
==============================================================================
--- cpu/arm/olpc/1.75/config.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/1.75/config.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -1,12 +1,92 @@
-\ create cl2-a1
 create debug-startup
 create olpc
 create olpc-cl2
 create trust-ec-keyboard
 create use-null-nvram
 create use-elf
+create has-sp-kbd
+create has-dcon
 
 fload ${BP}/cpu/arm/mmp2/hwaddrs.fth
 fload ${BP}/cpu/arm/olpc/addrs.fth
 
-create machine-signature ," CL2"
+[ifdef] use-flash-nvram
+h# d.0000 constant nvram-offset
+[then]
+
+h#  e.0000 constant mfg-data-offset     \ Offset to manufacturing data area in SPI FLASH
+h#  f.0000 constant mfg-data-end-offset \ Offset to end of manufacturing data area in SPI FLASH
+h#  f.ffd8 constant crc-offset
+
+h# 10.0000 constant /rom           \ Total size of SPI FLASH
+
+: signature$    " CL2"  ;
+: model$        " olpc,XO-1.75"  ;
+: compatible$   " olpc,xo-1.75"  ;
+
+d#  9999 constant machine-type  \ Backwards compatibility with non-device-tree kernel
+
+char 4 constant expected-ec-version
+h# 8000 value /ec-flash
+
+h# 10000 constant l2-#sets
+
+d# 108 constant cam-scl-gpio#
+d# 109 constant cam-sda-gpio#
+
+d# 102 constant cam-rst-gpio#
+d# 150 constant cam-pwr-gpio#
+
+d#  46 constant spi-flash-cs-gpio#
+
+d# 155 constant ec-spi-cmd-gpio#
+d# 125 constant ec-spi-ack-gpio#
+
+d# 161 constant dcon-scl-gpio#
+d# 110 constant dcon-sda-gpio#
+
+d# 124 constant dcon-irq-gpio#
+d# 142 constant dcon-load-gpio#
+
+d#  34 constant en-wlan-pwr-gpio#
+d#  57 constant wlan-pd-gpio#
+d#  58 constant wlan-reset-gpio#
+
+d# 146 constant usb-hub-reset-gpio#
+
+d# 149 constant emmc-rst-gpio#
+
+d#  73 constant sec-trg-gpio#
+
+d#  53 constant rtc-scl-gpio#
+d#  54 constant rtc-sda-gpio#
+
+d# 104 constant ec-edi-cs-gpio#
+d# 105 constant ec-edi-mosi-gpio#
+d# 106 constant ec-edi-clk-gpio#
+
+\ d#  56 constant boot-dev-sel-gpio#  \ revision-dependent, determined at run time
+
+d# 129 constant lid-switch-gpio#
+d# 128 constant ebook-mode-gpio#
+
+d# 143 constant mic-ac/dc-gpio#
+d#   8 constant audio-reset-gpio#
+d#  97 constant hp-plug-gpio#
+
+d#  10 constant led-storage-gpio#
+d#  11 constant vid2-gpio#
+
+d# 160 constant soc-tpd-clk-gpio#
+d# 107 constant soc-tpd-dat-gpio#
+
+d#  71 constant soc-kbd-clk-gpio#
+d#  72 constant soc-kbd-dat-gpio#
+d# 148 constant soc-en-kbd-pwr-gpio#
+
+d# 144 constant cam-pwrdn-gpio#
+
+d#   4 constant compass-scl-gpio#
+d#   5 constant compass-sda-gpio#
+
+d#  15 constant rotate-gpio#

Modified: cpu/arm/olpc/1.75/fw.bth
==============================================================================
--- cpu/arm/olpc/1.75/fw.bth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/1.75/fw.bth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -8,3 +8,39 @@
 " fw.tag" r/w create-file drop  tag-file !
 
 fload ${BP}/cpu/arm/olpc/build-fw.fth
+
+\ The internal SD card shares the host controller circuitry with
+\ the internal eMMC, so you can only use one at a time.  A GPIO
+\ chooses which one to use.  The intended usage is to "repair"
+\ boards with a broken eMMC chip by inserting a microSD and grounding
+\ the GPIO.
+
+: clx-touch?  ( -- )  board-revision h# 3a18 >=  ;
+: boot-dev-sel-gpio#  ( -- n )  clx-touch?  if  2  else  d# 56  then  ;
+
+fload ${BP}/cpu/arm/olpc/emmc.fth
+
+\ Device node for internal microSD
+dev /sd
+   new-device
+      1 encode-int " reg" property
+      fload ${BP}/dev/mmc/sdhci/sdmmc.fth
+      fload ${BP}/dev/mmc/sdhci/selftest.fth
+      " external" " slot-name" string-property
+   finish-device
+device-end
+
+devalias int /sd/disk at 3
+devalias ext /sd/disk at 1
+
+fload ${BP}/cpu/arm/olpc/1.75/lcdcfg.fth
+fload ${BP}/cpu/arm/olpc/1.75/usb.fth
+fload ${BP}/cpu/arm/olpc/rm3150-touchscreen.fth
+fload ${BP}/cpu/arm/olpc/1.75/compass.fth
+fload ${BP}/cpu/arm/olpc/1.75/switches.fth
+fload ${BP}/cpu/arm/olpc/1.75/leds.fth
+fload ${BP}/cpu/arm/olpc/1.75/testinstructions.fth
+fload ${BP}/cpu/arm/olpc/gpio-gamekeys.fth
+fload ${BP}/cpu/arm/olpc/test-tweaks.fth
+
+fload ${BP}/cpu/arm/olpc/save-fw.fth

Added: cpu/arm/olpc/1.75/gamekey-a1.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/olpc/1.75/gamekey-a1.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -0,0 +1,9 @@
+: (game-key@)  ( -- n )
+   0                                        ( n )
+   d# 16 gpio-pin@ 0=  if  h#  80 or  then  \ O
+   d# 17 gpio-pin@ 0=  if  h#  02 or  then  \ Check
+   d# 18 gpio-pin@ 0=  if  h# 100 or  then  \ X
+   d# 19 gpio-pin@ 0=  if  h#  01 or  then  \ Square
+   rotate-gpio# gpio-pin@ 0=  if  h#  40 or  then  \ Rotate
+;
+' (game-key@) to game-key@

Modified: cpu/arm/olpc/1.75/lcdcfg.fth
==============================================================================
--- cpu/arm/olpc/1.75/lcdcfg.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/1.75/lcdcfg.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -1,33 +1,7 @@
-h# 40001102 value clkdiv  \ Display Clock 1 / 2 -> 56.93 MHz
-h# 00000700 value pmua-disp-clk-sel  \ PLL1 / 7 -> 113.86 MHz 
+dev /display
 
-d#    8 value hsync  \ Sync width
-d# 1200 value hdisp  \ Display width
-d# 1256 value htotal \ Display + FP + Sync + BP
-d#   24 value hbp    \ Back porch
-
-d#    3 value vsync  \ Sync width
-d#  900 value vdisp  \ Display width
-d#  912 value vtotal \ Display + FP + Sync + BP
-d#    5 value vbp    \ Back porch
-
-: hfp  ( -- n )  htotal hdisp -  hsync -  hbp -  ;  \ 24
-: vfp  ( -- n )  vtotal vdisp -  vsync -  vbp -  ;  \ 4
-
-0 [if]
-3 constant #lanes
-3 constant bytes/pixel
-d# 24 constant bpp
-[else]
-2 constant #lanes
-2 constant bytes/pixel
-d# 16 constant bpp
+[ifdef] has-dcon
+   fload ${BP}/dev/olpc/dcon/mmp2dcon.fth        \ DCON control
 [then]
 
-: >bytes   ( pixels -- chunks )  bytes/pixel *  ;
-: >chunks  ( pixels -- chunks )  >bytes #lanes /  ;
-
-alias width  hdisp
-alias height vdisp
-alias depth  bpp
-width >bytes constant /scanline  
+device-end

Modified: cpu/arm/olpc/1.75/leds.fth
==============================================================================
--- cpu/arm/olpc/1.75/leds.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/1.75/leds.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -7,8 +7,12 @@
 : open  ( -- okay? )  true  ;
 : close  ( -- )  ;
 
+: hdd-led-off     ( -- )  led-storage-gpio# gpio-clr  ;
+: hdd-led-on      ( -- )  led-storage-gpio# gpio-set  ;
+: hdd-led-toggle  ( -- )  led-storage-gpio# gpio-pin@  if  hdd-led-off  else  hdd-led-on  then  ;
+
 : selftest  ( -- )
-    ." Flashing LEDs" cr
+   ." Flashing LEDs" cr
 
    d# 10 0 do  ols-led-on d# 200 ms ols-led-off d# 200 ms  loop
    ols-led-ec-control

Modified: cpu/arm/olpc/1.75/olpc.bth
==============================================================================
--- cpu/arm/olpc/1.75/olpc.bth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/1.75/olpc.bth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -162,7 +162,7 @@
 /rom h# 40 - ofd @ fseek
 h# 10 buffer: signature
 signature h# 10 blank
-machine-signature count   signature         swap move
+signature$  signature  swap move
 " ${FW_VERSION}" expand$  signature     6 + swap move
 " ${FW_PREFIX}${FW_MAJOR}" expand$  signature d# 13 + swap move
 signature h# 10  ofd @ fputs

Modified: cpu/arm/olpc/1.75/usb.fth
==============================================================================
--- cpu/arm/olpc/1.75/usb.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/1.75/usb.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -1,192 +1,18 @@
 purpose: Platform-specific USB elaborations
 \ See license at end of file
 
-0 0  " d4208000"  " /" begin-package  \ USB Host Controller
-   h# 200 constant /regs
-   my-address my-space /regs reg
-   : my-map-in  ( len -- adr )
-      my-space swap  " map-in" $call-parent  h# 100 +  ( adr )
-   ;
-   : my-map-out  ( adr len -- )  swap h# 100 - swap " map-out" $call-parent  ;
-   " /pmua" encode-phandle 5 encode-int encode+ " clocks" property
-   d# 44 " interrupts" integer-property
-
-   false constant has-dbgp-regs?
-   false constant needs-dummy-qh?
-   : grab-controller  ( config-adr -- error? )  drop false  ;
-   fload ${BP}/dev/usb2/hcd/ehci/loadpkg.fth
-\  false to delay?  \ No need for a polling delay on this platform
-   : otg-set-host-mode  3 h# a8 ehci-reg!  ;  \ Force host mode
-   ' otg-set-host-mode to set-host-mode
-
+dev /usb at d4208000
    \ Port 1 on the hub is connected to unused pins on the WLAN connector,
    \ so testing it is confusing
    \ Port 2 is right upper
    \ Port 3 is left
    \ Port 4 is right lower
    " 3,4,2" " usb-hub-test-list" string-property
-   : sleep  ( -- )  true to first-open?  ;
-   : wake  ( -- )  ;
-end-package
-
-\ Turn on USB power after a delay, to ensure that USB devices are reset correctly on boot
-: usb-power-on  ( -- )  ;  \ The EC controls the USB power
-: reset-usb-hub  ( -- )  d# 146 gpio-clr  d# 10 ms  d# 146 gpio-set  ;
-
-: init-usb  ( -- )
-   h# 9 h# 5c pmua!  \ Enable clock to USB block
-   reset-usb-hub
-   init-usb-phy
-;
+device-end
 
-stand-init: Init USB Phy
-\  usb-power-on   \ The EC now controls the USB power
-   init-usb
+: (reset-usb-hub)  ( -- )
+   usb-hub-reset-gpio# gpio-clr  d# 10 ms  usb-hub-reset-gpio# gpio-set
 ;
-
-d# 350 config-int usb-delay  \ Milliseconds to wait before probing hub ports
+' (reset-usb-hub) to reset-usb-hub
 
 devalias u    /usb/disk
-
-\ Like $show-devs, but ignores pagination keystrokes
-: $nopage-show-devs  ( nodename$ -- )
-   ['] exit? behavior >r  ['] false to exit?
-   $show-devs
-   r> to exit?
-;
-
-\ Restrict selftest to external USB ports 1,2,3
-\ dev /  3 " usb-test-ports" integer-property  dend
-
-: (probe-usb2)  ( -- )
-   " device_type" get-property  if  exit  then
-[ifdef] use-usb-debug-port
-   \ I haven't figured out how to turn on the EHCI cleanly
-   \ when the Debug Port is running
-   dbgp-off
-[then]
-   get-encoded-string  " ehci" $=  if
-      pwd$ open-dev  ?dup  if  close-dev  then
-   then
-;
-: (show-usb2)  ( -- )
-   " device_type" get-property  if  exit  then
-   get-encoded-string  " ehci" $=  if
-      pwd$ $nopage-show-devs
-   then
-;
-
-true value first-usb-probe?
-: (silent-probe-usb)  ( -- )  " /" ['] (probe-usb2) scan-subtree  ;
-: silent-probe-usb  ( -- )
-   (silent-probe-usb)
-   report-disk report-net report-keyboard
-;
-: probe-usb  ( -- )
-   first-usb-probe?  if
-      false to first-usb-probe?
-      \ Initial probe to awaken the hub
-      (silent-probe-usb)
-      \ A little delay to let slow devices like USB scanner wake up
-      d# 150 ms
-   then
-   silent-probe-usb
-
-   ." USB devices:" cr
-   " /" ['] (show-usb2) scan-subtree
-
-;
-alias p2 probe-usb
-
-0 value usb-keyboard-ih
-
-: attach-usb-keyboard  ( -- )
-   " usb-keyboard" expand-alias  if   ( devspec$ )
-      drop " /usb"  comp  0=  if      ( )
-         " usb-keyboard" open-dev to usb-keyboard-ih
-         usb-keyboard-ih add-input
-         exit
-      then
-   else                               ( devspec$ )
-      2drop
-   then
-;
-
-: detach-usb-keyboard  ( -- )
-   usb-keyboard-ih  if
-      usb-keyboard-ih remove-input
-      usb-keyboard-ih close-dev
-      0 to usb-keyboard-ih
-   then
-;
-
-: ?usb-keyboard  ( -- )
-   attach-usb-keyboard
-;
-
-: usb-quiet  ( -- )
-   detach-usb-keyboard
-   " /usb" " reset-usb" execute-device-method drop
-;
-
-: suspend-usb  ( -- )
-   detach-usb-keyboard
-   " /usb" " sleep" execute-device-method drop
-;
-: has-children?   ( devspec$ -- flag )
-   locate-device  if  false  else  child 0<>  then
-;
-: any-usb-devices?  ( -- flag )  " /usb/hub" has-children?  ;
-: resume-usb  ( -- )
-   init-usb
-   " /usb" " wake" execute-device-method drop
-   any-usb-devices?  if
-      d# 2000 ms  \ USB misses devices if you probe too soon
-   then
-   silent-probe-usb
-   attach-usb-keyboard
-;
-
-\ Unlink every node whose phys.hi component matches port
-: port-match?  ( port -- flag )
-   get-unit  if  drop false exit  then
-   get-encoded-int =
-;
-: rm-usb-children  ( port -- )
-   device-context? 0=  if  drop exit  then
-   also                             ( port )
-   'child                           ( port prev )
-   first-child  begin while         ( port prev )
-      over port-match?  if          ( port prev )
-         'peer link@  over link!    ( port prev )      \ Disconnect
-      else                          ( port prev )
-         drop 'peer                 ( port prev' )
-      then                          ( port prev )
-   next-child  repeat               ( port prev )
-   2drop                            ( )
-   previous definitions
-;
-
-\ LICENSE_BEGIN
-\ Copyright (c) 2010 FirmWorks
-\ 
-\ 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/3.0/config.fth
==============================================================================
--- cpu/arm/olpc/3.0/config.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/3.0/config.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -1,11 +1,69 @@
 create debug-startup
 create olpc
-create trust-ec-keyboard
+create olpc-cl3
 create use-null-nvram
 create use-elf
-create olpc-cl3
+create use-screen-kbd
+create use-small-font
 
 fload ${BP}/cpu/arm/mmp2/hwaddrs.fth
 fload ${BP}/cpu/arm/olpc/addrs.fth
 
-create machine-signature ," CL3"
+[ifdef] use-flash-nvram
+h# d.0000 constant nvram-offset
+[then]
+
+h#  e.0000 constant mfg-data-offset     \ Offset to manufacturing data area in SPI FLASH
+h#  f.0000 constant mfg-data-end-offset \ Offset to end of manufacturing data area in SPI FLASH
+h#  f.ffd8 constant crc-offset
+
+h# 10.0000 constant /rom           \ Total size of SPI FLASH
+
+: signature$   " CL3"  ;
+: model$       " olpcXO-3.0"  ;
+: compatible$  " olpcxo-3.0"  ;
+
+d# 10000 constant machine-type  \ Backwards compatibility with non-device-tree kernel
+
+char 4 constant expected-ec-version
+h# 8000 value /ec-flash
+
+h# 10000 constant l2-#sets
+
+d#  56 constant boot-dev-sel-gpio#
+
+d#   4 constant cam-scl-gpio#
+d#   5 constant cam-sda-gpio#
+
+d#  10 constant cam-rst-gpio#
+d# 150 constant cam-pwr-gpio#
+d#   9 constant cam-pwrdn-gpio#
+
+d#  46 constant spi-flash-cs-gpio#
+
+d# 155 constant ec-spi-cmd-gpio#
+d# 125 constant ec-spi-ack-gpio#
+
+\ CL3 has no DCON
+
+d#  34 constant en-wlan-pwr-gpio#
+d#  57 constant wlan-pd-gpio#
+d#  58 constant wlan-reset-gpio#
+
+d# 146 constant usb-hub-reset-gpio#
+
+d# 149 constant emmc-rst-gpio#
+
+d# 142 constant sec-trg-gpio#
+
+d#  53 constant rtc-scl-gpio#
+d#  54 constant rtc-sda-gpio#
+
+d# 104 constant ec-edi-cs-gpio#
+d# 105 constant ec-edi-mosi-gpio#
+d# 106 constant ec-edi-clk-gpio#
+
+d# 143 constant mic-ac/dc-gpio#
+d#   8 constant audio-reset-gpio#
+d#  97 constant hp-plug-gpio#
+d#  11 constant vid2-gpio#

Modified: cpu/arm/olpc/3.0/fw.bth
==============================================================================
--- cpu/arm/olpc/3.0/fw.bth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/3.0/fw.bth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -8,3 +8,16 @@
 " fw.tag" r/w create-file drop  tag-file !
 
 fload ${BP}/cpu/arm/olpc/build-fw.fth
+
+fload ${BP}/cpu/arm/olpc/emmc.fth
+devalias int /sd/disk at 3
+
+fload ${BP}/cpu/arm/olpc/3.0/lcdcfg.fth
+fload ${BP}/cpu/arm/olpc/3.0/usb.fth
+fload ${BP}/cpu/arm/olpc/exc7200-touchscreen.fth
+fload ${BP}/cpu/arm/olpc/3.0/switches.fth
+fload ${BP}/cpu/arm/olpc/3.0/leds.fth
+fload ${BP}/cpu/arm/olpc/3.0/testinstructions.fth
+fload ${BP}/cpu/arm/olpc/test-tweaks.fth
+
+fload ${BP}/cpu/arm/olpc/save-fw.fth

Modified: cpu/arm/olpc/3.0/lcdcfg.fth
==============================================================================
--- cpu/arm/olpc/3.0/lcdcfg.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/3.0/lcdcfg.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -1,40 +1,20 @@
-h# 40001102 value clkdiv  \ Display Clock 1 / 2 -> 56.93 MHz
-h# 00000700 value pmua-disp-clk-sel  \ PLL1 / 7 -> 113.86 MHz 
+dev /display
+
+d# 1024 to hdisp  \ Display width
+d# 1344 to htotal \ Display + FP + Sync + BP
+
+d#  768 to vdisp  \ Display width
+d#  806 to vtotal \ Display + FP + Sync + BP
+
+: pwm-bright!  ( level -- )  d# 15 min  h# 11 *  h# 1a404 io!  ;
+' pwm-bright! to bright!
+
+: pwm-backlight-on  ( -- )  d# 15 bright!  ;
+' pwm-backlight-on  to backlight-on
+
+: pwm-backlight-off  ( -- )  0 bright!  ;
+' pwm-backlight-off  to backlight-off
 
-d#    8 value hsync  \ Sync width
-d# 1024 value hdisp  \ Display width
-d# 1344 value htotal \ Display + FP + Sync + BP
-d#   24 value hbp    \ Back porch
-
-d#    3 value vsync  \ Sync width
-d#  768 value vdisp  \ Display width
-d#  806 value vtotal \ Display + FP + Sync + BP
-d#    5 value vbp    \ Back porch
-
-: hfp  ( -- n )  htotal hdisp -  hsync -  hbp -  ;  \ 24
-: vfp  ( -- n )  vtotal vdisp -  vsync -  vbp -  ;  \ 4
-
-0 [if]
-3 constant #lanes
-3 constant bytes/pixel
-d# 24 constant bpp
-[else]
-2 constant #lanes
-2 constant bytes/pixel
-d# 16 constant bpp
-[then]
-
-: >bytes   ( pixels -- chunks )  bytes/pixel *  ;
-: >chunks  ( pixels -- chunks )  >bytes #lanes /  ;
-
-alias width  hdisp
-alias height vdisp
-alias depth  bpp
-width >bytes constant /scanline  
-
-: bright!  ( level -- )  d# 15 min  h# 11 *  h# 1a404 io!  ;
-: backlight-on  ( -- )  d# 15 bright!  ;
-: backlight-off  ( -- )  0 bright!  ;
 : setup-pwm2  ( -- )
    7 h# 1503c io!  3 h# 1503c io!  \ Turn on the PWM1 clock and release reset - PWM2 depends on it
    7 h# 15040 io!  3 h# 15040 io!  \ Turn on the PWM2 clock and release reset
@@ -62,7 +42,9 @@
    setup-pwm2
    backlight-on
 ;
-: init-xo-display  ( -- )   ;  \ CForth has already turned it on
+\  ' lcd-power-on to init-panel  \ Unnecessary as CForth has already done it
 
 : set-source  ( flag -- )  drop  ;  \ No DCON
 true constant vga?  \ No DCON, hence never frozen
+
+device-end

Modified: cpu/arm/olpc/3.0/leds.fth
==============================================================================
--- cpu/arm/olpc/3.0/leds.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/3.0/leds.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -1,5 +1,5 @@
 \ See license at end of file
-purpose: Driver/selftest for OLPC XO-1.75 LEDs
+purpose: Driver/selftest for OLPC XO-3.0 LEDs
 
 0 0  " 0"  " /" begin-package
 0 0 reg  \ So test-all will run the test
@@ -8,16 +8,10 @@
 : close  ( -- )  ;
 
 : selftest  ( -- )
-    ." Flashing LEDs" cr
-
-\   d# 10 0 do  ols-led-on d# 200 ms ols-led-off d# 200 ms  loop
-\   ols-led-ec-control
-\   ols-assy-mode-on
+   ." Flashing LEDs" cr
 
    " /wlan:quiet" test-dev  " /wlan:quiet" test-dev  \ Twice for longer flashing
 
-\   ols-assy-mode-off
-
    confirm-selftest?
 ;
 

Modified: cpu/arm/olpc/3.0/olpc.bth
==============================================================================
--- cpu/arm/olpc/3.0/olpc.bth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/3.0/olpc.bth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -165,7 +165,7 @@
 /rom h# 40 - ofd @ fseek
 h# 10 buffer: signature
 signature h# 10 blank
-machine-signature count   signature         swap move
+signature$  signature  swap move
 " ${FW_VERSION}" expand$  signature     6 + swap move
 " ${FW_PREFIX}${FW_MAJOR}" expand$  signature d# 13 + swap move
 signature h# 10  ofd @ fputs

Modified: cpu/arm/olpc/3.0/switches.fth
==============================================================================
--- cpu/arm/olpc/3.0/switches.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/3.0/switches.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -1,6 +1,8 @@
 \ See license at end of file
 purpose: Driver/selftest for OLPC lid and ebook switches
 
+\ The XO-3.0 has no switches, but we need the device node
+\ because the suspend/resume test gets added to that node later.
 0 0  " 0"  " /" begin-package
 " switches" device-name
 0 0 reg  \ So test-all will run the test

Modified: cpu/arm/olpc/3.0/usb.fth
==============================================================================
--- cpu/arm/olpc/3.0/usb.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/3.0/usb.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -1,32 +1,14 @@
 purpose: Platform-specific USB elaborations
 \ See license at end of file
 
-0 0  " d4208000"  " /" begin-package  \ USB OTG Host Controller
-   h# 200 constant /regs
-   my-address my-space /regs reg
-   : my-map-in  ( len -- adr )
-      my-space swap  " map-in" $call-parent  h# 100 +  ( adr )
-   ;
-   : my-map-out  ( adr len -- )  swap h# 100 - swap " map-out" $call-parent  ;
-   " /pmua" encode-phandle 5 encode-int encode+ " clocks" property
-   d# 44 " interrupts" integer-property
-
-   false constant has-dbgp-regs?
-   false constant needs-dummy-qh?
-   : grab-controller  ( config-adr -- error? )  drop false  ;
-   fload ${BP}/dev/usb2/hcd/ehci/loadpkg.fth
-\  false to delay?  \ No need for a polling delay on this platform
-   : otg-set-host-mode  3 h# a8 ehci-reg!  ;  \ Force host mode
-   ' otg-set-host-mode to set-host-mode
-
+dev /usb at d4208000
    \ The Marvell EHCI can handle low and full speed devices directly,
    \ without needing a UHCI or OHCI companion controller
    ' make-port-node to handle-ls-device
    ' make-port-node to handle-fs-device
+device-end
 
-   : sleep  ( -- )  true to first-open?  ;
-   : wake  ( -- )  ;
-end-package
+fload ${BP}/cpu/arm/mmp2/ulpiphy.fth
 
 0 0  " f0003000"  " /" begin-package  \ USB Host Controller 1 - ULPI
    h# 200 constant /regs
@@ -52,182 +34,21 @@
 
 \ usb-power-on is unnecessary on initial boot, as CForth turns on the
 \ USB power during its GPIO setup.
-: usb-power-on  ( -- )
+: (usb-power-on)  ( -- )
    d# 126 gpio-clr  \ OTG 5V on
    d# 127 gpio-clr  \ ULPI 5V on
 ;
-: reset-usb-hub  ( -- )
+' (usb-power-on) to usb-power-on
+
+: (reset-usb-hub)  ( -- )
    d# 146 gpio-clr  d# 10 ms  d# 146 gpio-set  \ Resets ULPI hub
    ulpi-clock-on
    ulpi-clock-select
    ulpi-on
 ;
-
-: init-usb  ( -- )
-   h# 9 h# 5c pmua!  \ Enable clock to USB block
-   reset-usb-hub
-   init-usb-phy
-;
-
-stand-init: Init USB Phy
-\  usb-power-on   \ The USB power is turned on early, when CForth sets up GPIOs
-   init-usb
-;
-
-d# 350 config-int usb-delay  \ Milliseconds to wait before probing hub ports
+' (reset-usb-hub) to reset-usb-hub
 
 devalias otg  /usb at d4208000       \ USB OTG (micro) connector
 devalias usba /usb at f0003000       \ USB-A connector
 devalias o    /usb at d4208000/disk  \ Disk on USB OTG (micro) connector
 devalias u    /usb at f0003000/disk  \ Disk on USB-A connector
-
-\ Like $show-devs, but ignores pagination keystrokes
-: $nopage-show-devs  ( nodename$ -- )
-   ['] exit? behavior >r  ['] false to exit?
-   $show-devs
-   r> to exit?
-;
-
-\ Restrict selftest to external USB ports 1,2,3
-\ dev /  3 " usb-test-ports" integer-property  dend
-
-: (probe-usb2)  ( -- )
-   " device_type" get-property  if  exit  then
-[ifdef] use-usb-debug-port
-   \ I haven't figured out how to turn on the EHCI cleanly
-   \ when the Debug Port is running
-   dbgp-off
-[then]
-   get-encoded-string  " ehci" $=  if
-      pwd$ open-dev  ?dup  if  close-dev  then
-   then
-;
-: (show-usb2)  ( -- )
-   " device_type" get-property  if  exit  then
-   get-encoded-string  " ehci" $=  if
-      pwd$ $nopage-show-devs
-   then
-;
-
-true value first-usb-probe?
-: (silent-probe-usb)  ( -- )  " /" ['] (probe-usb2) scan-subtree  ;
-: silent-probe-usb  ( -- )
-   (silent-probe-usb)
-   report-disk report-net report-keyboard
-;
-: probe-usb  ( -- )
-   first-usb-probe?  if
-      false to first-usb-probe?
-      \ Initial probe to awaken the hub
-      (silent-probe-usb)
-      \ A little delay to let slow devices like USB scanner wake up
-      d# 150 ms
-   then
-   silent-probe-usb
-
-   ." USB devices:" cr
-   " /" ['] (show-usb2) scan-subtree
-
-;
-alias p2 probe-usb
-
-0 value usb-keyboard-ih
-0 value otg-keyboard-ih
-
-: attach-usb-keyboard  ( -- )
-   " usb-keyboard" expand-alias  if   ( devspec$ )
-      drop " /usb"  comp  0=  if      ( )
-         " usb-keyboard" open-dev to usb-keyboard-ih
-         usb-keyboard-ih add-input
-      then
-   else                               ( devspec$ )
-      2drop
-   then
-
-   " otg/keyboard" expand-alias  if   ( devspec$ )
-      open-dev to otg-keyboard-ih
-      otg-keyboard-ih add-input
-   else
-      2drop
-   then
-;
-
-: detach-usb-keyboard  ( -- )
-   usb-keyboard-ih  if
-      usb-keyboard-ih remove-input
-      usb-keyboard-ih close-dev
-      0 to usb-keyboard-ih
-   then
-;
-
-: ?usb-keyboard  ( -- )
-   attach-usb-keyboard
-;
-
-: usb-quiet  ( -- )
-   detach-usb-keyboard
-   " /usb at f0003000" " reset-usb" execute-device-method drop
-   " /usb at d4208000" " reset-usb" execute-device-method drop
-;
-
-: suspend-usb  ( -- )
-   detach-usb-keyboard
-   " /usb" " sleep" execute-device-method drop
-;
-: has-children?   ( devspec$ -- flag )
-   locate-device  if  false  else  child 0<>  then
-;
-: any-usb-devices?  ( -- flag )  " /usb/hub" has-children?  ;
-: resume-usb  ( -- )
-   init-usb
-   " /usb" " wake" execute-device-method drop
-   any-usb-devices?  if
-      d# 2000 ms  \ USB misses devices if you probe too soon
-   then
-   silent-probe-usb
-   attach-usb-keyboard
-;
-
-\ Unlink every node whose phys.hi component matches port
-: port-match?  ( port -- flag )
-   get-unit  if  drop false exit  then
-   get-encoded-int =
-;
-: rm-usb-children  ( port -- )
-   device-context? 0=  if  drop exit  then
-   also                             ( port )
-   'child                           ( port prev )
-   first-child  begin while         ( port prev )
-      over port-match?  if          ( port prev )
-         'peer link@  over link!    ( port prev )      \ Disconnect
-      else                          ( port prev )
-         drop 'peer                 ( port prev' )
-      then                          ( port prev )
-   next-child  repeat               ( port prev )
-   2drop                            ( )
-   previous definitions
-;
-
-\ LICENSE_BEGIN
-\ Copyright (c) 2010 FirmWorks
-\ 
-\ 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/addrs.fth
==============================================================================
--- cpu/arm/olpc/addrs.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/addrs.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -44,16 +44,6 @@
 
 h#  20000 constant dropin-offset   \ Offset to dropin driver area in SPI FLASH
 
-[ifdef] use-flash-nvram
-h# d.0000 constant nvram-offset
-[then]
-
-h#  e.0000 constant mfg-data-offset     \ Offset to manufacturing data area in SPI FLASH
-h#  f.0000 constant mfg-data-end-offset \ Offset to end of manufacturing data area in SPI FLASH
-h#  f.ffd8 constant crc-offset
-
-h# 10.0000 constant /rom           \ Total size of SPI FLASH
-
 \ SRAM usage
 
 sram-pa  constant sram-va

Modified: cpu/arm/olpc/boardrev.fth
==============================================================================
--- cpu/arm/olpc/boardrev.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/boardrev.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -4,7 +4,7 @@
 0 value board-revision
 
 \ Constructs a string like "B4" or "preB4" or "postB4"
-: model-name$  ( -- model$ )
+: model-version$  ( -- model$ )
    board-revision  h# 10 /mod               ( minor major )
    swap  dup 8 =  if                        ( major minor )
       drop " "                              ( major prefix$ )

Modified: cpu/arm/olpc/build-fw.fth
==============================================================================
--- cpu/arm/olpc/build-fw.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/build-fw.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -7,6 +7,25 @@
 \ ' $report-name is include-hook
 \ ' noop is include-hook
 
+: init-stuff
+   acgr-clocks-on
+   init-timers
+   init-twsi
+;
+warning @ warning off
+: stand-init-io
+   stand-init-io
+   init-stuff
+;
+warning !
+
+dev /
+   model$  model
+   " OLPC" encode-string  " architecture" property
+\ The clock frequency of the root bus may be irrelevant, since the bus is internal to the SOC
+\    d# 1,000,000,000 " clock-frequency" integer-property
+device-end
+
 fload ${BP}/cpu/arm/olpc/fbnums.fth
 fload ${BP}/cpu/arm/olpc/fbmsg.fth
 
@@ -80,27 +99,6 @@
    decode-int nip nip  d# 1000000 /  
 ;
 
-
-fload ${BP}/cpu/arm/mmp2/pmua.fth
-fload ${BP}/cpu/arm/mmp2/apbc.fth
-fload ${BP}/cpu/arm/mmp2/irq.fth
-fload ${BP}/cpu/arm/mmp2/timer.fth
-fload ${BP}/cpu/arm/mmp2/twsi.fth
-fload ${BP}/cpu/arm/mmp2/mfpr.fth
-fload ${BP}/cpu/arm/mmp2/gpio.fth
-
-: init-stuff
-   acgr-clocks-on
-   init-timers
-   init-twsi
-;
-warning @ warning off
-: stand-init-io
-   stand-init-io
-   init-stuff
-;
-warning !
-
 fload ${BP}/cpu/arm/mmp2/watchdog.fth	\ reset-all using watchdog timer
 
 0 0  " d4018000"  " /" begin-package  \ UART3
@@ -182,34 +180,11 @@
 
 false constant tethered?                     \ We only support reprogramming our own FLASH
 
-[ifdef] olpc-cl3
-: hdd-led-off     ( -- )  ;
-: hdd-led-on      ( -- )  ;
-: hdd-led-toggle  ( -- )  ;
-[else]
-: hdd-led-off     ( -- )  d# 10 gpio-clr  ;
-: hdd-led-on      ( -- )  d# 10 gpio-set  ;
-: hdd-led-toggle  ( -- )  d# 10 gpio-pin@  if  hdd-led-off  else  hdd-led-on  then  ;
-[then]
-
 fload ${BP}/cpu/arm/olpc/bbedi.fth
 fload ${BP}/cpu/arm/olpc/edi.fth
 
 load-base constant flash-buf
 
-
-[ifdef] cl2-a1
-h# 10000 value /ec-flash
-char 3 value expected-ec-version
-[else]
-h# 8000 value /ec-flash
-: clx-touch?  ( -- )  board-revision h# 3a18 >=  ;
-\+ olpc-cl2 char 4 value expected-ec-version
-\+ olpc-cl3 char 5 value expected-ec-version
-[then]
-
-[ifndef] cl2-a1
-[then]
 fload ${BP}/cpu/arm/olpc/ecflash.fth
 
 : ec-spi-reprogrammed   ( -- )
@@ -250,122 +225,23 @@
    d# 26 " interrupts" integer-property
 end-package
 
-0 0  " d420b000"  " /" begin-package
-   " display" name
-   my-address my-space h# 1000 reg
-
-   " /pmua" encode-phandle 1 encode-int encode+ " clocks" property
-   d# 41 " interrupts" integer-property
-
-[ifdef] olpc-cl3
-   fload ${BP}/cpu/arm/olpc/3.0/lcdcfg.fth
-[else]
-   fload ${BP}/cpu/arm/olpc/1.75/lcdcfg.fth
-[then]
-
-   fload ${BP}/cpu/arm/olpc/lcd.fth
-[ifndef] olpc-cl3
-   fload ${BP}/dev/olpc/dcon/mmp2dcon.fth        \ DCON control
-[then]
-   defer convert-color ' noop to convert-color
-   defer pixel*
-   defer pixel+
-   defer pixel!
-
-   : color!  ( r g b index -- )  4drop  ;
-   : color@  ( index -- r g b )  drop 0 0 0  ;
-
-   fload ${BP}/dev/video/common/rectangle16.fth     \ Rectangular graphics
-
-   depth d# 24 =  [if]
-      code 3a+  ( adr n -- n' )
-         pop  r0,sp
-         inc  tos,#3
-         add  tos,tos,r0
-      c;
-      code rgb888!  ( n adr -- )
-         pop   r0,sp
-         strb  r0,[tos]
-         mov   r0,r0,lsr #8
-         strb  r0,[tos,#1]
-         mov   r0,r0,lsr #8
-         strb  r0,[tos,#2]
-         pop   tos,sp
-      c;
-      ' 3* to pixel*
-      ' 3a+ to pixel+
-      ' rgb888! to pixel!
-      ' noop to convert-color
-   [else]
-      ' /w* to pixel*
-      ' wa+ to pixel+
-      ' w!  to pixel!
-      ' argb>565-pixel to convert-color
-   [then]
-
-   : display-on
-      init-xo-display  \ Turns on DCON etc
-      frame-buffer-adr  hdisp vdisp * >bytes  h# ffffffff lfill
-      init-lcd
-   ;
-   : map-frame-buffer  ( -- )
-      \ We use fb-mem-va directly instead of calling map-in on the physical address
-      \ because the physical address changes with the total memory size.  The early
-      \ assembly language startup code establishes the mapping.
-      fb-mem-va to frame-buffer-adr
-   ;
-   " display"                      device-type
-   " ISO8859-1" encode-string    " character-set" property
-   0 0  encode-bytes  " iso6429-1983-colors"  property
-
-   \ Used as temporary storage for images by $get-image
-   : graphmem  ( -- adr )  dimensions * pixel*  fb-mem-va +  ;
-
-   : display-install  ( -- )
-      map-frame-buffer
-      display-on
-      default-font set-font
-      width  height                           ( width height )
-      over char-width / over char-height /    ( width height rows cols )
-      /scanline depth fb-install              ( )
-   ;
-
-   : display-remove  ( -- )  ;
-   : display-selftest  ( -- failed? )  false  ;
-
-   ' display-install  is-install
-   ' display-remove   is-remove
-   ' display-selftest is-selftest
-end-package
-
-devalias screen /display
-   
-[ifdef] olpc-cl3
-create cp881-16  " ${BP}/ofw/termemu/cp881-16.obf" $file,
-' cp881-16 to romfont
-[else]
-devalias keyboard /keyboard
-
-create 15x30pc  " ${BP}/ofw/termemu/15x30pc.psf" $file,
-' 15x30pc to romfont
-[then]
-
+fload ${BP}/cpu/arm/olpc/lcd.fth
 fload ${BP}/cpu/arm/olpc/sdhci.fth
 
-[ifndef] cl2-a1
-: boot-dev-gpio#  ( -- n )  clx-touch?  if  2  else  d# 56  then  ;
-fload ${BP}/cpu/arm/olpc/emmc.fth
-[then]
-
-devalias int /sd/disk at 3
-devalias ext /sd/disk at 1
-devalias net /wlan  \ XXX should report-net in case of USB Ethernet
+devalias net /wlan
 
 fload ${BP}/dev/olpc/kb3700/spicmd.fth           \ EC SPI Command Protocol
 
-\- olpc-cl3  fload ${BP}/cpu/arm/olpc/spcmd.fth   \ Security Processor communication protocol
+[ifdef] has-sp-kbd
+fload ${BP}/cpu/arm/olpc/spcmd.fth   \ Security Processor communication protocol
+devalias keyboard /ap-sp/keyboard
+devalias mouse    /ap-sp/mouse
+[then]
 
-: wlan-reset  ( -- )  d# 58 gpio-clr  d# 20 ms  d# 58 gpio-set  ;
+: wlan-reset  ( -- )  wlan-reset-gpio# gpio-clr  d# 20 ms  wlan-reset-gpio# gpio-set  ;
+
+fload ${BP}/ofw/core/fdt.fth
+fload ${BP}/cpu/arm/linux.fth
 
 \ Create the alias unless it already exists
 : $?devalias  ( alias$ value$ -- )
@@ -411,14 +287,7 @@
 ;
 
 fload ${BP}/cpu/arm/marvell/utmiphy.fth
-
-fload ${BP}/ofw/core/fdt.fth
-fload ${BP}/cpu/arm/linux.fth
-
-\+ olpc-cl2 fload ${BP}/cpu/arm/olpc/1.75/usb.fth
-\+ olpc-cl3 fload ${BP}/cpu/arm/mmp2/ulpiphy.fth
-\+ olpc-cl3 fload ${BP}/cpu/arm/olpc/3.0/usb.fth
-\+ olpc-cl4 fload ${BP}/cpu/arm/olpc/cl4/usb.fth
+fload ${BP}/cpu/arm/olpc/usb.fth
 
 fload ${BP}/dev/olpc/mmp2camera/loadpkg.fth
 
@@ -437,12 +306,10 @@
 : stand-init
    stand-init
    root-device
-      model-name$   2dup model     ( name$ )
+      model-version$   2dup model     ( name$ )
       " OLPC " encode-bytes  2swap encode-string  encode+  " banner-name" property
       board-revision " board-revision-int" integer-property
-\+ olpc-cl2  " olpc,xo-1.75" " compatible" string-property
-\+ olpc-cl3  " olpc,xo-3.0"  " compatible" string-property
-\+ olpc-cl4  " olpc,xo-cl4"  " compatible" string-property
+      compatible$  " compatible" string-property
 
       \ The "1-" removes the null byte
       " SN" find-tag  if  1-  else  " Unknown"  then  " serial-number" string-property
@@ -493,8 +360,7 @@
 : olpc-mapped-limit  ( -- adr )  dma-mem-va >physical  ;
 ' olpc-mapped-limit to mapped-limit
 
-\+ olpc-cl2 d#  9999 to arm-linux-machine-type  \ XO-1.75
-\+ olpc-cl3 d# 10000 to arm-linux-machine-type  \ XO-3
+machine-type to arm-linux-machine-type
 
 \ Add a tag describing the linear frame buffer
 : mmp-fb-tag,  ( -- )
@@ -542,8 +408,8 @@
 false to stand-init-debug?
 \ true to stand-init-debug?
 
-: sec-trg   ( -- )      d# 73 gpio-set  ;  \ rising edge latches SPI_WP# low
-: sec-trg?  ( -- bit )  d# 73 gpio-pin@  ;
+: sec-trg   ( -- )      sec-trg-gpio# gpio-set  ;  \ rising edge latches SPI_WP# low
+: sec-trg?  ( -- bit )  sec-trg-gpio# gpio-pin@  ;
 
 alias ec-indexed-io-off sec-trg
 alias ec-indexed-io-off? sec-trg?
@@ -567,11 +433,7 @@
    false
 ;
 
-[ifdef] olpc-cl3
-false value rotate-button?
-[else]
-: rotate-button?  ( -- flag )  d# 15 gpio-pin@ 0=  ;
-[then]
+defer rotate-button?  ' false to rotate-button?
 
 warning @  warning off 
 : init
@@ -632,9 +494,6 @@
 fload ${BP}/cpu/arm/mmp2/clocks.fth
 fload ${BP}/cpu/arm/olpc/banner.fth
 
-\- olpc-cl3  devalias keyboard /ap-sp/keyboard
-\- olpc-cl3  devalias mouse    /ap-sp/mouse
-
 : console-start  ( -- )
    install-mux-io
    cursor-off
@@ -687,54 +546,12 @@
 
 code halt  ( -- )  wfi   c;
 
-\+ olpc-cl2 fload ${BP}/cpu/arm/olpc/1.75/switches.fth \ Lid and ebook switches
-\+ olpc-cl3 fload ${BP}/cpu/arm/olpc/3.0/switches.fth  \ Switches
-\+ olpc-cl4 fload ${BP}/cpu/arm/olpc/cl4/switches.fth  \ Lid and ebook switches
-
 fload ${BP}/cpu/arm/mmp2/rtc.fth       \ Internal RTC, used for wakeups
 
-\+ olpc-cl2 fload ${BP}/cpu/arm/olpc/1.75/leds.fth     \ LEDs
-\+ olpc-cl3 fload ${BP}/cpu/arm/olpc/3.0/leds.fth      \ LEDs
-\+ olpc-cl4 fload ${BP}/cpu/arm/olpc/cl4/leds.fth      \ LEDs
-
 fload ${BP}/cpu/x86/pc/olpc/via/factory.fth  \ Manufacturing tools
 
 fload ${BP}/cpu/arm/olpc/accelerometer.fth
 
-[ifndef] olpc-cl3
-fload ${BP}/cpu/arm/olpc/1.75/compass.fth
-[then]
-
-\ Suppress long memory test at final test stage
-dev /memory
-0 value old-diag-switch?
-: not-final-test?  ( -- flag )
-   final-test?   if  false exit  then
-   smt-test?  if  false exit  then
-   old-diag-switch?
-;
-warning @ warning off
-: selftest  ( -- error? )
-   diag-switch? to old-diag-switch?
-   not-final-test?  to diag-switch?
-   selftest
-   old-diag-switch? to diag-switch?
-;
-warning !
-device-end
-
-\ Add suspend resume test except in final
-dev /switches
-warning @ warning off
-: selftest  ( -- error? )
-   final-test?  0=  if
-      s3-selftest  if  true exit  then
-   then
-   selftest
-;
-warning !
-device-end
-
 \ When reprogramming this machine's SPI FLASH, rebooting the EC is unnecessary 
 : no-kbc-reboot  ['] noop to spi-reprogrammed  ;
 : kbc-on ;
@@ -749,76 +566,9 @@
    : close ;
 end-package
 
-\ it seems to be difficult to get SoC wakeups from the keypad controller,
-\ so we set them up as gpio, instead.
-[ifdef] use_mmp2_keypad_control
-fload ${BP}/cpu/arm/mmp2/keypad.fth
-[ifdef] notdef  \ CForth turns on the keypad; resetting it makes it not work
-stand-init: keypad
-   keypad-on
-   8 keypad-direct-mode
-;
-[then]
-: keypad-bit  ( n keypad out-mask key-mask -- n' keypad )
-   third invert  and  if    ( n keypad out-mask )
-      rot or swap           ( n' keypad )
-   else                     ( n keypad out-mask )
-      drop                  ( n keypad )
-   then                     ( n' keypad )
-;
-[then]
-
 fload ${BP}/cpu/x86/pc/olpc/gamekeynames.fth
 
-[ifdef] cl2-a1
-: game-key@  ( -- n )
-   0                                        ( n )
-   d# 16 gpio-pin@ 0=  if  h#  80 or  then  \ O
-   d# 17 gpio-pin@ 0=  if  h#  02 or  then  \ Check
-   d# 18 gpio-pin@ 0=  if  h# 100 or  then  \ X
-   d# 19 gpio-pin@ 0=  if  h#  01 or  then  \ Square
-   d# 20 gpio-pin@ 0=  if  h#  40 or  then  \ Rotate
-;
-[then]
-
-[ifdef] olpc-cl3
-: game-key@  ( -- n )
-   0
-;
-[then]
-
-[ifndef] game-key@
-   [ifdef] use_mmp2_keypad_control
-: game-key@  ( -- n )
-   0                                        ( n )
-   d# 15 gpio-pin@ 0=  if  button-rotate or  then   ( n )
-   scan-keypad                              ( n keypad )
-   button-o       h# 01  keypad-bit         ( n' keypad )
-   button-check   h# 02  keypad-bit         ( n' keypad )
-   button-x       h# 04  keypad-bit         ( n' keypad )
-   button-square  h# 08  keypad-bit         ( n' keypad )
-   rocker-up      h# 10  keypad-bit         ( n' keypad )
-   rocker-right   h# 20  keypad-bit         ( n' keypad )
-   rocker-down    h# 40  keypad-bit         ( n' keypad )
-   rocker-left    h# 80  keypad-bit         ( n' keypad )
-   drop                                     ( n )
-;
-   [else]
-: game-key@  ( -- n )
-   0                                        ( n )
-   d# 15 gpio-pin@ 0=  if  button-rotate  or  then
-   d# 16 gpio-pin@ 0=  if  button-o       or  then
-   d# 17 gpio-pin@ 0=  if  button-check   or  then
-   d# 18 gpio-pin@ 0=  if  button-x       or  then
-   d# 19 gpio-pin@ 0=  if  button-square  or  then
-   d# 20 gpio-pin@ 0=  if  rocker-up      or  then
-   d# 21 gpio-pin@ 0=  if  rocker-right   or  then
-   d# 22 gpio-pin@ 0=  if  rocker-down    or  then
-   d# 23 gpio-pin@ 0=  if  rocker-left    or  then
-;
-   [then]
-
-[then]
+defer game-key@  ' 0 to game-key@   \ Implementation will be loaded later
 
 fload ${BP}/cpu/x86/pc/olpc/gamekeys.fth
 
@@ -826,7 +576,7 @@
 
 fload ${BP}/cpu/x86/pc/olpc/disptest.fth
 
-[ifndef] olpc-cl3
+[ifdef] has-sp-kbd
 dev /ap-sp/keyboard
 fload ${BP}/dev/olpc/keyboard/selftest.fth   \ Keyboard diagnostic
 device-end
@@ -841,10 +591,9 @@
 fload ${BP}/cpu/x86/pc/olpc/gridmap.fth      \ Gridded display tools
 fload ${BP}/cpu/x86/pc/olpc/via/copynand.fth
 
-\+ olpc-cl2 fload ${BP}/cpu/arm/olpc/rm3150-touchscreen.fth    \ Touchscreen driver and diagnostic
-\+ olpc-cl3 fload ${BP}/cpu/arm/olpc/exc7200-touchscreen.fth    \ Touchscreen driver and diagnostic
-\+ olpc-cl3 fload ${BP}/dev/softkeyboard.fth                    \ On-screen keyboard
-\+ olpc-cl4 fload ${BP}/cpu/arm/olpc/nn-touchscreen.fth        \ Touchscreen driver and diagnostic
+\- use-screen-kbd devalias keyboard /keyboard
+\+ use-screen-kbd fload ${BP}/dev/softkeyboard.fth             \ On-screen keyboard
+
 fload ${BP}/cpu/arm/olpc/roller.fth     \ Accelerometer test
 
 \ fload ${BP}/cpu/arm/olpc/pinch.fth  \ Touchscreen gestures
@@ -999,7 +748,7 @@
    game-key-mask =  if  protect-fw try-fs-update  then
 ;
 
-[ifdef] olpc-cl3
+[ifdef] use-screen-kbd
 0 value screen-kbd-ih
 : open-screen-keyboard  ( -- )
    " /touchscreen/keyboard" open-dev to screen-kbd-ih
@@ -1045,9 +794,6 @@
 [then]
 
 fload ${BP}/cpu/arm/olpc/testitems.fth
-\+ olpc-cl2 fload ${BP}/cpu/arm/olpc/1.75/testinstructions.fth
-\+ olpc-cl3 fload ${BP}/cpu/arm/olpc/3.0/testinstructions.fth
-\+ olpc-cl4 fload ${BP}/cpu/arm/olpc/cl4/testinstructions.fth
 
 : startup  ( -- )
    standalone?  0=  if  exit  then
@@ -1080,7 +826,7 @@
 	 update-ec-flash
       then
    then
-\+ olpc-cl3  open-hotspot
+\+ use-screen-kbd  open-hotspot
 
    install-alarm
    ?sound
@@ -1088,7 +834,7 @@
    ?games
 
    ['] false to interrupt-auto-boot?
-\+ olpc-cl3  ?text-on
+\+ use-screen-kbd  ?text-on
 [ifdef] probe-usb
    factory-test?  if  d# 1000 ms  then  \ Extra USB probe delay in the factory
    probe-usb
@@ -1099,7 +845,7 @@
 
    interpreter-init
 
-\+ olpc-cl3  ?text-on
+\+ use-screen-kbd  ?text-on
    ?diags
    ?fs-update
 
@@ -1107,16 +853,16 @@
    unblock-exceptions
    ['] (interrupt-auto-boot?) to interrupt-auto-boot?
 
-\+ olpc-cl3  ?text-on
+\+ use-screen-kbd  ?text-on
    ?usb-keyboard
 
    auto-banner?  if  banner  then
 
-\+ olpc-cl3  ?text-on
+\+ use-screen-kbd  ?text-on
    auto-boot
-\+ olpc-cl3  close-hotspot
+\+ use-screen-kbd  close-hotspot
 
-\+ olpc-cl3  open-screen-keyboard  banner
+\+ use-screen-kbd  open-screen-keyboard  banner
 
    frozen? text-on? 0=  and  ( no-banner? )
    unfreeze visible cursor-on ( no-banner? )
@@ -1149,19 +895,6 @@
    " devalias fsdisk //null" evaluate
 ;
 
-tag-file @ fclose  tag-file off
-my-self [if]
-   ." WARNING: my-self is not 0" cr
-   bye
-[then]
-
-.( --- Saving fw.dic ...)
-" fw.dic" $save-forth cr
-
-fload ${BP}/cpu/arm/mmp2/rawboot.fth
-
-.( --- Saving fw.img --- )  cr " fw.img" $save-rom
-
 \ LICENSE_BEGIN
 \ Copyright (c) 2010 FirmWorks
 \ 

Modified: cpu/arm/olpc/emmc.fth
==============================================================================
--- cpu/arm/olpc/emmc.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/emmc.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -39,15 +39,13 @@
    h# 18c2   d# 167 af!  \ eMMC_D3
    h# 18c2   d# 168 af!  \ eMMC_D1
 
-   d# 149 gpio-set     \ Release eMMC_RST#
+   emmc-rst-gpio# gpio-set     \ Release eMMC_RST#
 
-   d# 34 gpio-set  \ This is for the case where the eMMC power is rewired to the WLAN
+   en-wlan-pwr-gpio# gpio-set  \ This is for the case where the eMMC power is rewired to the WLAN
 ;
-\ Says COMM - is RST#
-\ Says RESET - is CMD
 
 stand-init:
-   boot-dev-gpio# gpio-pin@  if
+   boot-dev-sel-gpio# gpio-pin@  if
       select-emmc
    else
       select-internal-sd

Added: cpu/arm/olpc/gpio-gamekeys.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/olpc/gpio-gamekeys.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -0,0 +1,16 @@
+: gpio-game-key@  ( -- n )
+   0                                        ( n )
+   rotate-gpio# gpio-pin@ 0=  if  button-rotate  or  then
+   d# 16 gpio-pin@ 0=  if  button-o       or  then
+   d# 17 gpio-pin@ 0=  if  button-check   or  then
+   d# 18 gpio-pin@ 0=  if  button-x       or  then
+   d# 19 gpio-pin@ 0=  if  button-square  or  then
+   d# 20 gpio-pin@ 0=  if  rocker-up      or  then
+   d# 21 gpio-pin@ 0=  if  rocker-right   or  then
+   d# 22 gpio-pin@ 0=  if  rocker-down    or  then
+   d# 23 gpio-pin@ 0=  if  rocker-left    or  then
+;
+' gpio-game-key@ to game-key@
+
+: gpio-rotate-button?  ( -- flag )  rotate-gpio# gpio-pin@ 0=  ;
+' gpio-rotate-button? to rotate-button?

Added: cpu/arm/olpc/keypad-gamekeys.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/olpc/keypad-gamekeys.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -0,0 +1,39 @@
+\ This file is preserved only for historical interest.
+\ It's difficult to get SoC wakeups from the keypad controller,
+\ so we configure the game key inputs as GPIOs instead.
+
+fload ${BP}/cpu/arm/mmp2/keypad.fth
+
+[ifdef] notdef  \ CForth turns on the keypad; resetting it makes it not work
+stand-init: keypad
+   keypad-on
+   8 keypad-direct-mode
+;
+[then]
+
+: keypad-bit  ( n keypad out-mask key-mask -- n' keypad )
+   third invert  and  if    ( n keypad out-mask )
+      rot or swap           ( n' keypad )
+   else                     ( n keypad out-mask )
+      drop                  ( n keypad )
+   then                     ( n' keypad )
+;
+
+: gpio-rotate-button?  ( -- flag )  rotate-gpio# gpio-pin@ 0=  ;
+' gpio-rotate-button? to rotate-button?
+
+: keypad-game-key@  ( -- n )
+   0                                        ( n )
+   gpio-rotate-button?  if  button-rotate or  then   ( n )
+   scan-keypad                              ( n keypad )
+   button-o       h# 01  keypad-bit         ( n' keypad )
+   button-check   h# 02  keypad-bit         ( n' keypad )
+   button-x       h# 04  keypad-bit         ( n' keypad )
+   button-square  h# 08  keypad-bit         ( n' keypad )
+   rocker-up      h# 10  keypad-bit         ( n' keypad )
+   rocker-right   h# 20  keypad-bit         ( n' keypad )
+   rocker-down    h# 40  keypad-bit         ( n' keypad )
+   rocker-left    h# 80  keypad-bit         ( n' keypad )
+   drop                                     ( n )
+;
+' keypad-game-key@ to game-key@

Modified: cpu/arm/olpc/lcd.fth
==============================================================================
--- cpu/arm/olpc/lcd.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/lcd.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -1,3 +1,48 @@
+purpose: Display driver for OLPC ARM/MMP platforms
+\ See license at end of file
+
+0 0  " d420b000"  " /" begin-package
+   " display" name
+   my-address my-space h# 1000 reg
+
+   " /pmua" encode-phandle 1 encode-int encode+ " clocks" property
+   d# 41 " interrupts" integer-property
+
+h# 40001102 value clkdiv  \ Display Clock 1 / 2 -> 56.93 MHz
+h# 00000700 value pmua-disp-clk-sel  \ PLL1 / 7 -> 113.86 MHz 
+
+d#    8 value hsync  \ Sync width
+d# 1200 value hdisp  \ Display width
+d# 1256 value htotal \ Display + FP + Sync + BP
+d#   24 value hbp    \ Back porch
+
+d#    3 value vsync  \ Sync width
+d#  900 value vdisp  \ Display width
+d#  912 value vtotal \ Display + FP + Sync + BP
+d#    5 value vbp    \ Back porch
+
+: hfp  ( -- n )  htotal hdisp -  hsync -  hbp -  ;  \ 24
+: vfp  ( -- n )  vtotal vdisp -  vsync -  vbp -  ;  \ 4
+
+2 value #lanes
+2 value bytes/pixel
+d# 16 value bpp
+
+0 [if]  \ 24bpp parameters
+3 to #lanes
+3 to bytes/pixel
+d# 24 to bpp
+[then]
+
+: >bytes   ( pixels -- chunks )  bytes/pixel *  ;
+: >chunks  ( pixels -- chunks )  >bytes #lanes /  ;
+
+alias width  hdisp
+alias height vdisp
+alias depth  bpp
+width >bytes constant /scanline  
+
+\ \+ olpc-cl3  fload ${BP}/cpu/arm/olpc/3.0/lcdcfg.fth
 
 : lcd@  ( offset -- l )  lcd-pa + io@  ;
 : lcd!  ( l offset -- )  lcd-pa + io!  ;
@@ -227,3 +272,113 @@
    saved-mode h# 190 lcd!
    cursor /cursor 0  cursor-sram-write
 ;
+
+   defer convert-color ' noop to convert-color
+   defer pixel*
+   defer pixel+
+   defer pixel!
+
+   : color!  ( r g b index -- )  4drop  ;
+   : color@  ( index -- r g b )  drop 0 0 0  ;
+
+   fload ${BP}/dev/video/common/rectangle16.fth     \ Rectangular graphics
+
+   depth d# 24 =  [if]
+      code 3a+  ( adr n -- n' )
+         pop  r0,sp
+         inc  tos,#3
+         add  tos,tos,r0
+      c;
+      code rgb888!  ( n adr -- )
+         pop   r0,sp
+         strb  r0,[tos]
+         mov   r0,r0,lsr #8
+         strb  r0,[tos,#1]
+         mov   r0,r0,lsr #8
+         strb  r0,[tos,#2]
+         pop   tos,sp
+      c;
+      ' 3* to pixel*
+      ' 3a+ to pixel+
+      ' rgb888! to pixel!
+      ' noop to convert-color
+   [else]
+      ' /w* to pixel*
+      ' wa+ to pixel+
+      ' w!  to pixel!
+      ' argb>565-pixel to convert-color
+   [then]
+
+   defer init-panel    ' noop to init-panel
+   defer bright!       ' drop to bright!
+   defer backlight-off ' noop to backlight-off
+   defer backlight-on  ' noop to backlight-on
+
+   : display-on
+      init-panel  \ Turns on DCON etc
+      frame-buffer-adr  hdisp vdisp * >bytes  h# ffffffff lfill
+      init-lcd
+   ;
+   : map-frame-buffer  ( -- )
+      \ We use fb-mem-va directly instead of calling map-in on the physical address
+      \ because the physical address changes with the total memory size.  The early
+      \ assembly language startup code establishes the mapping.
+      fb-mem-va to frame-buffer-adr
+   ;
+   " display"                      device-type
+   " ISO8859-1" encode-string    " character-set" property
+   0 0  encode-bytes  " iso6429-1983-colors"  property
+
+   \ Used as temporary storage for images by $get-image
+   : graphmem  ( -- adr )  dimensions * pixel*  fb-mem-va +  ;
+
+   : display-install  ( -- )
+      map-frame-buffer
+      display-on
+      default-font set-font
+      width  height                           ( width height )
+      over char-width / over char-height /    ( width height rows cols )
+      /scanline depth fb-install              ( )
+   ;
+
+   : display-remove  ( -- )  ;
+   : display-selftest  ( -- failed? )  false  ;
+
+   ' display-install  is-install
+   ' display-remove   is-remove
+   ' display-selftest is-selftest
+end-package
+
+devalias screen /display
+   
+[ifdef] use-small-font
+create cp881-16  " ${BP}/ofw/termemu/cp881-16.obf" $file,
+' cp881-16 to romfont
+[else]
+create 15x30pc  " ${BP}/ofw/termemu/15x30pc.psf" $file,
+' 15x30pc to romfont
+[then]
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2010 FirmWorks
+\ 
+\ 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/prefw.fth
==============================================================================
--- cpu/arm/olpc/prefw.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/prefw.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -42,13 +42,6 @@
 fload ${BP}/ofw/core/allocph1.fth	\ S Physical memory allocator
 fload ${BP}/ofw/core/availpm.fth	\ Available memory list
 
-dev /
-   " olpc,XO-1.75" model
-   " OLPC" encode-string  " architecture" property
-\ The clock frequency of the root bus may be irrelevant, since the bus is internal to the SOC
-\    d# 1,000,000,000 " clock-frequency" integer-property
-device-end
-
 : (cpu-arch  ( -- adr len )
    " architecture" root-phandle  get-package-property  drop
    get-encoded-string
@@ -229,6 +222,15 @@
 fload ${BP}/ofw/gui/loadmenu.fth
 \ fload ${BP}/ofw/gui/insticon.fth
 
+\ Marvell MMP low-level stuff
+fload ${BP}/cpu/arm/mmp2/pmua.fth
+fload ${BP}/cpu/arm/mmp2/apbc.fth
+fload ${BP}/cpu/arm/mmp2/irq.fth
+fload ${BP}/cpu/arm/mmp2/timer.fth
+fload ${BP}/cpu/arm/mmp2/twsi.fth
+fload ${BP}/cpu/arm/mmp2/mfpr.fth
+fload ${BP}/cpu/arm/mmp2/gpio.fth
+
 \ Uninstall the diag menu from the general user interface vector
 \ so exiting from emacs doesn't invoke the diag menu.
 ' quit to user-interface

Modified: cpu/arm/olpc/probemem.fth
==============================================================================
--- cpu/arm/olpc/probemem.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/probemem.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -56,7 +56,7 @@
       h# 2000.0000 +loop  \ h# 2000.0000 depends on L1 #ways
    h# 20 +loop       \ h# 20 is L1 line size
 
-   h# 10000 0  do    \ Loop over sets - h# 10000 is L2 #sets
+   l2-#sets 0  do    \ Loop over sets
       0 0  do        \ Loop over ways
 	 i j + 2+ clean&flush-d$-entry-way  \ Operate on L2 cache (2+)
       h# 2000.0000 +loop  \ h# 2000.0000 depends on L2 #ways

Modified: cpu/arm/olpc/rtc.fth
==============================================================================
--- cpu/arm/olpc/rtc.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/rtc.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -15,8 +15,8 @@
 
 [ifdef] cl2-a1
 : set-address  ( -- )
-   d# 97 to smb-clock-gpio#
-   d# 98 to smb-data-gpio#
+   rtc-scl-gpio# to smb-clock-gpio#
+   rtc-sda-gpio# to smb-data-gpio#
    h# d0 to smb-slave
 ;
 : rtc@  ( reg# -- byte )  set-address  smb-byte@  ;

Added: cpu/arm/olpc/save-fw.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/olpc/save-fw.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -0,0 +1,12 @@
+tag-file @ fclose  tag-file off
+my-self [if]
+   ." WARNING: my-self is not 0" cr
+   bye
+[then]
+
+.( --- Saving fw.dic ...)
+" fw.dic" $save-forth cr
+
+fload ${BP}/cpu/arm/mmp2/rawboot.fth
+
+.( --- Saving fw.img --- )  cr " fw.img" $save-rom

Modified: cpu/arm/olpc/sdhci.fth
==============================================================================
--- cpu/arm/olpc/sdhci.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/sdhci.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -17,26 +17,16 @@
    \ Slot:power_GPIO - 1:35, 2:34, 3:33
    : gpio-power-on  ( -- )
       sdhci-card-power-on
-\ The CL3 version below actually works for CL2 >= B1
-\+ olpc-cl2  d# 36 slot - gpio-set
-\+ olpc-cl3  slot 2 =  if  d# 34 gpio-set  then
+      slot 2 =  if  en-wlan-pwr-gpio# gpio-set  then
    ;
    ' gpio-power-on to card-power-on
 
    : gpio-power-off  ( -- )
-\+ olpc-cl2  d# 36 slot - gpio-clr
-\+ olpc-cl3  slot 2 =  if  d# 34 gpio-clr  then
+      slot 2 =  if  en-wlan-pwr-gpio# gpio-clr  then
       sdhci-card-power-off
    ;
    ' gpio-power-off to card-power-off
 
-\+ olpc-cl2   new-device
-\+ olpc-cl2      1 encode-int " reg" property
-\+ olpc-cl2      fload ${BP}/dev/mmc/sdhci/sdmmc.fth
-\+ olpc-cl2      fload ${BP}/dev/mmc/sdhci/selftest.fth
-\+ olpc-cl2      " external" " slot-name" string-property
-\+ olpc-cl2   finish-device
-
    new-device
       2 encode-int " reg" property
       fload ${BP}/dev/mmc/sdhci/mv8686/loadpkg.fth

Modified: cpu/arm/olpc/sound.fth
==============================================================================
--- cpu/arm/olpc/sound.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/arm/olpc/sound.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -227,8 +227,8 @@
 [then]
 
 \ Reset is unconnected on current boards
-\ : audio-reset  ( -- )  8 gpio-clr  ;
-\ : audio-unreset  ( -- )  8 gpio-set  ;
+\ : audio-reset  ( -- )  audio-reset-gpio# gpio-clr  ;
+\ : audio-unreset  ( -- )  audio-reset-gpio# gpio-set  ;
 : codec@  ( reg# -- w )  choose-smbus  1 2 twsi-get  swap bwjoin  ;
 : codec!  ( w reg# -- )  choose-smbus  >r wbsplit r> 3 twsi-out  ;
 : codec-i@  ( index# -- w )  h# 6a codec!  h# 6c codec@  ;
@@ -440,7 +440,7 @@
 ;
 : watch-dc  ( bias? -- )
    to mic-bias?
-   d# 143 gpio-set   \ DC input mode
+   mic-ac/dc-gpio# gpio-set   \ DC input mode
    h# 0400 h# 40 codec-clr
    open-in
    stereo  0 set-adc-gain  0 set-mic-gain

Added: cpu/arm/olpc/test-tweaks.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/olpc/test-tweaks.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -0,0 +1,29 @@
+\ Suppress long memory test at final test stage
+dev /memory
+0 value old-diag-switch?
+: not-final-test?  ( -- flag )
+   final-test?   if  false exit  then
+   smt-test?  if  false exit  then
+   old-diag-switch?
+;
+warning @ warning off
+: selftest  ( -- error? )
+   diag-switch? to old-diag-switch?
+   not-final-test?  to diag-switch?
+   selftest
+   old-diag-switch? to diag-switch?
+;
+warning !
+device-end
+
+\ Add suspend resume test except in final
+dev /switches
+warning @ warning off
+: selftest  ( -- error? )
+   final-test?  0=  if
+      s3-selftest  if  true exit  then
+   then
+   selftest
+;
+warning !
+device-end

Added: cpu/arm/olpc/usb.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/olpc/usb.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -0,0 +1,191 @@
+\ See license at end of file
+purpose: USB features common to most OLPC ARM platforms
+
+0 0  " d4208000"  " /" begin-package  \ USB Host Controller
+   h# 200 constant /regs
+   my-address my-space /regs reg
+   : my-map-in  ( len -- adr )
+      my-space swap  " map-in" $call-parent  h# 100 +  ( adr )
+   ;
+   : my-map-out  ( adr len -- )  swap h# 100 - swap " map-out" $call-parent  ;
+   " /pmua" encode-phandle 5 encode-int encode+ " clocks" property
+   d# 44 " interrupts" integer-property
+
+   false constant has-dbgp-regs?
+   false constant needs-dummy-qh?
+   : grab-controller  ( config-adr -- error? )  drop false  ;
+   fload ${BP}/dev/usb2/hcd/ehci/loadpkg.fth
+\  false to delay?  \ No need for a polling delay on this platform
+   : otg-set-host-mode  3 h# a8 ehci-reg!  ;  \ Force host mode
+   ' otg-set-host-mode to set-host-mode
+
+   : sleep  ( -- )  true to first-open?  ;
+   : wake  ( -- )  ;
+end-package
+
+defer usb-power-on  ' noop to usb-power-on
+defer reset-usb-hub ' noop to reset-usb-hub
+
+: init-usb  ( -- )
+   h# 9 h# 5c pmua!  \ Enable clock to USB block
+   reset-usb-hub
+   init-usb-phy
+;
+
+stand-init: Init USB Phy
+\  usb-power-on   \ The EC now controls the USB power
+   init-usb
+;
+
+d# 350 config-int usb-delay  \ Milliseconds to wait before probing hub ports
+
+\ Like $show-devs, but ignores pagination keystrokes
+: $nopage-show-devs  ( nodename$ -- )
+   ['] exit? behavior >r  ['] false to exit?
+   $show-devs
+   r> to exit?
+;
+
+\ Restrict selftest to external USB ports 1,2,3
+\ dev /  3 " usb-test-ports" integer-property  dend
+
+: (probe-usb2)  ( -- )
+   " device_type" get-property  if  exit  then
+[ifdef] use-usb-debug-port
+   \ I haven't figured out how to turn on the EHCI cleanly
+   \ when the Debug Port is running
+   dbgp-off
+[then]
+   get-encoded-string  " ehci" $=  if
+      pwd$ open-dev  ?dup  if  close-dev  then
+   then
+;
+: (show-usb2)  ( -- )
+   " device_type" get-property  if  exit  then
+   get-encoded-string  " ehci" $=  if
+      pwd$ $nopage-show-devs
+   then
+;
+
+true value first-usb-probe?
+: (silent-probe-usb)  ( -- )  " /" ['] (probe-usb2) scan-subtree  ;
+: silent-probe-usb  ( -- )
+   (silent-probe-usb)
+   report-disk report-net report-keyboard
+;
+: probe-usb  ( -- )
+   first-usb-probe?  if
+      false to first-usb-probe?
+      \ Initial probe to awaken the hub
+      (silent-probe-usb)
+      \ A little delay to let slow devices like USB scanner wake up
+      d# 150 ms
+   then
+   silent-probe-usb
+
+   ." USB devices:" cr
+   " /" ['] (show-usb2) scan-subtree
+
+;
+alias p2 probe-usb
+
+0 value usb-keyboard-ih
+0 value otg-keyboard-ih
+
+: attach-usb-keyboard  ( -- )
+   " usb-keyboard" expand-alias  if   ( devspec$ )
+      drop " /usb"  comp  0=  if      ( )
+         " usb-keyboard" open-dev to usb-keyboard-ih
+         usb-keyboard-ih add-input
+      then
+   else                               ( devspec$ )
+      2drop
+   then
+
+   " otg/keyboard" expand-alias  if   ( devspec$ )
+      open-dev to otg-keyboard-ih
+      otg-keyboard-ih add-input
+   else
+      2drop
+   then
+;
+
+: detach-usb-keyboard  ( -- )
+   usb-keyboard-ih  if
+      usb-keyboard-ih remove-input
+      usb-keyboard-ih close-dev
+      0 to usb-keyboard-ih
+   then
+;
+
+: ?usb-keyboard  ( -- )
+   attach-usb-keyboard
+;
+
+: usb-quiet  ( -- )
+   detach-usb-keyboard
+   " /usb at f0003000" " reset-usb" execute-device-method drop
+   " /usb at d4208000" " reset-usb" execute-device-method drop
+;
+
+: suspend-usb  ( -- )
+   detach-usb-keyboard
+   " /usb" " sleep" execute-device-method drop
+;
+: has-children?   ( devspec$ -- flag )
+   locate-device  if  false  else  child 0<>  then
+;
+: any-usb-devices?  ( -- flag )  " /usb/hub" has-children?  ;
+: resume-usb  ( -- )
+   init-usb
+   " /usb" " wake" execute-device-method drop
+   any-usb-devices?  if
+      d# 2000 ms  \ USB misses devices if you probe too soon
+   then
+   silent-probe-usb
+   attach-usb-keyboard
+;
+
+\ Unlink every node whose phys.hi component matches port
+: port-match?  ( port -- flag )
+   get-unit  if  drop false exit  then
+   get-encoded-int =
+;
+: rm-usb-children  ( port -- )
+   device-context? 0=  if  drop exit  then
+   also                             ( port )
+   'child                           ( port prev )
+   first-child  begin while         ( port prev )
+      over port-match?  if          ( port prev )
+         'peer link@  over link!    ( port prev )      \ Disconnect
+      else                          ( port prev )
+         drop 'peer                 ( port prev' )
+      then                          ( port prev )
+   next-child  repeat               ( port prev )
+   2drop                            ( )
+   previous definitions
+;
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2010 FirmWorks
+\ 
+\ 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/x86/pc/olpc/sound.fth
==============================================================================
--- cpu/x86/pc/olpc/sound.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ cpu/x86/pc/olpc/sound.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -54,7 +54,7 @@
    close-audio
 ;
 
-[ifndef] olpc-cl3
+[ifndef] use-screen-kbd
 dev /keyboard
 0 value waiting-up?
 : olpc-check-abort  ( scan-code -- abort? )  \ an abort key pressed?

Modified: dev/olpc/dcon/mmp2dcon.fth
==============================================================================
--- dev/olpc/dcon/mmp2dcon.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ dev/olpc/dcon/mmp2dcon.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -51,13 +51,9 @@
 \ h# 8000 constant DM_SELFTEST
 
 : set-dcon-slave  ( -- )
-[ifdef] cl2-a1
-   d# 162 to smb-clock-gpio#
-   d# 163 to smb-data-gpio#
-[else]
-   d# 161 to smb-clock-gpio#
-   d# 110 to smb-data-gpio#
-[then]
+   dcon-scl-gpio# to smb-clock-gpio#
+   dcon-sda-gpio# to smb-data-gpio#
+
    h# 1a to smb-slave
 ;
 
@@ -66,17 +62,13 @@
 : dcon@  ( reg# -- word )  set-dcon-slave  smb-word@  ;
 : dcon!  ( word reg# -- )  set-dcon-slave  smb-word!  ;
 
-[ifdef] cl2-a1
-: dcon-load  ( -- )  d# 151 gpio-set  ;
-: dcon-unload  ( -- )  d# 151 gpio-clr  ;
-[else]
-: dcon-load  ( -- )  d# 142 gpio-set  ;
-: dcon-unload  ( -- )  d# 142 gpio-clr  ;
-[then]
+: dcon-load  ( -- )  dcon-load-gpio# gpio-set  ;
+: dcon-unload  ( -- )  dcon-load-gpio# gpio-clr  ;
+
 \ : dcon-blnk?  ( -- flag )  ;  \ Not hooked up
-: dcon-stat@  ( -- n )  h# 019100 io@ 4 rshift 3 and  ;
-: setup-dcon-irq  ( -- )  d# 124 dup gpio-set-fer  gpio-clr-edge  ;
-: dcon-irq?  ( -- flag )  d# 124 gpio-edge@  ;
+: dcon-stat@  ( -- n )  h# 019100 io@ 4 rshift 3 and  ;  \ GPIO 100..101
+: setup-dcon-irq  ( -- )  dcon-irq-gpio# dup gpio-set-fer  gpio-clr-edge  ;
+: dcon-irq?  ( -- flag )  dcon-irq-gpio# gpio-edge@  ;
 
 \ DCONSTAT values:  0 SCANINT  1 SCANINT_DCON  2 DISPLAYLOAD  3 MISSED
 
@@ -151,13 +143,16 @@
 : vsync!   ( sync -- )    7 dcon!  ;  \ def: h#  403 d# 4,3
 : timeout! ( to -- )      8 dcon!  ;  \ def: h# ffff
 : scanint! ( si -- )      9 dcon!  ;  \ def: h# 0000
-: bright!  ( level -- ) d# 10 dcon! ; \ def: h# xxxF
+: dcon-bright!  ( level -- ) d# 10 dcon! ; \ def: h# xxxF
+' dcon-bright!  to bright!
 : bright@  ( -- level ) d# 10 dcon@ ;
 : brighter  ( -- )  bright@ 1+  h# f min  bright!  ;
 : dimmer    ( -- )  bright@ 1-  0 max  bright!  ;
 
-: backlight-off  ( -- )  mode@  8 invert and  mode!  ;
-: backlight-on   ( -- )  mode@  8 or  mode!  ;
+: dcon-backlight-off  ( -- )  mode@  8 invert and  mode!  ;
+' dcon-backlight-off to backlight-off
+: dcon-backlight-on   ( -- )  mode@  8 or  mode!  ;
+' dcon-backlight-on to backlight-on
 
 \ Color swizzle, AA, no passthrough, backlight
 : set-color ( color? -- )
@@ -219,13 +214,15 @@
 
 : maybe-set-cmos  ( -- )  ;
 
-: init-xo-display  ( -- )
+: init-dcon  ( -- )
    smb-init
 
 \ Unnecessary because CForth has already done it
 \   dcon-load  dcon-enable  ( maybe-set-cmos )
    \ dcon-enable leaves mode set to 69 - 40:antialias, 20:swizzle, 8:backlight on, 1:passthru off
 ;
+' init-dcon to init-panel
+
 : dcon-power-on   ( -- )  1 h# 26 ec-cmd-b!  ;
 : dcon-power-off  ( -- )  0 h# 26 ec-cmd-b!  ;
 0 value saved-dcon-mode

Modified: dev/olpc/kb3700/spicmd.fth
==============================================================================
--- dev/olpc/kb3700/spicmd.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ dev/olpc/kb3700/spicmd.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -42,9 +42,6 @@
 : encode-unit  ( phys -- adr len )  push-hex  (u.)  pop-base  ;
 : decode-unit  ( adr len -- phys )  push-hex  $number  if  0  then  pop-base  ;
 
-d# 155 constant cmd-gpio#
-d# 125 constant ack-gpio#
-
 \ Channel#(port#) Meaning
 \ 0              Invalid
 \ 1              Switch to Command Mode
@@ -161,13 +158,13 @@
 false value debug?
 \ Set the direction on the ACK and CMD GPIOs
 : init-gpios  ( -- )
-   cmd-gpio# gpio-dir-out
-   ack-gpio# gpio-dir-out
+   ec-spi-cmd-gpio# gpio-dir-out
+   ec-spi-ack-gpio# gpio-dir-out
 ;
-: clr-cmd  ( -- )  cmd-gpio# gpio-clr  ;
-: set-cmd  ( -- )  cmd-gpio# gpio-set  ;
-: clr-ack  ( -- )  ack-gpio# gpio-clr  ;
-: set-ack  ( -- )  ack-gpio# gpio-set  ;
+: clr-cmd  ( -- )  ec-spi-cmd-gpio# gpio-clr  ;
+: set-cmd  ( -- )  ec-spi-cmd-gpio# gpio-set  ;
+: clr-ack  ( -- )  ec-spi-ack-gpio# gpio-clr  ;
+: set-ack  ( -- )  ec-spi-ack-gpio# gpio-set  ;
 : fast-ack  ( -- )  set-ack clr-ack  debug?  if  ." ACK " cr  then  ;
 : slow-ack  ( -- )  d# 10 ms  set-ack d# 10 ms  clr-ack  ;
 defer pulse-ack  ' fast-ack to pulse-ack

Modified: dev/olpc/mmp2camera/platform.fth
==============================================================================
--- dev/olpc/mmp2camera/platform.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ dev/olpc/mmp2camera/platform.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -7,10 +7,8 @@
 0 value camera-smb-slave
 : camera-smb-setup  ( -- )
    1 to smb-dly-us
-\+ olpc-cl2   d# 108 to smb-clock-gpio#
-\+ olpc-cl2   d# 109 to smb-data-gpio#
-\+ olpc-cl3   d#   4 to smb-clock-gpio#
-\+ olpc-cl3   d#   5 to smb-data-gpio#
+   cam-scl-gpio# to smb-clock-gpio#
+   cam-sda-gpio# to smb-data-gpio#
    camera-smb-slave to smb-slave
 ;
 : camera-smb-on  ( -- )  camera-smb-setup  smb-on  ;
@@ -18,20 +16,17 @@
 : ov!  ( data reg -- )  camera-smb-setup  smb-byte!  ;
 
 : reset-sensor  ( -- )
-\+ olpc-cl3   d#  10 gpio-clr  1 ms  d#  10 gpio-set
-\+ olpc-cl2   d# 102 gpio-clr  1 ms  d# 102 gpio-set
+   cam-rst-gpio# gpio-clr  1 ms  cam-rst-gpio# gpio-set
 ;
 
-[ifdef] cl2-a1
-: sensor-power-on   ( -- )  d# 145 gpio-set  ;
-: sensor-power-off  ( -- )  d# 145 gpio-clr  ;
-[else]
 : sensor-power-on   ( -- )
-   d# 150 gpio-set
-\+ olpc-cl2  d# 144 gpio-clr
-\+ olpc-cl3  d#   9 gpio-clr
+   cam-pwr-gpio# gpio-set
+   cam-pwrdn-gpio# gpio-clr
+;
+: sensor-power-off  ( -- )
+   ( cam-pwrdn-gpio# gpio-set )       \ Leave low for Linux
+   cam-pwr-gpio# gpio-clr
 ;
-: sensor-power-off  ( -- )  ( d# 144 gpio-set )  d# 150 gpio-clr  ;  \ Leave low for Linux
 [then]
 
 \ CAM_HSYNC is on GPIO67, CAM_VSYNC is on GPIO68

Modified: dev/olpc/spiflash/spiui.fth
==============================================================================
--- dev/olpc/spiflash/spiui.fth	Tue Jul 10 21:23:04 2012	(r3048)
+++ dev/olpc/spiflash/spiui.fth	Wed Jul 11 03:50:11 2012	(r3049)
@@ -74,7 +74,7 @@
 
    ." Got firmware version: "
    flash-buf h# f.ffc0 +  dup  h# 10  type cr  ( adr )
-   machine-signature count comp  abort" Wrong machine signature"
+   signature$ comp  abort" Wrong machine signature"
 
    ?crc
 
@@ -290,7 +290,7 @@
 : check-firmware-image  ( adr len -- adr len )
    dup /flash <>  abort" Wrong image length"      ( adr len )
    2dup +  h# 40 -                                ( adr len signature-adr )
-   machine-signature count comp  abort" Wrong machine signature"
+   signature$ comp  abort" Wrong machine signature"
                                                   ( adr len signature-adr )
    ." Firmware: " h# 10 type                      ( adr len )
    \ XXX add some more sanity checks



More information about the openfirmware mailing list