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 <pau...@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.