X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Ftarget%2Fmips32_pracc.c;h=5456e8cca27df87495baeee88088c2bf964cf155;hb=675b0170f2752c285de359f235e50a208f7f138a;hp=e97626cb2eb702700935c32ba4740a8beacf33c4;hpb=ba21fec2aa4b5f2e6fc3742a461cdd675cf1138d;p=openocd.git diff --git a/src/target/mips32_pracc.c b/src/target/mips32_pracc.c index e97626cb2e..5456e8cca2 100644 --- a/src/target/mips32_pracc.c +++ b/src/target/mips32_pracc.c @@ -20,9 +20,7 @@ * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * + * along with this program. If not, see . * ***************************************************************************/ /* @@ -88,7 +86,7 @@ struct mips32_pracc_context { static int wait_for_pracc_rw(struct mips_ejtag *ejtag_info, uint32_t *ctrl) { uint32_t ejtag_ctrl; - long long then = timeval_ms(); + int64_t then = timeval_ms(); /* wait for the PrAcc to become "1" */ mips_ejtag_set_instr(ejtag_info, EJTAG_INST_CONTROL); @@ -102,7 +100,7 @@ static int wait_for_pracc_rw(struct mips_ejtag *ejtag_info, uint32_t *ctrl) if (ejtag_ctrl & EJTAG_CTRL_PRACC) break; - int timeout = timeval_ms() - then; + int64_t timeout = timeval_ms() - then; if (timeout > 1000) { LOG_DEBUG("DEBUGMODULE: No memory access in progress!"); return ERROR_JTAG_DEVICE_ERROR; @@ -160,19 +158,22 @@ int mips32_pracc_clean_text_jump(struct mips_ejtag *ejtag_info) return retval; } - if (ejtag_info->mode != 0) /* done, queued mode won't work with lexra cores */ + if (ejtag_info->mode != 0) /* async mode support only for MIPS ... */ return ERROR_OK; - retval = mips32_pracc_read_ctrl_addr(ejtag_info); - if (retval != ERROR_OK) - return retval; - - if (ejtag_info->pa_addr != MIPS32_PRACC_TEXT) { /* LEXRA/BMIPS ?, shift out another NOP */ - mips_ejtag_set_instr(ejtag_info, EJTAG_INST_DATA); - mips_ejtag_drscan_32_out(ejtag_info, MIPS32_NOP); - retval = mips32_pracc_finish(ejtag_info); + for (int i = 0; i != 2; i++) { + retval = mips32_pracc_read_ctrl_addr(ejtag_info); if (retval != ERROR_OK) return retval; + + if (ejtag_info->pa_addr != MIPS32_PRACC_TEXT) { /* LEXRA/BMIPS ?, shift out another NOP, max 2 */ + mips_ejtag_set_instr(ejtag_info, EJTAG_INST_DATA); + mips_ejtag_drscan_32_out(ejtag_info, MIPS32_NOP); + retval = mips32_pracc_finish(ejtag_info); + if (retval != ERROR_OK) + return retval; + } else + break; } return ERROR_OK; @@ -1034,7 +1035,7 @@ int mips32_pracc_fastdata_xfer(struct mips_ejtag *ejtag_info, struct working_are ejtag_info->fast_access_save = write_t; } - LOG_DEBUG("%s using 0x%.8" PRIx32 " for write handler", __func__, source->address); + LOG_DEBUG("%s using 0x%.8" TARGET_PRIxADDR " for write handler", __func__, source->address); jmp_code[0] |= UPPER16(source->address); jmp_code[1] |= LOWER16(source->address);