arch_initcall(powerpc_debugfs_init);
 #endif
 
-#ifdef CONFIG_BOOKE_WDT
-extern u32 booke_wdt_enabled;
-extern u32 booke_wdt_period;
-
-/* Checks wdt=x and wdt_period=xx command-line option */
-notrace int __init early_parse_wdt(char *p)
-{
-       if (p && strncmp(p, "0", 1) != 0)
-               booke_wdt_enabled = 1;
-
-       return 0;
-}
-early_param("wdt", early_parse_wdt);
-
-int __init early_parse_wdt_period(char *p)
-{
-       unsigned long ret;
-       if (p) {
-               if (!kstrtol(p, 0, &ret))
-                       booke_wdt_period = ret;
-       }
-
-       return 0;
-}
-early_param("wdt_period", early_parse_wdt_period);
-#endif /* CONFIG_BOOKE_WDT */
-
 void ppc_printk_progress(char *s, unsigned short hex)
 {
        pr_info("%s\n", s);
 
 #define WDTP_MASK      (TCR_WP_MASK)
 #endif
 
+/* Checks wdt=x and wdt_period=xx command-line option */
+notrace int __init early_parse_wdt(char *p)
+{
+       if (p && strncmp(p, "0", 1) != 0)
+               booke_wdt_enabled = 1;
+
+       return 0;
+}
+early_param("wdt", early_parse_wdt);
+
+int __init early_parse_wdt_period(char *p)
+{
+       unsigned long ret;
+       if (p) {
+               if (!kstrtol(p, 0, &ret))
+                       booke_wdt_period = ret;
+       }
+
+       return 0;
+}
+early_param("wdt_period", early_parse_wdt_period);
+
 #ifdef CONFIG_PPC_FSL_BOOK3E
 
 /* For the specified period, determine the number of seconds
 static void __booke_wdt_set(void *data)
 {
        u32 val;
+       struct watchdog_device *wdog = data;
 
        val = mfspr(SPRN_TCR);
        val &= ~WDTP_MASK;
-       val |= WDTP(booke_wdt_period);
+       val |= WDTP(sec_to_period(wdog->timeout));
 
        mtspr(SPRN_TCR, val);
 }
 
-static void booke_wdt_set(void)
+static void booke_wdt_set(void *data)
 {
-       on_each_cpu(__booke_wdt_set, NULL, 0);
+       on_each_cpu(__booke_wdt_set, data, 0);
 }
 
 static void __booke_wdt_ping(void *data)
 static void __booke_wdt_enable(void *data)
 {
        u32 val;
+       struct watchdog_device *wdog = data;
 
        /* clear status before enabling watchdog */
        __booke_wdt_ping(NULL);
        val = mfspr(SPRN_TCR);
        val &= ~WDTP_MASK;
-       val |= (TCR_WIE|TCR_WRC(WRC_CHIP)|WDTP(booke_wdt_period));
+       val |= (TCR_WIE|TCR_WRC(WRC_CHIP)|WDTP(sec_to_period(wdog->timeout)));
 
        mtspr(SPRN_TCR, val);
 }
 
 }
 
-static void __booke_wdt_start(struct watchdog_device *wdog)
+static int booke_wdt_start(struct watchdog_device *wdog)
 {
-       on_each_cpu(__booke_wdt_enable, NULL, 0);
+       on_each_cpu(__booke_wdt_enable, wdog, 0);
        pr_debug("watchdog enabled (timeout = %u sec)\n", wdog->timeout);
-}
 
-static int booke_wdt_start(struct watchdog_device *wdog)
-{
-       if (booke_wdt_enabled == 0) {
-               booke_wdt_enabled = 1;
-               __booke_wdt_start(wdog);
-       }
        return 0;
 }
 
 static int booke_wdt_stop(struct watchdog_device *wdog)
 {
        on_each_cpu(__booke_wdt_disable, NULL, 0);
-       booke_wdt_enabled = 0;
        pr_debug("watchdog disabled\n");
 
        return 0;
 {
        if (timeout > MAX_WDT_TIMEOUT)
                return -EINVAL;
-       booke_wdt_period = sec_to_period(timeout);
        wdt_dev->timeout = timeout;
-       booke_wdt_set();
+       booke_wdt_set(wdt_dev);
 
        return 0;
 }
        pr_info("powerpc book-e watchdog driver loaded\n");
        booke_wdt_info.firmware_version = cur_cpu_spec->pvr_value;
        booke_wdt_set_timeout(&booke_wdt_dev,
-                             period_to_sec(CONFIG_BOOKE_WDT_DEFAULT_TIMEOUT));
+                             period_to_sec(booke_wdt_period));
        watchdog_set_nowayout(&booke_wdt_dev, nowayout);
        if (booke_wdt_enabled)
-               __booke_wdt_start(&booke_wdt_dev);
+               booke_wdt_start(&booke_wdt_dev);
 
        ret = watchdog_register_device(&booke_wdt_dev);