aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/mtd/nand/pxa3xx_nand.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
index 31aae535a02a..2a7a0b27ac38 100644
--- a/drivers/mtd/nand/pxa3xx_nand.c
+++ b/drivers/mtd/nand/pxa3xx_nand.c
@@ -286,6 +286,16 @@ static struct nand_bbt_descr bbt_mirror_descr = {
286 .pattern = bbt_mirror_pattern 286 .pattern = bbt_mirror_pattern
287}; 287};
288 288
289static struct nand_ecclayout ecc_layout_2KB_bch4bit = {
290 .eccbytes = 32,
291 .eccpos = {
292 32, 33, 34, 35, 36, 37, 38, 39,
293 40, 41, 42, 43, 44, 45, 46, 47,
294 48, 49, 50, 51, 52, 53, 54, 55,
295 56, 57, 58, 59, 60, 61, 62, 63},
296 .oobfree = { {2, 30} }
297};
298
289static struct nand_ecclayout ecc_layout_4KB_bch4bit = { 299static struct nand_ecclayout ecc_layout_4KB_bch4bit = {
290 .eccbytes = 64, 300 .eccbytes = 64,
291 .eccpos = { 301 .eccpos = {
@@ -1360,6 +1370,17 @@ static int pxa_ecc_init(struct pxa3xx_nand_info *info,
1360 * Required ECC: 4-bit correction per 512 bytes 1370 * Required ECC: 4-bit correction per 512 bytes
1361 * Select: 16-bit correction per 2048 bytes 1371 * Select: 16-bit correction per 2048 bytes
1362 */ 1372 */
1373 } else if (strength == 4 && ecc_stepsize == 512 && page_size == 2048) {
1374 info->ecc_bch = 1;
1375 info->chunk_size = 2048;
1376 info->spare_size = 32;
1377 info->ecc_size = 32;
1378 ecc->mode = NAND_ECC_HW;
1379 ecc->size = info->chunk_size;
1380 ecc->layout = &ecc_layout_2KB_bch4bit;
1381 ecc->strength = 16;
1382 return 1;
1383
1363 } else if (strength == 4 && ecc_stepsize == 512 && page_size == 4096) { 1384 } else if (strength == 4 && ecc_stepsize == 512 && page_size == 4096) {
1364 info->ecc_bch = 1; 1385 info->ecc_bch = 1;
1365 info->chunk_size = 2048; 1386 info->chunk_size = 2048;