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]:
50 #include "static_init.h"
51 #include "processor.h"
57 SYS_ID = Kmem::System_regs_map_base + 0x0,
60 IMPLEMENT static FIASCO_INIT
62 Board_check::read_board_id()
63 { return Io::read<Mword>(SYS_ID); }
65 IMPLEMENT static FIASCO_INIT
67 Board_check::check_board()
69 Mword id = read_board_id();
71 printf("Realview System ID: Rev=%lx HBI=%03lx Build=%lx Arch=%lx FPGA=%02lx\n",
72 id >> 28, (id >> 16) & 0xfff, (id >> 12) & 0xf,
73 (id >> 8) & 0xf, id & 0xff);
75 for (unsigned i = 0; i < (sizeof(ids) / sizeof(ids[0])); ++i)
76 if ((id & ids[i].mask) == ids[i].id)
79 printf(" Invalid System ID for this kernel config\n");
80 for (unsigned i = 0; i < (sizeof(ids) / sizeof(ids[0])); ++i)
81 printf(" Expected (%08lx & %08x) == %08x%s\n",
82 id, ids[i].mask, ids[i].id,
83 i + 1 < (sizeof(ids) / sizeof(ids[0])) ? ", or" : "");
84 printf(" Stopping.\n");
89 STATIC_INITIALIZEX_P(Board_check, check_board, GDB_INIT_PRIO);