X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fflash%2Fnor%2Fnon_cfi.c;h=b6739043ce969704199e2a1a9fdd4252f2a0efbc;hb=d8ece229f9f06e66ad994ca996148912dc0b76b5;hp=e0ea568aea808e18b5eda4384c9e196dbe07babc;hpb=6f03e92959008708ac6808df679f5729f6683166;p=fw%2Fopenocd diff --git a/src/flash/nor/non_cfi.c b/src/flash/nor/non_cfi.c index e0ea568ae..b6739043c 100644 --- a/src/flash/nor/non_cfi.c +++ b/src/flash/nor/non_cfi.c @@ -230,6 +230,20 @@ static struct non_cfi non_cfi_flashes[] = { } }, { + .mfr = CFI_MFR_SST, + .id = 0x236d, /* SST39VF6401B */ + .pri_id = 0x02, + .dev_size = 8*MB, + .interface_desc = 0x2, /* x8 or x16 device with nBYTE */ + .max_buf_write_size = 0x0, + .status_poll_mask = CFI_STATUS_POLL_MASK_DQ6_DQ7, + .num_erase_regions = 1, + .erase_region_info = + { + ERASE_REGION(2048, 4*KB) + } + }, + { .mfr = CFI_MFR_AMD, .id = 0x22ab, /* AM29F400BB */ .pri_id = 0x02, @@ -463,10 +477,12 @@ void cfi_fixup_non_cfi(struct flash_bank *bank) cfi_info->vcc_max = 0x0; cfi_info->vpp_min = 0x0; cfi_info->vpp_max = 0x0; - cfi_info->word_write_timeout_typ = 0x0; - cfi_info->buf_write_timeout_typ = 0x0; - cfi_info->block_erase_timeout_typ = 0x0; - cfi_info->chip_erase_timeout_typ = 0x0; + /* these are used for timeouts - use vales that should be long enough + for normal operation. */ + cfi_info->word_write_timeout_typ = 0x0a; + cfi_info->buf_write_timeout_typ = 0x0d; + cfi_info->block_erase_timeout_typ = 0x0d; + cfi_info->chip_erase_timeout_typ = 0x10; cfi_info->word_write_timeout_max = 0x0; cfi_info->buf_write_timeout_max = 0x0; cfi_info->block_erase_timeout_max = 0x0; @@ -486,7 +502,11 @@ void cfi_fixup_non_cfi(struct flash_bank *bank) cfi_info->max_buf_write_size = non_cfi->max_buf_write_size; cfi_info->status_poll_mask = non_cfi->status_poll_mask; cfi_info->num_erase_regions = non_cfi->num_erase_regions; - cfi_info->erase_region_info = non_cfi->erase_region_info; + size_t erase_region_info_size = sizeof(*cfi_info->erase_region_info) * + cfi_info->num_erase_regions; + cfi_info->erase_region_info = malloc(erase_region_info_size); + memcpy(cfi_info->erase_region_info, + non_cfi->erase_region_info, erase_region_info_size); cfi_info->dev_size = non_cfi->dev_size; if (cfi_info->pri_id == 0x2)