mirror of https://gitee.com/openkylin/qemu.git
ppc: Fix POWER7 and POWER8 exception definitions
We were initializing unused ones and missing some Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> [clg: fixed checkpatch.pl errors ] Signed-off-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
6d49d6d4ed
commit
f03a1af581
|
@ -116,6 +116,9 @@ enum {
|
||||||
POWERPC_EXCP_HYPPRIV = 41, /* Embedded hypervisor priv instruction */
|
POWERPC_EXCP_HYPPRIV = 41, /* Embedded hypervisor priv instruction */
|
||||||
/* Vectors 42 to 63 are reserved */
|
/* Vectors 42 to 63 are reserved */
|
||||||
/* Exceptions defined in the PowerPC server specification */
|
/* 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 = 64, /* System reset exception */
|
POWERPC_EXCP_RESET = 64, /* System reset exception */
|
||||||
POWERPC_EXCP_DSEG = 65, /* Data segment exception */
|
POWERPC_EXCP_DSEG = 65, /* Data segment exception */
|
||||||
POWERPC_EXCP_ISEG = 66, /* Instruction segment exception */
|
POWERPC_EXCP_ISEG = 66, /* Instruction segment exception */
|
||||||
|
@ -158,8 +161,12 @@ enum {
|
||||||
/* VSX Unavailable (Power ISA 2.06 and later) */
|
/* VSX Unavailable (Power ISA 2.06 and later) */
|
||||||
POWERPC_EXCP_VSXU = 94, /* VSX Unavailable */
|
POWERPC_EXCP_VSXU = 94, /* VSX Unavailable */
|
||||||
POWERPC_EXCP_FU = 95, /* Facility Unavailable */
|
POWERPC_EXCP_FU = 95, /* Facility Unavailable */
|
||||||
|
/* Additional ISA 2.06 and later server exceptions */
|
||||||
|
POWERPC_EXCP_HV_EMU = 96, /* HV emulation assistance */
|
||||||
|
POWERPC_EXCP_HV_MAINT = 97, /* HMI */
|
||||||
|
POWERPC_EXCP_HV_FU = 98, /* Hypervisor Facility unavailable */
|
||||||
/* EOL */
|
/* EOL */
|
||||||
POWERPC_EXCP_NB = 96,
|
POWERPC_EXCP_NB = 99,
|
||||||
/* QEMU exceptions: used internally during code translation */
|
/* QEMU exceptions: used internally during code translation */
|
||||||
POWERPC_EXCP_STOP = 0x200, /* stop translation */
|
POWERPC_EXCP_STOP = 0x200, /* stop translation */
|
||||||
POWERPC_EXCP_BRANCH = 0x201, /* branch instruction */
|
POWERPC_EXCP_BRANCH = 0x201, /* branch instruction */
|
||||||
|
@ -2196,6 +2203,8 @@ enum {
|
||||||
PPC_INTERRUPT_CDOORBELL, /* Critical doorbell interrupt */
|
PPC_INTERRUPT_CDOORBELL, /* Critical doorbell interrupt */
|
||||||
PPC_INTERRUPT_DOORBELL, /* Doorbell interrupt */
|
PPC_INTERRUPT_DOORBELL, /* Doorbell interrupt */
|
||||||
PPC_INTERRUPT_PERFM, /* Performance monitor interrupt */
|
PPC_INTERRUPT_PERFM, /* Performance monitor interrupt */
|
||||||
|
PPC_INTERRUPT_HMI, /* Hypervisor Maintainance interrupt */
|
||||||
|
PPC_INTERRUPT_HDOORBELL, /* Hypervisor Doorbell interrupt */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Processor Compatibility mask (PCR) */
|
/* Processor Compatibility mask (PCR) */
|
||||||
|
|
|
@ -3180,18 +3180,30 @@ static void init_excp_POWER7 (CPUPPCState *env)
|
||||||
env->excp_vectors[POWERPC_EXCP_HDECR] = 0x00000980;
|
env->excp_vectors[POWERPC_EXCP_HDECR] = 0x00000980;
|
||||||
env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00;
|
env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00;
|
||||||
env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00;
|
env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00;
|
||||||
|
env->excp_vectors[POWERPC_EXCP_HDSI] = 0x00000E00;
|
||||||
|
env->excp_vectors[POWERPC_EXCP_HISI] = 0x00000E20;
|
||||||
|
env->excp_vectors[POWERPC_EXCP_HV_EMU] = 0x00000E40;
|
||||||
|
env->excp_vectors[POWERPC_EXCP_HV_MAINT] = 0x00000E60;
|
||||||
env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00;
|
env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00;
|
||||||
env->excp_vectors[POWERPC_EXCP_VPU] = 0x00000F20;
|
env->excp_vectors[POWERPC_EXCP_VPU] = 0x00000F20;
|
||||||
env->excp_vectors[POWERPC_EXCP_VSXU] = 0x00000F40;
|
env->excp_vectors[POWERPC_EXCP_VSXU] = 0x00000F40;
|
||||||
env->excp_vectors[POWERPC_EXCP_FU] = 0x00000F60;
|
|
||||||
env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300;
|
|
||||||
env->excp_vectors[POWERPC_EXCP_MAINT] = 0x00001600;
|
|
||||||
env->excp_vectors[POWERPC_EXCP_VPUA] = 0x00001700;
|
|
||||||
env->excp_vectors[POWERPC_EXCP_THERM] = 0x00001800;
|
|
||||||
/* Hardware reset vector */
|
/* Hardware reset vector */
|
||||||
env->hreset_vector = 0x0000000000000100ULL;
|
env->hreset_vector = 0x0000000000000100ULL;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void init_excp_POWER8(CPUPPCState *env)
|
||||||
|
{
|
||||||
|
init_excp_POWER7(env);
|
||||||
|
|
||||||
|
#if !defined(CONFIG_USER_ONLY)
|
||||||
|
env->excp_vectors[POWERPC_EXCP_SDOOR] = 0x00000A00;
|
||||||
|
env->excp_vectors[POWERPC_EXCP_FU] = 0x00000F60;
|
||||||
|
env->excp_vectors[POWERPC_EXCP_HV_FU] = 0x00000F80;
|
||||||
|
env->excp_vectors[POWERPC_EXCP_SDOOR_HV] = 0x00000E80;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -8132,10 +8144,13 @@ static void init_proc_book3s_64(CPUPPCState *env, int version)
|
||||||
ppc970_irq_init(ppc_env_get_cpu(env));
|
ppc970_irq_init(ppc_env_get_cpu(env));
|
||||||
break;
|
break;
|
||||||
case BOOK3S_CPU_POWER7:
|
case BOOK3S_CPU_POWER7:
|
||||||
case BOOK3S_CPU_POWER8:
|
|
||||||
init_excp_POWER7(env);
|
init_excp_POWER7(env);
|
||||||
ppcPOWER7_irq_init(ppc_env_get_cpu(env));
|
ppcPOWER7_irq_init(ppc_env_get_cpu(env));
|
||||||
break;
|
break;
|
||||||
|
case BOOK3S_CPU_POWER8:
|
||||||
|
init_excp_POWER8(env);
|
||||||
|
ppcPOWER7_irq_init(ppc_env_get_cpu(env));
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached();
|
g_assert_not_reached();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue