Received: by 2002:a05:6a10:a841:0:0:0:0 with SMTP id d1csp117046pxy; Wed, 21 Apr 2021 20:34:48 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxJcWyNTMo3aZ4PwXWqo+Pyz/BRDgbu2eReR64BhlXCI2cdea6rysA2jNuMIBihnaQb3OO+ X-Received: by 2002:a17:906:5d0c:: with SMTP id g12mr1033862ejt.389.1619062488566; Wed, 21 Apr 2021 20:34:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1619062488; cv=none; d=google.com; s=arc-20160816; b=f08Ud0aVxWFPdhx9ZYTb7ighgVfWhwv/WTKVgAhhtbr2P1y/Ak/O20LsqAGAsa5ytI Raj/sZzE9I4u+Yn20gBH+/lQ5sTg50r861EZsvaB5PxCGB4iLW+NruINDRrmNj1xervK l37SNoRPdxSOHnIbbHl6sGv9d8ma2biE3OfWefzptppupq2RiwdO8ytSzZkokmKBABu0 c4pqUGpeHdv8poN2zJqbHGMyz0ioC8tFOolh4EAr0CE8elVaTHes0kSkzZ3YO+IgovH1 fY3NN4G0oISkUvp/8kuiBSCZSPQQ74HiBc/PmZxth3UaAbVRq5uht2/3yNMM9j+jWOce 6V5g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:autocrypt:from :references:to:subject:sender:dkim-signature; bh=EiUIgqTJnZeo7Oj83qaaslsMYDHVImgHFxx3RVQDmzs=; b=H+1szj72K8qyD/bVz6wlISJG5vnWzwmkJ0S3ZxL/QZbI7eUUCtyd9tXhFjIxCR7jGT kfDdTrsjzwX2Yq4So9rNz6x3iRS13i+yGPqQXXj5MK3phIVlJJI2/ctb+WAsQ0RwcUpb KS1LIVl1HwS+Jgu09hry4zws06L+vqUaE7Y8QT58hIJnB13Fx1oFX+4F6V+NVihOdvue v7R4Aw6vlz2vmYRvYfkUBLaVVBuyVCbyDLlpiHoE0ENMvZBtQnbxTrf9JJRmVDLC2X3v m3/jfFxlcKXxTHgZ1PcBdZqLf28GNuCc1Cw831aAV+8rQE3QA1GONNP8DBhTfuI7UotZ TqPA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="fQkrfG/W"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t23si1026526ejj.290.2021.04.21.20.34.25; Wed, 21 Apr 2021 20:34:48 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="fQkrfG/W"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234471AbhDVDcA (ORCPT + 99 others); Wed, 21 Apr 2021 23:32:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60632 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231997AbhDVDb7 (ORCPT ); Wed, 21 Apr 2021 23:31:59 -0400 Received: from mail-oi1-x22c.google.com (mail-oi1-x22c.google.com [IPv6:2607:f8b0:4864:20::22c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5DC6BC06174A; Wed, 21 Apr 2021 20:31:25 -0700 (PDT) Received: by mail-oi1-x22c.google.com with SMTP id k18so39590976oik.1; Wed, 21 Apr 2021 20:31:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:references:from:autocrypt:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=EiUIgqTJnZeo7Oj83qaaslsMYDHVImgHFxx3RVQDmzs=; b=fQkrfG/WlqtW1jWkyLQkSiu0zcEuMUPH9HqYN05kcM/a9/EPISZfYKQPT0TiIE/r8K 1v5atGLzpZEe3iCjIIrSgFOjPEgY9yz+5yyLUH4Zch5EtTWCc8u6sXHijKYM6iRwaiVz YTGpl0yJbzsNHYEQX6HDycc82HPoQhDSieUWRWkooGmA+VxdhWK6Mly9zcy1HVGJZJip q/qXiQkiwrvRH3E4Bwe2XgE06YMu67y4QYaYSDYmvKxHlIAXwTkoBVVFSUCBw721aX7i viB3VtEx3yoU3Hiq97jTBFH34l9rDzl8aU0S1v0lf6b07riNs8XwYfLuEAtRUigWpVmc wFQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:autocrypt :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=EiUIgqTJnZeo7Oj83qaaslsMYDHVImgHFxx3RVQDmzs=; b=F9XX41SpvfcudDs7hmQOmjvUcF8j5wg6s0WO8Fm/I0W9wTi9XGj/O147pF5dCJ7s41 jvOlyR+RCaBqdgw8tLcpvFA3M6kmQWxc5efUklBD2M64/ollYwY3+lE2pmdH+lB6pEtG TdoH6CXJRi9UqGPoZB71iUyZ4jxppPnsWgPHgvYbybKh8z0E9ImIp1Mxk5trIqweXBIE NQfvf458RaD9J6OxZ6UROGzyrpaEgkyWHIOJiyq5x0/zJmxhwGCfbd50ayOw8K/2n0Dt YZ5fMx6207oLKVWjhxiD1BjMAodaL20r1y4JskJTXJJgBdpOGluL8eTb58Eo7nJ1e59o BWMA== X-Gm-Message-State: AOAM533CtQ/61xSRdG/Gl3o0KyV+7BINf1slIHQ8dcp8DBuD1oLDvFGZ RNSJW8t84aS5UIGv+9sFZdSl5xFXg8Y= X-Received: by 2002:aca:c755:: with SMTP id x82mr8689583oif.83.1619062284499; Wed, 21 Apr 2021 20:31:24 -0700 (PDT) Received: from server.roeck-us.net ([2600:1700:e321:62f0:329c:23ff:fee3:9d7c]) by smtp.gmail.com with ESMTPSA id w84sm310629oig.20.2021.04.21.20.31.21 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 21 Apr 2021 20:31:23 -0700 (PDT) Sender: Guenter Roeck Subject: Re: [PATCH V6 1/2] watchdog: mtk: support pre-timeout when the bark irq is available To: Wang Qing , Wim Van Sebroeck , Rob Herring , Matthias Brugger , linux-watchdog@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org References: <1619059532-17805-1-git-send-email-wangqing@vivo.com> <1619059532-17805-2-git-send-email-wangqing@vivo.com> From: Guenter Roeck Autocrypt: addr=linux@roeck-us.net; keydata= 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 mDW4+i+XlNFUPUYMrIKi9joBhu18ssf5i5Q= Message-ID: <740481ed-97e0-3439-1af2-bc54cdb28536@roeck-us.net> Date: Wed, 21 Apr 2021 20:31:21 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <1619059532-17805-2-git-send-email-wangqing@vivo.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 4/21/21 7:45 PM, Wang Qing wrote: > Use the bark interrupt as the pretimeout notifier if available. > > When the watchdog timer expires in dual mode, an interrupt will be > triggered first, then the timing restarts. The reset signal will be > initiated when the timer expires again. > > The pretimeout notification shall occur at timeout-sec/2. > > V2: > - panic() by default if WATCHDOG_PRETIMEOUT_GOV is not enabled. > > V3: > - Modify the pretimeout behavior, manually reset after the pretimeout > - is processed and wait until timeout. > > V4: > - Remove pretimeout related processing. > - Add dual mode control separately. > > V5: > - Fix some formatting and printing problems. > > V6: > - Realize pretimeout processing through dualmode. > > Signed-off-by: Wang Qing > --- > drivers/watchdog/mtk_wdt.c | 53 +++++++++++++++++++++++++++++++++++++++++----- > 1 file changed, 48 insertions(+), 5 deletions(-) > > diff --git a/drivers/watchdog/mtk_wdt.c b/drivers/watchdog/mtk_wdt.c > index 97ca993..ebc648b > --- a/drivers/watchdog/mtk_wdt.c > +++ b/drivers/watchdog/mtk_wdt.c > @@ -25,6 +25,7 @@ > #include > #include > #include > +#include > > #define WDT_MAX_TIMEOUT 31 > #define WDT_MIN_TIMEOUT 1 > @@ -184,15 +185,22 @@ static int mtk_wdt_set_timeout(struct watchdog_device *wdt_dev, > { > struct mtk_wdt_dev *mtk_wdt = watchdog_get_drvdata(wdt_dev); > void __iomem *wdt_base = mtk_wdt->wdt_base; > + unsigned int timeout_interval; > u32 reg; > > - wdt_dev->timeout = timeout; > + timeout_interval = wdt_dev->timeout = timeout; > + /* > + * In dual mode, irq will be triggered at timeout/2 > + * the real timeout occurs at timeout > + */ > + if (wdt_dev->pretimeout) > + timeout_interval = wdt_dev->pretimeout = timeout/2; Please run checkpatch --strict and fix what it reports. Also, there should be a set_pretimeout function to set the pretimeout. It is ok to update it here, but it should be set in its own function to make sure that the actual value is reported back to userspace. Thanks, Guenter > > /* > * One bit is the value of 512 ticks > * The clock has 32 KHz > */ > - reg = WDT_LENGTH_TIMEOUT(timeout << 6) | WDT_LENGTH_KEY; > + reg = WDT_LENGTH_TIMEOUT(timeout_interval << 6) | WDT_LENGTH_KEY; > iowrite32(reg, wdt_base + WDT_LENGTH); > > mtk_wdt_ping(wdt_dev); > @@ -239,13 +247,25 @@ static int mtk_wdt_start(struct watchdog_device *wdt_dev) > return ret; > > reg = ioread32(wdt_base + WDT_MODE); > - reg &= ~(WDT_MODE_IRQ_EN | WDT_MODE_DUAL_EN); > + if (wdt_dev->pretimeout) > + reg |= (WDT_MODE_IRQ_EN | WDT_MODE_DUAL_EN); > + else > + reg &= ~(WDT_MODE_IRQ_EN | WDT_MODE_DUAL_EN); > reg |= (WDT_MODE_EN | WDT_MODE_KEY); > iowrite32(reg, wdt_base + WDT_MODE); > > return 0; > } > > +static irqreturn_t mtk_wdt_isr(int irq, void *arg) > +{ > + struct watchdog_device *wdd = arg; > + > + watchdog_notify_pretimeout(wdd); > + > + return IRQ_HANDLED; > +} > + > static const struct watchdog_info mtk_wdt_info = { > .identity = DRV_NAME, > .options = WDIOF_SETTIMEOUT | > @@ -253,6 +273,14 @@ static const struct watchdog_info mtk_wdt_info = { > WDIOF_MAGICCLOSE, > }; > > +static const struct watchdog_info mtk_wdt_pt_info = { > + .identity = DRV_NAME, > + .options = WDIOF_SETTIMEOUT | > + WDIOF_PRETIMEOUT | > + WDIOF_KEEPALIVEPING | > + WDIOF_MAGICCLOSE, > +}; > + > static const struct watchdog_ops mtk_wdt_ops = { > .owner = THIS_MODULE, > .start = mtk_wdt_start, > @@ -267,7 +295,7 @@ static int mtk_wdt_probe(struct platform_device *pdev) > struct device *dev = &pdev->dev; > struct mtk_wdt_dev *mtk_wdt; > const struct mtk_wdt_data *wdt_data; > - int err; > + int err, irq; > > mtk_wdt = devm_kzalloc(dev, sizeof(*mtk_wdt), GFP_KERNEL); > if (!mtk_wdt) > @@ -279,7 +307,22 @@ static int mtk_wdt_probe(struct platform_device *pdev) > if (IS_ERR(mtk_wdt->wdt_base)) > return PTR_ERR(mtk_wdt->wdt_base); > > - mtk_wdt->wdt_dev.info = &mtk_wdt_info; > + irq = platform_get_irq(pdev, 0); > + if (irq > 0) { > + err = devm_request_irq(&pdev->dev, irq, mtk_wdt_isr, 0, "wdt_bark", > + &mtk_wdt->wdt_dev); > + if (err) > + return err; > + > + mtk_wdt->wdt_dev.info = &mtk_wdt_pt_info; > + mtk_wdt->wdt_dev.pretimeout = WDT_MAX_TIMEOUT/2; > + } else { > + if (irq == -EPROBE_DEFER) > + return -EPROBE_DEFER; > + > + mtk_wdt->wdt_dev.info = &mtk_wdt_info; > + } > + > mtk_wdt->wdt_dev.ops = &mtk_wdt_ops; > mtk_wdt->wdt_dev.timeout = WDT_MAX_TIMEOUT; > mtk_wdt->wdt_dev.max_hw_heartbeat_ms = WDT_MAX_TIMEOUT * 1000; >