On Thu, 2009-12-31 at 17:50 +0530, Vimal Singh wrote:
> There is a bug in nand prefetch read routine, which comes into effect
> only if nand device is a 16-bit device (as we have in zoom boards).
> This bug is effective only with below combination of conditions:
> 1. nand deivce, in use, is a 16 bit device
> 2. nand driver supports 'subpage' read
> 3. SW ECC is in use
> 
> This was not seen old  kernel (ex: .23), because when, in early days,
> we tested this (nand prefetch read in LDP boards) there was no
> 'subpage read' support.
> Later when we had subpage read in (.27) kernel, we had hw ecc enabled
> always in our internal tree. So, we missed this bug.
> 
> Here is a patch to fix this issue:
> 
> diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c
> index 1bb799f..75004fe 100644
> --- a/drivers/mtd/nand/omap2.c
> +++ b/drivers/mtd/nand/omap2.c
> @@ -295,11 +295,14 @@ static void omap_read_buf_pref(struct
>       u32 *p = (u32 *)buf;
> 
>       /* take care of subpage reads */
> -     for (; len % 4 != 0; ) {
> -             *buf++ = __raw_readb(info->nand.IO_ADDR_R);
> -             len--;
> +     if (len % 4) {
> +             if (info->nand.options & NAND_BUSWIDTH_16)
> +                     omap_read_buf16(mtd, buf, len % 4);
> +             else
> +                     omap_read_buf8(mtd, buf, len % 4);
> +             p = (u32 *) (buf + len % 4);
> +             len -= len % 4;
>       }
> -     p = (u32 *) buf;
> 
>       /* configure and start prefetch transfer */
>       ret = gpmc_prefetch_enable(info->gpmc_cs, 0x0, len, 0x0);

Pushed this patch to my l2-mtd-2.6.git/dunno.

-- 
Best Regards,
Artem Bityutskiy (Артём Битюцкий)

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to