diff options
| author | Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> | 2010-06-16 16:55:26 +0900 | 
|---|---|---|
| committer | Nobuhiro Iwamatsu <iwamatsu@nigauri.org> | 2010-06-28 11:58:34 +0900 | 
| commit | 754613f740368f847a2261c5c41b034ff5c51b1c (patch) | |
| tree | fb25150557d11066e81f8a8b2147c829a359293c | |
| parent | 9a1e3e9fe3165130c228bc861bd96d49df708290 (diff) | |
| download | olio-uboot-2014.01-754613f740368f847a2261c5c41b034ff5c51b1c.tar.xz olio-uboot-2014.01-754613f740368f847a2261c5c41b034ff5c51b1c.zip | |
sh: Add trigger_address_error and support cpu reset
This add support cpu reset by trigger_address_error function.
Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
| -rw-r--r-- | arch/sh/cpu/sh2/watchdog.c | 8 | ||||
| -rw-r--r-- | arch/sh/cpu/sh3/watchdog.c | 7 | ||||
| -rw-r--r-- | arch/sh/cpu/sh4/watchdog.c | 4 | ||||
| -rw-r--r-- | arch/sh/include/asm/system.h | 10 | 
4 files changed, 27 insertions, 2 deletions
| diff --git a/arch/sh/cpu/sh2/watchdog.c b/arch/sh/cpu/sh2/watchdog.c index de0254b44..0257d8d15 100644 --- a/arch/sh/cpu/sh2/watchdog.c +++ b/arch/sh/cpu/sh2/watchdog.c @@ -1,6 +1,6 @@  /* - * Copyright (C) 2008 Nobuhiro Iwamatsu <iwamatsu.nobuhoro@renesas.com> - * Copyright (C) 2008 Renesas Solutions Corp. + * Copyright (C) 2008,2010 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> + * Copyright (C) 2008,2010 Renesas Solutions Corp.   *   * This program is free software; you can redistribute it and/or   * modify it under the terms of the GNU General Public License as @@ -20,6 +20,7 @@  #include <common.h>  #include <asm/processor.h> +#include <asm/system.h>  int watchdog_init(void)  { @@ -28,6 +29,9 @@ int watchdog_init(void)  void reset_cpu(unsigned long ignored)  { +	/* Address error with SR.BL=1 first. */ +	trigger_address_error(); +  	while (1)  		;  } diff --git a/arch/sh/cpu/sh3/watchdog.c b/arch/sh/cpu/sh3/watchdog.c index 92bea7471..90694f866 100644 --- a/arch/sh/cpu/sh3/watchdog.c +++ b/arch/sh/cpu/sh3/watchdog.c @@ -1,4 +1,7 @@  /* + * (C) Copyright 2010 + * Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> + *   * (C) Copyright 2007   * Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com>   * @@ -20,6 +23,7 @@  #include <common.h>  #include <asm/processor.h> +#include <asm/system.h>  int watchdog_init(void)  { @@ -28,6 +32,9 @@ int watchdog_init(void)  void reset_cpu(unsigned long ignored)  { +	/* Address error with SR.BL=1 first. */ +	trigger_address_error(); +  	while (1)  		;  } diff --git a/arch/sh/cpu/sh4/watchdog.c b/arch/sh/cpu/sh4/watchdog.c index f6924290f..d7e1703e6 100644 --- a/arch/sh/cpu/sh4/watchdog.c +++ b/arch/sh/cpu/sh4/watchdog.c @@ -17,6 +17,7 @@  #include <common.h>  #include <asm/processor.h> +#include <asm/system.h>  #include <asm/io.h>  #define WDT_BASE	WTCNT @@ -66,6 +67,9 @@ int watchdog_disable(void)  void reset_cpu(unsigned long ignored)  { +	/* Address error with SR.BL=1 first. */ +	trigger_address_error(); +  	while (1)  		;  } diff --git a/arch/sh/include/asm/system.h b/arch/sh/include/asm/system.h index 90a53a0dc..56fd77ace 100644 --- a/arch/sh/include/asm/system.h +++ b/arch/sh/include/asm/system.h @@ -272,4 +272,14 @@ void enable_hlt(void);  #define arch_align_stack(x) (x) +static inline void trigger_address_error(void) +{ +	__asm__ __volatile__ ( +		"ldc %0, sr\n\t" +		"mov.l @%1, %0" +		: +		: "r" (0x10000000), "r" (0x80000001) +	); +} +  #endif |