parent
75cf9a4cd3
commit
297b9756bc
@ -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>
|
@ -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'))) {
|
@ -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)
|
@ -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>
|
@ -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'))) {
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in new issue