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.

Signed-off-by: Carl-Daniel Hailfinger <[email protected]>

Index: flashrom-dummy_bustype/flashrom.8
===================================================================
--- flashrom-dummy_bustype/flashrom.8   (Revision 557)
+++ flashrom-dummy_bustype/flashrom.8   (Arbeitskopie)
@@ -135,6 +135,18 @@
 .sp
 .BR "* it87spi" " (for flash ROMs behind a IT87xx SuperI/O LPC/SPI translation 
unit)"
 .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
 (NICs, SATA/IDE controllers, etc.) in your system, you must use the
 .B "flashrom -p xxxx=bb:dd.f"
Index: flashrom-dummy_bustype/flash.h
===================================================================
--- flashrom-dummy_bustype/flash.h      (Revision 557)
+++ flashrom-dummy_bustype/flash.h      (Arbeitskopie)
@@ -122,6 +122,7 @@
 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
 
 enum chipbustype {
+       CHIP_BUSTYPE_NONE       = 0,
        CHIP_BUSTYPE_PARALLEL   = 1 << 0,
        CHIP_BUSTYPE_LPC        = 1 << 1,
        CHIP_BUSTYPE_FWH        = 1 << 2,
@@ -646,6 +647,7 @@
 #endif
 
 /* dummyflasher.c */
+extern char *dummytype;
 int dummy_init(void);
 int dummy_shutdown(void);
 void *dummy_map(const char *descr, unsigned long phys_addr, size_t len);
Index: flashrom-dummy_bustype/dummyflasher.c
===================================================================
--- flashrom-dummy_bustype/dummyflasher.c       (Revision 557)
+++ flashrom-dummy_bustype/dummyflasher.c       (Arbeitskopie)
@@ -20,16 +20,51 @@
 
 #include <string.h>
 #include <stdlib.h>
+#include <ctype.h>
 #include <fcntl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <errno.h>
 #include "flash.h"
 
+char *dummytype = NULL;
+
 int dummy_init(void)
 {
+       int i;
        printf_debug("%s\n", __func__);
-       spi_controller = SPI_CONTROLLER_DUMMY;
+
+       /* "all" is equivalent to specifying no type. */
+       if (!strcmp(dummytype, "all")) {
+               free(dummytype);
+               dummytype = NULL;
+       }
+       if (!dummytype)
+               dummytype = strdup("parallel,lpc,fwh,spi");
+       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 parallel flash.\n");
+       }
+       if (strstr(dummytype, "lpc")) {
+               buses_supported |= CHIP_BUSTYPE_LPC;
+               printf_debug("Enabling support for LPC flash.\n");
+       }
+       if (strstr(dummytype, "fwh")) {
+               buses_supported |= CHIP_BUSTYPE_FWH;
+               printf_debug("Enabling support for FWH flash.\n");
+       }
+       if (strstr(dummytype, "spi")) {
+               buses_supported |= CHIP_BUSTYPE_SPI;
+               spi_controller = SPI_CONTROLLER_DUMMY;
+               printf_debug("Enabling support for SPI flash.\n");
+       }
+       if (buses_supported == CHIP_BUSTYPE_NONE)
+               printf_debug("Support for all flash bus types disabled.\n");
+       free(dummytype);
        return 0; 
 }
 
Index: flashrom-dummy_bustype/flashrom.c
===================================================================
--- flashrom-dummy_bustype/flashrom.c   (Revision 557)
+++ flashrom-dummy_bustype/flashrom.c   (Arbeitskopie)
@@ -537,6 +537,8 @@
                                programmer = PROGRAMMER_INTERNAL;
                        } else if (strncmp(optarg, "dummy", 5) == 0) {
                                programmer = PROGRAMMER_DUMMY;
+                               if (optarg[5] == '=')
+                                       dummytype = strdup(optarg + 6);
                        } else if (strncmp(optarg, "nic3com", 7) == 0) {
                                programmer = PROGRAMMER_NIC3COM;
                                if (optarg[7] == '=')


-- 
http://www.hailfinger.org/

Index: flashrom-dummy_bustype/flashrom.8
===================================================================
--- flashrom-dummy_bustype/flashrom.8   (Revision 557)
+++ flashrom-dummy_bustype/flashrom.8   (Arbeitskopie)
@@ -135,6 +135,18 @@
 .sp
 .BR "* it87spi" " (for flash ROMs behind a IT87xx SuperI/O LPC/SPI translation 
unit)"
 .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
 (NICs, SATA/IDE controllers, etc.) in your system, you must use the
 .B "flashrom -p xxxx=bb:dd.f"
Index: flashrom-dummy_bustype/flash.h
===================================================================
--- flashrom-dummy_bustype/flash.h      (Revision 557)
+++ flashrom-dummy_bustype/flash.h      (Arbeitskopie)
@@ -122,6 +122,7 @@
 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
 
 enum chipbustype {
+       CHIP_BUSTYPE_NONE       = 0,
        CHIP_BUSTYPE_PARALLEL   = 1 << 0,
        CHIP_BUSTYPE_LPC        = 1 << 1,
        CHIP_BUSTYPE_FWH        = 1 << 2,
@@ -646,6 +647,7 @@
 #endif
 
 /* dummyflasher.c */
+extern char *dummytype;
 int dummy_init(void);
 int dummy_shutdown(void);
 void *dummy_map(const char *descr, unsigned long phys_addr, size_t len);
Index: flashrom-dummy_bustype/dummyflasher.c
===================================================================
--- flashrom-dummy_bustype/dummyflasher.c       (Revision 557)
+++ flashrom-dummy_bustype/dummyflasher.c       (Arbeitskopie)
@@ -20,16 +20,51 @@
 
 #include <string.h>
 #include <stdlib.h>
+#include <ctype.h>
 #include <fcntl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <errno.h>
 #include "flash.h"
 
+char *dummytype = NULL;
+
 int dummy_init(void)
 {
+       int i;
        printf_debug("%s\n", __func__);
-       spi_controller = SPI_CONTROLLER_DUMMY;
+
+       /* "all" is equivalent to specifying no type. */
+       if (!strcmp(dummytype, "all")) {
+               free(dummytype);
+               dummytype = NULL;
+       }
+       if (!dummytype)
+               dummytype = strdup("parallel,lpc,fwh,spi");
+       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 parallel flash.\n");
+       }
+       if (strstr(dummytype, "lpc")) {
+               buses_supported |= CHIP_BUSTYPE_LPC;
+               printf_debug("Enabling support for LPC flash.\n");
+       }
+       if (strstr(dummytype, "fwh")) {
+               buses_supported |= CHIP_BUSTYPE_FWH;
+               printf_debug("Enabling support for FWH flash.\n");
+       }
+       if (strstr(dummytype, "spi")) {
+               buses_supported |= CHIP_BUSTYPE_SPI;
+               spi_controller = SPI_CONTROLLER_DUMMY;
+               printf_debug("Enabling support for SPI flash.\n");
+       }
+       if (buses_supported == CHIP_BUSTYPE_NONE)
+               printf_debug("Support for all flash bus types disabled.\n");
+       free(dummytype);
        return 0; 
 }
 
Index: flashrom-dummy_bustype/flashrom.c
===================================================================
--- flashrom-dummy_bustype/flashrom.c   (Revision 557)
+++ flashrom-dummy_bustype/flashrom.c   (Arbeitskopie)
@@ -537,6 +537,8 @@
                                programmer = PROGRAMMER_INTERNAL;
                        } else if (strncmp(optarg, "dummy", 5) == 0) {
                                programmer = PROGRAMMER_DUMMY;
+                               if (optarg[5] == '=')
+                                       dummytype = strdup(optarg + 6);
                        } else if (strncmp(optarg, "nic3com", 7) == 0) {
                                programmer = PROGRAMMER_NIC3COM;
                                if (optarg[7] == '=')
-- 
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to