@ -10,6 +10,36 @@
# ifndef _SF_INTERNAL_H_
# define _SF_INTERNAL_H_
# include <linux/types.h>
# include <linux/compiler.h>
/* Dual SPI flash memories - see SPI_COMM_DUAL_... */
enum spi_dual_flash {
SF_SINGLE_FLASH = 0 ,
SF_DUAL_STACKED_FLASH = 1 < < 0 ,
SF_DUAL_PARALLEL_FLASH = 1 < < 1 ,
} ;
/* Enum list - Full read commands */
enum spi_read_cmds {
ARRAY_SLOW = 1 < < 0 ,
DUAL_OUTPUT_FAST = 1 < < 1 ,
DUAL_IO_FAST = 1 < < 2 ,
QUAD_OUTPUT_FAST = 1 < < 3 ,
QUAD_IO_FAST = 1 < < 4 ,
} ;
# define RD_EXTN (ARRAY_SLOW | DUAL_OUTPUT_FAST | DUAL_IO_FAST)
# define RD_FULL (RD_EXTN | QUAD_OUTPUT_FAST | QUAD_IO_FAST)
/* sf param flags */
enum {
SECT_4K = 1 < < 0 ,
SECT_32K = 1 < < 1 ,
E_FSR = 1 < < 2 ,
WR_QPP = 1 < < 3 ,
} ;
# define SPI_FLASH_3B_ADDR_LEN 3
# define SPI_FLASH_CMD_LEN (1 + SPI_FLASH_3B_ADDR_LEN)
# define SPI_FLASH_16MB_BOUN 0x1000000
@ -30,12 +60,12 @@
# define CMD_WRITE_STATUS 0x01
# define CMD_PAGE_PROGRAM 0x02
# define CMD_WRITE_DISABLE 0x04
# define CMD_READ_STATUS 0x05
# define CMD_READ_STATUS 0x05
# define CMD_QUAD_PAGE_PROGRAM 0x32
# define CMD_READ_STATUS1 0x35
# define CMD_WRITE_ENABLE 0x06
# define CMD_READ_CONFIG 0x35
# define CMD_FLAG_STATUS 0x70
# define CMD_READ_CONFIG 0x35
# define CMD_FLAG_STATUS 0x70
/* Read commands */
# define CMD_READ_ARRAY_SLOW 0x03
@ -57,7 +87,7 @@
/* Common status */
# define STATUS_WIP (1 << 0)
# define STATUS_QEB_WINSPAN (1 << 1)
# define STATUS_QEB_MXIC (1 << 6)
# define STATUS_QEB_MXIC (1 << 6)
# define STATUS_PEC (1 << 7)
# ifdef CONFIG_SYS_SPI_ST_ENABLE_WP_PIN
@ -66,19 +96,42 @@
/* Flash timeout values */
# define SPI_FLASH_PROG_TIMEOUT (2 * CONFIG_SYS_HZ)
# define SPI_FLASH_PAGE_ERASE_TIMEOUT (5 * CONFIG_SYS_HZ)
# define SPI_FLASH_PAGE_ERASE_TIMEOUT (5 * CONFIG_SYS_HZ)
# define SPI_FLASH_SECTOR_ERASE_TIMEOUT (10 * CONFIG_SYS_HZ)
/* SST specific */
# ifdef CONFIG_SPI_FLASH_SST
# define SST_WP 0x01 /* Supports AAI word program */
# define SST_WP 0x01 /* Supports AAI word program */
# define CMD_SST_BP 0x02 /* Byte Program */
# define CMD_SST_AAI_WP 0xAD /* Auto Address Incr Word Program */
# define CMD_SST_AAI_WP 0xAD /* Auto Address Incr Word Program */
int sst_write_wp ( struct spi_flash * flash , u32 offset , size_t len ,
const void * buf ) ;
# endif
/**
* struct spi_flash_params - SPI / QSPI flash device params structure
*
* @ name : Device name ( [ MANUFLETTER ] [ DEVTYPE ] [ DENSITY ] [ EXTRAINFO ] )
* @ jedec : Device jedec ID ( 0 x [ 1 byte_manuf_id ] [ 2 byte_dev_id ] )
* @ ext_jedec : Device ext_jedec ID
* @ sector_size : Sector size of this device
* @ nr_sectors : No . of sectors on this device
* @ e_rd_cmd : Enum list for read commands
* @ flags : Important param , for flash specific behaviour
*/
struct spi_flash_params {
const char * name ;
u32 jedec ;
u16 ext_jedec ;
u32 sector_size ;
u32 nr_sectors ;
u8 e_rd_cmd ;
u16 flags ;
} ;
extern const struct spi_flash_params spi_flash_params_table [ ] ;
/* Send a single-byte command to the device and read the response */
int spi_flash_cmd ( struct spi_slave * spi , u8 cmd , void * response , size_t len ) ;