jtag/drivers: add support for Nu-Link (Nuvoton ICE) over usb
[fw/openocd] / src / jtag / tcl.c
index 0161b28074612b52903598b9b83c93cf4e5dee22..8b76bff07e37c25d850b6fcbd62b6996568ea602 100644 (file)
@@ -108,7 +108,7 @@ static int Jim_Command_drscan(Jim_Interp *interp, int argc, Jim_Obj *const *args
 
        endstate = TAP_IDLE;
 
-       script_debug(interp, "drscan", argc, args);
+       script_debug(interp, argc, args);
 
        /* validate arguments as numbers */
        e = JIM_OK;
@@ -229,7 +229,7 @@ static int Jim_Command_pathmove(Jim_Interp *interp, int argc, Jim_Obj *const *ar
                return JIM_ERR;
        }
 
-       script_debug(interp, "pathmove", argc, args);
+       script_debug(interp, argc, args);
 
        int i;
        for (i = 0; i < argc-1; i++) {
@@ -261,7 +261,7 @@ static int Jim_Command_pathmove(Jim_Interp *interp, int argc, Jim_Obj *const *ar
 
 static int Jim_Command_flush_count(Jim_Interp *interp, int argc, Jim_Obj *const *args)
 {
-       script_debug(interp, "flush_count", argc, args);
+       script_debug(interp, argc, args);
 
        Jim_SetResult(interp, Jim_NewIntObj(interp, jtag_get_flush_queue_count()));
 
@@ -639,6 +639,7 @@ static int jim_newtap_cmd(Jim_GetOptInfo *goi)
 static void jtag_tap_handle_event(struct jtag_tap *tap, enum jtag_event e)
 {
        struct jtag_tap_event_action *jteap;
+       int retval;
 
        for (jteap = tap->event_action; jteap != NULL; jteap = jteap->next) {
                if (jteap->event != e)
@@ -649,7 +650,11 @@ static void jtag_tap_handle_event(struct jtag_tap *tap, enum jtag_event e)
                        tap->dotted_name, e, nvp->name,
                        Jim_GetString(jteap->body, NULL));
 
-               if (Jim_EvalObj(jteap->interp, jteap->body) != JIM_OK) {
+               retval = Jim_EvalObj(jteap->interp, jteap->body);
+               if (retval == JIM_RETURN)
+                       retval = jteap->interp->returnCode;
+
+               if (retval != JIM_OK) {
                        Jim_MakeErrorMessage(jteap->interp);
                        LOG_USER("%s", Jim_GetString(Jim_GetResult(jteap->interp), NULL));
                        continue;
@@ -684,8 +689,9 @@ static int jim_jtag_arp_init(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
        int e = jtag_init_inner(context);
        if (e != ERROR_OK) {
                Jim_Obj *eObj = Jim_NewIntObj(goi.interp, e);
+               Jim_IncrRefCount(eObj);
                Jim_SetResultFormatted(goi.interp, "error: %#s", eObj);
-               Jim_FreeNewObj(goi.interp, eObj);
+               Jim_DecrRefCount(goi.interp, eObj);
                return JIM_ERR;
        }
        return JIM_OK;
@@ -708,8 +714,9 @@ static int jim_jtag_arp_init_reset(Jim_Interp *interp, int argc, Jim_Obj *const
 
        if (e != ERROR_OK) {
                Jim_Obj *eObj = Jim_NewIntObj(goi.interp, e);
+               Jim_IncrRefCount(eObj);
                Jim_SetResultFormatted(goi.interp, "error: %#s", eObj);
-               Jim_FreeNewObj(goi.interp, eObj);
+               Jim_DecrRefCount(goi.interp, eObj);
                return JIM_ERR;
        }
        return JIM_OK;
@@ -960,7 +967,7 @@ COMMAND_HANDLER(handle_scan_chain_command)
        while (tap) {
                uint32_t expected, expected_mask, ii;
 
-               snprintf(expected_id, sizeof expected_id, "0x%08x",
+               snprintf(expected_id, sizeof(expected_id), "0x%08x",
                        (unsigned)((tap->expected_ids_cnt > 0)
                                   ? tap->expected_ids[0]
                                   : 0));
@@ -982,7 +989,7 @@ COMMAND_HANDLER(handle_scan_chain_command)
                        (unsigned int)(expected_mask));
 
                for (ii = 1; ii < tap->expected_ids_cnt; ii++) {
-                       snprintf(expected_id, sizeof expected_id, "0x%08x",
+                       snprintf(expected_id, sizeof(expected_id), "0x%08x",
                                (unsigned) tap->expected_ids[ii]);
                        if (tap->ignore_version)
                                expected_id[2] = '*';
@@ -1054,34 +1061,6 @@ COMMAND_HANDLER(handle_jtag_rclk_command)
        return retval;
 }
 
-COMMAND_HANDLER(handle_jtag_reset_command)
-{
-       if (CMD_ARGC != 2)
-               return ERROR_COMMAND_SYNTAX_ERROR;
-
-       int trst = -1;
-       if (CMD_ARGV[0][0] == '1')
-               trst = 1;
-       else if (CMD_ARGV[0][0] == '0')
-               trst = 0;
-       else
-               return ERROR_COMMAND_SYNTAX_ERROR;
-
-       int srst = -1;
-       if (CMD_ARGV[1][0] == '1')
-               srst = 1;
-       else if (CMD_ARGV[1][0] == '0')
-               srst = 0;
-       else
-               return ERROR_COMMAND_SYNTAX_ERROR;
-
-       if (adapter_init(CMD_CTX) != ERROR_OK)
-               return ERROR_JTAG_INIT_FAILED;
-
-       jtag_add_reset(trst, srst);
-       return jtag_execute_queue();
-}
-
 COMMAND_HANDLER(handle_runtest_command)
 {
        if (CMD_ARGC != 1)
@@ -1152,14 +1131,19 @@ COMMAND_HANDLER(handle_irscan_command)
 
                        return ERROR_FAIL;
                }
-               int field_size = tap->ir_length;
-               fields[i].num_bits = field_size;
-               uint8_t *v = malloc(DIV_ROUND_UP(field_size, 8));
-
                uint64_t value;
                retval = parse_u64(CMD_ARGV[i * 2 + 1], &value);
                if (ERROR_OK != retval)
                        goto error_return;
+
+               int field_size = tap->ir_length;
+               fields[i].num_bits = field_size;
+               uint8_t *v = calloc(1, DIV_ROUND_UP(field_size, 8));
+               if (!v) {
+                       LOG_ERROR("Out of memory");
+                       goto error_return;
+               }
+
                buf_set_u64(v, 0, field_size, value);
                fields[i].out_value = v;
                fields[i].in_value = NULL;
@@ -1326,14 +1310,6 @@ static const struct command_registration jtag_command_handlers[] = {
                .help = "print current scan chain configuration",
                .usage = ""
        },
-       {
-               .name = "jtag_reset",
-               .handler = handle_jtag_reset_command,
-               .mode = COMMAND_EXEC,
-               .help = "Set reset line values.  Value '1' is active, "
-                       "value '0' is inactive.",
-               .usage = "trst_active srst_active",
-       },
        {
                .name = "runtest",
                .handler = handle_runtest_command,
@@ -1345,7 +1321,7 @@ static const struct command_registration jtag_command_handlers[] = {
                .name = "irscan",
                .handler = handle_irscan_command,
                .mode = COMMAND_EXEC,
-               .help = "Execute Instruction Register (DR) scan.  The "
+               .help = "Execute Instruction Register (IR) scan.  The "
                        "specified opcodes are put into each TAP's IR, "
                        "and other TAPs are put in BYPASS.",
                .usage = "[tap_name instruction]* ['-endstate' state_name]",