[OpenBIOS] r648 - cpu/x86/pc/olpc

svn at openbios.org svn at openbios.org
Sat Sep 29 21:26:04 CEST 2007


Author: wmb
Date: 2007-09-29 21:26:04 +0200 (Sat, 29 Sep 2007)
New Revision: 648

Modified:
   cpu/x86/pc/olpc/copynand.fth
Log:
copy-nand - support reloading files saved with dump-nand, with OOB data inline.





Modified: cpu/x86/pc/olpc/copynand.fth
===================================================================
--- cpu/x86/pc/olpc/copynand.fth	2007-09-29 19:25:03 UTC (rev 647)
+++ cpu/x86/pc/olpc/copynand.fth	2007-09-29 19:26:04 UTC (rev 648)
@@ -90,7 +90,10 @@
 h# 100 buffer: crc-name-buf
 : crc-name$  ( -- adr len )  crc-name-buf count  ;
 
+0 value img-has-oob?
+
 : ?open-crcs  ( -- )
+   img-has-oob?  if  exit  then
    image-name$ + 4 -  " .img" caps-comp 0=  if
       image-name$ crc-name-buf place
       " crc"  crc-name$ + 3 -  swap move
@@ -98,6 +101,10 @@
    then
    #crc-records  if
       ." Check file is " crc-name$ type cr
+
+      #image-eblocks  if
+         #image-eblocks #crc-records <>  " CRC file length is wrong" ?nand-abort
+      then
    then
 ;
 
@@ -106,13 +113,26 @@
 : open-img  ( "devspec" -- )
    image-name$  open-dev  to fileih
    fileih 0= " Can't open NAND image file"  ?nand-abort
-   " size" fileih $call-method  /nand-block  um/mod  ( residue #eblocks )
-   to #image-eblocks                                 ( residue )
-   0<>  " Image file size is not a multiple of the NAND erase block size" ?nand-abort
+   " size" fileih $call-method               ( d.size )
+   2dup  /nand-block  um/mod  swap  if       ( d.size #eblocks )
+      \ Wrong size for the no-oob data format; try the dump-nand format
+      drop                                   ( d.size #eblocks )
+      h# 21100 um/mod  swap                  ( #eblocks residue )
+      0<>  " Image file size is not a multiple of the NAND erase block size" ?nand-abort
+      true to img-has-oob?
+   else                                      ( d.size #eblocks )
+      false to img-has-oob?
+      nip nip                                ( #eblocks )
+   then                                      ( #eblocks )
+   to #image-eblocks
+
    #image-eblocks 0= " Image file is empty" ?nand-abort
+;
 
-   #crc-records  if
-      #image-eblocks #crc-records <>  " CRC file length is wrong" ?nand-abort
+: ?skip-oob  ( -- )
+   img-has-oob?  if
+      load-base h# 1100  " read" fileih $call-method   ( len )
+      h# 1100 <> " Bad read of OOB data in .img file"  ?nand-abort ( )
    then
 ;
 
@@ -181,8 +201,8 @@
 : copy-nand  ( "devspec" -- )
    open-nand
    get-img-filename
+   open-img
    ?open-crcs
-   open-img
 
    ['] noop to show-progress
 
@@ -198,6 +218,7 @@
       i ?check-crc
       load-base " copy-block" $call-nand          ( page# error? )
       " Error writing to NAND FLASH" ?nand-abort  ( page# )
+      ?skip-oob
       nand-pages/block / show-written             ( )
    loop
 
@@ -233,8 +254,8 @@
    hex
    open-nand  close-nand-ihs   \ To set sizes
    get-img-filename
+   open-img
    ?open-crcs
-   open-img
    #crc-records 0= " No CRC file"  ?nand-abort
 
    ['] noop to show-progress




More information about the OpenBIOS mailing list