
This patch introduces a schedule() function, which shall be used instead of the old WATCHDOG_RESET. Follow-up patches will make sure, that this new function is used.
Signed-off-by: Stefan Roese sr@denx.de Reviewed-by: Simon Glass sjg@chromium.org --- v2: - Add some checks in schedule(), that the cyclic IF is ready before calling into it. This fixes booting on some AM335x platforms.
v1: - Add Simon's RB tag - Add more comments in the header to fully document the prototypes
common/cyclic.c | 16 ++++++++++++++++ include/cyclic.h | 12 ++++++++++++ 2 files changed, 28 insertions(+)
diff --git a/common/cyclic.c b/common/cyclic.c index cd5dcb1f2b94..b3c180bd1a62 100644 --- a/common/cyclic.c +++ b/common/cyclic.c @@ -18,6 +18,8 @@
DECLARE_GLOBAL_DATA_PTR;
+void hw_watchdog_reset(void); + struct list_head *cyclic_get_list(void) { return &gd->cyclic->cyclic_list; @@ -96,6 +98,20 @@ void cyclic_run(void) gd->cyclic->cyclic_running = false; }
+void schedule(void) +{ + /* The HW watchdog is not integrated into the cyclic IF (yet) */ + if (IS_ENABLED(CONFIG_HW_WATCHDOG)) + hw_watchdog_reset(); + + /* + * schedule() might get called very early before the cyclic IF is + * ready. Make sure to only call cyclic_run() when it's initalized. + */ + if (gd && gd->cyclic && gd->cyclic->cyclic_ready) + cyclic_run(); +} + int cyclic_uninit(void) { struct cyclic_info *cyclic, *tmp; diff --git a/include/cyclic.h b/include/cyclic.h index 23902234cc87..760163643345 100644 --- a/include/cyclic.h +++ b/include/cyclic.h @@ -106,6 +106,14 @@ struct list_head *cyclic_get_list(void); * needs to be executed, then call into these registered functions. */ void cyclic_run(void); + +/** + * schedule() - Schedule all potentially waiting tasks + * + * Basically a wrapper for cyclic_run(), pontentially enhanced by some + * other parts, that need to get handled periodically. + */ +void schedule(void); #else static inline struct cyclic_info *cyclic_register(cyclic_func_t func, uint64_t delay_us, @@ -124,6 +132,10 @@ static inline void cyclic_run(void) { }
+static inline void schedule(void) +{ +} + static inline int cyclic_init(void) { return 0;