cortex_a: fix virt2phys when mmu is disabled
When the MMU is not enabled on debug state entry, virt2phys cannot perform a translation since it is unknown whether a valid MMU configuration existed before. In this case, return the virtual address as physical address. Change-Id: I6f85a7a5dbc200be1a4b5badf10a1a717f1c79c0 Signed-off-by: Matthias Welwarsky <matthias.welwarsky@sysgo.com> Reviewed-on: http://openocd.zylin.com/4480 Tested-by: jenkins Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-by: Matthias Welwarsky <matthias@welwarsky.de>
This commit is contained in:
parent
e57f8e12da
commit
ad6c71e151
|
@ -3229,6 +3229,20 @@ static int cortex_a_virt2phys(struct target *target,
|
||||||
struct armv7a_common *armv7a = target_to_armv7a(target);
|
struct armv7a_common *armv7a = target_to_armv7a(target);
|
||||||
struct adiv5_dap *swjdp = armv7a->arm.dap;
|
struct adiv5_dap *swjdp = armv7a->arm.dap;
|
||||||
uint8_t apsel = swjdp->apsel;
|
uint8_t apsel = swjdp->apsel;
|
||||||
|
int mmu_enabled;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the MMU was not enabled at debug entry, there is no
|
||||||
|
* way of knowing if there was ever a valid configuration
|
||||||
|
* for it and thus it's not safe to enable it. In this case,
|
||||||
|
* just return the virtual address as physical.
|
||||||
|
*/
|
||||||
|
cortex_a_mmu(target, &mmu_enabled);
|
||||||
|
if (!mmu_enabled) {
|
||||||
|
*phys = virt;
|
||||||
|
return ERROR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
if (armv7a->memory_ap_available && (apsel == armv7a->memory_ap->ap_num)) {
|
if (armv7a->memory_ap_available && (apsel == armv7a->memory_ap->ap_num)) {
|
||||||
uint32_t ret;
|
uint32_t ret;
|
||||||
retval = armv7a_mmu_translate_va(target,
|
retval = armv7a_mmu_translate_va(target,
|
||||||
|
|
Loading…
Reference in New Issue