From mboxrd@z Thu Jan 1 00:00:00 1970 From: Scott Wood Date: Tue, 01 Sep 2009 10:36:04 -0500 Subject: [U-Boot] [PATCH 2/2] MTD:NAND: ADD new ECC mode NAND_ECC_HW_OOB_FIRST In-Reply-To: <4b73d43f0909010822s2e06e942i245135ee036660c0@mail.gmail.com> References: <7081825318460577925@unknownmsgid> <4b73d43f0909010822s2e06e942i245135ee036660c0@mail.gmail.com> Message-ID: <4A9D3F64.7050900@freescale.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 (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? -Scott