mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-28 15:33:42 +02:00
Add bus type support to the dummy external programmer
The syntax is explained in the man page. Example: flashrom -p dummy=lpc,fwh Tested, works perfectly. ;-) As a nice benefit, it allows easy testing of the "probe only compatible flashes" patch. Corresponding to flashrom svn r559. Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Uwe Hermann <uwe@hermann-uwe.de>
This commit is contained in:
parent
211fa97ce8
commit
3504b539bf
@ -20,16 +20,52 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <ctype.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include "flash.h"
|
#include "flash.h"
|
||||||
|
|
||||||
|
char *dummytype = NULL;
|
||||||
|
|
||||||
int dummy_init(void)
|
int dummy_init(void)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
printf_debug("%s\n", __func__);
|
printf_debug("%s\n", __func__);
|
||||||
|
|
||||||
|
/* "all" is equivalent to specifying no type. */
|
||||||
|
if (!strcmp(dummytype, "all")) {
|
||||||
|
free(dummytype);
|
||||||
|
dummytype = NULL;
|
||||||
|
}
|
||||||
|
if (!dummytype)
|
||||||
|
dummytype = strdup("parallel,lpc,fwh,spi");
|
||||||
|
/* Convert the parameters to lowercase. */
|
||||||
|
for (i = 0; dummytype[i] != '\0'; i++)
|
||||||
|
dummytype[i] = (char)tolower(dummytype[i]);
|
||||||
|
|
||||||
|
buses_supported = CHIP_BUSTYPE_NONE;
|
||||||
|
if (strstr(dummytype, "parallel")) {
|
||||||
|
buses_supported |= CHIP_BUSTYPE_PARALLEL;
|
||||||
|
printf_debug("Enabling support for %s flash.\n", "parallel");
|
||||||
|
}
|
||||||
|
if (strstr(dummytype, "lpc")) {
|
||||||
|
buses_supported |= CHIP_BUSTYPE_LPC;
|
||||||
|
printf_debug("Enabling support for %s flash.\n", "LPC");
|
||||||
|
}
|
||||||
|
if (strstr(dummytype, "fwh")) {
|
||||||
|
buses_supported |= CHIP_BUSTYPE_FWH;
|
||||||
|
printf_debug("Enabling support for %s flash.\n", "FWH");
|
||||||
|
}
|
||||||
|
if (strstr(dummytype, "spi")) {
|
||||||
|
buses_supported |= CHIP_BUSTYPE_SPI;
|
||||||
spi_controller = SPI_CONTROLLER_DUMMY;
|
spi_controller = SPI_CONTROLLER_DUMMY;
|
||||||
|
printf_debug("Enabling support for %s flash.\n", "SPI");
|
||||||
|
}
|
||||||
|
if (buses_supported == CHIP_BUSTYPE_NONE)
|
||||||
|
printf_debug("Support for all flash bus types disabled.\n");
|
||||||
|
free(dummytype);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
flash.h
2
flash.h
@ -122,6 +122,7 @@ uint32_t chip_readl(const chipaddr addr);
|
|||||||
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
|
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
|
||||||
|
|
||||||
enum chipbustype {
|
enum chipbustype {
|
||||||
|
CHIP_BUSTYPE_NONE = 0,
|
||||||
CHIP_BUSTYPE_PARALLEL = 1 << 0,
|
CHIP_BUSTYPE_PARALLEL = 1 << 0,
|
||||||
CHIP_BUSTYPE_LPC = 1 << 1,
|
CHIP_BUSTYPE_LPC = 1 << 1,
|
||||||
CHIP_BUSTYPE_FWH = 1 << 2,
|
CHIP_BUSTYPE_FWH = 1 << 2,
|
||||||
@ -646,6 +647,7 @@ extern int io_fd;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* dummyflasher.c */
|
/* dummyflasher.c */
|
||||||
|
extern char *dummytype;
|
||||||
int dummy_init(void);
|
int dummy_init(void);
|
||||||
int dummy_shutdown(void);
|
int dummy_shutdown(void);
|
||||||
void *dummy_map(const char *descr, unsigned long phys_addr, size_t len);
|
void *dummy_map(const char *descr, unsigned long phys_addr, size_t len);
|
||||||
|
12
flashrom.8
12
flashrom.8
@ -135,6 +135,18 @@ Specify the programmer device. Currently supported are:
|
|||||||
.sp
|
.sp
|
||||||
.BR "* it87spi" " (for flash ROMs behind a IT87xx SuperI/O LPC/SPI translation unit)"
|
.BR "* it87spi" " (for flash ROMs behind a IT87xx SuperI/O LPC/SPI translation unit)"
|
||||||
.sp
|
.sp
|
||||||
|
The dummy programmer has an optional parameter specifying the bus types it
|
||||||
|
should support. For that you have to use the
|
||||||
|
.B "flashrom -p dummy=type"
|
||||||
|
syntax where
|
||||||
|
.B type
|
||||||
|
can be any comma-separated combination of
|
||||||
|
.B parallel lpc fwh spi all
|
||||||
|
in any order.
|
||||||
|
.sp
|
||||||
|
Example:
|
||||||
|
.B "flashrom -p dummy=lpc,fwh"
|
||||||
|
.sp
|
||||||
If you have multiple supported PCI cards which can program flash chips
|
If you have multiple supported PCI cards which can program flash chips
|
||||||
(NICs, SATA/IDE controllers, etc.) in your system, you must use the
|
(NICs, SATA/IDE controllers, etc.) in your system, you must use the
|
||||||
.B "flashrom -p xxxx=bb:dd.f"
|
.B "flashrom -p xxxx=bb:dd.f"
|
||||||
|
@ -537,6 +537,8 @@ int main(int argc, char *argv[])
|
|||||||
programmer = PROGRAMMER_INTERNAL;
|
programmer = PROGRAMMER_INTERNAL;
|
||||||
} else if (strncmp(optarg, "dummy", 5) == 0) {
|
} else if (strncmp(optarg, "dummy", 5) == 0) {
|
||||||
programmer = PROGRAMMER_DUMMY;
|
programmer = PROGRAMMER_DUMMY;
|
||||||
|
if (optarg[5] == '=')
|
||||||
|
dummytype = strdup(optarg + 6);
|
||||||
} else if (strncmp(optarg, "nic3com", 7) == 0) {
|
} else if (strncmp(optarg, "nic3com", 7) == 0) {
|
||||||
programmer = PROGRAMMER_NIC3COM;
|
programmer = PROGRAMMER_NIC3COM;
|
||||||
if (optarg[7] == '=')
|
if (optarg[7] == '=')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user