diff mbox

[U-Boot,v2,4/4] nand: Make NAND lock status compatible with Micron

Message ID 1345672185-8398-4-git-send-email-joe.hershberger@ni.com
State Accepted
Commit e70bfa2986f9c028e3c21e0995285047a9baec27
Delegated to: Scott Wood
Headers show

Commit Message

Joe Hershberger Aug. 22, 2012, 9:49 p.m. UTC
Micron NAND flash (e.g. MT29F4G08ABADAH4) BLOCK LOCK READ STATUS is not
the same as others.  Instead of bit 1 being lock, it is #lock_tight.
To make the driver support either format, ignore bit 1 and use only
bit 0 and bit 2.

Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
---
Changes in v2:
- Added comment about NAND status work-around

 common/cmd_nand.c            | 8 +++++++-
 drivers/mtd/nand/nand_util.c | 2 --
 include/nand.h               | 1 -
 3 files changed, 7 insertions(+), 4 deletions(-)

Comments

Scott Wood Sept. 17, 2012, 10:36 p.m. UTC | #1
On Wed, Aug 22, 2012 at 04:49:45PM -0500, Joe Hershberger wrote:
> Micron NAND flash (e.g. MT29F4G08ABADAH4) BLOCK LOCK READ STATUS is not
> the same as others.  Instead of bit 1 being lock, it is #lock_tight.
> To make the driver support either format, ignore bit 1 and use only
> bit 0 and bit 2.
> 
> Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
> ---
> Changes in v2:
> - Added comment about NAND status work-around
> 
>  common/cmd_nand.c            | 8 +++++++-
>  drivers/mtd/nand/nand_util.c | 2 --
>  include/nand.h               | 1 -
>  3 files changed, 7 insertions(+), 4 deletions(-)

Applied to u-boot-nand-flash.

-Scott
diff mbox

Patch

diff --git a/common/cmd_nand.c b/common/cmd_nand.c
index f737c06..9c6dabe 100644
--- a/common/cmd_nand.c
+++ b/common/cmd_nand.c
@@ -231,12 +231,18 @@  print:
 #ifdef CONFIG_CMD_NAND_LOCK_UNLOCK
 static void print_status(ulong start, ulong end, ulong erasesize, int status)
 {
+	/*
+	 * Micron NAND flash (e.g. MT29F4G08ABADAH4) BLOCK LOCK READ STATUS is
+	 * not the same as others.  Instead of bit 1 being lock, it is
+	 * #lock_tight. To make the driver support either format, ignore bit 1
+	 * and use only bit 0 and bit 2.
+	 */
 	printf("%08lx - %08lx: %08lx blocks %s%s%s\n",
 		start,
 		end - 1,
 		(end - start) / erasesize,
 		((status & NAND_LOCK_STATUS_TIGHT) ?  "TIGHT " : ""),
-		((status & NAND_LOCK_STATUS_LOCK) ?  "LOCK " : ""),
+		(!(status & NAND_LOCK_STATUS_UNLOCK) ?  "LOCK " : ""),
 		((status & NAND_LOCK_STATUS_UNLOCK) ?  "UNLOCK " : ""));
 }
 
diff --git a/drivers/mtd/nand/nand_util.c b/drivers/mtd/nand/nand_util.c
index 78a5987..7243d80 100644
--- a/drivers/mtd/nand/nand_util.c
+++ b/drivers/mtd/nand/nand_util.c
@@ -265,7 +265,6 @@  int nand_lock(struct mtd_info *mtd, int tight)
  *			>0 lock status:
  *			  bitfield with the following combinations:
  *			  NAND_LOCK_STATUS_TIGHT: page in tight state
- *			  NAND_LOCK_STATUS_LOCK:  page locked
  *			  NAND_LOCK_STATUS_UNLOCK: page unlocked
  *
  */
@@ -294,7 +293,6 @@  int nand_get_lock_status(struct mtd_info *mtd, loff_t offset)
 	chip->cmdfunc(mtd, NAND_CMD_LOCK_STATUS, -1, page & chip->pagemask);
 
 	ret = chip->read_byte(mtd) & (NAND_LOCK_STATUS_TIGHT
-					  | NAND_LOCK_STATUS_LOCK
 					  | NAND_LOCK_STATUS_UNLOCK);
 
  out:
diff --git a/include/nand.h b/include/nand.h
index a516cb8..00d4254 100644
--- a/include/nand.h
+++ b/include/nand.h
@@ -141,7 +141,6 @@  int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
 int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts);
 
 #define NAND_LOCK_STATUS_TIGHT	0x01
-#define NAND_LOCK_STATUS_LOCK	0x02
 #define NAND_LOCK_STATUS_UNLOCK 0x04
 
 int nand_lock(nand_info_t *meminfo, int tight);