From a185eaad9d2fd25e3e53398a235e08f07f360e74 Mon Sep 17 00:00:00 2001 From: Matthias Welwarsky Date: Fri, 11 Dec 2015 15:12:56 +0100 Subject: 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 Reviewed-on: http://openocd.zylin.com/3166 Tested-by: jenkins Reviewed-by: Paul Fertser --- src/target/arm_adi_v5.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/target/arm_adi_v5.c') 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 +#include /* 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; } -- cgit v1.1