aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntonio Borneo <borneo.antonio@gmail.com>2022-01-16 14:02:43 +0100
committerAntonio Borneo <borneo.antonio@gmail.com>2022-05-14 08:54:36 +0000
commitd01b3d69ec17da19576c85bb36245399211eb620 (patch)
treee0a70c739f93b98d446adb6bf2bb96fb8cd5e284
parentc83b94b2c8a77adfe7febc2e340ffcd9ce9a6c97 (diff)
downloadriscv-openocd-d01b3d69ec17da19576c85bb36245399211eb620.zip
riscv-openocd-d01b3d69ec17da19576c85bb36245399211eb620.tar.gz
riscv-openocd-d01b3d69ec17da19576c85bb36245399211eb620.tar.bz2
arm_adi_v5: separate ROM table parsing from command output [3/3]
This change only targets the output of rtp_rom_loop(). Change-Id: If9ac013798923428c3b897a969887e98b6935a2b Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: https://review.openocd.org/c/openocd/+/6821 Tested-by: jenkins
-rw-r--r--src/target/arm_adi_v5.c58
1 files changed, 41 insertions, 17 deletions
diff --git a/src/target/arm_adi_v5.c b/src/target/arm_adi_v5.c
index b6053b0..60bd546 100644
--- a/src/target/arm_adi_v5.c
+++ b/src/target/arm_adi_v5.c
@@ -1491,6 +1491,9 @@ static int dap_info_mem_ap_header(struct command_invocation *cmd,
target_addr_t dbgbase, uint32_t apid);
static int dap_info_cs_component(struct command_invocation *cmd,
int retval, struct cs_component_vals *v, int depth);
+static int dap_info_rom_table_entry(struct command_invocation *cmd,
+ int retval, int depth,
+ unsigned int offset, uint32_t romentry);
static int rtp_cs_component(struct command_invocation *cmd,
struct adiv5_ap *ap, target_addr_t dbgbase, int depth);
@@ -1501,11 +1504,6 @@ static int rtp_rom_loop(struct command_invocation *cmd,
{
assert(IS_ALIGNED(base_address, ARM_CS_ALIGN));
- char tabs[16] = "";
-
- if (depth)
- snprintf(tabs, sizeof(tabs), "[L%02d] ", depth);
-
unsigned int offset = 0;
while (max_entries--) {
uint32_t romentry;
@@ -1513,26 +1511,20 @@ static int rtp_rom_loop(struct command_invocation *cmd,
int retval = mem_ap_read_atomic_u32(ap, base_address + offset, &romentry);
offset += 4;
- if (retval != ERROR_OK) {
+ if (retval != ERROR_OK)
LOG_DEBUG("Failed read ROM table entry");
- command_print(cmd, "\t%sROMTABLE[0x%x] Read error", tabs, saved_offset);
- command_print(cmd, "\t\tUnable to continue");
- command_print(cmd, "\t%s\tStop parsing of ROM table", tabs);
- return retval;
- }
- command_print(cmd, "\t%sROMTABLE[0x%x] = 0x%08" PRIx32,
- tabs, saved_offset, romentry);
+ retval = dap_info_rom_table_entry(cmd, retval, depth, saved_offset, romentry);
+ if (retval != ERROR_OK)
+ return retval;
if (romentry == 0) {
- command_print(cmd, "\t%s\tEnd of ROM table", tabs);
+ /* End of ROM table */
break;
}
- if (!(romentry & ARM_CS_ROMENTRY_PRESENT)) {
- command_print(cmd, "\t\tComponent not present");
+ if (!(romentry & ARM_CS_ROMENTRY_PRESENT))
continue;
- }
/* Recurse. "romentry" is signed */
target_addr_t component_base = base_address + (int32_t)(romentry & ARM_CS_ROMENTRY_OFFSET_MASK);
@@ -1753,6 +1745,38 @@ static int dap_info_cs_component(struct command_invocation *cmd,
return ERROR_OK;
}
+static int dap_info_rom_table_entry(struct command_invocation *cmd,
+ int retval, int depth,
+ unsigned int offset, uint32_t romentry)
+{
+ char tabs[16] = "";
+
+ if (depth)
+ snprintf(tabs, sizeof(tabs), "[L%02d] ", depth);
+
+ if (retval != ERROR_OK) {
+ command_print(cmd, "\t%sROMTABLE[0x%x] Read error", tabs, offset);
+ command_print(cmd, "\t\tUnable to continue");
+ command_print(cmd, "\t%s\tStop parsing of ROM table", tabs);
+ return retval;
+ }
+
+ command_print(cmd, "\t%sROMTABLE[0x%x] = 0x%08" PRIx32,
+ tabs, offset, romentry);
+
+ if (romentry == 0) {
+ command_print(cmd, "\t%s\tEnd of ROM table", tabs);
+ return ERROR_OK;
+ }
+
+ if (!(romentry & ARM_CS_ROMENTRY_PRESENT)) {
+ command_print(cmd, "\t\tComponent not present");
+ return ERROR_OK;
+ }
+
+ return ERROR_OK;
+}
+
enum adiv5_cfg_param {
CFG_DAP,
CFG_AP_NUM,