summaryrefslogtreecommitdiff
path: root/firmware/target/arm/s5l8700/system-s5l8700.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/s5l8700/system-s5l8700.c')
-rw-r--r--firmware/target/arm/s5l8700/system-s5l8700.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/firmware/target/arm/s5l8700/system-s5l8700.c b/firmware/target/arm/s5l8700/system-s5l8700.c
index f04f2f92f2..070d3b9462 100644
--- a/firmware/target/arm/s5l8700/system-s5l8700.c
+++ b/firmware/target/arm/s5l8700/system-s5l8700.c
@@ -22,6 +22,9 @@
22#include "kernel.h" 22#include "kernel.h"
23#include "system.h" 23#include "system.h"
24#include "panic.h" 24#include "panic.h"
25#ifdef IPOD_NANO2G
26#include "ftl-target.h"
27#endif
25 28
26#define default_interrupt(name) \ 29#define default_interrupt(name) \
27 extern __attribute__((weak,alias("UIRQ"))) void name (void) 30 extern __attribute__((weak,alias("UIRQ"))) void name (void)
@@ -151,6 +154,24 @@ void system_init(void)
151 154
152void system_reboot(void) 155void system_reboot(void)
153{ 156{
157#ifdef IPODNANO2G
158 if (ftl_sync() != 0) panicf("Failed to unmount flash!");
159
160 /* Reset the SoC */
161 asm volatile(" \
162 msr CPSR_c, #0xd3 \
163 mov r5, #0x110000 \
164 add r5, r5, #0xff \
165 add r6, r5, #0xa00 \
166 mov r10, #0x3c800000 \
167 str r6, [r10] \
168 mov r6, #0xff0 \
169 str r6, [r10,#4] \
170 str r5, [r10]")
171
172 /* Wait for reboot to kick in */
173 while(1);
174#endif
154} 175}
155 176
156void system_exception_wait(void) 177void system_exception_wait(void)