diff options
author | j_mayer <j_mayer@c046a42c-6fe2-441c-8c8c-71466251a162> | 2007-10-04 01:50:03 +0000 |
---|---|---|
committer | j_mayer <j_mayer@c046a42c-6fe2-441c-8c8c-71466251a162> | 2007-10-04 01:50:03 +0000 |
commit | e57448f11cb29c9b36acd117349070fe290465fa (patch) | |
tree | 5f14617c55763968fd137b3a3552c9bdd8385ed5 | |
parent | d63001d11434fc6bf217255b51f625a75d05fb35 (diff) | |
download | qemu-e57448f11cb29c9b36acd117349070fe290465fa.tar.gz qemu-e57448f11cb29c9b36acd117349070fe290465fa.tar.bz2 qemu-e57448f11cb29c9b36acd117349070fe290465fa.zip |
More cache tuning fixes:
* fix the tunable cache line size probe for PowerPC 970.
* initialize HID5 so cache line is 32 bytes long when running in user-mode only
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3322 c046a42c-6fe2-441c-8c8c-71466251a162
-rw-r--r-- | target-ppc/op_helper_mem.h | 2 | ||||
-rw-r--r-- | target-ppc/translate_init.c | 24 |
2 files changed, 23 insertions, 3 deletions
diff --git a/target-ppc/op_helper_mem.h b/target-ppc/op_helper_mem.h index f5cb6970c4..4b0bb841e5 100644 --- a/target-ppc/op_helper_mem.h +++ b/target-ppc/op_helper_mem.h @@ -324,7 +324,7 @@ void glue(do_dcbz_64, MEMSUFFIX) (void) int dcache_line_size = env->dcache_line_size; /* XXX: should be 970 specific (?) */ - if (((env->spr[SPR_970_HID5] >> 7) & 0x3) == 1) + if (((env->spr[SPR_970_HID5] >> 6) & 0x3) == 0x2) dcache_line_size = 32; glue(stl, MEMSUFFIX)((uint64_t)(T0 + 0x00), 0); glue(stl, MEMSUFFIX)((uint64_t)(T0 + 0x04), 0); diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c index 445cb58186..606a04f254 100644 --- a/target-ppc/translate_init.c +++ b/target-ppc/translate_init.c @@ -4063,6 +4063,16 @@ static void init_proc_970 (CPUPPCState *env) SPR_NOACCESS, SPR_NOACCESS, &spr_read_generic, &spr_write_generic, 0x00000000); + /* XXX : not implemented */ + spr_register(env, SPR_970_HID5, "HID5", + SPR_NOACCESS, SPR_NOACCESS, + &spr_read_generic, &spr_write_generic, +#if defined(CONFIG_USER_ONLY) + 0x00000080 +#else + 0x00000000 +#endif + ); /* Memory management */ /* XXX: not correct */ gen_low_BATs(env); @@ -4116,7 +4126,12 @@ static void init_proc_970FX (CPUPPCState *env) spr_register(env, SPR_970_HID5, "HID5", SPR_NOACCESS, SPR_NOACCESS, &spr_read_generic, &spr_write_generic, - 0x00000000); +#if defined(CONFIG_USER_ONLY) + 0x00000080 +#else + 0x00000000 +#endif + ); /* Memory management */ /* XXX: not correct */ gen_low_BATs(env); @@ -4170,7 +4185,12 @@ static void init_proc_970GX (CPUPPCState *env) spr_register(env, SPR_970_HID5, "HID5", SPR_NOACCESS, SPR_NOACCESS, &spr_read_generic, &spr_write_generic, - 0x00000000); +#if defined(CONFIG_USER_ONLY) + 0x00000080 +#else + 0x00000000 +#endif + ); /* Memory management */ /* XXX: not correct */ gen_low_BATs(env); |