From 12b8c7b89b021c882e68bb0e28863c802fe36ac4 Mon Sep 17 00:00:00 2001
From: David Brownell <dbrownell@users.sourceforge.net>
Date: Fri, 18 Dec 2009 09:53:59 -0800
Subject: 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>
---
 src/target/xscale.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

(limited to 'src/target')

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;
-- 
cgit v1.2.3