diff options
author | mifi <mifi@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2009-04-19 19:15:09 +0000 |
---|---|---|
committer | mifi <mifi@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2009-04-19 19:15:09 +0000 |
commit | 7989000e0969c1ccf69acbc3ce649a020bc1ee66 (patch) | |
tree | c56d273d5e61204cae9e6a1ec940a85edcfbb3aa /src | |
parent | 486799e65b1d2496056e898c80e659cdf25a0b6a (diff) | |
download | openocd+libswd-7989000e0969c1ccf69acbc3ce649a020bc1ee66.tar.gz openocd+libswd-7989000e0969c1ccf69acbc3ce649a020bc1ee66.tar.bz2 openocd+libswd-7989000e0969c1ccf69acbc3ce649a020bc1ee66.tar.xz openocd+libswd-7989000e0969c1ccf69acbc3ce649a020bc1ee66.zip |
Partially fix USBprog and JLink adapters on XScale target
Thanks to Peter Denison <openwrt(at)marshadder.org>
git-svn-id: svn://svn.berlios.de/openocd/trunk@1471 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src')
-rw-r--r-- | src/jtag/jlink.c | 5 | ||||
-rw-r--r-- | src/jtag/usbprog.c | 14 |
2 files changed, 16 insertions, 3 deletions
diff --git a/src/jtag/jlink.c b/src/jtag/jlink.c index 0c5f40dd..4e41ec47 100644 --- a/src/jtag/jlink.c +++ b/src/jtag/jlink.c @@ -433,7 +433,10 @@ void jlink_scan(int ir_scan, enum scan_type type, u8 *buffer, int scan_size, sca /* Move to appropriate scan state */ jlink_end_state(ir_scan ? TAP_IRSHIFT : TAP_DRSHIFT); - jlink_state_move(); + /* Only move if we're not already there */ + if (tap_get_state() != tap_get_end_state()) + jlink_state_move(); + jlink_end_state(saved_end_state); /* Scan */ diff --git a/src/jtag/usbprog.c b/src/jtag/usbprog.c index 81666885..e22c7e03 100644 --- a/src/jtag/usbprog.c +++ b/src/jtag/usbprog.c @@ -265,6 +265,10 @@ void usbprog_path_move(pathmove_command_t *cmd) int num_states = cmd->num_states; int state_count; + /* There may be queued transitions, and before following a specified + path, we must flush those queued transitions */ + usbprog_jtag_tms_send(usbprog_jtag_handle); + state_count = 0; while (num_states) { @@ -323,6 +327,10 @@ void usbprog_runtest(int num_cycles) usbprog_write(0, 0, 0); } +#ifdef _DEBUG_JTAG_IO_ + LOG_DEBUG("runtest: cur_state %s end_state %s", tap_state_name(tap_get_state()), tap_state_name(tap_get_end_state())); +#endif + /* finish in end_state */ /* usbprog_end_state(saved_end_state); @@ -340,9 +348,10 @@ void usbprog_scan(int ir_scan, enum scan_type type, u8 *buffer, int scan_size) else usbprog_end_state(TAP_DRSHIFT); - /* usbprog_jtag_tms_send(usbprog_jtag_handle); */ + /* Only move if we're not already there */ + if (tap_get_state() != tap_get_end_state()) + usbprog_state_move(); - usbprog_state_move(); usbprog_end_state(saved_end_state); usbprog_jtag_tms_send(usbprog_jtag_handle); @@ -358,6 +367,7 @@ void usbprog_scan(int ir_scan, enum scan_type type, u8 *buffer, int scan_size) } f(usbprog_jtag_handle, (char *)buffer, scan_size); + /* The adapter does the transition to PAUSE internally */ if (ir_scan) tap_set_state(TAP_IRPAUSE); else |