Author: wmb Date: Tue Jun 28 00:27:51 2011 New Revision: 2315 URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2315
Log: OLPC XO-1.75 - auto-reflash EC firmware if it is out of date.
Added: cpu/arm/olpc/1.75/ec-version.fth cpu/arm/olpc/1.75/ec.bth Modified: cpu/arm/olpc/1.75/ecflash.fth cpu/arm/olpc/1.75/fw.bth cpu/arm/olpc/1.75/olpc.bth cpu/x86/pc/olpc/security.fth
Added: cpu/arm/olpc/1.75/ec-version.fth ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ cpu/arm/olpc/1.75/ec-version.fth Tue Jun 28 00:27:51 2011 (r2315) @@ -0,0 +1,7 @@ +\ The EC microcode +macro: EC_VERSION 4_0_1_01 + +\ Alternate command for getting EC microcode, for testing new versions. +\ Temporarily uncomment the line and modify the path as necessary +\ macro: GET_EC cp ~rsmith/olpc/ec/ec-code15/image/ecimage.bin ec.img +\ macro: GET_EC wget -q http://dev.laptop.org/pub/ec/ec_test.img -O ec.img
Added: cpu/arm/olpc/1.75/ec.bth ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ cpu/arm/olpc/1.75/ec.bth Tue Jun 28 00:27:51 2011 (r2315) @@ -0,0 +1,18 @@ +purpose: Fetch the EC (Embedded Controller, i.e. KB3700) microcode + +command: &builder &this +build-now + +fload ${BP}/cpu/arm/olpc/1.75/ec-version.fth + +\ If there is a GET_EC macro, use it instead of fetching the released version. +" ${GET_EC}" expand$ nip [if] + " ${GET_EC}" expand$ $sh +[else] + " wget -q http://dev.laptop.org/pub/ec/cl2-$%7BEC_VERSION%7D.img -O ec.img" expand$ $sh +[then] + +\ This forces the creation of an ec.log file, so we don't re-fetch ec.img +writing ec.version +" ${EC_VERSION}"n" expand$ ofd @ fputs +ofd @ fclose
Modified: cpu/arm/olpc/1.75/ecflash.fth ============================================================================== --- cpu/arm/olpc/1.75/ecflash.fth Mon Jun 27 22:49:20 2011 (r2314) +++ cpu/arm/olpc/1.75/ecflash.fth Tue Jun 28 00:27:51 2011 (r2315) @@ -52,11 +52,11 @@ abort" Miscompare!" cr [ifndef] cl2-a1 - ." Restarting EC and powering off" cr - d# 3000 ms + ." Restarting EC and rebooting" cr + d# 2000 ms unreset-8051 [then] - reset-ec + ec-power-cycle ; : flash-ec ( "filename" -- ) get-ec-file ?enough-power reflash-ec ; : flash-ec! ( "filename" -- ) get-ec-file reflash-ec ; @@ -76,6 +76,35 @@ load-base /ec-flash ofd @ fputs ofd @ fclose ; +: ec-up-to-date? ( img$ -- flag ) + \ If the new image has an invalid length, the old one is considered up to date + dup /ec-flash <> if + ." Invalid EC image length" cr 2drop true exit + then ( adr len ) + + h# 100 - cscount ( version&date$ ) + \ If the new image has an invalid signature, the old one is considered up to date + dup d# 25 < if 2drop true exit then ( version&date$ ) + bl left-parse-string " XO-EC" $= 0= if 2drop true exit then ( version&date$ ) + bl left-parse-string " 4" $= 0= if 2drop true exit then ( version&date$ ) + bl left-parse-string 2nip ( version$ ) + ec-name$ $caps-compare 0<= ( flag ) +; +: ?update-ec-flash ( -- ) + " ecimage.bin" find-drop-in if ( adr len ) + 2dup ec-up-to-date? if ( adr len ) + free-mem ( ) + else ( adr len ) + 2dup load-base swap move ( adr len ) + free-mem ( ) + ['] ?enough-power catch ?dup if ( error ) + .error + ." Skipping EC reflash" cr + else + reflash-ec + then + then + then +;
\ LICENSE_BEGIN \ Copyright (c) 2010 FirmWorks
Modified: cpu/arm/olpc/1.75/fw.bth ============================================================================== --- cpu/arm/olpc/1.75/fw.bth Mon Jun 27 22:49:20 2011 (r2314) +++ cpu/arm/olpc/1.75/fw.bth Tue Jun 28 00:27:51 2011 (r2315) @@ -405,6 +405,8 @@
read-game-keys
+ ?update-ec-flash + factory-test? if text-off then
" probe-" do-drop-in
Modified: cpu/arm/olpc/1.75/olpc.bth ============================================================================== --- cpu/arm/olpc/1.75/olpc.bth Mon Jun 27 22:49:20 2011 (r2314) +++ cpu/arm/olpc/1.75/olpc.bth Tue Jun 28 00:27:51 2011 (r2315) @@ -1,6 +1,7 @@ purpose: Construct the Open Firmware module collection
command: &builder &this +in: ${BP}/cpu/arm/olpc/1.75/build/ec.img in: ${BP}/cpu/arm/olpc/1.75/build/fw.img in: ${BP}/cpu/arm/olpc/1.75/build/resetvec.img in: ${BP}/cpu/arm/olpc/1.75/build/mcastnand.bin @@ -150,6 +151,7 @@ " ${BP}/cpu/x86/pc/olpc/images/tux.565" " tux.565" $add-deflated-dropin " ${BP}/cpu/x86/pc/olpc/images/settings.565" " settings.565" $add-deflated-dropin [then] + " ec.img" " ecimage.bin" $add-deflated-dropin
.( Dropin top is ) ofd @ fsize .x cr
Modified: cpu/x86/pc/olpc/security.fth ============================================================================== --- cpu/x86/pc/olpc/security.fth Mon Jun 27 22:49:20 2011 (r2314) +++ cpu/x86/pc/olpc/security.fth Tue Jun 28 00:27:51 2011 (r2315) @@ -906,16 +906,6 @@ ;
[ifdef] reflash-ec -: ec-up-to-date? ( img$ -- flag ) - /ec-flash <> if show-x " Invalid EC Firmware image" .security-failure then ( adr ) - /ec-flash + h# 100 - cscount ( version&date$ ) - \ If the new image has an invalid signature, the old one is considered up to date - dup d# 25 < if 2drop true exit then ( version&date$ ) - over " XO-EC 4 " comp if 2drop true exit then ( version&date$ ) - bl right-split-string 2drop ( date$ ) - d# 16 <> if 2drop true exit then ( date-adr ) - ec-date$ comp 0<= ( flag ) -;
defer ec-reflash-off? ' false to ec-reflash-off? : do-ec-update ( img$ -- )
openfirmware@openfirmware.info