target: add check_reset hook
Allow targets to run checks post reset. Used to check that e.g. DCC downloads have been enabled. Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>__archive__
parent
3e33393078
commit
dc793455e9
|
@ -477,6 +477,11 @@ int target_process_reset(struct command_context *cmd_ctx, enum target_reset_mode
|
||||||
/* We want any events to be processed before the prompt */
|
/* We want any events to be processed before the prompt */
|
||||||
retval = target_call_timer_callbacks_now();
|
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 retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -499,6 +504,12 @@ static int default_examine(struct target *target)
|
||||||
return ERROR_OK;
|
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)
|
int target_examine_one(struct target *target)
|
||||||
{
|
{
|
||||||
return target->type->examine(target);
|
return target->type->examine(target);
|
||||||
|
@ -708,6 +719,9 @@ static int target_init_one(struct command_context *cmd_ctx,
|
||||||
if (type->examine == NULL)
|
if (type->examine == NULL)
|
||||||
type->examine = default_examine;
|
type->examine = default_examine;
|
||||||
|
|
||||||
|
if (type->check_reset== NULL)
|
||||||
|
type->check_reset = default_check_reset;
|
||||||
|
|
||||||
int retval = type->init_target(cmd_ctx, target);
|
int retval = type->init_target(cmd_ctx, target);
|
||||||
if (ERROR_OK != retval)
|
if (ERROR_OK != retval)
|
||||||
{
|
{
|
||||||
|
@ -4887,6 +4901,20 @@ int target_register_commands(struct command_context *cmd_ctx)
|
||||||
return register_commands(cmd_ctx, NULL, target_command_handlers);
|
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[] = {
|
static const struct command_registration target_exec_command_handlers[] = {
|
||||||
{
|
{
|
||||||
.name = "fast_load_image",
|
.name = "fast_load_image",
|
||||||
|
@ -5088,6 +5116,14 @@ static const struct command_registration target_exec_command_handlers[] = {
|
||||||
"and write the 8/16/32 bit values",
|
"and write the 8/16/32 bit values",
|
||||||
.usage = "arrayname bitwidth address count",
|
.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
|
COMMAND_REGISTRATION_DONE
|
||||||
};
|
};
|
||||||
int target_register_user_commands(struct command_context *cmd_ctx)
|
int target_register_user_commands(struct command_context *cmd_ctx)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* Copyright (C) 2005 by Dominic Rath *
|
* Copyright (C) 2005 by Dominic Rath *
|
||||||
* Dominic.Rath@gmx.de *
|
* Dominic.Rath@gmx.de *
|
||||||
* *
|
* *
|
||||||
* Copyright (C) 2007,2008,2009 Øyvind Harboe *
|
* Copyright (C) 2007-9 Øyvind Harboe *
|
||||||
* oyvind.harboe@zylin.com *
|
* oyvind.harboe@zylin.com *
|
||||||
* *
|
* *
|
||||||
* Copyright (C) 2008 by Spencer Oliver *
|
* Copyright (C) 2008 by Spencer Oliver *
|
||||||
|
@ -483,4 +483,6 @@ void target_all_handle_event(enum target_event e);
|
||||||
|
|
||||||
const char *target_strerror_safe(int err);
|
const char *target_strerror_safe(int err);
|
||||||
|
|
||||||
|
extern bool get_target_reset_nag(void);
|
||||||
|
|
||||||
#endif /* TARGET_H */
|
#endif /* TARGET_H */
|
||||||
|
|
|
@ -213,6 +213,13 @@ struct target_type
|
||||||
|
|
||||||
int (*mmu)(struct target *target, int *enabled);
|
int (*mmu)(struct target *target, int *enabled);
|
||||||
|
|
||||||
|
/* after reset is complete, the target can check if things are properly set up.
|
||||||
|
*
|
||||||
|
* This can be used to check if e.g. DCC memory writes have been enabled for
|
||||||
|
* arm7/9 targets, which they really should except in the most contrived
|
||||||
|
* circumstances.
|
||||||
|
*/
|
||||||
|
int (*check_reset)(struct target *target);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TARGET_TYPE_H
|
#endif // TARGET_TYPE_H
|
||||||
|
|
Loading…
Reference in New Issue