do not wait forever on ejtag_dma_dstrt_poll

Change-Id: I26adab09839795ecf363b7db912392bd5314cec5
Signed-off-by: Oleksij Rempel <bug-track@fisher-privat.net>
Reviewed-on: http://openocd.zylin.com/1344
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
__archive__
Oleksij Rempel 2013-04-18 12:00:14 +02:00 committed by Spencer Oliver
parent 45f0553f30
commit 21dfb6ee1a
1 changed files with 9 additions and 1 deletions

View File

@ -28,6 +28,7 @@
#endif #endif
#include "mips32_dmaacc.h" #include "mips32_dmaacc.h"
#include <helper/time_support.h>
static int mips32_dmaacc_read_mem8(struct mips_ejtag *ejtag_info, static int mips32_dmaacc_read_mem8(struct mips_ejtag *ejtag_info,
uint32_t addr, int count, uint8_t *buf); uint32_t addr, int count, uint8_t *buf);
@ -53,13 +54,20 @@ static int mips32_dmaacc_write_mem32(struct mips_ejtag *ejtag_info,
* displaying/modifying memory and memory mapped registers. * displaying/modifying memory and memory mapped registers.
*/ */
static void ejtag_dma_dstrt_poll(struct mips_ejtag *ejtag_info) static int ejtag_dma_dstrt_poll(struct mips_ejtag *ejtag_info)
{ {
uint32_t ejtag_ctrl; uint32_t ejtag_ctrl;
int64_t start = timeval_ms();
do { do {
if (timeval_ms() - start > 1000) {
LOG_ERROR("DMA time out");
return -ETIMEDOUT;
}
ejtag_ctrl = EJTAG_CTRL_DMAACC | ejtag_info->ejtag_ctrl; ejtag_ctrl = EJTAG_CTRL_DMAACC | ejtag_info->ejtag_ctrl;
mips_ejtag_drscan_32(ejtag_info, &ejtag_ctrl); mips_ejtag_drscan_32(ejtag_info, &ejtag_ctrl);
} while (ejtag_ctrl & EJTAG_CTRL_DSTRT); } while (ejtag_ctrl & EJTAG_CTRL_DSTRT);
return 0;
} }
static int ejtag_dma_read(struct mips_ejtag *ejtag_info, uint32_t addr, uint32_t *data) static int ejtag_dma_read(struct mips_ejtag *ejtag_info, uint32_t addr, uint32_t *data)