diff options
author | Matthias Welwarsky <matthias@welwarsky.de> | 2015-12-11 15:12:56 +0100 |
---|---|---|
committer | Paul Fertser <fercerpav@gmail.com> | 2016-01-22 11:05:31 +0000 |
commit | a185eaad9d2fd25e3e53398a235e08f07f360e74 (patch) | |
tree | acc5fa1b8f6da9195ad58da8f3e17ae64c777c97 /src/target/arm_adi_v5.c | |
parent | ae8cdc139e12a851107e8f882c5a166a21103ad4 (diff) | |
download | riscv-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.c | 2 |
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; } |