]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/arm/bsp/realview/board_check-arm-realview.cpp
Some minor fixes.
[l4.git] / kernel / fiasco / src / kern / arm / bsp / realview / board_check-arm-realview.cpp
1 INTERFACE [arm && realview]:
2
3 #include "types.h"
4
5 class Board_check
6 {
7 public:
8   static void check_board();
9
10 private:
11   static Mword read_board_id();
12   struct id_pair
13   {
14     unsigned mask, id;
15   };
16   static id_pair ids[];
17 };
18
19 // ------------------------------------------------------------------------
20 IMPLEMENTATION [arm && realview]:
21
22 #include "initcalls.h"
23
24 // ------------------------------------------------------------------------
25 IMPLEMENTATION [arm && realview && realview_eb]:
26
27 Board_check::id_pair Board_check::ids[] FIASCO_INITDATA = {
28   { 0x1ffffe00, 0x01400400 },
29 };
30
31 // ------------------------------------------------------------------------
32 IMPLEMENTATION [arm && realview && realview_pb11mp]:
33
34 Board_check::id_pair Board_check::ids[] FIASCO_INITDATA = {
35   { 0x0fffff00, 0x0159f500 },
36 };
37
38 // ------------------------------------------------------------------------
39 IMPLEMENTATION [arm && realview && realview_pbx]:
40
41 Board_check::id_pair Board_check::ids[] FIASCO_INITDATA = {
42   { 0xffffff00, 0x1182f500 }, // board
43   { 0xffffff00, 0x01780500 }, // qemu
44 };
45
46 // ------------------------------------------------------------------------
47 IMPLEMENTATION [arm && realview && realview_vexpress]:
48
49 Board_check::id_pair Board_check::ids[] FIASCO_INITDATA = {
50   { 0xcfffff00, 0x0190f500 },
51 };
52
53 // ------------------------------------------------------------------------
54 IMPLEMENTATION [arm && realview]:
55
56 #include "kmem.h"
57 #include "io.h"
58 #include "static_init.h"
59 #include "processor.h"
60 #include "platform.h"
61
62 #include <cstdio>
63
64 IMPLEMENT static FIASCO_INIT
65 Mword
66 Board_check::read_board_id()
67 { return Platform::sys->read<Mword>(Platform::Sys::Id); }
68
69 IMPLEMENT static FIASCO_INIT
70 void
71 Board_check::check_board()
72 {
73   Mword id = read_board_id();
74
75   printf("Realview System ID: Rev=%lx HBI=%03lx Build=%lx Arch=%lx FPGA=%02lx\n",
76          id >> 28, (id >> 16) & 0xfff, (id >> 12) & 0xf,
77          (id >> 8) & 0xf, id & 0xff);
78
79   for (unsigned i = 0; i < (sizeof(ids) / sizeof(ids[0])); ++i)
80     if ((id & ids[i].mask) == ids[i].id)
81       return;
82
83   printf("  Invalid System ID for this kernel config\n");
84   for (unsigned i = 0; i < (sizeof(ids) / sizeof(ids[0])); ++i)
85     printf("  Expected (%08lx & %08x) == %08x%s\n",
86            id, ids[i].mask, ids[i].id,
87            i + 1 < (sizeof(ids) / sizeof(ids[0])) ? ", or" : "");
88   printf("  Stopping.\n");
89   while (1)
90     Proc::halt();
91 }
92
93 STATIC_INITIALIZEX_P(Board_check, check_board, GDB_INIT_PRIO);