diff options
Diffstat (limited to 'target/linux/generic-2.6/patches-2.6.32')
| -rw-r--r-- | target/linux/generic-2.6/patches-2.6.32/014-samsung_flash | 68 | ||||
| -rw-r--r-- | target/linux/generic-2.6/patches-2.6.32/089-mtd-samsung-flash.patch | 40 | 
2 files changed, 74 insertions, 34 deletions
| diff --git a/target/linux/generic-2.6/patches-2.6.32/014-samsung_flash b/target/linux/generic-2.6/patches-2.6.32/014-samsung_flash index e2a456915..7010d367b 100644 --- a/target/linux/generic-2.6/patches-2.6.32/014-samsung_flash +++ b/target/linux/generic-2.6/patches-2.6.32/014-samsung_flash @@ -1,36 +1,50 @@  --- a/drivers/mtd/chips/cfi_cmdset_0002.c  +++ b/drivers/mtd/chips/cfi_cmdset_0002.c -@@ -51,6 +51,7 @@ - #define SST49LF040B	        0x0050 - #define SST49LF008A		0x005a - #define AT49BV6416		0x00d6 -+#define MANUFACTURER_SAMSUNG	0x00ec +@@ -325,6 +325,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'; +@@ -355,6 +357,9 @@ struct mtd_info *cfi_cmdset_0002(struct  + 	mtd->name    = map->name; + 	mtd->writesize = 1; - static int cfi_amdstd_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *); - static int cfi_amdstd_write_words(struct mtd_info *, loff_t, size_t, size_t *, const u_char *); -@@ -375,12 +376,19 @@ struct mtd_info *cfi_cmdset_0002(struct ++	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; + 		/* +@@ -373,16 +378,24 @@ struct mtd_info *cfi_cmdset_0002(struct  - 		if (extp->MajorVersion != '1' || - 		    (extp->MinorVersion < '0' || extp->MinorVersion > '4')) { --			printk(KERN_ERR "  Unknown Amd/Fujitsu Extended Query " + 		cfi_fixup_major_minor(cfi, extp); +  +-		if (extp->MajorVersion != '1' || +-		    (extp->MinorVersion < '0' || extp->MinorVersion > '4')) { ++		// valid primary extension versions are: 1.0, 1.1, 1.2, 1.3 ++		// see: http://www.amd.com/us-en/assets/content_type/DownloadableAssets/cfi_r20.pdf, page 19 and on ++		//      http://www.amd.com/us-en/assets/content_type/DownloadableAssets/cfi_100_20011201.pdf ++		if (extp->MajorVersion < '1' || ++		    extp->MajorVersion > '1' || ++		    (extp->MajorVersion == '1' && ( extp->MinorVersion < '0' || extp->MinorVersion > '3'))) { + 			printk(KERN_ERR "  Unknown Amd/Fujitsu Extended Query "  -			       "version %c.%c.\n",  extp->MajorVersion,  -			       extp->MinorVersion); --			kfree(extp); --			kfree(mtd); --			return NULL; -+		        if (cfi->mfr == MANUFACTURER_SAMSUNG && -+			    (extp->MajorVersion == '3' && extp->MinorVersion == '3')) { -+			    printk(KERN_NOTICE "  Newer Samsung flash detected, " -+			           "should be compatibile with Amd/Fujitsu.\n"); -+		        } -+		        else { -+			    printk(KERN_ERR "  Unknown Amd/Fujitsu Extended Query " -+			           "version %c.%c.\n",  extp->MajorVersion, -+			           extp->MinorVersion); -+			    kfree(extp); -+			    kfree(mtd); -+			    return NULL; -+		        } ++			       "version %c.%c (0x%02x/0x%02x).\n", ++			       extp->MajorVersion, extp->MinorVersion, ++			       extp->MajorVersion, extp->MinorVersion); + 			kfree(extp); + 			kfree(mtd); + 			return NULL;   		} ++		printk("  Amd/Fujitsu Extended Query version %c.%c.\n", ++		       extp->MajorVersion, extp->MinorVersion); ++   		/* Install our own private info structure */ + 		cfi->cmdset_priv = extp; +  diff --git a/target/linux/generic-2.6/patches-2.6.32/089-mtd-samsung-flash.patch b/target/linux/generic-2.6/patches-2.6.32/089-mtd-samsung-flash.patch index 4d1072cd4..46923358b 100644 --- a/target/linux/generic-2.6/patches-2.6.32/089-mtd-samsung-flash.patch +++ b/target/linux/generic-2.6/patches-2.6.32/089-mtd-samsung-flash.patch @@ -1,11 +1,37 @@  --- a/drivers/mtd/chips/cfi_cmdset_0002.c  +++ b/drivers/mtd/chips/cfi_cmdset_0002.c -@@ -374,7 +374,7 @@ struct mtd_info *cfi_cmdset_0002(struct +@@ -327,9 +327,32 @@ static void cfi_fixup_major_minor(struct + { + 	// manufacturers defined in include/linux/mtd/cfi.h - 		cfi_fixup_major_minor(cfi, extp); +-	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); ++	} + } --		if (extp->MajorVersion != '1' || -+		if (extp->MajorVersion < '0' || extp->MajorVersion > '3' || - 		    (extp->MinorVersion < '0' || extp->MinorVersion > '4')) { - 		        if (cfi->mfr == MANUFACTURER_SAMSUNG && - 			    (extp->MajorVersion == '3' && extp->MinorVersion == '3')) { + struct mtd_info *cfi_cmdset_0002(struct map_info *map, int primary) | 
