return arm_cti_write_reg(self, CTI_APPCLEAR, CTI_CHNL(channel));
}
-static uint32_t cti_regs[26];
+static uint32_t cti_regs[28];
static const struct {
uint32_t offset;
{ CTI_CHOU_STATUS, "CHOUT", &cti_regs[23] },
{ CTI_APPSET, "APPSET", &cti_regs[24] },
{ CTI_APPCLEAR, "APPCLR", &cti_regs[25] },
+ { CTI_APPPULSE, "APPPULSE", &cti_regs[26] },
+ { CTI_INACK, "INACK", &cti_regs[27] },
};
static int cti_find_reg_offset(const char *name)
if (!strcmp(name, cti_names[i].label))
return cti_names[i].offset;
}
+
+ LOG_ERROR("unknown CTI register %s", 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;
uint32_t value;
if (CMD_ARGC != 2) {
- Jim_SetResultString(interp, "Wrong numer of args", -1);
+ Jim_SetResultString(interp, "Wrong number of args", -1);
return ERROR_FAIL;
}
uint32_t value;
if (CMD_ARGC != 1) {
- Jim_SetResultString(interp, "Wrong numer of args", -1);
+ Jim_SetResultString(interp, "Wrong number of args", -1);
return ERROR_FAIL;
}
};
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;
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 */
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;
.mode = COMMAND_CONFIG,
.help = "CTI commands",
.chain = cti_subcommand_handlers,
+ .usage = "",
},
COMMAND_REGISTRATION_DONE
};