| Date: | 2011-02-26 15:32:30 (2 years 2 months ago) |
|---|---|
| Author: | Lars C. |
| Commit: | b05a5adf03613de371c77c3235f7d970d7cd0c71 |
| Message: | NAND: Optimize reading the eec data for the JZ4740 (evil hack) We know that the ecc data is continuous, this allows us to only read the ecc data instead of the whole oob section, which slightly improves performance. Note that this is an evil hack, which will break platforms where the ecc data is non-continuous. |
| Files: |
drivers/mtd/nand/nand_base.c (4 diffs) |
Change Details
| drivers/mtd/nand/nand_base.c | ||
|---|---|---|
| 1316 | 1316 | /* Read the OOB area first */ |
| 1317 | 1317 | /* Read the OOB area first */ |
| 1318 | 1318 | if (mtd->writesize > 512) { |
| 1319 | chip->cmdfunc(mtd, NAND_CMD_READ0, mtd->writesize, page); | |
| 1320 | chip->read_buf(mtd, chip->oob_poi, mtd->oobsize); | |
| 1319 | chip->cmdfunc(mtd, NAND_CMD_READ0, mtd->writesize + eccpos[0], page); | |
| 1320 | chip->read_buf(mtd, ecc_code, chip->ecc.total); | |
| 1321 | 1321 | chip->cmdfunc(mtd, NAND_CMD_RNDOUT, 0, -1); |
| 1322 | 1322 | } else { |
| 1323 | 1323 | chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page); |
| ... | ... | |
| 1325 | 1325 | chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page); |
| 1326 | 1326 | } |
| 1327 | 1327 | |
| 1328 | for (i = 0; i < chip->ecc.total; i++) | |
| 1329 | ecc_code[i] = chip->oob_poi[eccpos[i]]; | |
| 1330 | ||
| 1331 | 1328 | for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) { |
| 1332 | 1329 | int stat; |
| 1333 | 1330 | |
| ... | ... | |
| 1382 | 1379 | |
| 1383 | 1380 | /* Read the OOB area first */ |
| 1384 | 1381 | if (mtd->writesize > 512) { |
| 1385 | chip->cmdfunc(mtd, NAND_CMD_READ0, mtd->writesize, page); | |
| 1386 | chip->read_buf(mtd, chip->oob_poi, mtd->oobsize); | |
| 1382 | chip->cmdfunc(mtd, NAND_CMD_READ0, mtd->writesize + eccpos[0], page); | |
| 1383 | chip->read_buf(mtd, ecc_code, chip->ecc.total); | |
| 1387 | 1384 | chip->cmdfunc(mtd, NAND_CMD_RNDOUT, data_col_addr, -1); |
| 1388 | 1385 | } else { |
| 1389 | 1386 | chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page); |
| ... | ... | |
| 1391 | 1388 | chip->cmdfunc(mtd, NAND_CMD_READ0, data_col_addr, page); |
| 1392 | 1389 | } |
| 1393 | 1390 | |
| 1394 | for (i = 0; i < chip->ecc.total; i++) | |
| 1395 | ecc_code[i] = chip->oob_poi[eccpos[i]]; | |
| 1396 | ||
| 1397 | 1391 | p = bufpoi + data_col_addr; |
| 1398 | 1392 | |
| 1399 | 1393 | for (i = eccbytes * start_step; num_steps; num_steps--, i += eccbytes, p += eccsize) { |
Branches:
ben-wpan
ben-wpan-stefan
5396a9238205f20f811ea57898980d3ca82df0b6
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9
