[OpenBIOS] r496 - cpu/x86/pc/olpc dev/olpc/cafenand
svn at openbios.org
svn at openbios.org
Thu Jul 26 03:14:50 CEST 2007
Author: wmb
Date: 2007-07-26 03:14:50 +0200 (Thu, 26 Jul 2007)
New Revision: 496
Modified:
cpu/x86/pc/olpc/copynand.fth
dev/olpc/cafenand/badblock.fth
Log:
OLPC NAND driver/copy-nand - Added JFFS2 cleanmarkers to erased blocks
to speed up startup time on the first boot of the OS after copy-nand.
Modified: cpu/x86/pc/olpc/copynand.fth
===================================================================
--- cpu/x86/pc/olpc/copynand.fth 2007-07-25 01:58:15 UTC (rev 495)
+++ cpu/x86/pc/olpc/copynand.fth 2007-07-26 01:14:50 UTC (rev 496)
@@ -150,6 +150,10 @@
i ?check-crc
load-base " copy-block" nandih $call-method
loop
+
+ cr ." Filling with cleanmarkers ..."
+ " put-cleanmarkers" nandih $call-method cr
+
close-nand-ihs
;
Modified: dev/olpc/cafenand/badblock.fth
===================================================================
--- dev/olpc/cafenand/badblock.fth 2007-07-25 01:58:15 UTC (rev 495)
+++ dev/olpc/cafenand/badblock.fth 2007-07-26 01:14:50 UTC (rev 496)
@@ -341,11 +341,18 @@
headers
-: find-good-block ( -- )
- scan-page# ( page# )
- begin pages/eblock + dup block-bad? 0= until
- to scan-page#
+: (next-page#) ( -- true | page# false )
+ usable-page-limit scan-page# pages/eblock + ?do
+ i block-bad? 0= if
+ i to scan-page#
+ scan-page# false unloop exit
+ then
+ pages/eblock +loop
+ true
;
+: next-page# ( -- page# )
+ (next-page#) if ." No more good NAND blocks" cr abort then
+;
0 value test-page
@@ -358,17 +365,22 @@
\ Must erase all (wipe) first
: copy-block ( adr -- )
- find-good-block
- scan-page# pages/eblock bounds ?do ( adr )
+ next-page# pages/eblock bounds ?do ( adr )
dup i write-page ( adr )
/page + ( adr' )
loop ( adr )
drop ( )
;
+: put-cleanmarkers ( -- )
+ begin (next-page#) 0= while ( page# )
+ " "(85 19 03 20 08 00 00 00 00 00 00 00)" ( page# adr len )
+ rot /page /ecc + write-bytes ( )
+ repeat ( )
+;
+
: read-next-block ( adr -- )
- find-good-block
- scan-page# pages/eblock bounds ?do ( adr )
+ next-page# pages/eblock bounds ?do ( adr )
dup i read-page if ( adr )
." Uncorrectable error in page 0x" i .x cr
then
More information about the OpenBIOS
mailing list