Using nand_change_read_column_op() in nand_onfi_detect()

Sascha Hauer s.hauer at pengutronix.de
Tue May 14 06:42:36 PDT 2024


On Tue, May 14, 2024 at 01:53:16PM +0200, Miquel Raynal wrote:
> Hi Sascha,
> 
> s.hauer at pengutronix.de wrote on Tue, 14 May 2024 13:48:35 +0200:
> 
> > Hi all,
> > 
> > I am currently stumbling over this in nand_onfi_detect():
> > 
> > 	for (i = 0; i < ONFI_PARAM_PAGES; i++) {
> > 		if (!i)
> > 			ret = nand_read_param_page_op(chip, 0, &pbuf[i],
> > 						      sizeof(*pbuf));
> > 		else if (use_datain)
> > 			ret = nand_read_data_op(chip, &pbuf[i], sizeof(*pbuf),
> > 						true, false);
> > 		else
> > 			ret = nand_change_read_column_op(chip, sizeof(*pbuf) * i,
> > 							 &pbuf[i], sizeof(*pbuf),
> > 							 true);
> > 		...
> > 	}
> > 
> > nand_change_read_column_op() heavily uses mtd->writesize and bails out
> > with an error when the writesize is 0. mtd->writesize is still
> > uninitialised at that point, it's initialized a few lines further down
> > in the same function. It looks like this code never worked as expected.
> > 
> > Also it seems use_datain is always 0, see 1), so existing code only ever
> > reads the first parameter page.
> > 
> > The same pattern is in nand_jedec_detect() as well.
> > 
> > Not sure what we make from this.
> > 
> > Sascha
> > 
> > 1) https://lore.kernel.org/linux-mtd/20240514103355.817056-1-s.hauer@pengutronix.de/T/#u
> > 
> 
> Sorry for not mentioning that before, I sent two fixes about that:
> https://lore.kernel.org/linux-mtd/20240507160546.130255-1-miquel.raynal@bootlin.com/T/#t

Thanks for noting. This partly fixes my problem, see my mail there.

Sascha

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



More information about the linux-mtd mailing list