X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Ftarget%2Farm_dap.c;h=119e5117d2e5ffa186e1d055391e0ebc625f41f2;hb=92f51c50ae41732ba287ea8ee4a4cdeb54e313ee;hp=692feb322fca732f1514edee326670a558c13a4e;hpb=2231da8ec4e7d7ae9b652f3dd1a7104f5a110f3f;p=openocd.git diff --git a/src/target/arm_dap.c b/src/target/arm_dap.c index 692feb322f..119e5117d2 100644 --- a/src/target/arm_dap.c +++ b/src/target/arm_dap.c @@ -48,13 +48,15 @@ static void dap_instance_init(struct adiv5_dap *dap) { int i; /* Set up with safe defaults */ - for (i = 0; i <= 255; i++) { + for (i = 0; i <= DP_APSEL_MAX; i++) { dap->ap[i].dap = dap; dap->ap[i].ap_num = i; /* memaccess_tck max is 255 */ dap->ap[i].memaccess_tck = 255; /* Number of bits for tar autoincrement, impl. dep. at least 10 */ dap->ap[i].tar_autoincr_block = (1<<10); + /* default CSW value */ + dap->ap[i].csw_default = CSW_DEFAULT; } INIT_LIST_HEAD(&dap->cmd_journal); } @@ -130,8 +132,13 @@ static int dap_init_all(void) int dap_cleanup_all(void) { struct arm_dap_object *obj, *tmp; + struct adiv5_dap *dap; list_for_each_entry_safe(obj, tmp, &all_dap, lh) { + dap = &obj->dap; + if (dap->ops && dap->ops->quit) + dap->ops->quit(dap); + free(obj->name); free(obj); } @@ -141,10 +148,12 @@ int dap_cleanup_all(void) enum dap_cfg_param { CFG_CHAIN_POSITION, + CFG_IGNORE_SYSPWRUPACK, }; static const Jim_Nvp nvp_config_opts[] = { { .name = "-chain-position", .value = CFG_CHAIN_POSITION }, + { .name = "-ignore-syspwrupack", .value = CFG_IGNORE_SYSPWRUPACK }, { .name = NULL, .value = -1 } }; @@ -177,6 +186,9 @@ static int dap_configure(Jim_GetOptInfo *goi, struct arm_dap_object *dap) /* loop for more */ break; } + case CFG_IGNORE_SYSPWRUPACK: + dap->dap.ignore_syspwrupack = true; + break; default: break; } @@ -301,13 +313,18 @@ COMMAND_HANDLER(handle_dap_info_command) struct adiv5_dap *dap = arm->dap; uint32_t apsel; + if (dap == NULL) { + LOG_ERROR("DAP instance not available. Probably a HLA target..."); + return ERROR_TARGET_RESOURCE_NOT_AVAILABLE; + } + switch (CMD_ARGC) { case 0: apsel = dap->apsel; break; case 1: COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], apsel); - if (apsel >= 256) + if (apsel > DP_APSEL_MAX) return ERROR_COMMAND_SYNTAX_ERROR; break; default: