Root/
Source at commit 1c406daf9520ee85932009a7d9367b39a2336ad4 created 12 years 7 months ago. By Xiangfu Liu, ben nanonote: forward patches to linux-3.0 | |
---|---|
1 | From a525f2fabe86dfd4a1acc057afcb31de319ca3e5 Mon Sep 17 00:00:00 2001 |
2 | From: Xiangfu Liu <xiangfu@macbook.(none)> |
3 | Date: Fri, 19 Aug 2011 15:45:39 +0800 |
4 | Subject: [PATCH 19/29] 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 | |
10 | diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c |
11 | index 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 | -- |
43 | 1.7.4.1 |
44 | |
45 |