diff --git a/src/arch/posix/arch.cc b/src/arch/posix/arch.cc
index 54ee8e11341b18b7a7711335eaf3c4874d0da443..98a3a08bf85397b125298bd7ea64e8c8edfd2c49 100644
--- a/src/arch/posix/arch.cc
+++ b/src/arch/posix/arch.cc
@@ -1,12 +1,29 @@
 #include "arch.h"
 #include <unistd.h>
 
+#if defined(WITH_LOOP) || defined(TIMER_S)
+#include "driver/uptime.h"
+void loop();
+#endif
+#ifdef WITH_WAKEUP
+void wakeup();
+#endif
+
 void Arch::setup(void) { }
 
 void Arch::idle_loop(void)
 {
 	while (1) {
 		sleep(1);
+#ifdef WITH_LOOP
+		loop();
+#endif
+#ifdef WITH_WAKEUP
+		wakeup();
+#endif
+#ifdef TIMER_S
+		uptime.tick_s();
+#endif
 	}
 }