Skip to contentSkip to conversation

nand: Don't call adjust_size_for_badblocks for erase

PATCH New Scott Wood 2 participants 3 messages Jun 20, 2013 – Jun 21, 2013

lore
Share & tools
lore

Scott Wood

author
#0 lore raw

PATCH 1/1 nand: Don't call adjust_size_for_badblocks for erase

adjust_size_for_badblocks reduces the the operation size to account for the block skipping done by the read/write functions when an interval (partition name or whole chip) is specified rather than a data amount.

Erase does not do block skipping, except for erase.spread which takes a data amount rather than an interval (and thus already does not call adjust_size_for_badblocks). Calling adjust_size_for_badblocks when block skipping is not done means that if bad blocks are present, the "nand erase.part" and "nand erase.chip" commands will fail to erase blocks at the end of the interval.

Cc Harvey Chapman <[email protected]>
---
 common/cmd_nand.c |    9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)
common/cmd_nand.c +1 -8
index 8b1e01a..886212a 100644
@@ -426,7 +426,7 @@ static int raw_access(nand_info_t *nand, ulong addr, loff_t off, ulong count,
 }
 
 /* Adjust a chip/partition size down for bad blocks so we don't
- * read/write/erase past the end of a chip/partition by accident.
+ * read/write past the end of a chip/partition by accident.
  */
 static void adjust_size_for_badblocks(loff_t *size, loff_t offset, int dev)
 {
@@ -546,7 +546,6 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 		int scrub = !strncmp(cmd, "scrub", 5);
 		int spread = 0;
 		int args = 2;
-		int adjust_size = 0;
 		const char *scrub_warn =
 			"Warning: "
 			"scrub option will erase all factory set bad blocks!\n"
@@ -563,10 +562,8 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 				spread = 1;
 			} else if (!strcmp(&cmd[5], ".part")) {
 				args = 1;
-				adjust_size = 1;
 			} else if (!strcmp(&cmd[5], ".chip")) {
 				args = 0;
-				adjust_size = 1;
 			} else {
 				goto usage;
 			}
@@ -586,10 +583,6 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 				 &maxsize) != 0)
 			return 1;
 
-		/* size is unspecified */
-		if (adjust_size && !scrub)
-			adjust_size_for_badblocks(&size, off, dev);
-
 		nand = &nand_info[dev];
 
 		memset(&opts, 0, sizeof(opts));
Signature · 1 line
1.7.10.4
#1 lore raw

PATCH 1/1 nand: Don't call adjust_size_for_badblocks for erase

Hello Scott,

Am 20.06.2013 19:52, schrieb Scott Wood:

Quoted 1 line

adjust_size_for_badblocks reduces the the operation size to account

nitpicking:
please only one "the".

Quoted 11 lines

for the block skipping done by the read/write functions when an interval (partition name or whole chip) is specified rather than a data amount.

Erase does not do block skipping, except for erase.spread which takes a data amount rather than an interval (and thus already does not call adjust_size_for_badblocks). Calling adjust_size_for_badblocks when block skipping is not done means that if bad blocks are present, the "nand erase.part" and "nand erase.chip" commands will fail to erase blocks at the end of the interval.

Quoted 5 lines
Cc Harvey Chapman <[email protected]>
---
 common/cmd_nand.c |    9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)

bye,
Heiko

Signature · 2 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
author
#2 lore raw

PATCH 1/1 nand: Don't call adjust_size_for_badblocks for erase

Quoted 7 lines · Heiko Schocher

Hello Scott,

Am 20.06.2013 19:52, schrieb Scott Wood:

Quoted 1 line

adjust_size_for_badblocks reduces the the operation size to account

nitpicking:
please only one "the".

Thanks, I'll fix when applying.

-Scott