target: add check_reset hook
authorØyvind Harboe <oyvind.harboe@zylin.com>
Mon, 11 Jan 2010 14:28:18 +0000 (15:28 +0100)
committerØyvind Harboe <oyvind.harboe@zylin.com>
Wed, 13 Jan 2010 11:00:02 +0000 (12:00 +0100)
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>
src/target/target.c
src/target/target.h
src/target/target_type.h

index 7994affa586b84d887e3379a2f924ee7d1170a67..c56265c1d1e8c200adcc43366c46dd1e5b32b4b6 100644 (file)
@@ -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 */
        retval = target_call_timer_callbacks_now();
 
        /* 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 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)
 {
        return target->type->examine(target);
 int target_examine_one(struct target *target)
 {
        return target->type->examine(target);
@@ -708,6 +719,9 @@ static int target_init_one(struct command_context *cmd_ctx,
        if (type->examine == NULL)
                type->examine = default_examine;
 
        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 retval = type->init_target(cmd_ctx, target);
        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[] = {
        {
                .name = "fast_load_image",
 static const struct command_registration target_exec_command_handlers[] = {
        {
                .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",
                .usage = "arrayname bitwidth address count",
        },
                        "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)
        COMMAND_REGISTRATION_DONE
 };
 int target_register_user_commands(struct command_context *cmd_ctx)
index 4151c228b6b0479b9cdb1ea0c835803bac38bbd1..da91d464c8db02346a3225ead10b54e405b2cd38 100644 (file)
@@ -2,7 +2,7 @@
  *   Copyright (C) 2005 by Dominic Rath                                    *
  *   Dominic.Rath@gmx.de                                                   *
  *                                                                         *
  *   Copyright (C) 2005 by Dominic Rath                                    *
  *   Dominic.Rath@gmx.de                                                   *
  *                                                                         *
- *   Copyright (C) 2007,2008,2009 Øyvind Harboe                            *
+ *   Copyright (C) 2007-9 Øyvind Harboe                                    *
  *   oyvind.harboe@zylin.com                                               *
  *                                                                         *
  *   Copyright (C) 2008 by Spencer Oliver                                  *
  *   oyvind.harboe@zylin.com                                               *
  *                                                                         *
  *   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 */
index 67041b31625a68e2a605d3e90ef09fedf2e99eed..70eb96253754a457879b13806ce99e1aade98c9b 100644 (file)
@@ -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

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)