dsp5680xx - mark erase after unlocking flash
[fw/openocd] / src / target / etm.c
index 61ee99a0403453ed90b0d92d73b8b0745a0e594f..4e15878332cf93528753b1a31e6eb36bab813b15 100644 (file)
@@ -314,7 +314,6 @@ struct reg_cache *etm_build_reg_cache(struct target *target,
 
        /* figure ETM version then add base registers */
        if (config & (1 << 31)) {
-               bcd_vers = 0x20;
                LOG_WARNING("ETMv2+ support is incomplete");
 
                /* REVISIT more registers may exist; they may now be
@@ -496,6 +495,7 @@ static int etm_read_reg_w_check(struct reg *reg,
        const struct etm_reg_info *r = etm_reg->reg_info;
        uint8_t reg_addr = r->addr & 0x7f;
        struct scan_field fields[3];
+       int retval;
 
        if (etm_reg->reg_info->mode == WO) {
                LOG_ERROR("BUG: can't read write-only register %s", r->name);
@@ -504,8 +504,12 @@ static int etm_read_reg_w_check(struct reg *reg,
 
        LOG_DEBUG("%s (%u)", r->name, reg_addr);
 
-       arm_jtag_scann(etm_reg->jtag_info, 0x6, TAP_IDLE);
-       arm_jtag_set_instr(etm_reg->jtag_info, etm_reg->jtag_info->intest_instr, NULL, TAP_IDLE);
+       retval = arm_jtag_scann(etm_reg->jtag_info, 0x6, TAP_IDLE);
+       if (retval != ERROR_OK)
+               return retval;
+       retval = arm_jtag_set_instr(etm_reg->jtag_info, etm_reg->jtag_info->intest_instr, NULL, TAP_IDLE);
+       if (retval != ERROR_OK)
+               return retval;
 
        fields[0].num_bits = 32;
        fields[0].out_value = reg->value;
@@ -577,6 +581,7 @@ static int etm_write_reg(struct reg *reg, uint32_t value)
        const struct etm_reg_info *r = etm_reg->reg_info;
        uint8_t reg_addr = r->addr & 0x7f;
        struct scan_field fields[3];
+       int retval;
 
        if (etm_reg->reg_info->mode == RO) {
                LOG_ERROR("BUG: can't write read--only register %s", r->name);
@@ -585,8 +590,12 @@ static int etm_write_reg(struct reg *reg, uint32_t value)
 
        LOG_DEBUG("%s (%u): 0x%8.8" PRIx32 "", r->name, reg_addr, value);
 
-       arm_jtag_scann(etm_reg->jtag_info, 0x6, TAP_IDLE);
-       arm_jtag_set_instr(etm_reg->jtag_info, etm_reg->jtag_info->intest_instr, NULL, TAP_IDLE);
+       retval = arm_jtag_scann(etm_reg->jtag_info, 0x6, TAP_IDLE);
+       if (retval != ERROR_OK)
+               return retval;
+       retval = arm_jtag_set_instr(etm_reg->jtag_info, etm_reg->jtag_info->intest_instr, NULL, TAP_IDLE);
+       if (retval != ERROR_OK)
+               return retval;
 
        fields[0].num_bits = 32;
        uint8_t tmp1[4];
@@ -659,7 +668,7 @@ static int etm_read_instruction(struct etm_context *ctx, struct arm_instruction
                        ctx->current_pc - ctx->image->sections[section].base_address,
                        4, buf, &size_read)) != ERROR_OK)
                {
-                       LOG_ERROR("error while reading instruction: %i", retval);
+                       LOG_ERROR("error while reading instruction");
                        return ERROR_TRACE_INSTRUCTION_UNAVAILABLE;
                }
                opcode = target_buffer_get_u32(ctx->target, buf);
@@ -672,7 +681,7 @@ static int etm_read_instruction(struct etm_context *ctx, struct arm_instruction
                        ctx->current_pc - ctx->image->sections[section].base_address,
                        2, buf, &size_read)) != ERROR_OK)
                {
-                       LOG_ERROR("error while reading instruction: %i", retval);
+                       LOG_ERROR("error while reading instruction");
                        return ERROR_TRACE_INSTRUCTION_UNAVAILABLE;
                }
                opcode = target_buffer_get_u16(ctx->target, buf);
@@ -1887,7 +1896,15 @@ COMMAND_HANDLER(handle_etm_load_command)
                return ERROR_FAIL;
        }
 
-       if (file.size % 4)
+       int filesize;
+       int retval = fileio_size(&file, &filesize);
+       if (retval != ERROR_OK)
+       {
+               fileio_close(&file);
+               return retval;
+       }
+
+       if (filesize % 4)
        {
                command_print(CMD_CTX, "size isn't a multiple of 4, no valid trace data");
                fileio_close(&file);
@@ -2091,6 +2108,7 @@ COMMAND_HANDLER(handle_etm_analyze_command)
 
        if ((retval = etmv1_analyze_trace(etm_ctx, CMD_CTX)) != ERROR_OK)
        {
+               /* FIX! error should be reported inside etmv1_analyze_trace() */
                switch (retval)
                {
                        case ERROR_ETM_ANALYSIS_FAILED:
@@ -2103,7 +2121,7 @@ COMMAND_HANDLER(handle_etm_analyze_command)
                                command_print(CMD_CTX, "no image available for trace analysis");
                                break;
                        default:
-                               command_print(CMD_CTX, "unknown error: %i", retval);
+                               command_print(CMD_CTX, "unknown error");
                }
        }