Skip to contentSkip to conversation

ARM: i.MX system: Simplify handling watchdog clock

PATCH New Alexander Shiyan 2 participants 7 messages Jun 13, 2014 – Jun 20, 2014

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/2 ARM: i.MX system: Simplify handling watchdog clock

This patch simplifies handling watchdog clock a bit.
As an additional change, now we properly check WDT clock in a reset function.

---
 arch/arm/mach-imx/system.c | 20 +++++++-------------
 1 file changed, 7 insertions(+), 13 deletions(-)
arch/arm/mach-imx/system.c +7 -13
index 3b0733e..ae521f3 100644
@@ -42,7 +42,7 @@ void mxc_restart(enum reboot_mode mode, const char *cmd)
 {
 	unsigned int wcr_enable;
 
-	if (wdog_clk)
+	if (!IS_ERR_OR_NULL(wdog_clk))
 		clk_enable(wdog_clk);
 
 	if (cpu_is_mx1())
@@ -79,13 +79,10 @@ void __init mxc_arch_reset_init(void __iomem *base)
 	wdog_base = base;
 
 	wdog_clk = clk_get_sys("imx2-wdt.0", NULL);
-	if (IS_ERR(wdog_clk)) {
+	if (IS_ERR(wdog_clk))
 		pr_warn("%s: failed to get wdog clock\n", __func__);
-		wdog_clk = NULL;
-		return;
-	}
-
-	clk_prepare(wdog_clk);
+	else
+		clk_prepare(wdog_clk);
 }
 
 void __init mxc_arch_reset_init_dt(void)
@@ -97,13 +94,10 @@ void __init mxc_arch_reset_init_dt(void)
 	WARN_ON(!wdog_base);
 
 	wdog_clk = of_clk_get(np, 0);
-	if (IS_ERR(wdog_clk)) {
+	if (IS_ERR(wdog_clk))
 		pr_warn("%s: failed to get wdog clock\n", __func__);
-		wdog_clk = NULL;
-		return;
-	}
-
-	clk_prepare(wdog_clk);
+	else
+		clk_prepare(wdog_clk);
 }
 
 #ifdef CONFIG_CACHE_L2X0
Signature · 1 line
1.8.5.5
#1 lore raw

PATCH 2/2 ARM: i.MX system: Add a reset fallback if base address of watchdog is not set

This patch adds a reset fallback if base address of watchdog is not set. This is intended for a targets not compatible with imx-21 watchdog, i.MX1 for example.

---
 arch/arm/mach-imx/system.c | 4 ++++
 1 file changed, 4 insertions(+)
arch/arm/mach-imx/system.c +4 -0
index ae521f3..3b9259b 100644
@@ -42,6 +42,9 @@ void mxc_restart(enum reboot_mode mode, const char *cmd)
 {
 	unsigned int wcr_enable;
 
+	if (!wdog_base)
+		goto reset_fallback;
+
 	if (!IS_ERR_OR_NULL(wdog_clk))
 		clk_enable(wdog_clk);
 
@@ -70,6 +73,7 @@ void mxc_restart(enum reboot_mode mode, const char *cmd)
 	/* delay to allow the serial port to show the message */
 	mdelay(50);
 
+reset_fallback:
 	/* we'll take a jump through zero as a poor second */
 	soft_restart(0);
 }
Signature · 1 line
1.8.5.5
#2 lore raw

PATCH 1/2 ARM: i.MX system: Simplify handling watchdog clock

In reply to Alexander Shiyan
Quoted 14 lines · Alexander Shiyan

This patch simplifies handling watchdog clock a bit.
As an additional change, now we properly check WDT clock in a reset function.

---
 arch/arm/mach-imx/system.c | 20 +++++++-------------
 1 file changed, 7 insertions(+), 13 deletions(-)
arch/arm/mach-imx/system.c +0 -0
index 3b0733e..ae521f3 100644

arch/arm/mach-imx/system.c void mxc_restart(enum reboot_mode mode, const char *cmd) · line 45

Quoted 5 lines
arch/arm/mach-imx/system.c +1 -1
@@ -42,7 +42,7 @@ void mxc_restart(enum reboot_mode mode, const char *cmd)
 {
 	unsigned int wcr_enable;
 
-	if (wdog_clk)
+	if (!IS_ERR_OR_NULL(wdog_clk))

I think this should just be if (!IS_ERR(wdog_clk)).

Shawn

Quoted 40 lines
arch/arm/mach-imx/system.c +6 -12
 		clk_enable(wdog_clk);
 
 	if (cpu_is_mx1())
@@ -79,13 +79,10 @@ void __init mxc_arch_reset_init(void __iomem *base)
 	wdog_base = base;
 
 	wdog_clk = clk_get_sys("imx2-wdt.0", NULL);
-	if (IS_ERR(wdog_clk)) {
+	if (IS_ERR(wdog_clk))
 		pr_warn("%s: failed to get wdog clock\n", __func__);
-		wdog_clk = NULL;
-		return;
-	}
-
-	clk_prepare(wdog_clk);
+	else
+		clk_prepare(wdog_clk);
 }
 
 void __init mxc_arch_reset_init_dt(void)
@@ -97,13 +94,10 @@ void __init mxc_arch_reset_init_dt(void)
 	WARN_ON(!wdog_base);
 
 	wdog_clk = of_clk_get(np, 0);
-	if (IS_ERR(wdog_clk)) {
+	if (IS_ERR(wdog_clk))
 		pr_warn("%s: failed to get wdog clock\n", __func__);
-		wdog_clk = NULL;
-		return;
-	}
-
-	clk_prepare(wdog_clk);
+	else
+		clk_prepare(wdog_clk);
 }
 
 #ifdef CONFIG_CACHE_L2X0
Signature · 1 line
1.8.5.5
#3 lore raw

Fri, 20 Jun 2014 12:26:52 +0800 ?? Shawn Guo <[email protected]>:

Quoted 18 lines · Alexander Shiyan
Quoted 17 lines

This patch simplifies handling watchdog clock a bit.
As an additional change, now we properly check WDT clock in a reset function.

---
 arch/arm/mach-imx/system.c | 20 +++++++-------------
 1 file changed, 7 insertions(+), 13 deletions(-)
arch/arm/mach-imx/system.c +0 -0
index 3b0733e..ae521f3 100644
@@ -42,7 +42,7 @@ void mxc_restart(enum reboot_mode mode, const char *cmd)
 {
 	unsigned int wcr_enable;
 
Quoted 4 lines

arch/arm/mach-imx/system.c void mxc_restart(enum reboot_mode mode, const char *cmd) · line 45

Quoted 2 lines
arch/arm/mach-imx/system.c +1 -1
-	if (wdog_clk)
+	if (!IS_ERR_OR_NULL(wdog_clk))

I think this should just be if (!IS_ERR(wdog_clk)).

No, this is a part of commit log.
wdog_clk can be NULL if mxc_arch_reset_init() is not called, so we just protect mxc_restart() for such cases.

---

#4 lore raw

PATCH 1/2 ARM: i.MX system: Simplify handling watchdog clock

Quoted 19 lines · Alexander Shiyan

Fri, 20 Jun 2014 12:26:52 +0800 ?? Shawn Guo <[email protected]>:

Quoted 18 lines · Alexander Shiyan
Quoted 17 lines

This patch simplifies handling watchdog clock a bit.
As an additional change, now we properly check WDT clock in a reset function.

---
 arch/arm/mach-imx/system.c | 20 +++++++-------------
 1 file changed, 7 insertions(+), 13 deletions(-)
arch/arm/mach-imx/system.c +0 -0
index 3b0733e..ae521f3 100644
@@ -42,7 +42,7 @@ void mxc_restart(enum reboot_mode mode, const char *cmd)
 {
 	unsigned int wcr_enable;
 
Quoted 8 lines
Quoted 4 lines

arch/arm/mach-imx/system.c void mxc_restart(enum reboot_mode mode, const char *cmd) · line 45

Quoted 2 lines
arch/arm/mach-imx/system.c +1 -1
-	if (wdog_clk)
+	if (!IS_ERR_OR_NULL(wdog_clk))

I think this should just be if (!IS_ERR(wdog_clk)).

No, this is a part of commit log.
wdog_clk can be NULL if mxc_arch_reset_init() is not called, so we just protect mxc_restart() for such cases.

I think clk API can take NULL as input.

Shawn

#5 lore raw

Fri, 20 Jun 2014 15:50:34 +0800 ?? Shawn Guo <[email protected]>:

Quoted 25 lines · Alexander Shiyan
Quoted 24 lines

Fri, 20 Jun 2014 12:26:52 +0800 ?? Shawn Guo <[email protected]>:

Quoted 22 lines · Alexander Shiyan
Quoted 14 lines

This patch simplifies handling watchdog clock a bit.
As an additional change, now we properly check WDT clock in a reset function.

---
 arch/arm/mach-imx/system.c | 20 +++++++-------------
 1 file changed, 7 insertions(+), 13 deletions(-)
arch/arm/mach-imx/system.c +0 -0
index 3b0733e..ae521f3 100644

arch/arm/mach-imx/system.c void mxc_restart(enum reboot_mode mode, const char *cmd) · line 45

Quoted 5 lines
arch/arm/mach-imx/system.c +1 -1
@@ -42,7 +42,7 @@ void mxc_restart(enum reboot_mode mode, const char *cmd)
 {
 	unsigned int wcr_enable;
 
-	if (wdog_clk)
+	if (!IS_ERR_OR_NULL(wdog_clk))

I think this should just be if (!IS_ERR(wdog_clk)).

Quoted 5 lines
Quoted 3 lines

No, this is a part of commit log.
wdog_clk can be NULL if mxc_arch_reset_init() is not called, so we just protect mxc_restart() for such cases.

I think clk API can take NULL as input.

You are right.
If this is the only issue on this series, could you fix it during the applying?

---

#6 lore raw

PATCH 1/2 ARM: i.MX system: Simplify handling watchdog clock

Quoted 2 lines · Alexander Shiyan

You are right.
If this is the only issue on this series, could you fix it during the applying?

Okay. Fixed it and applied both patches.

Shawn