target/arm_adi_v5: change prototype of dap_rom_display()
To prepare for handling TCL return values consistently, all calls to command_print/command_print_sameline should be ready to switch to CMD as first parameter. Change prototype of dap_rom_display() and dap_info_command() to pass CMD instead of CMD_CTX. This change was part of http://openocd.zylin.com/1815 from Paul Fertser and has been extracted and rebased to simplify the review. Change-Id: Idb97b20759c03fcecbac1184c354966f469caa5f Signed-off-by: Paul Fertser <fercerpav@gmail.com> Signed-off-by: Tomas Vanek <vanekt@fbl.cz> Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: http://openocd.zylin.com/5073 Tested-by: jenkinsbscan_optimization
parent
5a330d1d74
commit
d50e92e7f7
|
@ -1190,7 +1190,7 @@ static const struct {
|
||||||
{ ANY_ID, 0x343, "TI DAPCTL", "", }, /* from OMAP3 memmap */
|
{ ANY_ID, 0x343, "TI DAPCTL", "", }, /* from OMAP3 memmap */
|
||||||
};
|
};
|
||||||
|
|
||||||
static int dap_rom_display(struct command_context *cmd_ctx,
|
static int dap_rom_display(struct command_invocation *cmd,
|
||||||
struct adiv5_ap *ap, uint32_t dbgbase, int depth)
|
struct adiv5_ap *ap, uint32_t dbgbase, int depth)
|
||||||
{
|
{
|
||||||
int retval;
|
int retval;
|
||||||
|
@ -1199,7 +1199,7 @@ static int dap_rom_display(struct command_context *cmd_ctx,
|
||||||
char tabs[16] = "";
|
char tabs[16] = "";
|
||||||
|
|
||||||
if (depth > 16) {
|
if (depth > 16) {
|
||||||
command_print(cmd_ctx, "\tTables too deep");
|
command_print(cmd->ctx, "\tTables too deep");
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1207,25 +1207,25 @@ static int dap_rom_display(struct command_context *cmd_ctx,
|
||||||
snprintf(tabs, sizeof(tabs), "[L%02d] ", depth);
|
snprintf(tabs, sizeof(tabs), "[L%02d] ", depth);
|
||||||
|
|
||||||
uint32_t base_addr = dbgbase & 0xFFFFF000;
|
uint32_t base_addr = dbgbase & 0xFFFFF000;
|
||||||
command_print(cmd_ctx, "\t\tComponent base address 0x%08" PRIx32, base_addr);
|
command_print(cmd->ctx, "\t\tComponent base address 0x%08" PRIx32, base_addr);
|
||||||
|
|
||||||
retval = dap_read_part_id(ap, base_addr, &cid, &pid);
|
retval = dap_read_part_id(ap, base_addr, &cid, &pid);
|
||||||
if (retval != ERROR_OK) {
|
if (retval != ERROR_OK) {
|
||||||
command_print(cmd_ctx, "\t\tCan't read component, the corresponding core might be turned off");
|
command_print(cmd->ctx, "\t\tCan't read component, the corresponding core might be turned off");
|
||||||
return ERROR_OK; /* Don't abort recursion */
|
return ERROR_OK; /* Don't abort recursion */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_dap_cid_ok(cid)) {
|
if (!is_dap_cid_ok(cid)) {
|
||||||
command_print(cmd_ctx, "\t\tInvalid CID 0x%08" PRIx32, cid);
|
command_print(cmd->ctx, "\t\tInvalid CID 0x%08" PRIx32, cid);
|
||||||
return ERROR_OK; /* Don't abort recursion */
|
return ERROR_OK; /* Don't abort recursion */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* component may take multiple 4K pages */
|
/* component may take multiple 4K pages */
|
||||||
uint32_t size = (pid >> 36) & 0xf;
|
uint32_t size = (pid >> 36) & 0xf;
|
||||||
if (size > 0)
|
if (size > 0)
|
||||||
command_print(cmd_ctx, "\t\tStart address 0x%08" PRIx32, (uint32_t)(base_addr - 0x1000 * size));
|
command_print(cmd->ctx, "\t\tStart address 0x%08" PRIx32, (uint32_t)(base_addr - 0x1000 * size));
|
||||||
|
|
||||||
command_print(cmd_ctx, "\t\tPeripheral ID 0x%010" PRIx64, pid);
|
command_print(cmd->ctx, "\t\tPeripheral ID 0x%010" PRIx64, pid);
|
||||||
|
|
||||||
uint8_t class = (cid >> 12) & 0xf;
|
uint8_t class = (cid >> 12) & 0xf;
|
||||||
uint16_t part_num = pid & 0xfff;
|
uint16_t part_num = pid & 0xfff;
|
||||||
|
@ -1233,12 +1233,12 @@ static int dap_rom_display(struct command_context *cmd_ctx,
|
||||||
|
|
||||||
if (designer_id & 0x80) {
|
if (designer_id & 0x80) {
|
||||||
/* JEP106 code */
|
/* JEP106 code */
|
||||||
command_print(cmd_ctx, "\t\tDesigner is 0x%03" PRIx16 ", %s",
|
command_print(cmd->ctx, "\t\tDesigner is 0x%03" PRIx16 ", %s",
|
||||||
designer_id, jep106_manufacturer(designer_id >> 8, designer_id & 0x7f));
|
designer_id, jep106_manufacturer(designer_id >> 8, designer_id & 0x7f));
|
||||||
} else {
|
} else {
|
||||||
/* Legacy ASCII ID, clear invalid bits */
|
/* Legacy ASCII ID, clear invalid bits */
|
||||||
designer_id &= 0x7f;
|
designer_id &= 0x7f;
|
||||||
command_print(cmd_ctx, "\t\tDesigner ASCII code 0x%02" PRIx16 ", %s",
|
command_print(cmd->ctx, "\t\tDesigner ASCII code 0x%02" PRIx16 ", %s",
|
||||||
designer_id, designer_id == 0x41 ? "ARM" : "<unknown>");
|
designer_id, designer_id == 0x41 ? "ARM" : "<unknown>");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1260,8 +1260,8 @@ static int dap_rom_display(struct command_context *cmd_ctx,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
command_print(cmd_ctx, "\t\tPart is 0x%" PRIx16", %s %s", part_num, type, full);
|
command_print(cmd->ctx, "\t\tPart is 0x%" PRIx16", %s %s", part_num, type, full);
|
||||||
command_print(cmd_ctx, "\t\tComponent class is 0x%" PRIx8 ", %s", class, class_description[class]);
|
command_print(cmd->ctx, "\t\tComponent class is 0x%" PRIx8 ", %s", class, class_description[class]);
|
||||||
|
|
||||||
if (class == 1) { /* ROM Table */
|
if (class == 1) { /* ROM Table */
|
||||||
uint32_t memtype;
|
uint32_t memtype;
|
||||||
|
@ -1270,9 +1270,9 @@ static int dap_rom_display(struct command_context *cmd_ctx,
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
if (memtype & 0x01)
|
if (memtype & 0x01)
|
||||||
command_print(cmd_ctx, "\t\tMEMTYPE system memory present on bus");
|
command_print(cmd->ctx, "\t\tMEMTYPE system memory present on bus");
|
||||||
else
|
else
|
||||||
command_print(cmd_ctx, "\t\tMEMTYPE system memory not present: dedicated debug bus");
|
command_print(cmd->ctx, "\t\tMEMTYPE system memory not present: dedicated debug bus");
|
||||||
|
|
||||||
/* Read ROM table entries from base address until we get 0x00000000 or reach the reserved area */
|
/* Read ROM table entries from base address until we get 0x00000000 or reach the reserved area */
|
||||||
for (uint16_t entry_offset = 0; entry_offset < 0xF00; entry_offset += 4) {
|
for (uint16_t entry_offset = 0; entry_offset < 0xF00; entry_offset += 4) {
|
||||||
|
@ -1280,17 +1280,17 @@ static int dap_rom_display(struct command_context *cmd_ctx,
|
||||||
retval = mem_ap_read_atomic_u32(ap, base_addr | entry_offset, &romentry);
|
retval = mem_ap_read_atomic_u32(ap, base_addr | entry_offset, &romentry);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
command_print(cmd_ctx, "\t%sROMTABLE[0x%x] = 0x%" PRIx32 "",
|
command_print(cmd->ctx, "\t%sROMTABLE[0x%x] = 0x%" PRIx32 "",
|
||||||
tabs, entry_offset, romentry);
|
tabs, entry_offset, romentry);
|
||||||
if (romentry & 0x01) {
|
if (romentry & 0x01) {
|
||||||
/* Recurse */
|
/* Recurse */
|
||||||
retval = dap_rom_display(cmd_ctx, ap, base_addr + (romentry & 0xFFFFF000), depth + 1);
|
retval = dap_rom_display(cmd, ap, base_addr + (romentry & 0xFFFFF000), depth + 1);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
} else if (romentry != 0) {
|
} else if (romentry != 0) {
|
||||||
command_print(cmd_ctx, "\t\tComponent not present");
|
command_print(cmd->ctx, "\t\tComponent not present");
|
||||||
} else {
|
} else {
|
||||||
command_print(cmd_ctx, "\t%s\tEnd of ROM table", tabs);
|
command_print(cmd->ctx, "\t%s\tEnd of ROM table", tabs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1435,7 +1435,7 @@ static int dap_rom_display(struct command_context *cmd_ctx,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
command_print(cmd_ctx, "\t\tType is 0x%02" PRIx8 ", %s, %s",
|
command_print(cmd->ctx, "\t\tType is 0x%02" PRIx8 ", %s, %s",
|
||||||
(uint8_t)(devtype & 0xff),
|
(uint8_t)(devtype & 0xff),
|
||||||
major, subtype);
|
major, subtype);
|
||||||
/* REVISIT also show 0xfc8 DevId */
|
/* REVISIT also show 0xfc8 DevId */
|
||||||
|
@ -1444,7 +1444,7 @@ static int dap_rom_display(struct command_context *cmd_ctx,
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int dap_info_command(struct command_context *cmd_ctx,
|
int dap_info_command(struct command_invocation *cmd,
|
||||||
struct adiv5_ap *ap)
|
struct adiv5_ap *ap)
|
||||||
{
|
{
|
||||||
int retval;
|
int retval;
|
||||||
|
@ -1456,27 +1456,27 @@ int dap_info_command(struct command_context *cmd_ctx,
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
command_print(cmd_ctx, "AP ID register 0x%8.8" PRIx32, apid);
|
command_print(cmd->ctx, "AP ID register 0x%8.8" PRIx32, apid);
|
||||||
if (apid == 0) {
|
if (apid == 0) {
|
||||||
command_print(cmd_ctx, "No AP found at this ap 0x%x", ap->ap_num);
|
command_print(cmd->ctx, "No AP found at this ap 0x%x", ap->ap_num);
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (apid & (IDR_JEP106 | IDR_TYPE)) {
|
switch (apid & (IDR_JEP106 | IDR_TYPE)) {
|
||||||
case IDR_JEP106_ARM | AP_TYPE_JTAG_AP:
|
case IDR_JEP106_ARM | AP_TYPE_JTAG_AP:
|
||||||
command_print(cmd_ctx, "\tType is JTAG-AP");
|
command_print(cmd->ctx, "\tType is JTAG-AP");
|
||||||
break;
|
break;
|
||||||
case IDR_JEP106_ARM | AP_TYPE_AHB_AP:
|
case IDR_JEP106_ARM | AP_TYPE_AHB_AP:
|
||||||
command_print(cmd_ctx, "\tType is MEM-AP AHB");
|
command_print(cmd->ctx, "\tType is MEM-AP AHB");
|
||||||
break;
|
break;
|
||||||
case IDR_JEP106_ARM | AP_TYPE_APB_AP:
|
case IDR_JEP106_ARM | AP_TYPE_APB_AP:
|
||||||
command_print(cmd_ctx, "\tType is MEM-AP APB");
|
command_print(cmd->ctx, "\tType is MEM-AP APB");
|
||||||
break;
|
break;
|
||||||
case IDR_JEP106_ARM | AP_TYPE_AXI_AP:
|
case IDR_JEP106_ARM | AP_TYPE_AXI_AP:
|
||||||
command_print(cmd_ctx, "\tType is MEM-AP AXI");
|
command_print(cmd->ctx, "\tType is MEM-AP AXI");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
command_print(cmd_ctx, "\tUnknown AP type");
|
command_print(cmd->ctx, "\tUnknown AP type");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1485,17 +1485,17 @@ int dap_info_command(struct command_context *cmd_ctx,
|
||||||
*/
|
*/
|
||||||
mem_ap = (apid & IDR_CLASS) == AP_CLASS_MEM_AP;
|
mem_ap = (apid & IDR_CLASS) == AP_CLASS_MEM_AP;
|
||||||
if (mem_ap) {
|
if (mem_ap) {
|
||||||
command_print(cmd_ctx, "MEM-AP BASE 0x%8.8" PRIx32, dbgbase);
|
command_print(cmd->ctx, "MEM-AP BASE 0x%8.8" PRIx32, dbgbase);
|
||||||
|
|
||||||
if (dbgbase == 0xFFFFFFFF || (dbgbase & 0x3) == 0x2) {
|
if (dbgbase == 0xFFFFFFFF || (dbgbase & 0x3) == 0x2) {
|
||||||
command_print(cmd_ctx, "\tNo ROM table present");
|
command_print(cmd->ctx, "\tNo ROM table present");
|
||||||
} else {
|
} else {
|
||||||
if (dbgbase & 0x01)
|
if (dbgbase & 0x01)
|
||||||
command_print(cmd_ctx, "\tValid ROM table present");
|
command_print(cmd->ctx, "\tValid ROM table present");
|
||||||
else
|
else
|
||||||
command_print(cmd_ctx, "\tROM table in legacy format");
|
command_print(cmd->ctx, "\tROM table in legacy format");
|
||||||
|
|
||||||
dap_rom_display(cmd_ctx, ap, dbgbase & 0xFFFFF000, 0);
|
dap_rom_display(cmd, ap, dbgbase & 0xFFFFF000, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1646,7 +1646,7 @@ COMMAND_HANDLER(handle_dap_info_command)
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return dap_info_command(CMD_CTX, &dap->ap[apsel]);
|
return dap_info_command(CMD, &dap->ap[apsel]);
|
||||||
}
|
}
|
||||||
|
|
||||||
COMMAND_HANDLER(dap_baseaddr_command)
|
COMMAND_HANDLER(dap_baseaddr_command)
|
||||||
|
|
|
@ -526,7 +526,7 @@ extern const struct command_registration dap_instance_commands[];
|
||||||
struct arm_dap_object;
|
struct arm_dap_object;
|
||||||
extern struct adiv5_dap *dap_instance_by_jim_obj(Jim_Interp *interp, Jim_Obj *o);
|
extern struct adiv5_dap *dap_instance_by_jim_obj(Jim_Interp *interp, Jim_Obj *o);
|
||||||
extern struct adiv5_dap *adiv5_get_dap(struct arm_dap_object *obj);
|
extern struct adiv5_dap *adiv5_get_dap(struct arm_dap_object *obj);
|
||||||
extern int dap_info_command(struct command_context *cmd_ctx,
|
extern int dap_info_command(struct command_invocation *cmd,
|
||||||
struct adiv5_ap *ap);
|
struct adiv5_ap *ap);
|
||||||
extern int dap_register_commands(struct command_context *cmd_ctx);
|
extern int dap_register_commands(struct command_context *cmd_ctx);
|
||||||
extern const char *adiv5_dap_name(struct adiv5_dap *self);
|
extern const char *adiv5_dap_name(struct adiv5_dap *self);
|
||||||
|
|
|
@ -331,7 +331,7 @@ COMMAND_HANDLER(handle_dap_info_command)
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return dap_info_command(CMD_CTX, &dap->ap[apsel]);
|
return dap_info_command(CMD, &dap->ap[apsel]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct command_registration dap_subcommand_handlers[] = {
|
static const struct command_registration dap_subcommand_handlers[] = {
|
||||||
|
|
Loading…
Reference in New Issue