mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-01-08 22:15:28 +00:00
target/sparc: sun4u Invert Endian TTE bit
This bit configures endianness of PCI MMIO devices. It is used by Solaris and OpenBSD sunhme drivers. Tested working on OpenBSD. Unfortunately Solaris 10 had a unrelated keyboard issue blocking testing... another inch towards Solaris 10 on SPARC64 =) Backports commit ccdb4c5535f41ee4da2ef158f58fca0327e50dab from qemu
This commit is contained in:
parent
7eea07fe55
commit
15eb165995
|
@ -271,6 +271,7 @@ enum {
|
|||
|
||||
#define TTE_VALID_BIT (1ULL << 63)
|
||||
#define TTE_NFO_BIT (1ULL << 60)
|
||||
#define TTE_IE_BIT (1ULL << 59)
|
||||
#define TTE_USED_BIT (1ULL << 41)
|
||||
#define TTE_LOCKED_BIT (1ULL << 6)
|
||||
#define TTE_SIDEEFFECT_BIT (1ULL << 3)
|
||||
|
@ -287,6 +288,7 @@ enum {
|
|||
|
||||
#define TTE_IS_VALID(tte) ((tte) & TTE_VALID_BIT)
|
||||
#define TTE_IS_NFO(tte) ((tte) & TTE_NFO_BIT)
|
||||
#define TTE_IS_IE(tte) ((tte) & TTE_IE_BIT)
|
||||
#define TTE_IS_USED(tte) ((tte) & TTE_USED_BIT)
|
||||
#define TTE_IS_LOCKED(tte) ((tte) & TTE_LOCKED_BIT)
|
||||
#define TTE_IS_SIDEEFFECT(tte) ((tte) & TTE_SIDEEFFECT_BIT)
|
||||
|
|
|
@ -571,6 +571,10 @@ static int get_physical_address_data(CPUSPARCState *env, hwaddr *physical,
|
|||
if (ultrasparc_tag_match(&env->dtlb[i], address, context, physical)) {
|
||||
int do_fault = 0;
|
||||
|
||||
if (TTE_IS_IE(env->dtlb[i].tte)) {
|
||||
attrs->byte_swap = true;
|
||||
}
|
||||
|
||||
/* access ok? */
|
||||
/* multiple bits in SFSR.FT may be set on TT_DFAULT */
|
||||
if (TTE_IS_PRIV(env->dtlb[i].tte) && is_user) {
|
||||
|
@ -826,7 +830,7 @@ void dump_mmu(FILE *f, fprintf_function cpu_fprintf, CPUSPARCState *env)
|
|||
}
|
||||
if (TTE_IS_VALID(env->dtlb[i].tte)) {
|
||||
(*cpu_fprintf)(f, "[%02u] VA: %" PRIx64 ", PA: %llx"
|
||||
", %s, %s, %s, %s, ctx %" PRId64 " %s\n",
|
||||
", %s, %s, %s, %s, ie %s, ctx %" PRId64 " %s\n",
|
||||
i,
|
||||
env->dtlb[i].tag & (uint64_t)~0x1fffULL,
|
||||
TTE_PA(env->dtlb[i].tte),
|
||||
|
@ -835,6 +839,8 @@ void dump_mmu(FILE *f, fprintf_function cpu_fprintf, CPUSPARCState *env)
|
|||
TTE_IS_W_OK(env->dtlb[i].tte) ? "RW" : "RO",
|
||||
TTE_IS_LOCKED(env->dtlb[i].tte) ?
|
||||
"locked" : "unlocked",
|
||||
TTE_IS_IE(env->dtlb[i].tte) ?
|
||||
"yes" : "no",
|
||||
env->dtlb[i].tag & (uint64_t)0x1fffULL,
|
||||
TTE_IS_GLOBAL(env->dtlb[i].tte) ?
|
||||
"global" : "local");
|
||||
|
|
Loading…
Reference in a new issue