public inbox for linux-mtd@lists.infradead.org
 help / color / mirror / Atom feed
* [PATCH] MTD: Unlocking all Intel flash that is locked on power up. Try 3
@ 2007-11-19 21:59 Justin Treon
  2007-11-20  2:59 ` Nicolas Pitre
  0 siblings, 1 reply; 2+ messages in thread
From: Justin Treon @ 2007-11-19 21:59 UTC (permalink / raw)
  To: linux-mtd; +Cc: nico

This is the third submission of the patch for unlocking all Intel flash that is
locked on power up.  The patch has been tested on Intel M18, P30 and J3D Strata
Flash.
  1.    The automatic unlocking can be disabled for a particular partition 
          in the map or the command line.
     a. For the bit mask in the map it should look like:
         .mask_flags	= MTD_POWERUP_LOCK,
     b. For the command line parsing it should look like:
         mtdparts=0x80000(bootloader)lk
  2.    This will only unlock parts with instant individual block locking.  
         Intel parts with legacy unlocking will not be unlocked.

Diffstat of the patch:
drivers/mtd/chips/cfi_cmdset_0001.c |   20 +++++++++++++-------
drivers/mtd/cmdlinepart.c           |    9 ++++++++-
drivers/mtd/mtdcore.c               |    2 +-
include/mtd/mtd-abi.h               |    2 +-
4 files changed, 23 insertions(+), 10 deletions(-)

Signed-off-by: Justin Treon <justin_treon@yahoo.com>
---
diff -r c105f44cf785 drivers/mtd/chips/cfi_cmdset_0001.c
--- a/drivers/mtd/chips/cfi_cmdset_0001.c	Thu Nov 08 15:36:57 2007 -0800
+++ b/drivers/mtd/chips/cfi_cmdset_0001.c	Tue Nov 13 22:47:40 2007 -0800
@@ -226,10 +226,16 @@ static void fixup_use_write_buffers(stru
 /*
  * Some chips power-up with all sectors locked by default.
  */
-static void fixup_use_powerup_lock(struct mtd_info *mtd, void *param)
-{
-	printk(KERN_INFO "Using auto-unlock on power-up/resume\n" );
-	mtd->flags |= MTD_STUPID_LOCK;
+static void fixup_unlock_powerup_lock(struct mtd_info *mtd, void *param)
+{
+	struct map_info *map = mtd->priv;
+	struct cfi_private *cfi = map->fldrv_priv;
+	struct cfi_pri_intelext *cfip = cfi->cmdset_priv;
+
+	if (cfip->FeatureSupport&32) {
+ 		printk(KERN_INFO "Using auto-unlock on power-up/resume\n" );
+		mtd->flags |= MTD_POWERUP_LOCK;
+	}
 }
 
 static struct cfi_fixup cfi_fixup_table[] = {
@@ -244,7 +250,7 @@ static struct cfi_fixup cfi_fixup_table[
 #endif
 	{ CFI_MFR_ST, 0x00ba, /* M28W320CT */ fixup_st_m28w320ct, NULL },
 	{ CFI_MFR_ST, 0x00bb, /* M28W320CB */ fixup_st_m28w320cb, NULL },
-	{ MANUFACTURER_INTEL, 0x891c,	      fixup_use_powerup_lock, NULL, },
+	{ MANUFACTURER_INTEL, CFI_ID_ANY, fixup_unlock_powerup_lock, NULL, },
 	{ 0, 0, NULL, NULL }
 };
 
@@ -2273,7 +2279,7 @@ static int cfi_intelext_suspend(struct m
 	struct flchip *chip;
 	int ret = 0;
 
-	if ((mtd->flags & MTD_STUPID_LOCK)
+	if ((mtd->flags & MTD_POWERUP_LOCK)
 	    && extp && (extp->FeatureSupport & (1 << 5)))
 		cfi_intelext_save_locks(mtd);
 
@@ -2384,7 +2390,7 @@ static void cfi_intelext_resume(struct m
 		spin_unlock(chip->mutex);
 	}
 
-	if ((mtd->flags & MTD_STUPID_LOCK)
+	if ((mtd->flags & MTD_POWERUP_LOCK)
 	    && extp && (extp->FeatureSupport & (1 << 5)))
 		cfi_intelext_restore_locks(mtd);
 }
diff -r c105f44cf785 drivers/mtd/cmdlinepart.c
--- a/drivers/mtd/cmdlinepart.c	Thu Nov 08 15:36:57 2007 -0800
+++ b/drivers/mtd/cmdlinepart.c	Thu Nov 15 17:18:11 2007 -0800
@@ -9,7 +9,7 @@
  *
  * mtdparts=<mtddef>[;<mtddef]
  * <mtddef>  := <mtd-id>:<partdef>[,<partdef>]
- * <partdef> := <size>[@offset][<name>][ro]
+ * <partdef> := <size>[@offset][<name>][ro][lk]
  * <mtd-id>  := unique name used in mapping driver/device (mtd->name)
  * <size>    := standard linux memsize OR "-" to denote all remaining space
  * <name>    := '(' NAME ')'
@@ -140,6 +140,13 @@ static struct mtd_partition * newpart(ch
         if (strncmp(s, "ro", 2) == 0)
 	{
 		mask_flags |= MTD_WRITEABLE;
+		s += 2;
+        }
+
+        /* if lk is found do NOT unlock the MTD partition*/
+        if (strncmp(s, "lk", 2) == 0)
+	{
+		mask_flags |= MTD_POWERUP_LOCK;
 		s += 2;
         }
 
diff -r c105f44cf785 drivers/mtd/mtdcore.c
--- a/drivers/mtd/mtdcore.c	Thu Nov 08 15:36:57 2007 -0800
+++ b/drivers/mtd/mtdcore.c	Tue Nov 13 15:41:00 2007 -0800
@@ -59,7 +59,7 @@ int add_mtd_device(struct mtd_info *mtd)
 
 			/* Some chips always power up locked. Unlock them now */
 			if ((mtd->flags & MTD_WRITEABLE)
-			    && (mtd->flags & MTD_STUPID_LOCK) && mtd->unlock) {
+			    && (mtd->flags & MTD_POWERUP_LOCK) && mtd->unlock) {
 				if (mtd->unlock(mtd, 0, mtd->size))
 					printk(KERN_WARNING
 					       "%s: unlock failed, "
diff -r c105f44cf785 include/mtd/mtd-abi.h
--- a/include/mtd/mtd-abi.h	Thu Nov 08 15:36:57 2007 -0800
+++ b/include/mtd/mtd-abi.h	Fri Nov 09 10:43:28 2007 -0800
@@ -29,7 +29,7 @@ struct mtd_oob_buf {
 #define MTD_WRITEABLE		0x400	/* Device is writeable */
 #define MTD_BIT_WRITEABLE	0x800	/* Single bits can be flipped */
 #define MTD_NO_ERASE		0x1000	/* No erase necessary */
-#define MTD_STUPID_LOCK		0x2000	/* Always locked after reset */
+#define MTD_POWERUP_LOCK	0x2000	/* Always locked after reset */
 
 // Some common devices / combinations of capabilities
 #define MTD_CAP_ROM		0


      ____________________________________________________________________________________
Be a better pen pal. 
Text or chat with friends inside Yahoo! Mail. See how.  http://overview.mail.yahoo.com/

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] MTD: Unlocking all Intel flash that is locked on power up. Try 3
  2007-11-19 21:59 [PATCH] MTD: Unlocking all Intel flash that is locked on power up. Try 3 Justin Treon
@ 2007-11-20  2:59 ` Nicolas Pitre
  0 siblings, 0 replies; 2+ messages in thread
From: Nicolas Pitre @ 2007-11-20  2:59 UTC (permalink / raw)
  To: Justin Treon; +Cc: linux-mtd

On Mon, 19 Nov 2007, Justin Treon wrote:

> This is the third submission of the patch for unlocking all Intel flash that is
> locked on power up.  The patch has been tested on Intel M18, P30 and J3D Strata
> Flash.
>   1.    The automatic unlocking can be disabled for a particular partition 
>           in the map or the command line.
>      a. For the bit mask in the map it should look like:
>          .mask_flags	= MTD_POWERUP_LOCK,
>      b. For the command line parsing it should look like:
>          mtdparts=0x80000(bootloader)lk
>   2.    This will only unlock parts with instant individual block locking.  
>          Intel parts with legacy unlocking will not be unlocked.
> 
> Signed-off-by: Justin Treon <justin_treon@yahoo.com>

Acked-by: Nicolas Pitre <nico@cam.org>


> ---
> diff -r c105f44cf785 drivers/mtd/chips/cfi_cmdset_0001.c
> --- a/drivers/mtd/chips/cfi_cmdset_0001.c	Thu Nov 08 15:36:57 2007 -0800
> +++ b/drivers/mtd/chips/cfi_cmdset_0001.c	Tue Nov 13 22:47:40 2007 -0800
> @@ -226,10 +226,16 @@ static void fixup_use_write_buffers(stru
>  /*
>   * Some chips power-up with all sectors locked by default.
>   */
> -static void fixup_use_powerup_lock(struct mtd_info *mtd, void *param)
> -{
> -	printk(KERN_INFO "Using auto-unlock on power-up/resume\n" );
> -	mtd->flags |= MTD_STUPID_LOCK;
> +static void fixup_unlock_powerup_lock(struct mtd_info *mtd, void *param)
> +{
> +	struct map_info *map = mtd->priv;
> +	struct cfi_private *cfi = map->fldrv_priv;
> +	struct cfi_pri_intelext *cfip = cfi->cmdset_priv;
> +
> +	if (cfip->FeatureSupport&32) {
> + 		printk(KERN_INFO "Using auto-unlock on power-up/resume\n" );
> +		mtd->flags |= MTD_POWERUP_LOCK;
> +	}
>  }
>  
>  static struct cfi_fixup cfi_fixup_table[] = {
> @@ -244,7 +250,7 @@ static struct cfi_fixup cfi_fixup_table[
>  #endif
>  	{ CFI_MFR_ST, 0x00ba, /* M28W320CT */ fixup_st_m28w320ct, NULL },
>  	{ CFI_MFR_ST, 0x00bb, /* M28W320CB */ fixup_st_m28w320cb, NULL },
> -	{ MANUFACTURER_INTEL, 0x891c,	      fixup_use_powerup_lock, NULL, },
> +	{ MANUFACTURER_INTEL, CFI_ID_ANY, fixup_unlock_powerup_lock, NULL, },
>  	{ 0, 0, NULL, NULL }
>  };
>  
> @@ -2273,7 +2279,7 @@ static int cfi_intelext_suspend(struct m
>  	struct flchip *chip;
>  	int ret = 0;
>  
> -	if ((mtd->flags & MTD_STUPID_LOCK)
> +	if ((mtd->flags & MTD_POWERUP_LOCK)
>  	    && extp && (extp->FeatureSupport & (1 << 5)))
>  		cfi_intelext_save_locks(mtd);
>  
> @@ -2384,7 +2390,7 @@ static void cfi_intelext_resume(struct m
>  		spin_unlock(chip->mutex);
>  	}
>  
> -	if ((mtd->flags & MTD_STUPID_LOCK)
> +	if ((mtd->flags & MTD_POWERUP_LOCK)
>  	    && extp && (extp->FeatureSupport & (1 << 5)))
>  		cfi_intelext_restore_locks(mtd);
>  }
> diff -r c105f44cf785 drivers/mtd/cmdlinepart.c
> --- a/drivers/mtd/cmdlinepart.c	Thu Nov 08 15:36:57 2007 -0800
> +++ b/drivers/mtd/cmdlinepart.c	Thu Nov 15 17:18:11 2007 -0800
> @@ -9,7 +9,7 @@
>   *
>   * mtdparts=<mtddef>[;<mtddef]
>   * <mtddef>  := <mtd-id>:<partdef>[,<partdef>]
> - * <partdef> := <size>[@offset][<name>][ro]
> + * <partdef> := <size>[@offset][<name>][ro][lk]
>   * <mtd-id>  := unique name used in mapping driver/device (mtd->name)
>   * <size>    := standard linux memsize OR "-" to denote all remaining space
>   * <name>    := '(' NAME ')'
> @@ -140,6 +140,13 @@ static struct mtd_partition * newpart(ch
>          if (strncmp(s, "ro", 2) == 0)
>  	{
>  		mask_flags |= MTD_WRITEABLE;
> +		s += 2;
> +        }
> +
> +        /* if lk is found do NOT unlock the MTD partition*/
> +        if (strncmp(s, "lk", 2) == 0)
> +	{
> +		mask_flags |= MTD_POWERUP_LOCK;
>  		s += 2;
>          }
>  
> diff -r c105f44cf785 drivers/mtd/mtdcore.c
> --- a/drivers/mtd/mtdcore.c	Thu Nov 08 15:36:57 2007 -0800
> +++ b/drivers/mtd/mtdcore.c	Tue Nov 13 15:41:00 2007 -0800
> @@ -59,7 +59,7 @@ int add_mtd_device(struct mtd_info *mtd)
>  
>  			/* Some chips always power up locked. Unlock them now */
>  			if ((mtd->flags & MTD_WRITEABLE)
> -			    && (mtd->flags & MTD_STUPID_LOCK) && mtd->unlock) {
> +			    && (mtd->flags & MTD_POWERUP_LOCK) && mtd->unlock) {
>  				if (mtd->unlock(mtd, 0, mtd->size))
>  					printk(KERN_WARNING
>  					       "%s: unlock failed, "
> diff -r c105f44cf785 include/mtd/mtd-abi.h
> --- a/include/mtd/mtd-abi.h	Thu Nov 08 15:36:57 2007 -0800
> +++ b/include/mtd/mtd-abi.h	Fri Nov 09 10:43:28 2007 -0800
> @@ -29,7 +29,7 @@ struct mtd_oob_buf {
>  #define MTD_WRITEABLE		0x400	/* Device is writeable */
>  #define MTD_BIT_WRITEABLE	0x800	/* Single bits can be flipped */
>  #define MTD_NO_ERASE		0x1000	/* No erase necessary */
> -#define MTD_STUPID_LOCK		0x2000	/* Always locked after reset */
> +#define MTD_POWERUP_LOCK	0x2000	/* Always locked after reset */
>  
>  // Some common devices / combinations of capabilities
>  #define MTD_CAP_ROM		0
> 
> 
>       ____________________________________________________________________________________
> Be a better pen pal. 
> Text or chat with friends inside Yahoo! Mail. See how.  http://overview.mail.yahoo.com/
> 


Nicolas

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2007-11-20  2:59 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-11-19 21:59 [PATCH] MTD: Unlocking all Intel flash that is locked on power up. Try 3 Justin Treon
2007-11-20  2:59 ` Nicolas Pitre

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox