Numonyx M29W160ET patch
[fw/openocd] / src / flash / nor / cfi.c
index 714cbe451e711b5f63a480da3ff8b851ebf933e3..9813d83b84721220ec153d5fe2712e83c1940979 100644 (file)
@@ -48,7 +48,7 @@ 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_atmel_reversed_erase_regions(struct flash_bank *flash, void *param);
+static void cfi_fixup_reversed_erase_regions(struct flash_bank *flash, void *param);
 
 /* fixup after reading cmdset 0002 primary query table */
 static const struct cfi_fixup cfi_0002_fixups[] = {
@@ -57,7 +57,8 @@ static const struct cfi_fixup cfi_0002_fixups[] = {
        {CFI_MFR_SST, 0x00D6, cfi_fixup_0002_unlock_addresses, &cfi_unlock_addresses[CFI_UNLOCK_5555_2AAA]},
        {CFI_MFR_SST, 0x00D7, cfi_fixup_0002_unlock_addresses, &cfi_unlock_addresses[CFI_UNLOCK_5555_2AAA]},
        {CFI_MFR_SST, 0x2780, cfi_fixup_0002_unlock_addresses, &cfi_unlock_addresses[CFI_UNLOCK_5555_2AAA]},
-       {CFI_MFR_ATMEL, 0x00C8, cfi_fixup_atmel_reversed_erase_regions, NULL},
+       {CFI_MFR_ATMEL, 0x00C8, cfi_fixup_reversed_erase_regions, NULL},
+       {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]},
@@ -979,7 +980,10 @@ static int cfi_intel_protect(struct flash_bank *bank, int set, int first, int la
         * instant individual block locking (bit 5).
         */
        if (!(pri_ext->feature_support & 0x28))
+       {
+               LOG_ERROR("lock/unlock not supported on flash");
                return ERROR_FLASH_OPERATION_FAILED;
+       }
 
        cfi_intel_clear_status_register(bank);
 
@@ -2211,7 +2215,7 @@ static int cfi_write(struct flash_bank *bank, uint8_t *buffer, uint32_t offset,
        return cfi_reset(bank);
 }
 
-static void cfi_fixup_atmel_reversed_erase_regions(struct flash_bank *bank, void *param)
+static void cfi_fixup_reversed_erase_regions(struct flash_bank *bank, void *param)
 {
        (void) param;
        struct cfi_flash_bank *cfi_info = bank->driver_priv;
@@ -2383,8 +2387,6 @@ static int cfi_probe(struct flash_bank *bank)
         */
        if (cfi_info->not_cfi == 0)
        {
-               int retval;
-
                /* enter CFI query mode
                 * according to JEDEC Standard No. 68.01,
                 * a single bus sequence with address = 0x55, data = 0x98 should put
@@ -2716,7 +2718,7 @@ static int cfi_protect_check(struct flash_bank *bank)
        return ERROR_OK;
 }
 
-static int cfi_info(struct flash_bank *bank, char *buf, int buf_size)
+static int get_cfi_info(struct flash_bank *bank, char *buf, int buf_size)
 {
        int printed;
        struct cfi_flash_bank *cfi_info = bank->driver_priv;
@@ -2806,5 +2808,5 @@ struct flash_driver cfi_flash = {
        /* FIXME: access flash at bus_width size */
        .erase_check = default_flash_blank_check,
        .protect_check = cfi_protect_check,
-       .info = cfi_info,
+       .info = get_cfi_info,
 };