Browse Source

[MTD] chips/cfi_cmdset_0001: fix for P30 cfi parsing

Change to the extended cfi table parsing for Intel NOR flash that uses
the info in the extended table to 'walk' the table rather than using
hard coding for various primary extended query table version numbers.

From: Jared Hulbert <jaredeh@gmail.com>
Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Nicolas Pitre 19 năm trước cách đây
mục cha
commit
6f6ed056d2

+ 6 - 3
drivers/mtd/chips/cfi_cmdset_0001.c

@@ -4,7 +4,7 @@
  *
  *
  * (C) 2000 Red Hat. GPL'd
  * (C) 2000 Red Hat. GPL'd
  *
  *
- * $Id: cfi_cmdset_0001.c,v 1.183 2005/08/06 04:46:56 nico Exp $
+ * $Id: cfi_cmdset_0001.c,v 1.184 2005/10/25 20:28:40 nico Exp $
  *
  *
  * 
  * 
  * 10/10/2000	Nicolas Pitre <nico@cam.org>
  * 10/10/2000	Nicolas Pitre <nico@cam.org>
@@ -285,7 +285,10 @@ read_pri_intelext(struct map_info *map, __u16 adr)
 			      sizeof(struct cfi_intelext_otpinfo);
 			      sizeof(struct cfi_intelext_otpinfo);
 
 
 		/* Burst Read info */
 		/* Burst Read info */
-		extra_size += (extp->MinorVersion < '4') ? 6 : 5;
+		extra_size += 2;
+		if (extp_size < sizeof(*extp) + extra_size)
+			goto need_more;
+		extra_size += extp->extra[extra_size-1];
 
 
 		/* Number of hardware-partitions */
 		/* Number of hardware-partitions */
 		extra_size += 1;
 		extra_size += 1;
@@ -519,7 +522,7 @@ static int cfi_intelext_partition_fixup(struct mtd_info *mtd,
 		       sizeof(struct cfi_intelext_otpinfo);
 		       sizeof(struct cfi_intelext_otpinfo);
 
 
 		/* Burst Read info */
 		/* Burst Read info */
-		offs += (extp->MinorVersion < '4') ? 6 : 5;
+		offs += extp->extra[offs+1]+2;
 
 
 		/* Number of partition regions */
 		/* Number of partition regions */
 		numregions = extp->extra[offs];
 		numregions = extp->extra[offs];