#ifndef _QSPI_HOST_H #define _QSPI_HOST_H #include "qspi_common.h" #include "qspi_flash.h" #define QSPI_RX_BUFF_MAX 32 #define QSPI_TX_BUFF_MAX 64 #define QSPI_TX_BUFF_POP_MIN 16 #define QSPI_AHB_BUFF_MAX_SIZE (256*3) #define QSPI_DMA_TX_CHANNEL 28 #define ENABLE_QSPI_INT #define ENABLE_QSPI_DMA #if (defined(LTEONLY_8M8M) || defined(CRANEL_4MRAM) || defined(LTEGSM_THIN)) #define SW_HANDLE_XIP #endif typedef unsigned char UINT8; typedef unsigned short UINT16; typedef unsigned long UINT32; typedef unsigned char Int8; typedef unsigned short Int16; typedef unsigned long Int32; struct spi_flash_cmd; enum { QSPI_LUT_NOTSET = -1, QSPI_LUT_SEQID0 = 0, QSPI_LUT_SEQID1, QSPI_LUT_SEQID2, QSPI_LUT_SEQID3, QSPI_LUT_SEQID4, QSPI_LUT_SEQID5, QSPI_LUT_SEQID6, QSPI_LUT_SEQID7, QSPI_LUT_SEQID8, QSPI_LUT_SEQID9, QSPI_LUT_SEQID10, QSPI_LUT_SEQID11, QSPI_LUT_SEQID12, QSPI_LUT_SEQID13, QSPI_LUT_SEQID14, QSPI_LUT_SEQID15 }; enum { QSPI_NORMAL_MODE = 0, QSPI_DISABLE_MODE, QSPI_STOP_MODE }; enum { QSPI_FUNC_CLK_26MHZ = 0, QSPI_FUNC_CLK_52MHZ, QSPI_FUNC_CLK_78MHZ, QSPI_FUNC_CLK_104MHZ, QSPI_FUNC_CLK_156MHZ, QSPI_FUNC_CLK_208MHZ, QSPI_FUNC_CLK_312MHZ, QSPI_FUNC_CLK_416MHZ, QSPI_FUNC_CLK_400MHZ = QSPI_FUNC_CLK_78MHZ, //with PLL2 }; enum { QSPI_CS_A1 = 0, QSPI_CS_A2, QSPI_CS_B1, QSPI_CS_B2, QSPI_CS_MAX }; enum { QSPI_CPU_XFER = 0, QSPI_DMA_XFER }; struct qspi_host { struct spi_flash_cmd *cmd; int bytes_left; volatile int complete; int wmrk; int cs_addr[QSPI_CS_MAX]; int use_intr; int en_tx_dma; int use_dma; int use_xip; int xip_read; int bus_clk; int lut_map; }; void _writel(unsigned int data , unsigned int addr ); unsigned int _readl(unsigned int addr); void *qspi_memcpy(void *dst, const void *src, int num); void qspi_enable_ahb_preempt(int on); void dcache_invalidate_range(unsigned int addr, unsigned int len); void qspi_config_lookup_tbl(struct spi_flash_chip *chip, struct spi_flash_cmd_cfg *cmd_cfg, uint8_t mode, int seq_id); int qspi_enable_xip(struct spi_flash_chip *chip, struct spi_flash_cmd_cfg *cmd_cfg); int qspi_preinit_lookup_tbl(struct spi_flash_chip *chip); struct qspi_host * qspi_host_init(int cs, int mhz, int use_xip); int qspi_start_cmd(struct spi_flash_chip *chip, struct spi_flash_cmd *cmd); unsigned int disable_interupt_for_qspi(void); void enable_interupt_for_qspi(unsigned int cpsr); int qspi_need_send_resume(void); #endif