From 297b9756bca9f1de4fd5b33d076049c65287ec07 Mon Sep 17 00:00:00 2001
From: "Alexandros C. Couloumbis" <alex@ozo.com>
Date: Mon, 8 Nov 2010 18:28:07 +0000
Subject: [PATCH] linux/generic: add some missing patches, refresh patches

SVN-Revision: 23931
---
 .../009-decompress_unlzo_fix.patch            | 23 ++++++++++
 ...-cfi_show_amd_extended_table_version.patch | 30 +++++++++++++
 .../089-mtd-samsung-flash.patch               | 37 ++++++++++++++++
 .../009-decompress_unlzo_fix.patch            | 23 ++++++++++
 ...-cfi_show_amd_extended_table_version.patch | 30 +++++++++++++
 .../patches-2.6.37/065-rootfs_split.patch     | 12 +++---
 .../089-mtd-samsung-flash.patch               | 43 +++++++++++++++++++
 7 files changed, 192 insertions(+), 6 deletions(-)
 create mode 100644 target/linux/generic/patches-2.6.36/009-decompress_unlzo_fix.patch
 create mode 100644 target/linux/generic/patches-2.6.36/014-cfi_show_amd_extended_table_version.patch
 create mode 100644 target/linux/generic/patches-2.6.36/089-mtd-samsung-flash.patch
 create mode 100644 target/linux/generic/patches-2.6.37/009-decompress_unlzo_fix.patch
 create mode 100644 target/linux/generic/patches-2.6.37/014-cfi_show_amd_extended_table_version.patch
 create mode 100644 target/linux/generic/patches-2.6.37/089-mtd-samsung-flash.patch

diff --git a/target/linux/generic/patches-2.6.36/009-decompress_unlzo_fix.patch b/target/linux/generic/patches-2.6.36/009-decompress_unlzo_fix.patch
new file mode 100644
index 00000000000..37e322ad8ca
--- /dev/null
+++ b/target/linux/generic/patches-2.6.36/009-decompress_unlzo_fix.patch
@@ -0,0 +1,23 @@
+--- /dev/null
++++ b/include/linux/decompress/unlzo_mm.h
+@@ -0,0 +1,10 @@
++#ifndef UNLZO_MM_H
++#define UNLZO_MM_H
++
++#ifdef STATIC
++#define INIT
++#else
++#define INIT __init
++#endif
++
++#endif
+--- a/lib/decompress_unlzo.c
++++ b/lib/decompress_unlzo.c
+@@ -39,6 +39,7 @@
+ 
+ #include <linux/types.h>
+ #include <linux/lzo.h>
++#include <linux/decompress/unlzo_mm.h>
+ #include <linux/decompress/mm.h>
+ 
+ #include <linux/compiler.h>
diff --git a/target/linux/generic/patches-2.6.36/014-cfi_show_amd_extended_table_version.patch b/target/linux/generic/patches-2.6.36/014-cfi_show_amd_extended_table_version.patch
new file mode 100644
index 00000000000..55a6c2e7d3b
--- /dev/null
+++ b/target/linux/generic/patches-2.6.36/014-cfi_show_amd_extended_table_version.patch
@@ -0,0 +1,30 @@
+--- a/drivers/mtd/chips/cfi_cmdset_0002.c
++++ b/drivers/mtd/chips/cfi_cmdset_0002.c
+@@ -371,6 +371,8 @@ static struct cfi_fixup fixup_table[] =
+ static void cfi_fixup_major_minor(struct cfi_private *cfi,
+ 				  struct cfi_pri_amdstd *extp)
+ {
++	// manufacturers defined in include/linux/mtd/cfi.h
++
+ 	if (cfi->mfr == CFI_MFR_SAMSUNG && cfi->id == 0x257e &&
+ 	    extp->MajorVersion == '0')
+ 		extp->MajorVersion = '1';
+@@ -403,6 +405,9 @@ struct mtd_info *cfi_cmdset_0002(struct
+ 
+ 	mtd->reboot_notifier.notifier_call = cfi_amdstd_reboot;
+ 
++	printk(" CFI mfr 0x%08x\n", cfi->mfr);	// TODO: Is there a more general place to print this info?
++	printk(" CFI id  0x%08x\n", cfi->id);
++
+ 	if (cfi->cfi_mode==CFI_MODE_CFI){
+ 		unsigned char bootloc;
+ 		__u16 adr = primary?cfi->cfiq->P_ADR:cfi->cfiq->A_ADR;
+@@ -420,7 +425,7 @@ struct mtd_info *cfi_cmdset_0002(struct
+ 			 * Valid primary extension versions are: 1.0, 1.1, 1.2, 1.3, 1.4
+ 			 * see: http://www.amd.com/us-en/assets/content_type/DownloadableAssets/cfi_r20.pdf, page 19
+ 			 *      http://www.amd.com/us-en/assets/content_type/DownloadableAssets/cfi_100_20011201.pdf
+-			 *      http://www.spansion.com/Support/Datasheets/s29ws-p_00_a12_e.pdf
++			 *      http://www.spansion.com/Support/AppNotes/CFI_Spec_AN_03.pdf
+ 			 */
+ 			if (extp->MajorVersion != '1' ||
+ 			    (extp->MajorVersion == '1' && (extp->MinorVersion < '0' || extp->MinorVersion > '4'))) {
diff --git a/target/linux/generic/patches-2.6.36/089-mtd-samsung-flash.patch b/target/linux/generic/patches-2.6.36/089-mtd-samsung-flash.patch
new file mode 100644
index 00000000000..1d13d4ed5b5
--- /dev/null
+++ b/target/linux/generic/patches-2.6.36/089-mtd-samsung-flash.patch
@@ -0,0 +1,37 @@
+--- a/drivers/mtd/chips/cfi_cmdset_0002.c
++++ b/drivers/mtd/chips/cfi_cmdset_0002.c
+@@ -373,9 +373,32 @@ static void cfi_fixup_major_minor(struct
+ {
+ 	// manufacturers defined in include/linux/mtd/cfi.h
+ 
+-	if (cfi->mfr == CFI_MFR_SAMSUNG && cfi->id == 0x257e &&
+-	    extp->MajorVersion == '0')
++	if (cfi->mfr == CFI_MFR_SAMSUNG &&
++	    extp->MajorVersion == '0') {
++		printk("  Fixed Samsung's Amd/Fujitsu Extended Query version from %c.%c",
++		       extp->MajorVersion, extp->MinorVersion);
++
+ 		extp->MajorVersion = '1';
++		extp->MinorVersion = '0';
++
++		printk(" to %c.%c.\n",
++		       extp->MajorVersion, extp->MinorVersion);
++	}
++
++	if (cfi->mfr == CFI_MFR_SAMSUNG &&
++	    extp->MajorVersion == '3' && extp->MinorVersion == '3') {
++		printk(KERN_NOTICE "  Newer Samsung flash detected, "
++		       "should be compatibile with Amd/Fujitsu.\n");
++
++		printk("  Fixed Samsung's Amd/Fujitsu Extended Query version from %c.%c",
++		       extp->MajorVersion, extp->MinorVersion);
++
++		extp->MajorVersion = '1';	// set to 1.3 (last defined version)
++		extp->MinorVersion = '3';
++
++		printk(" to %c.%c.\n",
++		       extp->MajorVersion, extp->MinorVersion);
++	}
+ }
+ 
+ struct mtd_info *cfi_cmdset_0002(struct map_info *map, int primary)
diff --git a/target/linux/generic/patches-2.6.37/009-decompress_unlzo_fix.patch b/target/linux/generic/patches-2.6.37/009-decompress_unlzo_fix.patch
new file mode 100644
index 00000000000..37e322ad8ca
--- /dev/null
+++ b/target/linux/generic/patches-2.6.37/009-decompress_unlzo_fix.patch
@@ -0,0 +1,23 @@
+--- /dev/null
++++ b/include/linux/decompress/unlzo_mm.h
+@@ -0,0 +1,10 @@
++#ifndef UNLZO_MM_H
++#define UNLZO_MM_H
++
++#ifdef STATIC
++#define INIT
++#else
++#define INIT __init
++#endif
++
++#endif
+--- a/lib/decompress_unlzo.c
++++ b/lib/decompress_unlzo.c
+@@ -39,6 +39,7 @@
+ 
+ #include <linux/types.h>
+ #include <linux/lzo.h>
++#include <linux/decompress/unlzo_mm.h>
+ #include <linux/decompress/mm.h>
+ 
+ #include <linux/compiler.h>
diff --git a/target/linux/generic/patches-2.6.37/014-cfi_show_amd_extended_table_version.patch b/target/linux/generic/patches-2.6.37/014-cfi_show_amd_extended_table_version.patch
new file mode 100644
index 00000000000..6da34f78f9c
--- /dev/null
+++ b/target/linux/generic/patches-2.6.37/014-cfi_show_amd_extended_table_version.patch
@@ -0,0 +1,30 @@
+--- a/drivers/mtd/chips/cfi_cmdset_0002.c
++++ b/drivers/mtd/chips/cfi_cmdset_0002.c
+@@ -392,6 +392,8 @@ static struct cfi_fixup fixup_table[] =
+ static void cfi_fixup_major_minor(struct cfi_private *cfi,
+ 				  struct cfi_pri_amdstd *extp)
+ {
++	// manufacturers defined in include/linux/mtd/cfi.h
++
+ 	if (cfi->mfr == CFI_MFR_SAMSUNG && cfi->id == 0x257e &&
+ 	    extp->MajorVersion == '0')
+ 		extp->MajorVersion = '1';
+@@ -431,6 +433,9 @@ struct mtd_info *cfi_cmdset_0002(struct
+ 
+ 	mtd->reboot_notifier.notifier_call = cfi_amdstd_reboot;
+ 
++	printk(" CFI mfr 0x%08x\n", cfi->mfr);	// TODO: Is there a more general place to print this info?
++	printk(" CFI id  0x%08x\n", cfi->id);
++
+ 	if (cfi->cfi_mode==CFI_MODE_CFI){
+ 		unsigned char bootloc;
+ 		__u16 adr = primary?cfi->cfiq->P_ADR:cfi->cfiq->A_ADR;
+@@ -448,7 +453,7 @@ struct mtd_info *cfi_cmdset_0002(struct
+ 			 * Valid primary extension versions are: 1.0, 1.1, 1.2, 1.3, 1.4
+ 			 * see: http://cs.ozerki.net/zap/pub/axim-x5/docs/cfi_r20.pdf, page 19 
+ 			 *      http://www.spansion.com/Support/AppNotes/cfi_100_20011201.pdf
+-			 *      http://www.spansion.com/Support/Datasheets/s29ws-p_00_a12_e.pdf
++			 *      http://www.spansion.com/Support/AppNotes/CFI_Spec_AN_03.pdf
+ 			 */
+ 			if (extp->MajorVersion != '1' ||
+ 			    (extp->MajorVersion == '1' && (extp->MinorVersion < '0' || extp->MinorVersion > '4'))) {
diff --git a/target/linux/generic/patches-2.6.37/065-rootfs_split.patch b/target/linux/generic/patches-2.6.37/065-rootfs_split.patch
index c148738b848..a0483957cb3 100644
--- a/target/linux/generic/patches-2.6.37/065-rootfs_split.patch
+++ b/target/linux/generic/patches-2.6.37/065-rootfs_split.patch
@@ -27,8 +27,8 @@
 +#include <linux/magic.h>
  #include <linux/err.h>
  
- #define MTD_ERASE_PARTIAL	0x8000 /* partition only covers parts of an erase block */
-@@ -50,7 +52,7 @@ struct mtd_part {
+ /* Our partition linked list */
+@@ -48,7 +50,7 @@ struct mtd_part {
   * the pointer to that structure with this macro.
   */
  #define PART(x)  ((struct mtd_part *)(x))
@@ -37,7 +37,7 @@
  
  /*
   * MTD methods which simply translate the effective address and pass through
-@@ -691,6 +693,153 @@ int mtd_del_partition(struct mtd_info *m
+@@ -618,6 +620,153 @@ int mtd_del_partition(struct mtd_info *m
  }
  EXPORT_SYMBOL_GPL(mtd_del_partition);
  
@@ -191,7 +191,7 @@
  /*
   * This function, given a master MTD object and a partition table, creates
   * and registers slave MTD objects which are bound to the master according to
-@@ -706,7 +855,7 @@ int add_mtd_partitions(struct mtd_info *
+@@ -633,7 +782,7 @@ int add_mtd_partitions(struct mtd_info *
  {
  	struct mtd_part *slave;
  	uint64_t cur_offset = 0;
@@ -200,7 +200,7 @@
  
  	printk(KERN_NOTICE "Creating %d MTD partitions on \"%s\":\n", nbparts, master->name);
  
-@@ -721,6 +870,21 @@ int add_mtd_partitions(struct mtd_info *
+@@ -648,6 +797,21 @@ int add_mtd_partitions(struct mtd_info *
  
  		add_mtd_device(&slave->mtd);
  
@@ -222,7 +222,7 @@
  		cur_offset = slave->offset + slave->mtd.size;
  	}
  
-@@ -728,6 +892,32 @@ int add_mtd_partitions(struct mtd_info *
+@@ -655,6 +819,32 @@ int add_mtd_partitions(struct mtd_info *
  }
  EXPORT_SYMBOL(add_mtd_partitions);
  
diff --git a/target/linux/generic/patches-2.6.37/089-mtd-samsung-flash.patch b/target/linux/generic/patches-2.6.37/089-mtd-samsung-flash.patch
new file mode 100644
index 00000000000..03d890ea160
--- /dev/null
+++ b/target/linux/generic/patches-2.6.37/089-mtd-samsung-flash.patch
@@ -0,0 +1,43 @@
+--- a/drivers/mtd/chips/cfi_cmdset_0002.c
++++ b/drivers/mtd/chips/cfi_cmdset_0002.c
+@@ -394,15 +394,31 @@ static void cfi_fixup_major_minor(struct
+ {
+ 	// manufacturers defined in include/linux/mtd/cfi.h
+ 
+-	if (cfi->mfr == CFI_MFR_SAMSUNG && cfi->id == 0x257e &&
+-	    extp->MajorVersion == '0')
+-		extp->MajorVersion = '1';
+-	/*
+-	 * SST 38VF640x chips report major=0xFF / minor=0xFF.
+-	 */
+-	if (cfi->mfr == CFI_MFR_SST && (cfi->id >> 4) == 0x0536) {
+-		extp->MajorVersion = '1';
+-		extp->MinorVersion = '0';
++	if (cfi->mfr == CFI_MFR_SAMSUNG &&
++		extp->MajorVersion == '0') {
++			printk("  Fixed Samsung's Amd/Fujitsu Extended Query version from %c.%c",
++				extp->MajorVersion, extp->MinorVersion);
++
++			extp->MajorVersion = '1';
++			extp->MinorVersion = '0';
++
++			printk(" to %c.%c.\n",
++				extp->MajorVersion, extp->MinorVersion);
++	}
++
++	if (cfi->mfr == CFI_MFR_SAMSUNG &&
++		extp->MajorVersion == '3' && extp->MinorVersion == '3') {
++			printk(KERN_NOTICE "  Newer Samsung flash detected, "
++				"should be compatibile with Amd/Fujitsu.\n");
++
++			printk("  Fixed Samsung's Amd/Fujitsu Extended Query version from %c.%c",
++				extp->MajorVersion, extp->MinorVersion);
++
++			extp->MajorVersion = '1';       // set to 1.3 (last defined version)
++			extp->MinorVersion = '3';
++
++			printk(" to %c.%c.\n",
++				extp->MajorVersion, extp->MinorVersion);
+ 	}
+ }
+