Skip to content

Commit d8997ed

Browse files
claudiubezneaWim Van Sebroeck
authored andcommitted
watchdog: rzg2l_wdt: Rely on the reset driver for doing proper reset
The reset driver has been adapted in commit da235d2 ("clk: renesas: rzg2l: Check reset monitor registers") to check the reset monitor bits before declaring reset asserts/de-asserts as successful/failure operations. With that, there is no need to keep the reset workaround for RZ/V2M in place in the watchdog driver. Signed-off-by: Claudiu Beznea <[email protected]> Reviewed-by: Philipp Zabel <[email protected]> Reviewed-by: Guenter Roeck <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Guenter Roeck <[email protected]> Signed-off-by: Wim Van Sebroeck <[email protected]>
1 parent 900b938 commit d8997ed

File tree

1 file changed

+4
-35
lines changed

1 file changed

+4
-35
lines changed

drivers/watchdog/rzg2l_wdt.c

Lines changed: 4 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include <linux/clk.h>
99
#include <linux/delay.h>
1010
#include <linux/io.h>
11-
#include <linux/iopoll.h>
1211
#include <linux/kernel.h>
1312
#include <linux/module.h>
1413
#include <linux/of.h>
@@ -54,35 +53,11 @@ struct rzg2l_wdt_priv {
5453
struct reset_control *rstc;
5554
unsigned long osc_clk_rate;
5655
unsigned long delay;
57-
unsigned long minimum_assertion_period;
5856
struct clk *pclk;
5957
struct clk *osc_clk;
6058
enum rz_wdt_type devtype;
6159
};
6260

63-
static int rzg2l_wdt_reset(struct rzg2l_wdt_priv *priv)
64-
{
65-
int err, status;
66-
67-
if (priv->devtype == WDT_RZV2M) {
68-
/* WDT needs TYPE-B reset control */
69-
err = reset_control_assert(priv->rstc);
70-
if (err)
71-
return err;
72-
ndelay(priv->minimum_assertion_period);
73-
err = reset_control_deassert(priv->rstc);
74-
if (err)
75-
return err;
76-
err = read_poll_timeout(reset_control_status, status,
77-
status != 1, 0, 1000, false,
78-
priv->rstc);
79-
} else {
80-
err = reset_control_reset(priv->rstc);
81-
}
82-
83-
return err;
84-
}
85-
8661
static void rzg2l_wdt_wait_delay(struct rzg2l_wdt_priv *priv)
8762
{
8863
/* delay timer when change the setting register */
@@ -189,13 +164,12 @@ static int rzg2l_wdt_restart(struct watchdog_device *wdev,
189164
unsigned long action, void *data)
190165
{
191166
struct rzg2l_wdt_priv *priv = watchdog_get_drvdata(wdev);
167+
int ret;
192168

193169
clk_prepare_enable(priv->pclk);
194170
clk_prepare_enable(priv->osc_clk);
195171

196172
if (priv->devtype == WDT_RZG2L) {
197-
int ret;
198-
199173
ret = reset_control_deassert(priv->rstc);
200174
if (ret)
201175
return ret;
@@ -207,7 +181,9 @@ static int rzg2l_wdt_restart(struct watchdog_device *wdev,
207181
rzg2l_wdt_write(priv, PEEN_FORCE, PEEN);
208182
} else {
209183
/* RZ/V2M doesn't have parity error registers */
210-
rzg2l_wdt_reset(priv);
184+
ret = reset_control_reset(priv->rstc);
185+
if (ret)
186+
return ret;
211187

212188
wdev->timeout = 0;
213189

@@ -299,13 +275,6 @@ static int rzg2l_wdt_probe(struct platform_device *pdev)
299275

300276
priv->devtype = (uintptr_t)of_device_get_match_data(dev);
301277

302-
if (priv->devtype == WDT_RZV2M) {
303-
priv->minimum_assertion_period = RZV2M_A_NSEC +
304-
3 * F2CYCLE_NSEC(pclk_rate) + 5 *
305-
max(F2CYCLE_NSEC(priv->osc_clk_rate),
306-
F2CYCLE_NSEC(pclk_rate));
307-
}
308-
309278
pm_runtime_enable(&pdev->dev);
310279

311280
priv->wdev.info = &rzg2l_wdt_ident;

0 commit comments

Comments
 (0)