Author: wmb Date: Thu Oct 14 10:47:26 2010 New Revision: 1980 URL: http://tracker.coreboot.org/trac/openfirmware/changeset/1980
Log: Added new feature to the dropin manager whereby you can declare a reserved area that will be skipped (covered by a dummy dropin module), and used it in the OLPC XO-1.5 build to allow the dropin modules to extend into the fxxxx bank. Thanks to James Cameron for writing the code.
Modified: cpu/x86/build/builder.dic cpu/x86/pc/olpc/via/devices.fth cpu/x86/pc/olpc/via/olpc.bth forth/lib/mkdropin.fth
Modified: cpu/x86/build/builder.dic ============================================================================== Binary file (source and/or target). No diff available.
Modified: cpu/x86/pc/olpc/via/devices.fth ============================================================================== --- cpu/x86/pc/olpc/via/devices.fth Thu Oct 14 03:25:25 2010 (r1979) +++ cpu/x86/pc/olpc/via/devices.fth Thu Oct 14 10:47:26 2010 (r1980) @@ -93,7 +93,7 @@ 0 0 " 10000" " /flash" begin-package " dropins" device-name
- h# d0000 constant /device + h# f0000 constant /device fload ${BP}/dev/subrange.fth end-package
Modified: cpu/x86/pc/olpc/via/olpc.bth ============================================================================== --- cpu/x86/pc/olpc/via/olpc.bth Thu Oct 14 03:25:25 2010 (r1979) +++ cpu/x86/pc/olpc/via/olpc.bth Thu Oct 14 10:47:26 2010 (r1980) @@ -59,6 +59,10 @@ ?do h# ff ofd @ fputc loop ;
+\ Tell the dropin manager to skip the area reserved for manufacturing data +h# e0000 to reserved-start +h# f0000 to reserved-end + .( --- Saving as ) " ${FW_VERSION}.rom" expand$ 2dup lower ( adr len ) 2dup type cr ( adr len ) @@ -69,12 +73,7 @@
dropin-base rom-pa - pad-file
-[ifdef] coreboot-loaded - " romstart.di" $add-file -[else] " romreset.di" $add-file -[then] - " resume.di" $add-file
\ Loads the set of drivers that is common to different output formats @@ -195,11 +194,7 @@
.( Dropin top is ) ofd @ fsize .x cr
-[ifdef] coreboot-loaded - /rom h# 10000 - pad-file \ coreboot init image must be in last FLASH block - " coreboot.img" $add-file -[else] - /rom h# 10000 - pad-file \ coreboot init image must be in last FLASH block +\ /rom h# 10000 - pad-file \ coreboot init image must be in last FLASH block \ " cforth.img" $add-file \ Small Forth that runs from cache
/rom h# 400 - pad-file \ rmstart image must start 0x400 from end @@ -241,7 +236,6 @@
/rom h# 2c - ofd @ fseek crcbuf /l ofd @ fputs -[then]
ofd @ fclose
Modified: forth/lib/mkdropin.fth ============================================================================== --- forth/lib/mkdropin.fth Thu Oct 14 03:25:25 2010 (r1979) +++ forth/lib/mkdropin.fth Thu Oct 14 10:47:26 2010 (r1980) @@ -75,6 +75,9 @@ \ make-dropin test.di test.img test \ make-deflated-dropin test.di test.img test
+-1 value reserved-start +-1 value reserved-end + \needs push-decimal : push-decimal r> base @ >r >r decimal ; \needs push-hex : push-hex r> base @ >r >r hex ; \needs pop-base : pop-base r> r> base ! >r ; @@ -113,7 +116,7 @@ ifd @ fclose ( len ) ; : putlong ( n -- ) lbsplit 4 0 do ofd @ fputc loop ; -: write-dropin ( adr len expanded-len name-str -- ) +: write-dropin' ( adr len expanded-len name-str -- ) 2>r >r ( adr len ) " OBMD" ofd @ fputs ( adr len ) dup putlong ( adr len ) @@ -126,6 +129,26 @@ \ Pad out to a 4-byte boundary dup 4 round-up swap ?do 1 ofd @ fputc loop ( ) ; +: write-dropin ( adr len expanded-len name-str -- ) + 2>r >r ( adr len r: name$ expanded-len ) + + \ Calculate expected ending position + dup ofd @ ftell + ( adr len pos ) + + \ Encroaches upon manufacturing data area? If so, enumerate as a dropin. + reserved-start h# 20 - reserved-end within if + \ Calculate size of a dropin covering reserved area + reserved-end ofd @ ftell - h# 20 - ( adr len reslen ) + \ Allocate memory for it + dup alloc-mem swap ( adr len resadr reslen ) + \ Fill it + 2dup h# ff fill ( adr len resadr reslen ) + \ Write it out + 2dup 0 " reserved" write-dropin' ( adr len resadr reslen ) + free-mem ( adr len ) + then ( adr len r: name$ expanded-len ) + r> 2r> write-dropin' +; : write-deflated-dropin ( adr len name-str -- ) 2>r tuck $deflate ( in-len out-adr,len r: name$ ) \ XXX we should check for out-len=0 and if so, make a non-deflated dropin
openfirmware@openfirmware.info