Message ID | 20190128094625.4428-14-clg@kaod.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ppc: support for the baremetal XIVE interrupt controller (POWER9) | expand |
On Mon, Jan 28, 2019 at 10:46:19AM +0100, Cédric Le Goater wrote: > From: Benjamin Herrenschmidt <benh@kernel.crashing.org> > > To better reflect what this does, as it's specific to some of the > P7/P8/P9 PM states, not generic. > > Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> > Signed-off-by: Cédric Le Goater <clg@kaod.org> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> > --- > target/ppc/cpu.h | 6 +++--- > hw/ppc/ppc.c | 2 +- > target/ppc/excp_helper.c | 8 ++++---- > 3 files changed, 8 insertions(+), 8 deletions(-) > > diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h > index 7ff65c804b57..b69410ea2541 100644 > --- a/target/ppc/cpu.h > +++ b/target/ppc/cpu.h > @@ -1116,10 +1116,10 @@ struct CPUPPCState { > > /* > * On P7/P8/P9, set when in PM state, we need to handle resume in > - * a special way (such as routing some resume causes to 0x100), so > - * flag this here. > + * a special way (such as routing some resume causes to 0x100, ie, > + * sreset), so flag this here. > */ > - bool in_pm_state; > + bool resume_as_sreset; > #endif > > /* Those resources are used only during code translation */ > diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c > index 9292f986eba7..608405f6f2ca 100644 > --- a/hw/ppc/ppc.c > +++ b/hw/ppc/ppc.c > @@ -722,7 +722,7 @@ static inline void cpu_ppc_hdecr_excp(PowerPCCPU *cpu) > * interrupts in a PM state. Not only they don't cause a > * wakeup but they also get effectively discarded. > */ > - if (!env->in_pm_state) { > + if (!env->resume_as_sreset) { > ppc_set_irq(cpu, PPC_INTERRUPT_HDECR, 1); > } > } > diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c > index 489a54f51b90..7536620a4133 100644 > --- a/target/ppc/excp_helper.c > +++ b/target/ppc/excp_helper.c > @@ -69,7 +69,7 @@ static int powerpc_reset_wakeup(CPUState *cs, CPUPPCState *env, int excp, > target_ulong *msr) > { > /* We no longer are in a PM state */ > - env->in_pm_state = false; > + env->resume_as_sreset = false; > > /* Pretend to be returning from doze always as we don't lose state */ > *msr |= (0x1ull << (63 - 47)); > @@ -141,7 +141,7 @@ static inline void powerpc_excp(PowerPCCPU *cpu, int excp_model, int excp) > * check for special resume at 0x100 from doze/nap/sleep/winkle on > * P7/P8/P9 > */ > - if (env->in_pm_state) { > + if (env->resume_as_sreset) { > excp = powerpc_reset_wakeup(cs, env, excp, &msr); > } > > @@ -787,7 +787,7 @@ static void ppc_hw_interrupt(CPUPPCState *env) > * clear when coming out of some power management states (in order > * for them to become a 0x100). > */ > - async_deliver = (msr_ee != 0) || env->in_pm_state; > + async_deliver = (msr_ee != 0) || env->resume_as_sreset; > > /* Hypervisor decrementer exception */ > if (env->pending_interrupts & (1 << PPC_INTERRUPT_HDECR)) { > @@ -970,7 +970,7 @@ void helper_pminsn(CPUPPCState *env, powerpc_pm_insn_t insn) > env->pending_interrupts &= ~(1 << PPC_INTERRUPT_HDECR); > > /* Condition for waking up at 0x100 */ > - env->in_pm_state = (insn != PPC_PM_STOP) || > + env->resume_as_sreset = (insn != PPC_PM_STOP) || > (env->spr[SPR_PSSCR] & PSSCR_EC); > } > #endif /* defined(TARGET_PPC64) */
diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h index 7ff65c804b57..b69410ea2541 100644 --- a/target/ppc/cpu.h +++ b/target/ppc/cpu.h @@ -1116,10 +1116,10 @@ struct CPUPPCState { /* * On P7/P8/P9, set when in PM state, we need to handle resume in - * a special way (such as routing some resume causes to 0x100), so - * flag this here. + * a special way (such as routing some resume causes to 0x100, ie, + * sreset), so flag this here. */ - bool in_pm_state; + bool resume_as_sreset; #endif /* Those resources are used only during code translation */ diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c index 9292f986eba7..608405f6f2ca 100644 --- a/hw/ppc/ppc.c +++ b/hw/ppc/ppc.c @@ -722,7 +722,7 @@ static inline void cpu_ppc_hdecr_excp(PowerPCCPU *cpu) * interrupts in a PM state. Not only they don't cause a * wakeup but they also get effectively discarded. */ - if (!env->in_pm_state) { + if (!env->resume_as_sreset) { ppc_set_irq(cpu, PPC_INTERRUPT_HDECR, 1); } } diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c index 489a54f51b90..7536620a4133 100644 --- a/target/ppc/excp_helper.c +++ b/target/ppc/excp_helper.c @@ -69,7 +69,7 @@ static int powerpc_reset_wakeup(CPUState *cs, CPUPPCState *env, int excp, target_ulong *msr) { /* We no longer are in a PM state */ - env->in_pm_state = false; + env->resume_as_sreset = false; /* Pretend to be returning from doze always as we don't lose state */ *msr |= (0x1ull << (63 - 47)); @@ -141,7 +141,7 @@ static inline void powerpc_excp(PowerPCCPU *cpu, int excp_model, int excp) * check for special resume at 0x100 from doze/nap/sleep/winkle on * P7/P8/P9 */ - if (env->in_pm_state) { + if (env->resume_as_sreset) { excp = powerpc_reset_wakeup(cs, env, excp, &msr); } @@ -787,7 +787,7 @@ static void ppc_hw_interrupt(CPUPPCState *env) * clear when coming out of some power management states (in order * for them to become a 0x100). */ - async_deliver = (msr_ee != 0) || env->in_pm_state; + async_deliver = (msr_ee != 0) || env->resume_as_sreset; /* Hypervisor decrementer exception */ if (env->pending_interrupts & (1 << PPC_INTERRUPT_HDECR)) { @@ -970,7 +970,7 @@ void helper_pminsn(CPUPPCState *env, powerpc_pm_insn_t insn) env->pending_interrupts &= ~(1 << PPC_INTERRUPT_HDECR); /* Condition for waking up at 0x100 */ - env->in_pm_state = (insn != PPC_PM_STOP) || + env->resume_as_sreset = (insn != PPC_PM_STOP) || (env->spr[SPR_PSSCR] & PSSCR_EC); } #endif /* defined(TARGET_PPC64) */