[U-Boot] The command "nand write.yaffs" is not working correctly

Jin Zhengxiong-R64188 R64188 at freescale.com
Fri Sep 30 11:10:45 CEST 2011


> -----Original Message-----
> From: u-boot-bounces at lists.denx.de [mailto:u-boot-bounces at lists.denx.de] On
> Behalf Of Peter Pan
> Sent: Wednesday, September 21, 2011 9:09 AM
> To: u-boot at lists.denx.de
> Subject: [U-Boot] The command "nand write.yaffs" is not working correctly
> 
> I'm recently facing a yaffs2 image write problem in u-boot.
> 
> In u-boot console, I write the yaffs2 image in ram to an already erased nand
> flash with command "nand write.yaffs ${loadaddr} ${nandrootoffset} ${filesize}".
> After that, if I boot using a ramdisk and mount that yaffs2 partition, I can
> only see a folder of "lost+fount". I seems nothing has been written into that
> partition.
> 
> But if now I write this image using "nandwrite -a -o /dev/mtd4 yaffs2.img" and
> mount that partition, it's working.
> 
> Anyone met that problem already? Or if I did anything wrong?

[Jin Zhengxiong-R64188] 
I once met the similar issue with 2011.03 base and fixed it with following patch, But 
I didn't do a detail checking for that, FYI...

@@ -499,6 +499,7 @@ int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
 		return -EINVAL;
 	}
 
+#ifndef CONFIG_CMD_NAND_YAFFS
 	if (!need_skip) {
 		rval = nand_write (nand, offset, length, buffer);
 		if (rval == 0)
@@ -509,13 +510,12 @@ int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
 			offset, rval);
 		return rval;
 	}
-
+#endif
 	while (left_to_write > 0) {
 		size_t block_offset = offset & (nand->erasesize - 1);
 		size_t write_size;
 
 		WATCHDOG_RESET ();
-
 		if (nand_block_isbad (nand, offset & ~(nand->erasesize - 1))) {
 			printf ("Skip bad block 0x%08llx\n",
 				offset & ~(nand->erasesize - 1));
@@ -546,7 +546,7 @@ int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
 				ops.oobbuf = ops.datbuf + pagesize;
 
 				rval = nand->write_oob(nand, offset, &ops);
-				if (!rval)
+				if ( rval != 0)
 					break;
 
 				offset += pagesize;




More information about the U-Boot mailing list