Commit 8c92ba6c authored by Chris Metcalf's avatar Chris Metcalf

arch/tile: add "nop" after "nap" to help GX idle power draw

This avoids the hardware istream prefetcher doing unnecessary work.
Signed-off-by: default avatarChris Metcalf <cmetcalf@tilera.com>
parent bfffe79b
...@@ -85,6 +85,7 @@ STD_ENTRY(cpu_idle_on_new_stack) ...@@ -85,6 +85,7 @@ STD_ENTRY(cpu_idle_on_new_stack)
/* Loop forever on a nap during SMP boot. */ /* Loop forever on a nap during SMP boot. */
STD_ENTRY(smp_nap) STD_ENTRY(smp_nap)
nap nap
nop /* avoid provoking the icache prefetch with a jump */
j smp_nap /* we are not architecturally guaranteed not to exit nap */ j smp_nap /* we are not architecturally guaranteed not to exit nap */
jrp lr /* clue in the backtracer */ jrp lr /* clue in the backtracer */
STD_ENDPROC(smp_nap) STD_ENDPROC(smp_nap)
...@@ -105,5 +106,6 @@ STD_ENTRY(_cpu_idle) ...@@ -105,5 +106,6 @@ STD_ENTRY(_cpu_idle)
.global _cpu_idle_nap .global _cpu_idle_nap
_cpu_idle_nap: _cpu_idle_nap:
nap nap
nop /* avoid provoking the icache prefetch with a jump */
jrp lr jrp lr
STD_ENDPROC(_cpu_idle) STD_ENDPROC(_cpu_idle)
...@@ -103,7 +103,7 @@ static void smp_stop_cpu_interrupt(void) ...@@ -103,7 +103,7 @@ static void smp_stop_cpu_interrupt(void)
set_cpu_online(smp_processor_id(), 0); set_cpu_online(smp_processor_id(), 0);
arch_local_irq_disable_all(); arch_local_irq_disable_all();
for (;;) for (;;)
asm("nap"); asm("nap; nop");
} }
/* This function calls the 'stop' function on all other CPUs in the system. */ /* This function calls the 'stop' function on all other CPUs in the system. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment