Re: [U-Boot-Users] [PATCH v2] NAND read/write.jffs2 fix

2008-06-13 Thread Morten Ebbell Hestnes
 patch for branch mtd-2.6.22.1 on git://git.denx.de/u-boot-nand-flash.git

 nand read(.jffs2|.e|.i) skips bad blocks during read.
 write(.jffs2|.e|.i) skips bad blocks during write
 nand read will read 0xff for bad block.
 Update documentation.
 ---
 
 Can I get a Signed-off-by?
 
 -Scott
 

Sorry, here it is.

Signed-off-by: Morten Ebbell Hestnes [EMAIL PROTECTED]


Morten

-
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
___
U-Boot-Users mailing list
U-Boot-Users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/u-boot-users


Re: [U-Boot-Users] [PATCH v2] NAND read/write.jffs2 fix

2008-06-12 Thread Scott Wood
On Tue, Jun 10, 2008 at 02:01:29PM +0200, Morten Ebbell Hestens wrote:
 patch for branch mtd-2.6.22.1 on git://git.denx.de/u-boot-nand-flash.git
 
 nand read(.jffs2|.e|.i) skips bad blocks during read.
 write(.jffs2|.e|.i) skips bad blocks during write
 nand read will read 0xff for bad block.
 Update documentation.
 ---

Can I get a Signed-off-by?

-Scott

-
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
___
U-Boot-Users mailing list
U-Boot-Users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/u-boot-users


[U-Boot-Users] [PATCH v2] NAND read/write.jffs2 fix

2008-06-10 Thread Morten Ebbell Hestens
patch for branch mtd-2.6.22.1 on git://git.denx.de/u-boot-nand-flash.git

nand read(.jffs2|.e|.i) skips bad blocks during read.
write(.jffs2|.e|.i) skips bad blocks during write
nand read will read 0xff for bad block.
Update documentation.
---
 common/cmd_nand.c|   73 ++---
 doc/README.nand  |   16 +-
 drivers/mtd/nand/nand_util.c |  814 --
 include/nand.h   |9 +-
 4 files changed, 278 insertions(+), 634 deletions(-)

diff --git a/common/cmd_nand.c b/common/cmd_nand.c
index eff9173..64e825e 100644
--- a/common/cmd_nand.c
+++ b/common/cmd_nand.c
@@ -73,9 +73,10 @@ static int nand_dump(nand_info_t *nand, ulong off, int 
only_oob)
while (i--) {
if (!only_oob) {
printf( \t%02x %02x %02x %02x %02x %02x %02x %02x
- %02x %02x %02x %02x %02x %02x %02x 
%02x\n,
-   p[0], p[1], p[2], p[3], p[4], p[5], 
p[6], p[7],
-   p[8], p[9], p[10], p[11], p[12], p[13], 
p[14], p[15]);
+ %02x %02x %02x %02x %02x %02x %02x %02x\n,
+   p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7],
+   p[8], p[9], p[10], p[11], p[12], p[13], p[14],
+   p[15]);
}
p += 16;
}
@@ -319,7 +320,6 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char 
*argv[])
 
}
 
-   /* read write */
if (strncmp(cmd, read, 4) == 0 || strncmp(cmd, write, 5) == 0) {
int read;
 
@@ -334,33 +334,13 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char 
*argv[])
return 1;
 
s = strchr(cmd, '.');
-   if (s != NULL 
-   (!strcmp(s, .jffs2) || !strcmp(s, .e) || !strcmp(s, 
.i))) {
-   if (read) {
-   /* read */
-   nand_read_options_t opts;
-   memset(opts, 0, sizeof(opts));
-   opts.buffer = (u_char*) addr;
-   opts.length = size;
-   opts.offset = off;
-   opts.quiet  = quiet;
-/*
- *  ! BROKEN !
- *
- *  TODO: Function must be implemented
- *
- * ret = nand_read_opts(nand, opts);
- */
-   } else {
-   /* write */
-   mtd_oob_ops_t opts;
-   memset(opts, 0, sizeof(opts));
-   opts.datbuf = (u_char*) addr;
-   opts.len= size;
-   opts.ooblen = 64;
-   opts.mode   = MTD_OOB_AUTO;
-   ret = nand_write_opts(nand, off, opts);
-   }
+   if (s != NULL  (!strcmp(s, .jffs2) ||
+ !strcmp(s, .e) || !strcmp(s, .i))) {
+   if (read)
+   ret = nand_read_skip_bad(nand, off, size, 
(u_char *)addr);
+   else
+   ret = nand_write_skip_bad(nand, off, size, 
(u_char *)addr);
+
} else if (s != NULL  !strcmp(s, .oob)) {
struct mtd_oob_ops ops;
 
@@ -374,7 +354,7 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char 
*argv[])
ret = nand-write_oob(nand, off, ops);
} else {
if (read)
-   ret = nand_read(nand, off, size, (u_char 
*)addr);
+   ret = nand_read_ff_upon_bad(nand, off, size, 
(u_char *)addr);
else
ret = nand_write(nand, off, size, (u_char 
*)addr);
}
@@ -399,6 +379,7 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char 
*argv[])
}
return 1;
}
+
if (strcmp(cmd, biterr) == 0) {
/* todo */
return 1;
@@ -489,23 +470,31 @@ usage:
return 1;
 }
 
-U_BOOT_CMD(nand, 5, 1, do_nand,
-   nand- NAND sub-system\n,
-   info  - show available NAND devices\n
-   nand device [dev] - show or set current device\n
-   nand read[.jffs2] - addr off|partition size\n
-   nand write[.jffs2]- addr off|partition size - read/write `size' 
bytes starting\n
-   at offset `off' to/from memory address `addr'\n
-   nand erase [clean] [off size] - erase `size' bytes from\n
-   offset `off' (entire device if not specified)\n
+U_BOOT_CMD(
+nand, 5, 1, do_nand,
+   nand - NAND sub-system\n,
+   info - show available NAND devices\n
+