From patchwork Mon May 28 18:01:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ray Jui X-Patchwork-Id: 10433947 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id EBFE760327 for ; Mon, 28 May 2018 18:19:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DA2522845E for ; Mon, 28 May 2018 18:19:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CD83528477; Mon, 28 May 2018 18:19:27 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id A941B2845E for ; Mon, 28 May 2018 18:19:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=dcUAy847RTPIdHN/xUYENN6K3rFM6iN1Z+paB8RAH9M=; b=uWDR+DrVaPM9PYIBD/kRkOHmOP vdfyZoUJQUlfwoHQA0fbOCiTUh/JL25mVrWOjYL5NcOf3vBj1L34gOVHezmo6Sr2Qrj8bgTgOn67T rTjNMsjQ48auRh1PCJ6ds2Nb6KHSM3vo/Z58/DGZbXTJPbqyRvx8tVgEmX0CPk2odXM9CvitlwKAN GUThQ+Fdcw9ch9yMYRsaxZsAAUfLSgl7pCC09KeSOF2QW6H5F60Yoo8JZDqTXM/xBf81aY0wsVasr 2UcyC73ii/RxFP54mNb01usBzltpZERkReAMV6OewgDeCgjyBb64pdRQbgaXX3gKb2S16BOHb+1tH L8hxi2dQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1fNMjj-00035J-O6; Mon, 28 May 2018 18:19:15 +0000 Received: from mail-qt0-x241.google.com ([2607:f8b0:400d:c0d::241]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fNMTK-0004Mo-Bw for linux-arm-kernel@lists.infradead.org; Mon, 28 May 2018 18:02:32 +0000 Received: by mail-qt0-x241.google.com with SMTP id m5-v6so15752898qti.1 for ; Mon, 28 May 2018 11:02:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=tdGW8KmFsGk3w/Y7Ob+h+RnkHy6cAaXqEI/ksiBewYQ=; b=ANweBTV3XkjjNuSztXJlOmgCmXzIyuacDDJl8q5M/iC5wsokLJNwgOMzozjW4DkFr/ +oVZYvfVvJxon+lncNDM9MRsTuBHZWmsYmWOc9e3bkw0ea5bCzE5Mvd9Mc6FSfeNabca zquK1Ix5SqU3/KchueT1yVfMQm84fExJ2Byls= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=tdGW8KmFsGk3w/Y7Ob+h+RnkHy6cAaXqEI/ksiBewYQ=; b=fw6JRoPTs2ejx82g85RYx872Fib79vUw1Izpzo+vCLGifiZ2cr0OkETMAmVjd8Vp6G +5ljOiNQ03V+Lm4IYwoa4iD9ln4gbgTn3/iseHf5gqVJfiSrqxzUf5DXxwVULjuDDFKi 4IEPPDolU6Qd2UJ6kfprUAJLjcdfVuI49J9Esnf/1l+JdLJBEG428GH/amS30AQjHwX1 +o7d3OksmwgRMhPNsvqbvvfSWMjiiqqlORU8jG8DYpPzUoE2ScghyaOwfvgpAqGQ6XPv d0ZYpePbLVLzi0GDCl1f4A9LRQODWdFl3m9flg6fk5TUL4feLmfglz30MpSMm3gWlTjR EsCA== X-Gm-Message-State: ALKqPwcUHzo/SgymOn3bNf8pqZ1mTE3UWEn7Wp9ojDGxT3vOlLVQ9n6i SGpmsNZR7z2Ir+WK/Z1VNZDV3g== X-Google-Smtp-Source: ADUXVKJhNgyBVbgQ+CbnTh2p7FNuC4JOBZGIK6rdMGIQ3qcHE31zHOlmgH2EMU+fLJ9FMywWNghUpg== X-Received: by 2002:a0c:dd82:: with SMTP id v2-v6mr8753820qvk.176.1527530527124; Mon, 28 May 2018 11:02:07 -0700 (PDT) Received: from lbrmn-lnxub44-1.ric.broadcom.com ([192.19.228.250]) by smtp.gmail.com with ESMTPSA id f26-v6sm22340905qtg.50.2018.05.28.11.02.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 28 May 2018 11:02:06 -0700 (PDT) From: Ray Jui To: Wim Van Sebroeck , Guenter Roeck , Rob Herring , Mark Rutland , Frank Rowand , Catalin Marinas , Will Deacon , Robin Murphy Subject: [PATCH v4 4/6] watchdog: sp805: set WDOG_HW_RUNNING when appropriate Date: Mon, 28 May 2018 11:01:35 -0700 Message-Id: <1527530497-10392-5-git-send-email-ray.jui@broadcom.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1527530497-10392-1-git-send-email-ray.jui@broadcom.com> References: <1527530497-10392-1-git-send-email-ray.jui@broadcom.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180528_110218_424831_690BDD04 X-CRM114-Status: GOOD ( 16.76 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, linux-watchdog@vger.kernel.org, linux-kernel@vger.kernel.org, Ray Jui , bcm-kernel-feedback-list@broadcom.com, linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP If the watchdog hardware is already enabled during the boot process, when the Linux watchdog driver loads, it should reset the watchdog and tell the watchdog framework. As a result, ping can be generated from the watchdog framework, until the userspace watchdog daemon takes over control Signed-off-by: Ray Jui Reviewed-by: Vladimir Olovyannikov Reviewed-by: Scott Branden Reviewed-by: Guenter Roeck --- 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 1484609..d662a6f 100644 --- a/drivers/watchdog/sp805_wdt.c +++ b/drivers/watchdog/sp805_wdt.c @@ -42,6 +42,7 @@ /* control register masks */ #define INT_ENABLE (1 << 0) #define RESET_ENABLE (1 << 1) + #define ENABLE_MASK (INT_ENABLE | RESET_ENABLE) #define WDTINTCLR 0x00C #define WDTRIS 0x010 #define WDTMIS 0x014 @@ -74,6 +75,15 @@ module_param(nowayout, bool, 0); MODULE_PARM_DESC(nowayout, "Set to 1 to keep watchdog running after device release"); +/* returns true if wdt is running; otherwise returns false */ +static bool wdt_is_running(struct watchdog_device *wdd) +{ + struct sp805_wdt *wdt = watchdog_get_drvdata(wdd); + u32 wdtcontrol = readl_relaxed(wdt->base + WDTCONTROL); + + return (wdtcontrol & ENABLE_MASK) == ENABLE_MASK; +} + /* This routine finds load value that will reset system in required timout */ static int wdt_setload(struct watchdog_device *wdd, unsigned int timeout) { @@ -239,6 +249,15 @@ sp805_wdt_probe(struct amba_device *adev, const struct amba_id *id) watchdog_init_timeout(&wdt->wdd, 0, &adev->dev); wdt_setload(&wdt->wdd, wdt->wdd.timeout); + /* + * If HW is already running, enable/reset the wdt and set the running + * bit to tell the wdt subsystem + */ + if (wdt_is_running(&wdt->wdd)) { + wdt_enable(&wdt->wdd); + set_bit(WDOG_HW_RUNNING, &wdt->wdd.status); + } + ret = watchdog_register_device(&wdt->wdd); if (ret) { dev_err(&adev->dev, "watchdog_register_device() failed: %d\n",