linux-watchdog.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH] watchdog: Read device status through sysfs attributes for GPIO-controlled Watchdog.
       [not found] <CAFEvwum0uu1p9wK66rFbqFi4YQjfEfZcGd54Yeswk9=0EryP1Q@mail.gmail.com>
@ 2019-12-08 18:51 ` Guenter Roeck
       [not found]   ` <CAFEvwu=0ge4D7CPVwu3D+wLu_5T=8GTjhFFi6D97m6Nxkga5Ew@mail.gmail.com>
  0 siblings, 1 reply; 2+ messages in thread
From: Guenter Roeck @ 2019-12-08 18:51 UTC (permalink / raw)
  To: harshal chaudhari, Wim Van Sebroeck; +Cc: linux-watchdog

On 12/8/19 10:45 AM, harshal chaudhari wrote:
> Hi Wim and Guenter,
> 
> This patch adds following attributes to GPIO-controlled watchdog device's sysfs interface to read its different status.
> 
> 
You lost me. What does this patch do that CONFIG_WATCHDOG_SYSFS doesn't do as well ?

Guenter

> * state - reads whether device is active or not
> 
> * identity - reads Watchdog device's identity string.
> 
> * timeout - reads current timeout.
> 
> * bootstatus - reads status of the watchdog device at boot.
> 
> * nowayout - reads whether nowayout feature was set or not.
> 
> 
> Testing with GPIO Watchdog:
> 
> 
> $ cat bootstatus
> 
> 0
> 
> $ cat identity
> 
> GPIO Watchdog
> 
> $ cat nowayout
> 
> 0
> 
> $ cat state
> 
> inactive
> 
> $ cat timeout
> 
> 60
> 
> 
> Signed-off-by: harshal chaudhari <harshalchau04@gmail.com <mailto:harshalchau04@gmail.com>>
> 
> 
> 
> diff --git a/Documentation/devicetree/bindings/watchdog/gpio-wdt.txt b/Documentation/devicetree/bindings/watchdog/gpio-wdt.txt
> index 198794963786..762149375280 100644
> --- a/Documentation/devicetree/bindings/watchdog/gpio-wdt.txt
> +++ b/Documentation/devicetree/bindings/watchdog/gpio-wdt.txt
> @@ -26,3 +26,31 @@ Example:
>                  hw_algo = "toggle";
>                  hw_margin_ms = <1600>;
>          };
> +
> +
> +* Read device status through sysfs attributes
> +
> +  state - reads whether device is active or not
> +
> +       It is a read only file. It gives active/inactive status of
> +       watchdog device.
> +
> +  identity - reads Watchdog device's identity string.
> +
> +       It is a read only file. It contains identity string of
> +       watchdog device.
> +
> +  timeout - reads current timeout.
> +       It is a read only file. It is read to know about current
> +       value of timeout programmed.
> +
> +  bootstatus - reads status of the watchdog device at boot
> +       It is a read only file. It contains status of the watchdog
> +       device at boot. It is equivalent to WDIOC_GETBOOTSTATUS of
> +       ioctl interface.
> +
> +  nowayout - reads whether nowayout feature was set or not
> +       It is a read only file. While reading, it gives '1' if that
> +       device supports nowayout feature else, it gives '0'.
> +
> +For more details refer the documents as in Documentation/ABI/testing/sysfs-class-watchdog
> 
> diff --git a/drivers/watchdog/gpio_wdt.c b/drivers/watchdog/gpio_wdt.c
> index 0923201ce874..d49eb77ec8f1 100644
> --- a/drivers/watchdog/gpio_wdt.c
> +++ b/drivers/watchdog/gpio_wdt.c
> @@ -90,6 +90,68 @@ static int gpio_wdt_stop(struct watchdog_device *wdd)
>          return 0;
>   }
> 
> +static ssize_t timeout_show(struct device *dev, struct device_attribute *attr,
> +                               char *buf)
> +{
> +       struct watchdog_device *wdd = dev_get_drvdata(dev);
> +
> +       return sprintf(buf, "%u\n", wdd->timeout);
> +}
> +static DEVICE_ATTR_RO(timeout);
> +
> +static ssize_t identity_show(struct device *dev, struct device_attribute *attr,
> +                               char *buf)
> +{
> +       struct watchdog_device *wdd = dev_get_drvdata(dev);
> +
> +       return sprintf(buf, "%s\n", wdd->info->identity);
> +}
> +static DEVICE_ATTR_RO(identity);
> +
> +static ssize_t state_show(struct device *dev, struct device_attribute *attr,
> +                               char *buf)
> +{
> +       struct watchdog_device *wdd = dev_get_drvdata(dev);
> +
> +       if (watchdog_active(wdd))
> +               return sprintf(buf, "active\n");
> +
> +       return sprintf(buf, "inactive\n");
> +}
> +static DEVICE_ATTR_RO(state);
> +
> +static ssize_t bootstatus_show(struct device *dev,
> +                               struct device_attribute *attr, char *buf)
> +{
> +       struct watchdog_device *wdd = dev_get_drvdata(dev);
> +
> +       return sprintf(buf, "%u\n", wdd->bootstatus);
> +}
> +static DEVICE_ATTR_RO(bootstatus);
> +
> +static ssize_t nowayout_show(struct device *dev, struct device_attribute *attr,
> +                               char *buf)
> +{
> +       struct watchdog_device *wdd = dev_get_drvdata(dev);
> +
> +       return sprintf(buf, "%d\n", !!test_bit(WDOG_NO_WAY_OUT, &wdd->status));
> +}
> +static DEVICE_ATTR_RO(nowayout);
> +
> +static struct attribute *wdt_attrs[] = {
> +       &dev_attr_state.attr,
> +       &dev_attr_identity.attr,
> +       &dev_attr_timeout.attr,
> +       &dev_attr_bootstatus.attr,
> +       &dev_attr_nowayout.attr,
> +       NULL,
> +};
> +
> +static const struct attribute_group wdt_group = {
> +       .attrs = wdt_attrs,
> +};
> +__ATTRIBUTE_GROUPS(wdt);
> +
>   static const struct watchdog_info gpio_wdt_ident = {
>          .options        = WDIOF_MAGICCLOSE | WDIOF_KEEPALIVEPING |
>                            WDIOF_SETTIMEOUT,
> @@ -155,6 +217,7 @@ static int gpio_wdt_probe(struct platform_device *pdev)
>          priv->wdd.max_hw_heartbeat_ms = hw_margin;
>          priv->wdd.parent        = dev;
>          priv->wdd.timeout       = SOFT_TIMEOUT_DEF;
> +       priv->wdd.groups        = wdt_groups;
> 
>          watchdog_init_timeout(&priv->wdd, 0, dev);
>          watchdog_set_nowayout(&priv->wdd, nowayout);
> 
> 
> 


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

* Re: [PATCH] watchdog: Read device status through sysfs attributes for GPIO-controlled Watchdog.
       [not found]   ` <CAFEvwu=0ge4D7CPVwu3D+wLu_5T=8GTjhFFi6D97m6Nxkga5Ew@mail.gmail.com>
@ 2019-12-09 14:14     ` Guenter Roeck
  0 siblings, 0 replies; 2+ messages in thread
From: Guenter Roeck @ 2019-12-09 14:14 UTC (permalink / raw)
  To: harshal chaudhari; +Cc: Wim Van Sebroeck, linux-watchdog

On 12/9/19 2:41 AM, harshal chaudhari wrote:
> Hi Guenter,
> 
> Its does the same thing as WATCH_DOG_SYSFS does, but i just want to add this functionality in *gpio_wdt* driver in next release because this driver is widely used in IOT gateways, and sysfs is very useful for monitoring the watchdog device. that's it.
> 
> 

This doesn't make sense. All you need to do is to enable WATCHDOG_SYSFS.
NACK, sorry.

Guenter

> 
> 
> 
> On Mon, Dec 9, 2019 at 12:21 AM Guenter Roeck <linux@roeck-us.net <mailto:linux@roeck-us.net>> wrote:
> 
>     On 12/8/19 10:45 AM, harshal chaudhari wrote:
>      > Hi Wim and Guenter,
>      >
>      > This patch adds following attributes to GPIO-controlled watchdog device's sysfs interface to read its different status.
>      >
>      >
>     You lost me. What does this patch do that CONFIG_WATCHDOG_SYSFS doesn't do as well ?
> 
>     Guenter
> 
>      > * state - reads whether device is active or not
>      >
>      > * identity - reads Watchdog device's identity string.
>      >
>      > * timeout - reads current timeout.
>      >
>      > * bootstatus - reads status of the watchdog device at boot.
>      >
>      > * nowayout - reads whether nowayout feature was set or not.
>      >
>      >
>      > Testing with GPIO Watchdog:
>      >
>      >
>      > $ cat bootstatus
>      >
>      > 0
>      >
>      > $ cat identity
>      >
>      > GPIO Watchdog
>      >
>      > $ cat nowayout
>      >
>      > 0
>      >
>      > $ cat state
>      >
>      > inactive
>      >
>      > $ cat timeout
>      >
>      > 60
>      >
>      >
>      > Signed-off-by: harshal chaudhari <harshalchau04@gmail.com <mailto:harshalchau04@gmail.com> <mailto:harshalchau04@gmail.com <mailto:harshalchau04@gmail.com>>>
>      >
>      >
>      >
>      > diff --git a/Documentation/devicetree/bindings/watchdog/gpio-wdt.txt b/Documentation/devicetree/bindings/watchdog/gpio-wdt.txt
>      > index 198794963786..762149375280 100644
>      > --- a/Documentation/devicetree/bindings/watchdog/gpio-wdt.txt
>      > +++ b/Documentation/devicetree/bindings/watchdog/gpio-wdt.txt
>      > @@ -26,3 +26,31 @@ Example:
>      >                  hw_algo = "toggle";
>      >                  hw_margin_ms = <1600>;
>      >          };
>      > +
>      > +
>      > +* Read device status through sysfs attributes
>      > +
>      > +  state - reads whether device is active or not
>      > +
>      > +       It is a read only file. It gives active/inactive status of
>      > +       watchdog device.
>      > +
>      > +  identity - reads Watchdog device's identity string.
>      > +
>      > +       It is a read only file. It contains identity string of
>      > +       watchdog device.
>      > +
>      > +  timeout - reads current timeout.
>      > +       It is a read only file. It is read to know about current
>      > +       value of timeout programmed.
>      > +
>      > +  bootstatus - reads status of the watchdog device at boot
>      > +       It is a read only file. It contains status of the watchdog
>      > +       device at boot. It is equivalent to WDIOC_GETBOOTSTATUS of
>      > +       ioctl interface.
>      > +
>      > +  nowayout - reads whether nowayout feature was set or not
>      > +       It is a read only file. While reading, it gives '1' if that
>      > +       device supports nowayout feature else, it gives '0'.
>      > +
>      > +For more details refer the documents as in Documentation/ABI/testing/sysfs-class-watchdog
>      >
>      > diff --git a/drivers/watchdog/gpio_wdt.c b/drivers/watchdog/gpio_wdt.c
>      > index 0923201ce874..d49eb77ec8f1 100644
>      > --- a/drivers/watchdog/gpio_wdt.c
>      > +++ b/drivers/watchdog/gpio_wdt.c
>      > @@ -90,6 +90,68 @@ static int gpio_wdt_stop(struct watchdog_device *wdd)
>      >          return 0;
>      >   }
>      >
>      > +static ssize_t timeout_show(struct device *dev, struct device_attribute *attr,
>      > +                               char *buf)
>      > +{
>      > +       struct watchdog_device *wdd = dev_get_drvdata(dev);
>      > +
>      > +       return sprintf(buf, "%u\n", wdd->timeout);
>      > +}
>      > +static DEVICE_ATTR_RO(timeout);
>      > +
>      > +static ssize_t identity_show(struct device *dev, struct device_attribute *attr,
>      > +                               char *buf)
>      > +{
>      > +       struct watchdog_device *wdd = dev_get_drvdata(dev);
>      > +
>      > +       return sprintf(buf, "%s\n", wdd->info->identity);
>      > +}
>      > +static DEVICE_ATTR_RO(identity);
>      > +
>      > +static ssize_t state_show(struct device *dev, struct device_attribute *attr,
>      > +                               char *buf)
>      > +{
>      > +       struct watchdog_device *wdd = dev_get_drvdata(dev);
>      > +
>      > +       if (watchdog_active(wdd))
>      > +               return sprintf(buf, "active\n");
>      > +
>      > +       return sprintf(buf, "inactive\n");
>      > +}
>      > +static DEVICE_ATTR_RO(state);
>      > +
>      > +static ssize_t bootstatus_show(struct device *dev,
>      > +                               struct device_attribute *attr, char *buf)
>      > +{
>      > +       struct watchdog_device *wdd = dev_get_drvdata(dev);
>      > +
>      > +       return sprintf(buf, "%u\n", wdd->bootstatus);
>      > +}
>      > +static DEVICE_ATTR_RO(bootstatus);
>      > +
>      > +static ssize_t nowayout_show(struct device *dev, struct device_attribute *attr,
>      > +                               char *buf)
>      > +{
>      > +       struct watchdog_device *wdd = dev_get_drvdata(dev);
>      > +
>      > +       return sprintf(buf, "%d\n", !!test_bit(WDOG_NO_WAY_OUT, &wdd->status));
>      > +}
>      > +static DEVICE_ATTR_RO(nowayout);
>      > +
>      > +static struct attribute *wdt_attrs[] = {
>      > +       &dev_attr_state.attr,
>      > +       &dev_attr_identity.attr,
>      > +       &dev_attr_timeout.attr,
>      > +       &dev_attr_bootstatus.attr,
>      > +       &dev_attr_nowayout.attr,
>      > +       NULL,
>      > +};
>      > +
>      > +static const struct attribute_group wdt_group = {
>      > +       .attrs = wdt_attrs,
>      > +};
>      > +__ATTRIBUTE_GROUPS(wdt);
>      > +
>      >   static const struct watchdog_info gpio_wdt_ident = {
>      >          .options        = WDIOF_MAGICCLOSE | WDIOF_KEEPALIVEPING |
>      >                            WDIOF_SETTIMEOUT,
>      > @@ -155,6 +217,7 @@ static int gpio_wdt_probe(struct platform_device *pdev)
>      >          priv->wdd.max_hw_heartbeat_ms = hw_margin;
>      >          priv->wdd.parent        = dev;
>      >          priv->wdd.timeout       = SOFT_TIMEOUT_DEF;
>      > +       priv->wdd.groups        = wdt_groups;
>      >
>      >          watchdog_init_timeout(&priv->wdd, 0, dev);
>      >          watchdog_set_nowayout(&priv->wdd, nowayout);
>      >
>      >
>      >
> 


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

end of thread, other threads:[~2019-12-09 14:14 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <CAFEvwum0uu1p9wK66rFbqFi4YQjfEfZcGd54Yeswk9=0EryP1Q@mail.gmail.com>
2019-12-08 18:51 ` [PATCH] watchdog: Read device status through sysfs attributes for GPIO-controlled Watchdog Guenter Roeck
     [not found]   ` <CAFEvwu=0ge4D7CPVwu3D+wLu_5T=8GTjhFFi6D97m6Nxkga5Ew@mail.gmail.com>
2019-12-09 14:14     ` Guenter Roeck

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).