diff options
author | Shengzhou Liu <Shengzhou.Liu@freescale.com> | 2011-12-12 04:40:52 -0500 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2012-01-09 13:18:44 -0500 |
commit | d8251108e0def5a2f15124a8e6314b14bfa5eb9c (patch) | |
tree | d7aab75afb2d7ff33ef93dc716b73a6c80634755 | |
parent | 2b00668ff9d91d594a204ff2c3bf940d483e4b5f (diff) |
mtd: nand: fixup for fmr initialization of Freescale NAND controller
There was a bug for fmr initialization, which lead to fmr was always 0x100
in fsl_elbc_chip_init() and caused FCM command timeout before calling
fsl_elbc_chip_init_tail(), now we initialize CWTO to maximum timeout value
and not relying on the setting of bootloader.
Signed-off-by: Shengzhou Liu <Shengzhou.Liu@freescale.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
-rw-r--r-- | drivers/mtd/nand/fsl_elbc_nand.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/mtd/nand/fsl_elbc_nand.c b/drivers/mtd/nand/fsl_elbc_nand.c index d29479abe504..080e6037cbfb 100644 --- a/drivers/mtd/nand/fsl_elbc_nand.c +++ b/drivers/mtd/nand/fsl_elbc_nand.c | |||
@@ -671,9 +671,7 @@ static int fsl_elbc_chip_init_tail(struct mtd_info *mtd) | |||
671 | if (chip->pagemask & 0xff000000) | 671 | if (chip->pagemask & 0xff000000) |
672 | al++; | 672 | al++; |
673 | 673 | ||
674 | /* add to ECCM mode set in fsl_elbc_init */ | 674 | priv->fmr |= al << FMR_AL_SHIFT; |
675 | priv->fmr |= (12 << FMR_CWTO_SHIFT) | /* Timeout > 12 ms */ | ||
676 | (al << FMR_AL_SHIFT); | ||
677 | 675 | ||
678 | dev_dbg(priv->dev, "fsl_elbc_init: nand->numchips = %d\n", | 676 | dev_dbg(priv->dev, "fsl_elbc_init: nand->numchips = %d\n", |
679 | chip->numchips); | 677 | chip->numchips); |
@@ -776,8 +774,10 @@ static int fsl_elbc_chip_init(struct fsl_elbc_mtd *priv) | |||
776 | priv->mtd.priv = chip; | 774 | priv->mtd.priv = chip; |
777 | priv->mtd.owner = THIS_MODULE; | 775 | priv->mtd.owner = THIS_MODULE; |
778 | 776 | ||
779 | /* Set the ECCM according to the settings in bootloader.*/ | 777 | /* set timeout to maximum */ |
780 | priv->fmr = in_be32(&lbc->fmr) & FMR_ECCM; | 778 | priv->fmr = 15 << FMR_CWTO_SHIFT; |
779 | if (in_be32(&lbc->bank[priv->bank].or) & OR_FCM_PGS) | ||
780 | priv->fmr |= FMR_ECCM; | ||
781 | 781 | ||
782 | /* fill in nand_chip structure */ | 782 | /* fill in nand_chip structure */ |
783 | /* set up function call table */ | 783 | /* set up function call table */ |