return ERROR_FAIL;
}
+ /* disable polling during reset to make reset event scripts
+ * more predictable, i.e. dr/irscan & pathmove in events will
+ * not have JTAG operations injected into the middle of a sequence.
+ */
+ int save_poll = target_continous_poll;
+ target_continous_poll = 0;
+
sprintf( buf, "ocd_process_reset %s", n->name );
retval = Jim_Eval( interp, buf );
+ target_continous_poll = save_poll;
+
if(retval != JIM_OK) {
Jim_PrintErrorMessage(interp);
return ERROR_FAIL;
if (argc == 0)
{
- if((retval = target_poll(target)) != ERROR_OK)
+ command_print(cmd_ctx, "background polling: %s",
+ target_continous_poll ? "on" : "off");
+ if ((retval = target_poll(target)) != ERROR_OK)
return retval;
- if((retval = target_arch_state(target)) != ERROR_OK)
+ if ((retval = target_arch_state(target)) != ERROR_OK)
return retval;
}
static int handle_reset_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
{
- const Jim_Nvp *n;
- enum target_reset_mode reset_mode = RESET_RUN;
+ if (argc > 1)
+ return ERROR_COMMAND_SYNTAX_ERROR;
- if (argc >= 1)
+ enum target_reset_mode reset_mode = RESET_RUN;
+ if (argc == 1)
{
+ const Jim_Nvp *n;
n = Jim_Nvp_name2value_simple( nvp_reset_modes, args[0] );
if( (n->name == NULL) || (n->value == RESET_UNKNOWN) ){
return ERROR_COMMAND_SYNTAX_ERROR;
static int handle_resume_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
{
- int retval;
- target_t *target = get_current_target(cmd_ctx);
+ if (argc > 1)
+ return ERROR_COMMAND_SYNTAX_ERROR;
- target_handle_event( target, TARGET_EVENT_OLD_pre_resume );
+ target_t *target = get_current_target(cmd_ctx);
+ target_handle_event(target, TARGET_EVENT_OLD_pre_resume);
- if (argc == 0)
- retval = target_resume(target, 1, 0, 1, 0); /* current pc, addr = 0, handle breakpoints, not debugging */
- else if (argc == 1)
- retval = target_resume(target, 0, strtoul(args[0], NULL, 0), 1, 0); /* addr = args[0], handle breakpoints, not debugging */
- else
- {
- retval = ERROR_COMMAND_SYNTAX_ERROR;
- }
+ /* with no args, resume from current pc, addr = 0,
+ * with one arguments, addr = args[0],
+ * handle breakpoints, not debugging */
+ u32 addr = 0;
+ if (argc == 1)
+ addr = strtoul(args[0], NULL, 0);
- return retval;
+ return target_resume(target, 0, addr, 1, 0);
}
static int handle_step_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
{
- target_t *target = get_current_target(cmd_ctx);
+ if (argc > 1)
+ return ERROR_COMMAND_SYNTAX_ERROR;
LOG_DEBUG("-");
- if (argc == 0)
- return target->type->step(target, 1, 0, 1); /* current pc, addr = 0, handle breakpoints */
-
+ /* with no args, step from current pc, addr = 0,
+ * with one argument addr = args[0],
+ * handle breakpoints, debugging */
+ u32 addr = 0;
if (argc == 1)
- return target->type->step(target, 0, strtoul(args[0], NULL, 0), 1); /* addr = args[0], handle breakpoints */
+ addr = strtoul(args[0], NULL, 0);
- return ERROR_OK;
+ target_t *target = get_current_target(cmd_ctx);
+ return target->type->step(target, 0, addr, 1);
}
static void handle_md_output(struct command_context_s *cmd_ctx,
static int handle_rwp_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
{
- target_t *target = get_current_target(cmd_ctx);
+ if (argc != 1)
+ return ERROR_COMMAND_SYNTAX_ERROR;
- if (argc > 0)
- watchpoint_remove(target, strtoul(args[0], NULL, 0));
+ target_t *target = get_current_target(cmd_ctx);
+ watchpoint_remove(target, strtoul(args[0], NULL, 0));
return ERROR_OK;
}
-static int handle_virt2phys_command(command_context_t *cmd_ctx, char *cmd, char **args, int argc)
-{
- int retval;
- target_t *target = get_current_target(cmd_ctx);
- u32 va;
- u32 pa;
+/**
+ * Translate a virtual address to a physical address.
+ *
+ * The low-level target implementation must have logged a detailed error
+ * which is forwarded to telnet/GDB session.
+ */
+static int handle_virt2phys_command(command_context_t *cmd_ctx,
+ char *cmd, char **args, int argc)
+{
if (argc != 1)
- {
return ERROR_COMMAND_SYNTAX_ERROR;
- }
- va = strtoul(args[0], NULL, 0);
- retval = target->type->virt2phys(target, va, &pa);
+ target_t *target = get_current_target(cmd_ctx);
+ u32 va = strtoul(args[0], NULL, 0);
+ u32 pa;
+
+ int retval = target->type->virt2phys(target, va, &pa);
if (retval == ERROR_OK)
- {
command_print(cmd_ctx, "Physical address 0x%08x", pa);
- }
- else
- {
- /* lower levels will have logged a detailed error which is
- * forwarded to telnet/GDB session.
- */
- }
+
return retval;
}