From: OpenOCD-Gerrit <ope...@us...> - 2021-04-18 20:23:03
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Main OpenOCD repository". The branch, master has been updated via ff755a575ebf0218c2eb8745eff8050f8f02a53d (commit) from 80970811f4558b610792b01d37740be8af4258f6 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit ff755a575ebf0218c2eb8745eff8050f8f02a53d Author: Tomas Vanek <va...@fb...> Date: Tue Apr 6 18:55:22 2021 +0200 drivers/cmsis-dap: flush read Some CMSIS-DAP adapters keep buffered packets over USB close/open so we need to flush up to 64 old packets to be sure all buffers are empty. Flush just after cmsis_dap_open() and in the case of command mismatch. Change-Id: If21a118639e64d90635b4ecf81013d29a7b9f78d Signed-off-by: Tomas Vanek <va...@fb...> Reviewed-on: http://openocd.zylin.com/6135 Tested-by: jenkins Reviewed-by: Adrian M Negreanu <adr...@nx...> diff --git a/src/jtag/drivers/cmsis_dap.c b/src/jtag/drivers/cmsis_dap.c index b5ceb6cef..6ab087598 100644 --- a/src/jtag/drivers/cmsis_dap.c +++ b/src/jtag/drivers/cmsis_dap.c @@ -281,6 +281,21 @@ static void cmsis_dap_close(struct cmsis_dap *dap) } } +static void cmsis_dap_flush_read(struct cmsis_dap *dap) +{ + unsigned int i; + /* Some CMSIS-DAP adapters keep buffered packets over + * USB close/open so we need to flush up to 64 old packets + * to be sure all buffers are empty */ + for (i = 0; i < 64; i++) { + int retval = dap->backend->read(dap, 10); + if (retval == ERROR_TIMEOUT_REACHED) + break; + } + if (i) + LOG_DEBUG("Flushed %u packets", i); +} + /* Send a message and receive the reply */ static int cmsis_dap_xfer(struct cmsis_dap *dap, int txlen) { @@ -313,6 +328,8 @@ static int cmsis_dap_xfer(struct cmsis_dap *dap, int txlen) if (resp[0] != current_cmd) { LOG_ERROR("CMSIS-DAP command mismatch. Sent 0x%" PRIx8 " received 0x%" PRIx8, current_cmd, resp[0]); + + cmsis_dap_flush_read(dap); return ERROR_FAIL; } @@ -885,6 +902,8 @@ static int cmsis_dap_init(void) if (retval != ERROR_OK) return retval; + cmsis_dap_flush_read(cmsis_dap_handle); + retval = cmsis_dap_get_caps_info(); if (retval != ERROR_OK) return retval; ----------------------------------------------------------------------- Summary of changes: src/jtag/drivers/cmsis_dap.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) hooks/post-receive -- Main OpenOCD repository |