CFI: major version fixup for Samsung K8P2815UQB NOR Flash
PATCH 1/1 CFI: major version fixup for Samsung K8P2815UQB NOR Flash
The NOR Flash memory K8P2815UQB from Samsung uses an incorrect major version number '0'. This patch introduces the cfi_fixup_major_minor() function to set the major version to '1' for this chip. A normal quirk (fixup) cannot be used, because cfi_fixup() is called after the major/minor version check.
--- drivers/mtd/chips/cfi_cmdset_0002.c | 10 ++++++++++ include/linux/mtd/cfi.h | 1 + 2 files changed, 11 insertions(+)
drivers/mtd/chips/cfi_cmdset_0002.c +10 -0
@@ -322,6 +322,14 @@ static struct cfi_fixup fixup_table[] = }; +static void cfi_fixup_major_minor (struct cfi_private *cfi, +struct cfi_pri_amdstd *extp) +{ +if (cfi->mfr ==CFI_MFR_SAMSUNG && cfi->id ==0x257e && + extp->MajorVersion =='0' ) + extp->MajorVersion ='1' ; +} +struct mtd_info *cfi_cmdset_0002 (struct map_info *map,int primary) {struct cfi_private *cfi = map->fldrv_priv;
@@ -363,6 +371,8 @@ struct mtd_info *cfi_cmdset_0002(structreturn NULL ; } +cfi_fixup_major_minor (cfi, extp); +if (extp->MajorVersion !='1' || (extp->MinorVersion <'0' || extp->MinorVersion >'4' )) { printk(KERN_ERR " Unknown Amd/Fujitsu Extended Query "
include/linux/mtd/cfi.h +1 -0
@@ -520,6 +520,7 @@ struct cfi_fixup {#define CFI_MFR_AMD 0x0001#define CFI_MFR_ATMEL 0x001F +#define CFI_MFR_SAMSUNG 0x00EC#define CFI_MFR_ST 0x0020/* STMicroelectronics */ void cfi_fixup (struct mtd_info *mtd,struct cfi_fixup * fixups);
Quoted 7 lines · Wolfgang Grandegger
The NOR Flash memory K8P2815UQB from Samsung uses an incorrect major version number '0'. This patch introduces the
cfi_fixup_major_minor()function to set the major version to '1' for this chip. A normal quirk (fixup) cannot be used, becausecfi_fixup()is called after the major/minor version check.Signed-off-by Wolfgang Grandegger <[email protected]>
Quoted 46 lines
--- drivers/mtd/chips/cfi_cmdset_0002.c | 10 ++++++++++ include/linux/mtd/cfi.h | 1 + 2 files changed, 11 insertions(+)Index:
linux-2.6/drivers/mtd/chips/cfi_cmdset_0002.c
===================================================================drivers/mtd/chips/cfi_cmdset_0002.c +10
-0@@ -322,6 +322,14 @@ static struct cfi_fixup fixup_table[] = }; +static void cfi_fixup_major_minor (struct cfi_private *cfi, +struct cfi_pri_amdstd *extp) +{ +if (cfi->mfr ==CFI_MFR_SAMSUNG && cfi->id ==0x257e && + extp->MajorVersion =='0' ) + extp->MajorVersion ='1' ; +} +struct mtd_info *cfi_cmdset_0002 (struct map_info *map,int primary) {struct cfi_private *cfi = map->fldrv_priv;@@ -363,6 +371,8 @@ struct mtd_info *cfi_cmdset_0002(structreturn NULL ; } +cfi_fixup_major_minor (cfi, extp); +if (extp->MajorVersion !='1' || (extp->MinorVersion <'0' || extp->MinorVersion >'4' )) { printk(KERN_ERR " Unknown Amd/Fujitsu Extended Query "Index:
linux-2.6/include/linux/mtd/cfi.h
===================================================================include/linux/mtd/cfi.h +1
-0@@ -520,6 +520,7 @@ struct cfi_fixup {#define CFI_MFR_AMD 0x0001#define CFI_MFR_ATMEL 0x001F +#define CFI_MFR_SAMSUNG 0x00EC#define CFI_MFR_ST 0x0020/* STMicroelectronics */ void cfi_fixup (struct mtd_info *mtd,struct cfi_fixup * fixups);