Only build-tested.

Signed-off-by: Anton Vorontsov <[EMAIL PROTECTED]>
---

On Tue, May 13, 2008 at 09:50:26AM -0500, Kumar Gala wrote:
>
> On May 13, 2008, at 9:14 AM, Anton Vorontsov wrote:
>
>> Hi all,
>>
>> Thanks for the review, here is the new version.
>>
>> Changes since v1:
>>
>> - Scott Wood asked for mpc83xx_wdt on multiplatform kernels. Done via
>>  OF platform driver;
>> - Kumar Gala asked for mpc83xx_wdt -> mpc8xxx_wdt rename. Done in two
>>  steps;
>> - Segher Boessenkool noticed a negligence in the wdt device tree node.
>>  Fixed by removing mpc83xx_wdt compatible entry.
>
> any possibility of making this work on 8xx per Jochen's comment?  (see  
> mpc8xx_wdt.c)

[ Oops. Jochen, sorry I forgot to Cc you this time. ]

I think it should work with the patch inlined here, and this node
in the device tree.

[EMAIL PROTECTED] {
        ....
        [EMAIL PROTECTED] {
                device_type = "watchdog";
                compatible = "fsl,mpc885-wdt";
                reg = <0 0x100>;
        };
        ....
};

Not tested though. And also no support for RTC-driven timer tweak
(anybody willing are welcomed to implement this ;-).

 drivers/watchdog/Kconfig       |    2 +-
 drivers/watchdog/mpc8xxx_wdt.c |   31 +++++++++++++++++++++++++++----
 2 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index bd9044f..06b1119 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -684,7 +684,7 @@ config 8xx_WDT
 
 config 8xxx_WDT
        tristate "MPC8xxx Watchdog Timer"
-       depends on PPC_83xx || PPC_86xx
+       depends on FSL_SOC
 
 config MV64X60_WDT
        tristate "MV64X60 (Marvell Discovery) Watchdog Timer"
diff --git a/drivers/watchdog/mpc8xxx_wdt.c b/drivers/watchdog/mpc8xxx_wdt.c
index b582441..a93b512 100644
--- a/drivers/watchdog/mpc8xxx_wdt.c
+++ b/drivers/watchdog/mpc8xxx_wdt.c
@@ -42,6 +42,11 @@ struct mpc8xxx_wdt {
        u8 res2[0xF0];
 };
 
+struct mpc8xxx_wdt_type {
+       int prescaler;
+       bool hw_enabled;
+};
+
 static struct mpc8xxx_wdt __iomem *wd_base;
 
 static u16 timeout = 0xffff;
@@ -182,6 +187,7 @@ static int __devinit mpc8xxx_wdt_probe(struct of_device 
*ofdev,
 {
        int ret;
        struct device_node *np = ofdev->node;
+       struct mpc8xxx_wdt_type *wdt_type = match->data;
        u32 freq = fsl_get_sys_freq();
        bool enabled;
 
@@ -193,7 +199,7 @@ static int __devinit mpc8xxx_wdt_probe(struct of_device 
*ofdev,
                return -ENOMEM;
 
        enabled = in_be32(&wd_base->swcrr) & SWCRR_SWEN;
-       if (!enabled && of_device_is_compatible(np, "fsl,mpc8610-wdt")) {
+       if (!enabled && wdt_type->hw_enabled) {
                pr_info("mpc8xxx_wdt: could not be enabled in software\n");
                ret = -ENOSYS;
                goto err_unmap;
@@ -208,7 +214,7 @@ static int __devinit mpc8xxx_wdt_probe(struct of_device 
*ofdev,
 
        /* Calculate the timeout in seconds */
        if (prescale)
-               timeout_sec = (timeout * 0x10000) / freq;
+               timeout_sec = (timeout * wdt_type->prescaler) / freq;
        else
                timeout_sec = timeout / freq;
 
@@ -240,8 +246,25 @@ static int __devexit mpc8xxx_wdt_remove(struct of_device 
*ofdev)
 }
 
 static const struct of_device_id mpc8xxx_wdt_match[] = {
-       { .compatible = "mpc83xx_wdt", },
-       { .compatible = "fsl,mpc8610-wdt", },
+       {
+               .compatible = "mpc83xx_wdt",
+               .data = &(struct mpc8xxx_wdt_type) {
+                       .prescaler = 0x10000,
+               },
+       },
+       {
+               .compatible = "fsl,mpc8610-wdt",
+               .data = &(struct mpc8xxx_wdt_type) {
+                       .prescaler = 0x10000,
+                       .hw_enabled = true,
+               },
+       },
+       {
+               .compatible = "fsl,mpc885-wdt",
+               .data = &(struct mpc8xxx_wdt_type) {
+                       .prescaler = 0x800,
+               },
+       },
        {},
 };
 MODULE_DEVICE_TABLE(of, mpc8xxx_wdt_match);
-- 
1.5.5.1

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to