drivers: cmsis-dap: fix connection in JTAG mode 97/4697/2
authorAntonio Borneo <borneo.antonio@gmail.com>
Mon, 8 Oct 2018 14:42:10 +0000 (16:42 +0200)
committerMatthias Welwarsky <matthias@welwarsky.de>
Tue, 9 Oct 2018 07:35:34 +0000 (08:35 +0100)
Commit 5aceec24122bc222896cfcfd91f7f082f630ac83 ("drivers:
cmsis-dap: pull up common connect code") breaks the driver and it
cannot connect anymore in JTAG mode.
The issue is caused in cmsis_dap_init() by anticipating the call to
cmsis_dap_usb_open(), which then sets cmsis_dap_handle and makes the
following test to always fail.
Actually the original code was quite tricky:
if (swd_mode)
do something that also sets cmsis_dap_handle;
if (cmsis_dap_handle == NULL)
do something for !swd_mode;

Convert the sequence of tricky "if"s in a single "if-then-else" to
handle clearly the cases swd_mode and !swd_mode.

Change-Id: I359a23bf26a3edc2461f4352daa0be83e78868f7
Fixes: 5aceec24122b ("drivers: cmsis-dap: pull up common connect code")
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/4697
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
Tested-by: jenkins
src/jtag/drivers/cmsis_dap_usb.c

index 4ee4836..9e723b5 100644 (file)
@@ -895,9 +895,7 @@ static int cmsis_dap_init(void)
                retval = cmsis_dap_swd_open();
                if (retval != ERROR_OK)
                        return retval;
-       }
-
-       if (cmsis_dap_handle == NULL) {
+       } else {
                /* Connect in JTAG mode */
                if (!(cmsis_dap_handle->caps & INFO_CAPS_JTAG)) {
                        LOG_ERROR("CMSIS-DAP: JTAG not supported");