mirror of https://gitee.com/openkylin/linux.git
mtd: omap2 fix prefetch mode read issue
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. This patch fixes the issue. Signed-off-by: Vimal Singh <vimalsingh@ti.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
parent
f35b6eda51
commit
c3341d0ceb
|
@ -295,11 +295,14 @@ static void omap_read_buf_pref(struct mtd_info *mtd, u_char *buf, int len)
|
|||
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);
|
||||
|
|
Loading…
Reference in New Issue