|
@@ -14,12 +14,7 @@
|
|
|
|
|
|
#include <loongson1.h>
|
|
#include <loongson1.h>
|
|
|
|
|
|
-static void ls1x_restart(char *command)
|
|
|
|
-{
|
|
|
|
- __raw_writel(0x1, LS1X_WDT_EN);
|
|
|
|
- __raw_writel(0x5000000, LS1X_WDT_TIMER);
|
|
|
|
- __raw_writel(0x1, LS1X_WDT_SET);
|
|
|
|
-}
|
|
|
|
|
|
+static void __iomem *wdt_base;
|
|
|
|
|
|
static void ls1x_halt(void)
|
|
static void ls1x_halt(void)
|
|
{
|
|
{
|
|
@@ -29,6 +24,15 @@ static void ls1x_halt(void)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void ls1x_restart(char *command)
|
|
|
|
+{
|
|
|
|
+ __raw_writel(0x1, wdt_base + WDT_EN);
|
|
|
|
+ __raw_writel(0x1, wdt_base + WDT_TIMER);
|
|
|
|
+ __raw_writel(0x1, wdt_base + WDT_SET);
|
|
|
|
+
|
|
|
|
+ ls1x_halt();
|
|
|
|
+}
|
|
|
|
+
|
|
static void ls1x_power_off(void)
|
|
static void ls1x_power_off(void)
|
|
{
|
|
{
|
|
ls1x_halt();
|
|
ls1x_halt();
|
|
@@ -36,6 +40,10 @@ static void ls1x_power_off(void)
|
|
|
|
|
|
static int __init ls1x_reboot_setup(void)
|
|
static int __init ls1x_reboot_setup(void)
|
|
{
|
|
{
|
|
|
|
+ wdt_base = ioremap_nocache(LS1X_WDT_BASE, 0x0f);
|
|
|
|
+ if (!wdt_base)
|
|
|
|
+ panic("Failed to remap watchdog registers");
|
|
|
|
+
|
|
_machine_restart = ls1x_restart;
|
|
_machine_restart = ls1x_restart;
|
|
_machine_halt = ls1x_halt;
|
|
_machine_halt = ls1x_halt;
|
|
pm_power_off = ls1x_power_off;
|
|
pm_power_off = ls1x_power_off;
|