summaryrefslogtreecommitdiff
path: root/src/target/target.c
diff options
context:
space:
mode:
authorØyvind Harboe <oyvind.harboe@zylin.com>2009-10-27 14:02:16 +0100
committerØyvind Harboe <oyvind.harboe@zylin.com>2009-11-05 09:53:31 +0100
commitd269122f91efaf2f745424c215fabb758b7e7ea0 (patch)
tree7e692e954a34ca07243ff9d9fc06db186f8c9fd1 /src/target/target.c
parent972924b2ad4bb7da34e331d4854b5f3d3e9e7260 (diff)
downloadopenocd+libswd-d269122f91efaf2f745424c215fabb758b7e7ea0.tar.gz
openocd+libswd-d269122f91efaf2f745424c215fabb758b7e7ea0.tar.bz2
openocd+libswd-d269122f91efaf2f745424c215fabb758b7e7ea0.tar.xz
openocd+libswd-d269122f91efaf2f745424c215fabb758b7e7ea0.zip
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 <oyvind.harboe@zylin.com>
Diffstat (limited to 'src/target/target.c')
-rw-r--r--src/target/target.c38
1 files changed, 33 insertions, 5 deletions
diff --git a/src/target/target.c b/src/target/target.c
index 5cf70118..2a66fcf1 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;
}