|
@@ -771,6 +771,7 @@ static void copy_logical_pvr(void *a, void *b, bool set)
|
|
|
|
|
|
if (*pvr_logical_ptr) {
|
|
if (*pvr_logical_ptr) {
|
|
switch (*pvr_logical_ptr) {
|
|
switch (*pvr_logical_ptr) {
|
|
|
|
+ case CPU_POWERPC_LOGICAL_3_10_P11:
|
|
case CPU_POWERPC_LOGICAL_3_10:
|
|
case CPU_POWERPC_LOGICAL_3_10:
|
|
pcr = PCR_COMPAT_3_10 | PCR_COMPAT_3_00;
|
|
pcr = PCR_COMPAT_3_10 | PCR_COMPAT_3_00;
|
|
break;
|
|
break;
|
|
@@ -1185,6 +1186,12 @@ static target_ulong h_guest_get_capabilities(PowerPCCPU *cpu,
|
|
return H_PARAMETER;
|
|
return H_PARAMETER;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /* P11 capabilities */
|
|
|
|
+ if (ppc_check_compat(cpu, CPU_POWERPC_LOGICAL_3_10_P11, 0,
|
|
|
|
+ spapr->max_compat_pvr)) {
|
|
|
|
+ env->gpr[4] |= H_GUEST_CAPABILITIES_P11_MODE;
|
|
|
|
+ }
|
|
|
|
+
|
|
/* P10 capabilities */
|
|
/* P10 capabilities */
|
|
if (ppc_check_compat(cpu, CPU_POWERPC_LOGICAL_3_10, 0,
|
|
if (ppc_check_compat(cpu, CPU_POWERPC_LOGICAL_3_10, 0,
|
|
spapr->max_compat_pvr)) {
|
|
spapr->max_compat_pvr)) {
|
|
@@ -1227,7 +1234,10 @@ static target_ulong h_guest_set_capabilities(PowerPCCPU *cpu,
|
|
env->gpr[4] = 1;
|
|
env->gpr[4] = 1;
|
|
|
|
|
|
/* set R5 to the first supported Power Processor Mode */
|
|
/* set R5 to the first supported Power Processor Mode */
|
|
- if (ppc_check_compat(cpu, CPU_POWERPC_LOGICAL_3_10, 0,
|
|
|
|
|
|
+ if (ppc_check_compat(cpu, CPU_POWERPC_LOGICAL_3_10_P11, 0,
|
|
|
|
+ spapr->max_compat_pvr)) {
|
|
|
|
+ env->gpr[5] = H_GUEST_CAP_P11_MODE_BMAP;
|
|
|
|
+ } else if (ppc_check_compat(cpu, CPU_POWERPC_LOGICAL_3_10, 0,
|
|
spapr->max_compat_pvr)) {
|
|
spapr->max_compat_pvr)) {
|
|
env->gpr[5] = H_GUEST_CAP_P10_MODE_BMAP;
|
|
env->gpr[5] = H_GUEST_CAP_P10_MODE_BMAP;
|
|
} else if (ppc_check_compat(cpu, CPU_POWERPC_LOGICAL_3_00, 0,
|
|
} else if (ppc_check_compat(cpu, CPU_POWERPC_LOGICAL_3_00, 0,
|