linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Anton Vorontsov <avorontsov@ru.mvista.com>
To: Jochen Friedrich <jochen@scram.de>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>,
	linuxppc-dev@ozlabs.org, Wim Van Sebroeck <wim@iguana.be>,
	Chen Gong <G.Chen@freescale.com>,
	Scott Wood <scottwood@freescale.com>,
	Timur Tabi <timur@freescale.com>
Subject: Re: [PATCH 6/8] [WATCHDOG] mpc8xxx_wdt: add support for MPC8xx watchdogs
Date: Fri, 16 May 2008 15:46:27 +0400	[thread overview]
Message-ID: <20080516114627.GA29928@polina.dev.rtsoft.ru> (raw)
In-Reply-To: <482D5129.6050402@scram.de>

On Fri, May 16, 2008 at 11:17:29AM +0200, Jochen Friedrich wrote:
> Hi Anton,
> 
> > The mpc8xxx_wdt driver is using two registers: SWSRR to push magic
> > numbers, and SWCRR to control the watchdog. Both registers are available
> > on the MPC8xx, and seem to have the same offsets and semantics as in
> > MPC83xx/MPC86xx watchdogs. The only difference is prescale value. So this
> > driver should simply work on the MPC8xx CPUs.
> > 
> > MPC823 seem to be the first CPU in MPC8xx line, so we use fsl,mpc823-wdt
> > compatible matching.
> > 
> > Though, this patch was only build-tested and okay to drop from this
> > series until tested or corrected to work on the actual hardware.
> > 
> > Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
> 
> Tested-by: Jochen Friedrich <jochen@scram.de>

Thanks!

> The driver works OK on MPC823.
> 
> One nit however ist the late initialisation of the wdt timer. I had to add
> two hardcoded wdt resets in the board setup, one in setup_arch and one in
> arch_initcall, to prevent a reset until mpc8xxx_wdt kicks in. However, IMHO
> this is acceptable as it only hits the 8xx series with the small prescale.

Hm... This is strange because subsys initcalls should be called quite
early... what type of initcall you're using in the board file to probe the
OF bus? I guess this was machine_device_initcall, can you try the
machine_subsys_initcall(), i.e. the same as we use in the driver?

If this still doesn't not work... You can try the patch attached here,
and try using machine_arch_initcall to do of_platform_bus_probe().
This way wdt should be called even earlier...

Also, if u-boot enables the watchdog, it should support the keepalive
too, because it might spend precious time not pinging the wdt...

diff --git a/drivers/watchdog/mpc8xxx_wdt.c b/drivers/watchdog/mpc8xxx_wdt.c
index c7e28f0..0f7e165 100644
--- a/drivers/watchdog/mpc8xxx_wdt.c
+++ b/drivers/watchdog/mpc8xxx_wdt.c
@@ -207,13 +207,6 @@ static int __devinit mpc8xxx_wdt_probe(struct of_device *ofdev,
 		goto err_unmap;
 	}
 
-	ret = misc_register(&mpc8xxx_wdt_miscdev);
-	if (ret) {
-		pr_err("cannot register miscdev on minor=%d (err=%d)\n",
-			WATCHDOG_MINOR, ret);
-		goto err_unmap;
-	}
-
 	/* Calculate the timeout in seconds */
 	if (prescale)
 		timeout_sec = (timeout * wdt_type->prescaler) / freq;
@@ -234,6 +227,7 @@ static int __devinit mpc8xxx_wdt_probe(struct of_device *ofdev,
 	return 0;
 err_unmap:
 	iounmap(wd_base);
+	wd_base = NULL;
 	return ret;
 }
 
@@ -281,17 +275,38 @@ static struct of_platform_driver mpc8xxx_wdt_driver = {
 	},
 };
 
+/*
+ * We do wdt initialization in two steps: arch_initcall probes the wdt
+ * very early to start pinging the watchdog (misc devices are not yet
+ * available), and later module_init() just registers the misc device.
+ */
+static int __init mpc8xxx_wdt_init_late(void)
+{
+	int ret;
+
+	if (!wd_base)
+		return -ENODEV;
+
+	ret = misc_register(&mpc8xxx_wdt_miscdev);
+	if (ret) {
+		pr_err("cannot register miscdev on minor=%d (err=%d)\n",
+			WATCHDOG_MINOR, ret);
+		return ret;
+	}
+	return 0;
+}
+module_init(mpc8xxx_wdt_init_late);
+
 static int __init mpc8xxx_wdt_init(void)
 {
 	return of_register_platform_driver(&mpc8xxx_wdt_driver);
 }
+arch_initcall(mpc8xxx_wdt_init);
 
 static void __exit mpc8xxx_wdt_exit(void)
 {
 	of_unregister_platform_driver(&mpc8xxx_wdt_driver);
 }
-
-subsys_initcall(mpc8xxx_wdt_init);
 module_exit(mpc8xxx_wdt_exit);
 
 MODULE_AUTHOR("Dave Updegraff, Kumar Gala");

  reply	other threads:[~2008-05-16 11:46 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-05-15 16:52 [PATCH 0/8 v3] mpc83xx_wdt rework, support for mpc8610 and mpc8xx Anton Vorontsov
2008-05-15 16:53 ` [PATCH 1/8] [WATCHDOG] mpc83xx_wdt: fix checkpatch issues Anton Vorontsov
2008-05-15 16:53 ` [PATCH 2/8] [WATCHDOG] mpc83xx_wdt: convert to the OF platform driver Anton Vorontsov
2008-05-16  4:20   ` Stephen Rothwell
2008-05-15 16:53 ` [PATCH 3/8] [WATCHDOG] mpc83xx_wdt: add support for MPC86xx CPUs Anton Vorontsov
2008-05-15 16:53 ` [PATCH 4/8] [WATCHDOG] mpc83xx_wdt: rename to mpc8xxx_wdt Anton Vorontsov
2008-05-15 16:53 ` [PATCH 5/8] [WATCHDOG] mpc8xxx_wdt: various renames, mostly s/mpc83xx/mpc8xxx/g Anton Vorontsov
2008-05-15 16:54 ` [PATCH 6/8] [WATCHDOG] mpc8xxx_wdt: add support for MPC8xx watchdogs Anton Vorontsov
2008-05-16  9:17   ` Jochen Friedrich
2008-05-16 11:46     ` Anton Vorontsov [this message]
2008-05-15 16:54 ` [PATCH 7/8] [POWERPC] fsl_soc: remove mpc83xx_wdt code Anton Vorontsov
2008-05-15 16:54 ` [PATCH 8/8] [POWERPC] 86xx: mpc8610_hpcd: add watchdog node Anton Vorontsov
2008-05-15 21:21 ` [PATCH 0/8 v3] mpc83xx_wdt rework, support for mpc8610 and mpc8xx Jochen Friedrich
  -- strict thread matches above, loose matches on Subject: below --
2008-05-19 18:37 [PATCH 0/8 v4] " Anton Vorontsov
2008-05-19 18:37 ` [PATCH 6/8] [WATCHDOG] mpc8xxx_wdt: add support for MPC8xx watchdogs Anton Vorontsov
2008-06-02 17:37 [PATCH 0/8 v4] mpc83xx_wdt rework, support for mpc8610 and mpc8xx Anton Vorontsov
2008-06-02 17:38 ` [PATCH 6/8] [WATCHDOG] mpc8xxx_wdt: add support for MPC8xx watchdogs Anton Vorontsov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080516114627.GA29928@polina.dev.rtsoft.ru \
    --to=avorontsov@ru.mvista.com \
    --cc=G.Chen@freescale.com \
    --cc=jochen@scram.de \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=scottwood@freescale.com \
    --cc=sfr@canb.auug.org.au \
    --cc=timur@freescale.com \
    --cc=wim@iguana.be \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).