lkml.org 
[lkml]   [2021]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.13 220/351] watchdog: keembay: Update WDT pre-timeout during the initialization
    Date
    From: Shruthi Sanil <shruthi.sanil@intel.com>

    [ Upstream commit 29353816300c79cb5157ed2719cc71285c7b77aa ]

    The pretimeout register has a default reset value. Hence
    when a smaller WDT timeout is set which would be lesser than the
    default pretimeout, the system behaves abnormally, starts
    triggering the pretimeout interrupt even when the WDT is
    not enabled, most of the times leading to system crash.
    Hence an update in the pre-timeout is also required for the
    default timeout that is being configured.

    Fixes: fa0f8d51e90d ("watchdog: Add watchdog driver for Intel Keembay Soc")
    Reviewed-by: Guenter Roeck <linux@roeck-us.net>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Tested-by: Kris Pan <kris.pan@intel.com>
    Signed-off-by: Shruthi Sanil <shruthi.sanil@intel.com>
    Link: https://lore.kernel.org/r/20210517174953.19404-2-shruthi.sanil@intel.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/watchdog/keembay_wdt.c | 3 +++
    1 file changed, 3 insertions(+)

    diff --git a/drivers/watchdog/keembay_wdt.c b/drivers/watchdog/keembay_wdt.c
    index 547d3fea33ff..f2f5c9fae29c 100644
    --- a/drivers/watchdog/keembay_wdt.c
    +++ b/drivers/watchdog/keembay_wdt.c
    @@ -29,6 +29,7 @@
    #define WDT_LOAD_MAX U32_MAX
    #define WDT_LOAD_MIN 1
    #define WDT_TIMEOUT 5
    +#define WDT_PRETIMEOUT 4

    static unsigned int timeout = WDT_TIMEOUT;
    module_param(timeout, int, 0);
    @@ -224,11 +225,13 @@ static int keembay_wdt_probe(struct platform_device *pdev)
    wdt->wdd.min_timeout = WDT_LOAD_MIN;
    wdt->wdd.max_timeout = WDT_LOAD_MAX / wdt->rate;
    wdt->wdd.timeout = WDT_TIMEOUT;
    + wdt->wdd.pretimeout = WDT_PRETIMEOUT;

    watchdog_set_drvdata(&wdt->wdd, wdt);
    watchdog_set_nowayout(&wdt->wdd, nowayout);
    watchdog_init_timeout(&wdt->wdd, timeout, dev);
    keembay_wdt_set_timeout(&wdt->wdd, wdt->wdd.timeout);
    + keembay_wdt_set_pretimeout(&wdt->wdd, wdt->wdd.pretimeout);

    ret = devm_watchdog_register_device(dev, &wdt->wdd);
    if (ret)
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-19 20:10    [W:4.565 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site