Files

85 lines
2.6 KiB
C

#ifndef _SPI_NOR_H
#define _SPI_NOR_H
#include "global_types.h"
#include "qspi_flash.h"
#define STATUS1_BUSY (0x1)
#define STATUS1_WEL (0x1 << 1)
#define STATUS1_BP0 (0x1 << 2)
#define STATUS1_BP1 (0x1 << 3)
#define STATUS1_BP2 (0x1 << 4)
#define STATUS1_TB (0x1 << 5)
#define STATUS1_SEC (0x1 << 6)
#define STATUS1_SRP0 (0x1 << 7)
#define STATUS2_SRP1 (0x1)
#define STATUS2_QE (0x1 << 1)
#define STATUS2_LB1 (0x1 << 3)
#define STATUS2_LB2 (0x1 << 4)
#define STATUS2_LB3 (0x1 << 5)
#define STATUS2_CMP (0x1 << 6)
#define STATUS2_SUS (0x1 << 7)
/*SPI NAND chip options*/
#define SPINOR_NEED_PLANE_SELECT (1 << 0)
#define SPINOR_NEED_DIE_SELECT (1 << 1)
#define SPINOR_QE_USE_BIT6 (1 << 2)
#define SPINOR_HAVE_WRITE_STATUS2 (1 << 3)
#define SPINOR_WRITE_STATUS1_1BYTE (1 << 4)
#define SPINOR_MFR_MICRON 0x2C
#define SPINOR_MAX_ID_LEN 3
typedef enum
{
XIP_VOLTE_TASK_ID,
XIP_BT_TASK_ID,
XIP_MAX_TASK_ID
} XipTaskID;
typedef void (*TaskSuspendCB)(void);
typedef void (*TaskResumeCB)(void);
struct spi_nor_info {
char *name;
uint8_t mfr_id;
uint16_t dev_id;
uint32_t page_size;
uint32_t pages_per_blk;
uint32_t total_size;
uint32_t options;
uint32_t max_mhz;
};
#define SPI_NOR_INFO(nm, mid, did, pagesz, pg_per_blk, size, opts, _max_mhz) \
{ .name = (nm), .mfr_id = (mid), .dev_id = (did),\
.page_size = (pagesz), .pages_per_blk = (pg_per_blk),\
.total_size = (size), .options = (opts), \
.max_mhz = (_max_mhz), }
struct spi_flash_chip *spi_nor_init(struct qspi_host *host, int cs,
int rx_mode, int tx_mode, int qpi);
unsigned int spi_nor_do_write(unsigned int addr, unsigned int buf_addr,unsigned int size, BOOL flashType);
unsigned int spi_nor_do_read(unsigned int addr, unsigned int buf_addr, unsigned int size, BOOL flashType);
unsigned int spi_nor_do_erase(unsigned int addr, unsigned int size, BOOL flashType);
int spi_nor_do_erase_4k(unsigned int addr, unsigned int size, BOOL flashType);
int spi_nor_test(void);
int qspi_abort_handle(void);
struct spi_flash_chip *get_spi_flash_chip(unsigned char num);
int spi_nor_read_status1(struct spi_flash_chip *chip, uint8_t *status);
int spi_nor_read_status2(struct spi_flash_chip *chip, uint8_t *status);
int spi_nor_write_status1(struct spi_flash_chip *chip, uint8_t *buf,uint8_t count);
int spi_nor_write_status2(struct spi_flash_chip *chip, uint8_t *buf);
int spi_nor_write_enable(struct spi_flash_chip *chip);
#ifdef SUPPORT_FBP
int spi_nor_write_volatile_status_register_enable(struct spi_flash_chip *chip);
#endif
int spi_nor_read_sfdp(struct spi_flash_chip *chip, int addr, int size, uint8_t *rbuf);
#endif