jtag/drivers: fix reset logic handling in OpenJTAG
commitc6e7e48b053c281ef4a9dd50f2d94fa12184a956
authorN S <nlshipp@yahoo.com>
Tue, 23 Jan 2024 05:47:34 +0000 (22 21:47 -0800)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sun, 11 Feb 2024 23:11:00 +0000 (11 23:11 +0000)
treebc14b688e59106b954432e9b8e11fbdd5654e66d
parent7295ddc15c0516a64c9996d2b351accb50175803
jtag/drivers: fix reset logic handling in OpenJTAG

The OpenJTAG driver behaviour always forces a system reset on jtag_init.
The driver was incorrectly assuming that when execute_reset is called
with trst set to 1 - perform a software TAP reset, otherwise perform a
system reset when trst is 0.

The set_state call assumes the that OpenJTAG hardware will perform a
software TLR reset if the target state is TAP_RESET. This is not the
case: the published VHDL will simply find the shortest path to TLR and
not perform a fixed 5 cycle operation with TMS held high.

Fix the code to only perform system resets when srst is 1 in
execute_reset and to force a software TAP reset operation in set_state
when the target state is TAP_RESET.

Change-Id: I7e0f76f8491efefff1ccaeb4b1ae16e722d76df4
Signed-off-by: N S <nlshipp@yahoo.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/8121
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
Tested-by: jenkins
src/jtag/drivers/openjtag.c