summaryrefslogtreecommitdiffstats
path: root/arch/blackfin/kernel/reboot.c
diff options
context:
space:
mode:
authorMike Frysinger <vapier.adi@gmail.com>2008-10-13 05:33:43 +0200
committerBryan Wu <cooloney@kernel.org>2008-10-13 05:33:43 +0200
commitcdbf4c3c5f4909767c21f47f68f2ee57a8b36b3b (patch)
tree4cfd19b106ca90c45ed3daf17fdb9727019ba889 /arch/blackfin/kernel/reboot.c
parentBlackfin arch: update anomaly headers to match the latest sheet (diff)
downloadlinux-cdbf4c3c5f4909767c21f47f68f2ee57a8b36b3b.tar.xz
linux-cdbf4c3c5f4909767c21f47f68f2ee57a8b36b3b.zip
Blackfin arch: use the Blackfin on-chip ROM to do software reset when possible
Signed-off-by: Mike Frysinger <vapier.adi@gmail.com> Signed-off-by: Bryan Wu <cooloney@kernel.org>
Diffstat (limited to 'arch/blackfin/kernel/reboot.c')
-rw-r--r--arch/blackfin/kernel/reboot.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/arch/blackfin/kernel/reboot.c b/arch/blackfin/kernel/reboot.c
index d0ead640d992..ae97ca407b0d 100644
--- a/arch/blackfin/kernel/reboot.c
+++ b/arch/blackfin/kernel/reboot.c
@@ -10,6 +10,7 @@
#include <asm/bfin-global.h>
#include <asm/reboot.h>
#include <asm/system.h>
+#include <asm/bfrom.h>
/* A system soft reset makes external memory unusable so force
* this function into L1. We use the compiler ssync here rather
@@ -74,7 +75,14 @@ void machine_restart(char *cmd)
{
native_machine_restart(cmd);
local_irq_disable();
- bfin_reset();
+ if (ANOMALY_05000353 || ANOMALY_05000386)
+ bfin_reset();
+ else
+ /* the bootrom checks to see how it was reset and will
+ * automatically perform a software reset for us when
+ * it starts executing boot
+ */
+ asm("raise 1;");
}
__attribute__((weak))