1*d2912cb1SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only 2c06e836aSJohn Crispin /* 3c06e836aSJohn Crispin * 4c06e836aSJohn Crispin * Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org> 5c06e836aSJohn Crispin * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> 697b92108SJohn Crispin * Copyright (C) 2013 John Crispin <john@phrozen.org> 7c06e836aSJohn Crispin */ 8c06e836aSJohn Crispin 9c06e836aSJohn Crispin #include <linux/pm.h> 10c06e836aSJohn Crispin #include <linux/io.h> 112a153f1cSJohn Crispin #include <linux/of.h> 121a935205SJohn Crispin #include <linux/delay.h> 13c06e836aSJohn Crispin 14c06e836aSJohn Crispin #include <asm/reboot.h> 15c06e836aSJohn Crispin 16c06e836aSJohn Crispin #include <asm/mach-ralink/ralink_regs.h> 17c06e836aSJohn Crispin 18c06e836aSJohn Crispin /* Reset Control */ 19c06e836aSJohn Crispin #define SYSC_REG_RESET_CTRL 0x034 201a935205SJohn Crispin 211a935205SJohn Crispin #define RSTCTL_RESET_PCI BIT(26) 22c06e836aSJohn Crispin #define RSTCTL_RESET_SYSTEM BIT(0) 23c06e836aSJohn Crispin ralink_restart(char * command)24c06e836aSJohn Crispinstatic void ralink_restart(char *command) 25c06e836aSJohn Crispin { 261a935205SJohn Crispin if (IS_ENABLED(CONFIG_PCI)) { 271a935205SJohn Crispin rt_sysc_m32(0, RSTCTL_RESET_PCI, SYSC_REG_RESET_CTRL); 281a935205SJohn Crispin mdelay(50); 291a935205SJohn Crispin } 301a935205SJohn Crispin 31c06e836aSJohn Crispin local_irq_disable(); 32c06e836aSJohn Crispin rt_sysc_w32(RSTCTL_RESET_SYSTEM, SYSC_REG_RESET_CTRL); 33c06e836aSJohn Crispin unreachable(); 34c06e836aSJohn Crispin } 35c06e836aSJohn Crispin mips_reboot_setup(void)36c06e836aSJohn Crispinstatic int __init mips_reboot_setup(void) 37c06e836aSJohn Crispin { 38c06e836aSJohn Crispin _machine_restart = ralink_restart; 39c06e836aSJohn Crispin 40c06e836aSJohn Crispin return 0; 41c06e836aSJohn Crispin } 42c06e836aSJohn Crispin 43c06e836aSJohn Crispin arch_initcall(mips_reboot_setup); 44