X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fjtag%2Fzy1000.c;h=6a4d759219372fe28ad9ca176382402a8fc30285;hb=89e9d86a565820edd56e4a3eecfc0163a6e97b32;hp=ae082e2c476fffa5c03dd0778b701ac8a4d7f723;hpb=57bc9f37c9029f1b481cd50e15676a0f74aa9e92;p=openocd.git diff --git a/src/jtag/zy1000.c b/src/jtag/zy1000.c index ae082e2c47..6a4d759219 100644 --- a/src/jtag/zy1000.c +++ b/src/jtag/zy1000.c @@ -20,19 +20,15 @@ #include "config.h" #endif - -#include "log.h" -#include "jtag.h" -#include "bitbang.h" -#include "../target/embeddedice.h" - +#include "embeddedice.h" +#include "minidriver.h" +#include "interface.h" #include // low level i/o #include -#include -#define ZYLIN_VERSION "1.51" +#define ZYLIN_VERSION "1.52" #define ZYLIN_DATE __DATE__ #define ZYLIN_TIME __TIME__ #define ZYLIN_OPENOCD "$Revision$" @@ -120,7 +116,7 @@ static int zy1000_power_dropout(int *dropout) jtag_interface_t zy1000_interface = { .name = "ZY1000", - .execute_queue = bitbang_execute_queue, + .execute_queue = NULL, .speed = zy1000_speed, .register_commands = zy1000_register_commands, .init = zy1000_init, @@ -131,15 +127,6 @@ jtag_interface_t zy1000_interface = .srst_asserted = zy1000_srst_asserted, }; -bitbang_interface_t zy1000_bitbang = -{ - .read = zy1000_read, - .write = zy1000_write, - .reset = zy1000_reset -}; - - - static void zy1000_write(int tck, int tms, int tdi) { @@ -371,8 +358,6 @@ int zy1000_init(void) zy1000_reset(0, 0); zy1000_speed(jtag_speed); - bitbang_interface = &zy1000_bitbang; - return ERROR_OK; } @@ -384,7 +369,6 @@ int zy1000_quit(void) - int interface_jtag_execute_queue(void) { cyg_uint32 empty; @@ -443,12 +427,7 @@ static void shiftValueInnerFlip(const tap_state_t state, const tap_state_t endSt extern int jtag_check_value(u8 *captured, void *priv); -static void gotoEndState(void) -{ - setCurrentState(cmd_queue_end_state); -} - -static __inline void scanFields(int num_fields, scan_field_t *fields, tap_state_t shiftState, int pause) +static __inline void scanFields(int num_fields, scan_field_t *fields, tap_state_t shiftState, tap_state_t end_state) { int i; int j; @@ -482,10 +461,10 @@ static __inline void scanFields(int num_fields, scan_field_t *fields, tap_state_ { k=32; /* we have more to shift out */ - } else if (pause&&(i == num_fields-1)) + } else if (i == num_fields-1) { /* this was the last to shift out this time */ - pause_state=(shiftState==TAP_DRSHIFT)?TAP_DRPAUSE:TAP_IRPAUSE; + pause_state=end_state; } // we have (num_bits+7)/8 bytes of bits to toggle out. @@ -526,7 +505,7 @@ int interface_jtag_add_end_state(tap_state_t state) } -int interface_jtag_add_ir_scan(int num_fields, scan_field_t *fields, tap_state_t state) +int interface_jtag_add_ir_scan(int num_fields, const scan_field_t *fields, tap_state_t state) { int j; @@ -535,7 +514,14 @@ int interface_jtag_add_ir_scan(int num_fields, scan_field_t *fields, tap_state_t for(tap = jtag_NextEnabledTap(NULL); tap!= NULL; tap=nextTap) { nextTap=jtag_NextEnabledTap(tap); - int pause=(nextTap==NULL); + tap_state_t end_state; + if (nextTap==NULL) + { + end_state = cmd_queue_end_state; + } else + { + end_state = TAP_IRSHIFT; + } int found = 0; @@ -548,7 +534,7 @@ int interface_jtag_add_ir_scan(int num_fields, scan_field_t *fields, tap_state_t { found = 1; - scanFields(1, fields+j, TAP_IRSHIFT, pause); + scanFields(1, fields+j, TAP_IRSHIFT, end_state); /* update device information */ buf_cpy(fields[j].out_value, tap->cur_instr, scan_size); @@ -566,13 +552,12 @@ int interface_jtag_add_ir_scan(int num_fields, scan_field_t *fields, tap_state_t memset(&tmp, 0, sizeof(tmp)); tmp.out_value = ones; tmp.num_bits = scan_size; - scanFields(1, &tmp, TAP_IRSHIFT, pause); + scanFields(1, &tmp, TAP_IRSHIFT, end_state); /* update device information */ buf_cpy(tmp.out_value, tap->cur_instr, scan_size); tap->bypass = 1; } } - gotoEndState(); return ERROR_OK; } @@ -581,17 +566,16 @@ int interface_jtag_add_ir_scan(int num_fields, scan_field_t *fields, tap_state_t -int interface_jtag_add_plain_ir_scan(int num_fields, scan_field_t *fields, tap_state_t state) +int interface_jtag_add_plain_ir_scan(int num_fields, const scan_field_t *fields, tap_state_t state) { - scanFields(num_fields, fields, TAP_IRSHIFT, 1); - gotoEndState(); + scanFields(num_fields, fields, TAP_IRSHIFT, cmd_queue_end_state); return ERROR_OK; } /*extern jtag_command_t **jtag_get_last_command_p(void);*/ -int interface_jtag_add_dr_scan(int num_fields, scan_field_t *fields, tap_state_t state) +int interface_jtag_add_dr_scan(int num_fields, const scan_field_t *fields, tap_state_t state) { int j; @@ -600,7 +584,14 @@ int interface_jtag_add_dr_scan(int num_fields, scan_field_t *fields, tap_state_t { nextTap=jtag_NextEnabledTap(tap); int found=0; - int pause=(nextTap==NULL); + tap_state_t end_state; + if (nextTap==NULL) + { + end_state = cmd_queue_end_state; + } else + { + end_state = TAP_DRSHIFT; + } for (j=0; j < num_fields; j++) { @@ -608,7 +599,7 @@ int interface_jtag_add_dr_scan(int num_fields, scan_field_t *fields, tap_state_t { found = 1; - scanFields(1, fields+j, TAP_DRSHIFT, pause); + scanFields(1, fields+j, TAP_DRSHIFT, end_state); } } if (!found) @@ -619,20 +610,18 @@ int interface_jtag_add_dr_scan(int num_fields, scan_field_t *fields, tap_state_t tmp.out_value = NULL; tmp.in_value = NULL; - scanFields(1, &tmp, TAP_DRSHIFT, pause); + scanFields(1, &tmp, TAP_DRSHIFT, end_state); } else { } } - gotoEndState(); return ERROR_OK; } -int interface_jtag_add_plain_dr_scan(int num_fields, scan_field_t *fields, tap_state_t state) +int interface_jtag_add_plain_dr_scan(int num_fields, const scan_field_t *fields, tap_state_t state) { - scanFields(num_fields, fields, TAP_DRSHIFT, 1); - gotoEndState(); + scanFields(num_fields, fields, TAP_DRSHIFT, cmd_queue_end_state); return ERROR_OK; } @@ -681,8 +670,9 @@ static int zy1000_jtag_add_clocks(int num_cycles, tap_state_t state, tap_state_t /* test manual drive code on any target */ int tms; u8 tms_scan = tap_get_tms_path(t, state); + int tms_count = tap_get_tms_path_len(tap_get_state(), tap_get_end_state()); - for (i = 0; i < 7; i++) + for (i = 0; i < tms_count; i++) { tms = (tms_scan >> i) & 1; waitIdle(); @@ -712,7 +702,7 @@ int interface_jtag_add_sleep(u32 us) return ERROR_OK; } -int interface_jtag_add_pathmove(int num_states, tap_state_t *path) +int interface_jtag_add_pathmove(int num_states, const tap_state_t *path) { int state_count; int tms = 0;