mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-30 02:36:42 +07:00
mtd: cfi_cmdset_0002: add 0xFF intolerance for M29W128G
The M29W128G Numonyx flash devices are intolerant to any 0xFF command: in the Cfi_util.c the function cfi_qry_mode_off() (that resets the device after the autoselect mode) must have a 0xF0 command after the 0xFF command. This fix solves also the cause of the fixup_M29W128G_write_buffer() fix, that can be removed now. The following patch applies to 2.6.30 kernel. Signed-off-by: Massimo Cirillo <maxcir@gmail.com> Acked-by: Alexey Korolev <akorolev@infradead.org> Cc: stable@kernel.org Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
parent
6ad08ddd9e
commit
23af51ecfb
@ -282,16 +282,6 @@ static void fixup_s29gl032n_sectors(struct mtd_info *mtd, void *param)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fixup_M29W128G_write_buffer(struct mtd_info *mtd, void *param)
|
|
||||||
{
|
|
||||||
struct map_info *map = mtd->priv;
|
|
||||||
struct cfi_private *cfi = map->fldrv_priv;
|
|
||||||
if (cfi->cfiq->BufWriteTimeoutTyp) {
|
|
||||||
pr_warning("Don't use write buffer on ST flash M29W128G\n");
|
|
||||||
cfi->cfiq->BufWriteTimeoutTyp = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct cfi_fixup cfi_fixup_table[] = {
|
static struct cfi_fixup cfi_fixup_table[] = {
|
||||||
{ CFI_MFR_ATMEL, CFI_ID_ANY, fixup_convert_atmel_pri, NULL },
|
{ CFI_MFR_ATMEL, CFI_ID_ANY, fixup_convert_atmel_pri, NULL },
|
||||||
#ifdef AMD_BOOTLOC_BUG
|
#ifdef AMD_BOOTLOC_BUG
|
||||||
@ -308,7 +298,6 @@ static struct cfi_fixup cfi_fixup_table[] = {
|
|||||||
{ CFI_MFR_AMD, 0x1301, fixup_s29gl064n_sectors, NULL, },
|
{ CFI_MFR_AMD, 0x1301, fixup_s29gl064n_sectors, NULL, },
|
||||||
{ CFI_MFR_AMD, 0x1a00, fixup_s29gl032n_sectors, NULL, },
|
{ CFI_MFR_AMD, 0x1a00, fixup_s29gl032n_sectors, NULL, },
|
||||||
{ CFI_MFR_AMD, 0x1a01, fixup_s29gl032n_sectors, NULL, },
|
{ CFI_MFR_AMD, 0x1a01, fixup_s29gl032n_sectors, NULL, },
|
||||||
{ CFI_MFR_ST, 0x227E, fixup_M29W128G_write_buffer, NULL, },
|
|
||||||
#if !FORCE_WORD_WRITE
|
#if !FORCE_WORD_WRITE
|
||||||
{ CFI_MFR_ANY, CFI_ID_ANY, fixup_use_write_buffers, NULL, },
|
{ CFI_MFR_ANY, CFI_ID_ANY, fixup_use_write_buffers, NULL, },
|
||||||
#endif
|
#endif
|
||||||
|
4
drivers/mtd/chips/cfi_util.c
Normal file → Executable file
4
drivers/mtd/chips/cfi_util.c
Normal file → Executable file
@ -81,6 +81,10 @@ void __xipram cfi_qry_mode_off(uint32_t base, struct map_info *map,
|
|||||||
{
|
{
|
||||||
cfi_send_gen_cmd(0xF0, 0, base, map, cfi, cfi->device_type, NULL);
|
cfi_send_gen_cmd(0xF0, 0, base, map, cfi, cfi->device_type, NULL);
|
||||||
cfi_send_gen_cmd(0xFF, 0, base, map, cfi, cfi->device_type, NULL);
|
cfi_send_gen_cmd(0xFF, 0, base, map, cfi, cfi->device_type, NULL);
|
||||||
|
/* M29W128G flashes require an additional reset command
|
||||||
|
when exit qry mode */
|
||||||
|
if ((cfi->mfr == CFI_MFR_ST) && (cfi->id == 0x227E || cfi->id == 0x7E))
|
||||||
|
cfi_send_gen_cmd(0xF0, 0, base, map, cfi, cfi->device_type, NULL);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(cfi_qry_mode_off);
|
EXPORT_SYMBOL_GPL(cfi_qry_mode_off);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user