I'm trying to break down the patches from Magnus a bit.
This patch is a trivial re-factoring, but getting this committed should
reduce the rest of the patch to Cortex A8 specfic stuff. Magnus
felt that it was ready to commit.
If we can have some smoke testing it should be alright to commit.
Comments?
http://lists.berlios.de/pipermail/openocd-development/2009-July/009314.html
>From Magnus:
PATCH AGAINST 2294
arm_adi_v7m_R2294.patch
Index: src/target/arm_adi_v5.c
Index: src/target/arm_adi_v5.h
Index: src/target/armv7m.c
The changes in these files move the dap command handler implementations
to arm_adi_v5.c, leaving just thin wrappers in armv7m.c.
There should be no change in functionality here. Should be harmless to
commit.
--
Øyvind Harboe
Embedded software and hardware consulting services
http://www.zylin.com
### Eclipse Workspace Patch 1.0
#P openocd
Index: src/target/arm_adi_v5.c
===================================================================
--- src/target/arm_adi_v5.c (revision 2529)
+++ src/target/arm_adi_v5.c (working copy)
@@ -1129,3 +1129,95 @@
return ERROR_OK;
}
+int dap_baseaddr_command(struct command_context_s *cmd_ctx, swjdp_common_t
*swjdp, char **args, int argc)
+{
+ uint32_t apsel, apselsave, baseaddr;
+ int retval;
+
+ apsel = swjdp->apsel;
+ apselsave = swjdp->apsel;
+ if (argc > 0)
+ {
+ apsel = strtoul(args[0], NULL, 0);
+ }
+ if (apselsave != apsel)
+ {
+ dap_ap_select(swjdp, apsel);
+ }
+
+ dap_ap_read_reg_u32(swjdp, 0xF8, &baseaddr);
+ retval = swjdp_transaction_endcheck(swjdp);
+ command_print(cmd_ctx, "0x%8.8x", baseaddr);
+
+ if (apselsave != apsel)
+ {
+ dap_ap_select(swjdp, apselsave);
+ }
+
+ return retval;
+}
+
+int dap_memaccess_command(struct command_context_s *cmd_ctx, swjdp_common_t
*swjdp, char **args, int argc)
+{
+ uint32_t memaccess_tck;
+
+ memaccess_tck = swjdp->memaccess_tck;
+ if (argc > 0)
+ {
+ memaccess_tck = strtoul(args[0], NULL, 0);
+ }
+
+ swjdp->memaccess_tck = memaccess_tck;
+ command_print(cmd_ctx, "memory bus access delay set to %i tck",
swjdp->memaccess_tck);
+
+ return ERROR_OK;
+}
+
+int dap_apsel_command(struct command_context_s *cmd_ctx, swjdp_common_t
*swjdp, char **args, int argc)
+{
+ uint32_t apsel, apid;
+ int retval;
+
+ apsel = 0;
+ if (argc > 0)
+ {
+ apsel = strtoul(args[0], NULL, 0);
+ }
+
+ dap_ap_select(swjdp, apsel);
+ dap_ap_read_reg_u32(swjdp, 0xFC, &apid);
+ retval = swjdp_transaction_endcheck(swjdp);
+ command_print(cmd_ctx, "ap %i selected, identification register
0x%8.8x", apsel, apid);
+
+ return retval;
+}
+
+int dap_apid_command(struct command_context_s *cmd_ctx, swjdp_common_t *swjdp,
char **args, int argc)
+{
+ uint32_t apsel, apselsave, apid;
+ int retval;
+
+ apsel = swjdp->apsel;
+ apselsave = swjdp->apsel;
+ if (argc > 0)
+ {
+ apsel = strtoul(args[0], NULL, 0);
+ }
+
+ if (apselsave != apsel)
+ {
+ dap_ap_select(swjdp, apsel);
+ }
+
+ dap_ap_read_reg_u32(swjdp, 0xFC, &apid);
+ retval = swjdp_transaction_endcheck(swjdp);
+ command_print(cmd_ctx, "0x%8.8x", apid);
+ if (apselsave != apsel)
+ {
+ dap_ap_select(swjdp, apselsave);
+ }
+
+ return retval;
+}
+
+
Index: src/target/arm_adi_v5.h
===================================================================
--- src/target/arm_adi_v5.h (revision 2529)
+++ src/target/arm_adi_v5.h (working copy)
@@ -145,13 +145,12 @@
/* Initialisation of the debug system, power domains and registers */
extern int ahbap_debugport_init(swjdp_common_t *swjdp);
-extern int dap_info_command(struct command_context_s *cmd_ctx, swjdp_common_t
*swjdp, int apsel);
+
/* Commands for user dap access */
-/* Currently implemented in armv7m, needs armv7m target structure to find jtag
and swjdp structures */
-extern int handle_dap_info_command(struct command_context_s *cmd_ctx, char
*cmd, char **args, int argc);
-extern int handle_dap_apsel_command(struct command_context_s *cmd_ctx, char
*cmd, char **args, int argc);
-extern int handle_dap_apid_command(struct command_context_s *cmd_ctx, char
*cmd, char **args, int argc);
-extern int handle_dap_baseaddr_command(struct command_context_s *cmd_ctx, char
*cmd, char **args, int argc);
-extern int handle_dap_memaccess_command(struct command_context_s *cmd_ctx,
char *cmd, char **args, int argc);
+extern int dap_info_command(struct command_context_s *cmd_ctx, swjdp_common_t
*swjdp, int apsel);
+extern int dap_baseaddr_command(struct command_context_s *cmd_ctx,
swjdp_common_t *swjdp, char **args, int argc);
+extern int dap_memaccess_command(struct command_context_s *cmd_ctx,
swjdp_common_t *swjdp, char **args, int argc);
+extern int dap_apsel_command(struct command_context_s *cmd_ctx, swjdp_common_t
*swjdp, char **args, int argc);
+extern int dap_apid_command(struct command_context_s *cmd_ctx, swjdp_common_t
*swjdp, char **args, int argc);
#endif
Index: src/target/armv7m.c
===================================================================
--- src/target/armv7m.c (revision 2529)
+++ src/target/armv7m.c (working copy)
@@ -539,20 +539,6 @@
return ERROR_OK;
}
-int armv7m_register_commands(struct command_context_s *cmd_ctx)
-{
- command_t *arm_adi_v5_dap_cmd;
-
- arm_adi_v5_dap_cmd = register_command(cmd_ctx, NULL, "dap", NULL,
COMMAND_ANY, "cortex dap specific commands");
- register_command(cmd_ctx, arm_adi_v5_dap_cmd, "info",
handle_dap_info_command, COMMAND_EXEC, "Displays dap info for ap [num], default
currently selected AP");
- register_command(cmd_ctx, arm_adi_v5_dap_cmd, "apsel",
handle_dap_apsel_command, COMMAND_EXEC, "Select a different AP [num] (default
0)");
- register_command(cmd_ctx, arm_adi_v5_dap_cmd, "apid",
handle_dap_apid_command, COMMAND_EXEC, "Displays id reg from AP [num], default
currently selected AP");
- register_command(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");
- register_command(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;
-}
-
int armv7m_checksum_memory(struct target_s *target, uint32_t address, uint32_t
count, uint32_t* checksum)
{
working_area_t *crc_algorithm;
@@ -739,74 +725,31 @@
target_t *target = get_current_target(cmd_ctx);
armv7m_common_t *armv7m = target->arch_info;
swjdp_common_t *swjdp = &armv7m->swjdp_info;
- uint32_t apsel, apselsave, apid;
- int retval;
-
- apsel = swjdp->apsel;
- apselsave = swjdp->apsel;
- if (argc > 0)
- {
- apsel = strtoul(args[0], NULL, 0);
- }
-
- if (apselsave != apsel)
- {
- dap_ap_select(swjdp, apsel);
- }
- dap_ap_read_reg_u32(swjdp, 0xFC, &apid);
- retval = swjdp_transaction_endcheck(swjdp);
- command_print(cmd_ctx, "0x%8.8" PRIx32 "", apid);
- if (apselsave != apsel)
- {
- dap_ap_select(swjdp, apselsave);
- }
-
- return retval;
+ return dap_apid_command(cmd_ctx, swjdp, args, argc);
+;
}
-int handle_dap_apsel_command(struct command_context_s *cmd_ctx, char *cmd,
char **args, int argc)
+static int handle_dap_apsel_command(struct command_context_s *cmd_ctx, char
*cmd, char **args, int argc)
{
target_t *target = get_current_target(cmd_ctx);
armv7m_common_t *armv7m = target->arch_info;
swjdp_common_t *swjdp = &armv7m->swjdp_info;
- uint32_t apsel, apid;
- int retval;
-
- apsel = 0;
- if (argc > 0)
- {
- apsel = strtoul(args[0], NULL, 0);
- }
-
- dap_ap_select(swjdp, apsel);
- dap_ap_read_reg_u32(swjdp, 0xFC, &apid);
- retval = swjdp_transaction_endcheck(swjdp);
- command_print(cmd_ctx, "ap %i selected, identification register 0x%8.8"
PRIx32 "", (int)apsel, apid);
- return retval;
+ return dap_apsel_command(cmd_ctx, swjdp, args, argc);
}
-int handle_dap_memaccess_command(struct command_context_s *cmd_ctx, char *cmd,
char **args, int argc)
+static int handle_dap_memaccess_command(struct command_context_s *cmd_ctx,
char *cmd, char **args, int argc)
{
target_t *target = get_current_target(cmd_ctx);
armv7m_common_t *armv7m = target->arch_info;
swjdp_common_t *swjdp = &armv7m->swjdp_info;
- uint32_t memaccess_tck;
-
- memaccess_tck = swjdp->memaccess_tck;
- if (argc > 0)
- {
- memaccess_tck = strtoul(args[0], NULL, 0);
- }
- swjdp->memaccess_tck = memaccess_tck;
- command_print(cmd_ctx, "memory bus access delay set to %i tck",
(int)(swjdp->memaccess_tck));
-
- return ERROR_OK;
+ return dap_memaccess_command( cmd_ctx, swjdp, args, argc);
}
-int handle_dap_info_command(struct command_context_s *cmd_ctx, char *cmd, char
**args, int argc)
+
+static int handle_dap_info_command(struct command_context_s *cmd_ctx, char
*cmd, char **args, int argc)
{
target_t *target = get_current_target(cmd_ctx);
armv7m_common_t *armv7m = target->arch_info;
@@ -825,3 +768,16 @@
return retval;
}
+int armv7m_register_commands(struct command_context_s *cmd_ctx)
+{
+ command_t *arm_adi_v5_dap_cmd;
+
+ arm_adi_v5_dap_cmd = register_command(cmd_ctx, NULL, "dap", NULL,
COMMAND_ANY, "cortex dap specific commands");
+ register_command(cmd_ctx, arm_adi_v5_dap_cmd, "info",
handle_dap_info_command, COMMAND_EXEC, "Displays dap info for ap [num], default
currently selected AP");
+ register_command(cmd_ctx, arm_adi_v5_dap_cmd, "apsel",
handle_dap_apsel_command, COMMAND_EXEC, "Select a different AP [num] (default
0)");
+ register_command(cmd_ctx, arm_adi_v5_dap_cmd, "apid",
handle_dap_apid_command, COMMAND_EXEC, "Displays id reg from AP [num], default
currently selected AP");
+ register_command(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");
+ register_command(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;
+}
_______________________________________________
Openocd-development mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/openocd-development