[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH v3 3/4] target-ppc: ppc can be either endian
From: |
Greg Kurz |
Subject: |
[Qemu-ppc] [PATCH v3 3/4] target-ppc: ppc can be either endian |
Date: |
Mon, 05 May 2014 10:07:00 +0200 |
User-agent: |
StGit/0.16 |
POWER7, POWER7+ and POWER8 families use the ILE bit of the LPCR
special purpose register to decide the endianness to use when
entering interrupt handlers. When running a Linux guest, this
provides a hint on the endianness used by the kernel. From a
QEMU point of view, the information is needed for legacy virtio
support and crash dump support as well.
Suggested-by: Benjamin Herrenschmidt <address@hidden>
Reviewed-by: Alexander Graf <address@hidden>
Signed-off-by: Greg Kurz <address@hidden>
---
No changes, resent in case it helps
target-ppc/cpu-qom.h | 1 +
target-ppc/translate_init.c | 16 ++++++++++++++++
2 files changed, 17 insertions(+)
diff --git a/target-ppc/cpu-qom.h b/target-ppc/cpu-qom.h
index 47dc8e6..fdce638 100644
--- a/target-ppc/cpu-qom.h
+++ b/target-ppc/cpu-qom.h
@@ -76,6 +76,7 @@ typedef struct PowerPCCPUClass {
int (*handle_mmu_fault)(PowerPCCPU *cpu, target_ulong eaddr, int rwx,
int mmu_idx);
#endif
+ bool (*interrupts_big_endian)(PowerPCCPU *cpu);
} PowerPCCPUClass;
/**
diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c
index 7f53c33..a27e5a7 100644
--- a/target-ppc/translate_init.c
+++ b/target-ppc/translate_init.c
@@ -3102,6 +3102,18 @@ static int check_pow_hid0_74xx (CPUPPCState *env)
return 0;
}
+static bool ppc_cpu_interrupts_big_endian_always(PowerPCCPU *cpu)
+{
+ return true;
+}
+
+#ifdef TARGET_PPC64
+static bool ppc_cpu_interrupts_big_endian_lpcr(PowerPCCPU *cpu)
+{
+ return !(cpu->env.spr[SPR_LPCR] & LPCR_ILE);
+}
+#endif
+
/*****************************************************************************/
/* PowerPC implementations definitions */
@@ -7089,6 +7101,7 @@ POWERPC_FAMILY(POWER7)(ObjectClass *oc, void *data)
POWERPC_FLAG_VSX;
pcc->l1_dcache_size = 0x8000;
pcc->l1_icache_size = 0x8000;
+ pcc->interrupts_big_endian = ppc_cpu_interrupts_big_endian_lpcr;
}
POWERPC_FAMILY(POWER7P)(ObjectClass *oc, void *data)
@@ -7132,6 +7145,7 @@ POWERPC_FAMILY(POWER7P)(ObjectClass *oc, void *data)
POWERPC_FLAG_VSX;
pcc->l1_dcache_size = 0x8000;
pcc->l1_icache_size = 0x8000;
+ pcc->interrupts_big_endian = ppc_cpu_interrupts_big_endian_lpcr;
}
static void init_proc_POWER8(CPUPPCState *env)
@@ -7189,6 +7203,7 @@ POWERPC_FAMILY(POWER8)(ObjectClass *oc, void *data)
POWERPC_FLAG_VSX;
pcc->l1_dcache_size = 0x8000;
pcc->l1_icache_size = 0x8000;
+ pcc->interrupts_big_endian = ppc_cpu_interrupts_big_endian_lpcr;
}
#endif /* defined (TARGET_PPC64) */
@@ -8511,6 +8526,7 @@ static void ppc_cpu_class_init(ObjectClass *oc, void
*data)
pcc->parent_realize = dc->realize;
pcc->pvr = CPU_POWERPC_DEFAULT_MASK;
pcc->pvr_mask = CPU_POWERPC_DEFAULT_MASK;
+ pcc->interrupts_big_endian = ppc_cpu_interrupts_big_endian_always;
dc->realize = ppc_cpu_realizefn;
dc->unrealize = ppc_cpu_unrealizefn;
- [Qemu-ppc] [PATCH v3 0/4] little-endian dump for ppc64, Greg Kurz, 2014/05/05
- [Qemu-ppc] [PATCH v3 1/4] dump: Make DumpState and endian conversion routines available for arch-specific dump code, Greg Kurz, 2014/05/05
- [Qemu-ppc] [PATCH v3 2/4] ppc64-dump: Support dump for little endian ppc64, Greg Kurz, 2014/05/05
- Re: [Qemu-ppc] [PATCH v3 2/4] ppc64-dump: Support dump for little endian ppc64, Alexander Graf, 2014/05/05
- Re: [Qemu-ppc] [PATCH v3 2/4] ppc64-dump: Support dump for little endian ppc64, Greg Kurz, 2014/05/07
- Re: [Qemu-ppc] [PATCH v3 2/4] ppc64-dump: Support dump for little endian ppc64, Tom Musta, 2014/05/07
- Re: [Qemu-ppc] [PATCH v3 2/4] ppc64-dump: Support dump for little endian ppc64, Tom Musta, 2014/05/07
- Re: [Qemu-ppc] [PATCH v3 2/4] ppc64-dump: Support dump for little endian ppc64, Alexander Graf, 2014/05/07
- Re: [Qemu-ppc] [PATCH v3 2/4] ppc64-dump: Support dump for little endian ppc64, Greg Kurz, 2014/05/08
[Qemu-ppc] [PATCH v3 3/4] target-ppc: ppc can be either endian,
Greg Kurz <=
- Re: [Qemu-ppc] [PATCH v3 3/4] target-ppc: ppc can be either endian, Peter Maydell, 2014/05/06
- Re: [Qemu-ppc] [PATCH v3 3/4] target-ppc: ppc can be either endian, Greg Kurz, 2014/05/07
- Re: [Qemu-ppc] [PATCH v3 3/4] target-ppc: ppc can be either endian, Peter Maydell, 2014/05/07
- Re: [Qemu-ppc] [PATCH v3 3/4] target-ppc: ppc can be either endian, Alexander Graf, 2014/05/07
- Re: [Qemu-ppc] [PATCH v3 3/4] target-ppc: ppc can be either endian, Peter Maydell, 2014/05/07
- Re: [Qemu-ppc] [PATCH v3 3/4] target-ppc: ppc can be either endian, Alexander Graf, 2014/05/07
- Re: [Qemu-ppc] [PATCH v3 3/4] target-ppc: ppc can be either endian, Peter Maydell, 2014/05/07
- Re: [Qemu-ppc] [PATCH v3 3/4] target-ppc: ppc can be either endian, Alexander Graf, 2014/05/07
Re: [Qemu-ppc] [PATCH v3 3/4] target-ppc: ppc can be either endian, Alexander Graf, 2014/05/07
Re: [Qemu-ppc] [PATCH v3 3/4] target-ppc: ppc can be either endian, Greg Kurz, 2014/05/07