@ -39,97 +39,97 @@ struct spi_flash_params {
static const struct spi_flash_params spi_flash_params_table [ ] = {
# ifdef CONFIG_SPI_FLASH_ATMEL /* ATMEL */
{ " AT45DB011D " , 0x1f2200 , 0x0 , 64 * 1024 , 4 , 0 } ,
{ " AT45DB021D " , 0x1f2300 , 0x0 , 64 * 1024 , 8 , 0 } ,
{ " AT45DB041D " , 0x1f2400 , 0x0 , 64 * 1024 , 8 , 0 } ,
{ " AT45DB081D " , 0x1f2500 , 0x0 , 64 * 1024 , 16 , 0 } ,
{ " AT45DB161D " , 0x1f2600 , 0x0 , 64 * 1024 , 32 , 0 } ,
{ " AT45DB321D " , 0x1f2700 , 0x0 , 64 * 1024 , 64 , 0 } ,
{ " AT45DB641D " , 0x1f2800 , 0x0 , 64 * 1024 , 128 , 0 } ,
{ " AT45DB011D " , 0x1f2200 , 0x0 , 64 * 1024 , 4 , SECT_4K } ,
{ " AT45DB021D " , 0x1f2300 , 0x0 , 64 * 1024 , 8 , SECT_4K } ,
{ " AT45DB041D " , 0x1f2400 , 0x0 , 64 * 1024 , 8 , SECT_4K } ,
{ " AT45DB081D " , 0x1f2500 , 0x0 , 64 * 1024 , 16 , SECT_4K } ,
{ " AT45DB161D " , 0x1f2600 , 0x0 , 64 * 1024 , 32 , SECT_4K } ,
{ " AT45DB321D " , 0x1f2700 , 0x0 , 64 * 1024 , 64 , SECT_4K } ,
{ " AT45DB641D " , 0x1f2800 , 0x0 , 64 * 1024 , 128 , SECT_4K } ,
# endif
# ifdef CONFIG_SPI_FLASH_EON /* EON */
{ " EN25Q32B " , 0x1c3016 , 0x0 , 64 * 1024 , 64 , 0 } ,
{ " EN25Q128B " , 0x1c3018 , 0x0 , 64 * 1024 , 256 , 0 } ,
{ " EN25Q32B " , 0x1c3016 , 0x0 , 64 * 1024 , 64 , 0 } ,
{ " EN25Q128B " , 0x1c3018 , 0x0 , 64 * 1024 , 256 , 0 } ,
# endif
# ifdef CONFIG_SPI_FLASH_GIGADEVICE /* GIGADEVICE */
{ " GD25Q64B " , 0xc84017 , 0x0 , 64 * 1024 , 128 , 0 } ,
{ " GD25LQ32 " , 0xc86016 , 0x0 , 64 * 1024 , 64 , 0 } ,
{ " GD25Q64B " , 0xc84017 , 0x0 , 64 * 1024 , 128 , SECT_4K } ,
{ " GD25LQ32 " , 0xc86016 , 0x0 , 64 * 1024 , 64 , SECT_4K } ,
# endif
# ifdef CONFIG_SPI_FLASH_MACRONIX /* MACRONIX */
{ " MX25L4005 " , 0xc22013 , 0x0 , 64 * 1024 , 8 , 0 } ,
{ " MX25L8005 " , 0xc22014 , 0x0 , 64 * 1024 , 16 , 0 } ,
{ " MX25L1605D " , 0xc22015 , 0x0 , 64 * 1024 , 32 , 0 } ,
{ " MX25L3205D " , 0xc22016 , 0x0 , 64 * 1024 , 64 , 0 } ,
{ " MX25L6405D " , 0xc22017 , 0x0 , 64 * 1024 , 128 , 0 } ,
{ " MX25L12805 " , 0xc22018 , 0x0 , 64 * 1024 , 256 , 0 } ,
{ " MX25L12855E " , 0xc22618 , 0x0 , 64 * 1024 , 256 , 0 } ,
{ " MX25L4005 " , 0xc22013 , 0x0 , 64 * 1024 , 8 , 0 } ,
{ " MX25L8005 " , 0xc22014 , 0x0 , 64 * 1024 , 16 , 0 } ,
{ " MX25L1605D " , 0xc22015 , 0x0 , 64 * 1024 , 32 , 0 } ,
{ " MX25L3205D " , 0xc22016 , 0x0 , 64 * 1024 , 64 , 0 } ,
{ " MX25L6405D " , 0xc22017 , 0x0 , 64 * 1024 , 128 , 0 } ,
{ " MX25L12805 " , 0xc22018 , 0x0 , 64 * 1024 , 256 , 0 } ,
{ " MX25L12855E " , 0xc22618 , 0x0 , 64 * 1024 , 256 , 0 } ,
# endif
# ifdef CONFIG_SPI_FLASH_SPANSION /* SPANSION */
{ " S25FL008A " , 0x010213 , 0x0 , 64 * 1024 , 16 , 0 } ,
{ " S25FL016A " , 0x010214 , 0x0 , 64 * 1024 , 32 , 0 } ,
{ " S25FL032A " , 0x010215 , 0x0 , 64 * 1024 , 64 , 0 } ,
{ " S25FL064A " , 0x010216 , 0x0 , 64 * 1024 , 128 , 0 } ,
{ " S25FL128P_256K " , 0x012018 , 0x0300 , 256 * 1024 , 64 , 0 } ,
{ " S25FL128P_64K " , 0x012018 , 0x0301 , 64 * 1024 , 256 , 0 } ,
{ " S25FL032P " , 0x010215 , 0x4d00 , 64 * 1024 , 64 , 0 } ,
{ " S25FL064P " , 0x010216 , 0x4d00 , 64 * 1024 , 128 , 0 } ,
{ " S25FL128S_64K " , 0x012018 , 0x4d01 , 64 * 1024 , 256 , 0 } ,
{ " S25FL256S_64K " , 0x010219 , 0x4d01 , 64 * 1024 , 512 , 0 } ,
{ " S25FL512S_64K " , 0x010220 , 0x4d01 , 64 * 1024 , 1024 , 0 } ,
{ " S25FL008A " , 0x010213 , 0x0 , 64 * 1024 , 16 , 0 } ,
{ " S25FL016A " , 0x010214 , 0x0 , 64 * 1024 , 32 , 0 } ,
{ " S25FL032A " , 0x010215 , 0x0 , 64 * 1024 , 64 , 0 } ,
{ " S25FL064A " , 0x010216 , 0x0 , 64 * 1024 , 128 , 0 } ,
{ " S25FL128P_256K " , 0x012018 , 0x0300 , 256 * 1024 , 64 , 0 } ,
{ " S25FL128P_64K " , 0x012018 , 0x0301 , 64 * 1024 , 256 , 0 } ,
{ " S25FL032P " , 0x010215 , 0x4d00 , 64 * 1024 , 64 , 0 } ,
{ " S25FL064P " , 0x010216 , 0x4d00 , 64 * 1024 , 128 , 0 } ,
{ " S25FL128S_64K " , 0x012018 , 0x4d01 , 64 * 1024 , 256 , 0 } ,
{ " S25FL256S_64K " , 0x010219 , 0x4d01 , 64 * 1024 , 512 , 0 } ,
{ " S25FL512S_64K " , 0x010220 , 0x4d01 , 64 * 1024 , 1024 , 0 } ,
# endif
# ifdef CONFIG_SPI_FLASH_STMICRO /* STMICRO */
{ " M25P10 " , 0x202011 , 0x0 , 32 * 1024 , 4 , 0 } ,
{ " M25P20 " , 0x202012 , 0x0 , 64 * 1024 , 4 , 0 } ,
{ " M25P40 " , 0x202013 , 0x0 , 64 * 1024 , 8 , 0 } ,
{ " M25P80 " , 0x202014 , 0x0 , 64 * 1024 , 16 , 0 } ,
{ " M25P16 " , 0x202015 , 0x0 , 64 * 1024 , 32 , 0 } ,
{ " M25P32 " , 0x202016 , 0x0 , 64 * 1024 , 64 , 0 } ,
{ " M25P64 " , 0x202017 , 0x0 , 64 * 1024 , 128 , 0 } ,
{ " M25P128 " , 0x202018 , 0x0 , 256 * 1024 , 64 , 0 } ,
{ " N25Q32 " , 0x20ba16 , 0x0 , 64 * 1024 , 64 , 0 } ,
{ " N25Q32A " , 0x20bb16 , 0x0 , 64 * 1024 , 64 , 0 } ,
{ " N25Q64 " , 0x20ba17 , 0x0 , 64 * 1024 , 128 , 0 } ,
{ " N25Q64A " , 0x20bb17 , 0x0 , 64 * 1024 , 128 , 0 } ,
{ " N25Q128 " , 0x20ba18 , 0x0 , 64 * 1024 , 256 , 0 } ,
{ " N25Q128A " , 0x20bb18 , 0x0 , 64 * 1024 , 256 , 0 } ,
{ " N25Q256 " , 0x20ba19 , 0x0 , 64 * 1024 , 512 , 0 } ,
{ " N25Q256A " , 0x20bb19 , 0x0 , 64 * 1024 , 512 , 0 } ,
{ " N25Q512 " , 0x20ba20 , 0x0 , 64 * 1024 , 1024 , 0 } ,
{ " N25Q512A " , 0x20bb20 , 0x0 , 64 * 1024 , 1024 , 0 } ,
{ " N25Q1024 " , 0x20ba21 , 0x0 , 64 * 1024 , 2048 , 0 } ,
{ " N25Q1024A " , 0x20bb21 , 0x0 , 64 * 1024 , 2048 , 0 } ,
{ " M25P10 " , 0x202011 , 0x0 , 32 * 1024 , 4 , 0 } ,
{ " M25P20 " , 0x202012 , 0x0 , 64 * 1024 , 4 , 0 } ,
{ " M25P40 " , 0x202013 , 0x0 , 64 * 1024 , 8 , 0 } ,
{ " M25P80 " , 0x202014 , 0x0 , 64 * 1024 , 16 , 0 } ,
{ " M25P16 " , 0x202015 , 0x0 , 64 * 1024 , 32 , 0 } ,
{ " M25P32 " , 0x202016 , 0x0 , 64 * 1024 , 64 , 0 } ,
{ " M25P64 " , 0x202017 , 0x0 , 64 * 1024 , 128 , 0 } ,
{ " M25P128 " , 0x202018 , 0x0 , 256 * 1024 , 64 , 0 } ,
{ " N25Q32 " , 0x20ba16 , 0x0 , 64 * 1024 , 64 , SECT_4K } ,
{ " N25Q32A " , 0x20bb16 , 0x0 , 64 * 1024 , 64 , SECT_4K } ,
{ " N25Q64 " , 0x20ba17 , 0x0 , 64 * 1024 , 128 , SECT_4K } ,
{ " N25Q64A " , 0x20bb17 , 0x0 , 64 * 1024 , 128 , SECT_4K } ,
{ " N25Q128 " , 0x20ba18 , 0x0 , 64 * 1024 , 256 , SECT_4K } ,
{ " N25Q128A " , 0x20bb18 , 0x0 , 64 * 1024 , 256 , SECT_4K } ,
{ " N25Q256 " , 0x20ba19 , 0x0 , 64 * 1024 , 512 , SECT_4K } ,
{ " N25Q256A " , 0x20bb19 , 0x0 , 64 * 1024 , 512 , SECT_4K } ,
{ " N25Q512 " , 0x20ba20 , 0x0 , 64 * 1024 , 1024 , SECT_4K } ,
{ " N25Q512A " , 0x20bb20 , 0x0 , 64 * 1024 , 1024 , SECT_4K } ,
{ " N25Q1024 " , 0x20ba21 , 0x0 , 64 * 1024 , 2048 , SECT_4K } ,
{ " N25Q1024A " , 0x20bb21 , 0x0 , 64 * 1024 , 2048 , SECT_4K } ,
# endif
# ifdef CONFIG_SPI_FLASH_SST /* SST */
{ " SST25VF040B " , 0xbf258d , 0x0 , 64 * 1024 , 8 , SST_WP } ,
{ " SST25VF080B " , 0xbf258e , 0x0 , 64 * 1024 , 16 , SST_WP } ,
{ " SST25VF016B " , 0xbf2541 , 0x0 , 64 * 1024 , 32 , SST_WP } ,
{ " SST25VF032B " , 0xbf254a , 0x0 , 64 * 1024 , 64 , SST_WP } ,
{ " SST25VF064C " , 0xbf254b , 0x0 , 64 * 1024 , 128 , 0 } ,
{ " SST25WF512 " , 0xbf2501 , 0x0 , 64 * 1024 , 1 , SST_WP } ,
{ " SST25WF010 " , 0xbf2502 , 0x0 , 64 * 1024 , 2 , SST_WP } ,
{ " SST25WF020 " , 0xbf2503 , 0x0 , 64 * 1024 , 4 , SST_WP } ,
{ " SST25WF040 " , 0xbf2504 , 0x0 , 64 * 1024 , 8 , SST_WP } ,
{ " SST25WF080 " , 0xbf2505 , 0x0 , 64 * 1024 , 16 , SST_WP } ,
{ " SST25VF040B " , 0xbf258d , 0x0 , 64 * 1024 , 8 , SECT_4K | SST_WP } ,
{ " SST25VF080B " , 0xbf258e , 0x0 , 64 * 1024 , 16 , SECT_4K | SST_WP } ,
{ " SST25VF016B " , 0xbf2541 , 0x0 , 64 * 1024 , 32 , SECT_4K | SST_WP } ,
{ " SST25VF032B " , 0xbf254a , 0x0 , 64 * 1024 , 64 , SECT_4K | SST_WP } ,
{ " SST25VF064C " , 0xbf254b , 0x0 , 64 * 1024 , 128 , SECT_4K } ,
{ " SST25WF512 " , 0xbf2501 , 0x0 , 64 * 1024 , 1 , SECT_4K | SST_WP } ,
{ " SST25WF010 " , 0xbf2502 , 0x0 , 64 * 1024 , 2 , SECT_4K | SST_WP } ,
{ " SST25WF020 " , 0xbf2503 , 0x0 , 64 * 1024 , 4 , SECT_4K | SST_WP } ,
{ " SST25WF040 " , 0xbf2504 , 0x0 , 64 * 1024 , 8 , SECT_4K | SST_WP } ,
{ " SST25WF080 " , 0xbf2505 , 0x0 , 64 * 1024 , 16 , SECT_4K | SST_WP } ,
# endif
# ifdef CONFIG_SPI_FLASH_WINBOND /* WINBOND */
{ " W25P80 " , 0xef2014 , 0x0 , 64 * 1024 , 16 , 0 } ,
{ " W25P16 " , 0xef2015 , 0x0 , 64 * 1024 , 32 , 0 } ,
{ " W25P32 " , 0xef2016 , 0x0 , 64 * 1024 , 64 , 0 } ,
{ " W25X40 " , 0xef3013 , 0x0 , 64 * 1024 , 8 , 0 } ,
{ " W25X16 " , 0xef3015 , 0x0 , 64 * 1024 , 32 , 0 } ,
{ " W25X32 " , 0xef3016 , 0x0 , 64 * 1024 , 64 , 0 } ,
{ " W25X64 " , 0xef3017 , 0x0 , 64 * 1024 , 128 , 0 } ,
{ " W25Q80BL " , 0xef4014 , 0x0 , 64 * 1024 , 16 , 0 } ,
{ " W25Q16CL " , 0xef4015 , 0x0 , 64 * 1024 , 32 , 0 } ,
{ " W25Q32BV " , 0xef4016 , 0x0 , 64 * 1024 , 64 , 0 } ,
{ " W25Q64CV " , 0xef4017 , 0x0 , 64 * 1024 , 128 , 0 } ,
{ " W25Q128BV " , 0xef4018 , 0x0 , 64 * 1024 , 256 , 0 } ,
{ " W25Q256 " , 0xef4019 , 0x0 , 64 * 1024 , 512 , 0 } ,
{ " W25Q80BW " , 0xef5014 , 0x0 , 64 * 1024 , 16 , 0 } ,
{ " W25Q16DW " , 0xef6015 , 0x0 , 64 * 1024 , 32 , 0 } ,
{ " W25Q32DW " , 0xef6016 , 0x0 , 64 * 1024 , 64 , 0 } ,
{ " W25Q64DW " , 0xef6017 , 0x0 , 64 * 1024 , 128 , 0 } ,
{ " W25Q128FW " , 0xef6018 , 0x0 , 64 * 1024 , 256 , 0 } ,
{ " W25P80 " , 0xef2014 , 0x0 , 64 * 1024 , 16 , 0 } ,
{ " W25P16 " , 0xef2015 , 0x0 , 64 * 1024 , 32 , 0 } ,
{ " W25P32 " , 0xef2016 , 0x0 , 64 * 1024 , 64 , 0 } ,
{ " W25X40 " , 0xef3013 , 0x0 , 64 * 1024 , 8 , SECT_4K } ,
{ " W25X16 " , 0xef3015 , 0x0 , 64 * 1024 , 32 , SECT_4K } ,
{ " W25X32 " , 0xef3016 , 0x0 , 64 * 1024 , 64 , SECT_4K } ,
{ " W25X64 " , 0xef3017 , 0x0 , 64 * 1024 , 128 , SECT_4K } ,
{ " W25Q80BL " , 0xef4014 , 0x0 , 64 * 1024 , 16 , SECT_4K } ,
{ " W25Q16CL " , 0xef4015 , 0x0 , 64 * 1024 , 32 , SECT_4K } ,
{ " W25Q32BV " , 0xef4016 , 0x0 , 64 * 1024 , 64 , SECT_4K } ,
{ " W25Q64CV " , 0xef4017 , 0x0 , 64 * 1024 , 128 , SECT_4K } ,
{ " W25Q128BV " , 0xef4018 , 0x0 , 64 * 1024 , 256 , SECT_4K } ,
{ " W25Q256 " , 0xef4019 , 0x0 , 64 * 1024 , 512 , SECT_4K } ,
{ " W25Q80BW " , 0xef5014 , 0x0 , 64 * 1024 , 16 , SECT_4K } ,
{ " W25Q16DW " , 0xef6015 , 0x0 , 64 * 1024 , 32 , SECT_4K } ,
{ " W25Q32DW " , 0xef6016 , 0x0 , 64 * 1024 , 64 , SECT_4K } ,
{ " W25Q64DW " , 0xef6017 , 0x0 , 64 * 1024 , 128 , SECT_4K } ,
{ " W25Q128FW " , 0xef6018 , 0x0 , 64 * 1024 , 256 , SECT_4K } ,
# endif
/*
* Note :
@ -203,6 +203,18 @@ struct spi_flash *spi_flash_validate_ids(struct spi_slave *spi, u8 *idcode)
flash - > sector_size = params - > sector_size ;
flash - > size = flash - > sector_size * params - > nr_sectors ;
/* Compute erase sector and command */
if ( params - > flags & SECT_4K ) {
flash - > erase_cmd = CMD_ERASE_4K ;
flash - > erase_size = 4096 ;
} else if ( params - > flags & SECT_32K ) {
flash - > erase_cmd = CMD_ERASE_32K ;
flash - > erase_size = 32768 ;
} else {
flash - > erase_cmd = CMD_ERASE_64K ;
flash - > erase_size = flash - > sector_size ;
}
/* Flash powers up read-only, so clear BP# bits */
# if defined(CONFIG_SPI_FLASH_ATMEL) || \
defined ( CONFIG_SPI_FLASH_MACRONIX ) | | \