[openfirmware] r873 - cpu/x86/pc/olpc dev/olpc/cafenand

svn at openfirmware.info svn at openfirmware.info
Fri Aug 8 23:15:14 CEST 2008


Author: wmb
Date: 2008-08-08 23:15:13 +0200 (Fri, 08 Aug 2008)
New Revision: 873

Modified:
   cpu/x86/pc/olpc/fsupdate.fth
   dev/olpc/cafenand/methods.fth
   dev/olpc/cafenand/redboot.fth
Log:
OLPC trac 7880 - fixed glitches in NAND partition support.


Modified: cpu/x86/pc/olpc/fsupdate.fth
===================================================================
--- cpu/x86/pc/olpc/fsupdate.fth	2008-08-08 07:05:51 UTC (rev 872)
+++ cpu/x86/pc/olpc/fsupdate.fth	2008-08-08 21:15:13 UTC (rev 873)
@@ -62,7 +62,7 @@
 vocabulary nand-commands
 also nand-commands definitions
 
-: set-partition:  ( "partition#" -- )
+: set-partition:  ( "partitionid" -- )  \ partitionid is number or name
    safe-parse-word " $set-partition" $call-nand abort" Nonexistent partition#" 
 ;
 
@@ -139,11 +139,11 @@
 
 : do-fs-update  ( img$ -- )
    tuck  load-base h# 100000 +  swap move  ( len )
-   load-base h# 100000 + swap
-   open-nand
+   load-base h# 100000 + swap              ( adr len )
+   open-nand                               ( adr len )
 
-   ['] noop to show-progress
-   #nand-pages >eblock#  show-init
+   ['] noop to show-progress               ( adr len )
+   #nand-pages >eblock#  show-init         ( adr len )
 
 \    clear-context  nand-commands
 also nand-commands
@@ -189,6 +189,15 @@
    update-devices fs-update-from-list
 ;
 
+: $update-nand  ( devspec$ -- )
+   load-crypto abort" Can't load the crypto functions"
+   null$ cn-buf place  null$ pn-buf place              ( devspec$ )
+   2dup  [char] \ split-string  2drop  dn-buf place    ( devspec$ )
+   boot-read
+   loaded do-fs-update
+;
+: update-nand  ( "devspec" -- )  safe-parse-word  $fs-update  ;
+
 \ LICENSE_BEGIN
 \ Copyright (c) 2007 FirmWorks
 \ 

Modified: dev/olpc/cafenand/methods.fth
===================================================================
--- dev/olpc/cafenand/methods.fth	2008-08-08 07:05:51 UTC (rev 872)
+++ dev/olpc/cafenand/methods.fth	2008-08-08 21:15:13 UTC (rev 873)
@@ -60,7 +60,7 @@
    then                                    ( error? )
    dup  if                                 ( error? )
       ." NAND: No such partition" cr       ( error? )
-   then         
+   then
 ;
 
 : open  ( -- okay? )

Modified: dev/olpc/cafenand/redboot.fth
===================================================================
--- dev/olpc/cafenand/redboot.fth	2008-08-08 07:05:51 UTC (rev 872)
+++ dev/olpc/cafenand/redboot.fth	2008-08-08 21:15:13 UTC (rev 873)
@@ -15,7 +15,7 @@
 [then]
 
 d# 256 constant /partition-entry
-d# 8 constant max#partitions
+d# 7 constant max#partitions  \ Not counting the FIS directory entry
 
 : partition-map-page#  ( -- true | page# false )
    h# 10 pages/eblock *  0  do
@@ -27,10 +27,10 @@
 
 : (#partitions)  ( adr -- n )
    0 swap                                          ( seen adr )
-   max#partitions  0  ?do                          ( seen adr )
+   max#partitions 1+  0  ?do                       ( seen adr )
       dup i /partition-entry * +                   ( seen adr padr )
       dup w@ h# ffff =  if                         ( seen adr padr )
-         2drop  if  i  else  -1  then              ( n )
+         2drop  if  i 1-  else  -1  then           ( n )
          unloop exit                               ( n )
       then                                         ( seen adr padr )
       " FIS directory" rot swap comp  0=  if       ( seen adr )
@@ -63,8 +63,9 @@
 
    dup to partition#                             ( partition# )
 
-   \ Partition 1 (the FIS directory entry) begins at offset 0
-   1- /partition-entry *  part-buf +             ( adr )
+   \ "Real" partitions are numbered starting at 1
+   \ The partition buffer entry at offset 0 is the FIS directory
+   /partition-entry *  part-buf +                ( adr )
    dup d# 16 + l@ /page / to partition-start     ( adr )
    d# 24 + l@ /page / to partition-size          ( )
    false
@@ -85,13 +86,13 @@
 
 : set-partition-name  ( name$ -- error? )
    #partitions  dup 0<  if  2drop false exit  then  ( name$ #partitions )
-   /partition-entry *                            ( name$ len )
+   1+  /partition-entry *                        ( name$ part-buf-len )
    part-buf swap  bounds  ?do                    ( name$ )
       2dup  i d# 16 ncstr  $=  if                ( name$ )
          2drop                                   ( )
          i d# 16 + l@ /page / to partition-start ( )
          i d# 24 + l@ /page / to partition-size  ( )
-         i part-buf - /partition-entry / 1+ to partition#
+         i part-buf - /partition-entry / to partition#
          start-scan
          false  unloop exit
       then                                       ( name$ )




More information about the openfirmware mailing list