[OpenBIOS] r495 - cpu/x86/pc cpu/x86/pc/olpc dev dev/geode/ac97 dev/geode/display dev/mmc/sdhci dev/olpc/cafecamera dev/olpc/cafenand dev/pci

svn at openbios.org svn at openbios.org
Wed Jul 25 03:58:16 CEST 2007


Author: wmb
Date: 2007-07-25 03:58:15 +0200 (Wed, 25 Jul 2007)
New Revision: 495

Added:
   cpu/x86/pc/olpc/crypto.fth
Modified:
   cpu/x86/pc/flashpkg.fth
   cpu/x86/pc/olpc/config.fth
   cpu/x86/pc/olpc/devices.fth
   cpu/x86/pc/olpc/fw.bth
   cpu/x86/pc/olpc/pcinode.fth
   dev/geode/ac97/ac97.fth
   dev/geode/display/gxfb.fth
   dev/geode/display/gxpci.fth
   dev/i8042.fth
   dev/mmc/sdhci/sdhci.fth
   dev/mmc/sdhci/sdmmc.fth
   dev/olpc/cafecamera/cafecamera.fth
   dev/olpc/cafenand/cafenand.fth
   dev/pci/isa.fth
   dev/pci/isaall.fth
   dev/pci/isamisc.fth
   dev/pcibus.fth
Log:
OLPC trac #553 - lots of device tree tweaks, mostly stuff that the
OS doesn't care about.


Modified: cpu/x86/pc/flashpkg.fth
===================================================================
--- cpu/x86/pc/flashpkg.fth	2007-07-24 20:33:58 UTC (rev 494)
+++ cpu/x86/pc/flashpkg.fth	2007-07-25 01:58:15 UTC (rev 495)
@@ -119,6 +119,7 @@
    size  rot 0  d-                    ( d.#bytes )
 ;
 
+[ifdef] flash-is-parent
 \ These allow us to sub-address the FLASH device to access the PROMICE AI port
 1 " #address-cells" integer-property
 
@@ -126,6 +127,8 @@
 : encode-unit  ( phys -- adr len )  push-hex  (u.)  pop-base  ;
 : map-in   ( offset size -- virt )  drop  device-base +  ;
 : map-out  ( virt size -- virt )  2drop  ;
+[then]
+
 \ LICENSE_BEGIN
 \ Copyright (c) 2006 FirmWorks
 \ 

Modified: cpu/x86/pc/olpc/config.fth
===================================================================
--- cpu/x86/pc/olpc/config.fth	2007-07-24 20:33:58 UTC (rev 494)
+++ cpu/x86/pc/olpc/config.fth	2007-07-25 01:58:15 UTC (rev 495)
@@ -37,7 +37,11 @@
 \ create use-watch-all
 \ create use-root-isa
 create no-floppy-node
+create no-com2-node
+create no-lpt-node
 create use-pci-isa
+create basic-isa
+create isa-dma-only
 
 create use-null-nvram
 

Added: cpu/x86/pc/olpc/crypto.fth
===================================================================
--- cpu/x86/pc/olpc/crypto.fth	                        (rev 0)
+++ cpu/x86/pc/olpc/crypto.fth	2007-07-25 01:58:15 UTC (rev 495)
@@ -0,0 +1,127 @@
+purpose: Interface to cryptographic code for firmware image validation
+\ See license at end of file
+
+h# c0000 constant crypto-base  \ The address the code is linked to run at
+h# c0000 constant hasher-base  \ The address the code is linked to run at
+
+variable hashlen
+d# 128 buffer: hashbuf
+
+: hash  ( data$ hashname$ -- result$ )
+   " hasher" find-drop-in  0=  if  4drop true exit  then  ( data$ hashname$ prog$ )
+   2dup hasher-base swap move  free-mem          ( data$ hashname$ )
+
+   d# 128 hashlen !      
+   2>r  swap  hashlen hashbuf  2swap  2r> $cstr  ( &reslen resbuf datalen databuf hashname-cstr )
+
+   hasher-base  dup h# 10 -  sp-call  abort" Hash failed"  drop 4drop  ( )
+   hashbuf hashlen @
+;
+
+h# f value which-hashes
+: signature-bad?  ( data$ sig$ -- mismatch? )
+   " crypto" find-drop-in  0=  if  4drop true exit  then  ( data$ sig$ prog$ )
+   2dup crypto-base swap move  free-mem                   ( data$ sig$ )
+      
+   " pubkey" find-drop-in  0=  if  4drop true exit  then  ( data$ sig$ key$ )
+   2>r                 ( data$ sig$ r: key$ )
+   swap  2swap  swap   ( siglen sigadr datalen dataadr r: key$ )
+   2r@ swap  2swap     ( siglen sigadr keylen keyadr datalen dataadr r: key$ )
+
+   which-hashes
+
+   crypto-base  dup h# 10 -  sp-call  >r  3drop 4drop  r>  ( result  r: key$ )
+   2r> free-mem
+
+\ XXX free-mem in suspend.fth and fw.bth after find-drop-in
+\ XXX clean out dead code in usb.fth
+;
+
+1 [if]
+
+\ Check that the version is an upgrade?
+
+: >rom-name$  ( device$ -- path$ )
+   image-name-buf place                      ( )
+   " :\boot\olpcfw.rom" image-name-buf $cat  ( )
+   image-name$
+;
+: sig-name$  ( -- path$ )
+   image-name$ + 4 -  " .rom" caps-comp 0=  if
+      " sig"  image-name$ + 3 -  swap move
+      image-name$
+   else
+      2drop  " "
+   then
+;
+: $dev-update-flash  ( device$ -- )
+   >rom-name$  $get-image  if  exit  then          ( data$ )
+
+   sig-name$ $get-image  if
+      ." Missing firmware update signature file: " sig-name$ type  cr
+      free-mem exit
+   then   ( data$ sig$ )  
+
+   2over 2over  signature-bad?  if                 ( data$ sig$ )
+      ." Firmware update image signature mismatch: " sig-name$ type  cr
+      free-mem  free-mem  exit
+   then                                            ( data$ sig$ )
+
+   free-mem                                        ( data$ )
+
+   2dup flash-buf swap move                        ( data$ )
+   tuck free-mem                                   ( data-len )
+   ['] ?image-valid  catch  if                     ( x )
+      drop  ." Firmware image failed sanity checks" cr  ( )
+      exit
+   then                                            ( x )
+
+   true to file-loaded?
+   reflash
+;
+[then]
+
+: getbin     " usb8388.bin" find-drop-in 0= abort" No usb8388.bin"  ;
+: getsig     " usb8388.sig" find-drop-in 0= abort" No usb8388.sig"  ;
+: tc  ( -- )
+   getbin  getsig
+   signature-bad?  if
+      ." Signature was bad, expected good" cr
+   then
+
+   getbin  over 1 swap +!
+   getsig
+   signature-bad?  0=  if
+      ." Signature was good, expected bad (corrupt image)" cr
+   then
+
+   getbin
+   getsig  over 40 +  1 swap +!
+   signature-bad?  0=  if
+      ." Signature was good, expected bad (corrupt signature)" cr
+   then
+;
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2007 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/devices.fth
===================================================================
--- cpu/x86/pc/olpc/devices.fth	2007-07-24 20:33:58 UTC (rev 494)
+++ cpu/x86/pc/olpc/devices.fth	2007-07-25 01:58:15 UTC (rev 495)
@@ -27,9 +27,14 @@
 fload ${BP}/cpu/x86/tsc.fth
 
 stand-init:
-   gx?  if  d# 366,666,667  else  d# 433,333,333  then  ( cpu-clock-hz )
+   gx?  if
+      d# 366,666,667  " AMD,Geode GX"
+   else
+      d# 433,333,333  " AMD,Geode LX"
+   then               ( cpu-clock-hz model$ )
 
-   " /cpu" find-device                                  ( cpu-clock-hz )
+   " /cpu" find-device                                  ( cpu-clock-hz model$ )
+      " model" string-property                          ( cpu-clock-hz )
       dup " clock-frequency" integer-property           ( cpu-clock-hz )
    device-end                                           ( cpu-clock-hz )
 
@@ -64,12 +69,18 @@
 h# 20 to vector-base0
 h# 28 to vector-base1
 device-end
-[then]
 
+warning @ warning off
+: probe-pci  ( -- )
+   probe-pci
+   " /pci" " make-interrupt-map" execute-device-method drop
+;
+warning !
+
 0 0  dropin-base <# u#s u#>  " /" begin-package
    " flash" device-name
 
-[ifdef] addresses-assigned  dropin-size  [else]  h# 4.0000  [then]
+   h# 10.0000
    dup value /device
    constant /device-phys
    my-address my-space /device-phys reg

Modified: cpu/x86/pc/olpc/fw.bth
===================================================================
--- cpu/x86/pc/olpc/fw.bth	2007-07-24 20:33:58 UTC (rev 494)
+++ cpu/x86/pc/olpc/fw.bth	2007-07-25 01:58:15 UTC (rev 495)
@@ -64,6 +64,7 @@
 
 dev /
 1 encode-int  " #address-cells"  property
+1 encode-int  " #size-cells"     property
 " OLPC" encode-string  " architecture" property
 device-end
 
@@ -378,6 +379,8 @@
 fload ${BP}/dev/olpc/keyboard/selftest.fth   \ Keyboard diagnostic
 fload ${BP}/dev/olpc/touchpad/touchpad.fth   \ Touchpad diagnostic
 fload ${BP}/dev/olpc/kb3700/battery.fth      \ Battery status reports
+fload ${BP}/cpu/x86/pc/olpc/copynand.fth
+fload ${BP}/cpu/x86/pc/olpc/crypto.fth       \ Cryptographic image validation
 [then]
 
 \ Eliminate 4 second delay in install console for the case where
@@ -546,6 +549,7 @@
       ?start-sound
       ['] false to interrupt-auto-boot?
       probe-usb
+      " nand" $dev-update-flash
       interpreter-init
 [ifndef] lx-devel
       enable-power-button
@@ -573,7 +577,9 @@
    quit
 ;
 
-fload ${BP}/cpu/x86/pc/olpc/copynand.fth
+: newrom
+   " flash http:\\10.20.0.109\new.rom" eval
+;
 
 \ This helps with TeraTerm, which sends ESC-O as the arrow key prefix
 also hidden also keys-forth definitions

Modified: cpu/x86/pc/olpc/pcinode.fth
===================================================================
--- cpu/x86/pc/olpc/pcinode.fth	2007-07-24 20:33:58 UTC (rev 494)
+++ cpu/x86/pc/olpc/pcinode.fth	2007-07-25 01:58:15 UTC (rev 495)
@@ -1,7 +1,7 @@
 \ See license at end of file
 purpose: PCI bus package
 
-0 [if] addresses-assigned
+0 [if]
    \ Suppress PCI address assignment; use the addresses the BIOS assigned
    patch false true master-probe
    patch noop assign-all-addresses prober
@@ -13,6 +13,7 @@
    patch or-w! my-w! find-fcode?
    patch 2drop my-w! find-fcode?
 [then]
+
 [ifdef] addresses-assigned
 \   patch false true master-probe
 : nonvirtual-probe-state?  ( -- flag )
@@ -61,7 +62,7 @@
 [ifdef] lx-devel
    " 2,3,4,5,6,7,8,9,a,b,c,d,e,f" exit
 [then]
-   " c,f"
+   " 1,c,f"
 ;
 \    " c,f" dup  config-string pci-probe-list
 
@@ -100,6 +101,45 @@
    drop  h# 3c +  config-b@  true
 ;
 
+0 value interrupt-parent
+
+1  " #interrupt-cells" integer-property
+0 0 encode-bytes  0000.ff00 +i  0+i  0+i  7 +i  " interrupt-map-mask" property
+
+: +map  ( adr len dev# int-pin# int-level -- adr' len' )
+   >r >r                  ( $ dev# R: level pin )
+   +i                     ( $' R: level pin )
+   0+i 0+i  r> +i         ( $' R: level )
+   interrupt-parent +i    ( $' R: level )
+   r> +i  0 +i            ( $' )   \ 0 is active low, level senstive for ISA
+;
+
+external
+
+: make-interrupt-map  ( -- )
+   " /isa/interrupt-controller" find-package  0=  if  exit  then  to interrupt-parent
+
+   0 0 encode-bytes                    ( prop$ )
+
+   h# 10000 0  do                      ( prop$ )
+      i h# 3d + config-b@              ( prop$ pin# )
+      dup 0<>  over h# ff <>  and  if  ( prop$ pin# )
+         i h# 3c + config-b@           ( prop$ pin# level )
+         i -rot  +map                  ( prop$' )
+      else                             ( prop$ pin# )
+         drop                          ( prop$ )
+      then                             ( prop$ )
+   h# 100 +loop                        ( prop$ )
+   " interrupt-map" property           ( )
+;
+
+also known-int-properties definitions
+\ In some systems the number of interrupt-map ints is variable,
+\ but on OLPC, the only node with an interrupt-map is PCI.
+: interrupt-map  7  ;
+: interrupt-map-mask  4  ;
+previous definitions
+
 \ Just use the global versions
 warning @ warning off
 : config-b@  ( config-adr -- b )  config-b@  ;

Modified: dev/geode/ac97/ac97.fth
===================================================================
--- dev/geode/ac97/ac97.fth	2007-07-24 20:33:58 UTC (rev 494)
+++ dev/geode/ac97/ac97.fth	2007-07-25 01:58:15 UTC (rev 495)
@@ -12,9 +12,9 @@
 d# 16 encode-int " sample-frame-size" property
 \ frame-rate encode-int " input-frame-rates" property
 \ frame-rate encode-int " output-frame-rates" property
-" 16bit-LE-unsigned-linear" 2dup encode-string " input-encoding-types" property
+" 16bit-LE-signed-linear" 2dup encode-string " input-encoding-types" property
 encode-string " output-encoding-types" property
-" AC97,CODEC" encode-string " compatible" property
+" AD1888" encode-string " AC97,CODEC" encode-string encode+ " compatible" property
 
 d# 128 constant /chipbase
 

Modified: dev/geode/display/gxfb.fth
===================================================================
--- dev/geode/display/gxfb.fth	2007-07-24 20:33:58 UTC (rev 494)
+++ dev/geode/display/gxfb.fth	2007-07-25 01:58:15 UTC (rev 495)
@@ -541,7 +541,7 @@
    h# 0f color@  h# ff color!	\ Set color ff to white (same as 15)
 ;
 
-: init  ( -- )			\ Initializes the controller
+: init-all  ( -- )		\ Initializes the controller
    smb-init
    map-io-regs			\ Enable IO registers
    init-controller		\ Setup the video controller
@@ -566,7 +566,7 @@
 0 0  encode-bytes  " iso6429-1983-colors"  property
 
 : display-install  ( -- )
-   init
+   init-all
    default-font set-font
    /scanline bytes/pixel /  #scanlines     ( width height )
    over char-width / over char-height /    ( width height rows cols )

Modified: dev/geode/display/gxpci.fth
===================================================================
--- dev/geode/display/gxpci.fth	2007-07-24 20:33:58 UTC (rev 494)
+++ dev/geode/display/gxpci.fth	2007-07-25 01:58:15 UTC (rev 495)
@@ -30,6 +30,13 @@
 : (map-frame-buffer)  ( -- adr )
    h# 10  h# 80.0000  map-membar
 ;
+
+\ This is called during probing by make-function-node
+: init  ( -- )
+   " make-compatible-property" my-parent ihandle>phandle find-method  if  execute  then
+   " make-power-property" my-parent ihandle>phandle find-method  if  execute  then
+;
+
 \ LICENSE_BEGIN
 \ Copyright (c) 2006 FirmWorks
 \ 

Modified: dev/i8042.fth
===================================================================
--- dev/i8042.fth	2007-07-24 20:33:58 UTC (rev 494)
+++ dev/i8042.fth	2007-07-25 01:58:15 UTC (rev 495)
@@ -26,7 +26,7 @@
 [then]
 
 \ 0 means the keyboard port, 1 means the aux port
-: encode-unit  ( n -- adr len )  if  " aux"  else  " "  then  ;
+: encode-unit  ( n -- adr len )  if  " aux"  else  " kbd"  then  ;
 : decode-unit  ( adr len -- n )  " aux"  $=  0=  if  0  else  1  then  ;
 
 \ Queues for distributing bytes sent from the two devices

Modified: dev/mmc/sdhci/sdhci.fth
===================================================================
--- dev/mmc/sdhci/sdhci.fth	2007-07-24 20:33:58 UTC (rev 494)
+++ dev/mmc/sdhci/sdhci.fth	2007-07-25 01:58:15 UTC (rev 495)
@@ -15,6 +15,8 @@
 0  " #address-cells" integer-property
 0  " #size-cells" integer-property
 
+" sdhci" " compatible" string-property
+
 h# 4000 constant /regs
 
 : phys+ encode-phys encode+  ;

Modified: dev/mmc/sdhci/sdmmc.fth
===================================================================
--- dev/mmc/sdhci/sdmmc.fth	2007-07-24 20:33:58 UTC (rev 494)
+++ dev/mmc/sdhci/sdmmc.fth	2007-07-25 01:58:15 UTC (rev 495)
@@ -3,6 +3,7 @@
 
 " disk" device-name
 " sdmmc" " iconname" string-property
+" block" device-type
 
 0 instance value label-package
 

Modified: dev/olpc/cafecamera/cafecamera.fth
===================================================================
--- dev/olpc/cafecamera/cafecamera.fth	2007-07-24 20:33:58 UTC (rev 494)
+++ dev/olpc/cafecamera/cafecamera.fth	2007-07-25 01:58:15 UTC (rev 495)
@@ -7,6 +7,8 @@
 " camera" device-name
 " olpc,camera" model
 " camera" device-type
+" olpc,camera" " compatible" string-property
+" OV7670" " sensor" string-property
 
 h# 4000 constant /regs
 

Modified: dev/olpc/cafenand/cafenand.fth
===================================================================
--- dev/olpc/cafenand/cafenand.fth	2007-07-24 20:33:58 UTC (rev 494)
+++ dev/olpc/cafenand/cafenand.fth	2007-07-25 01:58:15 UTC (rev 495)
@@ -3,7 +3,7 @@
 
 " nandflash" device-name
 " olpc,cafenand" model
-" disk" device-type
+" olpc,cafenand" " compatible" string-property
 
 h# 4000 constant /regs
 

Modified: dev/pci/isa.fth
===================================================================
--- dev/pci/isa.fth	2007-07-24 20:33:58 UTC (rev 494)
+++ dev/pci/isa.fth	2007-07-25 01:58:15 UTC (rev 495)
@@ -6,6 +6,9 @@
 " isa" device-name
 " isa" device-type
 
+2 " #address-cells" integer-property
+1 " #size-cells" integer-property
+
 my-address my-space encode-phys  0 encode-int encode+  h# 0 encode-int encode+
 " reg" property
 

Modified: dev/pci/isaall.fth
===================================================================
--- dev/pci/isaall.fth	2007-07-24 20:33:58 UTC (rev 494)
+++ dev/pci/isaall.fth	2007-07-25 01:58:15 UTC (rev 495)
@@ -3,7 +3,7 @@
 
 fload ${BP}/dev/pci/isacom.fth			\ Serial ports
 
-[ifndef] no-lpt
+[ifndef] no-lpt-node
 0 0  " i378"  " /isa" begin-package
 fload ${BP}/dev/pci/isalpt.fth			\ Parallel port
 end-package

Modified: dev/pci/isamisc.fth
===================================================================
--- dev/pci/isamisc.fth	2007-07-24 20:33:58 UTC (rev 494)
+++ dev/pci/isamisc.fth	2007-07-25 01:58:15 UTC (rev 495)
@@ -15,7 +15,9 @@
      0 1 10 encode-reg
     80 1 20 encode-reg encode+
     c0 1 20 encode-reg encode+
-[ifndef] isa-dma-only
+[ifdef] isa-dma-only
+   481 1  f encode-reg encode+          \ High page registers
+[else]
 [ifdef] PREP    
    40a 1  2 encode-reg encode+		\ AIX wants this
 [else]
@@ -91,9 +93,7 @@
    " pnpPNP,0" " compatible" string-property
 
    20 1 2 encode-reg  a0 1 2 encode-reg encode+
-[ifndef] basic-isa
    4d0 1 2 encode-reg encode+ 
-[then]
    " reg" property
 
    fload ${BP}/dev/i8259.fth

Modified: dev/pcibus.fth
===================================================================
--- dev/pcibus.fth	2007-07-24 20:33:58 UTC (rev 494)
+++ dev/pcibus.fth	2007-07-25 01:58:15 UTC (rev 495)
@@ -40,8 +40,6 @@
 headers
 " pci"  encode-string  " name"  property
 
-7 encode-int " scsi-initiator-id" property
-
 \ There are no visible PCI registers
 \ my-address encode-int  /pci-regs encode-int encode+  " reg" property
 




More information about the OpenBIOS mailing list