From: linux@roeck-us.net (Guenter Roeck)
To: linus-amlogic@lists.infradead.org
Subject: [RFC PATCH 1/3] watchdog: Add Meson GXBB Watchdog Driver
Date: Fri, 27 May 2016 06:48:53 -0700 [thread overview]
Message-ID: <57485045.70707@roeck-us.net> (raw)
In-Reply-To: <57480470.4000708@baylibre.com>
On 05/27/2016 01:25 AM, Neil Armstrong wrote:
[ ... ]
>>> + data->wdt_dev.max_hw_heartbeat_ms = GXBB_WDT_TCNT_SETUP_MASK;
>>> + data->wdt_dev.min_hw_heartbeat_ms = 1;
>>
>> Does the device require a minimum time between heartbeats ?
>> Just asking, because you violate it yourself below.
>>
>> If you want to set the minimum timeout, that would be min_timeout.
>
> Ok, these values are not very clear actually.
>
Hmmm .. yes, reading the description again, it doesn't really describe well
what it is doing. Essentially, min_hw_heartbeat_ms is enforced by the watchdog
core, and should be used if a watchdog hardware can not tolerate short intervals
between heartbeats. min_timeout is the minimum timeout value configurable from
user space.
>>> + data->wdt_dev.timeout = DEFAULT_TIMEOUT;
>>> + watchdog_set_drvdata(&data->wdt_dev, data);
>>> +
>>> + watchdog_init_timeout(&data->wdt_dev, DEFAULT_TIMEOUT, &pdev->dev);
>>> +
>>
>> DEFAULT_TIMEOUT is unnecessary here. Since the default timeout is already set,
>> it makes the call useless.
>>
>>> + ret = watchdog_register_device(&data->wdt_dev);
>>> + if (ret)
>>> + return ret;
>>> +
>>> + /* Setup with 1ms timebase */
>>> + writel(((clk_get_rate(data->clk) / 1000) & GXBB_WDT_CTRL_DIV_MASK) |
>>> + GXBB_WDT_CTRL_EE_RESET |
>>> + GXBB_WDT_CTRL_CLK_EN |
>>> + GXBB_WDT_CTRL_CLKDIV_EN,
>>> + data->reg_base + GXBB_WDT_CTRL_REG);
>>> + meson_gxbb_wdt_set_timeout(&data->wdt_dev, data->wdt_dev.timeout);
>>
>> set_timeout already calls the ping function. Also, the functions should be called
>> prior to watchdog registration to avoid race conditions.
>>
>>> + meson_gxbb_wdt_ping(&data->wdt_dev);
>>
>> This is unusual. If the watchdog can be already running, it might make sense
>> to tell the core about it (set WDOG_HW_RUNNING in the status field), so it
>> can send heartbeats until user space opens the device.
>
> Yes, since meson_gxbb_wdt_set_timeout() already ping, this is useless.
>
Not only that - if the watchdog _is_ already running at boot time, you should
really set WDOG_HW_RUNNING to let the watchdog core know. You status function
would come handy there.
if (meson_gxbb_wdt_status(data)) // note the changed parameter
set_bit(WDOG_HW_RUNNING, &data->wdt_dev.status);
Thanks,
Guenter
WARNING: multiple messages have this Message-ID (diff)
From: Guenter Roeck <linux@roeck-us.net>
To: Neil Armstrong <narmstrong@baylibre.com>,
Wim Van Sebroeck <wim@iguana.be>
Cc: linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-amlogic@lists.infradead.org,
linux-watchdog@vger.kernel.org
Subject: Re: [RFC PATCH 1/3] watchdog: Add Meson GXBB Watchdog Driver
Date: Fri, 27 May 2016 06:48:53 -0700 [thread overview]
Message-ID: <57485045.70707@roeck-us.net> (raw)
In-Reply-To: <57480470.4000708@baylibre.com>
On 05/27/2016 01:25 AM, Neil Armstrong wrote:
[ ... ]
>>> + data->wdt_dev.max_hw_heartbeat_ms = GXBB_WDT_TCNT_SETUP_MASK;
>>> + data->wdt_dev.min_hw_heartbeat_ms = 1;
>>
>> Does the device require a minimum time between heartbeats ?
>> Just asking, because you violate it yourself below.
>>
>> If you want to set the minimum timeout, that would be min_timeout.
>
> Ok, these values are not very clear actually.
>
Hmmm .. yes, reading the description again, it doesn't really describe well
what it is doing. Essentially, min_hw_heartbeat_ms is enforced by the watchdog
core, and should be used if a watchdog hardware can not tolerate short intervals
between heartbeats. min_timeout is the minimum timeout value configurable from
user space.
>>> + data->wdt_dev.timeout = DEFAULT_TIMEOUT;
>>> + watchdog_set_drvdata(&data->wdt_dev, data);
>>> +
>>> + watchdog_init_timeout(&data->wdt_dev, DEFAULT_TIMEOUT, &pdev->dev);
>>> +
>>
>> DEFAULT_TIMEOUT is unnecessary here. Since the default timeout is already set,
>> it makes the call useless.
>>
>>> + ret = watchdog_register_device(&data->wdt_dev);
>>> + if (ret)
>>> + return ret;
>>> +
>>> + /* Setup with 1ms timebase */
>>> + writel(((clk_get_rate(data->clk) / 1000) & GXBB_WDT_CTRL_DIV_MASK) |
>>> + GXBB_WDT_CTRL_EE_RESET |
>>> + GXBB_WDT_CTRL_CLK_EN |
>>> + GXBB_WDT_CTRL_CLKDIV_EN,
>>> + data->reg_base + GXBB_WDT_CTRL_REG);
>>> + meson_gxbb_wdt_set_timeout(&data->wdt_dev, data->wdt_dev.timeout);
>>
>> set_timeout already calls the ping function. Also, the functions should be called
>> prior to watchdog registration to avoid race conditions.
>>
>>> + meson_gxbb_wdt_ping(&data->wdt_dev);
>>
>> This is unusual. If the watchdog can be already running, it might make sense
>> to tell the core about it (set WDOG_HW_RUNNING in the status field), so it
>> can send heartbeats until user space opens the device.
>
> Yes, since meson_gxbb_wdt_set_timeout() already ping, this is useless.
>
Not only that - if the watchdog _is_ already running at boot time, you should
really set WDOG_HW_RUNNING to let the watchdog core know. You status function
would come handy there.
if (meson_gxbb_wdt_status(data)) // note the changed parameter
set_bit(WDOG_HW_RUNNING, &data->wdt_dev.status);
Thanks,
Guenter
WARNING: multiple messages have this Message-ID (diff)
From: linux@roeck-us.net (Guenter Roeck)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCH 1/3] watchdog: Add Meson GXBB Watchdog Driver
Date: Fri, 27 May 2016 06:48:53 -0700 [thread overview]
Message-ID: <57485045.70707@roeck-us.net> (raw)
In-Reply-To: <57480470.4000708@baylibre.com>
On 05/27/2016 01:25 AM, Neil Armstrong wrote:
[ ... ]
>>> + data->wdt_dev.max_hw_heartbeat_ms = GXBB_WDT_TCNT_SETUP_MASK;
>>> + data->wdt_dev.min_hw_heartbeat_ms = 1;
>>
>> Does the device require a minimum time between heartbeats ?
>> Just asking, because you violate it yourself below.
>>
>> If you want to set the minimum timeout, that would be min_timeout.
>
> Ok, these values are not very clear actually.
>
Hmmm .. yes, reading the description again, it doesn't really describe well
what it is doing. Essentially, min_hw_heartbeat_ms is enforced by the watchdog
core, and should be used if a watchdog hardware can not tolerate short intervals
between heartbeats. min_timeout is the minimum timeout value configurable from
user space.
>>> + data->wdt_dev.timeout = DEFAULT_TIMEOUT;
>>> + watchdog_set_drvdata(&data->wdt_dev, data);
>>> +
>>> + watchdog_init_timeout(&data->wdt_dev, DEFAULT_TIMEOUT, &pdev->dev);
>>> +
>>
>> DEFAULT_TIMEOUT is unnecessary here. Since the default timeout is already set,
>> it makes the call useless.
>>
>>> + ret = watchdog_register_device(&data->wdt_dev);
>>> + if (ret)
>>> + return ret;
>>> +
>>> + /* Setup with 1ms timebase */
>>> + writel(((clk_get_rate(data->clk) / 1000) & GXBB_WDT_CTRL_DIV_MASK) |
>>> + GXBB_WDT_CTRL_EE_RESET |
>>> + GXBB_WDT_CTRL_CLK_EN |
>>> + GXBB_WDT_CTRL_CLKDIV_EN,
>>> + data->reg_base + GXBB_WDT_CTRL_REG);
>>> + meson_gxbb_wdt_set_timeout(&data->wdt_dev, data->wdt_dev.timeout);
>>
>> set_timeout already calls the ping function. Also, the functions should be called
>> prior to watchdog registration to avoid race conditions.
>>
>>> + meson_gxbb_wdt_ping(&data->wdt_dev);
>>
>> This is unusual. If the watchdog can be already running, it might make sense
>> to tell the core about it (set WDOG_HW_RUNNING in the status field), so it
>> can send heartbeats until user space opens the device.
>
> Yes, since meson_gxbb_wdt_set_timeout() already ping, this is useless.
>
Not only that - if the watchdog _is_ already running at boot time, you should
really set WDOG_HW_RUNNING to let the watchdog core know. You status function
would come handy there.
if (meson_gxbb_wdt_status(data)) // note the changed parameter
set_bit(WDOG_HW_RUNNING, &data->wdt_dev.status);
Thanks,
Guenter
next prev parent reply other threads:[~2016-05-27 13:48 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-26 7:51 [RFC PATCH 0/3] watchdog: Add Amlogic Meson GXBB Watchdog Timer driver Neil Armstrong
2016-05-26 7:51 ` Neil Armstrong
2016-05-26 7:51 ` Neil Armstrong
2016-05-26 7:51 ` [RFC PATCH 1/3] watchdog: Add Meson GXBB Watchdog Driver Neil Armstrong
2016-05-26 7:51 ` Neil Armstrong
2016-05-26 7:51 ` Neil Armstrong
2016-05-26 10:06 ` Carlo Caione
2016-05-26 10:06 ` Carlo Caione
2016-05-26 10:06 ` Carlo Caione
2016-05-27 8:22 ` Neil Armstrong
2016-05-27 8:22 ` Neil Armstrong
2016-05-27 8:22 ` Neil Armstrong
2016-05-26 13:54 ` Guenter Roeck
2016-05-26 13:54 ` Guenter Roeck
2016-05-26 13:54 ` Guenter Roeck
2016-05-27 8:25 ` Neil Armstrong
2016-05-27 8:25 ` Neil Armstrong
2016-05-27 8:25 ` Neil Armstrong
2016-05-27 13:48 ` Guenter Roeck [this message]
2016-05-27 13:48 ` Guenter Roeck
2016-05-27 13:48 ` Guenter Roeck
2016-05-27 15:24 ` Neil Armstrong
2016-05-27 15:24 ` Neil Armstrong
2016-05-27 15:24 ` Neil Armstrong
2016-05-26 7:51 ` [RFC PATCH 2/3] dt-bindings: watchdog: Add Meson GXBB Watchdog bindings Neil Armstrong
2016-05-26 7:51 ` Neil Armstrong
2016-05-26 7:51 ` Neil Armstrong
2016-05-26 10:09 ` Carlo Caione
2016-05-26 10:09 ` Carlo Caione
2016-05-26 10:09 ` Carlo Caione
2016-05-26 10:09 ` Carlo Caione
2016-05-26 7:51 ` [RFC PATCH 3/3] ARM64: dts: amlogic: meson-gxbb: Add watchdog node Neil Armstrong
2016-05-26 7:51 ` Neil Armstrong
2016-05-26 7:51 ` Neil Armstrong
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=57485045.70707@roeck-us.net \
--to=linux@roeck-us.net \
--cc=linus-amlogic@lists.infradead.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.