diff options
Diffstat (limited to 'drivers/mtd')
| -rw-r--r-- | drivers/mtd/nand/kmeter1_nand.c | 4 | ||||
| -rw-r--r-- | drivers/mtd/nand/nand_util.c | 19 | 
2 files changed, 22 insertions, 1 deletions
| diff --git a/drivers/mtd/nand/kmeter1_nand.c b/drivers/mtd/nand/kmeter1_nand.c index e8e5b7b85..f04459723 100644 --- a/drivers/mtd/nand/kmeter1_nand.c +++ b/drivers/mtd/nand/kmeter1_nand.c @@ -119,7 +119,11 @@ static int kpn_nand_dev_ready(struct mtd_info *mtd)  int board_nand_init(struct nand_chip *nand)  { +#if defined(CONFIG_NAND_ECC_BCH) +	nand->ecc.mode = NAND_ECC_SOFT_BCH; +#else  	nand->ecc.mode = NAND_ECC_SOFT; +#endif  	/* Reference hardware control function */  	nand->cmd_ctrl  = kpn_nand_hwcontrol; diff --git a/drivers/mtd/nand/nand_util.c b/drivers/mtd/nand/nand_util.c index 2ba0c5ef9..ff2d34830 100644 --- a/drivers/mtd/nand/nand_util.c +++ b/drivers/mtd/nand/nand_util.c @@ -237,6 +237,14 @@ int nand_lock(struct mtd_info *mtd, int tight)  	/* select the NAND device */  	chip->select_chip(mtd, 0); +	/* check the Lock Tight Status */ +	chip->cmdfunc(mtd, NAND_CMD_LOCK_STATUS, -1, 0); +	if (chip->read_byte(mtd) & NAND_LOCK_STATUS_TIGHT) { +		printf("nand_lock: Device is locked tight!\n"); +		ret = -1; +		goto out; +	} +  	chip->cmdfunc(mtd,  		      (tight ? NAND_CMD_LOCK_TIGHT : NAND_CMD_LOCK),  		      -1, -1); @@ -249,6 +257,7 @@ int nand_lock(struct mtd_info *mtd, int tight)  		ret = -1;  	} + out:  	/* de-select the NAND device */  	chip->select_chip(mtd, -1);  	return ret; @@ -337,6 +346,15 @@ int nand_unlock(struct mtd_info *mtd, loff_t start, size_t length,  		goto out;  	} +	/* check the Lock Tight Status */ +	page = (int)(start >> chip->page_shift); +	chip->cmdfunc(mtd, NAND_CMD_LOCK_STATUS, -1, page & chip->pagemask); +	if (chip->read_byte(mtd) & NAND_LOCK_STATUS_TIGHT) { +		printf("nand_unlock: Device is locked tight!\n"); +		ret = -1; +		goto out; +	} +  	if ((start & (mtd->erasesize - 1)) != 0) {  		printf("nand_unlock: Start address must be beginning of "  			"nand block!\n"); @@ -358,7 +376,6 @@ int nand_unlock(struct mtd_info *mtd, loff_t start, size_t length,  	length -= mtd->erasesize;  	/* submit address of first page to unlock */ -	page = (int)(start >> chip->page_shift);  	chip->cmdfunc(mtd, NAND_CMD_UNLOCK1, -1, page & chip->pagemask);  	/* submit ADDRESS of LAST page to unlock */ |