Linux-Watchdog Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH v1] watchdog: wdat: add param. to start wdog on module insertion
@ 2021-02-18 16:32 Flavio Suligoi
  2021-02-19 10:54 ` Mika Westerberg
  0 siblings, 1 reply; 6+ messages in thread
From: Flavio Suligoi @ 2021-02-18 16:32 UTC (permalink / raw)
  To: Wim Van Sebroeck, Guenter Roeck, Mika Westerberg
  Cc: linux-watchdog, linux-kernel, Flavio Suligoi

Add the parameter "start_enable" to start the watchdog
directly on module insertion.

In an embedded system, for some applications, the watchdog
must be activated as soon as possible.

In some embedded x86 boards the watchdog can be activated
directly by the BIOS (with an appropriate setting of the
BIOS setup). In other cases, when this BIOS feature is not
present, the possibility to start the watchdog immediately
after the module loading can be very useful.

Signed-off-by: Flavio Suligoi <f.suligoi@asem.it>
---
 drivers/watchdog/wdat_wdt.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/watchdog/wdat_wdt.c b/drivers/watchdog/wdat_wdt.c
index cec7917790e5..b990d0197d2e 100644
--- a/drivers/watchdog/wdat_wdt.c
+++ b/drivers/watchdog/wdat_wdt.c
@@ -61,6 +61,12 @@ module_param(timeout, int, 0);
 MODULE_PARM_DESC(timeout, "Watchdog timeout in seconds (default="
 		 __MODULE_STRING(WDAT_DEFAULT_TIMEOUT) ")");
 
+#define START_DEFAULT	0
+static int start_enabled = START_DEFAULT;
+module_param(start_enabled, int, 0);
+MODULE_PARM_DESC(start_enabled, "Watchdog is started on module insertion "
+		 "(default=" __MODULE_STRING(START_DEFAULT) ")");
+
 static int wdat_wdt_read(struct wdat_wdt *wdat,
 	 const struct wdat_instruction *instr, u32 *value)
 {
@@ -437,6 +443,8 @@ static int wdat_wdt_probe(struct platform_device *pdev)
 	}
 
 	wdat_wdt_boot_status(wdat);
+	if (start_enabled)
+		wdat_wdt_start(&wdat->wdd);
 	wdat_wdt_set_running(wdat);
 
 	ret = wdat_wdt_enable_reboot(wdat);
-- 
2.25.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v1] watchdog: wdat: add param. to start wdog on module insertion
  2021-02-18 16:32 [PATCH v1] watchdog: wdat: add param. to start wdog on module insertion Flavio Suligoi
@ 2021-02-19 10:54 ` Mika Westerberg
  2021-02-19 14:01   ` R: " Flavio Suligoi
  0 siblings, 1 reply; 6+ messages in thread
From: Mika Westerberg @ 2021-02-19 10:54 UTC (permalink / raw)
  To: Flavio Suligoi
  Cc: Wim Van Sebroeck, Guenter Roeck, linux-watchdog, linux-kernel

Hi,

On Thu, Feb 18, 2021 at 05:32:00PM +0100, Flavio Suligoi wrote:
> Add the parameter "start_enable" to start the watchdog
> directly on module insertion.
> 
> In an embedded system, for some applications, the watchdog
> must be activated as soon as possible.
> 
> In some embedded x86 boards the watchdog can be activated
> directly by the BIOS (with an appropriate setting of the
> BIOS setup). In other cases, when this BIOS feature is not
> present, the possibility to start the watchdog immediately
> after the module loading can be very useful.
> 
> Signed-off-by: Flavio Suligoi <f.suligoi@asem.it>
> ---
>  drivers/watchdog/wdat_wdt.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/drivers/watchdog/wdat_wdt.c b/drivers/watchdog/wdat_wdt.c
> index cec7917790e5..b990d0197d2e 100644
> --- a/drivers/watchdog/wdat_wdt.c
> +++ b/drivers/watchdog/wdat_wdt.c
> @@ -61,6 +61,12 @@ module_param(timeout, int, 0);
>  MODULE_PARM_DESC(timeout, "Watchdog timeout in seconds (default="
>  		 __MODULE_STRING(WDAT_DEFAULT_TIMEOUT) ")");
>  
> +#define START_DEFAULT	0
> +static int start_enabled = START_DEFAULT;
> +module_param(start_enabled, int, 0);
> +MODULE_PARM_DESC(start_enabled, "Watchdog is started on module insertion "
> +		 "(default=" __MODULE_STRING(START_DEFAULT) ")");
> +
>  static int wdat_wdt_read(struct wdat_wdt *wdat,
>  	 const struct wdat_instruction *instr, u32 *value)
>  {
> @@ -437,6 +443,8 @@ static int wdat_wdt_probe(struct platform_device *pdev)
>  	}
>  
>  	wdat_wdt_boot_status(wdat);
> +	if (start_enabled)
> +		wdat_wdt_start(&wdat->wdd);

No objections to this if it is really needed. However, I think it is
better start the watchdog after devm_watchdog_register_device() has been
called so we have everything initialized.

>  	wdat_wdt_set_running(wdat);
>  
>  	ret = wdat_wdt_enable_reboot(wdat);
> -- 
> 2.25.1

^ permalink raw reply	[flat|nested] 6+ messages in thread

* R: [PATCH v1] watchdog: wdat: add param. to start wdog on module insertion
  2021-02-19 10:54 ` Mika Westerberg
@ 2021-02-19 14:01   ` Flavio Suligoi
  2021-02-19 15:32     ` Guenter Roeck
  0 siblings, 1 reply; 6+ messages in thread
From: Flavio Suligoi @ 2021-02-19 14:01 UTC (permalink / raw)
  To: Mika Westerberg
  Cc: Wim Van Sebroeck, Guenter Roeck, linux-watchdog, linux-kernel

Hi Mika,

> >  	 const struct wdat_instruction *instr, u32 *value)
> >  {
> > @@ -437,6 +443,8 @@ static int wdat_wdt_probe(struct platform_device
> *pdev)
> >  	}
> >
> >  	wdat_wdt_boot_status(wdat);
> > +	if (start_enabled)
> > +		wdat_wdt_start(&wdat->wdd);
> 
> No objections to this if it is really needed. However, I think it is
> better start the watchdog after devm_watchdog_register_device() has been
> called so we have everything initialized.

Yes, it is needed. We need this feature to enable the watchdog
as soon as possible and this is essential for unmanned applications,
such as routers, water pumping stations, climate data collections,
etc.  

Right, ok for the correct positioning of the wdat_wdt_start function
at the end of the watchdog device initialization. Thanks!

> 
> >  	wdat_wdt_set_running(wdat);
> >
> >  	ret = wdat_wdt_enable_reboot(wdat);
> > --
> > 2.25.1

Regards,
Flavio

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: R: [PATCH v1] watchdog: wdat: add param. to start wdog on module insertion
  2021-02-19 14:01   ` R: " Flavio Suligoi
@ 2021-02-19 15:32     ` Guenter Roeck
  2021-02-22 11:28       ` Flavio Suligoi
  0 siblings, 1 reply; 6+ messages in thread
From: Guenter Roeck @ 2021-02-19 15:32 UTC (permalink / raw)
  To: Flavio Suligoi, Mika Westerberg
  Cc: Wim Van Sebroeck, linux-watchdog, linux-kernel

On 2/19/21 6:01 AM, Flavio Suligoi wrote:
> Hi Mika,
> 
>>>  	 const struct wdat_instruction *instr, u32 *value)
>>>  {
>>> @@ -437,6 +443,8 @@ static int wdat_wdt_probe(struct platform_device
>> *pdev)
>>>  	}
>>>
>>>  	wdat_wdt_boot_status(wdat);
>>> +	if (start_enabled)
>>> +		wdat_wdt_start(&wdat->wdd);
>>
>> No objections to this if it is really needed. However, I think it is
>> better start the watchdog after devm_watchdog_register_device() has been
>> called so we have everything initialized.
> 
> Yes, it is needed. We need this feature to enable the watchdog
> as soon as possible and this is essential for unmanned applications,
> such as routers, water pumping stations, climate data collections,
> etc.  
> 
FWIW, in your use case the watchdog should be enabled in the
BIOS/ROMMON.

> Right, ok for the correct positioning of the wdat_wdt_start function
> at the end of the watchdog device initialization. Thanks!
> 

No, it isn't, because it won't set WDOG_HW_RUNNING, and the
watchdog core won't know that the watchdog is running.
The watchdog has to be started before the call to
wdat_wdt_set_running(). If that isn't possible with the
current location of wdat_wdt_set_running(), then
wdat_wdt_set_running() has to be moved accordingly.
Either case, both have to be called before calling
devm_watchdog_register_device().

Having said that, I'd prefer to have a module parameter
in the watchdog core. We already have a number of similar
module parameters in various drivers, all named differently,
and I'd rather not have more.

Guenter

>>
>>>  	wdat_wdt_set_running(wdat);
>>>
>>>  	ret = wdat_wdt_enable_reboot(wdat);
>>> --
>>> 2.25.1
> 
> Regards,
> Flavio
> 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: R: [PATCH v1] watchdog: wdat: add param. to start wdog on module insertion
  2021-02-19 15:32     ` Guenter Roeck
@ 2021-02-22 11:28       ` Flavio Suligoi
  2021-02-22 21:30         ` Guenter Roeck
  0 siblings, 1 reply; 6+ messages in thread
From: Flavio Suligoi @ 2021-02-22 11:28 UTC (permalink / raw)
  To: Guenter Roeck
  Cc: Wim Van Sebroeck, linux-watchdog, linux-kernel, Mika Westerberg

Hi Guenter

> >>>  	 const struct wdat_instruction *instr, u32 *value)  { @@ -437,6
> >>> +443,8 @@ static int wdat_wdt_probe(struct platform_device
> >> *pdev)
> >>>  	}
> >>>
> >>>  	wdat_wdt_boot_status(wdat);
> >>> +	if (start_enabled)
> >>> +		wdat_wdt_start(&wdat->wdd);
> >>
> >> No objections to this if it is really needed. However, I think it is
> >> better start the watchdog after devm_watchdog_register_device() has
> >> been called so we have everything initialized.
> >
> > Yes, it is needed. We need this feature to enable the watchdog as soon
> > as possible and this is essential for unmanned applications, such as
> > routers, water pumping stations, climate data collections, etc.
> >
> FWIW, in your use case the watchdog should be enabled in the
> BIOS/ROMMON.

Yes, you are right,  with the new BIOS version for the new boards
we'll implement this features, but for the old boards it is no more possible.

> 
> > Right, ok for the correct positioning of the wdat_wdt_start function
> > at the end of the watchdog device initialization. Thanks!
> >
> 
> No, it isn't, because it won't set WDOG_HW_RUNNING, and the watchdog
> core won't know that the watchdog is running.

Ok

> The watchdog has to be started before the call to wdat_wdt_set_running().
> If that isn't possible with the current location of wdat_wdt_set_running(),
> then
> wdat_wdt_set_running() has to be moved accordingly.
> Either case, both have to be called before calling
> devm_watchdog_register_device().

Ok

> 
> Having said that, I'd prefer to have a module parameter in the watchdog
> core. We already have a number of similar module parameters in various
> drivers, all named differently, and I'd rather not have more.

Ok, I'll study how to introduce a this new parameter in the wdog core,
so that it can be available for all watchdog drivers.
Then we'll have to think what to do with the existent similar parameters.
I think we have to keep them for compatibility reasons.

> 
> Guenter
> 

Regards,
Flavio

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: R: [PATCH v1] watchdog: wdat: add param. to start wdog on module insertion
  2021-02-22 11:28       ` Flavio Suligoi
@ 2021-02-22 21:30         ` Guenter Roeck
  0 siblings, 0 replies; 6+ messages in thread
From: Guenter Roeck @ 2021-02-22 21:30 UTC (permalink / raw)
  To: Flavio Suligoi
  Cc: Wim Van Sebroeck, linux-watchdog, linux-kernel, Mika Westerberg

On Mon, Feb 22, 2021 at 11:28:18AM +0000, Flavio Suligoi wrote:
[ ... ]
> > Having said that, I'd prefer to have a module parameter in the watchdog
> > core. We already have a number of similar module parameters in various
> > drivers, all named differently, and I'd rather not have more.
> 
> Ok, I'll study how to introduce a this new parameter in the wdog core,
> so that it can be available for all watchdog drivers.
> Then we'll have to think what to do with the existent similar parameters.
> I think we have to keep them for compatibility reasons.
> 

Correct.

Thanks,
Guenter

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, back to index

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-18 16:32 [PATCH v1] watchdog: wdat: add param. to start wdog on module insertion Flavio Suligoi
2021-02-19 10:54 ` Mika Westerberg
2021-02-19 14:01   ` R: " Flavio Suligoi
2021-02-19 15:32     ` Guenter Roeck
2021-02-22 11:28       ` Flavio Suligoi
2021-02-22 21:30         ` Guenter Roeck

Linux-Watchdog Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-watchdog/0 linux-watchdog/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-watchdog linux-watchdog/ https://lore.kernel.org/linux-watchdog \
		linux-watchdog@vger.kernel.org
	public-inbox-index linux-watchdog

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-watchdog


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git