diff options
author | Stefan Hajnoczi <stefanha@redhat.com> | 2025-04-08 09:12:48 -0400 |
---|---|---|
committer | Stefan Hajnoczi <stefanha@redhat.com> | 2025-04-08 09:12:49 -0400 |
commit | 70ff69a7b207c66c07ee3a8bf5cab872616db0de (patch) | |
tree | 75b1e2a04069ff949043eaac1c0258a794289e13 | |
parent | cd9e18641b4f2bf96c0b5add83ae1ebad87f9c3d (diff) | |
parent | b3d47c8303b8be2c3693c5704012b3334741b7ed (diff) | |
download | qemu-70ff69a7b207c66c07ee3a8bf5cab872616db0de.zip qemu-70ff69a7b207c66c07ee3a8bf5cab872616db0de.tar.gz qemu-70ff69a7b207c66c07ee3a8bf5cab872616db0de.tar.bz2 |
Merge tag 'pull-ppc-for-10.0-3-20250408' of https://gitlab.com/npiggin/qemu into staging
* Fix a couple of recent regressions in powernv SPRs
# -----BEGIN PGP SIGNATURE-----
#
# iQIzBAABCgAdFiEETkN92lZhb0MpsKeVZ7MCdqhiHK4FAmf1GkwACgkQZ7MCdqhi
# HK6tmw//XnldKdvFSaiisqxutdf+wWneqI1X+cVzVpSf6JyUN+SX3c4CSkt/u4NJ
# msWtmCEcHvvZBR0el9AxQVWhuRbO8A6EkkR8Fcx955rQ/CNPTz3YcHatIzpN2JMA
# NnnB9HxekBFet27A7+8iwtJGuQw5PPjbqN3GhzZcZZ3Kv8BTKZSBv1fnYINqdR9O
# 1gCaJRh3JLQn7cIj9Qh2MvMO4b+1XwuLuwosN5yd9x5oES9TarNFJbNq4/oSTIVI
# jdEb0CTwXL+IpymHLsVdvSmLALf218qnoRm8PqsOcep74MkXKBj+f158tJWha2wQ
# 9og75EYhnglLtU85TymCIlXFIA/DmN72zY7IK+dTr8ZDn4N7W9dSpJqqQjy9vSxX
# g9Z0/F38HBBzTVh+kgJ0Z9cjIkned4zRNZvxaiFl3f5TOEidZ5GU5fW16tWoE6Cj
# 44m5X6Si8SvPD+1pFHDd1cUQdNWoIjEW1uei1gK3E1jqmJNUfau8TaVqADQA1q4m
# RU4AFdP16tYMiRYEBdpCU6OmHgDn+lmoCwFN7n/hU88s4x5aLjYMCt0/XH3v84dg
# 4UpYz38icp9/nzOVdrCMFuiFd8ni+cFZ9ZaUSzTVKyQfJZ+IT7H2EyJgbcsIKTWj
# rPTuBjeHpsmo2XFumTKcvNUmnQB9LxkAhkSnkqhCSrEhoGySDik=
# =ryYx
# -----END PGP SIGNATURE-----
# gpg: Signature made Tue 08 Apr 2025 08:45:00 EDT
# gpg: using RSA key 4E437DDA56616F4329B0A79567B30276A8621CAE
# gpg: Good signature from "Nicholas Piggin <npiggin@gmail.com>" [unknown]
# gpg: WARNING: This key is not certified with a trusted signature!
# gpg: There is no indication that the signature belongs to the owner.
# Primary key fingerprint: 4E43 7DDA 5661 6F43 29B0 A795 67B3 0276 A862 1CAE
* tag 'pull-ppc-for-10.0-3-20250408' of https://gitlab.com/npiggin/qemu:
target/ppc: Fix SPRC/SPRD SPRs for P9/10
target/ppc: Big-core scratch register fix
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
-rw-r--r-- | target/ppc/cpu_init.c | 23 | ||||
-rw-r--r-- | target/ppc/misc_helper.c | 9 |
2 files changed, 20 insertions, 12 deletions
diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c index 7decc09..f81cb68 100644 --- a/target/ppc/cpu_init.c +++ b/target/ppc/cpu_init.c @@ -5801,6 +5801,18 @@ static void register_power9_book4_sprs(CPUPPCState *env) &spr_read_generic, &spr_write_generic, &spr_read_generic, &spr_write_generic, 0x00000000); + + /* SPRC/SPRD exist in earlier CPUs but only tested on POWER9/10 */ + spr_register_hv(env, SPR_POWER_SPRC, "SPRC", + SPR_NOACCESS, SPR_NOACCESS, + SPR_NOACCESS, SPR_NOACCESS, + &spr_read_generic, &spr_write_sprc, + 0x00000000); + spr_register_hv(env, SPR_POWER_SPRD, "SPRD", + SPR_NOACCESS, SPR_NOACCESS, + SPR_NOACCESS, SPR_NOACCESS, + &spr_read_sprd, &spr_write_sprd, + 0x00000000); #endif } @@ -5822,17 +5834,6 @@ static void register_power8_book4_sprs(CPUPPCState *env) SPR_NOACCESS, SPR_NOACCESS, &spr_read_generic, &spr_write_generic, KVM_REG_PPC_WORT, 0); - /* SPRC/SPRD exist in earlier CPUs but only tested on POWER9/10 */ - spr_register_hv(env, SPR_POWER_SPRC, "SPRC", - SPR_NOACCESS, SPR_NOACCESS, - SPR_NOACCESS, SPR_NOACCESS, - &spr_read_generic, &spr_write_sprc, - 0x00000000); - spr_register_hv(env, SPR_POWER_SPRD, "SPRD", - SPR_NOACCESS, SPR_NOACCESS, - SPR_NOACCESS, SPR_NOACCESS, - &spr_read_sprd, &spr_write_sprd, - 0x00000000); #endif } diff --git a/target/ppc/misc_helper.c b/target/ppc/misc_helper.c index 2d9512c..46ae454 100644 --- a/target/ppc/misc_helper.c +++ b/target/ppc/misc_helper.c @@ -332,6 +332,10 @@ target_ulong helper_load_sprd(CPUPPCState *env) PnvCore *pc = pnv_cpu_state(cpu)->pnv_core; target_ulong sprc = env->spr[SPR_POWER_SPRC]; + if (pc->big_core) { + pc = pnv_chip_find_core(pc->chip, CPU_CORE(pc)->core_id & ~0x1); + } + switch (sprc & 0x3e0) { case 0: /* SCRATCH0-3 */ case 1: /* SCRATCH4-7 */ @@ -368,6 +372,10 @@ void helper_store_sprd(CPUPPCState *env, target_ulong val) PnvCore *pc = pnv_cpu_state(cpu)->pnv_core; int nr; + if (pc->big_core) { + pc = pnv_chip_find_core(pc->chip, CPU_CORE(pc)->core_id & ~0x1); + } + switch (sprc & 0x3e0) { case 0: /* SCRATCH0-3 */ case 1: /* SCRATCH4-7 */ @@ -378,7 +386,6 @@ void helper_store_sprd(CPUPPCState *env, target_ulong val) * information. Could also dump these upon checkstop. */ nr = (sprc >> 3) & 0x7; - qemu_log("SPRD write 0x" TARGET_FMT_lx " to SCRATCH%d\n", val, nr); pc->scratch[nr] = val; break; default: |