[U-Boot] [PATCH v2 1/2] MX31: mx31pdk: Add watchdog support

Signed-off-by: Fabio Estevam fabio.estevam@freescale.com --- 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(-)
diff --git a/board/freescale/mx31pdk/mx31pdk.c b/board/freescale/mx31pdk/mx31pdk.c index 3f291fc..4ef548f 100644 --- a/board/freescale/mx31pdk/mx31pdk.c +++ b/board/freescale/mx31pdk/mx31pdk.c @@ -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"); diff --git a/include/configs/mx31pdk.h b/include/configs/mx31pdk.h index d4c6d16..f5d3ee7 100644 --- a/include/configs/mx31pdk.h +++ b/include/configs/mx31pdk.h @@ -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 \

Signed-off-by: Fabio Estevam fabio.estevam@freescale.com --- Changes since v1: - Use 3 bits for rcsr mask
board/freescale/mx31pdk/mx31pdk.c | 25 ++++++++++++++++++++++++- 1 files changed, 24 insertions(+), 1 deletions(-)
diff --git a/board/freescale/mx31pdk/mx31pdk.c b/board/freescale/mx31pdk/mx31pdk.c index 4ef548f..5fc6319 100644 --- a/board/freescale/mx31pdk/mx31pdk.c +++ b/board/freescale/mx31pdk/mx31pdk.c @@ -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; }

Hi Fabio,
Signed-off-by: Fabio Estevam fabio.estevam@freescale.com
Changes since v1:
- Use 3 bits for rcsr mask
board/freescale/mx31pdk/mx31pdk.c | 25 ++++++++++++++++++++++++- 1 files changed, 24 insertions(+), 1 deletions(-)
diff --git a/board/freescale/mx31pdk/mx31pdk.c b/board/freescale/mx31pdk/mx31pdk.c index 4ef548f..5fc6319 100644 --- a/board/freescale/mx31pdk/mx31pdk.c +++ b/board/freescale/mx31pdk/mx31pdk.c @@ -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;
}
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

Hi Stefano,
Ping?
Regards,
Fabio Estevam
On 4/10/2011 3:17 PM, Fabio Estevam wrote:
Signed-off-by: Fabio Estevam fabio.estevam@freescale.com
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(-)
diff --git a/board/freescale/mx31pdk/mx31pdk.c b/board/freescale/mx31pdk/mx31pdk.c index 3f291fc..4ef548f 100644 --- a/board/freescale/mx31pdk/mx31pdk.c +++ b/board/freescale/mx31pdk/mx31pdk.c @@ -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"); diff --git a/include/configs/mx31pdk.h b/include/configs/mx31pdk.h index d4c6d16..f5d3ee7 100644 --- a/include/configs/mx31pdk.h +++ b/include/configs/mx31pdk.h @@ -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 \

Hi Fabio,
Ping?
Regards,
Fabio Estevam
On 4/10/2011 3:17 PM, Fabio Estevam wrote:
Signed-off-by: Fabio Estevam fabio.estevam@freescale.com
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(-)
diff --git a/board/freescale/mx31pdk/mx31pdk.c b/board/freescale/mx31pdk/mx31pdk.c index 3f291fc..4ef548f 100644 --- a/board/freescale/mx31pdk/mx31pdk.c +++ b/board/freescale/mx31pdk/mx31pdk.c @@ -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
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.
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"); diff --git a/include/configs/mx31pdk.h b/include/configs/mx31pdk.h index d4c6d16..f5d3ee7 100644 --- a/include/configs/mx31pdk.h +++ b/include/configs/mx31pdk.h @@ -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 \
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
participants (3)
-
Detlev Zundel
-
Fabio Estevam
-
Fabio Estevam