diff options
-rw-r--r-- | src/flash/nor/cfi.c | 19 | ||||
-rw-r--r-- | src/flash/nor/cfi.h | 2 |
2 files changed, 16 insertions, 5 deletions
diff --git a/src/flash/nor/cfi.c b/src/flash/nor/cfi.c index 09caa2eb..4165166f 100644 --- a/src/flash/nor/cfi.c +++ b/src/flash/nor/cfi.c @@ -46,9 +46,10 @@ static struct cfi_unlock_addresses cfi_unlock_addresses[] = }; /* CFI fixups foward declarations */ -static void cfi_fixup_0002_erase_regions(struct flash_bank *flash, void *param); -static void cfi_fixup_0002_unlock_addresses(struct flash_bank *flash, void *param); -static void cfi_fixup_reversed_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 *bank, 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 */ static const struct cfi_fixup cfi_0002_fixups[] = { @@ -59,13 +60,14 @@ static const struct cfi_fixup cfi_0002_fixups[] = { {CFI_MFR_SST, 0x2780, cfi_fixup_0002_unlock_addresses, &cfi_unlock_addresses[CFI_UNLOCK_5555_2AAA]}, {CFI_MFR_SST, 0x236d, cfi_fixup_0002_unlock_addresses, &cfi_unlock_addresses[CFI_UNLOCK_555_2AA]}, {CFI_MFR_ATMEL, 0x00C8, cfi_fixup_reversed_erase_regions, NULL}, - {CFI_MFR_ST, 0x22C4, cfi_fixup_reversed_erase_regions, NULL}, /* M29W160ET */ + {CFI_MFR_ST, 0x22C4, cfi_fixup_reversed_erase_regions, NULL}, /* M29W160ET */ {CFI_MFR_FUJITSU, 0x22ea, cfi_fixup_0002_unlock_addresses, &cfi_unlock_addresses[CFI_UNLOCK_555_2AA]}, {CFI_MFR_FUJITSU, 0x226b, cfi_fixup_0002_unlock_addresses, &cfi_unlock_addresses[CFI_UNLOCK_5555_2AAA]}, {CFI_MFR_AMIC, 0xb31a, 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_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} }; @@ -2528,6 +2530,7 @@ static int cfi_probe(struct flash_bank *bank) retval = cfi_query_u8(bank, 0, 0x1e, &cfi_info->vpp_max); if (retval != ERROR_OK) return retval; + retval = cfi_query_u8(bank, 0, 0x1f, &cfi_info->word_write_timeout_typ); if (retval != ERROR_OK) return retval; @@ -2924,6 +2927,14 @@ static int get_cfi_info(struct flash_bank *bank, char *buf, int buf_size) 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 = { .name = "cfi", .flash_bank_command = cfi_flash_bank_command, diff --git a/src/flash/nor/cfi.h b/src/flash/nor/cfi.h index 099a6137..34807ee2 100644 --- a/src/flash/nor/cfi.h +++ b/src/flash/nor/cfi.h @@ -150,7 +150,7 @@ struct cfi_fixup { uint16_t mfr; uint16_t id; - void (*fixup)(struct flash_bank *flash, void *param); + void (*fixup)(struct flash_bank *bank, void *param); void *param; }; |