Patchwork [v2,3/7] mtd: cfi_probe: add support for SST 0x0701 vendorname

login
register
mail settings
Submitter Guillaume LECERF
Date March 30, 2010, 1:34 p.m.
Message ID <20100330133458.20107.48734.stgit@shiryu.yomgui.biz>
Download mbox | patch
Permalink /patch/48962/
State New
Headers show

Comments

Guillaume LECERF - March 30, 2010, 1:34 p.m.
SST 39VF160x and 39VF320x chips use vendorname id 0x0701 and alternative
unlock addresses. Add support for them in cfi_probe.c.

Signed-off-by: Guillaume LECERF <glecerf@gmail.com>
---
 drivers/mtd/chips/cfi_probe.c |    9 +++++++++
 include/linux/mtd/cfi.h       |    1 +
 2 files changed, 10 insertions(+), 0 deletions(-)
Wolfram Sang - April 8, 2010, 9:05 a.m.
On Tue, Mar 30, 2010 at 03:34:58PM +0200, Guillaume LECERF wrote:
> SST 39VF160x and 39VF320x chips use vendorname id 0x0701 and alternative
> unlock addresses. Add support for them in cfi_probe.c.
> 
> Signed-off-by: Guillaume LECERF <glecerf@gmail.com>
> ---
>  drivers/mtd/chips/cfi_probe.c |    9 +++++++++
>  include/linux/mtd/cfi.h       |    1 +
>  2 files changed, 10 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/mtd/chips/cfi_probe.c b/drivers/mtd/chips/cfi_probe.c
> index a28659d..f931e94 100644
> --- a/drivers/mtd/chips/cfi_probe.c
> +++ b/drivers/mtd/chips/cfi_probe.c
> @@ -214,6 +214,12 @@ static int __xipram cfi_chip_setup(struct map_info *map,
>  	 * back into Read Mode, which is a nop in this case).
>  	 */
>  	cfi_send_gen_cmd(0xf0,     0, base, map, cfi, cfi->device_type, NULL);
> +
> +	if (cfi->cfiq->P_ID == P_ID_SST_OLD) {
> +		addr_unlock1 = 0x5555;
> +		addr_unlock2 = 0x2AAA;
> +	}

Can't we set cfi->addr_unlock[12] here already? This way, we could later have
just one fixup function for all old SST flashes.

> +
>  	cfi_send_gen_cmd(0xaa, addr_unlock1, base, map, cfi, cfi->device_type, NULL);
>  	cfi_send_gen_cmd(0x55, addr_unlock2, base, map, cfi, cfi->device_type, NULL);
>  	cfi_send_gen_cmd(0x90, addr_unlock1, base, map, cfi, cfi->device_type, NULL);
> @@ -270,6 +276,9 @@ static char *vendorname(__u16 vendor)
>  	case P_ID_SST_PAGE:
>  		return "SST Page Write";
>  
> +	case P_ID_SST_OLD:
> +		return "SST 39VF160x/39VF320x";
> +
>  	case P_ID_INTEL_PERFORMANCE:
>  		return "Intel Performance Code";
>  
> diff --git a/include/linux/mtd/cfi.h b/include/linux/mtd/cfi.h
> index cee05b1..5716fc7 100644
> --- a/include/linux/mtd/cfi.h
> +++ b/include/linux/mtd/cfi.h
> @@ -253,6 +253,7 @@ struct cfi_bri_query {
>  #define P_ID_MITSUBISHI_STD     0x0100
>  #define P_ID_MITSUBISHI_EXT     0x0101
>  #define P_ID_SST_PAGE           0x0102
> +#define P_ID_SST_OLD            0x0701
>  #define P_ID_INTEL_PERFORMANCE  0x0200
>  #define P_ID_INTEL_DATA         0x0210
>  #define P_ID_RESERVED           0xffff
> 
> 
> ______________________________________________________
> Linux MTD discussion mailing list
> http://lists.infradead.org/mailman/listinfo/linux-mtd/
Wolfram Sang - April 12, 2010, 3:36 a.m.
On Thu, Apr 08, 2010 at 11:05:53AM +0200, Wolfram Sang wrote:
> On Tue, Mar 30, 2010 at 03:34:58PM +0200, Guillaume LECERF wrote:
> > SST 39VF160x and 39VF320x chips use vendorname id 0x0701 and alternative
> > unlock addresses. Add support for them in cfi_probe.c.
> > 
> > Signed-off-by: Guillaume LECERF <glecerf@gmail.com>
> > ---
> >  drivers/mtd/chips/cfi_probe.c |    9 +++++++++
> >  include/linux/mtd/cfi.h       |    1 +
> >  2 files changed, 10 insertions(+), 0 deletions(-)
> > 
> > diff --git a/drivers/mtd/chips/cfi_probe.c b/drivers/mtd/chips/cfi_probe.c
> > index a28659d..f931e94 100644
> > --- a/drivers/mtd/chips/cfi_probe.c
> > +++ b/drivers/mtd/chips/cfi_probe.c
> > @@ -214,6 +214,12 @@ static int __xipram cfi_chip_setup(struct map_info *map,
> >  	 * back into Read Mode, which is a nop in this case).
> >  	 */
> >  	cfi_send_gen_cmd(0xf0,     0, base, map, cfi, cfi->device_type, NULL);
> > +
> > +	if (cfi->cfiq->P_ID == P_ID_SST_OLD) {
> > +		addr_unlock1 = 0x5555;
> > +		addr_unlock2 = 0x2AAA;
> > +	}
> 
> Can't we set cfi->addr_unlock[12] here already? This way, we could later have
> just one fixup function for all old SST flashes.

Well, even if there is a way to do it (by replacing the NULL-checks of
addr_unlock[12] in cfi_cmdset_0002() with something else), it can be applied
later and on top of this series.

Regards,

   Wolfram

Patch

diff --git a/drivers/mtd/chips/cfi_probe.c b/drivers/mtd/chips/cfi_probe.c
index a28659d..f931e94 100644
--- a/drivers/mtd/chips/cfi_probe.c
+++ b/drivers/mtd/chips/cfi_probe.c
@@ -214,6 +214,12 @@  static int __xipram cfi_chip_setup(struct map_info *map,
 	 * back into Read Mode, which is a nop in this case).
 	 */
 	cfi_send_gen_cmd(0xf0,     0, base, map, cfi, cfi->device_type, NULL);
+
+	if (cfi->cfiq->P_ID == P_ID_SST_OLD) {
+		addr_unlock1 = 0x5555;
+		addr_unlock2 = 0x2AAA;
+	}
+
 	cfi_send_gen_cmd(0xaa, addr_unlock1, base, map, cfi, cfi->device_type, NULL);
 	cfi_send_gen_cmd(0x55, addr_unlock2, base, map, cfi, cfi->device_type, NULL);
 	cfi_send_gen_cmd(0x90, addr_unlock1, base, map, cfi, cfi->device_type, NULL);
@@ -270,6 +276,9 @@  static char *vendorname(__u16 vendor)
 	case P_ID_SST_PAGE:
 		return "SST Page Write";
 
+	case P_ID_SST_OLD:
+		return "SST 39VF160x/39VF320x";
+
 	case P_ID_INTEL_PERFORMANCE:
 		return "Intel Performance Code";
 
diff --git a/include/linux/mtd/cfi.h b/include/linux/mtd/cfi.h
index cee05b1..5716fc7 100644
--- a/include/linux/mtd/cfi.h
+++ b/include/linux/mtd/cfi.h
@@ -253,6 +253,7 @@  struct cfi_bri_query {
 #define P_ID_MITSUBISHI_STD     0x0100
 #define P_ID_MITSUBISHI_EXT     0x0101
 #define P_ID_SST_PAGE           0x0102
+#define P_ID_SST_OLD            0x0701
 #define P_ID_INTEL_PERFORMANCE  0x0200
 #define P_ID_INTEL_DATA         0x0210
 #define P_ID_RESERVED           0xffff