[OpenBIOS] r768 - cpu/x86/pc/olpc dev/olpc/cafenand
svn at openbios.org
svn at openbios.org
Sat Jan 5 23:43:39 CET 2008
Author: wmb
Date: 2008-01-05 23:43:38 +0100 (Sat, 05 Jan 2008)
New Revision: 768
Modified:
cpu/x86/pc/olpc/copynand.fth
dev/olpc/cafenand/badblock.fth
Log:
OLPC trac 5870 - Improve error handling in NAND driver.
Modified: cpu/x86/pc/olpc/copynand.fth
===================================================================
--- cpu/x86/pc/olpc/copynand.fth 2008-01-05 01:06:40 UTC (rev 767)
+++ cpu/x86/pc/olpc/copynand.fth 2008-01-05 22:43:38 UTC (rev 768)
@@ -269,7 +269,8 @@
#image-eblocks 0 ?do
(cr i .
read-image-block
- load-base /nand-block + " read-next-block" $call-nand ( )
+ load-base /nand-block + " read-next-block" $call-nand ( end? )
+ " More image file blocks than NAND blocks" ?nand-abort ( )
load-base load-base /nand-block + /nand-block comp if ( )
cr ." Miscompare in block starting at page# " ( )
" scan-page#" $call-nand .x cr ( )
@@ -310,8 +311,8 @@
#crc-records 0 ?do
(cr i .
- load-base " read-next-block" $call-nand ( )
-
+ load-base " read-next-block" $call-nand ( end? )
+ " More CRC records than NAND blocks" ?nand-abort ( )
load-base /nand-block $crc i >crc l@ ( actual-crc expected-crc )
2dup <> if ( actual-crc expected-crc )
cr ." CRC miscompare - expected " . ." got " . ( )
Modified: dev/olpc/cafenand/badblock.fth
===================================================================
--- dev/olpc/cafenand/badblock.fth 2008-01-05 01:06:40 UTC (rev 767)
+++ dev/olpc/cafenand/badblock.fth 2008-01-05 22:43:38 UTC (rev 768)
@@ -162,17 +162,17 @@
;
\ Read the bad block table from NAND to memory
-: read-bbt-pages ( page# -- )
+: read-bbt-pages ( page# -- error? )
bbt swap /bbt /page / ( adr page# #pages )
\ Can't use read-blocks because of block-bad? dependency
bounds ?do ( adr )
dup i read-page if ( adr )
." BBT has uncorrectable errors" cr
- abort
+ drop true unloop exit
then ( adr )
/page + ( adr' )
loop ( adr )
- drop
+ drop false
;
\ Find a bad block table
@@ -181,8 +181,8 @@
alloc-bbt
find-existing-bbt
- bbt0 if bbt0 read-bbt-pages exit then
- bbt1 if bbt1 read-bbt-pages exit then
+ bbt0 if bbt0 read-bbt-pages 0= if exit then then
+ bbt1 if bbt1 read-bbt-pages 0= if exit then then
release-bbt
;
@@ -348,7 +348,7 @@
headers
-: (next-page#) ( -- true | page# false )
+: next-page# ( -- true | page# false )
partition-size scan-page# pages/eblock + ?do
i block-bad? 0= if
i to scan-page#
@@ -357,9 +357,6 @@
pages/eblock +loop
true
;
-: next-page# ( -- page# )
- (next-page#) if ." No more good NAND blocks" cr abort then
-;
0 value test-page
@@ -397,7 +394,7 @@
;
: copy-block ( adr -- page# error? )
- begin (next-page#) 0= while ( adr page# )
+ begin next-page# 0= while ( adr page# )
2dup copy&check if nip partition-start + false exit then ( adr page# )
\ Error; retry once
dup erase-block ( adr page# )
@@ -417,21 +414,22 @@
r> drop
;
: put-cleanmarkers ( show-xt -- )
- begin (next-page#) 0= while ( show-xt page# )
+ begin next-page# 0= while ( show-xt page# )
dup put-cleanmarker ( show-xt page# )
partition-start + pages/eblock / over execute ( show-xt )
repeat ( show-xt )
drop
;
-: read-next-block ( adr -- )
- next-page# pages/eblock bounds ?do ( adr )
+: read-next-block ( adr -- no-more? )
+ next-page# if drop true exit then ( adr page# )
+ pages/eblock bounds ?do ( adr )
dup i read-page if ( adr )
." Uncorrectable error in page 0x" i .x cr
then
/page + ( adr' )
loop ( adr )
- drop ( )
+ drop false ( flag )
;
\ : start-verify ( -- )
More information about the OpenBIOS
mailing list