cfi: disable buffer writes for M29W128G
For some reason buffer writes for the M29W128G do not work reliably, so disable them. See: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=504a3e72208fc6a65924426ff5693982590bccdc Signed-off-by: Spencer Oliver <ntfreak@users.sourceforge.net>
This commit is contained in:
parent
26ba6ea511
commit
ae68ddc25e
|
@ -46,9 +46,10 @@ static struct cfi_unlock_addresses cfi_unlock_addresses[] =
|
||||||
};
|
};
|
||||||
|
|
||||||
/* CFI fixups foward declarations */
|
/* CFI fixups foward declarations */
|
||||||
static void cfi_fixup_0002_erase_regions(struct flash_bank *flash, void *param);
|
static void cfi_fixup_0002_erase_regions(struct flash_bank *bank, void *param);
|
||||||
static void cfi_fixup_0002_unlock_addresses(struct flash_bank *flash, void *param);
|
static void cfi_fixup_0002_unlock_addresses(struct flash_bank *bank, void *param);
|
||||||
static void cfi_fixup_reversed_erase_regions(struct flash_bank *flash, void *param);
|
static void cfi_fixup_reversed_erase_regions(struct flash_bank *bank, void *param);
|
||||||
|
static void cfi_fixup_0002_write_buffer(struct flash_bank *bank, void *param);
|
||||||
|
|
||||||
/* fixup after reading cmdset 0002 primary query table */
|
/* fixup after reading cmdset 0002 primary query table */
|
||||||
static const struct cfi_fixup cfi_0002_fixups[] = {
|
static const struct cfi_fixup cfi_0002_fixups[] = {
|
||||||
|
@ -66,6 +67,7 @@ static const struct cfi_fixup cfi_0002_fixups[] = {
|
||||||
{CFI_MFR_MX, 0x225b, cfi_fixup_0002_unlock_addresses, &cfi_unlock_addresses[CFI_UNLOCK_555_2AA]},
|
{CFI_MFR_MX, 0x225b, cfi_fixup_0002_unlock_addresses, &cfi_unlock_addresses[CFI_UNLOCK_555_2AA]},
|
||||||
{CFI_MFR_AMD, 0x225b, cfi_fixup_0002_unlock_addresses, &cfi_unlock_addresses[CFI_UNLOCK_555_2AA]},
|
{CFI_MFR_AMD, 0x225b, cfi_fixup_0002_unlock_addresses, &cfi_unlock_addresses[CFI_UNLOCK_555_2AA]},
|
||||||
{CFI_MFR_ANY, CFI_ID_ANY, cfi_fixup_0002_erase_regions, NULL},
|
{CFI_MFR_ANY, CFI_ID_ANY, cfi_fixup_0002_erase_regions, NULL},
|
||||||
|
{CFI_MFR_ST, 0x227E, cfi_fixup_0002_write_buffer, NULL}, /* M29W128G */
|
||||||
{0, 0, NULL, NULL}
|
{0, 0, NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2528,6 +2530,7 @@ static int cfi_probe(struct flash_bank *bank)
|
||||||
retval = cfi_query_u8(bank, 0, 0x1e, &cfi_info->vpp_max);
|
retval = cfi_query_u8(bank, 0, 0x1e, &cfi_info->vpp_max);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
retval = cfi_query_u8(bank, 0, 0x1f, &cfi_info->word_write_timeout_typ);
|
retval = cfi_query_u8(bank, 0, 0x1f, &cfi_info->word_write_timeout_typ);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
|
@ -2924,6 +2927,14 @@ static int get_cfi_info(struct flash_bank *bank, char *buf, int buf_size)
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void cfi_fixup_0002_write_buffer(struct flash_bank *bank, void *param)
|
||||||
|
{
|
||||||
|
struct cfi_flash_bank *cfi_info = bank->driver_priv;
|
||||||
|
|
||||||
|
/* disable write buffer for M29W128G */
|
||||||
|
cfi_info->buf_write_timeout_typ = 0;
|
||||||
|
}
|
||||||
|
|
||||||
struct flash_driver cfi_flash = {
|
struct flash_driver cfi_flash = {
|
||||||
.name = "cfi",
|
.name = "cfi",
|
||||||
.flash_bank_command = cfi_flash_bank_command,
|
.flash_bank_command = cfi_flash_bank_command,
|
||||||
|
|
|
@ -150,7 +150,7 @@ struct cfi_fixup
|
||||||
{
|
{
|
||||||
uint16_t mfr;
|
uint16_t mfr;
|
||||||
uint16_t id;
|
uint16_t id;
|
||||||
void (*fixup)(struct flash_bank *flash, void *param);
|
void (*fixup)(struct flash_bank *bank, void *param);
|
||||||
void *param;
|
void *param;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue