/* We want any events to be processed before the prompt */
retval = target_call_timer_callbacks_now();
+ struct target *target;
+ for (target = all_targets; target; target = target->next) {
+ target->type->check_reset(target);
+ }
+
return retval;
}
return ERROR_OK;
}
+/* no check by default */
+static int default_check_reset(struct target *target)
+{
+ return ERROR_OK;
+}
+
int target_examine_one(struct target *target)
{
return target->type->examine(target);
if (type->examine == NULL)
type->examine = default_examine;
+ if (type->check_reset== NULL)
+ type->check_reset = default_check_reset;
+
int retval = type->init_target(cmd_ctx, target);
if (ERROR_OK != retval)
{
int did_something = 0;
if (runSrstAsserted)
{
+ LOG_INFO("Waking up GDB, srst asserted detected.");
target_call_event_callbacks_all(TARGET_EVENT_GDB_HALT);
Jim_Eval(interp, "srst_asserted");
did_something = 1;
}
if (runPowerDropout)
{
+ LOG_INFO("Waking up GDB, power dropout detected.");
target_call_event_callbacks_all(TARGET_EVENT_GDB_HALT);
Jim_Eval(interp, "power_dropout");
did_something = 1;
/* polling may fail silently until the target has been examined */
if ((retval = target_poll(target)) != ERROR_OK)
{
+ /* FIX!!!!! If we add a LOG_INFO() here to output a line in GDB
+ * *why* we are aborting GDB, then we'll spam telnet when the
+ * poll is failing persistently.
+ *
+ * If we could implement an event that detected the
+ * target going from non-pollable to pollable, we could issue
+ * an error only upon the transition.
+ */
target_call_event_callbacks(target, TARGET_EVENT_GDB_HALT);
return retval;
}
const char *value_fmt;
switch (size) {
case 4: value_fmt = "%8.8x "; break;
- case 2: value_fmt = "%4.2x "; break;
+ case 2: value_fmt = "%4.4x "; break;
case 1: value_fmt = "%2.2x "; break;
default:
/* "can't happen", caller checked */
return register_commands(cmd_ctx, NULL, target_command_handlers);
}
+static bool target_reset_nag = true;
+
+bool get_target_reset_nag(void)
+{
+ return target_reset_nag;
+}
+
+COMMAND_HANDLER(handle_target_reset_nag)
+{
+ return CALL_COMMAND_HANDLER(handle_command_parse_bool,
+ &target_reset_nag, "Nag after each reset about options to improve "
+ "performance");
+}
+
static const struct command_registration target_exec_command_handlers[] = {
{
.name = "fast_load_image",
.handler = handle_virt2phys_command,
.mode = COMMAND_ANY,
.help = "translate a virtual address into a physical address",
- .usage = "virual_address",
+ .usage = "virtual_address",
},
{
.name = "reg",
"and write the 8/16/32 bit values",
.usage = "arrayname bitwidth address count",
},
+ {
+ .name = "reset_nag",
+ .handler = handle_target_reset_nag,
+ .mode = COMMAND_ANY,
+ .help = "Nag after each reset about options that could have been "
+ "enabled to improve performance. ",
+ .usage = "['enable'|'disable']",
+ },
COMMAND_REGISTRATION_DONE
};
int target_register_user_commands(struct command_context *cmd_ctx)