diff options
Diffstat (limited to 'openocd')
-rw-r--r-- | openocd/src/jtag/drivers/cmsis_dap_usb.c | 18 | ||||
-rw-r--r-- | openocd/src/jtag/drivers/xds110.c | 17 | ||||
-rw-r--r-- | openocd/src/target/startup.tcl | 9 | ||||
-rw-r--r-- | openocd/tcl/target/ti_msp432.cfg | 5 |
4 files changed, 34 insertions, 15 deletions
diff --git a/openocd/src/jtag/drivers/cmsis_dap_usb.c b/openocd/src/jtag/drivers/cmsis_dap_usb.c index dd37522..d1a9857 100644 --- a/openocd/src/jtag/drivers/cmsis_dap_usb.c +++ b/openocd/src/jtag/drivers/cmsis_dap_usb.c | |||
@@ -1003,11 +1003,25 @@ static void cmsis_dap_execute_reset(struct jtag_command *cmd) | |||
1003 | * there's no way to tristate them */ | 1003 | * there's no way to tristate them */ |
1004 | uint8_t pins = 0; | 1004 | uint8_t pins = 0; |
1005 | 1005 | ||
1006 | if (!cmd->cmd.reset->srst) | 1006 | static bool first = true; |
1007 | pins |= SWJ_PIN_SRST; | 1007 | |
1008 | if (!cmd->cmd.reset->trst) | 1008 | if (!cmd->cmd.reset->trst) |
1009 | pins |= SWJ_PIN_TRST; | 1009 | pins |= SWJ_PIN_TRST; |
1010 | 1010 | ||
1011 | if (!cmd->cmd.reset->srst) | ||
1012 | pins |= SWJ_PIN_SRST; | ||
1013 | else if (swd_mode) { | ||
1014 | /* Always assert nSRST in SWD mode */ | ||
1015 | /* pin = 0 */ | ||
1016 | } else if (first) { | ||
1017 | /* Assert nSRST in JTAG mode on first call */ | ||
1018 | first = false; | ||
1019 | } else { | ||
1020 | /* Do not assert nSRST in JTAG mode on second call */ | ||
1021 | pins |= SWJ_PIN_SRST; | ||
1022 | first = true; | ||
1023 | } | ||
1024 | |||
1011 | int retval = cmsis_dap_cmd_DAP_SWJ_Pins(pins, | 1025 | int retval = cmsis_dap_cmd_DAP_SWJ_Pins(pins, |
1012 | SWJ_PIN_TRST | SWJ_PIN_SRST, 0, NULL); | 1026 | SWJ_PIN_TRST | SWJ_PIN_SRST, 0, NULL); |
1013 | if (retval != ERROR_OK) | 1027 | if (retval != ERROR_OK) |
diff --git a/openocd/src/jtag/drivers/xds110.c b/openocd/src/jtag/drivers/xds110.c index 4a20f94..fe975a7 100644 --- a/openocd/src/jtag/drivers/xds110.c +++ b/openocd/src/jtag/drivers/xds110.c | |||
@@ -1594,6 +1594,8 @@ static void xds110_execute_reset(struct jtag_command *cmd) | |||
1594 | char trst; | 1594 | char trst; |
1595 | char srst; | 1595 | char srst; |
1596 | 1596 | ||
1597 | static bool first = true; | ||
1598 | |||
1597 | if (cmd->cmd.reset->trst != -1) { | 1599 | if (cmd->cmd.reset->trst != -1) { |
1598 | if (cmd->cmd.reset->trst == 0) { | 1600 | if (cmd->cmd.reset->trst == 0) { |
1599 | /* Deassert nTRST (active low) */ | 1601 | /* Deassert nTRST (active low) */ |
@@ -1610,8 +1612,19 @@ static void xds110_execute_reset(struct jtag_command *cmd) | |||
1610 | /* Deassert nSRST (active low) */ | 1612 | /* Deassert nSRST (active low) */ |
1611 | srst = 1; | 1613 | srst = 1; |
1612 | } else { | 1614 | } else { |
1613 | /* Assert nSRST (active low) */ | 1615 | /* TODO: Workaround for double nSRST reset in JTAG mode */ |
1614 | srst = 0; | 1616 | if (xds110.is_swd_mode) { |
1617 | /* Always assert nSRST in SWD mode (active low) */ | ||
1618 | srst = 0; | ||
1619 | } else if (first) { | ||
1620 | /* Assert nSRST first time in JTAG mode (active low) */ | ||
1621 | srst = 0; | ||
1622 | first = false; | ||
1623 | } else { | ||
1624 | /* Do not assert nSRST second time in JTAG mode (active low) */ | ||
1625 | srst = 1; | ||
1626 | first = true; | ||
1627 | } | ||
1615 | } | 1628 | } |
1616 | (void)xds_set_srst(srst); | 1629 | (void)xds_set_srst(srst); |
1617 | 1630 | ||
diff --git a/openocd/src/target/startup.tcl b/openocd/src/target/startup.tcl index 6290b3a..247eff7 100644 --- a/openocd/src/target/startup.tcl +++ b/openocd/src/target/startup.tcl | |||
@@ -80,14 +80,7 @@ proc ocd_process_reset_inner { MODE } { | |||
80 | foreach t $targets { | 80 | foreach t $targets { |
81 | # C code needs to know if we expect to 'halt' | 81 | # C code needs to know if we expect to 'halt' |
82 | if {![using_jtag] || [jtag tapisenabled [$t cget -chain-position]]} { | 82 | if {![using_jtag] || [jtag tapisenabled [$t cget -chain-position]]} { |
83 | # TODO: Workaround for double nSRST pulse issue. The call to | 83 | $t arp_reset assert $halt |
84 | # init_reset above will assert and deassert nSRST. But the | ||
85 | # steps to examine and restore debug connection only happen just | ||
86 | # after that point. This arp_reset call will assert nSRST again | ||
87 | # but examination will not happen again. Also, some of the events | ||
88 | # that fire need the target scan chain to be examined. | ||
89 | # So comment out this second nSRST assert as a quick workaround. | ||
90 | # $t arp_reset assert $halt | ||
91 | } | 84 | } |
92 | } | 85 | } |
93 | foreach t $targets { | 86 | foreach t $targets { |
diff --git a/openocd/tcl/target/ti_msp432.cfg b/openocd/tcl/target/ti_msp432.cfg index 523371d..47ae8b7 100644 --- a/openocd/tcl/target/ti_msp432.cfg +++ b/openocd/tcl/target/ti_msp432.cfg | |||
@@ -46,6 +46,5 @@ $_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE | |||
46 | set _FLASHNAME $_CHIPNAME.flash | 46 | set _FLASHNAME $_CHIPNAME.flash |
47 | flash bank $_FLASHNAME msp432 0 0 0 0 $_TARGETNAME | 47 | flash bank $_FLASHNAME msp432 0 0 0 0 $_TARGETNAME |
48 | 48 | ||
49 | if { ![using_hla] } { | 49 | reset_config srst_only |
50 | cortex_m reset_config sysresetreq | 50 | adapter_nsrst_delay 100 |
51 | } | ||