aboutsummaryrefslogtreecommitdiff
path: root/target/ppc/cpu_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'target/ppc/cpu_init.c')
-rw-r--r--target/ppc/cpu_init.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c
index 5aa0b3f0f1..05bf73296b 100644
--- a/target/ppc/cpu_init.c
+++ b/target/ppc/cpu_init.c
@@ -6284,9 +6284,26 @@ static bool ppc_pvr_match_power9(PowerPCCPUClass *pcc, uint32_t pvr, bool best)
return false;
}
- if ((pvr & 0x0f00) == (pcc->pvr & 0x0f00)) {
- /* Major DD version matches to power9_v1.0 and power9_v2.0 */
+ if ((pvr & 0x0f00) != (pcc->pvr & 0x0f00)) {
+ /* Major DD version does not match */
+ return false;
+ }
+
+ if ((pvr & 0x0f00) == 0x100) {
+ /* DD1.x always matches power9_v1.0 */
return true;
+ } else if ((pvr & 0x0f00) == 0x200) {
+ if ((pvr & 0xf) < 2) {
+ /* DD2.0, DD2.1 match power9_v2.0 */
+ if ((pcc->pvr & 0xf) == 0) {
+ return true;
+ }
+ } else {
+ /* DD2.2, DD2.3 match power9_v2.2 */
+ if ((pcc->pvr & 0xf) == 2) {
+ return true;
+ }
+ }
}
return false;