nulink: add minimal support for Nu-Link2
[fw/openocd] / src / jtag / core.c
index 111b122d95ef70f9cb94ca5c0e6754ef23110d5c..1d424b2e423fd1b47c179830afcaa124285c5dd1 100644 (file)
@@ -842,6 +842,7 @@ void jtag_add_reset(int req_tlr_or_trst, int req_srst)
        if (trst_with_tlr) {
                LOG_DEBUG("JTAG reset with TLR instead of TRST");
                jtag_add_tlr();
+               jtag_execute_queue();
 
        } else if (jtag_trst != new_trst) {
                jtag_trst = new_trst;
@@ -1232,7 +1233,7 @@ static int jtag_examine_chain(void)
        /* Add room for end-of-chain marker. */
        max_taps++;
 
-       uint8_t *idcode_buffer = malloc(max_taps * 4);
+       uint8_t *idcode_buffer = calloc(4, max_taps);
        if (idcode_buffer == NULL)
                return ERROR_JTAG_INIT_FAILED;
 
@@ -1268,7 +1269,7 @@ static int jtag_examine_chain(void)
                         * REVISIT create a jtag_alloc(chip, tap) routine, and
                         * share it with jim_newtap_cmd().
                         */
-                       tap = calloc(1, sizeof *tap);
+                       tap = calloc(1, sizeof(*tap));
                        if (!tap) {
                                retval = ERROR_FAIL;
                                goto out;
@@ -1405,7 +1406,7 @@ static int jtag_validate_ircapture(void)
                                        && tap->ir_length < JTAG_IRLEN_MAX) {
                                tap->ir_length++;
                        }
-                       LOG_WARNING("AUTO %s - use \"jtag newtap " "%s %s -irlen %d "
+                       LOG_WARNING("AUTO %s - use \"jtag newtap %s %s -irlen %d "
                                        "-expected-id 0x%08" PRIx32 "\"",
                                        tap->dotted_name, tap->chip, tap->tapname, tap->ir_length, tap->idcode);
                }
@@ -1519,9 +1520,9 @@ int adapter_init(struct command_context *cmd_ctx)
                return ERROR_OK;
 
        if (!adapter_driver) {
-               /* nothing was previously specified by "interface" command */
+               /* nothing was previously specified by "adapter driver" command */
                LOG_ERROR("Debug Adapter has to be specified, "
-                       "see \"interface\" command");
+                       "see \"adapter driver\" command");
                return ERROR_JTAG_INVALID_INTERFACE;
        }
 
@@ -1538,7 +1539,7 @@ int adapter_init(struct command_context *cmd_ctx)
 
        if (CLOCK_MODE_UNSELECTED == clock_mode) {
                LOG_ERROR("An adapter speed is not selected in the init script."
-                       " Insert a call to adapter_khz or jtag_rclk to proceed.");
+                       " Insert a call to \"adapter speed\" or \"jtag_rclk\" to proceed.");
                return ERROR_JTAG_INIT_FAILED;
        }
 
@@ -1871,7 +1872,7 @@ void jtag_set_verify(bool enable)
        jtag_verify = enable;
 }
 
-bool jtag_will_verify()
+bool jtag_will_verify(void)
 {
        return jtag_verify;
 }
@@ -1881,7 +1882,7 @@ void jtag_set_verify_capture_ir(bool enable)
        jtag_verify_capture_ir = enable;
 }
 
-bool jtag_will_verify_capture_ir()
+bool jtag_will_verify_capture_ir(void)
 {
        return jtag_verify_capture_ir;
 }
@@ -2019,8 +2020,15 @@ int adapter_resets(int trst, int srst)
 
                /* adapters without trst signal will eventually use tlr sequence */
                jtag_add_reset(trst, srst);
+               /*
+                * The jtag queue is still used for reset by some adapter. Flush it!
+                * FIXME: To be removed when all adapter drivers will be updated!
+                */
+               jtag_execute_queue();
                return ERROR_OK;
-       } else if (transport_is_swd() || transport_is_hla()) {
+       } else if (transport_is_swd() || transport_is_hla() ||
+                          transport_is_dapdirect_swd() || transport_is_dapdirect_jtag() ||
+                          transport_is_swim()) {
                if (trst == TRST_ASSERT) {
                        LOG_ERROR("transport %s has no trst signal",
                                get_current_transport()->name);
@@ -2053,7 +2061,8 @@ int adapter_assert_reset(void)
                        jtag_add_reset(0, 1);
                return ERROR_OK;
        } else if (transport_is_swd() || transport_is_hla() ||
-                          transport_is_dapdirect_jtag() || transport_is_dapdirect_swd())
+                          transport_is_dapdirect_jtag() || transport_is_dapdirect_swd() ||
+                          transport_is_swim())
                return adapter_system_reset(1);
        else if (get_current_transport() != NULL)
                LOG_ERROR("reset is not supported on %s",
@@ -2069,7 +2078,8 @@ int adapter_deassert_reset(void)
                jtag_add_reset(0, 0);
                return ERROR_OK;
        } else if (transport_is_swd() || transport_is_hla() ||
-                        transport_is_dapdirect_jtag() || transport_is_dapdirect_swd())
+                          transport_is_dapdirect_jtag() || transport_is_dapdirect_swd() ||
+                          transport_is_swim())
                return adapter_system_reset(0);
        else if (get_current_transport() != NULL)
                LOG_ERROR("reset is not supported on %s",