Trivial (?) question about nand_command_[lp]()

Boris Brezillon boris.brezillon at free-electrons.com
Fri Aug 26 02:38:04 PDT 2016


Hi Ricard,

Please Cc the NAND and MTD maintainers when sending NAND related
questions.

On Mon, 22 Aug 2016 13:19:17 +0200
Ricard Wanderlof <ricard.wanderlof at axis.com> wrote:

> I'm having a close look at nand_base.c:nand_command(), and there's 
> something I can't get my head around: According to the code, when the 
> command to be sent is NAND_CMD_SEQIN (0x80), used for programming a page, 
> first a read command (READ0, READ1 or READOOB depending on the column 
> address) is sent to the flash, followed by the SEQIN proper. Are there 
> flashes which require a read command to be sent (with no 
> address or data bytes) immediately before Page Program?

No, it's probably a bug. Should be

	if (command == NAND_CMD_RNDOUT) {
		...
	} else {
		chip->cmd_ctrl(mtd, command, ctrl);
	}

instead of

	if (command == NAND_CMD_SEQIN) {
		...
	}
	chip->cmd_ctrl(mtd, command, ctrl);

Not sure we have a lot of people testing this code (it's only used
when interacting with really old NANDs).

> 
> A related issue is a difference versus nand_command_lp(). In the latter, 
> NAND_NCE is set for every command towards the flash, which makes sense, as 
> the chip enable should be active throughout the whole sequence. However, 
> in nand_command(), NAND_NCE is only set when neither NAND_ALE nor NAND_CLE 
> are set. Is this an older convention in the code that CE is implied for 
> small-page flashes when ALE or CLE is set, but not for the large-page 
> case?

No, again, it's probably a bug.

Feel free to send fixes. BTW, do you have a way to test the changes?

Thanks,

Boris




More information about the linux-mtd mailing list