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 =) Signed-off-by: Tony Nguyen <tony.nguyen@bt.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Tested-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Message-Id: <3c8d5181a584f1b3712d3d8d66801b13cecb4b88.1566466906.git.tony.nguyen@bt.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
9bed46e67e
commit
ccdb4c5535
@ -275,6 +275,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)
|
||||
@ -291,6 +292,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)
|
||||
|
@ -537,6 +537,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) {
|
||||
@ -792,7 +796,7 @@ void dump_mmu(CPUSPARCState *env)
|
||||
}
|
||||
if (TTE_IS_VALID(env->dtlb[i].tte)) {
|
||||
qemu_printf("[%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),
|
||||
@ -801,6 +805,8 @@ void dump_mmu(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 New Issue
Block a user