9 static void handle_v4(void)
13 static void handle_unknown(void)
17 static void (*handlers[16])(void) = {
22 static void dump_mem_registers(unsigned int address)
27 fd = open("/dev/mem", O_RDONLY | O_SYNC);
29 perror("open(/dev/mem)");
33 regs = mmap(NULL, 0x1000, PROT_READ, MAP_SHARED, fd, address);
34 if (regs == MAP_FAILED) {
40 printf("\nmemory mapped registers:\n");
41 printf("DIDR: %08x\n", regs[0]);
42 printf("AUTHSTATUS: %08x\n", regs[1006]);
43 printf("DEVID: %08x\n", regs[1010]);
49 int main(int argc, char *argv[])
51 unsigned int didr = 0, drar = 0, dsar = 0, dscr = 0;
52 unsigned int i, arch_version;
54 asm ("mrc p14, 0, %0, c0, c0, 0" : "=r"(didr));
55 asm ("mrc p14, 0, %0, c1, c0, 0" : "=r"(drar));
56 asm ("mrc p14, 0, %0, c2, c0, 0" : "=r"(dsar));
57 asm ("mrc p14, 0, %0, c0, c1, 0" : "=r"(dscr));
59 for (i = 0; i < 16; i++)
60 if (handlers[i] == NULL)
61 handlers[i] = handle_unknown;
63 printf("DIDR: %08x\n", didr);
64 arch_version = (didr >> 16) & 0x0f;
65 printf(" Revision: %d\n", didr & 0x0f);
66 printf(" Variant: %d\n", (didr >> 4) & 0x0f);
67 printf(" Debug arch version: %d\n", arch_version);
69 printf("DRAR: %08x\n", drar);
70 printf("DSAR: %08x\n", dsar);
71 printf("DSCR: %08x\n", dscr);
74 printf(" (debug ROM table not available)\n");
76 printf(" (debug self address not available\n");
77 if ((drar & 3) == 3 && (dsar & 3) == 3 && argv[1] != NULL)
78 dump_mem_registers((drar & ~0xfff) + (dsar & ~0xfff));
79 if (argv[1] != NULL && !strcmp(argv[1], "pnd"))
80 dump_mem_registers(0x54011000);
82 handlers[arch_version]();