From a9abfa7d06dbcfded97b7fb41f50d3581c24fbae Mon Sep 17 00:00:00 2001
From: David Brownell <dbrownell@users.sourceforge.net>
Date: Fri, 6 Nov 2009 14:57:21 -0800
Subject: target: don't swap MMU/no-MMU work areas

Resolve serious bug inserted by the "target: require working
area for physical/virtual addresses to be specified" patch.
It forced use of (invalid) virtual addresses when the MMU
was disabled, and vice versa.

Observed to break at least Cortex-M3, ARM926, ARM7TDMI whenever
work areas are used, such as during bulk writes to flash, DDR2,
SRAM, and so on.

Also, fix overlong lines and whitespace goofs.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
---
 src/target/target.c | 33 +++++++++++++++++----------------
 1 file changed, 17 insertions(+), 16 deletions(-)

diff --git a/src/target/target.c b/src/target/target.c
index b5c473b2..5eec09c8 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -1115,32 +1115,33 @@ int target_alloc_working_area(struct target_s *target, uint32_t size, working_ar
 	{
 		int retval;
 		int enabled;
+
 		retval = target->type->mmu(target, &enabled);
 		if (retval != ERROR_OK)
 		{
 			return retval;
 		}
 
-		if (enabled)
-		{
-			if (target->working_area_phys_spec)
-			{
-				LOG_DEBUG("MMU disabled, using physical address for working memory 0x%08x", (unsigned)target->working_area_phys);
+		if (!enabled) {
+			if (target->working_area_phys_spec) {
+				LOG_DEBUG("MMU disabled, using physical "
+					"address for working memory 0x%08x",
+					(unsigned)target->working_area_phys);
 				target->working_area = target->working_area_phys;
-			} else
-			{
-				LOG_ERROR("No working memory available. Specify -work-area-phys to target.");
+			} else {
+				LOG_ERROR("No working memory available. "
+					"Specify -work-area-phys to target.");
 				return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
 			}
-		} else
-		{
-			if (target->working_area_virt_spec)
-			{
-				LOG_DEBUG("MMU enabled, using virtual address for working memory 0x%08x", (unsigned)target->working_area_virt);
+		} else {
+			if (target->working_area_virt_spec) {
+				LOG_DEBUG("MMU enabled, using virtual "
+					"address for working memory 0x%08x",
+					(unsigned)target->working_area_virt);
 				target->working_area = target->working_area_virt;
-			} else
-			{
-				LOG_ERROR("No working memory available. Specify -work-area-virt to target.");
+			} else {
+				LOG_ERROR("No working memory available. "
+					"Specify -work-area-virt to target.");
 				return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
 			}
 		}
-- 
cgit v1.2.3