2008-01-17 12:32:18

by Jochen Friedrich

[permalink] [raw]
Subject: [PATCH/RFCv2] [POWERPC] 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.

Signed-off-by: Jochen Friedrich <[email protected]>
---
arch/powerpc/boot/Makefile | 2 +-
arch/powerpc/boot/cpm-serial.c | 6 ++++
arch/powerpc/boot/cuboot-8xx.c | 1 +
arch/powerpc/boot/ops.h | 2 +
arch/powerpc/boot/watchdog.c | 65 ++++++++++++++++++++++++++++++++++++++++
5 files changed, 75 insertions(+), 1 deletions(-)
create mode 100644 arch/powerpc/boot/watchdog.c

diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
index d1e625c..66edf77 100644
--- a/arch/powerpc/boot/Makefile
+++ b/arch/powerpc/boot/Makefile
@@ -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 \
diff --git a/arch/powerpc/boot/cpm-serial.c b/arch/powerpc/boot/cpm-serial.c
index 28296fa..56b5fda 100644
--- a/arch/powerpc/boot/cpm-serial.c
+++ b/arch/powerpc/boot/cpm-serial.c
@@ -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);
}
diff --git a/arch/powerpc/boot/cuboot-8xx.c b/arch/powerpc/boot/cuboot-8xx.c
index c202c88..767670e 100644
--- a/arch/powerpc/boot/cuboot-8xx.c
+++ b/arch/powerpc/boot/cuboot-8xx.c
@@ -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;
}
diff --git a/arch/powerpc/boot/ops.h b/arch/powerpc/boot/ops.h
index 6036a98..0701359 100644
--- a/arch/powerpc/boot/ops.h
+++ b/arch/powerpc/boot/ops.h
@@ -86,6 +86,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);
diff --git a/arch/powerpc/boot/watchdog.c b/arch/powerpc/boot/watchdog.c
new file mode 100644
index 0000000..6c50052
--- /dev/null
+++ b/arch/powerpc/boot/watchdog.c
@@ -0,0 +1,65 @@
+/*
+ * PQ Watchdog
+ *
+ * Copyright 2008 Jochen Friedrich <[email protected]>
+ *
+ * Search for PowerQUICC type watchdog devices. Provide a callback to
+ * periodically reset the watchdog while waiting for console input.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "types.h"
+#include "io.h"
+#include "ops.h"
+
+struct pq_wdt {
+ u32 res0;
+ u32 swcrr; /* System watchdog control register */
+ u32 swcnr; /* System watchdog count register */
+ u8 res1[2];
+ u16 swsrr; /* System watchdog service register */
+};
+
+static struct pq_wdt *wdt;
+
+void watchdog_poke(void)
+{
+ if (wdt) {
+ out_be16(&wdt->swsrr, 0x556c);
+ out_be16(&wdt->swsrr, 0xaa39);
+ }
+}
+
+void watchdog_init(void)
+{
+ void *reg_virt[2];
+ int n;
+ unsigned long reg_phys;
+ void *watchdog;
+
+ watchdog = finddevice("/soc/wdt");
+ if (watchdog && (dt_is_compatible(watchdog, "fsl,pq1-wdt") ||
+ dt_is_compatible(watchdog, "fsl,pq2-wdt") ||
+ dt_is_compatible(watchdog, "fsl,pq2pro-wdt"))) {
+ n = getprop(watchdog, "virtual-reg", reg_virt,
+ sizeof(reg_virt));
+ if (n < (int)sizeof(reg_virt)) {
+ if (!dt_xlate_reg(watchdog, 0, &reg_phys, NULL))
+ return;
+ reg_virt[0] = (void *)reg_phys;
+ }
+ wdt = reg_virt[0];
+ }
+}
--
1.5.3.8


2008-01-18 00:39:17

by Stephen Rothwell

[permalink] [raw]
Subject: Re: [PATCH/RFCv2] [POWERPC] Add support for freescale watchdog to CPM serial driver.

On Thu, 17 Jan 2008 13:32:35 +0100 Jochen Friedrich <[email protected]> wrote:
>
> If a freescale watchdog device node is present, reset the watchdog
> while waiting for serial input.
>
> Signed-off-by: Jochen Friedrich <[email protected]>
> ---
> arch/powerpc/boot/Makefile | 2 +-
> arch/powerpc/boot/cpm-serial.c | 6 ++++
> arch/powerpc/boot/cuboot-8xx.c | 1 +
> arch/powerpc/boot/ops.h | 2 +
> arch/powerpc/boot/watchdog.c | 65 ++++++++++++++++++++++++++++++++++++++++

I am just wondering if maybe that file name is to generic.

--
Cheers,
Stephen Rothwell [email protected]
http://www.canb.auug.org.au/~sfr/


Attachments:
(No filename) (665.00 B)
(No filename) (189.00 B)
Download all attachments

2008-01-18 17:05:24

by Scott Wood

[permalink] [raw]
Subject: Re: [PATCH/RFCv2] [POWERPC] Add support for freescale watchdog to CPM serial driver.

Jochen Friedrich wrote:
> +void watchdog_poke(void)
> +{
> + if (wdt) {
> + out_be16(&wdt->swsrr, 0x556c);
> + out_be16(&wdt->swsrr, 0xaa39);
> + }
> +}

This should be a function pointer, to allow for other watchdog types.

-Scott

2008-01-18 17:32:12

by Jochen Friedrich

[permalink] [raw]
Subject: Re: [PATCH/RFCv2] [POWERPC] Add support for freescale watchdog to CPM serial driver.

Scott Wood schrieb:

>> +void watchdog_poke(void)
>> +{
>> + if (wdt) {
>> + out_be16(&wdt->swsrr, 0x556c);
>> + out_be16(&wdt->swsrr, 0xaa39);
>> + }
>> +}
>
> This should be a function pointer, to allow for other watchdog types.

Thanks for the comments. Stephen Rothwell also asked if the filename watchdog.c is too generic.
I think the pq watchdog is easy enough to keep it in the generic watchdog.c file, but the
function pointer definitely is the way to go. I'll resubmit.

Thanks,
Jochen

2008-01-18 18:43:48

by Alan

[permalink] [raw]
Subject: Re: [PATCH/RFCv2] [POWERPC] Add support for freescale watchdog to CPM serial driver.

On Thu, 17 Jan 2008 13:32:35 +0100
Jochen Friedrich <[email protected]> wrote:

> If a freescale watchdog device node is present, reset the watchdog
> while waiting for serial input.

Why ? We normally rely on user space for watchdog management as only the
fact user space is behaving really proves a box is happy ?

Alan

2008-01-18 18:46:50

by Jochen Friedrich

[permalink] [raw]
Subject: Re: [PATCH/RFCv2] [POWERPC] Add support for freescale watchdog to CPM serial driver.

Hi Alan,

>> If a freescale watchdog device node is present, reset the watchdog
>> while waiting for serial input.
>
> Why ? We normally rely on user space for watchdog management as only the
> fact user space is behaving really proves a box is happy ?

This is in the boot wrapper code, not in the linux kernel.

Thanks,
Jochen

2008-01-18 20:44:51

by Alan

[permalink] [raw]
Subject: Re: [PATCH/RFCv2] [POWERPC] Add support for freescale watchdog to CPM serial driver.

On Fri, 18 Jan 2008 19:47:43 +0100
Jochen Friedrich <[email protected]> wrote:

> Hi Alan,
>
> >> If a freescale watchdog device node is present, reset the watchdog
> >> while waiting for serial input.
> >
> > Why ? We normally rely on user space for watchdog management as only the
> > fact user space is behaving really proves a box is happy ?
>
> This is in the boot wrapper code, not in the linux kernel.

Ok now that makes sense, thanks

2008-01-18 21:52:16

by Kumar Gala

[permalink] [raw]
Subject: Re: [PATCH/RFCv2] [POWERPC] Add support for freescale watchdog to CPM serial driver.


On Jan 18, 2008, at 2:40 PM, Alan Cox wrote:

> On Fri, 18 Jan 2008 19:47:43 +0100
> Jochen Friedrich <[email protected]> wrote:
>
>> Hi Alan,
>>
>>>> If a freescale watchdog device node is present, reset the watchdog
>>>> while waiting for serial input.
>>>
>>> Why ? We normally rely on user space for watchdog management as
>>> only the
>>> fact user space is behaving really proves a box is happy ?
>>
>> This is in the boot wrapper code, not in the linux kernel.
>
> Ok now that makes sense, thanks

So I'll ask, what serial input are you waiting for from the boot
wrapper?

- k

2008-01-18 21:54:49

by Scott Wood

[permalink] [raw]
Subject: Re: [PATCH/RFCv2] [POWERPC] Add support for freescale watchdog to CPM serial driver.

Kumar Gala wrote:
> So I'll ask, what serial input are you waiting for from the boot wrapper?

The bootwrapper has a command line editing prompt. It's fairly
gratuitous in the presence of semi-decent firmware, but it's there
nonetheless.

-Scott

2008-01-18 21:56:18

by Jochen Friedrich

[permalink] [raw]
Subject: Re: [PATCH/RFCv2] [POWERPC] Add support for freescale watchdog to CPM serial driver.

Hi Kumar,

>> Ok now that makes sense, thanks
>
> So I'll ask, what serial input are you waiting for from the boot wrapper?

It's the editor for the kernel command line.

Thanks,
Jochen

2008-01-18 22:09:25

by Kumar Gala

[permalink] [raw]
Subject: Re: [PATCH/RFCv2] [POWERPC] Add support for freescale watchdog to CPM serial driver.


On Jan 18, 2008, at 3:56 PM, Jochen Friedrich wrote:

> Hi Kumar,
>
>>> Ok now that makes sense, thanks
>> So I'll ask, what serial input are you waiting for from the boot
>> wrapper?
>
> It's the editor for the kernel command line.

thanks, learn something everyday.

- k