stlink: enable connect under reset
Currently if the target supports srst_nogate we wait until target assert_reset until we get a chance to assert the srst. However sometimes we will not get this far if the target has already failed the initial scan. This has been tested on stm32. Change-Id: I2c4486942a011534d3e2044788563669bf457b60 Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk> Reviewed-on: http://openocd.zylin.com/972 Reviewed-by: Paul Fertser <fercerpav@gmail.com> Tested-by: jenkins Reviewed-by: Freddie Chopin <freddie.chopin@gmail.com>
This commit is contained in:
parent
67a848424b
commit
2d75ff3151
|
@ -43,7 +43,11 @@ int stlink_interface_open(enum stlink_transports tr)
|
||||||
/* set transport mode */
|
/* set transport mode */
|
||||||
stlink_if.param.transport = tr;
|
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)
|
int stlink_interface_init_target(struct target *t)
|
||||||
|
@ -127,6 +131,21 @@ static int stlink_interface_execute_queue(void)
|
||||||
return ERROR_OK;
|
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)
|
COMMAND_HANDLER(stlink_interface_handle_device_desc_command)
|
||||||
{
|
{
|
||||||
LOG_DEBUG("stlink_interface_handle_device_desc_command");
|
LOG_DEBUG("stlink_interface_handle_device_desc_command");
|
||||||
|
|
|
@ -56,5 +56,6 @@ struct stlink_interface_s {
|
||||||
int stlink_interface_open(enum stlink_transports tr);
|
int stlink_interface_open(enum stlink_transports tr);
|
||||||
/** */
|
/** */
|
||||||
int stlink_interface_init_target(struct target *t);
|
int stlink_interface_init_target(struct target *t);
|
||||||
|
int stlink_interface_init_reset(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -39,6 +39,11 @@ COMMAND_HANDLER(stlink_transport_jtag_command)
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
COMMAND_HANDLER(stlink_transport_reset_command)
|
||||||
|
{
|
||||||
|
return stlink_interface_init_reset();
|
||||||
|
}
|
||||||
|
|
||||||
static const struct command_registration
|
static const struct command_registration
|
||||||
stlink_transport_stlink_subcommand_handlers[] = {
|
stlink_transport_stlink_subcommand_handlers[] = {
|
||||||
{
|
{
|
||||||
|
@ -71,7 +76,7 @@ stlink_transport_jtag_subcommand_handlers[] = {
|
||||||
{
|
{
|
||||||
.name = "arp_init-reset",
|
.name = "arp_init-reset",
|
||||||
.mode = COMMAND_ANY,
|
.mode = COMMAND_ANY,
|
||||||
.handler = stlink_transport_jtag_command,
|
.handler = stlink_transport_reset_command,
|
||||||
.usage = ""
|
.usage = ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue