[U-Boot] [PATCH 2/2] MTD:NAND: ADD new ECC mode NAND_ECC_HW_OOB_FIRST

John Rigby jcrigby at gmail.com
Tue Sep 1 18:31:18 CEST 2009


Scott answered my question about chips that don't support NAND_CMD_READOOB,
we need to take care of it in cmdfunc.

I still don't see why the calculate method is called.  The results are
ignored.

On Tue, Sep 1, 2009 at 10:03 AM, Paulraj, Sandeep <s-paulraj at ti.com> wrote:

>
> > John Rigby wrote:
> > > Sorry for the late comments.  We have been trying to use this code with
> > > the associated davinci 4-bit ecc patches and have some questions
> We use this internally and it works. Are you having any issues because we
> don't see any!!
> J-C has to apply a patch and you will need that for this to work properly.
> That patch updates the DM355 Config
> > (inline).
> > >
> > >     .....
> > >     +       uint8_t *ecc_code = chip->buffers->ecccode;
> > >     +       uint32_t *eccpos = chip->ecc.layout->eccpos;
> > >     +       uint8_t *ecc_calc = chip->buffers->ecccalc;
> > >     +
> > >     +       /* Read the OOB area first */
> > >     +       chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
> > >
> > >
> > > What about chips that do not support the  NAND_CMD_READOOB?  Do I need
> > > to provide my own read routine for that case?
> >
> > cmdfunc is supposed to fix that up.  This is already the case with
> > existing code.
> >
> > >     +       chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
> > >     +       chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
> > >     +
> > >     +       for (i = 0; i < chip->ecc.total; i++)
> > >     +               ecc_code[i] = chip->oob_poi[eccpos[i]];
> > >     +
> > >     +       for (i = 0; eccsteps; eccsteps--, i += eccbytes, p +=
> > eccsize) {
> > >     +               int stat;
> > >     +
> > >     +               chip->ecc.hwctl(mtd, NAND_ECC_READ);
> > >     +               chip->read_buf(mtd, p, eccsize);
> > >     +               chip->ecc.calculate(mtd, p, &ecc_calc[i]);
> > >
> > >
> > > Here you calculate ecc then never use the result?
> >
> > Hmm, that looks wrong, both here and in the davinci driver.  Are the two
> > calls to nand_davinci_4bit_readecc reading different things?  Does the
> > calculate function have any side effects beyond producing data that is
> > never used?
> Have you reads the patch description. Maybe that might help a bit
>
> This patch adds the new mode NAND_ECC_HW_OOB_FIRST in the nand code to
> support 4-bit ECC on TI DaVinci devices with large page (up to 2K) NAND
> chips.  This ECC mode is similar to NAND_ECC_HW, with the exception of
> read_page API that first reads the OOB area, reads the data in chunks,
> feeds the ECC from OOB area to the ECC hw engine and perform any
> correction on the data as per the ECC status reported by the engine.
>
> >
> > -Scott
> > _______________________________________________
> > U-Boot mailing list
> > U-Boot at lists.denx.de
> > http://lists.denx.de/mailman/listinfo/u-boot
>
>


More information about the U-Boot mailing list