target/arm_dap: clean up dap_configure code
authorTomas Vanek <vanekt@fbl.cz>
Mon, 15 Nov 2021 14:32:39 +0000 (15:32 +0100)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sat, 20 Nov 2021 14:45:54 +0000 (14:45 +0000)
dap_configure() contained first time init related tasks, as the call to
dap_init_instance() and the check for configured tap.

Move all first time init related stuff to dap_create() to make dap_configure()
usable in eventual stand-alone 'dap configure' command.

Change-Id: Ia86eadb4e960ce54e8581630d01af75720d2318d
Signed-off-by: Tomas Vanek <vanekt@fbl.cz>
Reviewed-on: https://review.openocd.org/c/openocd/+/6702
Tested-by: jenkins
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-by: Matthias Welwarsky <matthias@welwarsky.de>
src/target/arm_dap.c

index 18e77b50fe1b851bb7ea814efcc9a26da3d1c923..0eb55a9cbec076d99625032d7d6791990e6af67b 100644 (file)
@@ -165,11 +165,10 @@ static const struct jim_nvp nvp_config_opts[] = {
 
 static int dap_configure(struct jim_getopt_info *goi, struct arm_dap_object *dap)
 {
-       struct jtag_tap *tap = NULL;
        struct jim_nvp *n;
        int e;
 
-       /* parse config or cget options ... */
+       /* parse config ... */
        while (goi->argc > 0) {
                Jim_SetEmptyResult(goi->interp);
 
@@ -184,11 +183,14 @@ static int dap_configure(struct jim_getopt_info *goi, struct arm_dap_object *dap
                        e = jim_getopt_obj(goi, &o_t);
                        if (e != JIM_OK)
                                return e;
+
+                       struct jtag_tap *tap;
                        tap = jtag_tap_by_jim_obj(goi->interp, o_t);
                        if (!tap) {
                                Jim_SetResultString(goi->interp, "-chain-position is invalid", -1);
                                return JIM_ERR;
                        }
+                       dap->dap.tap = tap;
                        /* loop for more */
                        break;
                }
@@ -200,14 +202,6 @@ static int dap_configure(struct jim_getopt_info *goi, struct arm_dap_object *dap
                }
        }
 
-       if (!tap) {
-               Jim_SetResultString(goi->interp, "-chain-position required when creating DAP", -1);
-               return JIM_ERR;
-       }
-
-       dap_instance_init(&dap->dap);
-       dap->dap.tap = tap;
-
        return JIM_OK;
 }
 
@@ -242,15 +236,21 @@ static int dap_create(struct jim_getopt_info *goi)
        if (!dap)
                return JIM_ERR;
 
-       e = dap_configure(goi, dap);
-       if (e != JIM_OK) {
-               free(dap);
-               return e;
-       }
+       dap_instance_init(&dap->dap);
 
        cp = Jim_GetString(new_cmd, NULL);
        dap->name = strdup(cp);
 
+       e = dap_configure(goi, dap);
+       if (e != JIM_OK)
+               goto err;
+
+       if (!dap->dap.tap) {
+               Jim_SetResultString(goi->interp, "-chain-position required when creating DAP", -1);
+               e = JIM_ERR;
+               goto err;
+       }
+
        struct command_registration dap_commands[] = {
                {
                        .name = cp,
@@ -268,14 +268,18 @@ static int dap_create(struct jim_getopt_info *goi)
 
        e = register_commands_with_data(cmd_ctx, NULL, dap_commands, dap);
        if (e != ERROR_OK) {
-               free(dap->name);
-               free(dap);
-               return JIM_ERR;
+               e = JIM_ERR;
+               goto err;
        }
 
        list_add_tail(&dap->lh, &all_dap);
 
        return JIM_OK;
+
+err:
+       free(dap->name);
+       free(dap);
+       return e;
 }
 
 static int jim_dap_create(Jim_Interp *interp, int argc, Jim_Obj *const *argv)