[openfirmware] r1405 - cpu/x86/pc/olpc/via dev/mmc/sdhci
svn at openfirmware.info
svn at openfirmware.info
Thu Oct 8 12:46:12 CEST 2009
Author: wmb
Date: 2009-10-08 12:46:12 +0200 (Thu, 08 Oct 2009)
New Revision: 1405
Modified:
cpu/x86/pc/olpc/via/fsupdate.fth
cpu/x86/pc/olpc/via/fw.bth
dev/mmc/sdhci/sdhci.fth
Log:
OLPC trac 9474 - buffer conflict was causing fs-update to write bad filesystem data.
Modified: cpu/x86/pc/olpc/via/fsupdate.fth
===================================================================
--- cpu/x86/pc/olpc/via/fsupdate.fth 2009-10-08 05:18:17 UTC (rev 1404)
+++ cpu/x86/pc/olpc/via/fsupdate.fth 2009-10-08 10:46:12 UTC (rev 1405)
@@ -124,8 +124,11 @@
open-nand
#image-eblocks show-init
get-inflater
+ \ Separate the two buffers by enough space for both the compressed
+ \ and uncompressed copies of the data. 4x is overkill, but there
+ \ is plenty of space at load-base
load-base to dma-buffer
- load-base /nand-block + to data-buffer
+ load-base /nand-block 4 * + to data-buffer
/nand-block /nand-page / to nand-pages/block
;
@@ -230,7 +233,8 @@
( eblock# )
\ Asynchronous writes
data-buffer over nand-pages/block * nand-pages/block " write-blocks-start" $call-nand ( eblock# )
-\ data-buffer over nand-pages/block * nand-pages/block " write-blocks" $call-nand drop ( eblock# )
+\ data-buffer over nand-pages/block * nand-pages/block " write-blocks" $call-nand ( eblock# #written )
+\ nand-pages/block <> " Write error" ?nand-abort ( eblock# )
swap-buffers ( eblock# )
dup to last-eblock# ( eblock# )
@@ -256,7 +260,7 @@
['] include-file catch ?dup if ( x error )
nip .error
then ( )
- previous
+ previous definitions
show-done
?all-written
close-nand-ihs
Modified: cpu/x86/pc/olpc/via/fw.bth
===================================================================
--- cpu/x86/pc/olpc/via/fw.bth 2009-10-08 05:18:17 UTC (rev 1404)
+++ cpu/x86/pc/olpc/via/fw.bth 2009-10-08 10:46:12 UTC (rev 1405)
@@ -480,6 +480,7 @@
[then]
fload ${BP}/cpu/x86/pc/olpc/via/padlock.fth \ Via security engine
fload ${BP}/cpu/x86/pc/olpc/via/fsupdate.fth
+fload ${BP}/cpu/x86/pc/olpc/via/fsverify.fth
devalias fsdisk int:0
fload ${BP}/ofw/inet/sntp.fth
Modified: dev/mmc/sdhci/sdhci.fth
===================================================================
--- dev/mmc/sdhci/sdhci.fth 2009-10-08 05:18:17 UTC (rev 1404)
+++ dev/mmc/sdhci/sdhci.fth 2009-10-08 10:46:12 UTC (rev 1405)
@@ -674,14 +674,21 @@
: wait-write-done ( -- )
writing? 0= if exit then ( limit )
- get-msecs d# 1000 + ( limit )
- begin get-status 9 rshift h# f and 7 = while ( limit )
+ get-msecs d# 1000 + ( limit )
+ begin get-status dup 9 rshift h# f and 7 = while ( limit status )
+ drop ( limit )
dup get-msecs - 0< if
." SDHCI: wait-write-done timeout" cr
abort
then
- repeat ( limit )
- drop ( )
+ repeat ( limit status )
+ nip ( status )
+ dup h# fff9.8008 and if ( status )
+ cr ." SD Error - status = " . cr
+ noop
+ else
+ drop
+ then
false to writing?
;
More information about the openfirmware
mailing list