aboutsummaryrefslogtreecommitdiff
path: root/src/target/mips32_dmaacc.c
diff options
context:
space:
mode:
authorOleksij Rempel <bug-track@fisher-privat.net>2013-04-18 12:00:14 +0200
committerSpencer Oliver <spen@spen-soft.co.uk>2013-07-17 14:33:13 +0000
commit21dfb6ee1a238beb7b6e7c1874768c8a9b996e0b (patch)
treea9b440acc63abb77e7bdd40936d90ba41717df04 /src/target/mips32_dmaacc.c
parent45f0553f30e8145420b3656ca16b18c83dbf90d1 (diff)
downloadriscv-openocd-21dfb6ee1a238beb7b6e7c1874768c8a9b996e0b.zip
riscv-openocd-21dfb6ee1a238beb7b6e7c1874768c8a9b996e0b.tar.gz
riscv-openocd-21dfb6ee1a238beb7b6e7c1874768c8a9b996e0b.tar.bz2
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>
Diffstat (limited to 'src/target/mips32_dmaacc.c')
-rw-r--r--src/target/mips32_dmaacc.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/target/mips32_dmaacc.c b/src/target/mips32_dmaacc.c
index 733f96c..eb6cd8c 100644
--- a/src/target/mips32_dmaacc.c
+++ b/src/target/mips32_dmaacc.c
@@ -28,6 +28,7 @@
#endif
#include "mips32_dmaacc.h"
+#include <helper/time_support.h>
static int mips32_dmaacc_read_mem8(struct mips_ejtag *ejtag_info,
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.
*/
-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;
+ int64_t start = timeval_ms();
+
do {
+ if (timeval_ms() - start > 1000) {
+ LOG_ERROR("DMA time out");
+ return -ETIMEDOUT;
+ }
ejtag_ctrl = EJTAG_CTRL_DMAACC | ejtag_info->ejtag_ctrl;
mips_ejtag_drscan_32(ejtag_info, &ejtag_ctrl);
} while (ejtag_ctrl & EJTAG_CTRL_DSTRT);
+ return 0;
}
static int ejtag_dma_read(struct mips_ejtag *ejtag_info, uint32_t addr, uint32_t *data)