diff options
author | Matthias Welwarsky <matthias.welwarsky@sysgo.com> | 2016-07-15 14:23:25 +0200 |
---|---|---|
committer | Matthias Welwarsky <matthias@welwarsky.de> | 2018-07-24 13:08:12 +0100 |
commit | ad6c71e151590f9d07eb07eda978a8d2a845259c (patch) | |
tree | 207a29d79ca2a355a5bd54a52a52625087a782c4 /src | |
parent | e57f8e12da6da02c192cd9365185fe8eee46b080 (diff) |
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>
Diffstat (limited to 'src')
-rw-r--r-- | src/target/cortex_a.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/target/cortex_a.c b/src/target/cortex_a.c index 21ce4fae..b15dcb41 100644 --- a/src/target/cortex_a.c +++ b/src/target/cortex_a.c @@ -3229,6 +3229,20 @@ static int cortex_a_virt2phys(struct target *target, struct armv7a_common *armv7a = target_to_armv7a(target); struct adiv5_dap *swjdp = armv7a->arm.dap; 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)) { uint32_t ret; retval = armv7a_mmu_translate_va(target, |