diff --git a/src/xsvf/xsvf.c b/src/xsvf/xsvf.c index 24a14de72..0e3152daa 100644 --- a/src/xsvf/xsvf.c +++ b/src/xsvf/xsvf.c @@ -501,16 +501,18 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha field.tap = tap; field.num_bits = xsdrsize; field.out_value = dr_out_buf; - - field.in_value = NULL; - - jtag_set_check_value(&field, dr_in_buf, dr_in_mask, NULL); + field.in_value = calloc(CEIL(field.num_bits, 8), 1); if (tap == NULL) jtag_add_plain_dr_scan(1, &field, TAP_DRPAUSE); else jtag_add_dr_scan(1, &field, TAP_DRPAUSE); + jtag_check_value_mask(&field, dr_in_buf, dr_in_mask); + + free(field.in_value); + + /* LOG_DEBUG("FLUSHING QUEUE"); */ result = jtag_execute_queue(); if (result == ERROR_OK) @@ -713,10 +715,10 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha field.tap = tap; field.num_bits = bitcount; field.out_value = ir_buf; - + field.in_value = NULL; - - + + field.in_handler = NULL; if (tap == NULL) @@ -944,18 +946,21 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha field.tap = tap; field.num_bits = xsdrsize; field.out_value = dr_out_buf; - - field.in_value = NULL; + field.in_value = calloc(CEIL(field.num_bits, 8), 1); if (attempt > 0 && verbose) LOG_USER("LSDR retry %d", attempt); - jtag_set_check_value(&field, dr_in_buf, dr_in_mask, NULL); if (tap == NULL) jtag_add_plain_dr_scan(1, &field, TAP_DRPAUSE); else jtag_add_dr_scan(1, &field, TAP_DRPAUSE); + jtag_check_value_mask(&field, dr_in_buf, dr_in_mask); + + free(field.in_value); + + /* LOG_DEBUG("FLUSHING QUEUE"); */ result = jtag_execute_queue(); if(result == ERROR_OK)