nand_spl: Fix large page nand_command()
authorAlex Waterman <awaterman@dawning.com>
Wed, 6 Apr 2011 20:01:52 +0000 (16:01 -0400)
committerScott Wood <scottwood@freescale.com>
Fri, 15 Apr 2011 20:53:11 +0000 (15:53 -0500)
This patch changes the large page nand_command() routine to use a word
offset instead of a byte offset. The 'offs' argument gets divided by 2
so that the offset passed to nand_command() is still by byte offset.
Originally, the offset was not shifted and when too high an offset was
requested the nand chip would attempt to read non-existent data.

Signed-off-by: Alex Waterman <awaterman@dawning.com>
nand_spl/nand_boot.c

index 76b8566fb2a95c45a2732f5bb88319efb52f338a..4a968784e757798992499f99387a04d11e36cf35 100644 (file)
@@ -90,6 +90,10 @@ static int nand_command(struct mtd_info *mtd, int block, int page, int offs, u8
                cmd = NAND_CMD_READ0;
        }
 
+       /* Shift the offset from byte addressing to word addressing. */
+       if (this->options & NAND_BUSWIDTH_16)
+               offs >>= 1;
+
        /* Begin command latch cycle */
        this->cmd_ctrl(mtd, cmd, NAND_CTRL_CLE | NAND_CTRL_CHANGE);
        /* Set ALE and clear CLE to start address cycle */