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");
+}
+
 define_machine(microwatt) {
        .name                   = "microwatt",
        .compatible             = "microwatt-soc",
        .init_IRQ               = microwatt_init_IRQ,
        .setup_arch             = microwatt_setup_arch,
        .progress               = udbg_progress,
+       .power_save             = microwatt_idle,
 };
-- 
2.47.1


Reply via email to