Files
MilkV-Duo/u-boot-2021.10/include/cvsnfc_spi_ids.h
sam.xiang 3a4bcfca2f [uboot] porting cvitek asic chips:
1. add cvitek folders to u-boot-2021.10
	2. add cv183x/cv182x part
	3. add cv181x/cv180x part

Change-Id: I6dc2e5ff509dbab16bd60bfb3fd61852da5e01f6
2023-03-10 20:31:12 +08:00

168 lines
5.1 KiB
C

#ifndef __CVSNFC_SPI_IDSH
#define __CVSNFC_SPI_IDSH
/*****************************************************************************/
#define INFINITE (0xFFFFFFFF)
#define DEFAULT_ID_LEN 2
#define MAX_ID_LEN 3
#define MAX_SPI_NAND_OP 8
#define BBP_LAST_PAGE 0x01
#define BBP_FIRST_PAGE 0x02
#define BBP_FIRST_2_PAGE 0x03
/*****************************************************************************/
#define SPI_IF_READ_STD (0x01)
#define SPI_IF_READ_FAST (0x02)
#define SPI_IF_READ_DUAL (0x04)
#define SPI_IF_READ_DUAL_ADDR (0x08)
#define SPI_IF_READ_QUAD (0x10)
#define SPI_IF_READ_QUAD_ADDR (0x20)
#define SPI_IF_WRITE_STD (0x01)
#define SPI_IF_WRITE_DUAL (0x02)
#define SPI_IF_WRITE_DUAL_ADDR (0x04)
#define SPI_IF_WRITE_QUAD (0x08)
#define SPI_IF_WRITE_QUAD_ADDR (0x10)
#define SPI_IF_ERASE_SECTOR_128K (0x08) /* 128K */
#define SPI_IF_ERASE_SECTOR_256K (0x10) /* 256K */
/******************************************************************************/
#define CVSNFC_SUPPORT_READ (SPI_IF_READ_STD \
| SPI_IF_READ_FAST \
| SPI_IF_READ_DUAL \
| SPI_IF_READ_DUAL_ADDR \
| SPI_IF_READ_QUAD \
| SPI_IF_READ_QUAD_ADDR)
#define CVSNFC_SUPPORT_WRITE (SPI_IF_WRITE_STD | SPI_IF_WRITE_QUAD)
#define CVSNFC_SUPPORT_MAX_DUMMY 8
#define SPI_NAND_READ 0
#define SPI_NAND_WRITE 1
#define CVSNFC_IFCYCLE_STD 0
#define CVSNFC_IFCYCLE_DUAL 1
#define CVSNFC_IFCYCLE_DUAL_ADDR 2
#define CVSNFC_IFCYCLE_QUAD 3
#define CVSNFC_IFCYCLE_QUAD_ADDR 4
/*****************************************************************************/
#define SPI_CMD_WREN 0x06 /* Write Enable */
#define SPI_CMD_WRDI 0x04 /* Write Disable */
#define SPI_CMD_GET_FEATURES 0x0F /* Get Features */
#define SPI_CMD_SET_FEATURE 0x1F /* Set Feature */
#define SPI_CMD_PAGE_READ 0x13 /* Page Read to Cache */
#define SPI_CMD_READ_STD 0x03 /* Read From Cache at Standard Speed */
#define SPI_CMD_READ_FAST 0x0B /* Read From Cache at Higher Speed */
#define SPI_CMD_READ_DUAL 0x3B /* Read From Cache at Dual Output */
#define SPI_CMD_READ_QUAD 0x6B /* Read From Cache at Quad Output */
#define SPI_CMD_READ_DUAL_ADDR 0xBB /* Read From Cache at Dual I/O */
#define SPI_CMD_READ_QUAD_ADDR 0xEB /* Read From Cache at Quad I/O */
#define SPI_CMD_RDID 0x9F /* Read Identification */
#define SPI_CMD_WRITE_STD 0x02 /* Page Load at Standard Input */
#define SPI_CMD_WRITE_QUAD 0x32 /* Page Load at Quad Input */
#define SPI_CMD_SE_128K 0xD8 /* 128KB sector Erase */
#define SPI_CMD_SE_256K 0xD8 /* 256KB sector Erase */
#define SPI_CMD_RESET 0xff /* Reset the device */
/*****************************************************************************/
/* SPI operation information */
struct spi_op_info {
unsigned char iftype;
unsigned char cmd;
unsigned char dummy;
unsigned int size;
unsigned int clock;
};
struct spi_nand_driver;
struct cvsnfc_op {
void *host;
struct spi_nand_driver *driver;
struct spi_op_info read[1];
struct spi_op_info write[1];
struct spi_op_info erase[MAX_SPI_NAND_OP];
};
struct spi_nand_driver {
int (*wait_ready)(struct cvsnfc_op *spi);
int (*write_enable)(struct cvsnfc_op *spi);
int (*qe_enable)(struct cvsnfc_op *spi);
int (*ecc_enable)(struct cvsnfc_op *spi);
int (*select_die)(struct cvsnfc_op *spi, unsigned int id);
unsigned char ecc_uncorr;
};
#define FLAGS_SET_PLANE_BIT BIT(0)
#define NAND_SET_PLANE_BIT BIT(0)
#define SPI_NAND_MULTIPLANE_BIT BIT(12)
#define FLAGS_SET_QE_BIT (BIT(1))
#define FLAGS_ENABLE_X2_BIT (BIT(2))
#define FLAGS_ENABLE_X4_BIT (BIT(3))
#define FLAGS_OW_SETTING_BIT (BIT(4))
#define FLAGS_ONLY_ONEBIT_MODE_BIT (BIT(5))
#define FLAGS_CONTORL_WP_BIT (BIT(6))
#define FLAGS_SUPPORT_W_TWICE_DEBUG (BIT(7))
#define SPI_NAND_FREQ_XTAL 0 /* 6.25 Mhz */
#define SPI_NAND_FREQ_23MHz 1 /* 23.4375 Mhz */
#define SPI_NAND_FREQ_26MHz 2 /* 26.7857 Mhz */
#define SPI_NAND_FREQ_31MHz 3 /* 31.25 Mhz */
#define SPI_NAND_FREQ_37MHz 4 /* 37.5 Mhz */
#define SPI_NAND_FREQ_46MHz 5 /* 46.875 Mhz */
#define SPI_NAND_FREQ_62MHz 6 /* 62.5 Mhz */
#define SPI_NAND_FREQ_93MHz 7 /* 93.75 Mhz */
struct cvsnfc_chip_info {
char *name;
unsigned char id[MAX_ID_LEN];
unsigned char id_len;
unsigned long long chipsize;
unsigned long long diesize;
unsigned int erasesize;
unsigned int pagesize;
unsigned int oobsize;
unsigned int badblock_pos;
unsigned int flags;
struct spi_op_info *read[MAX_SPI_NAND_OP];
struct spi_op_info *write[MAX_SPI_NAND_OP];
struct spi_op_info *erase[MAX_SPI_NAND_OP];
struct spi_nand_driver *driver;
uint8_t ecc_en_feature_offset;
uint8_t ecc_en_mask;
uint8_t ecc_status_offset;
uint8_t ecc_status_mask;
uint8_t ecc_status_shift;
uint8_t ecc_status_uncorr_val;
uint8_t sck_l;
uint8_t sck_h;
uint16_t max_freq;
uint32_t sample_param;
uint8_t xtal_switch;
};
/*****************************************************************************/
void spi_nand_ids_register(void);
void cvsnfc_get_best_clock(unsigned int *clock);
struct cvsnfc_host;
void spi_feature_op(struct cvsnfc_host *host, int op, int addr, unsigned int *val);
/******************************************************************************/
#endif /* __CVSNFC_SPI_IDSH */