MIPS: merge mips fast_data patch from David N. Claffey
[fw/openocd] / src / target / armv7m.c
index 9fd24e9e70221d709bf4b2ea22743d15c489b273..9d8132d43b665c635f6ad506f1f30c836f9a48de 100644 (file)
@@ -480,8 +480,7 @@ int armv7m_arch_state(struct target *target)
 
        LOG_USER("target halted due to %s, current mode: %s %s\n"
                "xPSR: %#8.8" PRIx32 " pc: %#8.8" PRIx32 " %csp: %#8.8" PRIx32,
-               Jim_Nvp_value2name_simple(nvp_target_debug_reason,
-                               target->debug_reason)->name,
+               debug_reason_name(target),
                armv7m_mode_strings[armv7m->core_mode],
                armv7m_exception_string(armv7m->exception_number),
                buf_get_u32(armv7m->core_cache->reg_list[ARMV7M_xPSR].value, 0, 32),
@@ -596,7 +595,7 @@ int armv7m_checksum_memory(struct target *target,
        }
 
        /* convert flash writing code into a buffer in target endianness */
-       for (i = 0; i < (sizeof(cortex_m3_crc_code)/sizeof(uint16_t)); i++)
+       for (i = 0; i < ARRAY_SIZE(cortex_m3_crc_code); i++)
                if ((retval = target_write_u16(target, crc_algorithm->address + i*sizeof(uint16_t), cortex_m3_crc_code[i])) != ERROR_OK)
                {
                        return retval;
@@ -659,7 +658,7 @@ int armv7m_blank_check_memory(struct target *target,
        }
 
        /* convert flash writing code into a buffer in target endianness */
-       for (i = 0; i < (sizeof(erase_check_code)/sizeof(uint16_t)); i++)
+       for (i = 0; i < ARRAY_SIZE(erase_check_code); i++)
                target_write_u16(target, erase_check_algorithm->address + i*sizeof(uint16_t), erase_check_code[i]);
 
        armv7m_info.common_magic = ARMV7M_COMMON_MAGIC;
@@ -732,7 +731,12 @@ COMMAND_HANDLER(handle_dap_baseaddr_command)
        if (apselsave != apsel)
                dap_ap_select(swjdp, apsel);
 
-       dap_ap_read_reg_u32(swjdp, 0xF8, &baseaddr);
+       /* NOTE:  assumes we're talking to a MEM-AP, which
+        * has a base address.  There are other kinds of AP,
+        * though they're not common for now.  This should
+        * use the ID register to verify it's a MEM-AP.
+        */
+       dap_ap_read_reg_u32(swjdp, AP_REG_BASE, &baseaddr);
        retval = swjdp_transaction_endcheck(swjdp);
        command_print(CMD_CTX, "0x%8.8" PRIx32 "", baseaddr);
 
@@ -795,34 +799,49 @@ COMMAND_HANDLER(handle_dap_info_command)
        return dap_info_command(CMD_CTX, swjdp, apsel);
 }
 
-/** Registers commands used to access DAP resources. */
-int armv7m_register_commands(struct command_context *cmd_ctx)
-{
-       struct command *arm_adi_v5_dap_cmd;
-
-       arm_adi_v5_dap_cmd = COMMAND_REGISTER(cmd_ctx, NULL, "dap",
-                       NULL, COMMAND_ANY,
-                       "cortex dap specific commands");
-
-       COMMAND_REGISTER(cmd_ctx, arm_adi_v5_dap_cmd, "info",
-                       handle_dap_info_command, COMMAND_EXEC,
-                       "Displays dap info for ap [num],"
-                       "default currently selected AP");
-       COMMAND_REGISTER(cmd_ctx, arm_adi_v5_dap_cmd, "apsel",
-                       handle_dap_apsel_command, COMMAND_EXEC,
-                       "Select a different AP [num] (default 0)");
-       COMMAND_REGISTER(cmd_ctx, arm_adi_v5_dap_cmd, "apid",
-                       handle_dap_apid_command, COMMAND_EXEC,
-                       "Displays id reg from AP [num], "
-                       "default currently selected AP");
-       COMMAND_REGISTER(cmd_ctx, arm_adi_v5_dap_cmd, "baseaddr",
-                       handle_dap_baseaddr_command, COMMAND_EXEC,
-                       "Displays debug base address from AP [num],"
-                       "default currently selected AP");
-       COMMAND_REGISTER(cmd_ctx, arm_adi_v5_dap_cmd, "memaccess",
-                       handle_dap_memaccess_command, COMMAND_EXEC,
-                       "set/get number of extra tck for mem-ap "
-                       "memory bus access [0-255]");
-
-       return ERROR_OK;
-}
+static const struct command_registration armv7m_exec_command_handlers[] = {
+       {
+               .name = "info",
+               .handler = &handle_dap_info_command,
+               .mode = COMMAND_EXEC,
+               .help = "dap info for ap [num], "
+                       "default currently selected AP",
+       },
+       {
+               .name = "apsel",
+               .handler = &handle_dap_apsel_command,
+               .mode = COMMAND_EXEC,
+               .help = "select a different AP [num] (default 0)",
+       },
+       {
+               .name = "apid",
+               .handler = &handle_dap_apid_command,
+               .mode = COMMAND_EXEC,
+               .help = "return id reg from AP [num], "
+                       "default currently selected AP",
+       },
+       {
+               .name = "baseaddr",
+               .handler = &handle_dap_baseaddr_command,
+               .mode = COMMAND_EXEC,
+               .help = "return debug base address from AP [num], "
+                       "default currently selected AP",
+       },
+       {
+               .name = "memaccess",
+               .handler = &handle_dap_memaccess_command,
+               .mode = COMMAND_EXEC,
+               .help = "set/get number of extra tck for mem-ap memory "
+                       "bus access [0-255]",
+       },
+       COMMAND_REGISTRATION_DONE
+};
+const struct command_registration armv7m_command_handlers[] = {
+       {
+               .name = "dap",
+               .mode = COMMAND_EXEC,
+               .help = "Cortex DAP command group",
+               .chain = armv7m_exec_command_handlers,
+       },
+       COMMAND_REGISTRATION_DONE
+};