This is an automated email from Gerrit.

"Tomas Vanek <van...@fbl.cz>" just uploaded a new patch set to Gerrit, which 
you can find at https://review.openocd.org/c/openocd/+/8452

-- gerrit

commit 6315a03ed16ded546192c001b8ff1c6515bda653
Author: Tomas Vanek <van...@fbl.cz>
Date:   Wed Aug 14 09:39:42 2024 +0200

    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 <van...@fbl.cz>
    Change-Id: Ie8a240e66c3ed68e08f872cbbfdd90a6d80e1f1e

diff --git a/src/flash/nor/rp2040.c b/src/flash/nor/rp2040.c
index 1858c2ffda..7ae1972c81 100644
--- a/src/flash/nor/rp2040.c
+++ b/src/flash/nor/rp2040.c
@@ -745,6 +745,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);
@@ -832,6 +838,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);
@@ -1105,6 +1117,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);
@@ -1214,6 +1231,12 @@ COMMAND_HANDLER(rp2040_rom_api_call_handler)
 
        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;
+       }
+
        retval = setup_for_raw_flash_cmd(target, priv);
        if (retval != ERROR_OK)
                goto cleanup_and_return;

-- 

Reply via email to