aboutsummaryrefslogtreecommitdiff
path: root/src/target/arm_adi_v5.c
diff options
context:
space:
mode:
authorMatthias Welwarsky <matthias@welwarsky.de>2015-12-11 15:12:56 +0100
committerPaul Fertser <fercerpav@gmail.com>2016-01-22 11:05:31 +0000
commita185eaad9d2fd25e3e53398a235e08f07f360e74 (patch)
treeacc5fa1b8f6da9195ad58da8f3e17ae64c777c97 /src/target/arm_adi_v5.c
parentae8cdc139e12a851107e8f882c5a166a21103ad4 (diff)
downloadriscv-openocd-a185eaad9d2fd25e3e53398a235e08f07f360e74.zip
riscv-openocd-a185eaad9d2fd25e3e53398a235e08f07f360e74.tar.gz
riscv-openocd-a185eaad9d2fd25e3e53398a235e08f07f360e74.tar.bz2
adi_v5_jtag: implement DAP WAIT support
ADIv5 specifies that DP and AP accesses may generate a WAIT response when the hardware is not able to complete a request for various reasons in time before the next request is sent. Currently, the software treats a WAIT response as a fatal error and aborts operation on the DAP. This patch implements WAIT handling by keeping a journal of all outstanding and completed accesses, including their response status. At certain times (when dap_run() is called), the journal is inspected for WAIT responses and all discarded accesses are replayed to complete them. Special care is taken to not re-execute already successfully completed operations. Change-Id: I2790070388cf1ab2e8c9a042d74eb3ef776aa583 Signed-off-by: Matthias Welwarsky <matthias@welwarsky.de> Reviewed-on: http://openocd.zylin.com/3166 Tested-by: jenkins Reviewed-by: Paul Fertser <fercerpav@gmail.com>
Diffstat (limited to 'src/target/arm_adi_v5.c')
-rw-r--r--src/target/arm_adi_v5.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/target/arm_adi_v5.c b/src/target/arm_adi_v5.c
index 6efc0af..946a78e 100644
--- a/src/target/arm_adi_v5.c
+++ b/src/target/arm_adi_v5.c
@@ -76,6 +76,7 @@
#include "arm.h"
#include "arm_adi_v5.h"
#include <helper/time_support.h>
+#include <helper/list.h>
/* ARM ADI Specification requires at least 10 bits used for TAR autoincrement */
@@ -586,6 +587,7 @@ struct adiv5_dap *dap_init(void)
/* Number of bits for tar autoincrement, impl. dep. at least 10 */
dap->ap[i].tar_autoincr_block = (1<<10);
}
+ INIT_LIST_HEAD(&dap->cmd_journal);
return dap;
}