Initialize the watchdog subsystem later during initialization, to allow for
the gpio-wdt driver to work.

Signed-off-by: Enrico Mioso <mrkiko...@gmail.com>
---
This change was motivated due to the need of getting the gpio_wdt.c driver
working, as stated in the commit message. I also tried the bootph- flags
approach, with no success. The objective of this patch, if not accepted, is to
try to have a discussion about how this particular case may be covered.
With this patch applied, my device works as intended. I tried to leave wdt init
as early as I could while getting it working.

I imagined the following alternatives to this approach:
1. Implement a two-phase init for watchdog drivers: adding a flag to some of
so that they get initialized later. Possibly this can be indicated via DT.
2. Work on the pinctrl driver side to have it initialized earlier.
For now, I would stick to this solution until sufficient interest emerges to
determine with certainty wether we can make the bootph- approach work.
---
 common/board_r.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/common/board_r.c b/common/board_r.c
index e6eab553e5..d5fe9a0d43 100644
--- a/common/board_r.c
+++ b/common/board_r.c
@@ -651,19 +651,13 @@ static init_fnc_t init_sequence_r[] = {
        serial_initialize,
        initr_announce,
        dm_announce,
-#if CONFIG_IS_ENABLED(WDT)
-       initr_watchdog,
-#endif
-       INIT_FUNC_WATCHDOG_RESET
        arch_initr_trap,
 #if defined(CONFIG_BOARD_EARLY_INIT_R)
        board_early_init_r,
 #endif
-       INIT_FUNC_WATCHDOG_RESET
 #ifdef CONFIG_POST
        post_output_backlog,
 #endif
-       INIT_FUNC_WATCHDOG_RESET
 #if defined(CONFIG_PCI_INIT_R) && defined(CONFIG_SYS_EARLY_PCI_INIT)
        /*
         * Do early PCI configuration _before_ the flash gets initialised,
@@ -678,7 +672,6 @@ static init_fnc_t init_sequence_r[] = {
 #ifdef CONFIG_MTD_NOR_FLASH
        initr_flash,
 #endif
-       INIT_FUNC_WATCHDOG_RESET
 #if defined(CONFIG_PPC) || defined(CONFIG_M68K) || defined(CONFIG_X86)
        /* initialize higher level parts of CPU like time base and timers */
        cpu_init_r,
@@ -707,6 +700,10 @@ static init_fnc_t init_sequence_r[] = {
 #ifdef CONFIG_PVBLOCK
        initr_pvblock,
 #endif
+#if CONFIG_IS_ENABLED(WDT)
+       initr_watchdog,
+#endif
+       INIT_FUNC_WATCHDOG_RESET
        initr_env,
 #ifdef CONFIG_SYS_MALLOC_BOOTPARAMS
        initr_malloc_bootparams,
-- 
2.46.2


_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to