Root/target/linux/xburst/patches-3.0/0019-902-NAND-Optimize-NAND_ECC_HW_OOB_FIRST-read.patch.patch

1From a525f2fabe86dfd4a1acc057afcb31de319ca3e5 Mon Sep 17 00:00:00 2001
2From: Xiangfu Liu <xiangfu@macbook.(none)>
3Date: Fri, 19 Aug 2011 15:45:39 +0800
4Subject: [PATCH 19/32] 902-NAND-Optimize-NAND_ECC_HW_OOB_FIRST-read.patch
5
6---
7 drivers/mtd/nand/nand_base.c | 14 ++++++++++----
8 1 files changed, 10 insertions(+), 4 deletions(-)
9
10diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
11index a46e9bb..a9afe23 100644
12--- a/drivers/mtd/nand/nand_base.c
13+++ b/drivers/mtd/nand/nand_base.c
14@@ -1305,9 +1305,15 @@ static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
15     uint8_t *ecc_calc = chip->buffers->ecccalc;
16 
17     /* Read the OOB area first */
18- chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
19- chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
20- chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
21+ if (mtd->writesize > 512) {
22+ chip->cmdfunc(mtd, NAND_CMD_READ0, mtd->writesize, page);
23+ chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
24+ chip->cmdfunc(mtd, NAND_CMD_RNDOUT, 0, -1);
25+ } else {
26+ chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
27+ chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
28+ chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
29+ }
30 
31     for (i = 0; i < chip->ecc.total; i++)
32         ecc_code[i] = chip->oob_poi[eccpos[i]];
33@@ -1477,7 +1483,7 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
34         if (realpage != chip->pagebuf || oob) {
35             bufpoi = aligned ? buf : chip->buffers->databuf;
36 
37- if (likely(sndcmd)) {
38+ if (likely(sndcmd) && chip->ecc.mode != NAND_ECC_HW_OOB_FIRST) {
39                 chip->cmdfunc(mtd, NAND_CMD_READ0, 0x00, page);
40                 sndcmd = 0;
41             }
42--
431.7.4.1
44
45

Archive Download this file



interactive