2020-03-13 19:42:44 +00:00
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright ( C ) 2005 , Intec Automation Inc .
* Copyright ( C ) 2014 , Freescale Semiconductor , Inc .
*/
# include <linux/mtd/spi-nor.h>
# include "core.h"
static int
is25lp256_post_bfpt_fixups ( struct spi_nor * nor ,
const struct sfdp_parameter_header * bfpt_header ,
const struct sfdp_bfpt * bfpt ,
struct spi_nor_flash_parameter * params )
{
/*
* IS25LP256 supports 4 B opcodes , but the BFPT advertises a
* BFPT_DWORD1_ADDRESS_BYTES_3_ONLY address width .
* Overwrite the address width advertised by the BFPT .
*/
if ( ( bfpt - > dwords [ BFPT_DWORD ( 1 ) ] & BFPT_DWORD1_ADDRESS_BYTES_MASK ) = =
BFPT_DWORD1_ADDRESS_BYTES_3_ONLY )
nor - > addr_width = 4 ;
return 0 ;
}
static struct spi_nor_fixups is25lp256_fixups = {
. post_bfpt = is25lp256_post_bfpt_fixups ,
} ;
static const struct flash_info issi_parts [ ] = {
/* ISSI */
{ " is25cd512 " , INFO ( 0x7f9d20 , 0 , 32 * 1024 , 2 , SECT_4K ) } ,
{ " is25lq040b " , INFO ( 0x9d4013 , 0 , 64 * 1024 , 8 ,
SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ ) } ,
{ " is25lp016d " , INFO ( 0x9d6015 , 0 , 64 * 1024 , 32 ,
SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ ) } ,
{ " is25lp080d " , INFO ( 0x9d6014 , 0 , 64 * 1024 , 16 ,
SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ ) } ,
{ " is25lp032 " , INFO ( 0x9d6016 , 0 , 64 * 1024 , 64 ,
SECT_4K | SPI_NOR_DUAL_READ ) } ,
{ " is25lp064 " , INFO ( 0x9d6017 , 0 , 64 * 1024 , 128 ,
SECT_4K | SPI_NOR_DUAL_READ ) } ,
{ " is25lp128 " , INFO ( 0x9d6018 , 0 , 64 * 1024 , 256 ,
SECT_4K | SPI_NOR_DUAL_READ ) } ,
{ " is25lp256 " , INFO ( 0x9d6019 , 0 , 64 * 1024 , 512 ,
SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
SPI_NOR_4B_OPCODES )
. fixups = & is25lp256_fixups } ,
{ " is25wp032 " , INFO ( 0x9d7016 , 0 , 64 * 1024 , 64 ,
SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ ) } ,
{ " is25wp064 " , INFO ( 0x9d7017 , 0 , 64 * 1024 , 128 ,
SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ ) } ,
{ " is25wp128 " , INFO ( 0x9d7018 , 0 , 64 * 1024 , 256 ,
SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ ) } ,
{ " is25wp256 " , INFO ( 0x9d7019 , 0 , 64 * 1024 , 512 ,
SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
SPI_NOR_4B_OPCODES )
. fixups = & is25lp256_fixups } ,
/* PMC */
{ " pm25lv512 " , INFO ( 0 , 0 , 32 * 1024 , 2 , SECT_4K_PMC ) } ,
{ " pm25lv010 " , INFO ( 0 , 0 , 32 * 1024 , 4 , SECT_4K_PMC ) } ,
{ " pm25lq032 " , INFO ( 0x7f9d46 , 0 , 64 * 1024 , 64 , SECT_4K ) } ,
} ;
static void issi_default_init ( struct spi_nor * nor )
{
2020-03-13 19:42:53 +00:00
nor - > params - > quad_enable = spi_nor_sr1_bit6_quad_enable ;
2020-03-13 19:42:44 +00:00
}
static const struct spi_nor_fixups issi_fixups = {
. default_init = issi_default_init ,
} ;
const struct spi_nor_manufacturer spi_nor_issi = {
. name = " issi " ,
. parts = issi_parts ,
. nparts = ARRAY_SIZE ( issi_parts ) ,
. fixups = & issi_fixups ,
} ;