summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Brownell <dbrownell@users.sourceforge.net>2009-12-18 09:53:59 -0800
committerDavid Brownell <dbrownell@users.sourceforge.net>2009-12-18 09:53:59 -0800
commit12b8c7b89b021c882e68bb0e28863c802fe36ac4 (patch)
treea3a751516e27c563121595fbe4ea4c7ea4a19d3f /src
parent85a4136d0baccf5c3b8f717710584f7faed0ca30 (diff)
downloadopenocd+libswd-12b8c7b89b021c882e68bb0e28863c802fe36ac4.tar.gz
openocd+libswd-12b8c7b89b021c882e68bb0e28863c802fe36ac4.tar.bz2
openocd+libswd-12b8c7b89b021c882e68bb0e28863c802fe36ac4.tar.xz
openocd+libswd-12b8c7b89b021c882e68bb0e28863c802fe36ac4.zip
XScale: better {read,write}_phys()
We can actually do the right thing if the MMU is off; save the error message for the phys-but-MMU-enabled path, which is what isn't yet supported. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Diffstat (limited to 'src')
-rw-r--r--src/target/xscale.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/target/xscale.c b/src/target/xscale.c
index 4cf5aeb0..f1afc71f 100644
--- a/src/target/xscale.c
+++ b/src/target/xscale.c
@@ -1905,7 +1905,13 @@ static int xscale_read_memory(struct target *target, uint32_t address,
static int xscale_read_phys_memory(struct target *target, uint32_t address,
uint32_t size, uint32_t count, uint8_t *buffer)
{
- /** \todo: provide a non-stub implementtion of this routine. */
+ struct xscale_common *xscale = target_to_xscale(target);
+
+ /* with MMU inactive, there are only physical addresses */
+ if (!xscale->armv4_5_mmu.mmu_enabled)
+ return xscale_read_memory(target, address, size, count, buffer);
+
+ /** \todo: provide a non-stub implementation of this routine. */
LOG_ERROR("%s: %s is not implemented. Disable MMU?",
target_name(target), __func__);
return ERROR_FAIL;
@@ -1992,7 +1998,13 @@ static int xscale_write_memory(struct target *target, uint32_t address,
static int xscale_write_phys_memory(struct target *target, uint32_t address,
uint32_t size, uint32_t count, uint8_t *buffer)
{
- /** \todo: provide a non-stub implementtion of this routine. */
+ struct xscale_common *xscale = target_to_xscale(target);
+
+ /* with MMU inactive, there are only physical addresses */
+ if (!xscale->armv4_5_mmu.mmu_enabled)
+ return xscale_read_memory(target, address, size, count, buffer);
+
+ /** \todo: provide a non-stub implementation of this routine. */
LOG_ERROR("%s: %s is not implemented. Disable MMU?",
target_name(target), __func__);
return ERROR_FAIL;