]> git.sur5r.net Git - u-boot/blobdiff - drivers/mtd/nand/nand_util.c
omap_gpmc: add support for hw assisted BCH8
[u-boot] / drivers / mtd / nand / nand_util.c
index 2ba0c5ef95604a32859e959822168a46f310c524..ff2d3483076b1a5d92868270d136d8b599ea5b08 100644 (file)
@@ -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 */