aboutsummaryrefslogtreecommitdiff
path: root/src/adiv5_jtagdp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/adiv5_jtagdp.c')
-rw-r--r--src/adiv5_jtagdp.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/src/adiv5_jtagdp.c b/src/adiv5_jtagdp.c
index 5049e3c..d97bc99 100644
--- a/src/adiv5_jtagdp.c
+++ b/src/adiv5_jtagdp.c
@@ -23,6 +23,7 @@
*/
#include "general.h"
+#include "exception.h"
#include "adiv5.h"
#include "jtag_scan.h"
#include "jtagtap.h"
@@ -84,19 +85,17 @@ static uint32_t adiv5_jtagdp_low_access(ADIv5_DP_t *dp, uint8_t RnW,
jtag_dev_write_ir(dp->dev, APnDP ? IR_APACC : IR_DPACC);
- int tries = 1000;
+ platform_timeout_set(2000);
do {
jtag_dev_shift_dr(dp->dev, (uint8_t*)&response, (uint8_t*)&request, 35);
ack = response & 0x07;
- } while(--tries && (ack == JTAGDP_ACK_WAIT));
+ } while(!platform_timeout_is_expired() && (ack == JTAGDP_ACK_WAIT));
- if (dp->allow_timeout && (ack == JTAGDP_ACK_WAIT))
- return 0;
+ if (ack == JTAGDP_ACK_WAIT)
+ raise_exception(EXCEPTION_TIMEOUT, "JTAG-DP ACK timeout");
- if((ack != JTAGDP_ACK_OK)) {
- /* Fatal error if invalid ACK response */
- PLATFORM_FATAL_ERROR(1);
- }
+ if((ack != JTAGDP_ACK_OK))
+ raise_exception(EXCEPTION_ERROR, "JTAG-DP invalid ACK");
return (uint32_t)(response >> 3);
}