Home | History | Annotate | Download | only in SpiFvbServices
      1 /** @file
      2 Initializes Platform Specific Drivers.
      3 
      4 Copyright (c) 2013-2015 Intel Corporation.
      5 
      6 This program and the accompanying materials
      7 are licensed and made available under the terms and conditions of the BSD License
      8 which accompanies this distribution.  The full text of the license may be found at
      9 http://opensource.org/licenses/bsd-license.php
     10 
     11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 
     15 **/
     16 
     17 #include "SpiFlashDevice.h"
     18 
     19 #define FLASH_SIZE  (FixedPcdGet32 (PcdFlashAreaSize))
     20 
     21 SPI_INIT_TABLE  mSpiInitTable[] = {
     22   //
     23   // Macronix 32Mbit part
     24   //
     25   {
     26     SPI_MX25L3205_ID1,
     27     SPI_MX25L3205_ID2,
     28     SPI_MX25L3205_ID3,
     29     {
     30       SPI_COMMAND_WRITE_ENABLE,
     31       SPI_COMMAND_WRITE_S_EN
     32     },
     33     {
     34       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_JEDEC_ID,    EnumSpiCycle33MHz, EnumSpiOperationJedecId},
     35       {EnumSpiOpcodeRead,        SPI_COMMAND_READ_ID,     EnumSpiCycle33MHz, EnumSpiOperationOther},
     36       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_WRITE_S,     EnumSpiCycle33MHz, EnumSpiOperationWriteStatus},
     37       {EnumSpiOpcodeWrite,       SPI_COMMAND_WRITE,       EnumSpiCycle33MHz, EnumSpiOperationProgramData_1_Byte},
     38       {EnumSpiOpcodeRead,        SPI_COMMAND_READ,        EnumSpiCycle20MHz, EnumSpiOperationReadData},
     39       {EnumSpiOpcodeWrite,       SPI_COMMAND_BLOCK_ERASE, EnumSpiCycle33MHz, EnumSpiOperationErase_64K_Byte},
     40       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_READ_S,      EnumSpiCycle33MHz, EnumSpiOperationReadStatus},
     41       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_CHIP_ERASE,  EnumSpiCycle33MHz, EnumSpiOperationFullChipErase}
     42     },
     43     0x400000 - FLASH_SIZE, // BIOS Start Offset
     44     FLASH_SIZE   // BIOS image size in flash
     45   },
     46   //
     47   // Winbond 32Mbit part
     48   //
     49   {
     50     SPI_W25X32_ID1,
     51     SF_DEVICE_ID0_W25QXX,
     52     SF_DEVICE_ID1_W25Q32,
     53     {
     54       SPI_COMMAND_WRITE_ENABLE,
     55       SPI_COMMAND_WRITE_S_EN
     56     },
     57     {
     58       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_JEDEC_ID,    EnumSpiCycle50MHz, EnumSpiOperationJedecId},
     59       {EnumSpiOpcodeRead,        SPI_COMMAND_READ_ID,     EnumSpiCycle50MHz, EnumSpiOperationOther},
     60       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_WRITE_S,     EnumSpiCycle50MHz, EnumSpiOperationWriteStatus},
     61       {EnumSpiOpcodeWrite,       SPI_COMMAND_WRITE,       EnumSpiCycle50MHz, EnumSpiOperationProgramData_1_Byte},
     62       {EnumSpiOpcodeRead,        SPI_COMMAND_READ,        EnumSpiCycle50MHz, EnumSpiOperationReadData},
     63       {EnumSpiOpcodeWrite,       SPI_COMMAND_ERASE,       EnumSpiCycle50MHz, EnumSpiOperationErase_4K_Byte},
     64       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_READ_S,      EnumSpiCycle50MHz, EnumSpiOperationReadStatus},
     65       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_CHIP_ERASE,  EnumSpiCycle50MHz, EnumSpiOperationFullChipErase}
     66     },
     67     0x400000 - FLASH_SIZE, // BIOS Start Offset
     68     FLASH_SIZE   // BIOS image size in flash
     69   },
     70   //
     71   // Winbond 32Mbit part
     72   //
     73   {
     74     SPI_W25X32_ID1,
     75     SPI_W25X32_ID2,
     76     SPI_W25X32_ID3,
     77     {
     78       SPI_COMMAND_WRITE_ENABLE,
     79       SPI_COMMAND_WRITE_S_EN
     80     },
     81     {
     82       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_JEDEC_ID,    EnumSpiCycle33MHz, EnumSpiOperationJedecId},
     83       {EnumSpiOpcodeRead,        SPI_COMMAND_READ_ID,     EnumSpiCycle33MHz, EnumSpiOperationOther},
     84       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_WRITE_S,     EnumSpiCycle33MHz, EnumSpiOperationWriteStatus},
     85       {EnumSpiOpcodeWrite,       SPI_COMMAND_WRITE,       EnumSpiCycle33MHz, EnumSpiOperationProgramData_1_Byte},
     86       {EnumSpiOpcodeRead,        SPI_COMMAND_READ,        EnumSpiCycle33MHz, EnumSpiOperationReadData},
     87       {EnumSpiOpcodeWrite,       SPI_COMMAND_ERASE,       EnumSpiCycle33MHz, EnumSpiOperationErase_4K_Byte},
     88       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_READ_S,      EnumSpiCycle33MHz, EnumSpiOperationReadStatus},
     89       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_CHIP_ERASE,  EnumSpiCycle33MHz, EnumSpiOperationFullChipErase}
     90     },
     91     0x400000 - FLASH_SIZE, // BIOS Start Offset
     92     FLASH_SIZE   // BIOS image size in flash
     93   },
     94   //
     95   // Atmel 32Mbit part
     96   //
     97   {
     98     SPI_AT26DF321_ID1,
     99     SPI_AT26DF321_ID2,  // issue: byte 2 identifies family/density for Atmel
    100     SPI_AT26DF321_ID3,
    101     {
    102       SPI_COMMAND_WRITE_ENABLE,
    103       SPI_COMMAND_WRITE_S_EN
    104     },
    105     {
    106       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_JEDEC_ID,    EnumSpiCycle33MHz, EnumSpiOperationJedecId},
    107       {EnumSpiOpcodeRead,        SPI_COMMAND_READ_ID,     EnumSpiCycle33MHz, EnumSpiOperationOther},
    108       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_WRITE_S,     EnumSpiCycle33MHz, EnumSpiOperationWriteStatus},
    109       {EnumSpiOpcodeWrite,       SPI_COMMAND_WRITE,       EnumSpiCycle33MHz, EnumSpiOperationProgramData_1_Byte},
    110       {EnumSpiOpcodeRead,        SPI_COMMAND_READ,        EnumSpiCycle33MHz, EnumSpiOperationReadData},
    111       {EnumSpiOpcodeWrite,       SPI_COMMAND_BLOCK_ERASE, EnumSpiCycle33MHz, EnumSpiOperationErase_64K_Byte},
    112       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_READ_S,      EnumSpiCycle33MHz, EnumSpiOperationReadStatus},
    113       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_CHIP_ERASE,  EnumSpiCycle33MHz, EnumSpiOperationFullChipErase}
    114     },
    115     0x400000 - FLASH_SIZE, // BIOS Start Offset
    116     FLASH_SIZE   // BIOS image size in flash
    117   },
    118 
    119   //
    120   // Intel 32Mbit part bottom boot
    121   //
    122   {
    123     SPI_QH25F320_ID1,
    124     SPI_QH25F320_ID2,
    125     SPI_QH25F320_ID3,
    126     {
    127       SPI_COMMAND_WRITE_ENABLE,
    128       SPI_COMMAND_WRITE_ENABLE
    129     },
    130     {
    131       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_JEDEC_ID,    EnumSpiCycle33MHz, EnumSpiOperationJedecId},
    132       {EnumSpiOpcodeRead,        SPI_COMMAND_READ_ID,     EnumSpiCycle33MHz, EnumSpiOperationOther},
    133       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_WRITE_S,     EnumSpiCycle33MHz, EnumSpiOperationWriteStatus},
    134       {EnumSpiOpcodeWrite,       SPI_COMMAND_WRITE,       EnumSpiCycle33MHz, EnumSpiOperationProgramData_1_Byte},
    135       {EnumSpiOpcodeRead,        SPI_COMMAND_READ,        EnumSpiCycle33MHz, EnumSpiOperationReadData},
    136       {EnumSpiOpcodeWrite,       SPI_COMMAND_BLOCK_ERASE, EnumSpiCycle33MHz, EnumSpiOperationErase_64K_Byte},
    137       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_READ_S,      EnumSpiCycle33MHz, EnumSpiOperationReadStatus},
    138       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_CHIP_ERASE,  EnumSpiCycle33MHz, EnumSpiOperationFullChipErase}
    139     },
    140     0,           // BIOS Start Offset
    141     FLASH_SIZE   // BIOS image size in flash
    142   },
    143   //
    144   // SST 64Mbit part
    145   //
    146   {
    147     SPI_SST25VF080B_ID1,      // VendorId
    148     SF_DEVICE_ID0_25VF064C,   // DeviceId 0
    149     SF_DEVICE_ID1_25VF064C,   // DeviceId 1
    150     {
    151       SPI_COMMAND_WRITE_ENABLE,
    152       SPI_COMMAND_WRITE_S_EN
    153     },
    154     {
    155       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_JEDEC_ID,    EnumSpiCycle50MHz, EnumSpiOperationJedecId},
    156       {EnumSpiOpcodeRead,        SPI_COMMAND_READ_ID,     EnumSpiCycle50MHz, EnumSpiOperationOther},
    157       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_WRITE_S,     EnumSpiCycle50MHz, EnumSpiOperationWriteStatus},
    158       {EnumSpiOpcodeWrite,       SPI_COMMAND_WRITE,       EnumSpiCycle50MHz, EnumSpiOperationProgramData_1_Byte},
    159       {EnumSpiOpcodeRead,        SPI_COMMAND_READ,        EnumSpiCycle50MHz, EnumSpiOperationReadData},
    160       {EnumSpiOpcodeWrite,       SPI_COMMAND_ERASE,       EnumSpiCycle50MHz, EnumSpiOperationErase_4K_Byte},
    161       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_READ_S,      EnumSpiCycle50MHz, EnumSpiOperationReadStatus},
    162       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_CHIP_ERASE,  EnumSpiCycle50MHz, EnumSpiOperationFullChipErase}
    163     },
    164     0x800000 - FLASH_SIZE,          // BIOS Start Offset
    165     FLASH_SIZE   // BIOS image size in flash
    166   },
    167   //
    168   // NUMONYX 64Mbit part
    169   //
    170   {
    171     SF_VENDOR_ID_NUMONYX,     // VendorId
    172     SF_DEVICE_ID0_M25PX64,    // DeviceId 0
    173     SF_DEVICE_ID1_M25PX64,    // DeviceId 1
    174     {
    175       SPI_COMMAND_WRITE_ENABLE,
    176       SPI_COMMAND_WRITE_S_EN
    177     },
    178     {
    179       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_JEDEC_ID,    EnumSpiCycle50MHz, EnumSpiOperationJedecId},
    180       {EnumSpiOpcodeRead,        SPI_COMMAND_READ_ID,     EnumSpiCycle50MHz, EnumSpiOperationOther},
    181       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_WRITE_S,     EnumSpiCycle50MHz, EnumSpiOperationWriteStatus},
    182       {EnumSpiOpcodeWrite,       SPI_COMMAND_WRITE,       EnumSpiCycle50MHz, EnumSpiOperationProgramData_1_Byte},
    183       {EnumSpiOpcodeRead,        SPI_COMMAND_READ,        EnumSpiCycle50MHz, EnumSpiOperationReadData},
    184       {EnumSpiOpcodeWrite,       SPI_COMMAND_ERASE,       EnumSpiCycle50MHz, EnumSpiOperationErase_4K_Byte},
    185       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_READ_S,      EnumSpiCycle50MHz, EnumSpiOperationReadStatus},
    186       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_CHIP_ERASE,  EnumSpiCycle50MHz, EnumSpiOperationFullChipErase}
    187     },
    188     0x800000 - FLASH_SIZE,          // BIOS Start Offset
    189     FLASH_SIZE   // BIOS image size in flash
    190   },
    191   //
    192   // Atmel 64Mbit part
    193   //
    194   {
    195     SF_VENDOR_ID_ATMEL,       // VendorId
    196     SF_DEVICE_ID0_AT25DF641,  // DeviceId 0
    197     SF_DEVICE_ID1_AT25DF641,  // DeviceId 1
    198     {
    199       SPI_COMMAND_WRITE_ENABLE,
    200       SPI_COMMAND_WRITE_S_EN
    201     },
    202     {
    203       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_JEDEC_ID,    EnumSpiCycle50MHz, EnumSpiOperationJedecId},
    204       {EnumSpiOpcodeRead,        SPI_COMMAND_READ_ID,     EnumSpiCycle50MHz, EnumSpiOperationOther},
    205       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_WRITE_S,     EnumSpiCycle50MHz, EnumSpiOperationWriteStatus},
    206       {EnumSpiOpcodeWrite,       SPI_COMMAND_WRITE,       EnumSpiCycle50MHz, EnumSpiOperationProgramData_1_Byte},
    207       {EnumSpiOpcodeRead,        SPI_COMMAND_READ,        EnumSpiCycle50MHz, EnumSpiOperationReadData},
    208       {EnumSpiOpcodeWrite,       SPI_COMMAND_ERASE,       EnumSpiCycle50MHz, EnumSpiOperationErase_4K_Byte},
    209       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_READ_S,      EnumSpiCycle50MHz, EnumSpiOperationReadStatus},
    210       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_CHIP_ERASE,  EnumSpiCycle50MHz, EnumSpiOperationFullChipErase}
    211     },
    212     0x800000 - FLASH_SIZE,          // BIOS Start Offset
    213     FLASH_SIZE   // BIOS image size in flash
    214   },
    215 
    216   //
    217   // Spansion 64Mbit part
    218   //
    219   {
    220     SF_VENDOR_ID_SPANSION,       // VendorId
    221     SF_DEVICE_ID0_S25FL064K,  // DeviceId 0
    222     SF_DEVICE_ID1_S25FL064K,  // DeviceId 1
    223     {
    224       SPI_COMMAND_WRITE_ENABLE,
    225       SPI_COMMAND_WRITE_S_EN
    226     },
    227     {
    228       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_JEDEC_ID,    EnumSpiCycle50MHz, EnumSpiOperationJedecId},
    229       {EnumSpiOpcodeRead,        SPI_COMMAND_READ_ID,     EnumSpiCycle50MHz, EnumSpiOperationOther},
    230       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_WRITE_S,     EnumSpiCycle50MHz, EnumSpiOperationWriteStatus},
    231       {EnumSpiOpcodeWrite,       SPI_COMMAND_WRITE,       EnumSpiCycle50MHz, EnumSpiOperationProgramData_1_Byte},
    232       {EnumSpiOpcodeRead,        SPI_COMMAND_READ,        EnumSpiCycle50MHz, EnumSpiOperationReadData},
    233       {EnumSpiOpcodeWrite,       SPI_COMMAND_ERASE,       EnumSpiCycle50MHz, EnumSpiOperationErase_4K_Byte},
    234       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_READ_S,      EnumSpiCycle50MHz, EnumSpiOperationReadStatus},
    235       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_CHIP_ERASE,  EnumSpiCycle50MHz, EnumSpiOperationFullChipErase}
    236     },
    237     0x800000 - FLASH_SIZE,          // BIOS Start Offset
    238     FLASH_SIZE   // BIOS image size in flash
    239   },
    240 
    241   //
    242   // Macronix 64Mbit part bottom boot
    243   //
    244   {
    245     SF_VENDOR_ID_MX,          // VendorId
    246     SF_DEVICE_ID0_25L6405D,   // DeviceId 0
    247     SF_DEVICE_ID1_25L6405D,   // DeviceId 1
    248     {
    249       SPI_COMMAND_WRITE_ENABLE,
    250       SPI_COMMAND_WRITE_S_EN
    251     },
    252     {
    253       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_JEDEC_ID,    EnumSpiCycle50MHz, EnumSpiOperationJedecId},
    254       {EnumSpiOpcodeRead,        SPI_COMMAND_READ_ID,     EnumSpiCycle50MHz, EnumSpiOperationOther},
    255       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_WRITE_S,     EnumSpiCycle50MHz, EnumSpiOperationWriteStatus},
    256       {EnumSpiOpcodeWrite,       SPI_COMMAND_WRITE,       EnumSpiCycle50MHz, EnumSpiOperationProgramData_1_Byte},
    257       {EnumSpiOpcodeRead,        SPI_COMMAND_READ,        EnumSpiCycle50MHz, EnumSpiOperationReadData},
    258       {EnumSpiOpcodeWrite,       SPI_COMMAND_BLOCK_ERASE, EnumSpiCycle50MHz, EnumSpiOperationErase_64K_Byte},
    259       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_READ_S,      EnumSpiCycle50MHz, EnumSpiOperationReadStatus},
    260       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_CHIP_ERASE,  EnumSpiCycle50MHz, EnumSpiOperationFullChipErase}
    261     },
    262     0x800000 - FLASH_SIZE,          // BIOS Start Offset
    263     FLASH_SIZE   // BIOS image size in flash
    264   },
    265   //
    266   // Winbond 64Mbit part bottom boot
    267   //
    268   {
    269     SPI_W25X64_ID1,
    270     SF_DEVICE_ID0_W25QXX,
    271     SF_DEVICE_ID1_W25Q64,
    272     {
    273       SPI_COMMAND_WRITE_ENABLE,
    274       SPI_COMMAND_WRITE_S_EN
    275     },
    276     {
    277       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_JEDEC_ID,    EnumSpiCycle50MHz, EnumSpiOperationJedecId},
    278       {EnumSpiOpcodeRead,        SPI_COMMAND_READ_ID,     EnumSpiCycle50MHz, EnumSpiOperationOther},
    279       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_WRITE_S,     EnumSpiCycle50MHz, EnumSpiOperationWriteStatus},
    280       {EnumSpiOpcodeWrite,       SPI_COMMAND_WRITE,       EnumSpiCycle50MHz, EnumSpiOperationProgramData_1_Byte},
    281       {EnumSpiOpcodeRead,        SPI_COMMAND_READ,        EnumSpiCycle50MHz, EnumSpiOperationReadData},
    282       {EnumSpiOpcodeWrite,       SPI_COMMAND_ERASE,       EnumSpiCycle50MHz, EnumSpiOperationErase_4K_Byte},
    283       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_READ_S,      EnumSpiCycle50MHz, EnumSpiOperationReadStatus},
    284       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_CHIP_ERASE,  EnumSpiCycle50MHz, EnumSpiOperationFullChipErase}
    285     },
    286     0x800000 - FLASH_SIZE,          // BIOS Start Offset
    287     FLASH_SIZE   // BIOS image size in flash
    288   },
    289   //
    290   // Winbond 64Mbit part bottom boot
    291   //
    292   {
    293     SPI_W25X64_ID1,
    294     SPI_W25X64_ID2,
    295     SPI_W25X64_ID3,
    296     {
    297       SPI_COMMAND_WRITE_ENABLE,
    298       SPI_COMMAND_WRITE_S_EN
    299     },
    300     {
    301       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_JEDEC_ID,    EnumSpiCycle50MHz, EnumSpiOperationJedecId},
    302       {EnumSpiOpcodeRead,        SPI_COMMAND_READ_ID,     EnumSpiCycle50MHz, EnumSpiOperationOther},
    303       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_WRITE_S,     EnumSpiCycle50MHz, EnumSpiOperationWriteStatus},
    304       {EnumSpiOpcodeWrite,       SPI_COMMAND_WRITE,       EnumSpiCycle50MHz, EnumSpiOperationProgramData_1_Byte},
    305       {EnumSpiOpcodeRead,        SPI_COMMAND_READ,        EnumSpiCycle50MHz, EnumSpiOperationReadData},
    306       {EnumSpiOpcodeWrite,       SPI_COMMAND_ERASE,       EnumSpiCycle50MHz, EnumSpiOperationErase_4K_Byte},
    307       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_READ_S,      EnumSpiCycle50MHz, EnumSpiOperationReadStatus},
    308       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_CHIP_ERASE,  EnumSpiCycle50MHz, EnumSpiOperationFullChipErase}
    309     },
    310     0x800000 - FLASH_SIZE,          // BIOS Start Offset
    311     FLASH_SIZE   // BIOS image size in flash
    312   },
    313   //
    314   // Intel 64Mbit part bottom boot
    315   //
    316   {
    317     SPI_QH25F640_ID1,
    318     SPI_QH25F640_ID2,
    319     SPI_QH25F640_ID3,
    320     {
    321       SPI_COMMAND_WRITE_ENABLE,
    322       SPI_COMMAND_WRITE_S_EN
    323     },
    324     {
    325       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_JEDEC_ID,    EnumSpiCycle33MHz, EnumSpiOperationJedecId},
    326       {EnumSpiOpcodeRead,        SPI_COMMAND_READ_ID,     EnumSpiCycle33MHz, EnumSpiOperationOther},
    327       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_WRITE_S,     EnumSpiCycle33MHz, EnumSpiOperationWriteStatus},
    328       {EnumSpiOpcodeWrite,       SPI_COMMAND_WRITE,       EnumSpiCycle33MHz, EnumSpiOperationProgramData_1_Byte},
    329       {EnumSpiOpcodeRead,        SPI_COMMAND_READ,        EnumSpiCycle33MHz, EnumSpiOperationReadData},
    330       {EnumSpiOpcodeWrite,       SPI_COMMAND_BLOCK_ERASE, EnumSpiCycle33MHz, EnumSpiOperationErase_64K_Byte},
    331       {EnumSpiOpcodeReadNoAddr,  SPI_COMMAND_READ_S,      EnumSpiCycle33MHz, EnumSpiOperationReadStatus},
    332       {EnumSpiOpcodeWriteNoAddr, SPI_COMMAND_CHIP_ERASE,  EnumSpiCycle33MHz, EnumSpiOperationFullChipErase}
    333     },
    334     0x800000 - FLASH_SIZE,          // BIOS Start Offset
    335     FLASH_SIZE   // BIOS image size in flash
    336   }
    337 };
    338