]> git.sur5r.net Git - openocd/blobdiff - src/target/armv7m.c
target, flash: prepare infrastructure for multi-block blank check
[openocd] / src / target / armv7m.c
index a8ddfe894a2cba659941df41851f4c02385ec0f1..696f85cb2721b05d677f0c170bf27ac567b9c1b2 100644 (file)
@@ -733,7 +733,7 @@ cleanup:
 
 /** Checks whether a memory region is erased. */
 int armv7m_blank_check_memory(struct target *target,
-       target_addr_t address, uint32_t count, uint32_t *blank, uint8_t erased_value)
+       struct target_memory_check_block *blocks, int num_blocks, uint8_t erased_value)
 {
        struct working_area *erase_check_algorithm;
        struct reg_param reg_params[3];
@@ -774,10 +774,10 @@ int armv7m_blank_check_memory(struct target *target,
        armv7m_info.core_mode = ARM_MODE_THREAD;
 
        init_reg_param(&reg_params[0], "r0", 32, PARAM_OUT);
-       buf_set_u32(reg_params[0].value, 0, 32, address);
+       buf_set_u32(reg_params[0].value, 0, 32, blocks->address);
 
        init_reg_param(&reg_params[1], "r1", 32, PARAM_OUT);
-       buf_set_u32(reg_params[1].value, 0, 32, count);
+       buf_set_u32(reg_params[1].value, 0, 32, blocks->size);
 
        init_reg_param(&reg_params[2], "r2", 32, PARAM_IN_OUT);
        buf_set_u32(reg_params[2].value, 0, 32, erased_value);
@@ -793,7 +793,7 @@ int armv7m_blank_check_memory(struct target *target,
                        &armv7m_info);
 
        if (retval == ERROR_OK)
-               *blank = buf_get_u32(reg_params[2].value, 0, 32);
+               blocks->result = buf_get_u32(reg_params[2].value, 0, 32);
 
        destroy_reg_param(&reg_params[0]);
        destroy_reg_param(&reg_params[1]);
@@ -802,7 +802,10 @@ int armv7m_blank_check_memory(struct target *target,
 cleanup:
        target_free_working_area(target, erase_check_algorithm);
 
-       return retval;
+       if (retval != ERROR_OK)
+               return retval;
+
+       return 1;       /* only one block checked */
 }
 
 int armv7m_maybe_skip_bkpt_inst(struct target *target, bool *inst_found)