162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org> 562306a36Sopenharmony_ci * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> 662306a36Sopenharmony_ci * Copyright (C) 2013 John Crispin <john@phrozen.org> 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include <linux/pm.h> 1062306a36Sopenharmony_ci#include <linux/io.h> 1162306a36Sopenharmony_ci#include <linux/of.h> 1262306a36Sopenharmony_ci#include <linux/delay.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#include <asm/reboot.h> 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#include <asm/mach-ralink/ralink_regs.h> 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci/* Reset Control */ 1962306a36Sopenharmony_ci#define SYSC_REG_RESET_CTRL 0x034 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci#define RSTCTL_RESET_PCI BIT(26) 2262306a36Sopenharmony_ci#define RSTCTL_RESET_SYSTEM BIT(0) 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_cistatic void ralink_restart(char *command) 2562306a36Sopenharmony_ci{ 2662306a36Sopenharmony_ci if (IS_ENABLED(CONFIG_PCI)) { 2762306a36Sopenharmony_ci rt_sysc_m32(0, RSTCTL_RESET_PCI, SYSC_REG_RESET_CTRL); 2862306a36Sopenharmony_ci mdelay(50); 2962306a36Sopenharmony_ci } 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci local_irq_disable(); 3262306a36Sopenharmony_ci rt_sysc_w32(RSTCTL_RESET_SYSTEM, SYSC_REG_RESET_CTRL); 3362306a36Sopenharmony_ci unreachable(); 3462306a36Sopenharmony_ci} 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_cistatic int __init mips_reboot_setup(void) 3762306a36Sopenharmony_ci{ 3862306a36Sopenharmony_ci _machine_restart = ralink_restart; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci return 0; 4162306a36Sopenharmony_ci} 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ciarch_initcall(mips_reboot_setup); 44