97b18a3bc940de215d0a2b47db5f2d16f10fbab3
1 #include <hw/identifier.h>
10 static const struct board_desc boards
[1] = {
12 .id
= 0x4D31, /* M1 */
13 .name
= "Milkymist One",
18 static const struct board_desc
*get_board_desc_id(unsigned short int id
)
22 for(i
=0;i
<sizeof(boards
)/sizeof(boards
[0]);i
++)
23 if(boards
[i
].id
== id
)
28 static const struct board_desc
*get_board_desc(void)
30 return get_board_desc_id((CSR_IDENTIFIER_SYSTEMH
<< 8) | CSR_IDENTIFIER_SYSTEML
);
33 int get_pcb_revision(void)
53 void get_soc_version(unsigned int *major
, unsigned int *minor
, unsigned int *subminor
, unsigned int *rc
)
57 id
= CSR_IDENTIFIER_VERSIONH
;
58 *major
= (id
& 0xf0) >> 4;
60 id
= CSR_IDENTIFIER_VERSIONL
;
61 *subminor
= (id
& 0xf0) >> 4;
65 void get_soc_version_formatted(char *version
)
67 unsigned int major
, minor
, subminor
, rc
;
69 get_soc_version(&major
, &minor
, &subminor
, &rc
);
71 version
+= sprintf(version
, "%u.%u", major
, minor
);
73 version
+= sprintf(version
, ".%u", subminor
);
75 sprintf(version
, "RC%u", rc
);
78 const struct board_desc
*brd_desc
;
85 brd_desc
= get_board_desc();
87 if(brd_desc
== NULL
) {
88 printf("Running on unknown board, startup aborted.\n");
91 rev
= get_pcb_revision();
92 get_soc_version_formatted(soc_version
);
93 printf("Detected SoC %s at %dMHz on %s (PCB revision %d)\n", soc_version
, get_system_frequency()/1000000,
95 if(strcmp(soc_version
, VERSION
) != 0)
96 printf("SoC and BIOS versions do not match!\n");
98 printf("Unsupported PCB revision, please upgrade!\n");