[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH 2/8] PPC: Fix up e500 cache size setting
From: |
Alexander Graf |
Subject: |
[Qemu-ppc] [PATCH 2/8] PPC: Fix up e500 cache size setting |
Date: |
Tue, 1 May 2012 10:58:54 +0200 |
When initializing the e500 code, we need to expose its
cache line size for user and system mode, while the mmu
details are only interesting for system emulation.
Split the 2 switch statements apart, allowing us to #ifdef
out the mmu parts for user mode emulation while keeping all
cache information consistent.
Signed-off-by: Alexander Graf <address@hidden>
---
target-ppc/translate_init.c | 26 ++++++++++++++------------
1 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c
index ba4b84d..6f61175 100644
--- a/target-ppc/translate_init.c
+++ b/target-ppc/translate_init.c
@@ -4461,33 +4461,36 @@ static void init_proc_e500 (CPUPPCState *env, int
version)
&spr_read_spefscr, &spr_write_spefscr,
&spr_read_spefscr, &spr_write_spefscr,
0x00000000);
+#if !defined(CONFIG_USER_ONLY)
/* Memory management */
-#if defined(CONFIG_USER_ONLY)
- env->dcache_line_size = 32;
- env->icache_line_size = 32;
-#else /* !defined(CONFIG_USER_ONLY) */
env->nb_pids = 3;
env->nb_ways = 2;
env->id_tlbs = 0;
switch (version) {
case fsl_e500v1:
- /* e500v1 */
tlbncfg[0] = gen_tlbncfg(2, 1, 1, 0, 256);
tlbncfg[1] = gen_tlbncfg(16, 1, 9, TLBnCFG_AVAIL | TLBnCFG_IPROT, 16);
- env->dcache_line_size = 32;
- env->icache_line_size = 32;
break;
case fsl_e500v2:
- /* e500v2 */
tlbncfg[0] = gen_tlbncfg(4, 1, 1, 0, 512);
tlbncfg[1] = gen_tlbncfg(16, 1, 12, TLBnCFG_AVAIL | TLBnCFG_IPROT, 16);
- env->dcache_line_size = 32;
- env->icache_line_size = 32;
break;
case fsl_e500mc:
- /* e500mc */
tlbncfg[0] = gen_tlbncfg(4, 1, 1, 0, 512);
tlbncfg[1] = gen_tlbncfg(64, 1, 12, TLBnCFG_AVAIL | TLBnCFG_IPROT, 64);
+ break;
+ default:
+ cpu_abort(env, "Unknown CPU: " TARGET_FMT_lx "\n", env->spr[SPR_PVR]);
+ }
+#endif
+ /* Cache sizes */
+ switch (version) {
+ case fsl_e500v1:
+ case fsl_e500v2:
+ env->dcache_line_size = 32;
+ env->icache_line_size = 32;
+ break;
+ case fsl_e500mc:
env->dcache_line_size = 64;
env->icache_line_size = 64;
l1cfg0 |= 0x1000000; /* 64 byte cache block size */
@@ -4495,7 +4498,6 @@ static void init_proc_e500 (CPUPPCState *env, int version)
default:
cpu_abort(env, "Unknown CPU: " TARGET_FMT_lx "\n", env->spr[SPR_PVR]);
}
-#endif
gen_spr_BookE206(env, 0x000000DF, tlbncfg);
/* XXX : not implemented */
spr_register(env, SPR_HID0, "HID0",
--
1.6.0.2
[Qemu-ppc] [PATCH 1/8] booke:Use MMU API for creating initial mapping for secondary cpus, Alexander Graf, 2012/05/01
[Qemu-ppc] [PATCH 2/8] PPC: Fix up e500 cache size setting,
Alexander Graf <=
[Qemu-ppc] [PATCH 8/8] target-ppc: Some support for dumping TLB_EMB TLBs, Alexander Graf, 2012/05/01
[Qemu-ppc] [PATCH 7/8] ppce500_spin: Replace assert by hw_error (fixes compiler warning), Alexander Graf, 2012/05/01
[Qemu-ppc] [PATCH 5/8] pseries: Use the same interrupt swizzling for host bridges as p2p bridges, Alexander Graf, 2012/05/01
[Qemu-ppc] [PATCH 4/8] pseries: Implement automatic PAPR VIO address allocation, Alexander Graf, 2012/05/01
[Qemu-ppc] [PATCH 6/8] pseries: Fix use of global CPU state, Alexander Graf, 2012/05/01