Problems in TI omap2-nand driver OMAP_ECC_BCH8_CODE_HW_DETECTION_SW mode
Ted Juan
ted.juan at gmail.com
Mon May 12 01:57:06 PDT 2014
Hi All,
Sorry, there is no problem. I got it.
The latest bch.c decode_bch() has XOR read_ecc and calc_ecc in it.
2014-05-12 16:08 GMT+08:00 Ted Juan <ted.juan at gmail.com>:
> Hi All,
>
> TI am3517/3505 can use the OMAP_ECC_BCH8_CODE_HW_DETECTION_SW mode in
> the latest linux-mtd git tree.
>
> I post the latest driver and older driver as below.
>
> Wouldn't the latest driver get bad performance since it always do the
> decode_bch() ?
>
> Thanks,
> regards,
>
> Ted
>
>
> ==========the latest omap2.c driver==========
>
> int nand_bch_correct_data(struct mtd_info *mtd, unsigned char *buf,
> unsigned char *read_ecc, unsigned char *calc_ecc)
> {
> const struct nand_chip *chip = mtd->priv;
> struct nand_bch_control *nbc = chip->ecc.priv;
> unsigned int *errloc = nbc->errloc;
> int i, count;
>
> count = decode_bch(nbc->bch, NULL, chip->ecc.size, read_ecc, calc_ecc,
> NULL, errloc);
> if (count > 0) {
>
> ......................
> }
>
>
> ==========older omap2.c driver==========
>
> static int omap_correct_data_bch(int correct_bits, struct mtd_info *mtd,
> uint8_t *dat, uint8_t *read_ecc,
> uint8_t *calc_ecc)
> {
>
> ..................
>
> for (i = 0; i < blockCnt; i++) {
> /* check if any ecc error */
> eccflag = 0;
> for (j = 0; (j < eccsize) && (eccflag == 0); j++)
> if (calc_ecc[j] != 0)
> eccflag = 1;
>
> if (eccflag == 1) {
> eccflag = 0;
> for (j = 0; (j < eccsize) && (eccflag == 0); j++)
> if (read_ecc[j] != 0xFF)
> eccflag = 1;
> }
>
> if (eccflag == 1) {
> /*printk(KERN_INFO "...bch correct(%d 512 byte)\n", i+1);*/
> count = decode_bch(mode, calc_ecc, err_loc);
>
> ...............
>
>
> }
More information about the linux-mtd
mailing list