target-sparc: use SparcV9MMU type for sparc64 I/D-MMUs
Signed-off-by: Artyom Tarasenko <atar4qemu@gmail.com>
This commit is contained in:
parent
4797a68519
commit
96df2bc99f
@ -1166,7 +1166,7 @@ void cpu_loop (CPUSPARCState *env)
|
||||
/* XXX: check env->error_code */
|
||||
info.si_code = TARGET_SEGV_MAPERR;
|
||||
if (trapnr == TT_DFAULT)
|
||||
info._sifields._sigfault._addr = env->dmmuregs[4];
|
||||
info._sifields._sigfault._addr = env->dmmu.mmuregs[4];
|
||||
else
|
||||
info._sifields._sigfault._addr = cpu_tsptr(env)->tpc;
|
||||
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
||||
|
@ -404,7 +404,22 @@ struct CPUTimer
|
||||
typedef struct CPUTimer CPUTimer;
|
||||
|
||||
typedef struct CPUSPARCState CPUSPARCState;
|
||||
|
||||
#if defined(TARGET_SPARC64)
|
||||
typedef union {
|
||||
uint64_t mmuregs[16];
|
||||
struct {
|
||||
uint64_t tsb_tag_target;
|
||||
uint64_t mmu_primary_context;
|
||||
uint64_t mmu_secondary_context;
|
||||
uint64_t sfsr;
|
||||
uint64_t sfar;
|
||||
uint64_t tsb;
|
||||
uint64_t tag_access;
|
||||
uint64_t virtual_watchpoint;
|
||||
uint64_t physical_watchpoint;
|
||||
};
|
||||
} SparcV9MMU;
|
||||
#endif
|
||||
struct CPUSPARCState {
|
||||
target_ulong gregs[8]; /* general registers */
|
||||
target_ulong *regwptr; /* pointer to current register window */
|
||||
@ -457,35 +472,8 @@ struct CPUSPARCState {
|
||||
uint64_t lsu;
|
||||
#define DMMU_E 0x8
|
||||
#define IMMU_E 0x4
|
||||
//typedef struct SparcMMU
|
||||
union {
|
||||
uint64_t immuregs[16];
|
||||
struct {
|
||||
uint64_t tsb_tag_target;
|
||||
uint64_t unused_mmu_primary_context; // use DMMU
|
||||
uint64_t unused_mmu_secondary_context; // use DMMU
|
||||
uint64_t sfsr;
|
||||
uint64_t sfar;
|
||||
uint64_t tsb;
|
||||
uint64_t tag_access;
|
||||
uint64_t virtual_watchpoint;
|
||||
uint64_t physical_watchpoint;
|
||||
} immu;
|
||||
};
|
||||
union {
|
||||
uint64_t dmmuregs[16];
|
||||
struct {
|
||||
uint64_t tsb_tag_target;
|
||||
uint64_t mmu_primary_context;
|
||||
uint64_t mmu_secondary_context;
|
||||
uint64_t sfsr;
|
||||
uint64_t sfar;
|
||||
uint64_t tsb;
|
||||
uint64_t tag_access;
|
||||
uint64_t virtual_watchpoint;
|
||||
uint64_t physical_watchpoint;
|
||||
} dmmu;
|
||||
};
|
||||
SparcV9MMU immu;
|
||||
SparcV9MMU dmmu;
|
||||
SparcTLBEntry itlb[64];
|
||||
SparcTLBEntry dtlb[64];
|
||||
uint32_t mmu_version;
|
||||
|
@ -1483,7 +1483,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val,
|
||||
int reg = (addr >> 3) & 0xf;
|
||||
uint64_t oldreg;
|
||||
|
||||
oldreg = env->immuregs[reg];
|
||||
oldreg = env->immu.mmuregs[reg];
|
||||
switch (reg) {
|
||||
case 0: /* RO */
|
||||
return;
|
||||
@ -1514,7 +1514,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val,
|
||||
break;
|
||||
}
|
||||
|
||||
if (oldreg != env->immuregs[reg]) {
|
||||
if (oldreg != env->immu.mmuregs[reg]) {
|
||||
DPRINTF_MMU("immu change reg[%d]: 0x%016" PRIx64 " -> 0x%016"
|
||||
PRIx64 "\n", reg, oldreg, env->immuregs[reg]);
|
||||
}
|
||||
@ -1548,7 +1548,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val,
|
||||
int reg = (addr >> 3) & 0xf;
|
||||
uint64_t oldreg;
|
||||
|
||||
oldreg = env->dmmuregs[reg];
|
||||
oldreg = env->dmmu.mmuregs[reg];
|
||||
switch (reg) {
|
||||
case 0: /* RO */
|
||||
case 4:
|
||||
@ -1591,7 +1591,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val,
|
||||
break;
|
||||
}
|
||||
|
||||
if (oldreg != env->dmmuregs[reg]) {
|
||||
if (oldreg != env->dmmu.mmuregs[reg]) {
|
||||
DPRINTF_MMU("dmmu change reg[%d]: 0x%016" PRIx64 " -> 0x%016"
|
||||
PRIx64 "\n", reg, oldreg, env->dmmuregs[reg]);
|
||||
}
|
||||
|
@ -148,8 +148,8 @@ const VMStateDescription vmstate_sparc_cpu = {
|
||||
VMSTATE_UINT64_ARRAY(env.mmubpregs, SPARCCPU, 4),
|
||||
#else
|
||||
VMSTATE_UINT64(env.lsu, SPARCCPU),
|
||||
VMSTATE_UINT64_ARRAY(env.immuregs, SPARCCPU, 16),
|
||||
VMSTATE_UINT64_ARRAY(env.dmmuregs, SPARCCPU, 16),
|
||||
VMSTATE_UINT64_ARRAY(env.immu.mmuregs, SPARCCPU, 16),
|
||||
VMSTATE_UINT64_ARRAY(env.dmmu.mmuregs, SPARCCPU, 16),
|
||||
VMSTATE_STRUCT_ARRAY(env.itlb, SPARCCPU, 64, 0,
|
||||
vmstate_tlb_entry, SparcTLBEntry),
|
||||
VMSTATE_STRUCT_ARRAY(env.dtlb, SPARCCPU, 64, 0,
|
||||
|
Loading…
Reference in New Issue
Block a user