From patchwork Thu Nov 17 11:49:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabrizio Castro X-Patchwork-Id: 21594 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp355608wrr; Thu, 17 Nov 2022 03:54:55 -0800 (PST) X-Google-Smtp-Source: AA0mqf7vrvKvPFTK5AfNoDHEQcA31KZMKsUEqyrqxZYmkYWS4/5VuaSnD4AQIFFiyWVXBnBSaMSA X-Received: by 2002:a17:902:ab0d:b0:183:6555:38ef with SMTP id ik13-20020a170902ab0d00b00183655538efmr2288151plb.157.1668686095257; Thu, 17 Nov 2022 03:54:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668686095; cv=none; d=google.com; s=arc-20160816; b=OPRgSKeyR0kw/mACv0MgpqUE3RhRQFJgk9ekObAjzCJSLd2Qz0xLP5wNu/XstgrS4W bRDHZaFV/U2AcAD6nxkvf7EknwHGrkzEoeQnDixPxVIv0xfadNTb1aTJRlPjb/uGpiKd Ymb6414GMp1HVDeJsUm1HXBaZ4ZIAyUT6f/tX9cfpX1DaZbkPJRlWuPnIK56igPx7DAY 2cj1RNDaWi4Cfh+uvdH9AdDMbsrJDxTCxm6zLoCPhG6KYc3m66iajMZTDvH9DERRjkqx +lDxZNG4skgkpzUygvsGClKzcS72cC6QUJ52NBLOgrmlX4gbDvZW7q6eApQoyrciqyBZ rq+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=ZlRTLhd5wv1lx+V8UVnDHuP3dnF3LGT4m1QJB6h9D1Y=; b=OZUmpt9aTKZlBWNG+EqZLFt+WLVjfmMu+GiE5/FgdL77fcugCeBPIT9WqzX03kncp3 9I5KcFiAee/8LjI3ODnKxCtdk7a0WkRkK4W4YjPQGCtQqRXCnUgC5Q7pbQjd/xqwz8u+ c80b00hZ7TVi4DQWnd109IAvc3V03ceIn+zMoHPDCAcoKglB21NCSnRyy6in/LL2rpD2 Lc7ggRvjFG43iEeIL1IH7fL7+JF0T0lwEcIlF5vxInC6A4jAADJOfc3kiRnKqwi+g3VH Va+Cv3JD3fo7jG7Y13vQMJF4bC5Amdpbum1+WgHzf21eTO6tTKQQia4qJzguR2krPXxB cNgg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=renesas.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id h63-20020a638342000000b004750a252941si767370pge.774.2022.11.17.03.54.42; Thu, 17 Nov 2022 03:54:55 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=renesas.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239783AbiKQLtz (ORCPT + 99 others); Thu, 17 Nov 2022 06:49:55 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52082 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239376AbiKQLt0 (ORCPT ); Thu, 17 Nov 2022 06:49:26 -0500 Received: from relmlie6.idc.renesas.com (relmlor2.renesas.com [210.160.252.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id E6BA29591; Thu, 17 Nov 2022 03:49:25 -0800 (PST) X-IronPort-AV: E=Sophos;i="5.96,171,1665414000"; d="scan'208";a="142991208" Received: from unknown (HELO relmlir5.idc.renesas.com) ([10.200.68.151]) by relmlie6.idc.renesas.com with ESMTP; 17 Nov 2022 20:49:25 +0900 Received: from mulinux.example.org (unknown [10.226.93.80]) by relmlir5.idc.renesas.com (Postfix) with ESMTP id 280CE400C75F; Thu, 17 Nov 2022 20:49:20 +0900 (JST) From: Fabrizio Castro To: Wim Van Sebroeck , Guenter Roeck , Philipp Zabel , Geert Uytterhoeven Cc: Lad Prabhakar , Biju Das , linux-watchdog@vger.kernel.org, linux-kernel@vger.kernel.org, Chris Paterson , Biju Das , Fabrizio Castro , linux-renesas-soc@vger.kernel.org, Laurent Pinchart , Jacopo Mondi Subject: [PATCH 1/2] watchdog: rzg2l_wdt: Issue a reset before we put the PM clocks Date: Thu, 17 Nov 2022 11:49:06 +0000 Message-Id: <20221117114907.138583-2-fabrizio.castro.jz@renesas.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221117114907.138583-1-fabrizio.castro.jz@renesas.com> References: <20221117114907.138583-1-fabrizio.castro.jz@renesas.com> MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1749744190597727220?= X-GMAIL-MSGID: =?utf-8?q?1749744190597727220?= From: Lad Prabhakar On RZ/Five SoC it was observed that setting timeout (to say 1 sec) wouldn't reset the system. The procedure described in the HW manual (Procedure for Activating Modules) for activating the target module states we need to start supply of the clock module before applying the reset signal. This patch makes sure we follow the same procedure to clear the registers of the WDT module, fixing the issues seen on RZ/Five SoC. While at it re-used rzg2l_wdt_stop() in rzg2l_wdt_set_timeout() as it has the same function calls. Fixes: 4055ee81009e ("watchdog: rzg2l_wdt: Add set_timeout callback") Signed-off-by: Lad Prabhakar Reviewed-by: Guenter Roeck Reviewed-by: Geert Uytterhoeven Reviewed-by: Biju Das --- drivers/watchdog/rzg2l_wdt.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/watchdog/rzg2l_wdt.c b/drivers/watchdog/rzg2l_wdt.c index 974a4194a8fd..ceca42db0837 100644 --- a/drivers/watchdog/rzg2l_wdt.c +++ b/drivers/watchdog/rzg2l_wdt.c @@ -115,25 +115,23 @@ static int rzg2l_wdt_stop(struct watchdog_device *wdev) { struct rzg2l_wdt_priv *priv = watchdog_get_drvdata(wdev); - pm_runtime_put(wdev->parent); reset_control_reset(priv->rstc); + pm_runtime_put(wdev->parent); return 0; } static int rzg2l_wdt_set_timeout(struct watchdog_device *wdev, unsigned int timeout) { - struct rzg2l_wdt_priv *priv = watchdog_get_drvdata(wdev); - wdev->timeout = timeout; /* * If the watchdog is active, reset the module for updating the WDTSET - * register so that it is updated with new timeout values. + * register by calling rzg2l_wdt_stop() (which internally calls reset_control_reset() + * to reset the module) so that it is updated with new timeout values. */ if (watchdog_active(wdev)) { - pm_runtime_put(wdev->parent); - reset_control_reset(priv->rstc); + rzg2l_wdt_stop(wdev); rzg2l_wdt_start(wdev); } From patchwork Thu Nov 17 11:49:07 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabrizio Castro X-Patchwork-Id: 21595 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp355922wrr; Thu, 17 Nov 2022 03:55:52 -0800 (PST) X-Google-Smtp-Source: AA0mqf6PC1QpfF1ElnMqS80duA4ro68Mj42PNdNH9FLOK8z5VNL5wLhu1EgoT+Dc9mjR4r+xmBfi X-Received: by 2002:a17:907:98f5:b0:7ad:b45d:810c with SMTP id ke21-20020a17090798f500b007adb45d810cmr1920173ejc.181.1668686152316; Thu, 17 Nov 2022 03:55:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668686152; cv=none; d=google.com; s=arc-20160816; b=NFUGG4Rv35kYa8UtzP12E/cUPYJJzE8JNGowdwymP9SBa1WSx24piF00+nkCNwLMUp IL2PDBiOQrfe7jRAHygrybXZyqYKzr7aAXNNzdSp9s5SNZdS4BY/+M3tp6ORT/5sOwHh uApSYxIOv/9DMN2rG8AefcnmcyX+Qt+sJw0AMrclPei3UhNnMAVj4OE3DmzmculG0wS0 +Vw3NuT1Deg2lQXNFWpUYvKbTT6Og6ZPBi02FT5NbQpJo+w/Sz3rYcqwe0UYjsQLOy+v t9ufhiW14tY9061ZQEqwDwGq3sUDYs6tuTRlewFThMNYgrG+CvSSQjKyMIgTRRGKxhCJ bfOw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=M4gIe5OE9cb27HCvegpXOuGlnTN4t6sfTz4ngZzPeH8=; b=fCVPsqLMXKIyVx+GVgIbTlO+sv0OUhovUHIBa7Ci6jqx3W6WRecqkUsekB/7sxiJKX n26kes8WCk2vlCM7TeJt+MiI9xV9/WUmk7V2SKThvcj8/+y+wQLxG4B85uJHkWcxnW82 V8zSyOqm+KT0zbuV4UsKBD8O8UbB39wSftwZZp4Zu6LijJpPXOvVOPV2XAsvvyBWUQkg 6eVSI0LsgcZcB2skIBFjyLq0NXIDbQaQ/1hdDqDB0vITXRNq2cl4wFpt46VawMEviDhT EQIxL1lJU0vCosxjH0irKvoRL60Bf4q68Di/75Y3hdEVG25GXI5pL2lPxJb9oEmilE5Y ubNA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=renesas.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id gb10-20020a170907960a00b007882926c090si484219ejc.773.2022.11.17.03.55.29; Thu, 17 Nov 2022 03:55:52 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=renesas.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239367AbiKQLuM (ORCPT + 99 others); Thu, 17 Nov 2022 06:50:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52040 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234693AbiKQLtg (ORCPT ); Thu, 17 Nov 2022 06:49:36 -0500 Received: from relmlie5.idc.renesas.com (relmlor1.renesas.com [210.160.252.171]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 3ED245A6C5; Thu, 17 Nov 2022 03:49:34 -0800 (PST) X-IronPort-AV: E=Sophos;i="5.96,171,1665414000"; d="scan'208";a="140372943" Received: from unknown (HELO relmlir5.idc.renesas.com) ([10.200.68.151]) by relmlie5.idc.renesas.com with ESMTP; 17 Nov 2022 20:49:33 +0900 Received: from mulinux.example.org (unknown [10.226.93.80]) by relmlir5.idc.renesas.com (Postfix) with ESMTP id 9B4F5400C75F; Thu, 17 Nov 2022 20:49:29 +0900 (JST) From: Fabrizio Castro To: Wim Van Sebroeck , Guenter Roeck , Philipp Zabel , Geert Uytterhoeven Cc: Fabrizio Castro , Biju Das , linux-watchdog@vger.kernel.org, linux-kernel@vger.kernel.org, Chris Paterson , Biju Das , linux-renesas-soc@vger.kernel.org, Laurent Pinchart , Jacopo Mondi Subject: [PATCH 2/2] watchdog: rzg2l_wdt: Handle TYPE-B reset for RZ/V2M Date: Thu, 17 Nov 2022 11:49:07 +0000 Message-Id: <20221117114907.138583-3-fabrizio.castro.jz@renesas.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221117114907.138583-1-fabrizio.castro.jz@renesas.com> References: <20221117114907.138583-1-fabrizio.castro.jz@renesas.com> MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1749744251082710923?= X-GMAIL-MSGID: =?utf-8?q?1749744251082710923?= As per section 48.4 of the HW User Manual, IPs in the RZ/V2M SoC need either a TYPE-A reset sequence or a TYPE-B reset sequence. More specifically, the watchdog IP needs a TYPE-B reset sequence. If the proper reset sequence isn't implemented, then resetting IPs may lead to undesired behaviour. In the restart callback of the watchdog driver the reset has basically no effect on the desired funcionality, as the register writes following the reset happen before the IP manages to come out of reset. Implement the TYPE-B reset sequence in the watchdog driver to address the issues with the restart callback on RZ/V2M. Fixes: ec122fd94eeb ("watchdog: rzg2l_wdt: Add rzv2m support") Signed-off-by: Fabrizio Castro Reviewed-by: Guenter Roeck Reviewed-by: Geert Uytterhoeven --- drivers/watchdog/rzg2l_wdt.c | 37 +++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/drivers/watchdog/rzg2l_wdt.c b/drivers/watchdog/rzg2l_wdt.c index ceca42db0837..d404953d0e0f 100644 --- a/drivers/watchdog/rzg2l_wdt.c +++ b/drivers/watchdog/rzg2l_wdt.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -35,6 +36,8 @@ #define F2CYCLE_NSEC(f) (1000000000 / (f)) +#define RZV2M_A_NSEC 730 + static bool nowayout = WATCHDOG_NOWAYOUT; module_param(nowayout, bool, 0); MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" @@ -51,11 +54,35 @@ struct rzg2l_wdt_priv { struct reset_control *rstc; unsigned long osc_clk_rate; unsigned long delay; + unsigned long minimum_assertion_period; struct clk *pclk; struct clk *osc_clk; enum rz_wdt_type devtype; }; +static int rzg2l_wdt_reset(struct rzg2l_wdt_priv *priv) +{ + int err, status; + + if (priv->devtype == WDT_RZV2M) { + /* WDT needs TYPE-B reset control */ + err = reset_control_assert(priv->rstc); + if (err) + return err; + ndelay(priv->minimum_assertion_period); + err = reset_control_deassert(priv->rstc); + if (err) + return err; + err = read_poll_timeout(reset_control_status, status, + status != 1, 0, 1000, false, + priv->rstc); + } else { + err = reset_control_reset(priv->rstc); + } + + return err; +} + static void rzg2l_wdt_wait_delay(struct rzg2l_wdt_priv *priv) { /* delay timer when change the setting register */ @@ -115,7 +142,7 @@ static int rzg2l_wdt_stop(struct watchdog_device *wdev) { struct rzg2l_wdt_priv *priv = watchdog_get_drvdata(wdev); - reset_control_reset(priv->rstc); + rzg2l_wdt_reset(priv); pm_runtime_put(wdev->parent); return 0; @@ -154,6 +181,7 @@ static int rzg2l_wdt_restart(struct watchdog_device *wdev, rzg2l_wdt_write(priv, PEEN_FORCE, PEEN); } else { /* RZ/V2M doesn't have parity error registers */ + rzg2l_wdt_reset(priv); wdev->timeout = 0; @@ -251,6 +279,13 @@ static int rzg2l_wdt_probe(struct platform_device *pdev) priv->devtype = (uintptr_t)of_device_get_match_data(dev); + if (priv->devtype == WDT_RZV2M) { + priv->minimum_assertion_period = RZV2M_A_NSEC + + 3 * F2CYCLE_NSEC(pclk_rate) + 5 * + max(F2CYCLE_NSEC(priv->osc_clk_rate), + F2CYCLE_NSEC(pclk_rate)); + } + pm_runtime_enable(&pdev->dev); priv->wdev.info = &rzg2l_wdt_ident;