Remove useless setting of the 'is_erased' flag after a flash
modification. Also, remove code that erroneously depends on
this flag.
Keep the flag for now since it is still used by the
erase_check() functionality.
See commit
07da3b3913dcb6b65564f4fe67c2f26032f180c0
Change-Id: Ia046905bc9e0cb2572145f19251c3e10c4e2d553
Signed-off-by: Marc Schink <dev@zapb.de>
Reviewed-on: http://openocd.zylin.com/6279
Tested-by: jenkins
Reviewed-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com>
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
27 files changed:
if (retval != ERROR_OK)
return retval;
if (retval != ERROR_OK)
return retval;
- if (ambiqmicro_mass_erase(bank) == ERROR_OK) {
- /* set all sectors as erased */
- for (unsigned int i = 0; i < bank->num_sectors; i++)
- bank->sectors[i].is_erased = 1;
-
+ if (ambiqmicro_mass_erase(bank) == ERROR_OK)
command_print(CMD, "ambiqmicro mass erase complete");
command_print(CMD, "ambiqmicro mass erase complete");
command_print(CMD, "ambiqmicro mass erase failed");
return ERROR_OK;
command_print(CMD, "ambiqmicro mass erase failed");
return ERROR_OK;
-
- /* This sector is definitely erased. */
- bank->sectors[i].is_erased = 1;
if (retval != ERROR_OK)
return retval;
if (retval != ERROR_OK)
return retval;
- if (avrf_mass_erase(bank) == ERROR_OK) {
- /* set all sectors as erased */
- for (unsigned int i = 0; i < bank->num_sectors; i++)
- bank->sectors[i].is_erased = 1;
-
+ if (avrf_mass_erase(bank) == ERROR_OK)
command_print(CMD, "avr mass erase complete");
command_print(CMD, "avr mass erase complete");
command_print(CMD, "avr mass erase failed");
LOG_DEBUG("%s", __func__);
command_print(CMD, "avr mass erase failed");
LOG_DEBUG("%s", __func__);
if (retval != ERROR_OK)
return retval;
if (retval != ERROR_OK)
return retval;
- if (status == 0x80)
- bank->sectors[i].is_erased = 1;
- else {
retval = cfi_send_command(bank, 0xff, cfi_flash_address(bank, 0, 0x0));
if (retval != ERROR_OK)
return retval;
retval = cfi_send_command(bank, 0xff, cfi_flash_address(bank, 0, 0x0));
if (retval != ERROR_OK)
return retval;
if (retval != ERROR_OK)
return retval;
if (retval != ERROR_OK)
return retval;
- if (cfi_spansion_wait_status_busy(bank, cfi_info->block_erase_timeout) == ERROR_OK)
- bank->sectors[i].is_erased = 1;
- else {
+ if (cfi_spansion_wait_status_busy(bank, cfi_info->block_erase_timeout) != ERROR_OK) {
retval = cfi_send_command(bank, 0xf0, cfi_flash_address(bank, 0, 0x0));
if (retval != ERROR_OK)
return retval;
retval = cfi_send_command(bank, 0xf0, cfi_flash_address(bank, 0, 0x0));
if (retval != ERROR_OK)
return retval;
if (set)
retval = dsp5680xx_f_lock(bank->target);
if (set)
retval = dsp5680xx_f_lock(bank->target);
retval = dsp5680xx_f_unlock(bank->target);
retval = dsp5680xx_f_unlock(bank->target);
- if (retval == ERROR_OK) {
- /* mark all as erased */
- for (int i = 0; i <= (HFM_SECTOR_COUNT - 1); i++)
- /* FM does not recognize it as erased if erased via JTAG. */
- bank->sectors[i].is_erased = 1;
- }
- }
static int dsp5680xx_flash_write(struct flash_bank *bank, const uint8_t *buffer,
uint32_t offset, uint32_t count)
{
static int dsp5680xx_flash_write(struct flash_bank *bank, const uint8_t *buffer,
uint32_t offset, uint32_t count)
{
if ((offset + count / 2) > bank->size) {
LOG_ERROR("%s: Flash bank cannot fit data.", __func__);
return ERROR_FAIL;
if ((offset + count / 2) > bank->size) {
LOG_ERROR("%s: Flash bank cannot fit data.", __func__);
return ERROR_FAIL;
LOG_ERROR("%s: Writing to odd addresses not supported for this target", __func__);
return ERROR_FAIL;
}
LOG_ERROR("%s: Writing to odd addresses not supported for this target", __func__);
return ERROR_FAIL;
}
- retval = dsp5680xx_f_wr(bank->target, buffer, bank->base + offset / 2, count, 0);
- uint32_t addr_word;
-
- for (addr_word = bank->base + offset / 2; addr_word < count / 2;
- addr_word += (HFM_SECTOR_SIZE / 2)) {
- if (retval == ERROR_OK)
- bank->sectors[addr_word / (HFM_SECTOR_SIZE / 2)].is_erased = 0;
- else
- bank->sectors[addr_word / (HFM_SECTOR_SIZE / 2)].is_erased = -1;
- }
- return retval;
+ return dsp5680xx_f_wr(bank->target, buffer, bank->base + offset / 2, count, 0);
}
static int dsp5680xx_probe(struct flash_bank *bank)
}
static int dsp5680xx_probe(struct flash_bank *bank)
static int dsp5680xx_flash_erase(struct flash_bank *bank, unsigned int first,
unsigned int last)
{
static int dsp5680xx_flash_erase(struct flash_bank *bank, unsigned int first,
unsigned int last)
{
- int retval;
-
- retval = dsp5680xx_f_erase(bank->target, (uint32_t) first, (uint32_t) last);
- if ((!(first | last)) || ((first == 0) && (last == (HFM_SECTOR_COUNT - 1))))
- last = HFM_SECTOR_COUNT - 1;
- if (retval == ERROR_OK)
- for (unsigned int i = first; i <= last; i++)
- bank->sectors[i].is_erased = 1;
- else
- /**
- * If an error occurred unknown status
- *is set even though some sector could have been correctly erased.
- */
- for (unsigned int i = first; i <= last; i++)
- bank->sectors[i].is_erased = -1;
- return retval;
+ return dsp5680xx_f_erase(bank->target, (uint32_t) first, (uint32_t) last);
uint32_t i;
for (i = 0; i < HFM_SECTOR_COUNT; i++) {
uint32_t i;
for (i = 0; i < HFM_SECTOR_COUNT; i++) {
- if (bank->sectors[i].is_erased == -1) {
- retval = dsp5680xx_f_erase_check(bank->target, &erased, i);
- if (retval != ERROR_OK) {
- bank->sectors[i].is_erased = -1;
- } else {
- if (erased)
- bank->sectors[i].is_erased = 1;
- else
- bank->sectors[i].is_erased = 0;
- }
+ retval = dsp5680xx_f_erase_check(bank->target, &erased, i);
+ if (retval != ERROR_OK) {
+ bank->sectors[i].is_erased = -1;
+ } else {
+ if (erased)
+ bank->sectors[i].is_erased = 1;
+ else
+ bank->sectors[i].is_erased = 0;
retval = em357_wait_status_busy(bank, 100);
if (retval != ERROR_OK)
return retval;
retval = em357_wait_status_busy(bank, 100);
if (retval != ERROR_OK)
return retval;
-
- bank->sectors[i].is_erased = 1;
}
retval = target_write_u32(target, EM357_FLASH_CR, FLASH_LOCK);
}
retval = target_write_u32(target, EM357_FLASH_CR, FLASH_LOCK);
return retval;
retval = em357_mass_erase(bank);
return retval;
retval = em357_mass_erase(bank);
- if (retval == ERROR_OK) {
- /* set all sectors as erased */
- for (unsigned int i = 0; i < bank->num_sectors; i++)
- bank->sectors[i].is_erased = 1;
-
+ if (retval == ERROR_OK)
command_print(CMD, "em357 mass erase complete");
command_print(CMD, "em357 mass erase complete");
command_print(CMD, "em357 mass erase failed");
return retval;
command_print(CMD, "em357 mass erase failed");
return retval;
if (retval != ERROR_OK)
return retval;
}
if (retval != ERROR_OK)
return retval;
}
- bank->sectors[sector].is_erased = 1;
}
target_free_working_area(target, write_algorithm);
}
target_free_working_area(target, write_algorithm);
return retval;
if (fm3_chip_erase(bank) == ERROR_OK) {
return retval;
if (fm3_chip_erase(bank) == ERROR_OK) {
- /* set all sectors as erased */
- for (unsigned int i = 0; i < bank->num_sectors; i++)
- bank->sectors[i].is_erased = 1;
-
command_print(CMD, "fm3 chip erase complete");
} else {
command_print(CMD, "fm3 chip erase failed");
command_print(CMD, "fm3 chip erase complete");
} else {
command_print(CMD, "fm3 chip erase failed");
goto err_run_ret;
} else
retval = ERROR_OK;
goto err_run_ret;
} else
retval = ERROR_OK;
-
- bank->sectors[sector].is_erased = 1;
return ERROR_FLASH_OPERATION_FAILED;
}
return ERROR_FLASH_OPERATION_FAILED;
}
- bank->sectors[i].is_erased = 1;
-
if (i == 2)
fcf_erased = true;
}
if (i == 2)
fcf_erased = true;
}
max32xxx_flash_op_post(bank);
return ERROR_FLASH_OPERATION_FAILED;
}
max32xxx_flash_op_post(bank);
return ERROR_FLASH_OPERATION_FAILED;
}
-
- bank->sectors[banknr].is_erased = 1;
if (retval != ERROR_OK)
return retval;
if (retval != ERROR_OK)
return retval;
- if (max32xxx_mass_erase(bank) == ERROR_OK) {
- /* set all sectors as erased */
- for (unsigned i = 0; i < bank->num_sectors; i++)
- bank->sectors[i].is_erased = 1;
-
+ if (max32xxx_mass_erase(bank) == ERROR_OK)
command_print(CMD, "max32xxx mass erase complete");
command_print(CMD, "max32xxx mass erase complete");
command_print(CMD, "max32xxx mass erase failed");
return ERROR_OK;
command_print(CMD, "max32xxx mass erase failed");
return ERROR_OK;
if (retval != ERROR_OK)
goto reset_pg_and_lock;
}
if (retval != ERROR_OK)
goto reset_pg_and_lock;
}
- bank->sectors[i].is_erased = 1;
retval = niietcm4_opstatus_check(bank);
if (retval != ERROR_OK)
return retval;
retval = niietcm4_opstatus_check(bank);
if (retval != ERROR_OK)
return retval;
-
- bank->sectors[i].is_erased = 1;
retval = target_write_u32(target, NUMICRO_FLASH_ISPCON, (status | ISPCON_ISPFF));
if (retval != ERROR_OK)
return retval;
retval = target_write_u32(target, NUMICRO_FLASH_ISPCON, (status | ISPCON_ISPFF));
if (retval != ERROR_OK)
return retval;
- } else {
- bank->sectors[i].is_erased = 1;
return ERROR_FLASH_OPERATION_FAILED;
if (status & NVMCON_LVDERR)
return ERROR_FLASH_OPERATION_FAILED;
return ERROR_FLASH_OPERATION_FAILED;
if (status & NVMCON_LVDERR)
return ERROR_FLASH_OPERATION_FAILED;
- bank->sectors[i].is_erased = 1;
/* Call "Erase All" system ROM API */
uint32_t param = 0;
/* Call "Erase All" system ROM API */
uint32_t param = 0;
- retval = psoc4_sysreq(bank, PSOC4_CMD_ERASE_ALL,
+ return psoc4_sysreq(bank, PSOC4_CMD_ERASE_ALL,
0,
¶m, sizeof(param), NULL);
0,
¶m, sizeof(param), NULL);
-
- if (retval == ERROR_OK)
- /* set all sectors as erased */
- for (unsigned int i = 0; i < bank->num_sectors; i++)
- bank->sectors[i].is_erased = 1;
-
- return retval;
if (hr != ERROR_OK)
goto exit_free_wa;
if (hr != ERROR_OK)
goto exit_free_wa;
- for (unsigned int i = first; i < first + rows_in_sector; i++)
- bank->sectors[i].is_erased = 1;
-
first += rows_in_sector;
} else {
/* Perform Row Erase otherwise */
first += rows_in_sector;
} else {
/* Perform Row Erase otherwise */
if (hr != ERROR_OK)
goto exit_free_wa;
if (hr != ERROR_OK)
goto exit_free_wa;
- bank->sectors[first].is_erased = 1;
target_write_u32(target, FLASH_CRIS, 0);
return ERROR_FLASH_OPERATION_FAILED;
}
target_write_u32(target, FLASH_CRIS, 0);
return ERROR_FLASH_OPERATION_FAILED;
}
-
- bank->sectors[banknr].is_erased = 1;
if (retval != ERROR_OK)
return retval;
if (retval != ERROR_OK)
return retval;
- if (stellaris_mass_erase(bank) == ERROR_OK) {
- /* set all sectors as erased */
- for (unsigned int i = 0; i < bank->num_sectors; i++)
- bank->sectors[i].is_erased = 1;
-
+ if (stellaris_mass_erase(bank) == ERROR_OK)
command_print(CMD, "stellaris mass erase complete");
command_print(CMD, "stellaris mass erase complete");
command_print(CMD, "stellaris mass erase failed");
return ERROR_OK;
command_print(CMD, "stellaris mass erase failed");
return ERROR_OK;
retval = stm32x_wait_status_busy(bank, FLASH_ERASE_TIMEOUT);
if (retval != ERROR_OK)
return retval;
retval = stm32x_wait_status_busy(bank, FLASH_ERASE_TIMEOUT);
if (retval != ERROR_OK)
return retval;
-
- bank->sectors[i].is_erased = 1;
}
retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_CR), FLASH_LOCK);
}
retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_CR), FLASH_LOCK);
return retval;
retval = stm32x_mass_erase(bank);
return retval;
retval = stm32x_mass_erase(bank);
- if (retval == ERROR_OK) {
- /* set all sectors as erased */
- for (unsigned int i = 0; i < bank->num_sectors; i++)
- bank->sectors[i].is_erased = 1;
-
+ if (retval == ERROR_OK)
command_print(CMD, "stm32x mass erase complete");
command_print(CMD, "stm32x mass erase complete");
command_print(CMD, "stm32x mass erase failed");
return retval;
command_print(CMD, "stm32x mass erase failed");
return retval;
retval = stm32x_wait_status_busy(bank, FLASH_ERASE_TIMEOUT);
if (retval != ERROR_OK)
return retval;
retval = stm32x_wait_status_busy(bank, FLASH_ERASE_TIMEOUT);
if (retval != ERROR_OK)
return retval;
-
- bank->sectors[i].is_erased = 1;
}
retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_CR), FLASH_LOCK);
}
retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_CR), FLASH_LOCK);
retval = stm32x_mass_erase(bank);
if (retval == ERROR_OK) {
retval = stm32x_mass_erase(bank);
if (retval == ERROR_OK) {
- /* set all sectors as erased */
- for (unsigned int i = 0; i < bank->num_sectors; i++)
- bank->sectors[i].is_erased = 1;
-
command_print(CMD, "stm32x mass erase complete");
} else {
command_print(CMD, "stm32x mass erase failed");
command_print(CMD, "stm32x mass erase complete");
} else {
command_print(CMD, "stm32x mass erase failed");
LOG_ERROR("erase time-out or operation error sector %u", i);
goto flash_lock;
}
LOG_ERROR("erase time-out or operation error sector %u", i);
goto flash_lock;
}
- bank->sectors[i].is_erased = 1;
return retval;
retval = stm32x_mass_erase(bank);
return retval;
retval = stm32x_mass_erase(bank);
- if (retval == ERROR_OK) {
- /* set all sectors as erased */
- for (unsigned int i = 0; i < bank->num_sectors; i++)
- bank->sectors[i].is_erased = 1;
-
+ if (retval == ERROR_OK)
command_print(CMD, "stm32h7x mass erase complete");
command_print(CMD, "stm32h7x mass erase complete");
command_print(CMD, "stm32h7x mass erase failed");
command_print(CMD, "stm32h7x mass erase failed");
retval = stm32l4_wait_status_busy(bank, FLASH_ERASE_TIMEOUT);
if (retval != ERROR_OK)
break;
retval = stm32l4_wait_status_busy(bank, FLASH_ERASE_TIMEOUT);
if (retval != ERROR_OK)
break;
-
- bank->sectors[i].is_erased = 1;
return retval;
retval = stm32l4_mass_erase(bank);
return retval;
retval = stm32l4_mass_erase(bank);
- if (retval == ERROR_OK) {
- /* set all sectors as erased */
- for (unsigned int i = 0; i < bank->num_sectors; i++)
- bank->sectors[i].is_erased = 1;
-
+ if (retval == ERROR_OK)
command_print(CMD, "stm32l4x mass erase complete");
command_print(CMD, "stm32l4x mass erase complete");
command_print(CMD, "stm32l4x mass erase failed");
command_print(CMD, "stm32l4x mass erase failed");
return retval;
retval = stm32lx_mass_erase(bank);
return retval;
retval = stm32lx_mass_erase(bank);
- if (retval == ERROR_OK) {
- /* set all sectors as erased */
- for (unsigned int i = 0; i < bank->num_sectors; i++)
- bank->sectors[i].is_erased = 1;
-
+ if (retval == ERROR_OK)
command_print(CMD, "stm32lx mass erase complete");
command_print(CMD, "stm32lx mass erase complete");
command_print(CMD, "stm32lx mass erase failed");
command_print(CMD, "stm32lx mass erase failed");
retval = wait_till_ready(bank, SPI_MASS_ERASE_TIMEOUT);
duration_measure(&bench);
retval = wait_till_ready(bank, SPI_MASS_ERASE_TIMEOUT);
duration_measure(&bench);
- if (retval == ERROR_OK) {
- /* set all sectors as erased */
- for (sector = 0; sector < bank->num_sectors; sector++)
- bank->sectors[sector].is_erased = 1;
-
+ if (retval == ERROR_OK)
command_print(CMD, "stmqspi mass erase completed in %fs (%0.3f KiB/s)",
duration_elapsed(&bench),
duration_kbps(&bench, bank->size));
command_print(CMD, "stmqspi mass erase completed in %fs (%0.3f KiB/s)",
duration_elapsed(&bench),
duration_kbps(&bench, bank->size));
command_print(CMD, "stmqspi mass erase not completed even after %fs",
duration_elapsed(&bench));
command_print(CMD, "stmqspi mass erase not completed even after %fs",
duration_elapsed(&bench));
err:
/* Switch to memory mapped mode before return to prompt */
err:
/* Switch to memory mapped mode before return to prompt */
if (err != ERROR_OK)
return err;
if (err != ERROR_OK)
return err;
- for (unsigned int i = first; i <= last; i++)
- bank->sectors[i].is_erased = 1;
-
- for (unsigned int i = first; i <= last; i++)
- bank->sectors[i].is_erased = 1;
-
- for (unsigned int sector = first; sector <= last; sector++)
- bank->sectors[sector].is_erased = 1;
-
err_run:
for (i = 0; i < ARRAY_SIZE(reg_params); i++)
destroy_reg_param(®_params[i]);
err_run:
for (i = 0; i < ARRAY_SIZE(reg_params); i++)
destroy_reg_param(®_params[i]);
if (res != ERROR_OK)
goto clear_status_and_exit;
if (res != ERROR_OK)
goto clear_status_and_exit;
-
- bank->sectors[i].is_erased = 1;