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>
This commit is contained in:
Родитель
2b00668ff9
Коммит
d8251108e0
|
@ -671,9 +671,7 @@ static int fsl_elbc_chip_init_tail(struct mtd_info *mtd)
|
|||
if (chip->pagemask & 0xff000000)
|
||||
al++;
|
||||
|
||||
/* add to ECCM mode set in fsl_elbc_init */
|
||||
priv->fmr |= (12 << FMR_CWTO_SHIFT) | /* Timeout > 12 ms */
|
||||
(al << FMR_AL_SHIFT);
|
||||
priv->fmr |= al << FMR_AL_SHIFT;
|
||||
|
||||
dev_dbg(priv->dev, "fsl_elbc_init: nand->numchips = %d\n",
|
||||
chip->numchips);
|
||||
|
@ -776,8 +774,10 @@ static int fsl_elbc_chip_init(struct fsl_elbc_mtd *priv)
|
|||
priv->mtd.priv = chip;
|
||||
priv->mtd.owner = THIS_MODULE;
|
||||
|
||||
/* Set the ECCM according to the settings in bootloader.*/
|
||||
priv->fmr = in_be32(&lbc->fmr) & FMR_ECCM;
|
||||
/* set timeout to maximum */
|
||||
priv->fmr = 15 << FMR_CWTO_SHIFT;
|
||||
if (in_be32(&lbc->bank[priv->bank].or) & OR_FCM_PGS)
|
||||
priv->fmr |= FMR_ECCM;
|
||||
|
||||
/* fill in nand_chip structure */
|
||||
/* set up function call table */
|
||||
|
|
Загрузка…
Ссылка в новой задаче