From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33079) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VZovT-0003nt-W4 for qemu-devel@nongnu.org; Fri, 25 Oct 2013 17:28:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VZovI-0002YK-Pk for qemu-devel@nongnu.org; Fri, 25 Oct 2013 17:28:11 -0400 From: Alexander Graf Date: Fri, 25 Oct 2013 23:27:30 +0200 Message-Id: <1382736474-32128-6-git-send-email-agraf@suse.de> In-Reply-To: <1382736474-32128-1-git-send-email-agraf@suse.de> References: <1382736474-32128-1-git-send-email-agraf@suse.de> Subject: [Qemu-devel] [PULL 05/29] PPC: Fix L2CR write accesses List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: QEMU Developers Cc: Blue Swirl , "qemu-ppc@nongnu.org list:PowerPC" , Anthony Liguori , Aurelien Jarno Commit 2345f1c01 was supposed to render L2CR writes into noops. Instead, it made them illegal instruction traps which apparently didn't confuse XNU, but can easily confuse other OSs. Fix it up by actually doing nothing when we write to L2CR. Reported-by: Julio Guerra Signed-off-by: Alexander Graf Tested-by: Julio Guerra --- target-ppc/translate_init.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c index 651da6b..807dab3 100644 --- a/target-ppc/translate_init.c +++ b/target-ppc/translate_init.c @@ -108,6 +108,11 @@ static void spr_write_clear (void *opaque, int sprn, int gprn) tcg_temp_free(t0); tcg_temp_free(t1); } + +static void spr_access_nop(void *opaque, int sprn, int gprn) +{ +} + #endif /* SPR common to all PowerPC */ @@ -1382,7 +1387,7 @@ static void gen_spr_74xx (CPUPPCState *env) /* XXX : not implemented */ spr_register(env, SPR_L2CR, "L2CR", SPR_NOACCESS, SPR_NOACCESS, - &spr_read_generic, NULL, + &spr_read_generic, spr_access_nop, 0x00000000); /* Not strictly an SPR */ vscr_init(env, 0x00010000); @@ -5170,7 +5175,7 @@ static void init_proc_750 (CPUPPCState *env) /* XXX : not implemented */ spr_register(env, SPR_L2CR, "L2CR", SPR_NOACCESS, SPR_NOACCESS, - &spr_read_generic, NULL, + &spr_read_generic, spr_access_nop, 0x00000000); /* Time base */ gen_tbl(env); @@ -5233,7 +5238,7 @@ static void init_proc_750cl (CPUPPCState *env) /* XXX : not implemented */ spr_register(env, SPR_L2CR, "L2CR", SPR_NOACCESS, SPR_NOACCESS, - &spr_read_generic, NULL, + &spr_read_generic, spr_access_nop, 0x00000000); /* Time base */ gen_tbl(env); @@ -5419,7 +5424,7 @@ static void init_proc_750cx (CPUPPCState *env) /* XXX : not implemented */ spr_register(env, SPR_L2CR, "L2CR", SPR_NOACCESS, SPR_NOACCESS, - &spr_read_generic, NULL, + &spr_read_generic, spr_access_nop, 0x00000000); /* Time base */ gen_tbl(env); @@ -5486,7 +5491,7 @@ static void init_proc_750fx (CPUPPCState *env) /* XXX : not implemented */ spr_register(env, SPR_L2CR, "L2CR", SPR_NOACCESS, SPR_NOACCESS, - &spr_read_generic, NULL, + &spr_read_generic, spr_access_nop, 0x00000000); /* Time base */ gen_tbl(env); @@ -5558,7 +5563,7 @@ static void init_proc_750gx (CPUPPCState *env) /* XXX : not implemented (XXX: different from 750fx) */ spr_register(env, SPR_L2CR, "L2CR", SPR_NOACCESS, SPR_NOACCESS, - &spr_read_generic, NULL, + &spr_read_generic, spr_access_nop, 0x00000000); /* Time base */ gen_tbl(env); @@ -5694,7 +5699,7 @@ static void init_proc_755 (CPUPPCState *env) /* XXX : not implemented */ spr_register(env, SPR_L2CR, "L2CR", SPR_NOACCESS, SPR_NOACCESS, - &spr_read_generic, NULL, + &spr_read_generic, spr_access_nop, 0x00000000); /* XXX : not implemented */ spr_register(env, SPR_L2PMCR, "L2PMCR", @@ -6650,7 +6655,7 @@ static void init_proc_970 (CPUPPCState *env) /* XXX : not implemented */ spr_register(env, SPR_L2CR, "L2CR", SPR_NOACCESS, SPR_NOACCESS, - &spr_read_generic, NULL, + &spr_read_generic, spr_access_nop, 0x00000000); /* Memory management */ /* XXX: not correct */ @@ -6750,7 +6755,7 @@ static void init_proc_970FX (CPUPPCState *env) /* XXX : not implemented */ spr_register(env, SPR_L2CR, "L2CR", SPR_NOACCESS, SPR_NOACCESS, - &spr_read_generic, NULL, + &spr_read_generic, spr_access_nop, 0x00000000); /* Memory management */ /* XXX: not correct */ @@ -6862,7 +6867,7 @@ static void init_proc_970GX (CPUPPCState *env) /* XXX : not implemented */ spr_register(env, SPR_L2CR, "L2CR", SPR_NOACCESS, SPR_NOACCESS, - &spr_read_generic, NULL, + &spr_read_generic, spr_access_nop, 0x00000000); /* Memory management */ /* XXX: not correct */ @@ -6962,7 +6967,7 @@ static void init_proc_970MP (CPUPPCState *env) /* XXX : not implemented */ spr_register(env, SPR_L2CR, "L2CR", SPR_NOACCESS, SPR_NOACCESS, - &spr_read_generic, NULL, + &spr_read_generic, spr_access_nop, 0x00000000); /* Memory management */ /* XXX: not correct */ @@ -7054,7 +7059,7 @@ static void init_proc_power5plus(CPUPPCState *env) /* XXX : not implemented */ spr_register(env, SPR_L2CR, "L2CR", SPR_NOACCESS, SPR_NOACCESS, - &spr_read_generic, NULL, + &spr_read_generic, spr_access_nop, 0x00000000); /* Memory management */ /* XXX: not correct */ -- 1.8.1.4