|
@@ -46,6 +46,7 @@
|
|
#define MANUFACTURER_INTEL 0x0089
|
|
#define MANUFACTURER_INTEL 0x0089
|
|
#define I82802AB 0x00ad
|
|
#define I82802AB 0x00ad
|
|
#define I82802AC 0x00ac
|
|
#define I82802AC 0x00ac
|
|
|
|
+#define PF38F4476 0x881c
|
|
#define MANUFACTURER_ST 0x0020
|
|
#define MANUFACTURER_ST 0x0020
|
|
#define M50LPW080 0x002F
|
|
#define M50LPW080 0x002F
|
|
#define M50FLW080A 0x0080
|
|
#define M50FLW080A 0x0080
|
|
@@ -315,9 +316,18 @@ static struct cfi_fixup fixup_table[] = {
|
|
{ 0, 0, NULL, NULL }
|
|
{ 0, 0, NULL, NULL }
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+static void cfi_fixup_major_minor(struct cfi_private *cfi,
|
|
|
|
+ struct cfi_pri_intelext *extp)
|
|
|
|
+{
|
|
|
|
+ if (cfi->mfr == MANUFACTURER_INTEL &&
|
|
|
|
+ cfi->id == PF38F4476 && extp->MinorVersion == '3')
|
|
|
|
+ extp->MinorVersion = '1';
|
|
|
|
+}
|
|
|
|
+
|
|
static inline struct cfi_pri_intelext *
|
|
static inline struct cfi_pri_intelext *
|
|
read_pri_intelext(struct map_info *map, __u16 adr)
|
|
read_pri_intelext(struct map_info *map, __u16 adr)
|
|
{
|
|
{
|
|
|
|
+ struct cfi_private *cfi = map->fldrv_priv;
|
|
struct cfi_pri_intelext *extp;
|
|
struct cfi_pri_intelext *extp;
|
|
unsigned int extp_size = sizeof(*extp);
|
|
unsigned int extp_size = sizeof(*extp);
|
|
|
|
|
|
@@ -326,6 +336,8 @@ read_pri_intelext(struct map_info *map, __u16 adr)
|
|
if (!extp)
|
|
if (!extp)
|
|
return NULL;
|
|
return NULL;
|
|
|
|
|
|
|
|
+ cfi_fixup_major_minor(cfi, extp);
|
|
|
|
+
|
|
if (extp->MajorVersion != '1' ||
|
|
if (extp->MajorVersion != '1' ||
|
|
(extp->MinorVersion < '0' || extp->MinorVersion > '5')) {
|
|
(extp->MinorVersion < '0' || extp->MinorVersion > '5')) {
|
|
printk(KERN_ERR " Unknown Intel/Sharp Extended Query "
|
|
printk(KERN_ERR " Unknown Intel/Sharp Extended Query "
|