Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* |
Steven J. Hill | b72d9a4 | 2013-06-13 19:55:06 +0000 | [diff] [blame] | 2 | * This file is subject to the terms and conditions of the GNU General Public |
| 3 | * License. See the file "COPYING" in the main directory of this archive |
| 4 | * for more details. |
| 5 | * |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 6 | * Carsten Langgaard, carstenl@mips.com |
| 7 | * Copyright (C) 1999,2000 MIPS Technologies, Inc. All rights reserved. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 8 | */ |
Steven J. Hill | b72d9a4 | 2013-06-13 19:55:06 +0000 | [diff] [blame] | 9 | #include <linux/io.h> |
Ralf Baechle | fcdb27a | 2006-01-18 17:37:07 +0000 | [diff] [blame] | 10 | #include <linux/pm.h> |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 11 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 12 | #include <asm/reboot.h> |
Steven J. Hill | 36a29af | 2013-06-13 19:55:05 +0000 | [diff] [blame] | 13 | |
| 14 | #define SOFTRES_REG 0x1f000500 |
| 15 | #define GORESET 0x42 |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 16 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 17 | static void mips_machine_restart(char *command) |
| 18 | { |
Dmitri Vorobiev | 84c21e2 | 2008-01-08 06:44:00 +0300 | [diff] [blame] | 19 | unsigned int __iomem *softres_reg = |
| 20 | ioremap(SOFTRES_REG, sizeof(unsigned int)); |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 21 | |
Dmitri Vorobiev | 84c21e2 | 2008-01-08 06:44:00 +0300 | [diff] [blame] | 22 | __raw_writel(GORESET, softres_reg); |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 23 | } |
| 24 | |
| 25 | static void mips_machine_halt(void) |
| 26 | { |
Dmitri Vorobiev | 84c21e2 | 2008-01-08 06:44:00 +0300 | [diff] [blame] | 27 | unsigned int __iomem *softres_reg = |
| 28 | ioremap(SOFTRES_REG, sizeof(unsigned int)); |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 29 | |
Dmitri Vorobiev | 84c21e2 | 2008-01-08 06:44:00 +0300 | [diff] [blame] | 30 | __raw_writel(GORESET, softres_reg); |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 31 | } |
| 32 | |
Ralf Baechle | 1f320d0 | 2009-09-15 14:50:39 +0200 | [diff] [blame] | 33 | static int __init mips_reboot_setup(void) |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 34 | { |
| 35 | _machine_restart = mips_machine_restart; |
| 36 | _machine_halt = mips_machine_halt; |
Ralf Baechle | fcdb27a | 2006-01-18 17:37:07 +0000 | [diff] [blame] | 37 | pm_power_off = mips_machine_halt; |
Ralf Baechle | 1f320d0 | 2009-09-15 14:50:39 +0200 | [diff] [blame] | 38 | |
| 39 | return 0; |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 40 | } |
Ralf Baechle | 1f320d0 | 2009-09-15 14:50:39 +0200 | [diff] [blame] | 41 | arch_initcall(mips_reboot_setup); |