Hi Guenter, ... > On 4/9/21 2:34 AM, Flavio Suligoi wrote: > > The new parameter "start_enabled" starts the watchdog at the same time > > of the module insertion. > > This feature is very useful in embedded systems, to avoid cases where > > the system hangs before reaching userspace. > > > > This function can be also enabled in the kernel config, so can be > > used when the watchdog driver is build as built-in. > > > > This parameter involves the "core" section of the watchdog driver; > > in this way it is common for all the watchdog hardware implementations. > > > > Note: to use only for watchdog drivers which doesn't support this > > parameter by itself. > > > > Signed-off-by: Flavio Suligoi <f.suligoi@xxxxxxx> > > --- > > Documentation/watchdog/watchdog-parameters.rst | 5 +++++ > > drivers/watchdog/Kconfig | 14 ++++++++++++++ > > drivers/watchdog/watchdog_core.c | 12 ++++++++++++ > > 3 files changed, 31 insertions(+) > > > > diff --git a/Documentation/watchdog/watchdog-parameters.rst > b/Documentation/watchdog/watchdog-parameters.rst > > index 223c99361a30..623fd064df91 100644 > > --- a/Documentation/watchdog/watchdog-parameters.rst > > +++ b/Documentation/watchdog/watchdog-parameters.rst > > @@ -21,6 +21,11 @@ watchdog core: > > timeout. Setting this to a non-zero value can be useful to ensure that > > either userspace comes up properly, or the board gets reset and allows > > fallback logic in the bootloader to try something else. > > + start_enabled: > > + Watchdog is started on module insertion. This option can be also > > + selected by kernel config (default=kernel config parameter). > > + Use only for watchdog drivers which doesn't support this parameter > > + by itself. > > Why ? There are two drivers with an analogous feature (pnx833x_wdt and omap_wdt) and it is important not to enable the watchdog twice. Ok, I can substitute the sentence: " Use only for watchdog drivers which doesn't support this parameter itself." with another one, like: "If the driver supports this feature by itself, be carefully not to enable the watchdog twice". What do you think? > > > > > ------------------------------------------------- > > > > diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig > > index 0470dc15c085..c2a668d6bbbc 100644 > > --- a/drivers/watchdog/Kconfig > > +++ b/drivers/watchdog/Kconfig > > @@ -47,6 +47,20 @@ config WATCHDOG_NOWAYOUT > > get killed. If you say Y here, the watchdog cannot be stopped once > > it has been started. > > > > +config WATCHDOG_START_ENABLED > > + bool "Start watchdog on module insertion" > > + help > > + Say Y if you want to start the watchdog at the same time when the > > + driver is loaded. > > + This feature is very useful in embedded systems, to avoid cases where > > + the system could hang before reaching userspace. > > + This parameter involves the "core" section of the watchdog driver, > > + in this way it is common for all the watchdog hardware > > + implementations. > > "This parameter applies to all watchdog drivers.". The rest is implementation > detail and irrelevant here. Ok > > > + > > + Note: to use only for watchdog drivers which doesn't support this > > + parameter by itself. > > + > > This comment is quite useless in the Kconfig description. If enabled, it is enabled, > period. Ok, I'll remove this comment. > > > config WATCHDOG_HANDLE_BOOT_ENABLED > > bool "Update boot-enabled watchdog until userspace takes over" > > default y > > diff --git a/drivers/watchdog/watchdog_core.c > b/drivers/watchdog/watchdog_core.c > > index 5df0a22e2cb4..5052ae355219 100644 > > --- a/drivers/watchdog/watchdog_core.c > > +++ b/drivers/watchdog/watchdog_core.c > > @@ -43,6 +43,11 @@ static int stop_on_reboot = -1; > > module_param(stop_on_reboot, int, 0444); > > MODULE_PARM_DESC(stop_on_reboot, "Stop watchdogs on reboot (0=keep > watching, 1=stop)"); > > > > +static bool start_enabled = > IS_ENABLED(CONFIG_WATCHDOG_START_ENABLED); > > +module_param(start_enabled, bool, 0444); > > +MODULE_PARM_DESC(start_enabled, "Start watchdog on module insertion > (default=" > > + > __MODULE_STRING(IS_ENABLED(CONFIG_WATCHDOG_START_ENABL > ED)) ")"); > > + > > /* > > * Deferred Registration infrastructure. > > * > > @@ -224,6 +229,13 @@ static int __watchdog_register_device(struct > watchdog_device *wdd) > > * corrupted in a later stage then we expect a kernel panic! > > */ > > > > + /* If required, start the watchdog immediately */ > > + if (start_enabled) { > > + set_bit(WDOG_HW_RUNNING, &wdd->status); > > + wdd->ops->start(wdd); > > + pr_info("Watchdog enabled\n"); > > + } > > + > > /* Use alias for watchdog id if possible */ > > if (wdd->parent) { > > ret = of_alias_get_id(wdd->parent->of_node, "watchdog"); > > Best regards, Flavio Suligoi