[PATCH] bsps/clock: Fix fast idle mode
Sebastian Huber
sebastian.huber at embedded-brains.de
Tue Jan 16 15:44:06 UTC 2024
Switch back to the idle thread if no watchdogs are active. In some tests, the
idle thread may do some non-blocking work.
---
bsps/shared/dev/clock/clockimpl.h | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/bsps/shared/dev/clock/clockimpl.h b/bsps/shared/dev/clock/clockimpl.h
index e922c0b320..ec56e175f5 100644
--- a/bsps/shared/dev/clock/clockimpl.h
+++ b/bsps/shared/dev/clock/clockimpl.h
@@ -139,6 +139,21 @@ volatile uint32_t Clock_driver_ticks;
#error "Clock_driver_support_shutdown_hardware() is no longer supported"
#endif
+#if CLOCK_DRIVER_USE_FAST_IDLE
+static bool Clock_Has_watchdogs(const Per_CPU_Control *cpu)
+{
+ size_t i;
+
+ for (i = 0; i < RTEMS_ARRAY_SIZE(cpu->Watchdog.Header); ++i) {
+ if (_Watchdog_Header_first(&cpu->Watchdog.Header[i]) != NULL) {
+ return true;
+ }
+ }
+
+ return false;
+}
+#endif
+
/**
* @brief Clock_isr
*
@@ -182,6 +197,7 @@ rtems_isr Clock_isr(
cpu_self->thread_dispatch_disable_level == cpu_self->isr_nest_level
&& cpu_self->heir == cpu_self->executing
&& cpu_self->executing->is_idle
+ && Clock_Has_watchdogs(cpu_self)
) {
ISR_lock_Context lock_context;
--
2.35.3
More information about the devel
mailing list