Add support for freescale watchdog to CPM serial driver.
If a freescale watchdog device node is present, reset the watchdog while waiting for serial input.
---
arch/powerpc/boot/Makefile | 2 +- arch/powerpc/boot/cpm-serial.c | 6 +++ arch/powerpc/boot/cuboot-8xx.c | 1 + arch/powerpc/boot/ops.h | 8 ++++ arch/powerpc/boot/watchdog.c | 81 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 97 insertions(+), 1 deletions(-)
create mode 100644 arch/powerpc/boot/watchdog.c
arch/powerpc/boot/Makefile +0 -0
@@ -56,7 +56,7 @@ src-wlib := string.S crt0.S stdio.c main.c \
gunzip_util.c elf_util.c $(zlib) devtree.c oflib.c ofconsole.c \ 4xx.c ebony.c mv64x60.c mpsc.c mv64x60_i2c.c cuboot.c bamboo.c \ cpm-serial.c stdlib.c mpc52xx-psc.c planetcore.c uartlite.c \ - fsl-soc.c mpc8xx.c pq2.c + fsl-soc.c mpc8xx.c pq2.c watchdog.c src-plat := of.c cuboot-52xx.c cuboot-83xx.c cuboot-85xx.c holly.c \ cuboot-ebony.c treeboot-ebony.c prpmc2800.c \ ps3-head.S ps3-hvcall.S ps3.c treeboot-bamboo.c cuboot-8xx.c \
arch/powerpc/boot/cpm-serial.c +3 -0
@@ -6,6 +6,9 @@* * It is assumed that the firmware (or the platform file) has already set * up the port. +* +* If a watchdog node exists, periodically reset the watchdog while waiting +* for console input. */
#include "types.h"
@@ -154,6 +157,9 @@ static void cpm_serial_putc(unsigned char c)
static unsigned char cpm_serial_tstc(void)
{
+
+ watchdog_poke();
+
barrier(); return !(rbdf->sc & 0x8000); }
arch/powerpc/boot/cuboot-8xx.c +0 -0
@@ -43,5 +43,6 @@ void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
CUBOOT_INIT(); fdt_init(_dtb_start); serial_console_init(); + watchdog_init(); platform_ops.fixups = platform_fixups; }
arch/powerpc/boot/ops.h +0 -0
@@ -70,6 +70,12 @@ struct serial_console_data {
void (*close)(void); };
+/* Watchdog operations */
+struct watchdog_ops {
+ void (*poke)(void);
+};
+extern struct watchdog_ops watchdog_ops;
+
struct loader_info {
void *promptr;
unsigned long initrd_addr, initrd_size;@@ -86,6 +92,8 @@ int mpsc_console_init(void *devp, struct serial_console_data *scdp); int cpm_console_init(void *devp, struct serial_console_data *scdp);
int mpc5200_psc_console_init(void *devp, struct serial_console_data *scdp); int uartlite_console_init(void *devp, struct serial_console_data *scdp); +void watchdog_poke(void);
+void watchdog_init(void);
void *simple_alloc_init(char *base, unsigned long heap_size,
unsigned long granularity, unsigned long max_allocs);
extern void flush_cache(void *, unsigned long);
arch/powerpc/boot/watchdog.c new file +81 -0
81 lines not on this page · raw message
Signature · 1 line
1.5.3.8