[U-Boot] [PATCH] nand: adjust erase/read/write partition/chip size for bad blocks

Harvey Chapman hchapman at 3gfp.com
Wed Feb 27 04:04:22 CET 2013


On Feb 26, 2013, at 8:42 PM, Scott Wood <scottwood at freescale.com> wrote:

> On 02/25/2013 11:43:48 PM, Harvey Chapman wrote:
> 
> Looks OK except for style issues:

Will do.

>> +	/* We grab the nand info object here fresh because this is usually
>> +	 * called after arg_off_size() which can change the value of dev.
>> +	 */
> 
> /*
> * U-Boot multiline
> * brace style is like this
> */
> 
> ...in general, U-Boot follows Linux code style.

I was trying to match the file. Every other multi-line comment in that file has the asterisks aligned.

>> +	nand_info_t *nand = &nand_info[dev];
>> +	loff_t original_size = *size;
>> +	loff_t maxoffset = offset + *size;
>> +	int badblocks = 0;
>> +
>> +	/* count badblocks in NAND from offset to offset + size */
>> +	for (; offset < maxoffset; offset += nand->erasesize)
>> +		if (nand_block_isbad(nand, offset)) {
>> +			badblocks++;
>> +		}
> 
> Need braces around multi-line statements.

I misunderstood you before. I thought you wanted them around the if body. Got it.

>> +	/* adjust size if any bad blocks found */
>> +	if (badblocks) {
>> +		*size -= badblocks * nand->erasesize;
>> +		printf("size adjusted to 0x%llx (%d bad blocks)\n",
>> +		       (unsigned long long)*size, badblocks);
>> +	}
>> +	/* return size adjusted as a positive value so callers
>> +	 * can use the return code to determine if anything happened
>> +	 */
>> +	return (original_size - *size);
> 
> Unnecessary parens.
> 
> Do we have any callers that care about the return code?  If not, don't bother with it.  This is an internal static function, not a public API.  It's easy to change later if we need to.

Ok.

>> 		nand = &nand_info[dev];
>> 		memset(&opts, 0, sizeof(opts));
>> @@ -644,6 +682,19 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>> 						&off, &size) != 0)
>> 				return 1;
>> +			/* If no size was given, it has been calculated for us as
>> +			 * the remainder of the chip/partition from offset. Adjust
>> +			 * down for bad blocks, if necessary, so we don't
>> +			 * read/write past the end of the partition by accident.
>> +			 *
>> +			 * nand read addr part size     "size" is arg 5
>> +			 */
>> +			if (argc < 5) {
>> +				/* Don't try to use rwsize here, it's not the
>> +				 * right type
>> +				 */
>> +				adjust_size_for_badblocks(&size, off, dev);
>> +			}
> 
> No need to be quite so verbose in the comments.  If someone tries to change "size" to "rwsize" the compiler will complain about the type mismatch.

Actually, it does give a warning that flies by and is buried inside the compile log. Then, it'll let you run and walk on memory. Ask me how I know. :)

I don't have a special love for that comment; I'm ok to remove it.

> As for the other comment, the function name "adjust_size_for_badblocks" explains what's going on well enough IMHO.  At most a single comment of /* size is unspecified */ to describe the if block.  At least put the explanation on the adjust_size_for_badblocks() function rather than repeat it for read/write and erase.

will do.

Thanks,
Harvey
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 1089 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20130226/2b592bfa/attachment.bin>


More information about the U-Boot mailing list