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

svn at openbios.org svn at openbios.org
Wed Nov 7 23:37:02 CET 2007


Author: wmb
Date: 2007-11-07 23:37:02 +0100 (Wed, 07 Nov 2007)
New Revision: 720

Modified:
   cpu/x86/pc/olpc/copynand.fth
Log:
Added nd-copy-nand command to handle .img files produced by nanddump.
This was needed for manufacturing testing.




Modified: cpu/x86/pc/olpc/copynand.fth
===================================================================
--- cpu/x86/pc/olpc/copynand.fth	2007-11-07 22:34:41 UTC (rev 719)
+++ cpu/x86/pc/olpc/copynand.fth	2007-11-07 22:37:02 UTC (rev 720)
@@ -13,8 +13,11 @@
 0 value #image-eblocks
 0 value #crc-records
 
+0 value nanddump-mode?
+
 0 value crc-buf
 
+h# 40 constant /nand-oob
 
 : >crc  ( index -- 'crc )  crc-buf swap la+  ;
 
@@ -24,6 +27,7 @@
    fileih  ?dup  if  0 to fileih  close-dev  then
 ;
 : close-nand-ihs  ( -- )
+   0 to nanddump-mode?
    close-image-file
    nandih  ?dup  if  0 to nandih  close-dev  0 to #nand-pages     then
    crc-ih  ?dup  if  0 to crc-ih  close-dev  then
@@ -94,6 +98,7 @@
 
 : ?open-crcs  ( -- )
    img-has-oob?  if  exit  then
+   nanddump-mode?  if  exit  then
    image-name$ + 4 -  " .img" caps-comp 0=  if
       image-name$ crc-name-buf place
       " crc"  crc-name$ + 3 -  swap move
@@ -114,16 +119,24 @@
    image-name$  open-dev  to fileih
    fileih 0= " Can't open NAND image file"  ?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 )
+
+   nanddump-mode?  if
+      2dup  h# 20000 um/mod  swap  if  1+  then   ( d.size #eblocks )
       false to img-has-oob?
-      nip nip                                ( #eblocks )
-   then                                      ( #eblocks )
+      nip nip                                     ( #eblocks )
+   else
+      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 )
+   then
+
    to #image-eblocks
 
    #image-eblocks 0= " Image file is empty" ?nand-abort
@@ -137,8 +150,17 @@
 ;
 
 : read-image-block  ( -- )
-   load-base /nand-block  " read" fileih $call-method   ( len )
-   /nand-block <> " Bad read of .img file"  ?nand-abort ( )
+   nanddump-mode?  if
+      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
+   else
+      load-base /nand-block  " read" fileih $call-method   ( len )
+      /nand-block <> " Bad read of .img file"  ?nand-abort ( )
+   then
 ;
 
 : check-mem-crc  ( record# -- )
@@ -230,6 +252,11 @@
 
    close-nand-ihs
 ;
+: nd-copy-nand  ( "devspec" -- )
+   true to nanddump-mode?
+   copy-nand
+   false to nanddump-mode?
+;
 
 : verify-nand  ( "devspec" -- )
    open-nand




More information about the OpenBIOS mailing list