[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] target-ppc: ppce500_spin.c uses SPR_PIR, should
Re: [Qemu-devel] [PATCH] target-ppc: ppce500_spin.c uses SPR_PIR, should use SPR_BOOKE_PIR
Mon, 27 Jun 2016 11:29:01 +1000
On Sat, Jun 25, 2016 at 09:55:13AM +0200, Thomas Huth wrote:
> On 24.06.2016 04:27, David Gibson wrote:
> > On Thu, Jun 23, 2016 at 03:35:17PM -0700, Aaron Larson wrote:
> >> ppce500_spin.c uses SPR_PIR to initialize the spin table, however on
> >> Book E processors the correct SPR is SPR_BOOKE_PIR.
> >> Signed-off-by: Aaron Larson <address@hidden>
> > Applied to ppc-for-2.7, thanks.
> > IIRC this leaves a redundant bit in spin_init, but that can be cleaned
> > up later.
> It's in spin_reset() ... and I'm not sure whether this value is needed
> between reset and kick time, so maybe it's safer to just keep that line
> in spin_reset()?
It shouldn't be. According to the spin table definition, the guest
isn't supposed to read the rest of the info in the table until after
it is kickced.
> >> ---
> >> hw/ppc/ppce500_spin.c | 2 +-
> >> 1 file changed, 1 insertion(+), 1 deletion(-)
> >> diff --git a/hw/ppc/ppce500_spin.c b/hw/ppc/ppce500_spin.c
> >> index 76bd78b..225177b 100644
> >> --- a/hw/ppc/ppce500_spin.c
> >> +++ b/hw/ppc/ppce500_spin.c
> >> @@ -104,7 +104,7 @@ static void spin_kick(void *data)
> >> hwaddr map_start;
> >> cpu_synchronize_state(cpu);
> >> - stl_p(&curspin->pir, env->spr[SPR_PIR]);
> >> + stl_p(&curspin->pir, env->spr[SPR_BOOKE_PIR]);
> >> env->nip = ldq_p(&curspin->addr) & (map_size - 1);
> >> env->gpr = ldq_p(&curspin->r3);
> >> env->gpr = 0;
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
Description: PGP signature