From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56176) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bCKNV-0001AI-Vw for qemu-devel@nongnu.org; Mon, 13 Jun 2016 01:25:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bCKNM-0001z8-0J for qemu-devel@nongnu.org; Mon, 13 Jun 2016 01:25:36 -0400 Received: from 8.mo178.mail-out.ovh.net ([46.105.74.227]:33992) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bCKNL-0001yw-KE for qemu-devel@nongnu.org; Mon, 13 Jun 2016 01:25:27 -0400 Received: from player791.ha.ovh.net (b9.ovh.net [213.186.33.59]) by mo178.mail-out.ovh.net (Postfix) with ESMTP id 1E60D1000E9C for ; Mon, 13 Jun 2016 07:25:27 +0200 (CEST) From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Mon, 13 Jun 2016 07:24:50 +0200 Message-Id: <1465795496-15071-5-git-send-email-clg@kaod.org> In-Reply-To: <1465795496-15071-1-git-send-email-clg@kaod.org> References: <1465795496-15071-1-git-send-email-clg@kaod.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH 04/10] ppc: Fix POWER7 and POWER8 exception definitions List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Gibson Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org, Benjamin Herrenschmidt , Cedric Le Goater From: Benjamin Herrenschmidt We were initializing unused ones and missing some Signed-off-by: Benjamin Herrenschmidt Reviewed-by: David Gibson [clg: fixed checkpatch.pl errors ] Signed-off-by: C=C3=A9dric Le Goater --- target-ppc/cpu.h | 11 ++++++++++- target-ppc/translate_init.c | 27 +++++++++++++++++++++------ 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h index 93c2dd5a65a1..f005549c352e 100644 --- a/target-ppc/cpu.h +++ b/target-ppc/cpu.h @@ -116,6 +116,9 @@ enum { POWERPC_EXCP_HYPPRIV =3D 41, /* Embedded hypervisor priv instructio= n */ /* Vectors 42 to 63 are reserved = */ /* Exceptions defined in the PowerPC server specification = */ + /* Server doorbell variants */ +#define POWERPC_EXCP_SDOOR POWERPC_EXCP_GDOORI +#define POWERPC_EXCP_SDOOR_HV POWERPC_EXCP_DOORI POWERPC_EXCP_RESET =3D 64, /* System reset exception = */ POWERPC_EXCP_DSEG =3D 65, /* Data segment exception = */ POWERPC_EXCP_ISEG =3D 66, /* Instruction segment exception = */ @@ -158,8 +161,12 @@ enum { /* VSX Unavailable (Power ISA 2.06 and later) = */ POWERPC_EXCP_VSXU =3D 94, /* VSX Unavailable = */ POWERPC_EXCP_FU =3D 95, /* Facility Unavailable = */ + /* Additional ISA 2.06 and later server exceptions = */ + POWERPC_EXCP_HV_EMU =3D 96, /* HV emulation assistance = */ + POWERPC_EXCP_HV_MAINT =3D 97, /* HMI = */ + POWERPC_EXCP_HV_FU =3D 98, /* Hypervisor Facility unavailable = */ /* EOL = */ - POWERPC_EXCP_NB =3D 96, + POWERPC_EXCP_NB =3D 99, /* QEMU exceptions: used internally during code translation = */ POWERPC_EXCP_STOP =3D 0x200, /* stop translation = */ POWERPC_EXCP_BRANCH =3D 0x201, /* branch instruction = */ @@ -2196,6 +2203,8 @@ enum { PPC_INTERRUPT_CDOORBELL, /* Critical doorbell interrupt = */ PPC_INTERRUPT_DOORBELL, /* Doorbell interrupt = */ PPC_INTERRUPT_PERFM, /* Performance monitor interrupt = */ + PPC_INTERRUPT_HMI, /* Hypervisor Maintainance interrupt = */ + PPC_INTERRUPT_HDOORBELL, /* Hypervisor Doorbell interrupt = */ }; =20 /* Processor Compatibility mask (PCR) */ diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c index edfd91a85425..3b4234b325d1 100644 --- a/target-ppc/translate_init.c +++ b/target-ppc/translate_init.c @@ -3171,18 +3171,30 @@ static void init_excp_POWER7 (CPUPPCState *env) env->excp_vectors[POWERPC_EXCP_HDECR] =3D 0x00000980; env->excp_vectors[POWERPC_EXCP_SYSCALL] =3D 0x00000C00; env->excp_vectors[POWERPC_EXCP_TRACE] =3D 0x00000D00; + env->excp_vectors[POWERPC_EXCP_HDSI] =3D 0x00000E00; + env->excp_vectors[POWERPC_EXCP_HISI] =3D 0x00000E20; + env->excp_vectors[POWERPC_EXCP_HV_EMU] =3D 0x00000E40; + env->excp_vectors[POWERPC_EXCP_HV_MAINT] =3D 0x00000E60; env->excp_vectors[POWERPC_EXCP_PERFM] =3D 0x00000F00; env->excp_vectors[POWERPC_EXCP_VPU] =3D 0x00000F20; env->excp_vectors[POWERPC_EXCP_VSXU] =3D 0x00000F40; - env->excp_vectors[POWERPC_EXCP_FU] =3D 0x00000F60; - env->excp_vectors[POWERPC_EXCP_IABR] =3D 0x00001300; - env->excp_vectors[POWERPC_EXCP_MAINT] =3D 0x00001600; - env->excp_vectors[POWERPC_EXCP_VPUA] =3D 0x00001700; - env->excp_vectors[POWERPC_EXCP_THERM] =3D 0x00001800; /* Hardware reset vector */ env->hreset_vector =3D 0x0000000000000100ULL; #endif } + +static void init_excp_POWER8(CPUPPCState *env) +{ + init_excp_POWER7(env); + +#if !defined(CONFIG_USER_ONLY) + env->excp_vectors[POWERPC_EXCP_SDOOR] =3D 0x00000A00; + env->excp_vectors[POWERPC_EXCP_FU] =3D 0x00000F60; + env->excp_vectors[POWERPC_EXCP_HV_FU] =3D 0x00000F80; + env->excp_vectors[POWERPC_EXCP_SDOOR_HV] =3D 0x00000E80; +#endif +} + #endif =20 /***********************************************************************= ******/ @@ -8123,10 +8135,13 @@ static void init_proc_book3s_64(CPUPPCState *env,= int version) ppc970_irq_init(ppc_env_get_cpu(env)); break; case BOOK3S_CPU_POWER7: - case BOOK3S_CPU_POWER8: init_excp_POWER7(env); ppcPOWER7_irq_init(ppc_env_get_cpu(env)); break; + case BOOK3S_CPU_POWER8: + init_excp_POWER8(env); + ppcPOWER7_irq_init(ppc_env_get_cpu(env)); + break; default: g_assert_not_reached(); } --=20 2.1.4