]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/arm/bsp/realview/reset-arm-realview.cpp
update
[l4.git] / kernel / fiasco / src / kern / arm / bsp / realview / reset-arm-realview.cpp
1 IMPLEMENTATION [arm && realview]:
2
3 #include "io.h"
4 #include "kmem.h"
5
6 class Realview_reset
7 {
8 public:
9   enum
10   {
11     LOCK  = Kmem::System_regs_map_base + 0x20,
12     RESET = Kmem::System_regs_map_base + 0x40,
13   };
14 };
15
16 // ------------------------------------------------------------------------
17 IMPLEMENTATION [arm && realview && realview_eb]:
18
19 static inline void do_reset()
20 {
21   Io::write(0x108, Realview_reset::RESET); // the 0x100 is for Qemu
22 }
23
24 // ------------------------------------------------------------------------
25 IMPLEMENTATION [arm && realview && realview_pb11mp]:
26
27 static inline void do_reset()
28 {
29   Io::write(0x4, Realview_reset::RESET); // PORESET (0x8 would also be ok)
30 }
31
32 // ------------------------------------------------------------------------
33 IMPLEMENTATION [arm && realview && (realview_pbx || realview_vexpress)]:
34
35 static inline void do_reset()
36 {
37   Io::write(0x104, Realview_reset::RESET); // POWER reset, 0x100 for Qemu
38 }
39
40 // ------------------------------------------------------------------------
41 IMPLEMENTATION [arm && realview]:
42
43 void __attribute__ ((noreturn))
44 pc_reset(void)
45 {
46   Io::write(0xa05f, Realview_reset::LOCK);  // unlock for reset
47   do_reset();
48
49   for (;;)
50     ;
51 }