Fix bugs. Do not touch SATP if there is no MMU. (#435)

* riscv: Fix bugs. Do not touch SATP if there is no MMU.

In some platform, there is no SATP register at all.
OpenOCD will report unexpected errors if SATP is unreadable.
So, use 'riscv_enable_virtual' to guard SATP access.

* riscv: fix format typo.
vector2
Hsiangkai 2020-01-01 03:27:22 +08:00 committed by Tim Newsome
parent 9886f77374
commit 2c3f099b73
1 changed files with 5 additions and 3 deletions

View File

@ -1364,6 +1364,11 @@ static int riscv_select_current_hart(struct target *target)
static int riscv_mmu(struct target *target, int *enabled) static int riscv_mmu(struct target *target, int *enabled)
{ {
if (!riscv_enable_virt2phys) {
*enabled = 0;
return ERROR_OK;
}
if (riscv_rtos_enabled(target)) if (riscv_rtos_enabled(target))
riscv_set_current_hartid(target, target->rtos->current_thread - 1); riscv_set_current_hartid(target, target->rtos->current_thread - 1);
@ -1483,9 +1488,6 @@ static int riscv_address_translate(struct target *target,
static int riscv_virt2phys(struct target *target, target_addr_t virtual, target_addr_t *physical) static int riscv_virt2phys(struct target *target, target_addr_t virtual, target_addr_t *physical)
{ {
if (!riscv_enable_virt2phys)
return ERROR_FAIL;
int enabled; int enabled;
if (riscv_mmu(target, &enabled) == ERROR_OK) { if (riscv_mmu(target, &enabled) == ERROR_OK) {
if (!enabled) if (!enabled)