X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fpld%2Fvirtex2.c;h=8f4fee29756b165b83941171455089d6294fb47f;hb=f499341558dce8a41086f5439ca0458f4ea1fbfd;hp=26f0f1fef3919ae860d4ec77541f76facc292eed;hpb=b6f268c113521557889aa253e2dd7218507e20d9;p=openocd.git diff --git a/src/pld/virtex2.c b/src/pld/virtex2.c index 26f0f1fef3..8f4fee2975 100644 --- a/src/pld/virtex2.c +++ b/src/pld/virtex2.c @@ -22,14 +22,9 @@ #endif #include "virtex2.h" - -#include "pld.h" #include "xilinx_bit.h" -#include "command.h" -#include "log.h" -#include "jtag.h" +#include "pld.h" -#include int virtex2_register_commands(struct command_context_s *cmd_ctx); int virtex2_pld_device_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct pld_device_s *pld_device); @@ -56,14 +51,14 @@ int virtex2_set_instr(jtag_tap_t *tap, u32 new_instr) field.num_bits = tap->ir_length; field.out_value = calloc(CEIL(field.num_bits, 8), 1); buf_set_u32(field.out_value, 0, field.num_bits, new_instr); - field.out_mask = NULL; + field.in_value = NULL; - field.in_check_value = NULL; - field.in_check_mask = NULL; - field.in_handler = NULL; - field.in_handler_priv = NULL; - jtag_add_ir_scan(1, &field, TAP_IDLE); + + + + + jtag_add_ir_scan(1, &field, jtag_add_end_state(TAP_IDLE)); free(field.out_value); } @@ -83,12 +78,7 @@ int virtex2_send_32(struct pld_device_s *pld_device, int num_words, u32 *words) scan_field.tap = virtex2_info->tap; scan_field.num_bits = num_words * 32; scan_field.out_value = values; - scan_field.out_mask = NULL; scan_field.in_value = NULL; - scan_field.in_check_value = NULL; - scan_field.in_check_mask = NULL; - scan_field.in_handler = NULL; - scan_field.in_handler_priv = NULL; for (i = 0; i < num_words; i++) buf_set_u32(values + 4 * i, 0, 32, flip_u32(*words++, 32)); @@ -102,11 +92,9 @@ int virtex2_send_32(struct pld_device_s *pld_device, int num_words, u32 *words) return ERROR_OK; } -int virtex2_jtag_buf_to_u32(u8 *in_buf, void *priv, struct scan_field_s *field) +static __inline__ void virtexflip32(u8 *in) { - u32 *dest = priv; - *dest = flip_u32(le_to_h_u32(in_buf), 32); - return ERROR_OK; + *((u32 *)in)=flip_u32(le_to_h_u32(in), 32); } int virtex2_receive_32(struct pld_device_s *pld_device, int num_words, u32 *words) @@ -117,18 +105,19 @@ int virtex2_receive_32(struct pld_device_s *pld_device, int num_words, u32 *word scan_field.tap = virtex2_info->tap; scan_field.num_bits = 32; scan_field.out_value = NULL; - scan_field.out_mask = NULL; scan_field.in_value = NULL; - scan_field.in_check_value = NULL; - scan_field.in_check_mask = NULL; - scan_field.in_handler = virtex2_jtag_buf_to_u32; /* deprecated! invoke this from user code! */ virtex2_set_instr(virtex2_info->tap, 0x4); /* CFG_OUT */ while (num_words--) { - scan_field.in_handler_priv = words++; + scan_field.in_value = (u8 *)words; + jtag_add_dr_scan(1, &scan_field, TAP_DRPAUSE); + + jtag_add_callback(virtexflip32, (u8 *)words); + + words++;; } return ERROR_OK; @@ -166,12 +155,12 @@ int virtex2_load(struct pld_device_s *pld_device, char *filename) scan_field_t field; field.tap = virtex2_info->tap; - field.out_mask = NULL; + field.in_value = NULL; - field.in_check_value = NULL; - field.in_check_mask = NULL; - field.in_handler = NULL; - field.in_handler_priv = NULL; + + + + if ((retval = xilinx_read_bit_file(&bit_file, filename)) != ERROR_OK) return retval; @@ -197,11 +186,11 @@ int virtex2_load(struct pld_device_s *pld_device, char *filename) jtag_add_end_state(TAP_IDLE); virtex2_set_instr(virtex2_info->tap, 0xc); /* JSTART */ - jtag_add_runtest(13, TAP_IDLE); + jtag_add_runtest(13, jtag_add_end_state(TAP_IDLE)); virtex2_set_instr(virtex2_info->tap, 0x3f); /* BYPASS */ virtex2_set_instr(virtex2_info->tap, 0x3f); /* BYPASS */ virtex2_set_instr(virtex2_info->tap, 0xc); /* JSTART */ - jtag_add_runtest(13, TAP_IDLE); + jtag_add_runtest(13, jtag_add_end_state(TAP_IDLE)); virtex2_set_instr(virtex2_info->tap, 0x3f); /* BYPASS */ jtag_execute_queue();