flash/nor/rp2040: add missing TARGET_HALTED checks

Flash erase and write require this guard, unfortunately it is also
partially needed in the flash probe.

Partially backported from former upstream rp2040.c

Signed-off-by: Tomas Vanek <vanekt@fbl.cz>
Change-Id: Ie8a240e66c3ed68e08f872cbbfdd90a6d80e1f1e
Reviewed-on: https://review.openocd.org/c/openocd/+/8452
Tested-by: jenkins
This commit is contained in:
Tomas Vanek
2024-08-14 09:39:42 +02:00
parent 2e1a76368e
commit 20d1d4405d

View File

@@ -752,6 +752,12 @@ static int rp2040_flash_write(struct flash_bank *bank, const uint8_t *buffer, ui
struct rp2040_flash_bank *priv = bank->driver_priv;
struct target *target = bank->target;
if (target->state != TARGET_HALTED) {
LOG_ERROR("Target not halted");
return ERROR_TARGET_NOT_HALTED;
}
struct working_area *bounce;
int err = setup_for_raw_flash_cmd(target, priv);
@@ -839,6 +845,12 @@ static int rp2040_flash_erase(struct flash_bank *bank, unsigned int first, unsig
{
struct rp2040_flash_bank *priv = bank->driver_priv;
struct target *target = bank->target;
if (target->state != TARGET_HALTED) {
LOG_ERROR("Target not halted");
return ERROR_TARGET_NOT_HALTED;
}
uint32_t start_addr = bank->sectors[first].offset;
uint32_t length = bank->sectors[last].offset + bank->sectors[last].size - start_addr;
LOG_DEBUG("RP2040 erase %d bytes starting at 0x%" PRIx32, length, start_addr);
@@ -1109,6 +1121,11 @@ static int rp2040_flash_probe(struct flash_bank *bank)
priv->spi_dev.name = "size override";
LOG_DEBUG("SPI flash autodetection disabled, using configured size");
} else {
if (target->state != TARGET_HALTED) {
LOG_ERROR("Target not halted");
return ERROR_TARGET_NOT_HALTED;
}
bank->size = 0;
(void)setup_for_raw_flash_cmd(target, priv);
@@ -1240,6 +1257,11 @@ COMMAND_HANDLER(rp2040_rom_api_call_handler)
for (unsigned int i = 0; i + 1 < CMD_ARGC && i < ARRAY_SIZE(args); i++)
COMMAND_PARSE_NUMBER(u32, CMD_ARGV[i + 1], args[i]);
if (target->state != TARGET_HALTED) {
LOG_ERROR("Target not halted");
return ERROR_TARGET_NOT_HALTED;
}
struct rp2040_flash_bank *priv = bank->driver_priv;
retval = setup_for_raw_flash_cmd(target, priv);
if (retval != ERROR_OK)