Author: hailfinger
Date: 2009-05-31 19:57:34 +0200 (Sun, 31 May 2009)
New Revision: 556

Modified:
   trunk/chipset_enable.c
   trunk/dummyflasher.c
   trunk/flash.h
   trunk/flashchips.c
   trunk/ichspi.c
   trunk/it87spi.c
   trunk/sb600spi.c
   trunk/spi.c
   trunk/wbsio_spi.c
Log:
Add bus type annotation to struct flashchips. Right now, the annotation
only differentiates between SPI and non-SPI. Anyone who knows more about
a specific flash chip should feel free to update it.

The existing flashbus variable was abused to denote the SPI controller
type. Use an aptly named variable for that purpose.

Once this patch is merged, the chipset/programmer init functions can set
supported flash chip types and flashrom can automatically select only
matching probe/read/erase/write functions.
A side benefit of that will be the elimination of the Winbond W29EE011
vs. AMIC A49LF040A conflict.

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


Modified: trunk/chipset_enable.c
===================================================================
--- trunk/chipset_enable.c      2009-05-29 12:55:31 UTC (rev 555)
+++ trunk/chipset_enable.c      2009-05-31 17:57:34 UTC (rev 556)
@@ -42,8 +42,7 @@
  * Eventually, this will become an array when multiple flash support works.
  */
 
-flashbus_t flashbus = BUS_TYPE_LPC;
-void *spibar = NULL;
+enum chipbustype buses_supported = CHIP_BUSTYPE_UNKNOWN;
 
 extern int ichspi_lock;
 
@@ -218,7 +217,7 @@
        printf_debug("0x6c: 0x%04x     (CLOCK/DEBUG)\n",
                     mmio_readw(spibar + 0x6c));
 
-       flashbus = BUS_TYPE_VIA_SPI;
+       spi_controller = SPI_CONTROLLER_VIA;
        ich_init_opcodes();
 
        return 0;
@@ -269,17 +268,17 @@
 
        switch (ich_generation) {
        case 7:
-               flashbus = BUS_TYPE_ICH7_SPI;
+               spi_controller = SPI_CONTROLLER_ICH7;
                spibar_offset = 0x3020;
                break;
        case 8:
-               flashbus = BUS_TYPE_ICH9_SPI;
+               spi_controller = SPI_CONTROLLER_ICH9;
                spibar_offset = 0x3020;
                break;
        case 9:
        case 10:
        default:                /* Future version might behave the same */
-               flashbus = BUS_TYPE_ICH9_SPI;
+               spi_controller = SPI_CONTROLLER_ICH9;
                spibar_offset = 0x3800;
                break;
        }
@@ -290,8 +289,8 @@
        /* Assign Virtual Address */
        spibar = rcrb + spibar_offset;
 
-       switch (flashbus) {
-       case BUS_TYPE_ICH7_SPI:
+       switch (spi_controller) {
+       case SPI_CONTROLLER_ICH7:
                printf_debug("0x00: 0x%04x     (SPIS)\n",
                             mmio_readw(spibar + 0));
                printf_debug("0x02: 0x%04x     (SPIC)\n",
@@ -329,7 +328,7 @@
                }
                ich_init_opcodes();
                break;
-       case BUS_TYPE_ICH9_SPI:
+       case SPI_CONTROLLER_ICH9:
                tmp2 = mmio_readw(spibar + 4);
                printf_debug("0x04: 0x%04x (HSFS)\n", tmp2);
                printf_debug("FLOCKDN %i, ", (tmp2 >> 15 & 1));
@@ -729,7 +728,7 @@
        }
 
        if (has_spi)
-               flashbus = BUS_TYPE_SB600_SPI;
+               spi_controller = SPI_CONTROLLER_SB600;
 
        /* Read ROM strap override register. */
        OUTB(0x8f, 0xcd6);

Modified: trunk/dummyflasher.c
===================================================================
--- trunk/dummyflasher.c        2009-05-29 12:55:31 UTC (rev 555)
+++ trunk/dummyflasher.c        2009-05-31 17:57:34 UTC (rev 556)
@@ -29,7 +29,7 @@
 int dummy_init(void)
 {
        printf_debug("%s\n", __func__);
-       flashbus = BUS_TYPE_DUMMY_SPI;
+       spi_controller = SPI_CONTROLLER_DUMMY;
        return 0; 
 }
 

Modified: trunk/flash.h
===================================================================
--- trunk/flash.h       2009-05-29 12:55:31 UTC (rev 555)
+++ trunk/flash.h       2009-05-31 17:57:34 UTC (rev 556)
@@ -120,9 +120,21 @@
 
 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
 
+enum chipbustype {
+       CHIP_BUSTYPE_PARALLEL   = 1 << 0,
+       CHIP_BUSTYPE_LPC        = 1 << 1,
+       CHIP_BUSTYPE_FWH        = 1 << 2,
+       CHIP_BUSTYPE_SPI        = 1 << 3,
+       CHIP_BUSTYPE_NONSPI     = CHIP_BUSTYPE_PARALLEL | CHIP_BUSTYPE_LPC | 
CHIP_BUSTYPE_FWH,
+       CHIP_BUSTYPE_UNKNOWN    = CHIP_BUSTYPE_PARALLEL | CHIP_BUSTYPE_LPC | 
CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_SPI,
+};
+
 struct flashchip {
        const char *vendor;
        const char *name;
+
+       enum chipbustype bustype;
+
        /*
         * With 32bit manufacture_id and model_id we can cover IDs up to
         * (including) the 4th bank of JEDEC JEP106W Standard Manufacturer's
@@ -592,25 +604,12 @@
 void print_supported_boards(void);
 
 /* chipset_enable.c */
+extern enum chipbustype buses_supported;
 int chipset_flash_enable(void);
 void print_supported_chipsets(void);
 
 extern unsigned long flashbase;
 
-typedef enum {
-       BUS_TYPE_LPC,
-       BUS_TYPE_ICH7_SPI,
-       BUS_TYPE_ICH9_SPI,
-       BUS_TYPE_IT87XX_SPI,
-       BUS_TYPE_SB600_SPI,
-       BUS_TYPE_VIA_SPI,
-       BUS_TYPE_WBSIO_SPI,
-       BUS_TYPE_DUMMY_SPI
-} flashbus_t;
-
-extern flashbus_t flashbus;
-extern void *spibar;
-
 /* physmap.c */
 void *physmap(const char *descr, unsigned long phys_addr, size_t len);
 void physunmap(void *virt_addr, size_t len);
@@ -691,6 +690,18 @@
 extern char *lb_part, *lb_vendor;
 
 /* spi.c */
+enum spi_controller {
+       SPI_CONTROLLER_NONE,
+       SPI_CONTROLLER_ICH7,
+       SPI_CONTROLLER_ICH9,
+       SPI_CONTROLLER_IT87XX,
+       SPI_CONTROLLER_SB600,
+       SPI_CONTROLLER_VIA,
+       SPI_CONTROLLER_WBSIO,
+       SPI_CONTROLLER_DUMMY,
+};
+extern enum spi_controller spi_controller;
+extern void *spibar;
 int probe_spi_rdid(struct flashchip *flash);
 int probe_spi_rdid4(struct flashchip *flash);
 int probe_spi_rems(struct flashchip *flash);

Modified: trunk/flashchips.c
===================================================================
--- trunk/flashchips.c  2009-05-29 12:55:31 UTC (rev 555)
+++ trunk/flashchips.c  2009-05-31 17:57:34 UTC (rev 556)
@@ -40,6 +40,7 @@
        {
                .vendor         = "AMD",
                .name           = "Am29F002(N)BB",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = AMD_ID,
                .model_id       = AM_29F002BB,
                .total_size     = 256,
@@ -54,6 +55,7 @@
        {
                .vendor         = "AMD",
                .name           = "Am29F002(N)BT",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = AMD_ID,
                .model_id       = AM_29F002BT,
                .total_size     = 256,
@@ -68,6 +70,7 @@
        {
                .vendor         = "AMD",
                .name           = "Am29F016D",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = AMD_ID,
                .model_id       = AM_29F016D,
                .total_size     = 2048,
@@ -82,6 +85,7 @@
        {
                .vendor         = "AMD",
                .name           = "Am29F040B",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = AMD_ID,
                .model_id       = AM_29F040B,
                .total_size     = 512,
@@ -96,6 +100,7 @@
        {
                .vendor         = "AMD",
                .name           = "Am29F080B",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = 0x01,
                .model_id       = 0xd5,
                .total_size     = 1024,
@@ -110,6 +115,7 @@
        {
                .vendor         = "AMD",
                .name           = "Am29LV040B",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = AMD_ID,
                .model_id       = AM_29LV040B,
                .total_size     = 512,
@@ -124,6 +130,7 @@
        {
                .vendor         = "AMD",
                .name           = "Am29LV081B",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = 0x01,
                .model_id       = 0x38,
                .total_size     = 1024,
@@ -138,6 +145,7 @@
        {
                .vendor         = "ASD",
                .name           = "AE49F2008",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ASD_ID,
                .model_id       = ASD_AE49F2008,
                .total_size     = 256,
@@ -152,6 +160,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT25DF021",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_25DF021,
                .total_size     = 256,
@@ -166,6 +175,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT25DF041A",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_25DF041A,
                .total_size     = 512,
@@ -180,6 +190,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT25DF081",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_25DF081,
                .total_size     = 1024,
@@ -194,6 +205,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT25DF161",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_25DF161,
                .total_size     = 2048,
@@ -208,6 +220,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT25DF321",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_25DF321,
                .total_size     = 4096,
@@ -222,6 +235,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT25DF321A",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_25DF321A,
                .total_size     = 4096,
@@ -236,6 +250,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT25DF641",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_25DF641,
                .total_size     = 8192,
@@ -250,6 +265,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT25F512B",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_25F512B,
                .total_size     = 64,
@@ -264,6 +280,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT25FS010",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_25FS010,
                .total_size     = 128,
@@ -278,6 +295,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT25FS040",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_25FS040,
                .total_size     = 512,
@@ -292,6 +310,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT26DF041",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_26DF041,
                .total_size     = 512,
@@ -306,6 +325,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT26DF081A",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_26DF081A,
                .total_size     = 1024,
@@ -320,6 +340,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT26DF161",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_26DF161,
                .total_size     = 2048,
@@ -334,6 +355,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT26DF161A",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_26DF161A,
                .total_size     = 2048,
@@ -349,6 +371,7 @@
        /*{
                .vendor         = "Atmel",
                .name           = "AT26DF321",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_26DF321,
                .total_size     = 4096,
@@ -363,6 +386,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT26F004",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_26F004,
                .total_size     = 512,
@@ -377,6 +401,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT29C010A",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_29C010A,
                .total_size     = 128,
@@ -391,6 +416,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT29C020",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_29C020,
                .total_size     = 256,
@@ -405,6 +431,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT29C040A",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_29C040A,
                .total_size     = 512,
@@ -419,6 +446,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT45CS1282",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_45CS1282,
                .total_size     = 16896 /* No power of two sizes */,
@@ -433,6 +461,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT45DB011D",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_45DB011D,
                .total_size     = 128 /* Size can only be determined from 
status register */,
@@ -447,6 +476,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT45DB021D",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_45DB021D,
                .total_size     = 256 /* Size can only be determined from 
status register */,
@@ -461,6 +491,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT45DB041D",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_45DB041D,
                .total_size     = 512 /* Size can only be determined from 
status register */,
@@ -475,6 +506,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT45DB081D",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_45DB081D,
                .total_size     = 1024 /* Size can only be determined from 
status register */,
@@ -489,6 +521,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT45DB161D",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_45DB161D,
                .total_size     = 2048 /* Size can only be determined from 
status register */,
@@ -503,6 +536,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT45DB321C",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_45DB321C,
                .total_size     = 4224 /* No power of two sizes */,
@@ -517,6 +551,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT45DB321D",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_45DB321D,
                .total_size     = 4096 /* Size can only be determined from 
status register */,
@@ -531,6 +566,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT45DB642D",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_45DB642D,
                .total_size     = 8192 /* Size can only be determined from 
status register */,
@@ -545,6 +581,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT49BV512",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_49BV512,
                .total_size     = 64,
@@ -559,6 +596,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT49F002(N)",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_49F002N,
                .total_size     = 256,
@@ -573,6 +611,7 @@
        {
                .vendor         = "Atmel",
                .name           = "AT49F002(N)T",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = AT_49F002NT,
                .total_size     = 256,
@@ -587,6 +626,7 @@
        {
                .vendor         = "AMIC",
                .name           = "A25L40P",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = AMIC_ID,
                .model_id       = AMIC_A25L40P,
                .total_size     = 512,
@@ -601,6 +641,7 @@
        {
                .vendor         = "AMIC",
                .name           = "A29002B",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = AMIC_ID_NOPREFIX,
                .model_id       = AMIC_A29002B,
                .total_size     = 256,
@@ -615,6 +656,7 @@
        {
                .vendor         = "AMIC",
                .name           = "A29002T",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = AMIC_ID_NOPREFIX,
                .model_id       = AMIC_A29002T,
                .total_size     = 256,
@@ -629,6 +671,7 @@
        {
                .vendor         = "AMIC",
                .name           = "A29040B",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = AMIC_ID_NOPREFIX,
                .model_id       = AMIC_A29040B,
                .total_size     = 512,
@@ -643,6 +686,7 @@
        {
                .vendor         = "AMIC",
                .name           = "A49LF040A",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = AMIC_ID_NOPREFIX,
                .model_id       = AMIC_A49LF040A,
                .total_size     = 512,
@@ -657,6 +701,7 @@
        {
                .vendor         = "EMST",
                .name           = "F49B002UA",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = EMST_ID,
                .model_id       = EMST_F49B002UA,
                .total_size     = 256,
@@ -671,6 +716,7 @@
        {
                .vendor         = "EON",
                .name           = "EN29F002(A)(N)B",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = EON_ID,
                .model_id       = EN_29F002B,
                .total_size     = 256,
@@ -685,6 +731,7 @@
        {
                .vendor         = "EON",
                .name           = "EN29F002(A)(N)T",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = EON_ID,
                .model_id       = EN_29F002T,
                .total_size     = 256,
@@ -699,6 +746,7 @@
        {
                .vendor         = "Fujitsu",
                .name           = "MBM29F004BC",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = FUJITSU_ID,
                .model_id       = MBM29F004BC,
                .total_size     = 512,
@@ -713,6 +761,7 @@
        {
                .vendor         = "Fujitsu",
                .name           = "MBM29F004TC",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = FUJITSU_ID,
                .model_id       = MBM29F004TC,
                .total_size     = 512,
@@ -727,6 +776,7 @@
        {
                .vendor         = "Fujitsu",
                .name           = "MBM29F400BC",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = FUJITSU_ID,
                .model_id       = MBM29F400BC,
                .total_size     = 512,
@@ -741,6 +791,7 @@
        {
                .vendor         = "Fujitsu",
                .name           = "MBM29F400TC",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = FUJITSU_ID,
                .model_id       = MBM29F400TC,
                .total_size     = 512,
@@ -755,6 +806,7 @@
        {
                .vendor         = "Intel",
                .name           = "28F001BX-B",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = INTEL_ID,
                .model_id       = P28F001BXB,
                .total_size     = 128,
@@ -769,6 +821,7 @@
        {
                .vendor         = "Intel",
                .name           = "28F001BX-T",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = INTEL_ID,
                .model_id       = P28F001BXT,
                .total_size     = 128,
@@ -783,6 +836,7 @@
        {
                .vendor         = "Intel",
                .name           = "82802AB",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = INTEL_ID,
                .model_id       = 173,
                .total_size     = 512,
@@ -797,6 +851,7 @@
        {
                .vendor         = "Intel",
                .name           = "82802AC",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = INTEL_ID,
                .model_id       = 172,
                .total_size     = 1024,
@@ -811,6 +866,7 @@
        {
                .vendor         = "Macronix",
                .name           = "MX25L512",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = MX_ID,
                .model_id       = MX_25L512,
                .total_size     = 64,
@@ -825,6 +881,7 @@
        {
                .vendor         = "Macronix",
                .name           = "MX25L1005",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = MX_ID,
                .model_id       = MX_25L1005,
                .total_size     = 128,
@@ -839,6 +896,7 @@
        {
                .vendor         = "Macronix",
                .name           = "MX25L2005",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = MX_ID,
                .model_id       = MX_25L2005,
                .total_size     = 256,
@@ -853,6 +911,7 @@
        {
                .vendor         = "Macronix",
                .name           = "MX25L4005",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = MX_ID,
                .model_id       = MX_25L4005,
                .total_size     = 512,
@@ -867,6 +926,7 @@
        {
                .vendor         = "Macronix",
                .name           = "MX25L8005",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = MX_ID,
                .model_id       = MX_25L8005,
                .total_size     = 1024,
@@ -881,6 +941,7 @@
        {
                .vendor         = "Macronix",
                .name           = "MX25L1605",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = MX_ID,
                .model_id       = MX_25L1605,
                .total_size     = 2048,
@@ -895,6 +956,7 @@
        {
                .vendor         = "Macronix",
                .name           = "MX25L1635D",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = MX_ID,
                .model_id       = MX_25L1635D,
                .total_size     = 2048,
@@ -909,6 +971,7 @@
        {
                .vendor         = "Macronix",
                .name           = "MX25L3205",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = MX_ID,
                .model_id       = MX_25L3205,
                .total_size     = 4096,
@@ -923,6 +986,7 @@
        {
                .vendor         = "Macronix",
                .name           = "MX25L3235D",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = MX_ID,
                .model_id       = MX_25L3235D,
                .total_size     = 4096,
@@ -937,6 +1001,7 @@
        {
                .vendor         = "Macronix",
                .name           = "MX25L6405",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = MX_ID,
                .model_id       = MX_25L6405,
                .total_size     = 8192,
@@ -951,6 +1016,7 @@
        {
                .vendor         = "Macronix",
                .name           = "MX25L12805",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = MX_ID,
                .model_id       = MX_25L12805,
                .total_size     = 16384,
@@ -965,6 +1031,7 @@
        {
                .vendor         = "Macronix",
                .name           = "MX29F002B",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = MX_ID,
                .model_id       = MX_29F002B,
                .total_size     = 256,
@@ -979,6 +1046,7 @@
        {
                .vendor         = "Macronix",
                .name           = "MX29F002T",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = MX_ID,
                .model_id       = MX_29F002T,
                .total_size     = 256,
@@ -993,6 +1061,7 @@
        {
                .vendor         = "Macronix",
                .name           = "MX29LV040C",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = MX_ID,
                .model_id       = MX_29LV040C,
                .total_size     = 512,
@@ -1007,6 +1076,7 @@
        {
                .vendor         = "Numonyx",
                .name           = "M25PE10",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ST_ID,
                .model_id       = 0x8011,
                .total_size     = 128,
@@ -1021,6 +1091,7 @@
        {
                .vendor         = "Numonyx",
                .name           = "M25PE20",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ST_ID,
                .model_id       = 0x8012,
                .total_size     = 256,
@@ -1035,6 +1106,7 @@
        {
                .vendor         = "Numonyx",
                .name           = "M25PE40",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ST_ID,
                .model_id       = 0x8013,
                .total_size     = 256,
@@ -1049,6 +1121,7 @@
        {
                .vendor         = "Numonyx",
                .name           = "M25PE80",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ST_ID,
                .model_id       = 0x8014,
                .total_size     = 1024,
@@ -1063,6 +1136,7 @@
        {
                .vendor         = "Numonyx",
                .name           = "M25PE16",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ST_ID,
                .model_id       = 0x8015,
                .total_size     = 2048,
@@ -1077,6 +1151,7 @@
        {
                .vendor         = "PMC",
                .name           = "Pm25LV010",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = PMC_ID,
                .model_id       = PMC_25LV010,
                .total_size     = 128,
@@ -1091,6 +1166,7 @@
        {
                .vendor         = "PMC",
                .name           = "Pm25LV016B",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = PMC_ID,
                .model_id       = PMC_25LV016B,
                .total_size     = 2048,
@@ -1105,6 +1181,7 @@
        {
                .vendor         = "PMC",
                .name           = "Pm25LV020",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = PMC_ID,
                .model_id       = PMC_25LV020,
                .total_size     = 256,
@@ -1119,6 +1196,7 @@
        {
                .vendor         = "PMC",
                .name           = "Pm25LV040",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = PMC_ID,
                .model_id       = PMC_25LV040,
                .total_size     = 512,
@@ -1133,6 +1211,7 @@
        {
                .vendor         = "PMC",
                .name           = "Pm25LV080B",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = PMC_ID,
                .model_id       = PMC_25LV080B,
                .total_size     = 1024,
@@ -1147,6 +1226,7 @@
        {
                .vendor         = "PMC",
                .name           = "Pm25LV512",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = PMC_ID,
                .model_id       = PMC_25LV512,
                .total_size     = 64,
@@ -1161,6 +1241,7 @@
        {
                .vendor         = "PMC",
                .name           = "Pm39LV010",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = PMC_ID_NOPREFIX,
                .model_id       = PMC_39F010,
                .total_size     = 128,
@@ -1175,6 +1256,7 @@
        {
                .vendor         = "PMC",
                .name           = "Pm49FL002",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = PMC_ID_NOPREFIX,
                .model_id       = PMC_49FL002,
                .total_size     = 256,
@@ -1189,6 +1271,7 @@
        {
                .vendor         = "PMC",
                .name           = "Pm49FL004",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = PMC_ID_NOPREFIX,
                .model_id       = PMC_49FL004,
                .total_size     = 512,
@@ -1203,6 +1286,7 @@
        {
                .vendor         = "Sharp",
                .name           = "LHF00L04",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SHARP_ID,
                .model_id       = SHARP_LHF00L04,
                .total_size     = 1024,
@@ -1217,6 +1301,7 @@
        {
                .vendor         = "Spansion",
                .name           = "S25FL016A",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = SPANSION_ID,
                .model_id       = SPANSION_S25FL016A,
                .total_size     = 2048,
@@ -1231,6 +1316,7 @@
        {
                .vendor         = "SST",
                .name           = "SST25VF016B",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_25VF016B,
                .total_size     = 2048,
@@ -1245,6 +1331,7 @@
        {
                .vendor         = "SST",
                .name           = "SST25VF032B",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_25VF032B,
                .total_size     = 4096,
@@ -1259,6 +1346,7 @@
        {
                .vendor         = "SST",
                .name           = "SST25VF040B",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_25VF040B,
                .total_size     = 512,
@@ -1273,6 +1361,7 @@
        {
                .vendor         = "SST",
                .name           = "SST25VF040.REMS",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = 0xbf,
                .model_id       = 0x44,
                .total_size     = 512,
@@ -1287,6 +1376,7 @@
        {
                .vendor         = "SST",
                .name           = "SST25VF040B.REMS",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = 0xbf,
                .model_id       = 0x8d,
                .total_size     = 512,
@@ -1301,6 +1391,7 @@
        {
                .vendor         = "SST",
                .name           = "SST25VF080B",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_25VF080B,
                .total_size     = 1024,
@@ -1315,6 +1406,7 @@
        {
                .vendor         = "SST",
                .name           = "SST28SF040A",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_28SF040,
                .total_size     = 512,
@@ -1329,6 +1421,7 @@
        {
                .vendor         = "SST",
                .name           = "SST29EE010",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_29EE010,
                .total_size     = 128,
@@ -1343,6 +1436,7 @@
        {
                .vendor         = "SST",
                .name           = "SST29LE010",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_29LE010,
                .total_size     = 128,
@@ -1357,6 +1451,7 @@
        {
                .vendor         = "SST",
                .name           = "SST29EE020A",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_29EE020A,
                .total_size     = 256,
@@ -1371,6 +1466,7 @@
        {
                .vendor         = "SST",
                .name           = "SST29LE020",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_29LE020,
                .total_size     = 256,
@@ -1385,6 +1481,7 @@
        {
                .vendor         = "SST",
                .name           = "SST39SF010A",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_39SF010,
                .total_size     = 128,
@@ -1399,6 +1496,7 @@
        {
                .vendor         = "SST",
                .name           = "SST39SF020A",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_39SF020,
                .total_size     = 256,
@@ -1413,6 +1511,7 @@
        {
                .vendor         = "SST",
                .name           = "SST39SF040",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_39SF040,
                .total_size     = 512,
@@ -1427,6 +1526,7 @@
        {
                .vendor         = "SST",
                .name           = "SST39VF512",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_39VF512,
                .total_size     = 64,
@@ -1441,6 +1541,7 @@
        {
                .vendor         = "SST",
                .name           = "SST39VF010",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_39VF010,
                .total_size     = 128,
@@ -1455,6 +1556,7 @@
        {
                .vendor         = "SST",
                .name           = "SST39VF020",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_39VF020,
                .total_size     = 256,
@@ -1469,6 +1571,7 @@
        {
                .vendor         = "SST",
                .name           = "SST39VF040",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_39VF040,
                .total_size     = 512,
@@ -1483,6 +1586,7 @@
        {
                .vendor         = "SST",
                .name           = "SST39VF080",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = 0xbf,
                .model_id       = 0xd8,
                .total_size     = 1024,
@@ -1497,6 +1601,7 @@
        {
                .vendor         = "SST",
                .name           = "SST49LF002A/B",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_49LF002A,
                .total_size     = 256,
@@ -1511,6 +1616,7 @@
        {
                .vendor         = "SST",
                .name           = "SST49LF003A/B",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_49LF003A,
                .total_size     = 384,
@@ -1525,6 +1631,7 @@
        {
                .vendor         = "SST",
                .name           = "SST49LF004A/B",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_49LF004A,
                .total_size     = 512,
@@ -1539,6 +1646,7 @@
        {
                .vendor         = "SST",
                .name           = "SST49LF004C",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_49LF004C,
                .total_size     = 512,
@@ -1553,6 +1661,7 @@
        {
                .vendor         = "SST",
                .name           = "SST49LF008A",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_49LF008A,
                .total_size     = 1024,
@@ -1567,6 +1676,7 @@
        {
                .vendor         = "SST",
                .name           = "SST49LF008C",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_49LF008C,
                .total_size     = 1024,
@@ -1581,6 +1691,7 @@
        {
                .vendor         = "SST",
                .name           = "SST49LF016C",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_49LF016C,
                .total_size     = 2048,
@@ -1595,6 +1706,7 @@
        {
                .vendor         = "SST",
                .name           = "SST49LF020",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_49LF020,
                .total_size     = 256,
@@ -1609,6 +1721,7 @@
        {
                .vendor         = "SST",
                .name           = "SST49LF020A",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_49LF020A,
                .total_size     = 256,
@@ -1623,6 +1736,7 @@
        {
                .vendor         = "SST",
                .name           = "SST49LF040",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_49LF040,
                .total_size     = 512,
@@ -1637,6 +1751,7 @@
        {
                .vendor         = "SST",
                .name           = "SST49LF040B",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_49LF040B,
                .total_size     = 512,
@@ -1651,6 +1766,7 @@
        {
                .vendor         = "SST",
                .name           = "SST49LF080A",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_49LF080A,
                .total_size     = 1024,
@@ -1665,6 +1781,7 @@
        {
                .vendor         = "SST",
                .name           = "SST49LF160C",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SST_ID,
                .model_id       = SST_49LF160C,
                .total_size     = 2048,
@@ -1679,6 +1796,7 @@
        {
                .vendor         = "ST",
                .name           = "M25P05-A",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M25P05A,
                .total_size     = 64,
@@ -1693,6 +1811,7 @@
        {
                .vendor         = "ST",
                .name           = "M25P10-A",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M25P10A,
                .total_size     = 128,
@@ -1707,6 +1826,7 @@
        {
                .vendor         = "ST",
                .name           = "M25P20",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M25P20,
                .total_size     = 256,
@@ -1721,6 +1841,7 @@
        {
                .vendor         = "ST",
                .name           = "M25P40",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M25P40,
                .total_size     = 512,
@@ -1735,6 +1856,7 @@
        {
                .vendor         = "ST",
                .name           = "M25P40-old",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M25P40_RES,
                .total_size     = 512,
@@ -1749,6 +1871,7 @@
        {
                .vendor         = "ST",
                .name           = "M25P80",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M25P80,
                .total_size     = 1024,
@@ -1763,6 +1886,7 @@
        {
                .vendor         = "ST",
                .name           = "M25P16",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M25P16,
                .total_size     = 2048,
@@ -1777,6 +1901,7 @@
        {
                .vendor         = "ST",
                .name           = "M25P32",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M25P32,
                .total_size     = 4096,
@@ -1791,6 +1916,7 @@
        {
                .vendor         = "ST",
                .name           = "M25P64",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M25P64,
                .total_size     = 8192,
@@ -1805,6 +1931,7 @@
        {
                .vendor         = "ST",
                .name           = "M25P128",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M25P128,
                .total_size     = 16384,
@@ -1819,6 +1946,7 @@
        {
                .vendor         = "ST",
                .name           = "M29F002B",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M29F002B,
                .total_size     = 256,
@@ -1833,6 +1961,7 @@
        {
                .vendor         = "ST",
                .name           = "M29F002T/NT",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M29F002T,
                .total_size     = 256,
@@ -1847,6 +1976,7 @@
        {
                .vendor         = "ST",
                .name           = "M29F040B",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M29F040B,
                .total_size     = 512,
@@ -1861,6 +1991,7 @@
        {
                .vendor         = "ST",
                .name           = "M29F400BT",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M29F400BT,
                .total_size     = 512,
@@ -1875,6 +2006,7 @@
        {
                .vendor         = "ST",
                .name           = "M29W010B",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M29W010B,
                .total_size     = 128,
@@ -1889,6 +2021,7 @@
        {
                .vendor         = "ST",
                .name           = "M29W040B",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M29W040B,
                .total_size     = 512,
@@ -1903,6 +2036,7 @@
        {
                .vendor         = "ST",
                .name           = "M50FLW040A",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M50FLW040A,
                .total_size     = 512,
@@ -1917,6 +2051,7 @@
        {
                .vendor         = "ST",
                .name           = "M50FLW040B",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M50FLW040B,
                .total_size     = 512,
@@ -1931,6 +2066,7 @@
        {
                .vendor         = "ST",
                .name           = "M50FLW080A",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M50FLW080A,
                .total_size     = 1024,
@@ -1945,6 +2081,7 @@
        {
                .vendor         = "ST",
                .name           = "M50FLW080B",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M50FLW080B,
                .total_size     = 1024,
@@ -1959,6 +2096,7 @@
        {
                .vendor         = "ST",
                .name           = "M50FW002",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M50FW002,
                .total_size     = 256,
@@ -1973,6 +2111,7 @@
        {
                .vendor         = "ST",
                .name           = "M50FW016",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M50FW016,
                .total_size     = 2048,
@@ -1987,6 +2126,7 @@
        {
                .vendor         = "ST",
                .name           = "M50FW040",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M50FW040,
                .total_size     = 512,
@@ -2001,6 +2141,7 @@
        {
                .vendor         = "ST",
                .name           = "M50FW080",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M50FW080,
                .total_size     = 1024,
@@ -2015,6 +2156,7 @@
        {
                .vendor         = "ST",
                .name           = "M50LPW116",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = ST_ID,
                .model_id       = ST_M50LPW116,
                .total_size     = 2048,
@@ -2029,6 +2171,7 @@
        {
                .vendor         = "SyncMOS",
                .name           = "S29C31004T",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SYNCMOS_ID,
                .model_id       = S29C31004T,
                .total_size     = 512,
@@ -2043,6 +2186,7 @@
        {
                .vendor         = "SyncMOS",
                .name           = "S29C51001T",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SYNCMOS_ID,
                .model_id       = S29C51001T,
                .total_size     = 128,
@@ -2057,6 +2201,7 @@
        {
                .vendor         = "SyncMOS",
                .name           = "S29C51002T",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SYNCMOS_ID,
                .model_id       = S29C51002T,
                .total_size     = 256,
@@ -2071,6 +2216,7 @@
        {
                .vendor         = "SyncMOS",
                .name           = "S29C51004T",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = SYNCMOS_ID,
                .model_id       = S29C51004T,
                .total_size     = 512,
@@ -2085,6 +2231,7 @@
        {
                .vendor         = "TI",
                .name           = "TMS29F002RB",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = TI_OLD_ID,
                .model_id       = TI_TMS29F002RB,
                .total_size     = 256,
@@ -2099,6 +2246,7 @@
        {
                .vendor         = "TI",
                .name           = "TMS29F002RT",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = TI_OLD_ID,
                .model_id       = TI_TMS29F002RT,
                .total_size     = 256,
@@ -2113,6 +2261,7 @@
        {
                .vendor         = "Winbond",
                .name           = "W25x10",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = WINBOND_NEX_ID,
                .model_id       = W_25X10,
                .total_size     = 128,
@@ -2127,6 +2276,7 @@
        {
                .vendor         = "Winbond",
                .name           = "W25x20",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = WINBOND_NEX_ID,
                .model_id       = W_25X20,
                .total_size     = 256,
@@ -2141,6 +2291,7 @@
        {
                .vendor         = "Winbond",
                .name           = "W25x40",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = WINBOND_NEX_ID,
                .model_id       = W_25X40,
                .total_size     = 512,
@@ -2155,6 +2306,7 @@
        {
                .vendor         = "Winbond",
                .name           = "W25x80",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = WINBOND_NEX_ID,
                .model_id       = W_25X80,
                .total_size     = 1024,
@@ -2169,6 +2321,7 @@
        {
                .vendor         = "Winbond",
                .name           = "W29C011",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = WINBOND_ID,
                .model_id       = W_29C011,
                .total_size     = 128,
@@ -2183,6 +2336,7 @@
        {
                .vendor         = "Winbond",
                .name           = "W29C020C",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = WINBOND_ID,
                .model_id       = W_29C020C,
                .total_size     = 256,
@@ -2197,6 +2351,7 @@
        {
                .vendor         = "Winbond",
                .name           = "W29C040P",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = WINBOND_ID,
                .model_id       = W_29C040P,
                .total_size     = 512,
@@ -2211,6 +2366,7 @@
        {
                .vendor         = "Winbond",
                .name           = "W29EE011",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = WINBOND_ID,
                .model_id       = W_29C011,
                .total_size     = 128,
@@ -2225,6 +2381,7 @@
        {
                .vendor         = "Winbond",
                .name           = "W39V040A",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = WINBOND_ID,
                .model_id       = W_39V040A,
                .total_size     = 512,
@@ -2239,6 +2396,7 @@
        {
                .vendor         = "Winbond",
                .name           = "W39V040B",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = WINBOND_ID,
                .model_id       = W_39V040B,
                .total_size     = 512,
@@ -2253,6 +2411,7 @@
        {
                .vendor         = "Winbond",
                .name           = "W39V040C",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = WINBOND_ID,
                .model_id       = 0x50,
                .total_size     = 512,
@@ -2267,6 +2426,7 @@
        {
                .vendor         = "Winbond",
                .name           = "W39V040FA",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = WINBOND_ID,
                .model_id       = W_39V040FA,
                .total_size     = 512,
@@ -2281,6 +2441,7 @@
        {
                .vendor         = "Winbond",
                .name           = "W39V080A",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = WINBOND_ID,
                .model_id       = W_39V080A,
                .total_size     = 1024,
@@ -2295,6 +2456,7 @@
        {
                .vendor         = "Winbond",
                .name           = "W49F002U",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = WINBOND_ID,
                .model_id       = W_49F002U,
                .total_size     = 256,
@@ -2309,6 +2471,7 @@
        {
                .vendor         = "Winbond",
                .name           = "W49V002A",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = WINBOND_ID,
                .model_id       = W_49V002A,
                .total_size     = 256,
@@ -2323,6 +2486,7 @@
        {
                .vendor         = "Winbond",
                .name           = "W49V002FA",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = WINBOND_ID,
                .model_id       = W_49V002FA,
                .total_size     = 256,
@@ -2337,6 +2501,7 @@
        {
                .vendor         = "Winbond",
                .name           = "W39V080FA",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = WINBOND_ID,
                .model_id       = W_39V080FA,
                .total_size     = 1024,
@@ -2351,6 +2516,7 @@
        {
                .vendor         = "Winbond",
                .name           = "W39V080FA (dual mode)",
+               .bustype        = CHIP_BUSTYPE_NONSPI,
                .manufacture_id = WINBOND_ID,
                .model_id       = W_39V080FA_DM,
                .total_size     = 512,
@@ -2365,6 +2531,7 @@
        {
                .vendor         = "Atmel",
                .name           = "unknown Atmel SPI chip",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
                .model_id       = GENERIC_DEVICE_ID,
                .total_size     = 0,
@@ -2379,6 +2546,7 @@
        {
                .vendor         = "EON",
                .name           = "unknown EON SPI chip",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = EON_ID_NOPREFIX,
                .model_id       = GENERIC_DEVICE_ID,
                .total_size     = 0,
@@ -2393,6 +2561,7 @@
        {
                .vendor         = "Macronix",
                .name           = "unknown Macronix SPI chip",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = MX_ID,
                .model_id       = GENERIC_DEVICE_ID,
                .total_size     = 0,
@@ -2407,6 +2576,7 @@
        {
                .vendor         = "PMC",
                .name           = "unknown PMC SPI chip",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = PMC_ID,
                .model_id       = GENERIC_DEVICE_ID,
                .total_size     = 0,
@@ -2421,6 +2591,7 @@
        {
                .vendor         = "SST",
                .name           = "unknown SST SPI chip",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = SST_ID,
                .model_id       = GENERIC_DEVICE_ID,
                .total_size     = 0,
@@ -2435,6 +2606,7 @@
        {
                .vendor         = "ST",
                .name           = "unknown ST SPI chip",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ST_ID,
                .model_id       = GENERIC_DEVICE_ID,
                .total_size     = 0,

Modified: trunk/ichspi.c
===================================================================
--- trunk/ichspi.c      2009-05-29 12:55:31 UTC (rev 555)
+++ trunk/ichspi.c      2009-05-31 17:57:34 UTC (rev 556)
@@ -223,15 +223,15 @@
                return -1;
        }
 
-       switch (flashbus) {
-       case BUS_TYPE_ICH7_SPI:
-       case BUS_TYPE_VIA_SPI:
+       switch (spi_controller) {
+       case SPI_CONTROLLER_ICH7:
+       case SPI_CONTROLLER_VIA:
                preop = REGREAD16(ICH7_REG_PREOP);
                optype = REGREAD16(ICH7_REG_OPTYPE);
                opmenu[0] = REGREAD32(ICH7_REG_OPMENU);
                opmenu[1] = REGREAD32(ICH7_REG_OPMENU + 4);
                break;
-       case BUS_TYPE_ICH9_SPI:
+       case SPI_CONTROLLER_ICH9:
                preop = REGREAD16(ICH9_REG_PREOP);
                optype = REGREAD16(ICH9_REG_OPTYPE);
                opmenu[0] = REGREAD32(ICH9_REG_OPMENU);
@@ -305,15 +305,15 @@
        }
 
        printf_debug("\n%s: preop=%04x optype=%04x opmenu=%08x%08x\n", 
__func__, preop, optype, opmenu[0], opmenu[1]);
-       switch (flashbus) {
-       case BUS_TYPE_ICH7_SPI:
-       case BUS_TYPE_VIA_SPI:
+       switch (spi_controller) {
+       case SPI_CONTROLLER_ICH7:
+       case SPI_CONTROLLER_VIA:
                REGWRITE16(ICH7_REG_PREOP, preop);
                REGWRITE16(ICH7_REG_OPTYPE, optype);
                REGWRITE32(ICH7_REG_OPMENU, opmenu[0]);
                REGWRITE32(ICH7_REG_OPMENU + 4, opmenu[1]);
                break;
-       case BUS_TYPE_ICH9_SPI:
+       case SPI_CONTROLLER_ICH9:
                REGWRITE16(ICH9_REG_PREOP, preop);
                REGWRITE16(ICH9_REG_OPTYPE, optype);
                REGWRITE32(ICH9_REG_OPMENU, opmenu[0]);
@@ -599,12 +599,12 @@
 static int run_opcode(OPCODE op, uint32_t offset,
                      uint8_t datalength, uint8_t * data)
 {
-       switch (flashbus) {
-       case BUS_TYPE_VIA_SPI:
+       switch (spi_controller) {
+       case SPI_CONTROLLER_VIA:
                return ich7_run_opcode(op, offset, datalength, data, 16);
-       case BUS_TYPE_ICH7_SPI:
+       case SPI_CONTROLLER_ICH7:
                return ich7_run_opcode(op, offset, datalength, data, 64);
-       case BUS_TYPE_ICH9_SPI:
+       case SPI_CONTROLLER_ICH9:
                return ich9_run_opcode(op, offset, datalength, data);
        default:
                printf_debug("%s: unsupported chipset\n", __FUNCTION__);
@@ -688,7 +688,7 @@
        int page_size = flash->page_size;
        int maxdata = 64;
 
-       if (flashbus == BUS_TYPE_VIA_SPI) {
+       if (spi_controller == SPI_CONTROLLER_VIA) {
                maxdata = 16;
        }
 
@@ -723,7 +723,7 @@
                        break;
                }
 
-               if (flashbus == BUS_TYPE_VIA_SPI)
+               if (spi_controller == SPI_CONTROLLER_VIA)
                        maxdata = 16;
 
                for (j = 0; j < erase_size / page_size; j++) {

Modified: trunk/it87spi.c
===================================================================
--- trunk/it87spi.c     2009-05-29 12:55:31 UTC (rev 555)
+++ trunk/it87spi.c     2009-05-31 17:57:34 UTC (rev 556)
@@ -101,7 +101,7 @@
                it8716f_flashport = find_ite_spi_flash_port(ITE_SUPERIO_PORT2);
 
        if (it8716f_flashport)
-               flashbus = BUS_TYPE_IT87XX_SPI;
+               spi_controller = SPI_CONTROLLER_IT87XX;
 
        return (!it8716f_flashport);
 }

Modified: trunk/sb600spi.c
===================================================================
--- trunk/sb600spi.c    2009-05-29 12:55:31 UTC (rev 555)
+++ trunk/sb600spi.c    2009-05-31 17:57:34 UTC (rev 556)
@@ -25,7 +25,7 @@
 #include "flash.h"
 #include "spi.h"
 
-typedef struct _spi_controller {
+struct sb600_spi_controller {
        unsigned int spi_cntrl0;        /* 00h */
        unsigned int restrictedcmd1;    /* 04h */
        unsigned int restrictedcmd2;    /* 08h */
@@ -34,9 +34,9 @@
        unsigned int spi_cmdvalue1;     /* 14h */
        unsigned int spi_cmdvalue2;     /* 18h */
        unsigned int spi_fakeid;        /* 1Ch */
-} sb600_spi_controller;
+};
 
-sb600_spi_controller *spi_bar = NULL;
+struct sb600_spi_controller *spi_bar = NULL;
 uint8_t *sb600_spibar;
 
 int sb600_spi_read(struct flashchip *flash, uint8_t *buf)
@@ -114,7 +114,7 @@
 
        writecnt--;
 
-       spi_bar = (sb600_spi_controller *) sb600_spibar;
+       spi_bar = (struct sb600_spi_controller *) sb600_spibar;
 
        printf_debug("%s, cmd=%x, writecnt=%x, readcnt=%x\n",
                     __func__, cmd, writecnt, readcnt);

Modified: trunk/spi.c
===================================================================
--- trunk/spi.c 2009-05-29 12:55:31 UTC (rev 555)
+++ trunk/spi.c 2009-05-31 17:57:34 UTC (rev 556)
@@ -26,24 +26,27 @@
 #include "flash.h"
 #include "spi.h"
 
+enum spi_controller spi_controller = SPI_CONTROLLER_NONE;
+void *spibar = NULL;
+
 void spi_prettyprint_status_register(struct flashchip *flash);
 
 int spi_command(unsigned int writecnt, unsigned int readcnt,
                const unsigned char *writearr, unsigned char *readarr)
 {
-       switch (flashbus) {
-       case BUS_TYPE_IT87XX_SPI:
+       switch (spi_controller) {
+       case SPI_CONTROLLER_IT87XX:
                return it8716f_spi_command(writecnt, readcnt, writearr,
                                           readarr);
-       case BUS_TYPE_ICH7_SPI:
-       case BUS_TYPE_ICH9_SPI:
-       case BUS_TYPE_VIA_SPI:
+       case SPI_CONTROLLER_ICH7:
+       case SPI_CONTROLLER_ICH9:
+       case SPI_CONTROLLER_VIA:
                return ich_spi_command(writecnt, readcnt, writearr, readarr);
-       case BUS_TYPE_SB600_SPI:
+       case SPI_CONTROLLER_SB600:
                return sb600_spi_command(writecnt, readcnt, writearr, readarr);
-       case BUS_TYPE_WBSIO_SPI:
+       case SPI_CONTROLLER_WBSIO:
                return wbsio_spi_command(writecnt, readcnt, writearr, readarr);
-       case BUS_TYPE_DUMMY_SPI:
+       case SPI_CONTROLLER_DUMMY:
                return dummy_spi_command(writecnt, readcnt, writearr, readarr);
        default:
                printf_debug
@@ -122,10 +125,10 @@
        if (result)
                printf_debug("%s failed", __func__);
        if (result == SPI_INVALID_OPCODE) {
-               switch (flashbus) {
-               case BUS_TYPE_ICH7_SPI:
-               case BUS_TYPE_ICH9_SPI:
-               case BUS_TYPE_VIA_SPI:
+               switch (spi_controller) {
+               case SPI_CONTROLLER_ICH7:
+               case SPI_CONTROLLER_ICH9:
+               case SPI_CONTROLLER_VIA:
                        printf_debug(" due to SPI master limitation, ignoring"
                                     " and hoping it will be run as PREOP\n");
                        return 0;
@@ -202,13 +205,13 @@
 int probe_spi_rdid4(struct flashchip *flash)
 {
        /* only some SPI chipsets support 4 bytes commands */
-       switch (flashbus) {
-       case BUS_TYPE_ICH7_SPI:
-       case BUS_TYPE_ICH9_SPI:
-       case BUS_TYPE_VIA_SPI:
-       case BUS_TYPE_SB600_SPI:
-       case BUS_TYPE_WBSIO_SPI:
-       case BUS_TYPE_DUMMY_SPI:
+       switch (spi_controller) {
+       case SPI_CONTROLLER_ICH7:
+       case SPI_CONTROLLER_ICH9:
+       case SPI_CONTROLLER_VIA:
+       case SPI_CONTROLLER_SB600:
+       case SPI_CONTROLLER_WBSIO:
+       case SPI_CONTROLLER_DUMMY:
                return probe_spi_rdid_generic(flash, 4);
        default:
                printf_debug("4b ID not supported on this SPI controller\n");
@@ -281,7 +284,7 @@
        int ret;
 
        /* Read Status Register */
-       if (flashbus == BUS_TYPE_SB600_SPI) {
+       if (spi_controller == SPI_CONTROLLER_SB600) {
                /* SB600 uses a different way to read status register. */
                return sb600_read_status_register();
        } else {
@@ -569,10 +572,10 @@
        if (result)
                printf_debug("%s failed", __func__);
        if (result == SPI_INVALID_OPCODE) {
-               switch (flashbus) {
-               case BUS_TYPE_ICH7_SPI:
-               case BUS_TYPE_ICH9_SPI:
-               case BUS_TYPE_VIA_SPI:
+               switch (spi_controller) {
+               case SPI_CONTROLLER_ICH7:
+               case SPI_CONTROLLER_ICH9:
+               case SPI_CONTROLLER_VIA:
                        printf_debug(" due to SPI master limitation, ignoring"
                                     " and hoping it will be run as PREOP\n");
                        return 0;
@@ -651,16 +654,16 @@
 
 int spi_chip_read(struct flashchip *flash, uint8_t *buf)
 {
-       switch (flashbus) {
-       case BUS_TYPE_IT87XX_SPI:
+       switch (spi_controller) {
+       case SPI_CONTROLLER_IT87XX:
                return it8716f_spi_chip_read(flash, buf);
-       case BUS_TYPE_SB600_SPI:
+       case SPI_CONTROLLER_SB600:
                return sb600_spi_read(flash, buf);
-       case BUS_TYPE_ICH7_SPI:
-       case BUS_TYPE_ICH9_SPI:
-       case BUS_TYPE_VIA_SPI:
+       case SPI_CONTROLLER_ICH7:
+       case SPI_CONTROLLER_ICH9:
+       case SPI_CONTROLLER_VIA:
                return ich_spi_read(flash, buf);
-       case BUS_TYPE_WBSIO_SPI:
+       case SPI_CONTROLLER_WBSIO:
                return wbsio_spi_read(flash, buf);
        default:
                printf_debug
@@ -699,16 +702,16 @@
  */
 int spi_chip_write_256(struct flashchip *flash, uint8_t *buf)
 {
-       switch (flashbus) {
-       case BUS_TYPE_IT87XX_SPI:
+       switch (spi_controller) {
+       case SPI_CONTROLLER_IT87XX:
                return it8716f_spi_chip_write_256(flash, buf);
-       case BUS_TYPE_SB600_SPI:
+       case SPI_CONTROLLER_SB600:
                return sb600_spi_write_1(flash, buf);
-       case BUS_TYPE_ICH7_SPI:
-       case BUS_TYPE_ICH9_SPI:
-       case BUS_TYPE_VIA_SPI:
+       case SPI_CONTROLLER_ICH7:
+       case SPI_CONTROLLER_ICH9:
+       case SPI_CONTROLLER_VIA:
                return ich_spi_write_256(flash, buf);
-       case BUS_TYPE_WBSIO_SPI:
+       case SPI_CONTROLLER_WBSIO:
                return wbsio_spi_write_1(flash, buf);
        default:
                printf_debug
@@ -731,8 +734,8 @@
        unsigned char w[6] = {0xad, 0, 0, 0, buf[0], buf[1]};
        int result;
 
-       switch (flashbus) {
-       case BUS_TYPE_WBSIO_SPI:
+       switch (spi_controller) {
+       case SPI_CONTROLLER_WBSIO:
                fprintf(stderr, "%s: impossible with Winbond SPI masters,"
                                " degrading to byte program\n", __func__);
                return spi_chip_write_1(flash, buf);

Modified: trunk/wbsio_spi.c
===================================================================
--- trunk/wbsio_spi.c   2009-05-29 12:55:31 UTC (rev 555)
+++ trunk/wbsio_spi.c   2009-05-31 17:57:34 UTC (rev 556)
@@ -63,7 +63,7 @@
                        return 1;
 
        printf_debug("\nwbsio_spibase = 0x%x\n", wbsio_spibase);
-       flashbus = BUS_TYPE_WBSIO_SPI;
+       spi_controller = SPI_CONTROLLER_WBSIO;
        return 0;
 }
 


-- 
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to