diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/target/cortex_a8.c | 188 | ||||
-rw-r--r-- | src/target/cortex_a8.h | 6 |
2 files changed, 82 insertions, 112 deletions
diff --git a/src/target/cortex_a8.c b/src/target/cortex_a8.c index 141b4397..a8cb37d3 100644 --- a/src/target/cortex_a8.c +++ b/src/target/cortex_a8.c @@ -40,81 +40,17 @@ #include "target_request.h" #include "target_type.h" -/* cli handling */ -int cortex_a8_register_commands(struct command_context_s *cmd_ctx); - -/* forward declarations */ -int cortex_a8_target_create(struct target_s *target, Jim_Interp *interp); -int cortex_a8_init_target(struct command_context_s *cmd_ctx, - struct target_s *target); -int cortex_a8_examine(struct target_s *target); -int cortex_a8_poll(target_t *target); -int cortex_a8_halt(target_t *target); -int cortex_a8_resume(struct target_s *target, int current, uint32_t address, - int handle_breakpoints, int debug_execution); -int cortex_a8_step(struct target_s *target, int current, uint32_t address, - int handle_breakpoints); -int cortex_a8_debug_entry(target_t *target); -int cortex_a8_restore_context(target_t *target); -int cortex_a8_bulk_write_memory(target_t *target, uint32_t address, - uint32_t count, uint8_t *buffer); -int cortex_a8_set_breakpoint(struct target_s *target, +static int cortex_a8_poll(target_t *target); +static int cortex_a8_debug_entry(target_t *target); +static int cortex_a8_restore_context(target_t *target); +static int cortex_a8_set_breakpoint(struct target_s *target, breakpoint_t *breakpoint, uint8_t matchmode); -int cortex_a8_unset_breakpoint(struct target_s *target, breakpoint_t *breakpoint); -int cortex_a8_add_breakpoint(struct target_s *target, breakpoint_t *breakpoint); -int cortex_a8_remove_breakpoint(struct target_s *target, breakpoint_t *breakpoint); -int cortex_a8_dap_read_coreregister_u32(target_t *target, +static int cortex_a8_unset_breakpoint(struct target_s *target, + breakpoint_t *breakpoint); +static int cortex_a8_dap_read_coreregister_u32(target_t *target, uint32_t *value, int regnum); -int cortex_a8_dap_write_coreregister_u32(target_t *target, +static int cortex_a8_dap_write_coreregister_u32(target_t *target, uint32_t value, int regnum); -int cortex_a8_assert_reset(target_t *target); -int cortex_a8_deassert_reset(target_t *target); - -static int cortex_a8_mrc(target_t *target, int cpnum, uint32_t op1, - uint32_t op2, uint32_t CRn, uint32_t CRm, uint32_t *value); -static int cortex_a8_mcr(target_t *target, int cpnum, uint32_t op1, - uint32_t op2, uint32_t CRn, uint32_t CRm, uint32_t value); - -target_type_t cortexa8_target = -{ - .name = "cortex_a8", - - .poll = cortex_a8_poll, - .arch_state = armv7a_arch_state, - - .target_request_data = NULL, - - .halt = cortex_a8_halt, - .resume = cortex_a8_resume, - .step = cortex_a8_step, - - .assert_reset = cortex_a8_assert_reset, - .deassert_reset = cortex_a8_deassert_reset, - .soft_reset_halt = NULL, - - .get_gdb_reg_list = armv4_5_get_gdb_reg_list, - - .read_memory = cortex_a8_read_memory, - .write_memory = cortex_a8_write_memory, - .bulk_write_memory = cortex_a8_bulk_write_memory, - .checksum_memory = arm7_9_checksum_memory, - .blank_check_memory = arm7_9_blank_check_memory, - - .run_algorithm = armv4_5_run_algorithm, - - .add_breakpoint = cortex_a8_add_breakpoint, - .remove_breakpoint = cortex_a8_remove_breakpoint, - .add_watchpoint = NULL, - .remove_watchpoint = NULL, - - .register_commands = cortex_a8_register_commands, - .target_create = cortex_a8_target_create, - .init_target = cortex_a8_init_target, - .examine = cortex_a8_examine, - .mrc = cortex_a8_mrc, - .mcr = cortex_a8_mcr, -}; - /* * FIXME do topology discovery using the ROM; don't * assume this is an OMAP3. @@ -126,7 +62,7 @@ target_type_t cortexa8_target = /* * Cortex-A8 Basic debug access, very low level assumes state is saved */ -int cortex_a8_init_debug_access(target_t *target) +static int cortex_a8_init_debug_access(target_t *target) { struct armv7a_common_s *armv7a = target_to_armv7a(target); swjdp_common_t *swjdp = &armv7a->swjdp_info; @@ -195,7 +131,7 @@ int cortex_a8_exec_opcode(target_t *target, uint32_t opcode) Read core register with very few exec_opcode, fast but needs work_area. This can cause problems with MMU active. **************************************************************************/ -int cortex_a8_read_regs_through_mem(target_t *target, uint32_t address, +static int cortex_a8_read_regs_through_mem(target_t *target, uint32_t address, uint32_t * regfile) { int retval = ERROR_OK; @@ -212,7 +148,7 @@ int cortex_a8_read_regs_through_mem(target_t *target, uint32_t address, return retval; } -int cortex_a8_read_cp(target_t *target, uint32_t *value, uint8_t CP, +static int cortex_a8_read_cp(target_t *target, uint32_t *value, uint8_t CP, uint8_t op1, uint8_t CRn, uint8_t CRm, uint8_t op2) { int retval; @@ -230,7 +166,7 @@ int cortex_a8_read_cp(target_t *target, uint32_t *value, uint8_t CP, return retval; } -int cortex_a8_write_cp(target_t *target, uint32_t value, +static int cortex_a8_write_cp(target_t *target, uint32_t value, uint8_t CP, uint8_t op1, uint8_t CRn, uint8_t CRm, uint8_t op2) { int retval; @@ -259,13 +195,13 @@ int cortex_a8_write_cp(target_t *target, uint32_t value, return retval; } -int cortex_a8_read_cp15(target_t *target, uint32_t op1, uint32_t op2, +static int cortex_a8_read_cp15(target_t *target, uint32_t op1, uint32_t op2, uint32_t CRn, uint32_t CRm, uint32_t *value) { return cortex_a8_read_cp(target, value, 15, op1, CRn, CRm, op2); } -int cortex_a8_write_cp15(target_t *target, uint32_t op1, uint32_t op2, +static int cortex_a8_write_cp15(target_t *target, uint32_t op1, uint32_t op2, uint32_t CRn, uint32_t CRm, uint32_t value) { return cortex_a8_write_cp(target, value, 15, op1, CRn, CRm, op2); @@ -293,7 +229,7 @@ static int cortex_a8_mcr(target_t *target, int cpnum, uint32_t op1, uint32_t op2 -int cortex_a8_dap_read_coreregister_u32(target_t *target, +static int cortex_a8_dap_read_coreregister_u32(target_t *target, uint32_t *value, int regnum) { int retval = ERROR_OK; @@ -335,7 +271,7 @@ int cortex_a8_dap_read_coreregister_u32(target_t *target, return retval; } -int cortex_a8_dap_write_coreregister_u32(target_t *target, uint32_t value, int regnum) +static int cortex_a8_dap_write_coreregister_u32(target_t *target, uint32_t value, int regnum) { int retval = ERROR_OK; uint8_t Rd = regnum&0xFF; @@ -384,7 +320,7 @@ int cortex_a8_dap_write_coreregister_u32(target_t *target, uint32_t value, int r } /* Write to memory mapped registers directly with no cache or mmu handling */ -int cortex_a8_dap_write_memap_register_u32(target_t *target, uint32_t address, uint32_t value) +static int cortex_a8_dap_write_memap_register_u32(target_t *target, uint32_t address, uint32_t value) { int retval; struct armv7a_common_s *armv7a = target_to_armv7a(target); @@ -399,7 +335,7 @@ int cortex_a8_dap_write_memap_register_u32(target_t *target, uint32_t address, u * Cortex-A8 Run control */ -int cortex_a8_poll(target_t *target) +static int cortex_a8_poll(target_t *target) { int retval = ERROR_OK; uint32_t dscr; @@ -464,7 +400,7 @@ int cortex_a8_poll(target_t *target) return retval; } -int cortex_a8_halt(target_t *target) +static int cortex_a8_halt(target_t *target) { int retval = ERROR_OK; uint32_t dscr; @@ -502,7 +438,7 @@ out: return retval; } -int cortex_a8_resume(struct target_s *target, int current, +static int cortex_a8_resume(struct target_s *target, int current, uint32_t address, int handle_breakpoints, int debug_execution) { struct armv7a_common_s *armv7a = target_to_armv7a(target); @@ -623,7 +559,7 @@ int cortex_a8_resume(struct target_s *target, int current, return ERROR_OK; } -int cortex_a8_debug_entry(target_t *target) +static int cortex_a8_debug_entry(target_t *target) { int i; uint32_t regfile[16], pc, cpsr, dscr; @@ -752,7 +688,7 @@ int cortex_a8_debug_entry(target_t *target) } -void cortex_a8_post_debug_entry(target_t *target) +static void cortex_a8_post_debug_entry(target_t *target) { struct cortex_a8_common_s *cortex_a8 = target_to_cortex_a8(target); struct armv7a_common_s *armv7a = &cortex_a8->armv7a_common; @@ -784,7 +720,7 @@ void cortex_a8_post_debug_entry(target_t *target) } -int cortex_a8_step(struct target_s *target, int current, uint32_t address, +static int cortex_a8_step(struct target_s *target, int current, uint32_t address, int handle_breakpoints) { struct armv7a_common_s *armv7a = target_to_armv7a(target); @@ -863,7 +799,7 @@ int cortex_a8_step(struct target_s *target, int current, uint32_t address, return ERROR_OK; } -int cortex_a8_restore_context(target_t *target) +static int cortex_a8_restore_context(target_t *target) { int i; uint32_t value; @@ -895,11 +831,11 @@ int cortex_a8_restore_context(target_t *target) } +#if 0 /* * Cortex-A8 Core register functions */ - -int cortex_a8_load_core_reg_u32(struct target_s *target, int num, +static int cortex_a8_load_core_reg_u32(struct target_s *target, int num, armv4_5_mode_t mode, uint32_t * value) { int retval; @@ -936,7 +872,7 @@ int cortex_a8_load_core_reg_u32(struct target_s *target, int num, return ERROR_OK; } -int cortex_a8_store_core_reg_u32(struct target_s *target, int num, +static int cortex_a8_store_core_reg_u32(struct target_s *target, int num, armv4_5_mode_t mode, uint32_t value) { int retval; @@ -975,9 +911,10 @@ int cortex_a8_store_core_reg_u32(struct target_s *target, int num, return ERROR_OK; } +#endif -int cortex_a8_read_core_reg(struct target_s *target, int num, +static int cortex_a8_read_core_reg(struct target_s *target, int num, enum armv4_5_mode mode) { uint32_t value; @@ -1023,7 +960,7 @@ int cortex_a8_write_core_reg(struct target_s *target, int num, */ /* Setup hardware Breakpoint Register Pair */ -int cortex_a8_set_breakpoint(struct target_s *target, +static int cortex_a8_set_breakpoint(struct target_s *target, breakpoint_t *breakpoint, uint8_t matchmode) { int retval; @@ -1098,7 +1035,7 @@ int cortex_a8_set_breakpoint(struct target_s *target, return ERROR_OK; } -int cortex_a8_unset_breakpoint(struct target_s *target, breakpoint_t *breakpoint) +static int cortex_a8_unset_breakpoint(struct target_s *target, breakpoint_t *breakpoint) { int retval; struct cortex_a8_common_s *cortex_a8 = target_to_cortex_a8(target); @@ -1173,7 +1110,7 @@ int cortex_a8_add_breakpoint(struct target_s *target, breakpoint_t *breakpoint) return ERROR_OK; } -int cortex_a8_remove_breakpoint(struct target_s *target, breakpoint_t *breakpoint) +static int cortex_a8_remove_breakpoint(struct target_s *target, breakpoint_t *breakpoint) { struct cortex_a8_common_s *cortex_a8 = target_to_cortex_a8(target); @@ -1203,7 +1140,7 @@ int cortex_a8_remove_breakpoint(struct target_s *target, breakpoint_t *breakpoin * Cortex-A8 Reset fuctions */ -int cortex_a8_assert_reset(target_t *target) +static int cortex_a8_assert_reset(target_t *target) { LOG_DEBUG(" "); @@ -1216,7 +1153,7 @@ int cortex_a8_assert_reset(target_t *target) return ERROR_OK; } -int cortex_a8_deassert_reset(target_t *target) +static int cortex_a8_deassert_reset(target_t *target) { LOG_DEBUG(" "); @@ -1238,7 +1175,7 @@ int cortex_a8_deassert_reset(target_t *target) * ap number for every access. */ -int cortex_a8_read_memory(struct target_s *target, uint32_t address, +static int cortex_a8_read_memory(struct target_s *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer) { struct armv7a_common_s *armv7a = target_to_armv7a(target); @@ -1327,14 +1264,14 @@ int cortex_a8_write_memory(struct target_s *target, uint32_t address, return retval; } -int cortex_a8_bulk_write_memory(target_t *target, uint32_t address, +static int cortex_a8_bulk_write_memory(target_t *target, uint32_t address, uint32_t count, uint8_t *buffer) { return cortex_a8_write_memory(target, address, 4, count, buffer); } -int cortex_a8_dcc_read(swjdp_common_t *swjdp, uint8_t *value, uint8_t *ctrl) +static int cortex_a8_dcc_read(swjdp_common_t *swjdp, uint8_t *value, uint8_t *ctrl) { #if 0 u16 dcrdr; @@ -1357,7 +1294,7 @@ int cortex_a8_dcc_read(swjdp_common_t *swjdp, uint8_t *value, uint8_t *ctrl) } -int cortex_a8_handle_target_request(void *priv) +static int cortex_a8_handle_target_request(void *priv) { target_t *target = priv; if (!target->type->examined) @@ -1399,7 +1336,7 @@ int cortex_a8_handle_target_request(void *priv) * Cortex-A8 target information and configuration */ -int cortex_a8_examine(struct target_s *target) +static int cortex_a8_examine(struct target_s *target) { struct cortex_a8_common_s *cortex_a8 = target_to_cortex_a8(target); struct armv7a_common_s *armv7a = &cortex_a8->armv7a_common; @@ -1496,7 +1433,7 @@ int cortex_a8_examine(struct target_s *target) * Cortex-A8 target creation and initialization */ -void cortex_a8_build_reg_cache(target_t *target) +static void cortex_a8_build_reg_cache(target_t *target) { reg_cache_t **cache_p = register_get_last_cache_p(&target->reg_cache); struct armv4_5_common_s *armv4_5 = target_to_armv4_5(target); @@ -1506,7 +1443,7 @@ void cortex_a8_build_reg_cache(target_t *target) } -int cortex_a8_init_target(struct command_context_s *cmd_ctx, +static int cortex_a8_init_target(struct command_context_s *cmd_ctx, struct target_s *target) { cortex_a8_build_reg_cache(target); @@ -1580,7 +1517,7 @@ LOG_DEBUG(" "); return ERROR_OK; } -int cortex_a8_target_create(struct target_s *target, Jim_Interp *interp) +static int cortex_a8_target_create(struct target_s *target, Jim_Interp *interp) { cortex_a8_common_t *cortex_a8 = calloc(1, sizeof(cortex_a8_common_t)); @@ -1611,7 +1548,7 @@ static int cortex_a8_handle_dbginit_command(struct command_context_s *cmd_ctx, } -int cortex_a8_register_commands(struct command_context_s *cmd_ctx) +static int cortex_a8_register_commands(struct command_context_s *cmd_ctx) { command_t *cortex_a8_cmd; int retval = ERROR_OK; @@ -1633,3 +1570,42 @@ int cortex_a8_register_commands(struct command_context_s *cmd_ctx) return retval; } + +target_type_t cortexa8_target = { + .name = "cortex_a8", + + .poll = &cortex_a8_poll, + .arch_state = &armv7a_arch_state, + + .target_request_data = NULL, + + .halt = &cortex_a8_halt, + .resume = &cortex_a8_resume, + .step = &cortex_a8_step, + + .assert_reset = &cortex_a8_assert_reset, + .deassert_reset = &cortex_a8_deassert_reset, + .soft_reset_halt = NULL, + + .get_gdb_reg_list = &armv4_5_get_gdb_reg_list, + + .read_memory = &cortex_a8_read_memory, + .write_memory = &cortex_a8_write_memory, + .bulk_write_memory = &cortex_a8_bulk_write_memory, + .checksum_memory = &arm7_9_checksum_memory, + .blank_check_memory = &arm7_9_blank_check_memory, + + .run_algorithm = &armv4_5_run_algorithm, + + .add_breakpoint = &cortex_a8_add_breakpoint, + .remove_breakpoint = &cortex_a8_remove_breakpoint, + .add_watchpoint = NULL, + .remove_watchpoint = NULL, + + .register_commands = &cortex_a8_register_commands, + .target_create = &cortex_a8_target_create, + .init_target = &cortex_a8_init_target, + .examine = &cortex_a8_examine, + .mrc = &cortex_a8_mrc, + .mcr = &cortex_a8_mcr, + }; diff --git a/src/target/cortex_a8.h b/src/target/cortex_a8.h index 42cb0624..869a6f5a 100644 --- a/src/target/cortex_a8.h +++ b/src/target/cortex_a8.h @@ -145,11 +145,5 @@ target_to_cortex_a8(struct target_s *target) int cortex_a8_init_arch_info(target_t *target, cortex_a8_common_t *cortex_a8, jtag_tap_t *tap); -int cortex_a8_read_memory(struct target_s *target, - uint32_t address, uint32_t size, - uint32_t count, uint8_t *buffer); -int cortex_a8_write_memory(struct target_s *target, - uint32_t address, uint32_t size, - uint32_t count, uint8_t *buffer); #endif /* CORTEX_A8_H */ |