swd: get rid of jtag queue to assert/deassert srst
[fw/openocd] / src / jtag / drivers / kitprog.c
index e3ad84d30c7c973bf2deb8a13720bf7801a51457..dcca8a0e832a2729070def7802fd5c7a2305482a 100644 (file)
@@ -819,11 +819,16 @@ static void kitprog_swd_queue_cmd(uint8_t cmd, uint32_t *dst, uint32_t data)
 
 /*************** jtag lowlevel functions ********************/
 
-static void kitprog_execute_reset(struct jtag_command *cmd)
+static int kitprog_reset(int trst, int srst)
 {
        int retval = ERROR_OK;
 
-       if (cmd->cmd.reset->srst == 1) {
+       if (trst == 1) {
+               LOG_ERROR("KitProg: Interface has no TRST");
+               return ERROR_FAIL;
+       }
+
+       if (srst == 1) {
                retval = kitprog_reset_target();
                /* Since the previous command also disables SWCLK output, we need to send an
                 * SWD bus reset command to re-enable it. For some reason, running
@@ -836,6 +841,7 @@ static void kitprog_execute_reset(struct jtag_command *cmd)
 
        if (retval != ERROR_OK)
                LOG_ERROR("KitProg: Interface reset failed");
+       return retval;
 }
 
 static void kitprog_execute_sleep(struct jtag_command *cmd)
@@ -846,9 +852,6 @@ static void kitprog_execute_sleep(struct jtag_command *cmd)
 static void kitprog_execute_command(struct jtag_command *cmd)
 {
        switch (cmd->type) {
-               case JTAG_RESET:
-                       kitprog_execute_reset(cmd);
-                       break;
                case JTAG_SLEEP:
                        kitprog_execute_sleep(cmd);
                        break;
@@ -968,5 +971,6 @@ struct jtag_interface kitprog_interface = {
        .swd = &kitprog_swd,
        .execute_queue = kitprog_execute_queue,
        .init = kitprog_init,
-       .quit = kitprog_quit
+       .quit = kitprog_quit,
+       .reset = kitprog_reset,
 };