1
0
mirror of https://review.coreboot.org/flashrom.git synced 2025-07-01 22:21:16 +02:00

Add selfcheck_board_enables()

Check for NULL termination of the array, that each board has the two
main PCI ID sets defined, that coreboot vendor and model fields are either
both set or unset, and that at least either an enable function or a max
decode size is available.

Corresponding to flashrom svn r1821.

Signed-off-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
This commit is contained in:
Stefan Tauner
2014-06-12 22:57:36 +00:00
parent 7ba3d6ce16
commit 600576b43d
3 changed files with 35 additions and 0 deletions

View File

@ -2463,6 +2463,36 @@ const struct board_match board_matches[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, P3, NULL, NULL, 0, NT, NULL}, /* end marker */
};
int selfcheck_board_enables(void)
{
if (board_matches[ARRAY_SIZE(board_matches) - 1].vendor_name != NULL) {
msg_gerr("Board enables table miscompilation!\n");
return 1;
}
int ret = 0;
unsigned int i;
for (i = 0; i < ARRAY_SIZE(board_matches) - 1; i++) {
const struct board_match *b = &board_matches[i];
if (b->vendor_name == NULL || b->board_name == NULL) {
msg_gerr("ERROR: Board enable #%d does not define a vendor and board name.\n"
"Please report a bug at flashrom@flashrom.org\n", i);
ret = 1;
continue;
}
if ((b->first_vendor == 0 || b->first_device == 0 ||
b->second_vendor == 0 || b->second_device == 0) ||
((b->lb_vendor == NULL) ^ (b->lb_part == NULL)) ||
(b->max_rom_decode_parallel == 0 && b->enable == NULL)) {
msg_gerr("ERROR: Board enable for %s %s is misdefined.\n"
"Please report a bug at flashrom@flashrom.org\n",
b->vendor_name, b->board_name);
ret = 1;
}
}
return ret;
}
/* Parse the <vendor>:<board> string specified by the user as part of -p internal:mainboard=<vendor>:<board>.
* Parameters vendor and model will be overwritten. Returns 0 on success.
* Note: strtok modifies the original string, so we work on a copy and allocate memory for the results.