diff options
author | Kelvin Cheung <keguang.zhang@gmail.com> | 2014-10-09 23:39:59 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2014-11-24 01:45:09 -0500 |
commit | a13f0795752389f84bc31b9171cb79ad6759e4db (patch) | |
tree | 3bfb346e0e22c9b4b64d4504342d496282266ef1 /arch/mips/loongson1 | |
parent | 0dc294c05d9df09ca4a65071e370247eaab8638d (diff) |
MIPS: Loongson1B: Fix reboot problem on LS1B
- Correct the header file of watchdog registers
- Use ioremap_nocache() to access watchdog registers instead
Signed-off-by: Kelvin Cheung <keguang.zhang@gmail.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/8022/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/loongson1')
-rw-r--r-- | arch/mips/loongson1/common/reset.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/arch/mips/loongson1/common/reset.c b/arch/mips/loongson1/common/reset.c index 547f34b69e4c..c41e4ca56ab4 100644 --- a/arch/mips/loongson1/common/reset.c +++ b/arch/mips/loongson1/common/reset.c | |||
@@ -14,12 +14,7 @@ | |||
14 | 14 | ||
15 | #include <loongson1.h> | 15 | #include <loongson1.h> |
16 | 16 | ||
17 | static void ls1x_restart(char *command) | 17 | static void __iomem *wdt_base; |
18 | { | ||
19 | __raw_writel(0x1, LS1X_WDT_EN); | ||
20 | __raw_writel(0x5000000, LS1X_WDT_TIMER); | ||
21 | __raw_writel(0x1, LS1X_WDT_SET); | ||
22 | } | ||
23 | 18 | ||
24 | static void ls1x_halt(void) | 19 | static void ls1x_halt(void) |
25 | { | 20 | { |
@@ -29,6 +24,15 @@ static void ls1x_halt(void) | |||
29 | } | 24 | } |
30 | } | 25 | } |
31 | 26 | ||
27 | static void ls1x_restart(char *command) | ||
28 | { | ||
29 | __raw_writel(0x1, wdt_base + WDT_EN); | ||
30 | __raw_writel(0x1, wdt_base + WDT_TIMER); | ||
31 | __raw_writel(0x1, wdt_base + WDT_SET); | ||
32 | |||
33 | ls1x_halt(); | ||
34 | } | ||
35 | |||
32 | static void ls1x_power_off(void) | 36 | static void ls1x_power_off(void) |
33 | { | 37 | { |
34 | ls1x_halt(); | 38 | ls1x_halt(); |
@@ -36,6 +40,10 @@ static void ls1x_power_off(void) | |||
36 | 40 | ||
37 | static int __init ls1x_reboot_setup(void) | 41 | static int __init ls1x_reboot_setup(void) |
38 | { | 42 | { |
43 | wdt_base = ioremap_nocache(LS1X_WDT_BASE, 0x0f); | ||
44 | if (!wdt_base) | ||
45 | panic("Failed to remap watchdog registers"); | ||
46 | |||
39 | _machine_restart = ls1x_restart; | 47 | _machine_restart = ls1x_restart; |
40 | _machine_halt = ls1x_halt; | 48 | _machine_halt = ls1x_halt; |
41 | pm_power_off = ls1x_power_off; | 49 | pm_power_off = ls1x_power_off; |