target/lm32: Convert to CPUClass::tlb_fill

Cc: Michael Walle <michael@walle.cc>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2019-04-02 15:45:45 +07:00
parent 5d0044212c
commit ae0d4c0b52
4 changed files with 14 additions and 24 deletions

View File

@ -231,9 +231,8 @@ static void lm32_cpu_class_init(ObjectClass *oc, void *data)
cc->set_pc = lm32_cpu_set_pc; cc->set_pc = lm32_cpu_set_pc;
cc->gdb_read_register = lm32_cpu_gdb_read_register; cc->gdb_read_register = lm32_cpu_gdb_read_register;
cc->gdb_write_register = lm32_cpu_gdb_write_register; cc->gdb_write_register = lm32_cpu_gdb_write_register;
#ifdef CONFIG_USER_ONLY cc->tlb_fill = lm32_cpu_tlb_fill;
cc->handle_mmu_fault = lm32_cpu_handle_mmu_fault; #ifndef CONFIG_USER_ONLY
#else
cc->get_phys_page_debug = lm32_cpu_get_phys_page_debug; cc->get_phys_page_debug = lm32_cpu_get_phys_page_debug;
cc->vmsd = &vmstate_lm32_cpu; cc->vmsd = &vmstate_lm32_cpu;
#endif #endif

View File

@ -261,8 +261,9 @@ bool lm32_cpu_do_semihosting(CPUState *cs);
#define cpu_list lm32_cpu_list #define cpu_list lm32_cpu_list
#define cpu_signal_handler cpu_lm32_signal_handler #define cpu_signal_handler cpu_lm32_signal_handler
int lm32_cpu_handle_mmu_fault(CPUState *cpu, vaddr address, int size, int rw, bool lm32_cpu_tlb_fill(CPUState *cs, vaddr address, int size,
int mmu_idx); MMUAccessType access_type, int mmu_idx,
bool probe, uintptr_t retaddr);
#include "exec/cpu-all.h" #include "exec/cpu-all.h"

View File

@ -25,8 +25,9 @@
#include "exec/semihost.h" #include "exec/semihost.h"
#include "exec/log.h" #include "exec/log.h"
int lm32_cpu_handle_mmu_fault(CPUState *cs, vaddr address, int size, int rw, bool lm32_cpu_tlb_fill(CPUState *cs, vaddr address, int size,
int mmu_idx) MMUAccessType access_type, int mmu_idx,
bool probe, uintptr_t retaddr)
{ {
LM32CPU *cpu = LM32_CPU(cs); LM32CPU *cpu = LM32_CPU(cs);
CPULM32State *env = &cpu->env; CPULM32State *env = &cpu->env;
@ -40,8 +41,13 @@ int lm32_cpu_handle_mmu_fault(CPUState *cs, vaddr address, int size, int rw,
} else { } else {
tlb_set_page(cs, address, address, prot, mmu_idx, TARGET_PAGE_SIZE); tlb_set_page(cs, address, address, prot, mmu_idx, TARGET_PAGE_SIZE);
} }
return true;
}
return 0; void tlb_fill(CPUState *cs, target_ulong addr, int size,
MMUAccessType access_type, int mmu_idx, uintptr_t retaddr)
{
lm32_cpu_tlb_fill(cs, addr, size, access_type, mmu_idx, false, retaddr);
} }
hwaddr lm32_cpu_get_phys_page_debug(CPUState *cs, vaddr addr) hwaddr lm32_cpu_get_phys_page_debug(CPUState *cs, vaddr addr)

View File

@ -143,21 +143,5 @@ uint32_t HELPER(rcsr_jrx)(CPULM32State *env)
{ {
return lm32_juart_get_jrx(env->juart_state); return lm32_juart_get_jrx(env->juart_state);
} }
/* Try to fill the TLB and return an exception if error. If retaddr is
* NULL, it means that the function was called in C code (i.e. not
* from generated code or from helper.c)
*/
void tlb_fill(CPUState *cs, target_ulong addr, int size,
MMUAccessType access_type, int mmu_idx, uintptr_t retaddr)
{
int ret;
ret = lm32_cpu_handle_mmu_fault(cs, addr, size, access_type, mmu_idx);
if (unlikely(ret)) {
/* now we have a real cpu fault */
cpu_loop_exit_restore(cs, retaddr);
}
}
#endif #endif