diff options
author | Tim Newsome <tim@sifive.com> | 2018-05-17 16:47:48 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-17 16:47:48 -0700 |
commit | bb86173f37c11d1ea305b3e45d6abdaf3d239512 (patch) | |
tree | 14353fe637b742813419aa76fd06a0bbc9643914 /src/target/mips32.c | |
parent | 3344db3d0aef8f3b8c033cb2a098e9ca15e8615c (diff) | |
parent | 712d6a5c3aca04e4181e471f796b2da6e04b49ca (diff) | |
download | riscv-openocd-bb86173f37c11d1ea305b3e45d6abdaf3d239512.zip riscv-openocd-bb86173f37c11d1ea305b3e45d6abdaf3d239512.tar.gz riscv-openocd-bb86173f37c11d1ea305b3e45d6abdaf3d239512.tar.bz2 |
Merge pull request #251 from riscv/from_upstream
From upstream
Diffstat (limited to 'src/target/mips32.c')
-rw-r--r-- | src/target/mips32.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/target/mips32.c b/src/target/mips32.c index 93fb4e6..b5dbea3 100644 --- a/src/target/mips32.c +++ b/src/target/mips32.c @@ -827,7 +827,8 @@ int mips32_checksum_memory(struct target *target, target_addr_t address, /** Checks whether a memory region is erased. */ int mips32_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]; @@ -866,16 +867,16 @@ int mips32_blank_check_memory(struct target *target, int retval = target_write_buffer(target, erase_check_algorithm->address, sizeof(erase_check_code), erase_check_code_8); if (retval != ERROR_OK) - return retval; + goto cleanup; mips32_info.common_magic = MIPS32_COMMON_MAGIC; mips32_info.isa_mode = isa ? MIPS32_ISA_MMIPS32 : MIPS32_ISA_MIPS32; init_reg_param(®_params[0], "r4", 32, PARAM_OUT); - buf_set_u32(reg_params[0].value, 0, 32, address); + buf_set_u32(reg_params[0].value, 0, 32, blocks[0].address); init_reg_param(®_params[1], "r5", 32, PARAM_OUT); - buf_set_u32(reg_params[1].value, 0, 32, count); + buf_set_u32(reg_params[1].value, 0, 32, blocks[0].size); init_reg_param(®_params[2], "r6", 32, PARAM_IN_OUT); buf_set_u32(reg_params[2].value, 0, 32, erased_value); @@ -884,15 +885,19 @@ int mips32_blank_check_memory(struct target *target, erase_check_algorithm->address + (sizeof(erase_check_code) - 4), 10000, &mips32_info); if (retval == ERROR_OK) - *blank = buf_get_u32(reg_params[2].value, 0, 32); + blocks[0].result = buf_get_u32(reg_params[2].value, 0, 32); destroy_reg_param(®_params[0]); destroy_reg_param(®_params[1]); destroy_reg_param(®_params[2]); +cleanup: target_free_working_area(target, erase_check_algorithm); - return retval; + if (retval != ERROR_OK) + return retval; + + return 1; /* only one block has been checked */ } static int mips32_verify_pointer(struct command_context *cmd_ctx, |