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