I'm trying to figure out why bitbang fails and ft2232 reportedly works with arm11.
The attached patch makes a direct transition from shift to the end state rather than going via pause, which should line the bitbang driver up more closely with ft2232. To me this seems like a sensible change and is in line with the upcoming shortening of transitions. Comments? -- Øyvind Harboe Embedded software and hardware consulting services http://consulting.zylin.com
Index: src/jtag/bitbang.c =================================================================== --- src/jtag/bitbang.c (revision 1606) +++ src/jtag/bitbang.c (working copy) @@ -84,12 +84,12 @@ } } -static void bitbang_state_move(void) +static void bitbang_state_move(int skip) { int i=0, tms=0; u8 tms_scan = tap_get_tms_path(tap_get_state(), tap_get_end_state()); - for (i = 0; i < 7; i++) + for (i = skip; i < 7; i++) { tms = (tms_scan >> i) & 1; bitbang_interface->write(0, tms, 0); @@ -146,7 +146,7 @@ if (tap_get_state() != TAP_IDLE) { bitbang_end_state(TAP_IDLE); - bitbang_state_move(); + bitbang_state_move(0); } /* execute num_cycles */ @@ -160,7 +160,7 @@ /* finish in end_state */ bitbang_end_state(saved_end_state); if (tap_get_state() != tap_get_end_state()) - bitbang_state_move(); + bitbang_state_move(0); } @@ -191,7 +191,7 @@ else bitbang_end_state(TAP_DRSHIFT); - bitbang_state_move(); + bitbang_state_move(0); bitbang_end_state(saved_end_state); } @@ -227,22 +227,8 @@ } } - /* TAP_DRSHIFT & TAP_IRSHIFT are illegal end states, so we always transition to the pause - * state which is a legal stable state from which statemove will work. - * - * Exit1 -> Pause - */ - bitbang_interface->write(0, 0, 0); - bitbang_interface->write(1, 0, 0); - bitbang_interface->write(CLOCK_IDLE(), 0, 0); - - if (ir_scan) - tap_set_state(TAP_IRPAUSE); - else - tap_set_state(TAP_DRPAUSE); - if (tap_get_state() != tap_get_end_state()) - bitbang_state_move(); + bitbang_state_move(1); } int bitbang_execute_queue(void) @@ -310,7 +296,7 @@ #endif if (cmd->cmd.statemove->end_state != TAP_INVALID) bitbang_end_state(cmd->cmd.statemove->end_state); - bitbang_state_move(); + bitbang_state_move(0); break; case JTAG_PATHMOVE: #ifdef _DEBUG_JTAG_IO_
_______________________________________________ Openocd-development mailing list Openocd-development@lists.berlios.de https://lists.berlios.de/mailman/listinfo/openocd-development