1 INTERFACE [arm && realview]:
8 static void check_board();
11 static Mword read_board_id();
18 // ------------------------------------------------------------------------
19 IMPLEMENTATION [arm && realview]:
21 #include "initcalls.h"
23 // ------------------------------------------------------------------------
24 IMPLEMENTATION [arm && realview && realview_eb]:
26 Board_check::id_pair Board_check::ids[] FIASCO_INITDATA = {
27 { 0x1ffffe00, 0x01400400 },
30 // ------------------------------------------------------------------------
31 IMPLEMENTATION [arm && realview && realview_pb11mp]:
33 Board_check::id_pair Board_check::ids[] FIASCO_INITDATA = {
34 { 0x0fffff00, 0x0159f500 },
37 // ------------------------------------------------------------------------
38 IMPLEMENTATION [arm && realview && realview_pbx]:
40 Board_check::id_pair Board_check::ids[] FIASCO_INITDATA = {
41 { 0xffffff00, 0x1182f500 }, // board
42 { 0xffffff00, 0x01780500 }, // qemu
45 // ------------------------------------------------------------------------
46 IMPLEMENTATION [arm && realview && realview_vexpress]:
48 Board_check::id_pair Board_check::ids[] FIASCO_INITDATA = {
49 { 0xffffff00, 0x1190f500 },
52 // ------------------------------------------------------------------------
53 IMPLEMENTATION [arm && realview]:
57 #include "static_init.h"
58 #include "processor.h"
64 SYS_ID = Kmem::System_regs_map_base + 0x0,
67 IMPLEMENT static FIASCO_INIT
69 Board_check::read_board_id()
70 { return Io::read<Mword>(SYS_ID); }
72 IMPLEMENT static FIASCO_INIT
74 Board_check::check_board()
76 Mword id = read_board_id();
78 printf("Realview System ID: Rev=%lx HBI=%03lx Build=%lx Arch=%lx FPGA=%02lx\n",
79 id >> 28, (id >> 16) & 0xfff, (id >> 12) & 0xf,
80 (id >> 8) & 0xf, id & 0xff);
82 for (unsigned i = 0; i < (sizeof(ids) / sizeof(ids[0])); ++i)
83 if ((id & ids[i].mask) == ids[i].id)
86 printf(" Invalid System ID for this kernel config\n");
87 for (unsigned i = 0; i < (sizeof(ids) / sizeof(ids[0])); ++i)
88 printf(" Expected (%08lx & %08x) == %08x%s\n",
89 id, ids[i].mask, ids[i].id,
90 i + 1 < (sizeof(ids) / sizeof(ids[0])) ? ", or" : "");
91 printf(" Stopping.\n");
96 STATIC_INITIALIZEX_P(Board_check, check_board, GDB_INIT_PRIO);