mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-26 14:42:36 +02:00
Move show_id to where it belongs
And remove the unused force parameter. Corresponding to flashrom svn r1569. 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:
parent
24c38dfd96
commit
37e8686284
80
cbtable.c
80
cbtable.c
@ -25,6 +25,7 @@
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include "flash.h"
|
||||
#include "programmer.h"
|
||||
@ -32,6 +33,9 @@
|
||||
|
||||
char *lb_part = NULL, *lb_vendor = NULL;
|
||||
int partvendor_from_cbtable = 0;
|
||||
static char *def_name = "DEFAULT";
|
||||
static char *mainboard_vendor = NULL;
|
||||
static char *mainboard_part = NULL;
|
||||
|
||||
/* Parse the [<vendor>:]<board> string specified by the user as part of
|
||||
* -p internal:mainboard=[<vendor>:]<board> and set lb_vendor and lb_part
|
||||
@ -56,6 +60,82 @@ void lb_vendor_dev_from_string(const char *boardstring)
|
||||
free(tempstr);
|
||||
}
|
||||
|
||||
int show_id(uint8_t *bios, int size)
|
||||
{
|
||||
unsigned int *walk;
|
||||
unsigned int mb_part_offset, mb_vendor_offset;
|
||||
char *mb_part, *mb_vendor;
|
||||
|
||||
mainboard_vendor = def_name;
|
||||
mainboard_part = def_name;
|
||||
|
||||
walk = (unsigned int *)(bios + size - 0x10);
|
||||
walk--;
|
||||
|
||||
if ((*walk) == 0 || ((*walk) & 0x3ff) != 0) {
|
||||
/* We might have an NVIDIA chipset BIOS which stores the ID information somewhere else. */
|
||||
walk = (unsigned int *)(bios + size - 0x80);
|
||||
walk--;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if coreboot last image size is 0 or not a multiple of 1k or
|
||||
* bigger than the chip or if the pointers to vendor ID or mainboard ID
|
||||
* are outside the image of if the start of ID strings are nonsensical
|
||||
* (nonprintable and not \0).
|
||||
*/
|
||||
mb_part_offset = *(walk - 1);
|
||||
mb_vendor_offset = *(walk - 2);
|
||||
if ((*walk) == 0 || ((*walk) & 0x3ff) != 0 || (*walk) > size ||
|
||||
mb_part_offset > size || mb_vendor_offset > size) {
|
||||
msg_pinfo("Flash image seems to be a legacy BIOS. Disabling coreboot-related checks.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
mb_part = (char *)(bios + size - mb_part_offset);
|
||||
mb_vendor = (char *)(bios + size - mb_vendor_offset);
|
||||
if (!isprint((unsigned char)*mb_part) ||
|
||||
!isprint((unsigned char)*mb_vendor)) {
|
||||
msg_pinfo("Flash image seems to have garbage in the ID location. Disabling checks.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
msg_pdbg("coreboot last image size (not ROM size) is %d bytes.\n", *walk);
|
||||
|
||||
mainboard_part = strdup(mb_part);
|
||||
mainboard_vendor = strdup(mb_vendor);
|
||||
msg_pdbg("Manufacturer: %s\n", mainboard_vendor);
|
||||
msg_pdbg("Mainboard ID: %s\n", mainboard_part);
|
||||
|
||||
/* If these are not set, the coreboot table was not found. */
|
||||
if (!lb_vendor || !lb_part) {
|
||||
msg_pinfo("Note: If the following flash access fails, try "
|
||||
"-p internal:mainboard=<vendor>:<mainboard>.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* These comparisons are case insensitive to make things a little less user^Werror prone. */
|
||||
if (!strcasecmp(mainboard_vendor, lb_vendor) &&
|
||||
!strcasecmp(mainboard_part, lb_part)) {
|
||||
msg_pdbg("This firmware image matches this mainboard.\n");
|
||||
} else {
|
||||
if (force_boardmismatch) {
|
||||
msg_pinfo("WARNING: This firmware image does not "
|
||||
"seem to fit to this machine - forcing it.\n");
|
||||
} else {
|
||||
msg_pinfo("ERROR: Your firmware image (%s:%s) does not appear to\n"
|
||||
" be correct for the detected mainboard (%s:%s)\n\n"
|
||||
"Override with -p internal:boardmismatch=force to ignore the board name\n"
|
||||
"in the firmware image or override the detected mainboard with\n"
|
||||
"-p internal:mainboard=<vendor>:<mainboard>.\n\n",
|
||||
mainboard_vendor, mainboard_part, lb_vendor, lb_part);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned long compute_checksum(void *addr, unsigned long length)
|
||||
{
|
||||
uint8_t *ptr;
|
||||
|
@ -1815,7 +1815,7 @@ int doit(struct flashctx *flash, int force, const char *filename, int read_it,
|
||||
|
||||
#if CONFIG_INTERNAL == 1
|
||||
if (programmer == PROGRAMMER_INTERNAL)
|
||||
if (show_id(newcontents, size, force)) {
|
||||
if (show_id(newcontents, size)) {
|
||||
ret = 1;
|
||||
goto out;
|
||||
}
|
||||
|
101
layout.c
101
layout.c
@ -21,15 +21,10 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include <limits.h>
|
||||
#include "flash.h"
|
||||
#include "programmer.h"
|
||||
|
||||
#if CONFIG_INTERNAL == 1
|
||||
char *mainboard_vendor = NULL;
|
||||
char *mainboard_part = NULL;
|
||||
#endif
|
||||
static int romimages = 0;
|
||||
|
||||
#define MAX_ROMLAYOUT 32
|
||||
@ -49,102 +44,6 @@ static char *include_args[MAX_ROMLAYOUT];
|
||||
static int num_include_args = 0; /* the number of valid entries. */
|
||||
static romlayout_t rom_entries[MAX_ROMLAYOUT];
|
||||
|
||||
#if CONFIG_INTERNAL == 1 /* FIXME: Move the whole block to cbtable.c? */
|
||||
static char *def_name = "DEFAULT";
|
||||
|
||||
int show_id(uint8_t *bios, int size, int force)
|
||||
{
|
||||
unsigned int *walk;
|
||||
unsigned int mb_part_offset, mb_vendor_offset;
|
||||
char *mb_part, *mb_vendor;
|
||||
|
||||
mainboard_vendor = def_name;
|
||||
mainboard_part = def_name;
|
||||
|
||||
walk = (unsigned int *)(bios + size - 0x10);
|
||||
walk--;
|
||||
|
||||
if ((*walk) == 0 || ((*walk) & 0x3ff) != 0) {
|
||||
/* We might have an NVIDIA chipset BIOS which stores the ID
|
||||
* information at a different location.
|
||||
*/
|
||||
walk = (unsigned int *)(bios + size - 0x80);
|
||||
walk--;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if coreboot last image size is 0 or not a multiple of 1k or
|
||||
* bigger than the chip or if the pointers to vendor ID or mainboard ID
|
||||
* are outside the image of if the start of ID strings are nonsensical
|
||||
* (nonprintable and not \0).
|
||||
*/
|
||||
mb_part_offset = *(walk - 1);
|
||||
mb_vendor_offset = *(walk - 2);
|
||||
if ((*walk) == 0 || ((*walk) & 0x3ff) != 0 || (*walk) > size ||
|
||||
mb_part_offset > size || mb_vendor_offset > size) {
|
||||
msg_pinfo("Flash image seems to be a legacy BIOS. "
|
||||
"Disabling coreboot-related checks.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
mb_part = (char *)(bios + size - mb_part_offset);
|
||||
mb_vendor = (char *)(bios + size - mb_vendor_offset);
|
||||
if (!isprint((unsigned char)*mb_part) ||
|
||||
!isprint((unsigned char)*mb_vendor)) {
|
||||
msg_pinfo("Flash image seems to have garbage in the ID location."
|
||||
" Disabling checks.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
msg_pdbg("coreboot last image size "
|
||||
"(not ROM size) is %d bytes.\n", *walk);
|
||||
|
||||
mainboard_part = strdup(mb_part);
|
||||
mainboard_vendor = strdup(mb_vendor);
|
||||
msg_pdbg("Manufacturer: %s\n", mainboard_vendor);
|
||||
msg_pdbg("Mainboard ID: %s\n", mainboard_part);
|
||||
|
||||
/*
|
||||
* If lb_vendor is not set, the coreboot table was
|
||||
* not found. Nor was -p internal:mainboard=VENDOR:PART specified.
|
||||
*/
|
||||
if (!lb_vendor || !lb_part) {
|
||||
msg_pinfo("Note: If the following flash access fails, try "
|
||||
"-p internal:mainboard=<vendor>:<mainboard>.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* These comparisons are case insensitive to make things
|
||||
* a little less user^Werror prone.
|
||||
*/
|
||||
if (!strcasecmp(mainboard_vendor, lb_vendor) &&
|
||||
!strcasecmp(mainboard_part, lb_part)) {
|
||||
msg_pdbg("This firmware image matches this mainboard.\n");
|
||||
} else {
|
||||
if (force_boardmismatch) {
|
||||
msg_pinfo("WARNING: This firmware image does not "
|
||||
"seem to fit to this machine - forcing it.\n");
|
||||
} else {
|
||||
msg_pinfo("ERROR: Your firmware image (%s:%s) does not "
|
||||
"appear to\n"
|
||||
" be correct for the detected "
|
||||
"mainboard (%s:%s)\n\n"
|
||||
"Override with -p internal:boardmismatch="
|
||||
"force to ignore the board name in the\n"
|
||||
"firmware image or override the detected "
|
||||
"mainboard with\n"
|
||||
"-p internal:mainboard=<vendor>:<mainboard>."
|
||||
"\n\n",
|
||||
mainboard_vendor, mainboard_part, lb_vendor,
|
||||
lb_part);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef __LIBPAYLOAD__
|
||||
int read_romlayout(char *name)
|
||||
{
|
||||
|
@ -274,6 +274,7 @@ void cleanup_cpu_msr(void);
|
||||
|
||||
/* cbtable.c */
|
||||
void lb_vendor_dev_from_string(const char *boardstring);
|
||||
int show_id(uint8_t *bios, int size);
|
||||
int coreboot_init(void);
|
||||
extern char *lb_part, *lb_vendor;
|
||||
extern int partvendor_from_cbtable;
|
||||
@ -478,9 +479,6 @@ void check_chip_supported(const struct flashctx *flash);
|
||||
int check_max_decode(enum chipbustype buses, uint32_t size);
|
||||
char *extract_programmer_param(const char *param_name);
|
||||
|
||||
/* layout.c */
|
||||
int show_id(uint8_t *bios, int size, int force);
|
||||
|
||||
/* spi.c */
|
||||
enum spi_controller {
|
||||
SPI_CONTROLLER_NONE,
|
||||
|
Loading…
x
Reference in New Issue
Block a user