target/arm_adi_v5: allow commands apsel and apcsw during init phase
The current implementation of apsel cannot be executed during the initialization phase because it queries the DAP AP to retrieve and print the content of IDR register, and the query is only possible later on during the exec phase. But IDR information is already printed by the dedicated command apid, making redundant printing it by apsel too. Being unable to run apsel during initialization, makes also apcsw command (that depends on apsel) not usable in such phase. Modify the command apsel to only set the current AP, without making any transfer to the (possibly not initialized yet) DAP. When run without parameters, just print the current AP number. Change mode to COMMAND_ANY to apsel and to apcsw. Change-Id: Ibea6d531e435d1d49d782de1ed8ee6846e91bfdf Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: http://openocd.zylin.com/4624 Tested-by: jenkins Reviewed-by: Matthias Welwarsky <matthias@welwarsky.de> Reviewed-by: Tomas Vanek <vanekt@fbl.cz>bscan_tunnel
parent
f8367dbb49
commit
e48690cb26
|
@ -1616,13 +1616,12 @@ COMMAND_HANDLER(dap_memaccess_command)
|
|||
COMMAND_HANDLER(dap_apsel_command)
|
||||
{
|
||||
struct adiv5_dap *dap = adiv5_get_dap(CMD_DATA);
|
||||
uint32_t apsel, apid;
|
||||
int retval;
|
||||
uint32_t apsel;
|
||||
|
||||
switch (CMD_ARGC) {
|
||||
case 0:
|
||||
apsel = dap->apsel;
|
||||
break;
|
||||
command_print(CMD_CTX, "%" PRIi32, dap->apsel);
|
||||
return ERROR_OK;
|
||||
case 1:
|
||||
COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], apsel);
|
||||
/* AP address is in bits 31:24 of DP_SELECT */
|
||||
|
@ -1634,18 +1633,7 @@ COMMAND_HANDLER(dap_apsel_command)
|
|||
}
|
||||
|
||||
dap->apsel = apsel;
|
||||
|
||||
retval = dap_queue_ap_read(dap_ap(dap, apsel), AP_REG_IDR, &apid);
|
||||
if (retval != ERROR_OK)
|
||||
return retval;
|
||||
retval = dap_run(dap);
|
||||
if (retval != ERROR_OK)
|
||||
return retval;
|
||||
|
||||
command_print(CMD_CTX, "ap %" PRIi32 " selected, identification register 0x%8.8" PRIx32,
|
||||
apsel, apid);
|
||||
|
||||
return retval;
|
||||
return ERROR_OK;
|
||||
}
|
||||
|
||||
COMMAND_HANDLER(dap_apcsw_command)
|
||||
|
@ -1838,7 +1826,7 @@ const struct command_registration dap_instance_commands[] = {
|
|||
{
|
||||
.name = "apsel",
|
||||
.handler = dap_apsel_command,
|
||||
.mode = COMMAND_EXEC,
|
||||
.mode = COMMAND_ANY,
|
||||
.help = "Set the currently selected AP (default 0) "
|
||||
"and display the result",
|
||||
.usage = "[ap_num]",
|
||||
|
@ -1846,7 +1834,7 @@ const struct command_registration dap_instance_commands[] = {
|
|||
{
|
||||
.name = "apcsw",
|
||||
.handler = dap_apcsw_command,
|
||||
.mode = COMMAND_EXEC,
|
||||
.mode = COMMAND_ANY,
|
||||
.help = "Set CSW default bits",
|
||||
.usage = "[value [mask]]",
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue