Revert "target: add target->type->has_mmu fn"

This patch introduced a bug preventing flash writes from working
on Cortex-M3 targets like the STM32.  Moreover, it's the wrong
approach for handling no-MMU targets.

The right way to handle no-MMU targets is to provide accessors
for physical addresses, and use them everywhere; and any code
which tries to work with virtual-to-physical mappings should use
a identity mapping (which can be defaulted).

And ... we can tell if a target has an MMU by seeing if it's
got an mmu() method.  No such methood means no MMU.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
This commit is contained in:
David Brownell
2009-11-09 14:46:23 -08:00
parent d70d9634bf
commit 7269ba5eb6
3 changed files with 5 additions and 48 deletions

View File

@@ -496,13 +496,7 @@ static int default_virt2phys(struct target_s *target, uint32_t virtual, uint32_t
static int default_mmu(struct target_s *target, int *enabled)
{
LOG_ERROR("Not implemented.");
return ERROR_FAIL;
}
static int default_has_mmu(struct target_s *target, bool *has_mmu)
{
*has_mmu = true;
*enabled = 0;
return ERROR_OK;
}
@@ -773,32 +767,14 @@ int target_mcr(struct target_s *target, int cpnum, uint32_t op1, uint32_t op2, u
static int default_read_phys_memory(struct target_s *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer)
{
int retval;
bool mmu;
retval = target->type->has_mmu(target, &mmu);
if (retval != ERROR_OK)
return retval;
if (mmu)
{
LOG_ERROR("Not implemented");
return ERROR_FAIL;
}
return target_read_memory(target, address, size, count, buffer);
LOG_ERROR("Not implemented");
return ERROR_FAIL;
}
static int default_write_phys_memory(struct target_s *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer)
{
int retval;
bool mmu;
retval = target->type->has_mmu(target, &mmu);
if (retval != ERROR_OK)
return retval;
if (mmu)
{
LOG_ERROR("Not implemented");
return ERROR_FAIL;
}
return target_write_memory(target, address, size, count, buffer);
LOG_ERROR("Not implemented");
return ERROR_FAIL;
}
@@ -875,10 +851,6 @@ int target_init(struct command_context_s *cmd_ctx)
{
target->type->mmu = default_mmu;
}
if (target->type->has_mmu == NULL)
{
target->type->has_mmu = default_has_mmu;
}
target = target->next;
}