|
@@ -286,6 +286,16 @@ static struct nand_bbt_descr bbt_mirror_descr = {
|
|
.pattern = bbt_mirror_pattern
|
|
.pattern = bbt_mirror_pattern
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+static struct nand_ecclayout ecc_layout_2KB_bch4bit = {
|
|
|
|
+ .eccbytes = 32,
|
|
|
|
+ .eccpos = {
|
|
|
|
+ 32, 33, 34, 35, 36, 37, 38, 39,
|
|
|
|
+ 40, 41, 42, 43, 44, 45, 46, 47,
|
|
|
|
+ 48, 49, 50, 51, 52, 53, 54, 55,
|
|
|
|
+ 56, 57, 58, 59, 60, 61, 62, 63},
|
|
|
|
+ .oobfree = { {2, 30} }
|
|
|
|
+};
|
|
|
|
+
|
|
static struct nand_ecclayout ecc_layout_4KB_bch4bit = {
|
|
static struct nand_ecclayout ecc_layout_4KB_bch4bit = {
|
|
.eccbytes = 64,
|
|
.eccbytes = 64,
|
|
.eccpos = {
|
|
.eccpos = {
|
|
@@ -1360,6 +1370,17 @@ static int pxa_ecc_init(struct pxa3xx_nand_info *info,
|
|
* Required ECC: 4-bit correction per 512 bytes
|
|
* Required ECC: 4-bit correction per 512 bytes
|
|
* Select: 16-bit correction per 2048 bytes
|
|
* Select: 16-bit correction per 2048 bytes
|
|
*/
|
|
*/
|
|
|
|
+ } else if (strength == 4 && ecc_stepsize == 512 && page_size == 2048) {
|
|
|
|
+ info->ecc_bch = 1;
|
|
|
|
+ info->chunk_size = 2048;
|
|
|
|
+ info->spare_size = 32;
|
|
|
|
+ info->ecc_size = 32;
|
|
|
|
+ ecc->mode = NAND_ECC_HW;
|
|
|
|
+ ecc->size = info->chunk_size;
|
|
|
|
+ ecc->layout = &ecc_layout_2KB_bch4bit;
|
|
|
|
+ ecc->strength = 16;
|
|
|
|
+ return 1;
|
|
|
|
+
|
|
} else if (strength == 4 && ecc_stepsize == 512 && page_size == 4096) {
|
|
} else if (strength == 4 && ecc_stepsize == 512 && page_size == 4096) {
|
|
info->ecc_bch = 1;
|
|
info->ecc_bch = 1;
|
|
info->chunk_size = 2048;
|
|
info->chunk_size = 2048;
|