Received: by 10.192.165.148 with SMTP id m20csp3449886imm; Sun, 29 Apr 2018 23:45:39 -0700 (PDT) X-Google-Smtp-Source: AB8JxZo+GLkF297M6m2+W4/edLt6QHSI9nFle7N1WkCzymZ/ZPi27784gsAL2PwwNVNtIYBZNpZV X-Received: by 10.98.209.92 with SMTP id t28mr10929730pfl.148.1525070739225; Sun, 29 Apr 2018 23:45:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525070739; cv=none; d=google.com; s=arc-20160816; b=Lh7BWDp1lTzVAu5IChs080Oxpsj2Txs1q5C5u7dffxOzC6HpEYMi0VBXmsUMHz1NvV CstyMkq3jsNemVWJfO+oXmik9s3ToccR/+3sX3D3FW496/hAFxc5wChosk5aEyuR6fDN dBv2jyZbUI+ce0h2+nLCBM4wX0xGakeAjo+6i8Ev16YM42/vYqoEdYAUDU7eWbMqeAXQ 9w4KwU9U/kFdY7wsVpHP0MOK02oeILtWOpT4jh/clrnDd3LQ2fvgaBLmGhC9QCDpjBsR cB3e2DnjhwOGkGTJkA1y0cJC68DL+ZA86ujOwZykIJM8hJnz2LHgV5q0HX7WnvByxvmf 8utQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=SUp5RGut/4AeP/IfVHumbyaUG6ls0NaBBZ680cuFYAM=; b=F8zwDLnfP7pKfnWR0P5gjIvidF2HoS4SM3gmUb5eJOaczxIm0+GwLsA5T4mpgpvefQ o6dJ9TVcdbRRCaBwlAP0oQ04xnAe53aOd05adgMXA6D6wIby/ow+TH2BAeo29aJysQyk UE+WKf4y0QLVNT5NqZttYukdMnK34H2LL7v6Hcc6ldO2/9GgoLvW+CIfAbtVO1C5rjI+ VSc0NfMCV+KPnOruSt6f31slBpsRXz9VbVFyulL2MinT6Jvaoh9hgy+BXOMXy/rNBLj6 bPfRNLHePy9XAJb9f2trXiDR3cMSOoM0iK97BdjJNXov9VRZij0+9UkGu77zdGWTUy+R zarg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i4-v6si2569023pgq.405.2018.04.29.23.45.13; Sun, 29 Apr 2018 23:45:39 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751751AbeD3GpC (ORCPT + 99 others); Mon, 30 Apr 2018 02:45:02 -0400 Received: from lgeamrelo12.lge.com ([156.147.23.52]:46422 "EHLO lgeamrelo12.lge.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751589AbeD3GpB (ORCPT ); Mon, 30 Apr 2018 02:45:01 -0400 Received: from unknown (HELO lgemrelse6q.lge.com) (156.147.1.121) by 156.147.23.52 with ESMTP; 30 Apr 2018 15:44:59 +0900 X-Original-SENDERIP: 156.147.1.121 X-Original-MAILFROM: neidhard.kim@lge.com Received: from unknown (HELO localhost.localdomain) (10.178.37.74) by 156.147.1.121 with ESMTP; 30 Apr 2018 15:44:59 +0900 X-Original-SENDERIP: 10.178.37.74 X-Original-MAILFROM: neidhard.kim@lge.com From: Jongsung Kim To: Viresh Kumar , Wim Van Sebroeck , linux-watchdog@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Chanho Min , Jongsung Kim Subject: [PATCH] watchdog: sp805: add restart handler Date: Mon, 30 Apr 2018 15:44:33 +0900 Message-Id: <20180430064433.28715-1-neidhard.kim@lge.com> X-Mailer: git-send-email 2.14.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add restart handler for SP805 watchdog so that the driver can be used to reboot the system. Signed-off-by: Jongsung Kim --- drivers/watchdog/sp805_wdt.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/watchdog/sp805_wdt.c b/drivers/watchdog/sp805_wdt.c index 01d816251302..01f7b6c29f92 100644 --- a/drivers/watchdog/sp805_wdt.c +++ b/drivers/watchdog/sp805_wdt.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -67,6 +68,7 @@ struct sp805_wdt { struct clk *clk; struct amba_device *adev; unsigned int load_val; + struct notifier_block restart; }; static bool nowayout = WATCHDOG_NOWAYOUT; @@ -200,6 +202,18 @@ static const struct watchdog_ops wdt_ops = { .get_timeleft = wdt_timeleft, }; +static int +wdt_restart(struct notifier_block *this, unsigned long mode, void *cmd) +{ + struct sp805_wdt *wdt = container_of(this, struct sp805_wdt, restart); + + writel_relaxed(0, wdt->base + WDTCONTROL); + writel_relaxed(0, wdt->base + WDTLOAD); + writel_relaxed(INT_ENABLE | RESET_ENABLE, wdt->base + WDTCONTROL); + + return 0; +} + static int sp805_wdt_probe(struct amba_device *adev, const struct amba_id *id) { @@ -241,6 +255,10 @@ sp805_wdt_probe(struct amba_device *adev, const struct amba_id *id) } amba_set_drvdata(adev, wdt); + wdt->restart.notifier_call = wdt_restart; + wdt->restart.priority = 128; + register_restart_handler(&wdt->restart); + dev_info(&adev->dev, "registration successful\n"); return 0; @@ -253,6 +271,7 @@ static int sp805_wdt_remove(struct amba_device *adev) { struct sp805_wdt *wdt = amba_get_drvdata(adev); + unregister_restart_handler(&wdt->restart); watchdog_unregister_device(&wdt->wdd); watchdog_set_drvdata(&wdt->wdd, NULL); -- 2.14.1