X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fjtag%2Fzy1000.c;h=73a40f2ed8c5910b1ec3efd0f11cb1d6e7230100;hb=a5467296097cc0a820da3aad65dcd9de196fc1be;hp=b17780684f02cc3e483859286c6249021f0fa648;hpb=9c9681116885d3b139ed3646892bad42be01876f;p=openocd.git diff --git a/src/jtag/zy1000.c b/src/jtag/zy1000.c index b17780684f..73a40f2ed8 100644 --- a/src/jtag/zy1000.c +++ b/src/jtag/zy1000.c @@ -20,19 +20,16 @@ #include "config.h" #endif - -#include "log.h" -#include "jtag.h" +#define INCLUDE_JTAG_INTERFACE_H +#include "embeddedice.h" +#include "minidriver.h" #include "bitbang.h" -#include "../target/embeddedice.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$" @@ -384,7 +381,6 @@ int zy1000_quit(void) - int interface_jtag_execute_queue(void) { cyg_uint32 empty; @@ -448,7 +444,7 @@ 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; @@ -468,24 +464,6 @@ static __inline void scanFields(int num_fields, scan_field_t *fields, tap_state_ if (fields[i].in_value!=NULL) { inBuffer=fields[i].in_value; - } else if (fields[i].in_handler!=NULL) - { - if (in_buff_size*8expected, tap->expected_mask, NULL); - } else if (jtag_verify_capture_ir) - { - fields[j].in_check_value = tap->expected; - fields[j].in_check_mask = tap->expected_mask; - } - - 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); @@ -604,13 +569,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; } @@ -619,17 +583,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; @@ -638,7 +601,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++) { @@ -646,7 +616,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) @@ -656,25 +626,19 @@ int interface_jtag_add_dr_scan(int num_fields, scan_field_t *fields, tap_state_t tmp.num_bits = 1; tmp.out_value = NULL; tmp.in_value = NULL; - tmp.in_check_value = NULL; - tmp.in_check_mask = NULL; - tmp.in_handler = NULL; - tmp.in_handler_priv = 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; } @@ -723,8 +687,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(); @@ -754,7 +719,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;