mtd: nand: omap2: use mtd_ooblayout_xxx() helpers where appropriate
The mtd_ooblayout_xxx() helper functions have been added to avoid direct accesses to the ecclayout field, and thus ease for future reworks. Use these helpers in all places where the oobfree[] and eccpos[] arrays where directly accessed. Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
This commit is contained in:
Родитель
b9c0f65fea
Коммит
8cfc1e8b68
|
@ -1498,9 +1498,8 @@ static int omap_elm_correct_data(struct mtd_info *mtd, u_char *data,
|
||||||
static int omap_write_page_bch(struct mtd_info *mtd, struct nand_chip *chip,
|
static int omap_write_page_bch(struct mtd_info *mtd, struct nand_chip *chip,
|
||||||
const uint8_t *buf, int oob_required, int page)
|
const uint8_t *buf, int oob_required, int page)
|
||||||
{
|
{
|
||||||
int i;
|
int ret;
|
||||||
uint8_t *ecc_calc = chip->buffers->ecccalc;
|
uint8_t *ecc_calc = chip->buffers->ecccalc;
|
||||||
uint32_t *eccpos = chip->ecc.layout->eccpos;
|
|
||||||
|
|
||||||
/* Enable GPMC ecc engine */
|
/* Enable GPMC ecc engine */
|
||||||
chip->ecc.hwctl(mtd, NAND_ECC_WRITE);
|
chip->ecc.hwctl(mtd, NAND_ECC_WRITE);
|
||||||
|
@ -1511,8 +1510,10 @@ static int omap_write_page_bch(struct mtd_info *mtd, struct nand_chip *chip,
|
||||||
/* Update ecc vector from GPMC result registers */
|
/* Update ecc vector from GPMC result registers */
|
||||||
chip->ecc.calculate(mtd, buf, &ecc_calc[0]);
|
chip->ecc.calculate(mtd, buf, &ecc_calc[0]);
|
||||||
|
|
||||||
for (i = 0; i < chip->ecc.total; i++)
|
ret = mtd_ooblayout_set_eccbytes(mtd, ecc_calc, chip->oob_poi, 0,
|
||||||
chip->oob_poi[eccpos[i]] = ecc_calc[i];
|
chip->ecc.total);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
/* Write ecc vector to OOB area */
|
/* Write ecc vector to OOB area */
|
||||||
chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
|
chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
|
||||||
|
@ -1539,10 +1540,7 @@ static int omap_read_page_bch(struct mtd_info *mtd, struct nand_chip *chip,
|
||||||
{
|
{
|
||||||
uint8_t *ecc_calc = chip->buffers->ecccalc;
|
uint8_t *ecc_calc = chip->buffers->ecccalc;
|
||||||
uint8_t *ecc_code = chip->buffers->ecccode;
|
uint8_t *ecc_code = chip->buffers->ecccode;
|
||||||
uint32_t *eccpos = chip->ecc.layout->eccpos;
|
int stat, ret;
|
||||||
uint8_t *oob = &chip->oob_poi[eccpos[0]];
|
|
||||||
uint32_t oob_pos = mtd->writesize + chip->ecc.layout->eccpos[0];
|
|
||||||
int stat;
|
|
||||||
unsigned int max_bitflips = 0;
|
unsigned int max_bitflips = 0;
|
||||||
|
|
||||||
/* Enable GPMC ecc engine */
|
/* Enable GPMC ecc engine */
|
||||||
|
@ -1552,13 +1550,18 @@ static int omap_read_page_bch(struct mtd_info *mtd, struct nand_chip *chip,
|
||||||
chip->read_buf(mtd, buf, mtd->writesize);
|
chip->read_buf(mtd, buf, mtd->writesize);
|
||||||
|
|
||||||
/* Read oob bytes */
|
/* Read oob bytes */
|
||||||
chip->cmdfunc(mtd, NAND_CMD_RNDOUT, oob_pos, -1);
|
chip->cmdfunc(mtd, NAND_CMD_RNDOUT,
|
||||||
chip->read_buf(mtd, oob, chip->ecc.total);
|
mtd->writesize + BADBLOCK_MARKER_LENGTH, -1);
|
||||||
|
chip->read_buf(mtd, chip->oob_poi + BADBLOCK_MARKER_LENGTH,
|
||||||
|
chip->ecc.total);
|
||||||
|
|
||||||
/* Calculate ecc bytes */
|
/* Calculate ecc bytes */
|
||||||
chip->ecc.calculate(mtd, buf, ecc_calc);
|
chip->ecc.calculate(mtd, buf, ecc_calc);
|
||||||
|
|
||||||
memcpy(ecc_code, &chip->oob_poi[eccpos[0]], chip->ecc.total);
|
ret = mtd_ooblayout_get_eccbytes(mtd, ecc_code, chip->oob_poi, 0,
|
||||||
|
chip->ecc.total);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
stat = chip->ecc.correct(mtd, buf, ecc_code, ecc_calc);
|
stat = chip->ecc.correct(mtd, buf, ecc_code, ecc_calc);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче