]> git.sur5r.net Git - openocd/commitdiff
target: don't swap MMU/no-MMU work areas
authorDavid Brownell <dbrownell@users.sourceforge.net>
Fri, 6 Nov 2009 22:57:21 +0000 (14:57 -0800)
committerDavid Brownell <dbrownell@users.sourceforge.net>
Fri, 6 Nov 2009 22:57:21 +0000 (14:57 -0800)
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

index b5c473b21e0495ea713d2f5b05269374d5da57dc..5eec09c8953e3178d84da60cb70380448c6227a9 100644 (file)
@@ -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;
                        }
                }