[OpenBIOS] r535 - cpu/x86/pc/olpc
svn at openbios.org
svn at openbios.org
Tue Aug 14 21:03:40 CEST 2007
Author: wmb
Date: 2007-08-14 21:03:40 +0200 (Tue, 14 Aug 2007)
New Revision: 535
Added:
cpu/x86/pc/olpc/nandstat.fth
Modified:
cpu/x86/pc/olpc/copynand.fth
Log:
OLPC copy-nand - graphic display of progress.
Modified: cpu/x86/pc/olpc/copynand.fth
===================================================================
--- cpu/x86/pc/olpc/copynand.fth 2007-08-14 16:05:09 UTC (rev 534)
+++ cpu/x86/pc/olpc/copynand.fth 2007-08-14 19:03:40 UTC (rev 535)
@@ -17,6 +17,8 @@
: >crc ( index -- crc ) crc-buf swap la+ l@ ;
+: $call-nand ( ?? method$ -- ?? ) nandih $call-method ;
+
: close-nand-ihs ( -- )
fileih ?dup if 0 to fileih close-dev 0 to #image-eblocks then
nandih ?dup if 0 to nandih close-dev 0 to #nand-pages then
@@ -44,11 +46,11 @@
: open-nand ( -- )
" /nandflash" open-dev to nandih
nandih 0= " Can't open NAND FLASH device" ?nand-abort
- " erase-size" nandih $call-method to /nand-block
- " block-size" nandih $call-method to /nand-page
- " size" nandih $call-method /nand-page um/mod nip to #nand-pages
+ " erase-size" $call-nand to /nand-block
+ " block-size" $call-nand to /nand-page
+ " size" $call-nand /nand-page um/mod nip to #nand-pages
/nand-block /nand-page / to nand-pages/block
- " start-scan" nandih $call-method
+ " start-scan" $call-nand
;
h# 20 buffer: line-buf
@@ -131,6 +133,34 @@
#crc-records if check-mem-crc else drop then
;
+defer show-erasing ( #blocks -- )
+: (show-erasing) ( #blocks -- ) ." Erasing " . ." blocks" cr ;
+' (show-erasing) is show-erasing
+
+defer show-erased
+: (show-erased) ( block# -- ) (cr . ;
+' (show-erased) is show-erased
+
+defer show-bad
+: (show-bad) ( block# -- ) drop ;
+' (show-bad) is show-bad
+
+defer show-clean
+: (show-clean) ( block# -- ) drop ;
+' (show-clean) is show-clean
+
+defer show-cleaning
+: (show-cleaning) ( -- ) cr ." Cleanmarkers" cr ;
+' (show-cleaning) is show-cleaning
+
+defer show-writing ( #blocks -- )
+: (show-writing) ." Writing " . ." blocks" cr ;
+' (show-writing) is show-writing
+
+defer show-written
+: (show-written) ( block# -- ) (cr . ;
+' (show-written) is show-written
+
: copy-nand ( "devspec" -- )
open-nand
get-img-filename
@@ -139,21 +169,21 @@
['] noop to show-progress
- ." Erasing..." cr
- " wipe" nandih $call-method
+ #nand-pages nand-pages/block / show-erasing
+ ['] show-bad ['] show-erased " (wipe)" $call-nand
- cr ." Writing " #image-eblocks . ." blocks" cr
+ #image-eblocks show-writing
#image-eblocks 0 ?do
- (cr i .
read-image-block
i ?check-crc
- load-base " copy-block" nandih $call-method ( error? )
- " Error writing to NAND FLASH" ?nand-abort
+ load-base " copy-block" $call-nand ( page# error? )
+ " Error writing to NAND FLASH" ?nand-abort ( page# )
+ nand-pages/block / show-written ( )
loop
- cr ." Filling with cleanmarkers ..."
- " put-cleanmarkers" nandih $call-method cr
+ show-cleaning
+ ['] show-clean " put-cleanmarkers" $call-nand
close-nand-ihs
;
@@ -169,10 +199,10 @@
#image-eblocks 0 ?do
(cr i .
read-image-block
- load-base /nand-block + " read-next-block" nandih $call-method ( )
+ load-base /nand-block + " read-next-block" $call-nand ( )
load-base load-base /nand-block + /nand-block comp if ( )
cr ." Miscompare in block starting at page# " ( )
- " scan-page#" nandih $call-method .x cr ( )
+ " scan-page#" $call-nand .x cr ( )
?key-stop
then ( )
repeat ( )
@@ -210,13 +240,13 @@
#crc-records 0 ?do
(cr i .
- load-base " read-next-block" nandih $call-method ( )
+ load-base " read-next-block" $call-nand ( )
load-base /nand-block $crc i >crc ( actual-crc expected-crc )
2dup <> if ( actual-crc expected-crc )
cr ." CRC miscompare - expected " . ." got " . ( )
." in NAND block starting at page "
- " scan-page#" nandih $call-method . cr
+ " scan-page#" $call-nand . cr
?key-stop
else ( actual-crc expected-crc )
2drop ( )
@@ -255,13 +285,13 @@
\ The stack is empty at the end of each line unless otherwise noted
#nand-pages 0 do
(cr i .
- load-base i nand-pages/block " read-blocks" nandih $call-method
+ load-base i nand-pages/block " read-blocks" $call-nand
nand-pages/block = if
load-base /nand-block written? if
load-base /nand-block " write" fileih $call-method drop
dump-oob? if
i nand-pages/block bounds ?do
- i " read-oob" nandih $call-method h# 40 ( adr len )
+ i " read-oob" $call-nand h# 40 ( adr len )
" write" fileih $call-method drop
i pad ! pad 4 " write" fileih $call-method drop
loop
@@ -284,7 +314,7 @@
fileih 0= " Can't open NAND fastboot image file" ?nand-abort
" size" fileih $call-method drop ( len )
- " start-fastcopy" nandih $call-method ( error? )
+ " start-fastcopy" $call-nand ( error? )
" Not enough spare NAND space for fast copy" ?nand-abort
begin ( )
@@ -293,10 +323,10 @@
\ If the read didn't fill a complete block, zero the rest
load-base /nand-block rot /string erase
- load-base " next-fastcopy" nandih $call-method ( )
+ load-base " next-fastcopy" $call-nand ( )
repeat ( len )
drop ( )
- " end-fastcopy" nandih $call-method ( )
+ " end-fastcopy" $call-nand ( )
close-nand-ihs
;
Added: cpu/x86/pc/olpc/nandstat.fth
===================================================================
--- cpu/x86/pc/olpc/nandstat.fth (rev 0)
+++ cpu/x86/pc/olpc/nandstat.fth 2007-08-14 19:03:40 UTC (rev 535)
@@ -0,0 +1,75 @@
+purpose: Graphical status display of NAND FLASH updates
+\ See license at end of file
+
+d# 24 d# 24 2value ulhc
+
+d# 22 constant status-line
+
+8 constant glyph-w
+8 constant glyph-h
+
+9 constant grid-w
+9 constant grid-h
+
+d# 128 value #cols
+: xy* ( x y w h -- x*w y*h ) rot * >r * r> ;
+
+\ States: 0:erased 1:bad 2:waiting for write 3:written
+
+: >loc ( eblock# -- ) #cols /mod grid-w grid-h xy* ulhc d+ ;
+
+: show-state ( eblock# state -- )
+ swap >loc glyph-w glyph-h " fill-rectangle" $call-screen
+;
+
+dev screen : erase-screen erase-screen ; dend
+
+h# 80 h# 80 h# 80 rgb>565 constant bbt-color
+
+: gshow-erasing ( #eblocks -- )
+ cursor-off " erase-screen" $call-screen 0 status-line at-xy
+ ." Erasing "
+
+ " bbt0" $call-nand nand-pages/block / bbt-color show-state
+ " bbt1" $call-nand nand-pages/block / bbt-color show-state
+
+ h# ff h# ff h# ff rgb>565 ( #eblocks color )
+ swap 0 ?do i over show-state loop
+ drop
+;
+
+: gshow-erased ( eblock# -- ) 0 0 0 rgb>565 show-state ;
+
+: gshow-bad ( eblock# -- ) h# ff 0 0 rgb>565 show-state ;
+
+: gshow-cleaning ( -- ) ." Cleanmarkers" cr cursor-on ;
+: gshow-clean ( eblock# -- ) h# 0 0 ff rgb>565 show-state ;
+
+: gshow-writing ( #eblocks -- )
+ ." Writing "
+ h# ff h# ff 0 rgb>565 ( #eblocks color )
+ 0 rot 0 ?do ( color eblock# )
+ dup nand-pages/block * " block-bad?" $call-nand 0= if ( color eblock# )
+ 2dup swap show-state
+ 1
+ else
+ 0
+ then
+ swap 1+ swap
+ +loop
+ drop
+;
+
+: gshow-written ( eblock# -- ) 0 h# ff 0 rgb>565 show-state ;
+
+: gshow
+ ['] gshow-erasing to show-erasing
+ ['] gshow-erased to show-erased
+ ['] gshow-bad to show-bad
+ ['] gshow-clean to show-clean
+ ['] gshow-cleaning to show-cleaning
+ ['] gshow-writing to show-writing
+ ['] gshow-written to show-written
+;
+
+gshow
More information about the OpenBIOS
mailing list