X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Ftarget%2Friscv%2Friscv-011.c;fp=src%2Ftarget%2Friscv%2Friscv-011.c;h=eded86246cc21f8c51d104e059051a4fe497412d;hp=bd3f159fbeebd213683cb8eefc68867f8f695579;hb=bc72695f6738951571502706bd48680de5ccc84c;hpb=89f07325f2e7ca9d28ba0c54a26e3aab8b34984a diff --git a/src/target/riscv/riscv-011.c b/src/target/riscv/riscv-011.c index bd3f159fbe..eded86246c 100644 --- a/src/target/riscv/riscv-011.c +++ b/src/target/riscv/riscv-011.c @@ -358,6 +358,15 @@ static void add_dbus_scan(const struct target *target, struct scan_field *field, uint16_t address, uint64_t data) { riscv011_info_t *info = get_info(target); + RISCV_INFO(r); + + if (r->reset_delays_wait >= 0) { + r->reset_delays_wait--; + if (r->reset_delays_wait < 0) { + info->dbus_busy_delay = 0; + info->interrupt_high_delay = 0; + } + } field->num_bits = info->addrbits + DBUS_OP_SIZE + DBUS_DATA_SIZE; field->in_value = in_value; @@ -1408,12 +1417,6 @@ static int strict_step(struct target *target, bool announce) LOG_DEBUG("enter"); - struct breakpoint *breakpoint = target->breakpoints; - while (breakpoint) { - riscv_remove_breakpoint(target, breakpoint); - breakpoint = breakpoint->next; - } - struct watchpoint *watchpoint = target->watchpoints; while (watchpoint) { riscv_remove_watchpoint(target, watchpoint); @@ -1424,12 +1427,6 @@ static int strict_step(struct target *target, bool announce) if (result != ERROR_OK) return result; - breakpoint = target->breakpoints; - while (breakpoint) { - riscv_add_breakpoint(target, breakpoint); - breakpoint = breakpoint->next; - } - watchpoint = target->watchpoints; while (watchpoint) { riscv_add_watchpoint(target, watchpoint); @@ -1463,7 +1460,7 @@ static int step(struct target *target, int current, target_addr_t address, if (result != ERROR_OK) return result; } else { - return resume(target, 0, true); + return full_step(target, false); } return ERROR_OK; @@ -1676,7 +1673,7 @@ static riscv_error_t handle_halt_routine(struct target *target) break; default: LOG_ERROR("Got invalid bus access status: %d", status); - return ERROR_FAIL; + goto error; } if (data & DMCONTROL_INTERRUPT) { interrupt_set++; @@ -1850,7 +1847,7 @@ static int handle_halt(struct target *target, bool announce) target->debug_reason = DBG_REASON_BREAKPOINT; break; case DCSR_CAUSE_HWBP: - target->debug_reason = DBG_REASON_WPTANDBKPT; + target->debug_reason = DBG_REASON_WATCHPOINT; /* If we halted because of a data trigger, gdb doesn't know to do * the disable-breakpoints-step-enable-breakpoints dance. */ info->need_strict_step = true;