diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c index 24cdc9356daa..f783f2c9c42f 100644 --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c @@ -1118,6 +1118,13 @@ static int spinand_reinit(struct mtd_info *mtd) if (ret) return ret; + /* HWP_EN must be enabled first before block unlock region is set */ + if (spinand->id.data[0] == 0x01) { + ret = spinand_lock_block(spinand, HWP_EN); + if (ret) + return ret; + } + ret = spinand_lock_block(spinand, BL_ALL_UNLOCKED); if (ret) return ret; diff --git a/include/linux/mtd/spinand.h b/include/linux/mtd/spinand.h index 60800872e286..04dabc460897 100644 --- a/include/linux/mtd/spinand.h +++ b/include/linux/mtd/spinand.h @@ -149,6 +149,7 @@ /* feature register */ #define REG_BLOCK_LOCK 0xa0 #define BL_ALL_UNLOCKED 0x00 +#define HWP_EN 0x02 /* Skyhigh feature, Hardware write protection */ /* configuration register */ #define REG_CFG 0xb0