From: Øyvind H. <go...@us...> - 2009-11-05 09:54:45
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Main OpenOCD repository". The branch, master has been updated via d269122f91efaf2f745424c215fabb758b7e7ea0 (commit) via 972924b2ad4bb7da34e331d4854b5f3d3e9e7260 (commit) from af66678c9a76f3bdab23beb3ffa7d7d53423bdfa (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit d269122f91efaf2f745424c215fabb758b7e7ea0 Author: Ãyvind Harboe <oyv...@zy...> Date: Tue Oct 27 14:02:16 2009 +0100 target: add target->type->has_mmu fn. improve default target->read/write_phys_memory, produce more sensible error messages if the mmu interface functions have not been implemented yet vs. will not be implemented(e.g. cortex m3). Signed-off-by: Ãyvind Harboe <oyv...@zy...> diff --git a/src/target/cortex_m3.c b/src/target/cortex_m3.c index ff97792..1afa29f 100644 --- a/src/target/cortex_m3.c +++ b/src/target/cortex_m3.c @@ -52,6 +52,12 @@ extern uint8_t armv7m_gdb_dummy_cpsr_value[]; extern reg_t armv7m_gdb_dummy_cpsr_reg; #endif +static int cortex_m3_has_mmu(struct target_s *target, bool *has_mmu) +{ + *has_mmu = false; + return ERROR_OK; +} + static int cortexm3_dap_read_coreregister_u32(swjdp_common_t *swjdp, uint32_t *value, int regnum) { @@ -1837,6 +1843,7 @@ target_type_t cortexm3_target = .register_commands = cortex_m3_register_commands, .target_create = cortex_m3_target_create, .init_target = cortex_m3_init_target, + .has_mmu = cortex_m3_has_mmu, .examine = cortex_m3_examine, }; diff --git a/src/target/target.c b/src/target/target.c index 5cf7011..2a66fcf 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -496,7 +496,13 @@ static int default_virt2phys(struct target_s *target, uint32_t virtual, uint32_t static int default_mmu(struct target_s *target, int *enabled) { - *enabled = 0; + LOG_ERROR("Not implemented."); + return ERROR_FAIL; +} + +static int default_has_mmu(struct target_s *target, bool *has_mmu) +{ + *has_mmu = true; return ERROR_OK; } @@ -743,14 +749,32 @@ int target_mcr(struct target_s *target, int cpnum, uint32_t op1, uint32_t op2, u static int default_read_phys_memory(struct target_s *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer) { - LOG_ERROR("Not implemented"); - return ERROR_FAIL; + int retval; + bool mmu; + retval = target->type->has_mmu(target, &mmu); + if (retval != ERROR_OK) + return retval; + if (mmu) + { + LOG_ERROR("Not implemented"); + return ERROR_FAIL; + } + return target_read_memory(target, address, size, count, buffer); } static int default_write_phys_memory(struct target_s *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer) { - LOG_ERROR("Not implemented"); - return ERROR_FAIL; + int retval; + bool mmu; + retval = target->type->has_mmu(target, &mmu); + if (retval != ERROR_OK) + return retval; + if (mmu) + { + LOG_ERROR("Not implemented"); + return ERROR_FAIL; + } + return target_write_memory(target, address, size, count, buffer); } @@ -816,6 +840,10 @@ int target_init(struct command_context_s *cmd_ctx) { target->type->mmu = default_mmu; } + if (target->type->has_mmu == NULL) + { + target->type->has_mmu = default_has_mmu; + } target = target->next; } diff --git a/src/target/target_type.h b/src/target/target_type.h index dd469db..23ed40e 100644 --- a/src/target/target_type.h +++ b/src/target/target_type.h @@ -199,8 +199,16 @@ struct target_type_s */ int (*write_phys_memory)(struct target_s *target, uint32_t phys_address, uint32_t size, uint32_t count, uint8_t *buffer); + /* returns true if the mmu is enabled. Default implementation returns error. */ int (*mmu)(struct target_s *target, int *enabled); + /* returns true if the target has an mmu. This can only be + determined after the target has been examined. + + Default implementation returns success and has_mmu==true. + */ + int (*has_mmu)(struct target_s *target, bool *has_mmu); + /* Read coprocessor - arm specific. Default implementation returns error. */ int (*mrc)(struct target_s *target, int cpnum, uint32_t op1, uint32_t op2, uint32_t CRn, uint32_t CRm, uint32_t *value); commit 972924b2ad4bb7da34e331d4854b5f3d3e9e7260 Author: Ãyvind Harboe <oyv...@zy...> Date: Mon Oct 26 21:47:41 2009 +0100 Make default implementation of mdw/mmw phys return error 'not implemented' diff --git a/src/target/target.c b/src/target/target.c index 9289d37..5cf7011 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -741,6 +741,18 @@ int target_mcr(struct target_s *target, int cpnum, uint32_t op1, uint32_t op2, u return target->type->mcr(target, cpnum, op1, op2, CRn, CRm, value); } +static int default_read_phys_memory(struct target_s *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer) +{ + LOG_ERROR("Not implemented"); + return ERROR_FAIL; +} + +static int default_write_phys_memory(struct target_s *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer) +{ + LOG_ERROR("Not implemented"); + return ERROR_FAIL; +} + int target_init(struct command_context_s *cmd_ctx) { @@ -769,12 +781,12 @@ int target_init(struct command_context_s *cmd_ctx) if (target->type->read_phys_memory == NULL) { - target->type->read_phys_memory = target->type->read_memory; + target->type->read_phys_memory = default_read_phys_memory; } if (target->type->write_phys_memory == NULL) { - target->type->write_phys_memory = target->type->write_memory; + target->type->write_phys_memory = default_write_phys_memory; } if (target->type->mcr == NULL) ----------------------------------------------------------------------- Summary of changes: src/target/cortex_m3.c | 7 +++++++ src/target/target.c | 46 +++++++++++++++++++++++++++++++++++++++++++--- src/target/target_type.h | 8 ++++++++ 3 files changed, 58 insertions(+), 3 deletions(-) hooks/post-receive -- Main OpenOCD repository |