[PATCH v3 2/2] mtd: mediatek: driver for MTK Smart Device Gen1 NAND
Boris Brezillon
boris.brezillon at free-electrons.com
Tue Apr 19 13:24:46 PDT 2016
On Mon, 11 Apr 2016 12:56:12 -0400
Jorge Ramirez-Ortiz <jorge.ramirez-ortiz at linaro.org> wrote:
> +static int mtk_nfc_read_oob(struct mtd_info *mtd, struct nand_chip *chip,
> + int page)
> +{
> + u8 *buf = chip->buffers->databuf;
You're touching ->databuf here, and the core uses this buffer for its
internal cache. If want to use this buffer you have to invalidate the
cache by setting chip->pagebuf to -1 first.
> + struct mtd_ecc_stats stats;
> + int ret;
> +
> + stats = mtd->ecc_stats;
> +
> + memset(buf, 0xff, mtd->writesize);
> + chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
> +
> + ret = mtk_nfc_read_page_hwecc(mtd, chip, buf, 1, page);
> +
> + /* mark as invalid data 0x00 if UECC happens */
> + if ((mtd->ecc_stats.failed - stats.failed) > 0)
> + memset(chip->oob_poi, 0, mtd->oobsize);
> +
> + if (ret < mtd->bitflip_threshold)
> + mtd->ecc_stats.corrected = stats.corrected;
> +
> + return ret;
> +}
--
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
More information about the linux-mtd
mailing list