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>
This commit is contained in:
parent
9a1e3e9fe3
commit
754613f740
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2008 Nobuhiro Iwamatsu <iwamatsu.nobuhoro@renesas.com>
|
* Copyright (C) 2008,2010 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
|
||||||
* Copyright (C) 2008 Renesas Solutions Corp.
|
* Copyright (C) 2008,2010 Renesas Solutions Corp.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License as
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
|
#include <asm/system.h>
|
||||||
|
|
||||||
int watchdog_init(void)
|
int watchdog_init(void)
|
||||||
{
|
{
|
||||||
|
@ -28,6 +29,9 @@ int watchdog_init(void)
|
||||||
|
|
||||||
void reset_cpu(unsigned long ignored)
|
void reset_cpu(unsigned long ignored)
|
||||||
{
|
{
|
||||||
|
/* Address error with SR.BL=1 first. */
|
||||||
|
trigger_address_error();
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
/*
|
/*
|
||||||
|
* (C) Copyright 2010
|
||||||
|
* Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
|
||||||
|
*
|
||||||
* (C) Copyright 2007
|
* (C) Copyright 2007
|
||||||
* Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com>
|
* Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com>
|
||||||
*
|
*
|
||||||
|
@ -20,6 +23,7 @@
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
|
#include <asm/system.h>
|
||||||
|
|
||||||
int watchdog_init(void)
|
int watchdog_init(void)
|
||||||
{
|
{
|
||||||
|
@ -28,6 +32,9 @@ int watchdog_init(void)
|
||||||
|
|
||||||
void reset_cpu(unsigned long ignored)
|
void reset_cpu(unsigned long ignored)
|
||||||
{
|
{
|
||||||
|
/* Address error with SR.BL=1 first. */
|
||||||
|
trigger_address_error();
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
|
#include <asm/system.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
|
||||||
#define WDT_BASE WTCNT
|
#define WDT_BASE WTCNT
|
||||||
|
@ -66,6 +67,9 @@ int watchdog_disable(void)
|
||||||
|
|
||||||
void reset_cpu(unsigned long ignored)
|
void reset_cpu(unsigned long ignored)
|
||||||
{
|
{
|
||||||
|
/* Address error with SR.BL=1 first. */
|
||||||
|
trigger_address_error();
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
|
@ -272,4 +272,14 @@ void enable_hlt(void);
|
||||||
|
|
||||||
#define arch_align_stack(x) (x)
|
#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
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue