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;
Linking to existing account procedure
If you already have an account and want to add another login method
you
MUST first sign in with your existing account and
then change URL to read
https://review.openocd.org/login/?link
to get to this page again but this time it'll work for linking. Thank you.
SSH host keys fingerprints
1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=.. |
|+o.. . |
|*.o . . |
|+B . . . |
|Bo. = o S |
|Oo.+ + = |
|oB=.* = . o |
| =+=.+ + E |
|. .=o . o |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)