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>__archive__
parent
6a0af06bd9
commit
a9abfa7d06
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue