All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guenter Roeck <linux@roeck-us.net>
To: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>,
	Stefan Riedmueller <s.riedmueller@phytec.de>,
	Wim Van Sebroeck <wim@linux-watchdog.org>,
	Support Opensource <Support.Opensource@diasemi.com>
Cc: "linux-watchdog@vger.kernel.org" <linux-watchdog@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 2/3] watchdog: da9063: Use pre configured timeout when watchdog is running
Date: Tue, 31 Mar 2020 09:08:29 -0700	[thread overview]
Message-ID: <387fadc6-1eab-ada7-86dd-0e47c5e9cb9f@roeck-us.net> (raw)
In-Reply-To: <AM6PR10MB2263A1A76AFFBCE7BCC4B93880CB0@AM6PR10MB2263.EURPRD10.PROD.OUTLOOK.COM>

On 3/30/20 9:38 AM, Adam Thomson wrote:
> On 26 March 2020 15:02, Stefan Riedmueller wrote:
> 
>> If the watchdog is already running during probe use its pre-configured
>> timeout instead of a default timeout to make sure the watchdog is pinged
>> in time until userspace takes over.
> 
> At least for this driver I don't think there's an issue here with regards to
> not pinging in time. Calling 'da9063_wdt_update_timeout()', as it currently
> does in the probe() when the watchdog is already active, actually disables the
> watchdog before then setting a new timeout value, so by that method we're
> avoiding a timeout and starting a new timer period.
> 
> To my mind the timeout value should come from DT if possible, which I would
> assume for the most part would match whatever is defined in the bootloader as
> well, unless I'm mistaken. If that's not available though then I would maybe
> agree on falling back to a value that was already programmed in the bootloader
> rather than the driver default which should be the last resort.
> 
Agreed.

Guenter

>>
>> Signed-off-by: Stefan Riedmueller <s.riedmueller@phytec.de>
>> ---
>>  drivers/watchdog/da9063_wdt.c | 29 ++++++++++++++++++-----------
>>  1 file changed, 18 insertions(+), 11 deletions(-)
>>
>> diff --git a/drivers/watchdog/da9063_wdt.c b/drivers/watchdog/da9063_wdt.c
>> index 3d65e92a4e3f..34d0c4f03814 100644
>> --- a/drivers/watchdog/da9063_wdt.c
>> +++ b/drivers/watchdog/da9063_wdt.c
>> @@ -46,15 +46,16 @@ static unsigned int da9063_wdt_timeout_to_sel(unsigned
>> int secs)
>>  }
>>
>>  /*
>> - * Return 0 if watchdog is disabled, else non zero.
>> + * Read the currently active timeout.
>> + * Zero means the watchdog is disabled.
>>   */
>> -static unsigned int da9063_wdt_is_running(struct da9063 *da9063)
>> +static unsigned int da9063_wdt_read_timeout(struct da9063 *da9063)
>>  {
>>  	unsigned int val;
>>
>>  	regmap_read(da9063->regmap, DA9063_REG_CONTROL_D, &val);
>>
>> -	return val & DA9063_TWDSCALE_MASK;
>> +	return wdt_timeout[val & DA9063_TWDSCALE_MASK];
>>  }
>>
>>  static int da9063_wdt_disable_timer(struct da9063 *da9063)
>> @@ -191,6 +192,7 @@ static int da9063_wdt_probe(struct platform_device
>> *pdev)
>>  	struct device *dev = &pdev->dev;
>>  	struct da9063 *da9063;
>>  	struct watchdog_device *wdd;
>> +	int timeout;
>>
>>  	if (!dev->parent)
>>  		return -EINVAL;
>> @@ -214,15 +216,20 @@ static int da9063_wdt_probe(struct platform_device
>> *pdev)
>>  	watchdog_set_restart_priority(wdd, 128);
>>  	watchdog_set_drvdata(wdd, da9063);
>>
>> -	/* Set default timeout, maybe override it with DT value, scale it */
>> -	wdd->timeout = DA9063_WDG_TIMEOUT;
>> -	watchdog_init_timeout(wdd, 0, dev);
>> -	da9063_wdt_set_timeout(wdd, wdd->timeout);
>> -
>> -	/* Change the timeout to the default value if the watchdog is running */
>> -	if (da9063_wdt_is_running(da9063)) {
>> -		da9063_wdt_update_timeout(da9063, wdd->timeout);
>> +	/*
>> +	 * Use pre-configured timeout if watchdog is already running.
>> +	 * Otherwise set default timeout, maybe override it with DT value,
>> +	 * scale it
>> +	 */
>> +	timeout = da9063_wdt_read_timeout(da9063);
>> +	if (timeout) {
>> +		wdd->timeout = timeout;
>>  		set_bit(WDOG_HW_RUNNING, &wdd->status);
>> +		dev_info(da9063->dev, "watchdog is running (%u s)", timeout);
>> +	} else {
>> +		wdd->timeout = DA9063_WDG_TIMEOUT;
>> +		watchdog_init_timeout(wdd, 0, dev);
>> +		da9063_wdt_set_timeout(wdd, wdd->timeout);
>>  	}
>>
>>  	return devm_watchdog_register_device(dev, wdd);
>> --
>> 2.23.0
> 


  reply	other threads:[~2020-03-31 16:08 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-26 15:02 [PATCH 1/3] watchdog: da9062: Use pre-configured timeout until userspace takes over Stefan Riedmueller
2020-03-26 15:02 ` [PATCH 2/3] watchdog: da9063: Use pre configured timeout when watchdog is running Stefan Riedmueller
2020-03-30 16:38   ` Adam Thomson
2020-03-31 16:08     ` Guenter Roeck [this message]
2020-04-01  8:19       ` Stefan Riedmüller
2020-03-26 15:02 ` [PATCH 3/3] watchdog: da9062: No need to ping manually before setting timeout Stefan Riedmueller
2020-03-31 16:11   ` Guenter Roeck
2020-04-01 10:20   ` Adam Thomson
2020-03-31 16:00 ` [PATCH 1/3] watchdog: da9062: Use pre-configured timeout until userspace takes over Guenter Roeck
2020-03-31 16:04 ` Guenter Roeck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=387fadc6-1eab-ada7-86dd-0e47c5e9cb9f@roeck-us.net \
    --to=linux@roeck-us.net \
    --cc=Adam.Thomson.Opensource@diasemi.com \
    --cc=Support.Opensource@diasemi.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-watchdog@vger.kernel.org \
    --cc=s.riedmueller@phytec.de \
    --cc=wim@linux-watchdog.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.