[PATCH 3/3 v3] NAND: add support for reading ONFI parameters from NAND device

Florian Fainelli florian at openwrt.org
Tue Aug 31 08:02:41 EDT 2010


Hello Artem,

On Tuesday 31 August 2010 13:46:59 Artem Bityutskiy wrote:
> Hi,
> 
> I've added these to my l2-mtd-2.6 / dunno tree, but I have a comment: is
> it possible/feasible to make the below block to be a separate function.
> It is quite large, and difficult to read when it is embedded into the
> function. Also, the indentation becomes more difficult because of too
> much nesting.

I will submit an incremental patch which addresses the issue you mentionned. 
Thanks for your review!

> 
> Also, some stylistic nit-picks below.
> 
> On Mon, 2010-08-30 at 18:32 +0200, Florian Fainelli wrote:
> > +		/* try ONFI for unknow chip or LP */
> > +		chip->cmdfunc(mtd, NAND_CMD_READID, 0x20, -1);
> > +		if (chip->read_byte(mtd) == 'O' &&
> > +			chip->read_byte(mtd) == 'N' &&
> > +			chip->read_byte(mtd) == 'F' &&
> > +			chip->read_byte(mtd) == 'I') {
> > +
> > +			struct nand_onfi_params *p = &chip->onfi_params;
> > +			int i;
> > +
> > +			printk(KERN_INFO "ONFI flash detected\n");
> > +			chip->cmdfunc(mtd, NAND_CMD_PARAM, 0, -1);
> > +			for (i = 0; i < 3; i++) {
> > +				chip->read_buf(mtd, (uint8_t *)p, sizeof(*p));
> > +				if (onfi_crc16(ONFI_CRC_BASE, (uint8_t *)p, 254) ==
> > +								le16_to_cpu(p->crc))
> > +				{
> > +					 printk(KERN_INFO "ONFI param page %d 
valid\n", i);
> > +					 break;
> > +				}
> 
> I think { should me on the same line as if. Moving to a separate func
> will help. Also, check the patch with scripts/checkpatch.pl.

To be frank, nand_base.c already had quite some stylistic issues so I did not 
even give it a try.

> 
> > +			}
> > +
> > +			if (i < 3) {
> > +				/* check version */
> > +				int val = le16_to_cpu(p->revision);
> > +				if (val == 1 || val > (1 << 4))
> > +					printk(KERN_INFO "%s: unsupported ONFI 
version: %d\n",
> > +						__func__, val);
> > +				else {
> > +					if (val & (1 << 4))
> > +						chip->onfi_version = 22;
> > +					else if (val & (1 << 3))
> > +						chip->onfi_version = 21;
> > +					else if (val & (1 << 2))
> > +						chip->onfi_version = 20;
> > +					else
> > +						chip->onfi_version = 10;
> > +				}
> > +			}
> > +
> > +			if (chip->onfi_version) {
> > +				sanitize_string(p->manufacturer, sizeof(p-
>manufacturer));
> > +				sanitize_string(p->model, sizeof(p->model));
> > +				if (!mtd->name)
> > +					mtd->name = p->model;
> > +				mtd->writesize = le32_to_cpu(p->byte_per_page);
> > +				mtd->erasesize = le32_to_cpu(p-
>pages_per_block)*mtd->writesize;
> > +				mtd->oobsize = le16_to_cpu(p-
>spare_bytes_per_page);
> > +				chip->chipsize = le32_to_cpu(p->blocks_per_lun) * 
mtd->erasesize;
> 
> You have whitespaces around '*' here, but 2 lines before you did not
> have.
> 
> > +				busw = 0;
> > +				if (le16_to_cpu(p->features) & 1)
> > +					busw = NAND_BUSWIDTH_16;
> > +
> > +				chip->options &= ~NAND_CHIPOPTIONS_MSK;
> > +				chip->options |= (NAND_NO_READRDY |
> > +						NAND_NO_AUTOINCR) & 
NAND_CHIPOPTIONS_MSK;
> > +
> > +				goto ident_done;
> > +
> > +			}
> > +		}



More information about the linux-mtd mailing list