]> git.sur5r.net Git - openocd/blobdiff - src/target/arm_cti.c
adi_v5: enforce check on AP number value
[openocd] / src / target / arm_cti.c
index 6834a34a089d2b2477de28a6db977899a8dd9278..dcaf21e50a7550dce8e90a09a66c2c3d1806bab3 100644 (file)
@@ -219,6 +219,18 @@ static int cti_find_reg_offset(const char *name)
        return -1;
 }
 
+int arm_cti_cleanup_all(void)
+{
+       struct arm_cti_object *obj, *tmp;
+
+       list_for_each_entry_safe(obj, tmp, &all_cti, lh) {
+               free(obj->name);
+               free(obj);
+       }
+
+       return ERROR_OK;
+}
+
 COMMAND_HANDLER(handle_cti_dump)
 {
        struct arm_cti_object *obj = CMD_DATA;
@@ -365,22 +377,21 @@ static const struct command_registration cti_instance_command_handlers[] = {
 };
 
 enum cti_cfg_param {
-       CFG_CHAIN_POSITION,
+       CFG_DAP,
        CFG_AP_NUM,
        CFG_CTIBASE
 };
 
 static const Jim_Nvp nvp_config_opts[] = {
-       { .name = "-chain-position",   .value = CFG_CHAIN_POSITION },
-       { .name = "-ctibase",          .value = CFG_CTIBASE },
-       { .name = "-ap-num",           .value = CFG_AP_NUM },
+       { .name = "-dap",     .value = CFG_DAP },
+       { .name = "-ctibase", .value = CFG_CTIBASE },
+       { .name = "-ap-num",  .value = CFG_AP_NUM },
        { .name = NULL, .value = -1 }
 };
 
 static int cti_configure(Jim_GetOptInfo *goi, struct arm_cti_object *cti)
 {
-       struct jtag_tap *tap = NULL;
-       struct adiv5_dap *dap;
+       struct adiv5_dap *dap = NULL;
        Jim_Nvp *n;
        jim_wide w;
        int e;
@@ -395,14 +406,14 @@ static int cti_configure(Jim_GetOptInfo *goi, struct arm_cti_object *cti)
                        return e;
                }
                switch (n->value) {
-               case CFG_CHAIN_POSITION: {
+               case CFG_DAP: {
                        Jim_Obj *o_t;
                        e = Jim_GetOpt_Obj(goi, &o_t);
                        if (e != JIM_OK)
                                return e;
-                       tap = jtag_tap_by_jim_obj(goi->interp, o_t);
-                       if (tap == NULL) {
-                               Jim_SetResultString(goi->interp, "-chain-position is invalid", -1);
+                       dap = dap_instance_by_jim_obj(goi->interp, o_t);
+                       if (dap == NULL) {
+                               Jim_SetResultString(goi->interp, "-dap is invalid", -1);
                                return JIM_ERR;
                        }
                        /* loop for more */
@@ -420,22 +431,19 @@ static int cti_configure(Jim_GetOptInfo *goi, struct arm_cti_object *cti)
                        e = Jim_GetOpt_Wide(goi, &w);
                        if (e != JIM_OK)
                                return e;
+                       if (w < 0 || w > DP_APSEL_MAX) {
+                               Jim_SetResultString(goi->interp, "-ap-num is invalid", -1);
+                               return JIM_ERR;
+                       }
                        cti->ap_num = (uint32_t)w;
                }
        }
 
-       if (tap == NULL) {
-               Jim_SetResultString(goi->interp, "-chain-position required when creating CTI", -1);
+       if (dap == NULL) {
+               Jim_SetResultString(goi->interp, "-dap required when creating CTI", -1);
                return JIM_ERR;
        }
 
-       if (tap->dap == NULL) {
-               dap = dap_init();
-               dap->tap = tap;
-               tap->dap = dap;
-       } else
-               dap = tap->dap;
-
        cti->cti.ap = dap_ap(dap, cti->ap_num);
 
        return JIM_OK;