mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-26 22:52:34 +02:00
Add general programmer sanity checks
And remove the completely unused vendor field. Corresponding to flashrom svn r1630. 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
b8911d6cec
commit
a6d9648017
29
flashrom.c
29
flashrom.c
@ -1557,8 +1557,9 @@ void print_banner(void)
|
|||||||
|
|
||||||
int selfcheck(void)
|
int selfcheck(void)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
|
||||||
const struct flashchip *chip;
|
const struct flashchip *chip;
|
||||||
|
int i;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
/* Safety check. Instead of aborting after the first error, check
|
/* Safety check. Instead of aborting after the first error, check
|
||||||
* if more errors exist.
|
* if more errors exist.
|
||||||
@ -1567,6 +1568,32 @@ int selfcheck(void)
|
|||||||
msg_gerr("Programmer table miscompilation!\n");
|
msg_gerr("Programmer table miscompilation!\n");
|
||||||
ret = 1;
|
ret = 1;
|
||||||
}
|
}
|
||||||
|
for (i = 0; i < PROGRAMMER_INVALID; i++) {
|
||||||
|
const struct programmer_entry p = programmer_table[i];
|
||||||
|
if (p.name == NULL) {
|
||||||
|
msg_gerr("All programmers need a valid name, but the one with index %d does not!\n", i);
|
||||||
|
ret = 1;
|
||||||
|
/* This might hide other problems with this programmer, but allows for better error
|
||||||
|
* messages below without jumping through hoops. */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (p.init == NULL) {
|
||||||
|
msg_gerr("Programmer %s does not have a valid init function!\n", p.name);
|
||||||
|
ret = 1;
|
||||||
|
}
|
||||||
|
if (p.delay == NULL) {
|
||||||
|
msg_gerr("Programmer %s does not have a valid delay function!\n", p.name);
|
||||||
|
ret = 1;
|
||||||
|
}
|
||||||
|
if (p.map_flash_region == NULL) {
|
||||||
|
msg_gerr("Programmer %s does not have a valid map_flash_region function!\n", p.name);
|
||||||
|
ret = 1;
|
||||||
|
}
|
||||||
|
if (p.unmap_flash_region == NULL) {
|
||||||
|
msg_gerr("Programmer %s does not have a valid unmap_flash_region function!\n", p.name);
|
||||||
|
ret = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
/* It would be favorable if we could also check for correct termination
|
/* It would be favorable if we could also check for correct termination
|
||||||
* of the following arrays, but we don't know their sizes in here...
|
* of the following arrays, but we don't know their sizes in here...
|
||||||
* For 'flashchips' we check the first element to be non-null. In the
|
* For 'flashchips' we check the first element to be non-null. In the
|
||||||
|
@ -91,13 +91,11 @@ enum programmer {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct programmer_entry {
|
struct programmer_entry {
|
||||||
const char *vendor;
|
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
||||||
int (*init) (void);
|
int (*init) (void);
|
||||||
|
|
||||||
void *(*map_flash_region) (const char *descr, unsigned long phys_addr,
|
void *(*map_flash_region) (const char *descr, unsigned long phys_addr, size_t len);
|
||||||
size_t len);
|
|
||||||
void (*unmap_flash_region) (void *virt_addr, size_t len);
|
void (*unmap_flash_region) (void *virt_addr, size_t len);
|
||||||
|
|
||||||
void (*delay) (int usecs);
|
void (*delay) (int usecs);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user