return 0;
}
+static inline bool ppc_cpu_is_valid(PowerPCCPUClass *pcc)
+{
+#ifdef TARGET_PPCEMB
+ return pcc->mmu_model == POWERPC_MMU_BOOKE ||
+ pcc->mmu_model == POWERPC_MMU_SOFT_4xx ||
+ pcc->mmu_model == POWERPC_MMU_SOFT_4xx_Z;
+#else
+ return true;
+#endif
+}
+
static void ppc_cpu_realizefn(DeviceState *dev, Error **errp)
{
CPUState *cs = CPU(dev);
}
#if defined(TARGET_PPCEMB)
- if (pcc->mmu_model != POWERPC_MMU_BOOKE) {
- error_setg(errp, "CPU does not possess a BookE MMU. "
+ if (!ppc_cpu_is_valid(pcc)) {
+ error_setg(errp, "CPU does not possess a BookE or 4xx MMU. "
"Please use qemu-system-ppc or qemu-system-ppc64 instead "
"or choose another CPU model.");
return;
return -1;
}
-#if defined(TARGET_PPCEMB)
- if (pcc->mmu_model != POWERPC_MMU_BOOKE) {
+ if (!ppc_cpu_is_valid(pcc)) {
return -1;
}
-#endif
return pcc->pvr == pvr ? 0 : -1;
}
return -1;
}
-#if defined(TARGET_PPCEMB)
- if (pcc->mmu_model != POWERPC_MMU_BOOKE) {
+ if (!ppc_cpu_is_valid(pcc)) {
return -1;
}
-#endif
+
ret = (((pcc->pvr & pcc->pvr_mask) == (pvr & pcc->pvr_mask)) ? 0 : -1);
return ret;
{
ObjectClass *oc = (ObjectClass *)a;
const char *name = b;
-#if defined(TARGET_PPCEMB)
PowerPCCPUClass *pcc = POWERPC_CPU_CLASS(oc);
-#endif
if (strncasecmp(name, object_class_get_name(oc), strlen(name)) == 0 &&
-#if defined(TARGET_PPCEMB)
- pcc->mmu_model == POWERPC_MMU_BOOKE &&
-#endif
+ ppc_cpu_is_valid(pcc) &&
strcmp(object_class_get_name(oc) + strlen(name),
"-" TYPE_POWERPC_CPU) == 0) {
return 0;
char *name;
int i;
-#if defined(TARGET_PPCEMB)
- if (pcc->mmu_model != POWERPC_MMU_BOOKE) {
+ if (!ppc_cpu_is_valid(pcc)) {
return;
}
-#endif
if (unlikely(strcmp(typename, TYPE_HOST_POWERPC_CPU) == 0)) {
return;
}
const char *typename;
CpuDefinitionInfoList *entry;
CpuDefinitionInfo *info;
-#if defined(TARGET_PPCEMB)
PowerPCCPUClass *pcc = POWERPC_CPU_CLASS(oc);
- if (pcc->mmu_model != POWERPC_MMU_BOOKE) {
+ if (!ppc_cpu_is_valid(pcc)) {
return;
}
-#endif
typename = object_class_get_name(oc);
info = g_malloc0(sizeof(*info));
} else if (strcmp(arch, "or32") == 0) {
ADD_MACHINE_TESTS(arch, openrisc_machines);
} else if (strcmp(arch, "ppcemb") == 0) {
-#if 0
- /* XXX Available in ppcemb but don't work */
ADD_MACHINE_TESTS(arch, ppc405_machines);
-#endif
ADD_MACHINE_TESTS(arch, ppc440_machines);
} else if (strcmp(arch, "ppc") == 0) {
ADD_MACHINE_TESTS(arch, ppc405_machines);