target/xtensa: Use env_cpu, env_archcpu
Cleanup in the boilerplate that each target must define. Replace xtensa_env_get_cpu with env_archcpu. The combination CPU(xtensa_env_get_cpu) should have used ENV_GET_CPU to begin; use env_cpu now. Move cpu_get_tb_cpu_state below the include of "exec/cpu-all.h" so that the definition of env_cpu is available. Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
31266e68d2
commit
92fddfbd17
@ -33,7 +33,7 @@
|
|||||||
|
|
||||||
void check_interrupts(CPUXtensaState *env)
|
void check_interrupts(CPUXtensaState *env)
|
||||||
{
|
{
|
||||||
CPUState *cs = CPU(xtensa_env_get_cpu(env));
|
CPUState *cs = env_cpu(env);
|
||||||
int minlevel = xtensa_get_cintlevel(env);
|
int minlevel = xtensa_get_cintlevel(env);
|
||||||
uint32_t int_set_enabled = env->sregs[INTSET] & env->sregs[INTENABLE];
|
uint32_t int_set_enabled = env->sregs[INTSET] & env->sregs[INTENABLE];
|
||||||
int level;
|
int level;
|
||||||
|
@ -123,7 +123,7 @@ static void xtensa_underflow12(CPUXtensaState *env)
|
|||||||
|
|
||||||
void cpu_loop(CPUXtensaState *env)
|
void cpu_loop(CPUXtensaState *env)
|
||||||
{
|
{
|
||||||
CPUState *cs = CPU(xtensa_env_get_cpu(env));
|
CPUState *cs = env_cpu(env);
|
||||||
target_siginfo_t info;
|
target_siginfo_t info;
|
||||||
abi_ulong ret;
|
abi_ulong ret;
|
||||||
int trapnr;
|
int trapnr;
|
||||||
|
@ -559,11 +559,6 @@ struct XtensaCPU {
|
|||||||
CPUXtensaState env;
|
CPUXtensaState env;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline XtensaCPU *xtensa_env_get_cpu(const CPUXtensaState *env)
|
|
||||||
{
|
|
||||||
return container_of(env, XtensaCPU, env);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define ENV_OFFSET offsetof(XtensaCPU, env)
|
#define ENV_OFFSET offsetof(XtensaCPU, env)
|
||||||
|
|
||||||
|
|
||||||
@ -724,10 +719,15 @@ static inline int cpu_mmu_index(CPUXtensaState *env, bool ifetch)
|
|||||||
#define XTENSA_CSBASE_LBEG_OFF_MASK 0x00ff0000
|
#define XTENSA_CSBASE_LBEG_OFF_MASK 0x00ff0000
|
||||||
#define XTENSA_CSBASE_LBEG_OFF_SHIFT 16
|
#define XTENSA_CSBASE_LBEG_OFF_SHIFT 16
|
||||||
|
|
||||||
|
typedef CPUXtensaState CPUArchState;
|
||||||
|
typedef XtensaCPU ArchCPU;
|
||||||
|
|
||||||
|
#include "exec/cpu-all.h"
|
||||||
|
|
||||||
static inline void cpu_get_tb_cpu_state(CPUXtensaState *env, target_ulong *pc,
|
static inline void cpu_get_tb_cpu_state(CPUXtensaState *env, target_ulong *pc,
|
||||||
target_ulong *cs_base, uint32_t *flags)
|
target_ulong *cs_base, uint32_t *flags)
|
||||||
{
|
{
|
||||||
CPUState *cs = CPU(xtensa_env_get_cpu(env));
|
CPUState *cs = env_cpu(env);
|
||||||
|
|
||||||
*pc = env->pc;
|
*pc = env->pc;
|
||||||
*cs_base = 0;
|
*cs_base = 0;
|
||||||
@ -797,9 +797,4 @@ static inline void cpu_get_tb_cpu_state(CPUXtensaState *env, target_ulong *pc,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef CPUXtensaState CPUArchState;
|
|
||||||
typedef XtensaCPU ArchCPU;
|
|
||||||
|
|
||||||
#include "exec/cpu-all.h"
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -71,7 +71,7 @@ void HELPER(wsr_ibreaka)(CPUXtensaState *env, uint32_t i, uint32_t v)
|
|||||||
static void set_dbreak(CPUXtensaState *env, unsigned i, uint32_t dbreaka,
|
static void set_dbreak(CPUXtensaState *env, unsigned i, uint32_t dbreaka,
|
||||||
uint32_t dbreakc)
|
uint32_t dbreakc)
|
||||||
{
|
{
|
||||||
CPUState *cs = CPU(xtensa_env_get_cpu(env));
|
CPUState *cs = env_cpu(env);
|
||||||
int flags = BP_CPU | BP_STOP_BEFORE_ACCESS;
|
int flags = BP_CPU | BP_STOP_BEFORE_ACCESS;
|
||||||
uint32_t mask = dbreakc | ~DBREAKC_MASK;
|
uint32_t mask = dbreakc | ~DBREAKC_MASK;
|
||||||
|
|
||||||
@ -118,7 +118,7 @@ void HELPER(wsr_dbreakc)(CPUXtensaState *env, uint32_t i, uint32_t v)
|
|||||||
set_dbreak(env, i, env->sregs[DBREAKA + i], v);
|
set_dbreak(env, i, env->sregs[DBREAKA + i], v);
|
||||||
} else {
|
} else {
|
||||||
if (env->cpu_watchpoint[i]) {
|
if (env->cpu_watchpoint[i]) {
|
||||||
CPUState *cs = CPU(xtensa_env_get_cpu(env));
|
CPUState *cs = env_cpu(env);
|
||||||
|
|
||||||
cpu_watchpoint_remove_by_ref(cs, env->cpu_watchpoint[i]);
|
cpu_watchpoint_remove_by_ref(cs, env->cpu_watchpoint[i]);
|
||||||
env->cpu_watchpoint[i] = NULL;
|
env->cpu_watchpoint[i] = NULL;
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
|
|
||||||
void HELPER(exception)(CPUXtensaState *env, uint32_t excp)
|
void HELPER(exception)(CPUXtensaState *env, uint32_t excp)
|
||||||
{
|
{
|
||||||
CPUState *cs = CPU(xtensa_env_get_cpu(env));
|
CPUState *cs = env_cpu(env);
|
||||||
|
|
||||||
cs->exception_index = excp;
|
cs->exception_index = excp;
|
||||||
if (excp == EXCP_YIELD) {
|
if (excp == EXCP_YIELD) {
|
||||||
@ -100,7 +100,7 @@ void HELPER(debug_exception)(CPUXtensaState *env, uint32_t pc, uint32_t cause)
|
|||||||
|
|
||||||
void HELPER(waiti)(CPUXtensaState *env, uint32_t pc, uint32_t intlevel)
|
void HELPER(waiti)(CPUXtensaState *env, uint32_t pc, uint32_t intlevel)
|
||||||
{
|
{
|
||||||
CPUState *cpu;
|
CPUState *cpu = env_cpu(env);
|
||||||
|
|
||||||
env->pc = pc;
|
env->pc = pc;
|
||||||
env->sregs[PS] = (env->sregs[PS] & ~PS_INTLEVEL) |
|
env->sregs[PS] = (env->sregs[PS] & ~PS_INTLEVEL) |
|
||||||
@ -111,11 +111,10 @@ void HELPER(waiti)(CPUXtensaState *env, uint32_t pc, uint32_t intlevel)
|
|||||||
qemu_mutex_unlock_iothread();
|
qemu_mutex_unlock_iothread();
|
||||||
|
|
||||||
if (env->pending_irq_level) {
|
if (env->pending_irq_level) {
|
||||||
cpu_loop_exit(CPU(xtensa_env_get_cpu(env)));
|
cpu_loop_exit(cpu);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cpu = CPU(xtensa_env_get_cpu(env));
|
|
||||||
cpu->halted = 1;
|
cpu->halted = 1;
|
||||||
HELPER(exception)(env, EXCP_HLT);
|
HELPER(exception)(env, EXCP_HLT);
|
||||||
}
|
}
|
||||||
@ -165,7 +164,7 @@ static void handle_interrupt(CPUXtensaState *env)
|
|||||||
(env->config->level_mask[level] &
|
(env->config->level_mask[level] &
|
||||||
env->sregs[INTSET] &
|
env->sregs[INTSET] &
|
||||||
env->sregs[INTENABLE])) {
|
env->sregs[INTENABLE])) {
|
||||||
CPUState *cs = CPU(xtensa_env_get_cpu(env));
|
CPUState *cs = env_cpu(env);
|
||||||
|
|
||||||
if (level > 1) {
|
if (level > 1) {
|
||||||
env->sregs[EPC1 + level - 1] = env->pc;
|
env->sregs[EPC1 + level - 1] = env->pc;
|
||||||
|
@ -324,7 +324,7 @@ void xtensa_cpu_do_transaction_failed(CPUState *cs, hwaddr physaddr, vaddr addr,
|
|||||||
|
|
||||||
void xtensa_runstall(CPUXtensaState *env, bool runstall)
|
void xtensa_runstall(CPUXtensaState *env, bool runstall)
|
||||||
{
|
{
|
||||||
CPUState *cpu = CPU(xtensa_env_get_cpu(env));
|
CPUState *cpu = env_cpu(env);
|
||||||
|
|
||||||
env->runstall = runstall;
|
env->runstall = runstall;
|
||||||
cpu->halted = runstall;
|
cpu->halted = runstall;
|
||||||
|
@ -71,12 +71,10 @@ void HELPER(itlb_hit_test)(CPUXtensaState *env, uint32_t vaddr)
|
|||||||
|
|
||||||
void HELPER(wsr_rasid)(CPUXtensaState *env, uint32_t v)
|
void HELPER(wsr_rasid)(CPUXtensaState *env, uint32_t v)
|
||||||
{
|
{
|
||||||
XtensaCPU *cpu = xtensa_env_get_cpu(env);
|
|
||||||
|
|
||||||
v = (v & 0xffffff00) | 0x1;
|
v = (v & 0xffffff00) | 0x1;
|
||||||
if (v != env->sregs[RASID]) {
|
if (v != env->sregs[RASID]) {
|
||||||
env->sregs[RASID] = v;
|
env->sregs[RASID] = v;
|
||||||
tlb_flush(CPU(cpu));
|
tlb_flush(env_cpu(env));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -276,8 +274,7 @@ static void xtensa_tlb_set_entry(CPUXtensaState *env, bool dtlb,
|
|||||||
unsigned wi, unsigned ei,
|
unsigned wi, unsigned ei,
|
||||||
uint32_t vpn, uint32_t pte)
|
uint32_t vpn, uint32_t pte)
|
||||||
{
|
{
|
||||||
XtensaCPU *cpu = xtensa_env_get_cpu(env);
|
CPUState *cs = env_cpu(env);
|
||||||
CPUState *cs = CPU(cpu);
|
|
||||||
xtensa_tlb_entry *entry = xtensa_tlb_get_entry(env, dtlb, wi, ei);
|
xtensa_tlb_entry *entry = xtensa_tlb_get_entry(env, dtlb, wi, ei);
|
||||||
|
|
||||||
if (xtensa_option_enabled(env->config, XTENSA_OPTION_MMU)) {
|
if (xtensa_option_enabled(env->config, XTENSA_OPTION_MMU)) {
|
||||||
@ -503,7 +500,7 @@ void HELPER(itlb)(CPUXtensaState *env, uint32_t v, uint32_t dtlb)
|
|||||||
uint32_t wi;
|
uint32_t wi;
|
||||||
xtensa_tlb_entry *entry = get_tlb_entry(env, v, dtlb, &wi);
|
xtensa_tlb_entry *entry = get_tlb_entry(env, v, dtlb, &wi);
|
||||||
if (entry->variable && entry->asid) {
|
if (entry->variable && entry->asid) {
|
||||||
tlb_flush_page(CPU(xtensa_env_get_cpu(env)), entry->vaddr);
|
tlb_flush_page(env_cpu(env), entry->vaddr);
|
||||||
entry->asid = 0;
|
entry->asid = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -844,7 +841,7 @@ static int get_physical_addr_mmu(CPUXtensaState *env, bool update_tlb,
|
|||||||
|
|
||||||
static bool get_pte(CPUXtensaState *env, uint32_t vaddr, uint32_t *pte)
|
static bool get_pte(CPUXtensaState *env, uint32_t vaddr, uint32_t *pte)
|
||||||
{
|
{
|
||||||
CPUState *cs = CPU(xtensa_env_get_cpu(env));
|
CPUState *cs = env_cpu(env);
|
||||||
uint32_t paddr;
|
uint32_t paddr;
|
||||||
uint32_t page_size;
|
uint32_t page_size;
|
||||||
unsigned access;
|
unsigned access;
|
||||||
@ -924,13 +921,11 @@ static int xtensa_mpu_lookup(const xtensa_mpu_entry *entry, unsigned n,
|
|||||||
|
|
||||||
void HELPER(wsr_mpuenb)(CPUXtensaState *env, uint32_t v)
|
void HELPER(wsr_mpuenb)(CPUXtensaState *env, uint32_t v)
|
||||||
{
|
{
|
||||||
XtensaCPU *cpu = xtensa_env_get_cpu(env);
|
|
||||||
|
|
||||||
v &= (2u << (env->config->n_mpu_fg_segments - 1)) - 1;
|
v &= (2u << (env->config->n_mpu_fg_segments - 1)) - 1;
|
||||||
|
|
||||||
if (v != env->sregs[MPUENB]) {
|
if (v != env->sregs[MPUENB]) {
|
||||||
env->sregs[MPUENB] = v;
|
env->sregs[MPUENB] = v;
|
||||||
tlb_flush(CPU(cpu));
|
tlb_flush(env_cpu(env));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -942,7 +937,7 @@ void HELPER(wptlb)(CPUXtensaState *env, uint32_t p, uint32_t v)
|
|||||||
env->mpu_fg[segment].vaddr = v & -env->config->mpu_align;
|
env->mpu_fg[segment].vaddr = v & -env->config->mpu_align;
|
||||||
env->mpu_fg[segment].attr = p & XTENSA_MPU_ATTR_MASK;
|
env->mpu_fg[segment].attr = p & XTENSA_MPU_ATTR_MASK;
|
||||||
env->sregs[MPUENB] = deposit32(env->sregs[MPUENB], segment, 1, v);
|
env->sregs[MPUENB] = deposit32(env->sregs[MPUENB], segment, 1, v);
|
||||||
tlb_flush(CPU(xtensa_env_get_cpu(env)));
|
tlb_flush(env_cpu(env));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -197,7 +197,7 @@ void xtensa_sim_open_console(Chardev *chr)
|
|||||||
|
|
||||||
void HELPER(simcall)(CPUXtensaState *env)
|
void HELPER(simcall)(CPUXtensaState *env)
|
||||||
{
|
{
|
||||||
CPUState *cs = CPU(xtensa_env_get_cpu(env));
|
CPUState *cs = env_cpu(env);
|
||||||
uint32_t *regs = env->regs;
|
uint32_t *regs = env->regs;
|
||||||
|
|
||||||
switch (regs[2]) {
|
switch (regs[2]) {
|
||||||
|
Loading…
Reference in New Issue
Block a user