fsl_elbc_nand: Hard-code the FBAR/FPAR split.
authorScott Wood <scottwood@freescale.com>
Thu, 22 May 2008 20:02:46 +0000 (15:02 -0500)
committerScott Wood <scottwood@freescale.com>
Tue, 12 Aug 2008 16:31:26 +0000 (11:31 -0500)
The hardware has separate registers for block and page-within-block,
but the division between the two has no apparent relation to the
actual erase block size of the NAND chip.

Signed-off-by: Scott Wood <scottwood@freescale.com>
drivers/mtd/nand/fsl_elbc_nand.c

index ab3e0fdf56481114e4f697eb3f46cefb55b4c44a..0bd1bdbcf00c4c45254774992fd761a4cd8e1925 100644 (file)
@@ -138,15 +138,14 @@ static void set_addr(struct mtd_info *mtd, int column, int page_addr, int oob)
 
        ctrl->page = page_addr;
 
-       out_be32(&lbc->fbar,
-                page_addr >> (chip->phys_erase_shift - chip->page_shift));
-
        if (priv->page_size) {
+               out_be32(&lbc->fbar, page_addr >> 6);
                out_be32(&lbc->fpar,
                         ((page_addr << FPAR_LP_PI_SHIFT) & FPAR_LP_PI) |
                         (oob ? FPAR_LP_MS : 0) | column);
                buf_num = (page_addr & 1) << 2;
        } else {
+               out_be32(&lbc->fbar, page_addr >> 5);
                out_be32(&lbc->fpar,
                         ((page_addr << FPAR_SP_PI_SHIFT) & FPAR_SP_PI) |
                         (oob ? FPAR_SP_MS : 0) | column);