lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-Id: <20170914113013.19157-1-o.rempel@pengutronix.de> Date: Thu, 14 Sep 2017 13:30:12 +0200 From: Oleksij Rempel <o.rempel@...gutronix.de> To: Wim Van Sebroeck <wim@...ana.be>, Guenter Roeck <linux@...ck-us.net>, Dinh Nguyen <dinguyen@...nel.org>, Rob Herring <robh+dt@...nel.org>, Mark Rutland <mark.rutland@....com> Cc: Steffen Trumtrar <s.trumtrar@...gutronix.de>, Oleksij Rempel <o.rempel@...gutronix.de>, linux-watchdog@...r.kernel.org, kernel@...gutronix.de, Russell King <linux@...linux.org.uk>, devicetree@...r.kernel.org, linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org Subject: [PATCH v2 1/2] watchdog: dw_wdt: add stop watchdog operation From: Steffen Trumtrar <s.trumtrar@...gutronix.de> The only way of stopping the watchdog is by resetting it. Add the watchdog op for stopping the device and reset if a reset line is provided. Signed-off-by: Steffen Trumtrar <s.trumtrar@...gutronix.de> Signed-off-by: Oleksij Rempel <o.rempel@...gutronix.de> Cc: Wim Van Sebroeck <wim@...ana.be> Cc: Guenter Roeck <linux@...ck-us.net> Cc: linux-watchdog@...r.kernel.org --- changes v2: - test if dw_wdt->rst is NULL instead of IS_ERR drivers/watchdog/dw_wdt.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/watchdog/dw_wdt.c b/drivers/watchdog/dw_wdt.c index 36be987ff9ef..a507f36302e1 100644 --- a/drivers/watchdog/dw_wdt.c +++ b/drivers/watchdog/dw_wdt.c @@ -135,6 +135,21 @@ static int dw_wdt_start(struct watchdog_device *wdd) return 0; } +static int dw_wdt_stop(struct watchdog_device *wdd) +{ + struct dw_wdt *dw_wdt = to_dw_wdt(wdd); + + if (!dw_wdt->rst) { + dev_warn(wdd->parent, "No reset line. Will not stop.\n"); + return -EOPNOTSUPP; + } + + reset_control_assert(dw_wdt->rst); + reset_control_deassert(dw_wdt->rst); + + return 0; +} + static int dw_wdt_restart(struct watchdog_device *wdd, unsigned long action, void *data) { @@ -173,6 +188,7 @@ static const struct watchdog_info dw_wdt_ident = { static const struct watchdog_ops dw_wdt_ops = { .owner = THIS_MODULE, .start = dw_wdt_start, + .stop = dw_wdt_stop, .ping = dw_wdt_ping, .set_timeout = dw_wdt_set_timeout, .get_timeleft = dw_wdt_get_timeleft, -- 2.11.0
Powered by blists - more mailing lists