Skip to contentSkip to conversation

MX31: mx31pdk: Add watchdog support

PATCH New Fabio Estevam 3 participants 5 messages Apr 10, 2011 – Apr 27, 2011

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/2 MX31: mx31pdk: Add watchdog support

---
Changes since v1:
- define BOARD_LATE_INIT in /mx31pdk.h

 board/freescale/mx31pdk/mx31pdk.c |   16 ++++++++++++++++
 include/configs/mx31pdk.h         |    3 +++
 2 files changed, 19 insertions(+), 0 deletions(-)
board/freescale/mx31pdk/mx31pdk.c +16 -0
index 3f291fc..4ef548f 100644
@@ -28,9 +28,17 @@
 #include <netdev.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/imx-regs.h>
+#include <watchdog.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
+#ifdef CONFIG_HW_WATCHDOG
+void hw_watchdog_reset(void)
+{
+	mxc_hw_watchdog_reset();
+}
+#endif
+
 int dram_init(void)
 {
 	/* dram_init must store complete ramsize in gd->ram_size */
@@ -68,6 +76,14 @@ int board_init(void)
 	return 0;
 }
 
+int board_late_init(void)
+{
+#ifdef CONFIG_HW_WATCHDOG
+	mxc_hw_watchdog_enable();
+#endif
+	return 0;
+}
+
 int checkboard(void)
 {
 	printf("Board: i.MX31 MAX PDK (3DS)\n");
include/configs/mx31pdk.h +3 -0
index d4c6d16..f5d3ee7 100644
@@ -61,6 +61,7 @@
 
 #define CONFIG_MXC_UART		1
 #define CONFIG_SYS_MX31_UART1	1
+#define CONFIG_HW_WATCHDOG
 
 #define CONFIG_HARD_SPI		1
 #define CONFIG_MXC_SPI		1
@@ -98,6 +99,8 @@
  */
 #undef CONFIG_CMD_IMLS
 
+#define BOARD_LATE_INIT
+
 #define CONFIG_BOOTDELAY	3
 
 #define	CONFIG_EXTRA_ENV_SETTINGS					\
Signature · 1 line
1.6.0.4
#1 lore raw

PATCH v2 2/2 MX31: mx31pdk: Print the cause of reset

---
Changes since v1:
- Use 3 bits for rcsr mask

 board/freescale/mx31pdk/mx31pdk.c |   25 ++++++++++++++++++++++++-
 1 files changed, 24 insertions(+), 1 deletions(-)
board/freescale/mx31pdk/mx31pdk.c +24 -1
index 4ef548f..5fc6319 100644
@@ -86,7 +86,30 @@ int board_late_init(void)
 
 int checkboard(void)
 {
-	printf("Board: i.MX31 MAX PDK (3DS)\n");
+	u32 cause;
+	struct clock_control_regs *ccm =
+		(struct clock_control_regs *)CCM_BASE;
+	puts("Board: MX31PDK [");
+
+	cause = ccm->rcsr & 0x07;
+	switch (cause) {
+	case 0x0000:
+		puts("POR");
+		break;
+	case 0x0001:
+		puts("RST");
+		break;
+	case 0x0002:
+		puts("WDOG");
+		break;
+	case 0x0006:
+		puts("JTAG");
+		break;
+	default:
+		puts("unknown");
+	}
+
+	puts("]\n");
 	return 0;
 }
 
Signature · 1 line
1.6.0.4
#2 lore raw

PATCH v2 2/2 MX31: mx31pdk: Print the cause of reset

Hi Fabio,

Quoted 33 lines

---
Changes since v1:
- Use 3 bits for rcsr mask

 board/freescale/mx31pdk/mx31pdk.c |   25 ++++++++++++++++++++++++-
 1 files changed, 24 insertions(+), 1 deletions(-)
board/freescale/mx31pdk/mx31pdk.c +16 -1
index 4ef548f..5fc6319 100644
@@ -86,7 +86,30 @@ int board_late_init(void)
 
 int checkboard(void)
 {
-	printf("Board: i.MX31 MAX PDK (3DS)\n");
+	u32 cause;
+	struct clock_control_regs *ccm =
+		(struct clock_control_regs *)CCM_BASE;
+	puts("Board: MX31PDK [");
+
+	cause = ccm->rcsr & 0x07;
+	switch (cause) {
+	case 0x0000:
+		puts("POR");
+		break;
+	case 0x0001:
+		puts("RST");
+		break;
+	case 0x0002:
+		puts("WDOG");
+		break;

board/freescale/mx31pdk/mx31pdk.c int board_late_init(void) · line 114

Quoted 10 lines
board/freescale/mx31pdk/mx31pdk.c +8 -0
+	case 0x0006:
+		puts("JTAG");
+		break;
+	default:
+		puts("unknown");
+	}
+
+	puts("]\n");
 	return 0;
 }

Didn't we agree to move this into CPU specific code so other i.MX31 boards will profit from it as well? Can you remind me why this does not happen?

Cheers
Detlev

Signature · 7 lines
Don't trust everything you read, and don't assume every poster in
a thread is actually relevant to the problem.
        -- Stefan Monnier <[email protected]>
--
DENX Software Engineering GmbH,      MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich,  Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-40 Fax: (+49)-8142-66989-80 Email: dzu at denx.de
#3 lore raw

PATCH v2 1/2 MX31: mx31pdk: Add watchdog support

In reply to Fabio Estevam

Hi Stefano,

Ping?

Regards,

Fabio Estevam

Quoted 67 lines · Fabio Estevam

---
Changes since v1:
- define BOARD_LATE_INIT in /mx31pdk.h

 board/freescale/mx31pdk/mx31pdk.c |   16 ++++++++++++++++
 include/configs/mx31pdk.h         |    3 +++
 2 files changed, 19 insertions(+), 0 deletions(-)
board/freescale/mx31pdk/mx31pdk.c +16 -0
index 3f291fc..4ef548f 100644
@@ -28,9 +28,17 @@
 #include <netdev.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/imx-regs.h>
+#include <watchdog.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
+#ifdef CONFIG_HW_WATCHDOG
+void hw_watchdog_reset(void)
+{
+	mxc_hw_watchdog_reset();
+}
+#endif
+
 int dram_init(void)
 {
 	/* dram_init must store complete ramsize in gd->ram_size */
@@ -68,6 +76,14 @@ int board_init(void)
 	return 0;
 }
 
+int board_late_init(void)
+{
+#ifdef CONFIG_HW_WATCHDOG
+	mxc_hw_watchdog_enable();
+#endif
+	return 0;
+}
+
 int checkboard(void)
 {
 	printf("Board: i.MX31 MAX PDK (3DS)\n");
include/configs/mx31pdk.h +3 -0
index d4c6d16..f5d3ee7 100644
@@ -61,6 +61,7 @@
 
 #define CONFIG_MXC_UART		1
 #define CONFIG_SYS_MX31_UART1	1
+#define CONFIG_HW_WATCHDOG
 
 #define CONFIG_HARD_SPI		1
 #define CONFIG_MXC_SPI		1
@@ -98,6 +99,8 @@
  */
 #undef CONFIG_CMD_IMLS
 
+#define BOARD_LATE_INIT
+
 #define CONFIG_BOOTDELAY	3
 
 #define	CONFIG_EXTRA_ENV_SETTINGS					\
#4 lore raw

PATCH v2 1/2 MX31: mx31pdk: Add watchdog support

Hi Fabio,

Quoted 28 lines

Ping?

Regards,

Fabio Estevam

Quoted 21 lines · Fabio Estevam

---
Changes since v1:
- define BOARD_LATE_INIT in /mx31pdk.h

 board/freescale/mx31pdk/mx31pdk.c |   16 ++++++++++++++++
 include/configs/mx31pdk.h         |    3 +++
 2 files changed, 19 insertions(+), 0 deletions(-)
board/freescale/mx31pdk/mx31pdk.c +1 -0
index 3f291fc..4ef548f 100644
@@ -28,9 +28,17 @@
 #include <netdev.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/imx-regs.h>
+#include <watchdog.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
Quoted 7 lines

board/freescale/mx31pdk/mx31pdk.c line 41

Quoted 7 lines
board/freescale/mx31pdk/mx31pdk.c +7 -0
+#ifdef CONFIG_HW_WATCHDOG
+void hw_watchdog_reset(void)
+{
+	mxc_hw_watchdog_reset();
+}
+#endif
+

I was just discussing this with Wolfgang again and actually you should use CONFIG_WATCHDOG for this. The latter was meant for CPU internal watchdog functionality, whereas CONFIG_HW_WATCHDOG was for external (i.e. i2c or other) separate watchdog chips. I'm working on a patch to README to make this more widely known.

Quoted 34 lines
Quoted 34 lines
board/freescale/mx31pdk/mx31pdk.c +8 -0
 int dram_init(void)
 {
 	/* dram_init must store complete ramsize in gd->ram_size */
@@ -68,6 +76,14 @@ int board_init(void)
 	return 0;
 }
 
+int board_late_init(void)
+{
+#ifdef CONFIG_HW_WATCHDOG
+	mxc_hw_watchdog_enable();
+#endif
+	return 0;
+}
+
 int checkboard(void)
 {
 	printf("Board: i.MX31 MAX PDK (3DS)\n");
include/configs/mx31pdk.h +1 -0
index d4c6d16..f5d3ee7 100644
@@ -61,6 +61,7 @@
 
 #define CONFIG_MXC_UART		1
 #define CONFIG_SYS_MX31_UART1	1
+#define CONFIG_HW_WATCHDOG
 
 #define CONFIG_HARD_SPI		1
 #define CONFIG_MXC_SPI		1
@@ -98,6 +99,8 @@
  */
 #undef CONFIG_CMD_IMLS
 
Quoted 5 lines

include/configs/mx31pdk.h line 106

Quoted 5 lines
include/configs/mx31pdk.h +2 -0
+#define BOARD_LATE_INIT
+
 #define CONFIG_BOOTDELAY	3
 
 #define	CONFIG_EXTRA_ENV_SETTINGS					\

Why cannot we put the code into i.mx31 specific code and only keep the config board specific? In this patch there is (again) zero board dependency, so all i.MX31 boards should be able to profit from the work.

Thanks
Detlev

Signature · 7 lines
So maybe I lost track of my point.  But if I left a mark, C-x C-x should be
all I need.
      -- David Kastrup, emacs-devel.gnu.org <[email protected]>
--
DENX Software Engineering GmbH,      MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich,  Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-40 Fax: (+49)-8142-66989-80 Email: dzu at denx.de