1/* 2 * reset.c -- common ColdFire SoC reset support 3 * 4 * (C) Copyright 2012, Greg Ungerer <gerg@uclinux.org> 5 * 6 * This file is subject to the terms and conditions of the GNU General Public 7 * License. See the file COPYING in the main directory of this archive 8 * for more details. 9 */ 10 11#include <linux/kernel.h> 12#include <linux/init.h> 13#include <linux/io.h> 14#include <asm/machdep.h> 15#include <asm/coldfire.h> 16#include <asm/mcfsim.h> 17 18/* 19 * There are 2 common methods amongst the ColdFure parts for reseting 20 * the CPU. But there are couple of exceptions, the 5272 and the 547x 21 * have something completely special to them, and we let their specific 22 * subarch code handle them. 23 */ 24 25#ifdef MCFSIM_SYPCR 26static void mcf_cpu_reset(void) 27{ 28 local_irq_disable(); 29 /* Set watchdog to soft reset, and enabled */ 30 __raw_writeb(0xc0, MCFSIM_SYPCR); 31 for (;;) 32 /* wait for watchdog to timeout */; 33} 34#endif 35 36#ifdef MCF_RCR 37static void mcf_cpu_reset(void) 38{ 39 local_irq_disable(); 40 __raw_writeb(MCF_RCR_SWRESET, MCF_RCR); 41} 42#endif 43 44static int __init mcf_setup_reset(void) 45{ 46 mach_reset = mcf_cpu_reset; 47 return 0; 48} 49 50arch_initcall(mcf_setup_reset); 51