]> rtime.felk.cvut.cz Git - l4.git/blobdiff - kernel/fiasco/src/kern/arm/bsp/exynos/kernel_thread-arm-exynos.cpp
update
[l4.git] / kernel / fiasco / src / kern / arm / bsp / exynos / kernel_thread-arm-exynos.cpp
index cc0a798fbfeb9e778ed268fbb5f593d65e77dbec..672dd5ab13ddf50b0cf582722224c928662d8df2 100644 (file)
@@ -1,18 +1,45 @@
 //--------------------------------------------------------------------------
-IMPLEMENTATION [arm && tickless_idle && exynos]:
+IMPLEMENTATION [arm && tickless_idle && exynos && mp]:
 
 #include "cpu.h"
 #include "platform_control.h"
 #include "processor.h"
 #include "scheduler.h"
 
-PROTECTED inline NEEDS["processor.h"]
+PROTECTED inline NEEDS["processor.h", "cpu.h", "platform_control.h", "scheduler.h"]
+void
+Kernel_thread::arch_tickless_idle(Cpu_number cpu)
+{
+  if (cpu != Cpu_number::boot_cpu() && Platform_control::cpu_suspend_allowed(cpu))
+    {
+      take_cpu_offline(cpu);
+      Scheduler::scheduler.trigger_hotplug_event();
+
+      Platform_control::do_core_n_off(cpu);
+
+      take_cpu_online(cpu);
+      Scheduler::scheduler.trigger_hotplug_event();
+    }
+  else
+    Proc::halt();
+}
+
+//--------------------------------------------------------------------------
+IMPLEMENTATION [arm && tickless_idle && exynos && !mp]:
+
+#include "cpu.h"
+#include "processor.h"
+
+PROTECTED inline NEEDS["processor.h", "cpu.h"]
 void
 Kernel_thread::arch_tickless_idle(Cpu_number)
 {
   Proc::halt();
 }
 
+//--------------------------------------------------------------------------
+IMPLEMENTATION [arm && tickless_idle && exynos]:
+
 PROTECTED inline NEEDS["processor.h"]
 void
 Kernel_thread::arch_idle(Cpu_number)