Use enum for target_register_timer_callback()
[openocd.git] / src / target / hla_target.c
index a3e683597bc0126e886783819931ad751ac84ca2..60ed7d64df1749014ff8d83b4466333d36181b6c 100644 (file)
@@ -271,7 +271,10 @@ static int hl_target_request_data(struct target *target,
        uint32_t i;
 
        for (i = 0; i < (size * 4); i++) {
-               hl_dcc_read(hl_if, &data, &ctrl);
+               int err = hl_dcc_read(hl_if, &data, &ctrl);
+               if (err != ERROR_OK)
+                       return err;
+
                buffer[i] = data;
        }
 
@@ -281,6 +284,8 @@ static int hl_target_request_data(struct target *target,
 static int hl_handle_target_request(void *priv)
 {
        struct target *target = priv;
+       int err;
+
        if (!target_was_examined(target))
                return ERROR_OK;
        struct hl_interface_s *hl_if = target_to_adapter(target);
@@ -292,7 +297,9 @@ static int hl_handle_target_request(void *priv)
                uint8_t data;
                uint8_t ctrl;
 
-               hl_dcc_read(hl_if, &data, &ctrl);
+               err = hl_dcc_read(hl_if, &data, &ctrl);
+               if (err != ERROR_OK)
+                       return err;
 
                /* check if we have data */
                if (ctrl & (1 << 0)) {
@@ -300,11 +307,20 @@ static int hl_handle_target_request(void *priv)
 
                        /* we assume target is quick enough */
                        request = data;
-                       hl_dcc_read(hl_if, &data, &ctrl);
+                       err = hl_dcc_read(hl_if, &data, &ctrl);
+                       if (err != ERROR_OK)
+                               return err;
+
                        request |= (data << 8);
-                       hl_dcc_read(hl_if, &data, &ctrl);
+                       err = hl_dcc_read(hl_if, &data, &ctrl);
+                       if (err != ERROR_OK)
+                               return err;
+
                        request |= (data << 16);
-                       hl_dcc_read(hl_if, &data, &ctrl);
+                       err = hl_dcc_read(hl_if, &data, &ctrl);
+                       if (err != ERROR_OK)
+                               return err;
+
                        request |= (data << 24);
                        target_request(target, request);
                }
@@ -330,7 +346,8 @@ static int adapter_init_arch_info(struct target *target,
        armv7m->examine_debug_reason = adapter_examine_debug_reason;
        armv7m->stlink = true;
 
-       target_register_timer_callback(hl_handle_target_request, 1, 1, target);
+       target_register_timer_callback(hl_handle_target_request, 1,
+               TARGET_TIMER_TYPE_PERIODIC, target);
 
        return ERROR_OK;
 }
@@ -349,11 +366,17 @@ static int adapter_target_create(struct target *target,
                Jim_Interp *interp)
 {
        LOG_DEBUG("%s", __func__);
+       struct adiv5_private_config *pc = target->private_config;
+       if (pc != NULL && pc->ap_num > 0) {
+               LOG_ERROR("hla_target: invalid parameter -ap-num (> 0)");
+               return ERROR_COMMAND_SYNTAX_ERROR;
+       }
 
        struct cortex_m_common *cortex_m = calloc(1, sizeof(struct cortex_m_common));
-
-       if (!cortex_m)
-               return ERROR_COMMAND_SYNTAX_ERROR;
+       if (cortex_m == NULL) {
+               LOG_ERROR("No memory creating target");
+               return ERROR_FAIL;
+       }
 
        adapter_init_arch_info(target, cortex_m, target->tap);
 
@@ -450,6 +473,9 @@ static int adapter_poll(struct target *target)
        if (prev_target_state == state)
                return ERROR_OK;
 
+       if (prev_target_state == TARGET_DEBUG_RUNNING && state == TARGET_RUNNING)
+               return ERROR_OK;
+
        target->state = state;
 
        if (state == TARGET_HALTED) {
@@ -785,6 +811,7 @@ struct target_type hla_target = {
        .init_target = adapter_init_target,
        .deinit_target = cortex_m_deinit_target,
        .target_create = adapter_target_create,
+       .target_jim_configure = adiv5_jim_configure,
        .examine = cortex_m_examine,
        .commands = adapter_command_handlers,
 
@@ -799,6 +826,7 @@ struct target_type hla_target = {
        .resume = adapter_resume,
        .step = adapter_step,
 
+       .get_gdb_arch = arm_get_gdb_arch,
        .get_gdb_reg_list = armv7m_get_gdb_reg_list,
 
        .read_memory = adapter_read_memory,

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)