X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fpld%2Fvirtex2.c;h=f8e13df602d430f59fbaa808ebf63dfd680b0fe7;hb=d86100261252805215282b17d214c48021ef7f79;hp=d9c26760c87fc2d39718ddbeeca636233eebb283;hpb=0b6c73ae8398964268d2df6f87347d9c59b04858;p=openocd.git diff --git a/src/pld/virtex2.c b/src/pld/virtex2.c index d9c26760c8..f8e13df602 100644 --- a/src/pld/virtex2.c +++ b/src/pld/virtex2.c @@ -58,7 +58,7 @@ int virtex2_set_instr(jtag_tap_t *tap, u32 new_instr) - jtag_add_ir_scan(1, &field, TAP_IDLE); + jtag_add_ir_scan(1, &field, jtag_set_end_state(TAP_IDLE)); free(field.out_value); } @@ -85,13 +85,17 @@ int virtex2_send_32(struct pld_device_s *pld_device, int num_words, u32 *words) virtex2_set_instr(virtex2_info->tap, 0x5); /* CFG_IN */ - jtag_add_dr_scan(1, &scan_field, TAP_DRPAUSE); + jtag_add_dr_scan(1, &scan_field, jtag_set_end_state(TAP_DRPAUSE)); free(values); return ERROR_OK; } +static __inline__ void virtexflip32(u8 *in) +{ + *((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) { @@ -101,16 +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; - u8 tmp[4]; - scan_field.in_value = tmp; + scan_field.in_value = NULL; virtex2_set_instr(virtex2_info->tap, 0x4); /* CFG_OUT */ while (num_words--) { - jtag_add_dr_scan_now(1, &scan_field, TAP_DRPAUSE); + scan_field.in_value = (u8 *)words; + + jtag_add_dr_scan(1, &scan_field, jtag_set_end_state(TAP_DRPAUSE)); + + jtag_add_callback(virtexflip32, (u8 *)words); - *words++=flip_u32(le_to_h_u32(tmp), 32); + words++;; } return ERROR_OK; @@ -158,7 +165,7 @@ int virtex2_load(struct pld_device_s *pld_device, char *filename) if ((retval = xilinx_read_bit_file(&bit_file, filename)) != ERROR_OK) return retval; - jtag_add_end_state(TAP_IDLE); + jtag_set_end_state(TAP_IDLE); virtex2_set_instr(virtex2_info->tap, 0xb); /* JPROG_B */ jtag_execute_queue(); jtag_add_sleep(1000); @@ -172,18 +179,18 @@ int virtex2_load(struct pld_device_s *pld_device, char *filename) field.num_bits = bit_file.length * 8; field.out_value = bit_file.data; - jtag_add_dr_scan(1, &field, TAP_DRPAUSE); + jtag_add_dr_scan(1, &field, jtag_set_end_state(TAP_DRPAUSE)); jtag_execute_queue(); jtag_add_tlr(); - jtag_add_end_state(TAP_IDLE); + jtag_set_end_state(TAP_IDLE); virtex2_set_instr(virtex2_info->tap, 0xc); /* JSTART */ - jtag_add_runtest(13, TAP_IDLE); + jtag_add_runtest(13, jtag_set_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_set_end_state(TAP_IDLE)); virtex2_set_instr(virtex2_info->tap, 0x3f); /* BYPASS */ jtag_execute_queue();