Author: wmb Date: 2009-12-15 06:02:15 +0100 (Tue, 15 Dec 2009) New Revision: 1610
Modified: cpu/x86/pc/olpc/via/copynand.fth cpu/x86/pc/olpc/via/fsupdate.fth Log: OLPC trac 9873 - fixed secure reflash.
Modified: cpu/x86/pc/olpc/via/copynand.fth =================================================================== --- cpu/x86/pc/olpc/via/copynand.fth 2009-12-15 05:01:14 UTC (rev 1609) +++ cpu/x86/pc/olpc/via/copynand.fth 2009-12-15 05:02:15 UTC (rev 1610) @@ -1,7 +1,7 @@ \ See license at end of file purpose: Copy a file onto the NAND FLASH
-0 value fileih +0 value filefd 0 value nandih
h# 20000 value /nand-block @@ -14,7 +14,7 @@ : $call-nand ( ?? method$ -- ?? ) nandih $call-method ;
: close-image-file ( -- ) - fileih ?dup if 0 to fileih close-dev then + filefd ?dup if 0 to filefd close-file drop then ; : close-nand ( -- ) nandih ?dup if 0 to nandih close-dev then @@ -32,11 +32,6 @@ then ;
-: ?key-stop ( -- ) - key? dup if key drop then ( stop? ) - " Stopped by keystroke" ?nand-abort -; - : set-nand-vars ( -- ) " size" $call-nand /nand-page um/mod nip to #nand-pages ; @@ -49,35 +44,6 @@ h# 100 buffer: image-name-buf : image-name$ ( -- adr len ) image-name-buf count ;
-: get-img-filename ( -- ) safe-parse-word image-name-buf place ; - -: open-img ( "devspec" -- ) - image-name$ open-dev to fileih - fileih 0= " Can't open NAND image file" ?nand-abort - " size" fileih $call-method ( d.size ) - - 2dup h# 20000 um/mod swap if 1+ then ( d.size #eblocks ) - nip nip ( #eblocks ) - - to #image-eblocks - - #image-eblocks 0= " Image file is empty" ?nand-abort -; - -: read-image-block ( -- ) - load-base /nand-block " read" fileih $call-method ( len ) - dup /nand-block <> if ( len ) - load-base over + /nand-page rot - h# ff fill - else - drop - then -; - -: check-mem-hash ( record# -- ) - drop \ XXX -; - - defer show-init ( #eblocks -- ) ' drop to show-init
Modified: cpu/x86/pc/olpc/via/fsupdate.fth =================================================================== --- cpu/x86/pc/olpc/via/fsupdate.fth 2009-12-15 05:01:14 UTC (rev 1609) +++ cpu/x86/pc/olpc/via/fsupdate.fth 2009-12-15 05:02:15 UTC (rev 1610) @@ -44,6 +44,13 @@
: swap-buffers ( -- ) data-buffer dma-buffer to data-buffer to dma-buffer ;
+: force-line-delimiter ( delimiter fd -- ) + file @ ( delim fd fd' ) + swap file ! ( delim fd' ) + swap line-delimiter c! ( fd' ) + file ! ( ) +; + vocabulary nand-commands also nand-commands definitions
@@ -71,7 +78,16 @@ : data: ( "filename" -- ) safe-parse-word fn-buf place " ${DN}${PN}${CN}${FN}" expand$ image-name-buf place - open-img + image-name$ r/o open-file if + drop ." Can't open " image-name$ type cr + true " " ?nand-abort + then to filefd + linefeed filefd force-line-delimiter + \ Eat the initial "zblocks:" line + load-base /spec-maxline filefd read-line ( len not-eof? error? ) + " Read error on .zd file" ?nand-abort ( len not-eof? ) + 0= " Premature EOF on .zd file" ?nand-abort ( len ) + drop ( ) true to secure-fsupdate? ;
@@ -82,13 +98,13 @@
: get-zdata ( comprlen -- ) secure-fsupdate? if - data-buffer /spec-maxline fileih read-line ( len end? error? ) + data-buffer /spec-maxline filefd read-line ( len end? error? ) " Spec line read error" ?nand-abort ( len end? ) 0= " Spec line too long" ?nand-abort ( len ) data-buffer swap ( adr len ) source $= 0= " Spec line mismatch" ?nand-abort ( )
- fileih ( ih ) + filefd ( ih ) else ( ) source-id ( ih ) then ( ih ) @@ -181,9 +197,7 @@ safe-parse-word r/o open-file ( fd ) abort" Can't open file" ( fd )
- file @ ( fd fd' ) - over file ! linefeed line-delimiter c! ( fd fd' ) - file ! ( fd ) + linefeed over force-line-delimiter ( fd )
t( ( fd ) also nand-commands ( fd ) @@ -217,7 +231,7 @@ show-done ?all-written close-nand-ihs - )t-hms + )t-hms cr ;
: fs-update-from-list ( devlist$ -- )
openfirmware@openfirmware.info