[PATCH 3/5] powerpc/microwatt: Define an idle power-save function
Paul Mackerras
paulus at ozlabs.org
Wed Jan 29 17:49:10 AEDT 2025
On Wed, Jan 29, 2025 at 04:06:03PM +1000, Nicholas Piggin wrote:
> On Wed Jan 29, 2025 at 8:52 AM AEST, Paul Mackerras wrote:
> > This uses the 'wait' instruction to pause instruction execution when
> > idle until an interrupt occurs.
> >
> > Signed-off-by: Paul Mackerras <paulus at ozlabs.org>
> > ---
> > arch/powerpc/platforms/microwatt/setup.c | 9 +++++++++
> > 1 file changed, 9 insertions(+)
> >
> > diff --git a/arch/powerpc/platforms/microwatt/setup.c b/arch/powerpc/platforms/microwatt/setup.c
> > index 5e1c0997170d..97828a99780d 100644
> > --- a/arch/powerpc/platforms/microwatt/setup.c
> > +++ b/arch/powerpc/platforms/microwatt/setup.c
> > @@ -34,10 +34,19 @@ static void __init microwatt_setup_arch(void)
> > microwatt_rng_init();
> > }
> >
> > +static void microwatt_idle(void)
> > +{
> > + if (!prep_irq_for_idle())
> > + return;
> > +
> > + __asm__ __volatile__ ("wait");
> > +}
>
> Does wait cause MSR[EE] to be set? If not, do you need to use
> prep_irq_for_idle_irqsoff() here maybe?
The wait instruction doesn't do anything to MSR[EE], but a pending
external interrupt (or any asynchronous exception condition) will
terminate the wait regardless of MSR[EE].
So yes, it does like I should be using prep_irq_for_idle_irqsoff().
Thanks,
Paul.
More information about the Linuxppc-dev
mailing list