diff options
-rw-r--r-- | drivers/mtd/nand/pxa3xx_nand.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c index f00ce27f61d0..8f38abdb3310 100644 --- a/drivers/mtd/nand/pxa3xx_nand.c +++ b/drivers/mtd/nand/pxa3xx_nand.c | |||
@@ -1360,9 +1360,13 @@ static int pxa_ecc_init(struct pxa3xx_nand_info *info, | |||
1360 | 1360 | ||
1361 | static int armada370_ecc_init(struct pxa3xx_nand_info *info, | 1361 | static int armada370_ecc_init(struct pxa3xx_nand_info *info, |
1362 | struct nand_ecc_ctrl *ecc, | 1362 | struct nand_ecc_ctrl *ecc, |
1363 | int strength, int page_size) | 1363 | int strength, int ecc_stepsize, int page_size) |
1364 | { | 1364 | { |
1365 | if (strength == 4 && page_size == 4096) { | 1365 | /* |
1366 | * Required ECC: 4-bit correction per 512 bytes | ||
1367 | * Select: 16-bit correction per 2048 bytes | ||
1368 | */ | ||
1369 | if (strength == 4 && ecc_stepsize == 512 && page_size == 4096) { | ||
1366 | info->ecc_bch = 1; | 1370 | info->ecc_bch = 1; |
1367 | info->chunk_size = 2048; | 1371 | info->chunk_size = 2048; |
1368 | info->spare_size = 32; | 1372 | info->spare_size = 32; |
@@ -1373,7 +1377,11 @@ static int armada370_ecc_init(struct pxa3xx_nand_info *info, | |||
1373 | ecc->strength = 16; | 1377 | ecc->strength = 16; |
1374 | return 1; | 1378 | return 1; |
1375 | 1379 | ||
1376 | } else if (strength == 8 && page_size == 4096) { | 1380 | /* |
1381 | * Required ECC: 8-bit correction per 512 bytes | ||
1382 | * Select: 16-bit correction per 1024 bytes | ||
1383 | */ | ||
1384 | } else if (strength == 8 && ecc_stepsize == 512 && page_size == 4096) { | ||
1377 | info->ecc_bch = 1; | 1385 | info->ecc_bch = 1; |
1378 | info->chunk_size = 1024; | 1386 | info->chunk_size = 1024; |
1379 | info->spare_size = 0; | 1387 | info->spare_size = 0; |
@@ -1481,6 +1489,7 @@ KEEP_CONFIG: | |||
1481 | if (info->variant == PXA3XX_NAND_VARIANT_ARMADA370) | 1489 | if (info->variant == PXA3XX_NAND_VARIANT_ARMADA370) |
1482 | ret = armada370_ecc_init(info, &chip->ecc, | 1490 | ret = armada370_ecc_init(info, &chip->ecc, |
1483 | chip->ecc_strength_ds, | 1491 | chip->ecc_strength_ds, |
1492 | chip->ecc_step_ds, | ||
1484 | mtd->writesize); | 1493 | mtd->writesize); |
1485 | else | 1494 | else |
1486 | ret = pxa_ecc_init(info, &chip->ecc, | 1495 | ret = pxa_ecc_init(info, &chip->ecc, |