diff options
Diffstat (limited to 'drivers/mtd/nand/fsl_elbc_nand.c')
| -rw-r--r-- | drivers/mtd/nand/fsl_elbc_nand.c | 17 | 
1 files changed, 16 insertions, 1 deletions
| diff --git a/drivers/mtd/nand/fsl_elbc_nand.c b/drivers/mtd/nand/fsl_elbc_nand.c index 674c54200..b8bc143a8 100644 --- a/drivers/mtd/nand/fsl_elbc_nand.c +++ b/drivers/mtd/nand/fsl_elbc_nand.c @@ -122,6 +122,20 @@ static struct nand_ecclayout fsl_elbc_oob_lp_eccm1 = {  	.oobavail = 48,  }; +/* + * fsl_elbc_oob_lp_eccm* specify that LP NAND's OOB free area starts at offset + * 1, so we have to adjust bad block pattern. This pattern should be used for + * x8 chips only. So far hardware does not support x16 chips anyway. + */ +static u8 scan_ff_pattern[] = { 0xff, }; + +static struct nand_bbt_descr largepage_memorybased = { +	.options = 0, +	.offs = 0, +	.len = 1, +	.pattern = scan_ff_pattern, +}; +  /*=================================*/  /* @@ -750,9 +764,10 @@ int board_nand_init(struct nand_chip *nand)  	priv->fmr = (15 << FMR_CWTO_SHIFT) | (2 << FMR_AL_SHIFT); -	/* adjust Option Register and ECC to match Flash page size */ +	/* Large-page-specific setup */  	if (or & OR_FCM_PGS) {  		priv->page_size = 1; +		nand->badblock_pattern = &largepage_memorybased;  		/* adjust ecc setup if needed */  		if ((br & BR_DECC) == BR_DECC_CHK_GEN) { |