From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LdU6E-0001Xx-VJ for qemu-devel@nongnu.org; Sat, 28 Feb 2009 13:39:47 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LdU6D-0001Wi-QJ for qemu-devel@nongnu.org; Sat, 28 Feb 2009 13:39:46 -0500 Received: from [199.232.76.173] (port=49077 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LdU6D-0001Vv-7M for qemu-devel@nongnu.org; Sat, 28 Feb 2009 13:39:45 -0500 Received: from savannah.gnu.org ([199.232.41.3]:40882 helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LdU6C-0006P5-Qk for qemu-devel@nongnu.org; Sat, 28 Feb 2009 13:39:44 -0500 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.63) (envelope-from ) id 1LdU6C-0003p7-3O for qemu-devel@nongnu.org; Sat, 28 Feb 2009 18:39:44 +0000 Received: from blueswir1 by cvs.savannah.gnu.org with local (Exim 4.69) (envelope-from ) id 1LdU6B-0003p0-Bc for qemu-devel@nongnu.org; Sat, 28 Feb 2009 18:39:43 +0000 MIME-Version: 1.0 Errors-To: blueswir1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Blue Swirl Message-Id: Date: Sat, 28 Feb 2009 18:39:43 +0000 Subject: [Qemu-devel] [6656] Implement HIOR Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Revision: 6656 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6656 Author: blueswir1 Date: 2009-02-28 18:39:42 +0000 (Sat, 28 Feb 2009) Log Message: ----------- Implement HIOR A real 970 CPU starts up with HIOR=0xfff00000 and triggers a reset exception, basically ending up at IP 0xfff001000. Later on this HIOR has to be set to 0 by the firmware in order to enable the OS to handle interrupts on its own. This patch maps HIOR to exec_prefix, which does the same thing internally in qemu already. It replaces the previous patch that changed the 970 initialization constants, as this is the clean solution to the same problem. Signed-off-by: Alexander Graf Modified Paths: -------------- trunk/target-ppc/translate_init.c Modified: trunk/target-ppc/translate_init.c =================================================================== --- trunk/target-ppc/translate_init.c 2009-02-28 16:51:01 UTC (rev 6655) +++ trunk/target-ppc/translate_init.c 2009-02-28 18:39:42 UTC (rev 6656) @@ -307,6 +307,19 @@ /* 64 bits PowerPC specific SPRs */ /* ASR */ #if defined(TARGET_PPC64) +static void spr_read_hior (void *opaque, int gprn, int sprn) +{ + tcg_gen_ld_tl(cpu_gpr[gprn], cpu_env, offsetof(CPUState, excp_prefix)); +} + +static void spr_write_hior (void *opaque, int sprn, int gprn) +{ + TCGv t0 = tcg_temp_new(); + tcg_gen_andi_tl(t0, cpu_gpr[gprn], 0x3FFFFF00000ULL); + tcg_gen_st_tl(t0, cpu_env, offsetof(CPUState, excp_prefix)); + tcg_temp_free(t0); +} + static void spr_read_asr (void *opaque, int gprn, int sprn) { tcg_gen_ld_tl(cpu_gpr[gprn], cpu_env, offsetof(CPUState, asr)); @@ -5939,8 +5952,8 @@ 0x00000000); /* TOFIX */ spr_register(env, SPR_HIOR, "SPR_HIOR", SPR_NOACCESS, SPR_NOACCESS, - &spr_read_generic, &spr_write_generic, - 0xFFF00000); /* XXX: This is a hack */ + &spr_read_hior, &spr_write_hior, + 0x00000000); #if !defined(CONFIG_USER_ONLY) env->slb_nr = 32; #endif @@ -6028,8 +6041,8 @@ 0x00000000); /* TOFIX */ spr_register(env, SPR_HIOR, "SPR_HIOR", SPR_NOACCESS, SPR_NOACCESS, - &spr_read_generic, &spr_write_generic, - 0xFFF00000); /* XXX: This is a hack */ + &spr_read_hior, &spr_write_hior, + 0x00000000); #if !defined(CONFIG_USER_ONLY) env->slb_nr = 32; #endif @@ -6117,8 +6130,8 @@ 0x00000000); /* TOFIX */ spr_register(env, SPR_HIOR, "SPR_HIOR", SPR_NOACCESS, SPR_NOACCESS, - &spr_read_generic, &spr_write_generic, - 0xFFF00000); /* XXX: This is a hack */ + &spr_read_hior, &spr_write_hior, + 0x00000000); #if !defined(CONFIG_USER_ONLY) env->slb_nr = 32; #endif @@ -6206,8 +6219,8 @@ 0x00000000); /* TOFIX */ spr_register(env, SPR_HIOR, "SPR_HIOR", SPR_NOACCESS, SPR_NOACCESS, - &spr_read_generic, &spr_write_generic, - 0xFFF00000); /* XXX: This is a hack */ + &spr_read_hior, &spr_write_hior, + 0x00000000); #if !defined(CONFIG_USER_ONLY) env->slb_nr = 32; #endif