162306a36Sopenharmony_ci/* 262306a36Sopenharmony_ci * reset.c -- common ColdFire SoC reset support 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * (C) Copyright 2012, Greg Ungerer <gerg@uclinux.org> 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public 762306a36Sopenharmony_ci * License. See the file COPYING in the main directory of this archive 862306a36Sopenharmony_ci * for more details. 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <linux/kernel.h> 1262306a36Sopenharmony_ci#include <linux/init.h> 1362306a36Sopenharmony_ci#include <linux/io.h> 1462306a36Sopenharmony_ci#include <asm/machdep.h> 1562306a36Sopenharmony_ci#include <asm/coldfire.h> 1662306a36Sopenharmony_ci#include <asm/mcfsim.h> 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci/* 1962306a36Sopenharmony_ci * There are 2 common methods amongst the ColdFure parts for reseting 2062306a36Sopenharmony_ci * the CPU. But there are couple of exceptions, the 5272 and the 547x 2162306a36Sopenharmony_ci * have something completely special to them, and we let their specific 2262306a36Sopenharmony_ci * subarch code handle them. 2362306a36Sopenharmony_ci */ 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci#ifdef MCFSIM_SYPCR 2662306a36Sopenharmony_cistatic void mcf_cpu_reset(void) 2762306a36Sopenharmony_ci{ 2862306a36Sopenharmony_ci local_irq_disable(); 2962306a36Sopenharmony_ci /* Set watchdog to soft reset, and enabled */ 3062306a36Sopenharmony_ci __raw_writeb(0xc0, MCFSIM_SYPCR); 3162306a36Sopenharmony_ci for (;;) 3262306a36Sopenharmony_ci /* wait for watchdog to timeout */; 3362306a36Sopenharmony_ci} 3462306a36Sopenharmony_ci#endif 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci#ifdef MCF_RCR 3762306a36Sopenharmony_cistatic void mcf_cpu_reset(void) 3862306a36Sopenharmony_ci{ 3962306a36Sopenharmony_ci local_irq_disable(); 4062306a36Sopenharmony_ci __raw_writeb(MCF_RCR_SWRESET, MCF_RCR); 4162306a36Sopenharmony_ci} 4262306a36Sopenharmony_ci#endif 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_cistatic int __init mcf_setup_reset(void) 4562306a36Sopenharmony_ci{ 4662306a36Sopenharmony_ci mach_reset = mcf_cpu_reset; 4762306a36Sopenharmony_ci return 0; 4862306a36Sopenharmony_ci} 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ciarch_initcall(mcf_setup_reset); 51