[1/2] watchdog: dw_wdt: Fix the error handling path of dw_wdt_drv_probe()

Message ID fbb650650bbb33a8fa2fd028c23157bedeed50e1.1682491863.git.christophe.jaillet@wanadoo.fr
State New
Headers
Series [1/2] watchdog: dw_wdt: Fix the error handling path of dw_wdt_drv_probe() |

Commit Message

Christophe JAILLET April 26, 2023, 6:52 a.m. UTC
  The commit in Fixes has only updated the remove function and missed the
error handling path of the probe.

Add the missing reset_control_assert() call.

Fixes: 65a3b6935d92 ("watchdog: dw_wdt: get reset lines from dt")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
---
 drivers/watchdog/dw_wdt.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
  

Comments

Philipp Zabel April 26, 2023, 7:32 a.m. UTC | #1
Hi Christophe,

On Wed, Apr 26, 2023 at 08:52:48AM +0200, Christophe JAILLET wrote:
> The commit in Fixes has only updated the remove function and missed the
> error handling path of the probe.
> 
> Add the missing reset_control_assert() call.
> 
> Fixes: 65a3b6935d92 ("watchdog: dw_wdt: get reset lines from dt")
> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>

Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>

regards
Philipp
  
Guenter Roeck April 26, 2023, 1:46 p.m. UTC | #2
On Wed, Apr 26, 2023 at 08:52:48AM +0200, Christophe JAILLET wrote:
> The commit in Fixes has only updated the remove function and missed the
> error handling path of the probe.
> 
> Add the missing reset_control_assert() call.
> 
> Fixes: 65a3b6935d92 ("watchdog: dw_wdt: get reset lines from dt")
> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>

Reviewed-by: Guenter Roeck <linux@roeck-us.net>

> ---
>  drivers/watchdog/dw_wdt.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/watchdog/dw_wdt.c b/drivers/watchdog/dw_wdt.c
> index 6f88bd81f8a1..a1354a59eb37 100644
> --- a/drivers/watchdog/dw_wdt.c
> +++ b/drivers/watchdog/dw_wdt.c
> @@ -635,7 +635,7 @@ static int dw_wdt_drv_probe(struct platform_device *pdev)
>  
>  	ret = dw_wdt_init_timeouts(dw_wdt, dev);
>  	if (ret)
> -		goto out_disable_clk;
> +		goto out_assert_rst;
>  
>  	wdd = &dw_wdt->wdd;
>  	wdd->ops = &dw_wdt_ops;
> @@ -667,12 +667,15 @@ static int dw_wdt_drv_probe(struct platform_device *pdev)
>  
>  	ret = watchdog_register_device(wdd);
>  	if (ret)
> -		goto out_disable_pclk;
> +		goto out_assert_rst;
>  
>  	dw_wdt_dbgfs_init(dw_wdt);
>  
>  	return 0;
>  
> +out_assert_rst:
> +	reset_control_assert(dw_wdt->rst);
> +
>  out_disable_pclk:
>  	clk_disable_unprepare(dw_wdt->pclk);
>  
> -- 
> 2.34.1
>
  

Patch

diff --git a/drivers/watchdog/dw_wdt.c b/drivers/watchdog/dw_wdt.c
index 6f88bd81f8a1..a1354a59eb37 100644
--- a/drivers/watchdog/dw_wdt.c
+++ b/drivers/watchdog/dw_wdt.c
@@ -635,7 +635,7 @@  static int dw_wdt_drv_probe(struct platform_device *pdev)
 
 	ret = dw_wdt_init_timeouts(dw_wdt, dev);
 	if (ret)
-		goto out_disable_clk;
+		goto out_assert_rst;
 
 	wdd = &dw_wdt->wdd;
 	wdd->ops = &dw_wdt_ops;
@@ -667,12 +667,15 @@  static int dw_wdt_drv_probe(struct platform_device *pdev)
 
 	ret = watchdog_register_device(wdd);
 	if (ret)
-		goto out_disable_pclk;
+		goto out_assert_rst;
 
 	dw_wdt_dbgfs_init(dw_wdt);
 
 	return 0;
 
+out_assert_rst:
+	reset_control_assert(dw_wdt->rst);
+
 out_disable_pclk:
 	clk_disable_unprepare(dw_wdt->pclk);