/* set transport mode */
stlink_if.param.transport = tr;
- return stlink_if.layout->open(&stlink_if);
+ int result = stlink_if.layout->open(&stlink_if);
+ if (result != ERROR_OK)
+ return result;
+
+ return stlink_interface_init_reset();
}
int stlink_interface_init_target(struct target *t)
return ERROR_OK;
}
+int stlink_interface_init_reset(void)
+{
+ enum reset_types jtag_reset_config = jtag_get_reset_config();
+
+ if (jtag_reset_config & RESET_CNCT_UNDER_SRST) {
+ if (jtag_reset_config & RESET_SRST_NO_GATING) {
+ jtag_add_reset(0, 1);
+ stlink_if.layout->api->assert_srst(stlink_if.fd, 0);
+ } else
+ LOG_WARNING("\'srst_nogate\' reset_config option is required");
+ }
+
+ return ERROR_OK;
+}
+
COMMAND_HANDLER(stlink_interface_handle_device_desc_command)
{
LOG_DEBUG("stlink_interface_handle_device_desc_command");
return ERROR_OK;
}
+COMMAND_HANDLER(stlink_transport_reset_command)
+{
+ return stlink_interface_init_reset();
+}
+
static const struct command_registration
stlink_transport_stlink_subcommand_handlers[] = {
{
{
.name = "arp_init-reset",
.mode = COMMAND_ANY,
- .handler = stlink_transport_jtag_command,
+ .handler = stlink_transport_reset_command,
.usage = ""
},
{