mirror of https://github.com/OpenIPC/firmware.git
519 lines
20 KiB
Diff
519 lines
20 KiB
Diff
--- linux-4.9.37/include/linux/mfd/goke_fmc.h 1970-01-01 03:00:00.000000000 +0300
|
|
+++ linux-4.9.y/include/linux/mfd/goke_fmc.h 2021-06-07 13:01:34.000000000 +0300
|
|
@@ -0,0 +1,515 @@
|
|
+/*
|
|
+ * Copyright (c) Hunan Goke,Chengdu Goke,Shandong Goke. 2021. All rights reserved.
|
|
+ */
|
|
+
|
|
+#ifndef __BSP_FMC_H
|
|
+#define __BSP_FMC_H
|
|
+
|
|
+#include <linux/compiler.h>
|
|
+#include <linux/clk.h>
|
|
+#include <linux/mutex.h>
|
|
+#include <linux/bitops.h>
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define _512B (512)
|
|
+#define _1K (1024)
|
|
+#define _2K (2048)
|
|
+#define _4K (4096)
|
|
+#define _8K (8192)
|
|
+#define _16K (16384)
|
|
+#define _32K (32768)
|
|
+#define _64K (0x10000UL)
|
|
+#define _128K (0x20000UL)
|
|
+#define _256K (0x40000UL)
|
|
+#define _512K (0x80000UL)
|
|
+#define _1M (0x100000UL)
|
|
+#define _2M (0x200000UL)
|
|
+#define _4M (0x400000UL)
|
|
+#define _8M (0x800000UL)
|
|
+#define _16M (0x1000000UL)
|
|
+#define _32M (0x2000000UL)
|
|
+#define _64M (0x4000000UL)
|
|
+#define _128M (0x8000000UL)
|
|
+#define _256M (0x10000000UL)
|
|
+#define _512M (0x20000000UL)
|
|
+#define _1G (0x40000000ULL)
|
|
+#define _2G (0x80000000ULL)
|
|
+#define _4G (0x100000000ULL)
|
|
+#define _8G (0x200000000ULL)
|
|
+#define _16G (0x400000000ULL)
|
|
+#define _64G (0x1000000000ULL)
|
|
+
|
|
+/*****************************************************************************/
|
|
+/* FMC REG MAP */
|
|
+/*****************************************************************************/
|
|
+#define FMC_CFG 0x00
|
|
+#define FMC_CFG_SPI_NAND_SEL(_type) (((_size) & 0x3) << 11)
|
|
+#define SPI_NOR_ADDR_MODE BIT(10)
|
|
+#define FMC_CFG_OP_MODE_MASK BIT_MASK(0)
|
|
+#define FMC_CFG_OP_MODE_BOOT 0
|
|
+#define FMC_CFG_OP_MODE_NORMAL 1
|
|
+#define SPI_NOR_ADDR_MODE_3BYTES (0x0 << 10)
|
|
+#define SPI_NOR_ADDR_MODE_4BYTES (0x1 << 10)
|
|
+
|
|
+#define FMC_CFG_BLOCK_SIZE(_size) (((_size) & 0x3) << 8)
|
|
+#define FMC_CFG_ECC_TYPE(_type) (((_type) & 0x7) << 5)
|
|
+#define FMC_CFG_PAGE_SIZE(_size) (((_size) & 0x3) << 3)
|
|
+#define FMC_CFG_FLASH_SEL(_type) (((_type) & 0x3) << 1)
|
|
+#define FMC_CFG_OP_MODE(_mode) ((_mode) & 0x1)
|
|
+
|
|
+#define SPI_NAND_MFR_OTHER 0x0
|
|
+#define SPI_NAND_MFR_WINBOND 0x1
|
|
+#define SPI_NAND_MFR_ESMT 0x2
|
|
+#define SPI_NAND_MFR_MICRON 0x3
|
|
+
|
|
+#define SPI_NAND_SEL_SHIFT 11
|
|
+#define SPI_NAND_SEL_MASK (0x3 << SPI_NAND_SEL_SHIFT)
|
|
+
|
|
+#define SPI_NOR_ADDR_MODE_3_BYTES 0x0
|
|
+#define SPI_NOR_ADDR_MODE_4_BYTES 0x1
|
|
+
|
|
+#define SPI_NOR_ADDR_MODE_SHIFT 10
|
|
+#define SPI_NOR_ADDR_MODE_MASK (0x1 << SPI_NOR_ADDR_MODE_SHIFT)
|
|
+
|
|
+#define BLOCK_SIZE_64_PAGE 0x0
|
|
+#define BLOCK_SIZE_128_PAGE 0x1
|
|
+#define BLOCK_SIZE_256_PAGE 0x2
|
|
+#define BLOCK_SIZE_512_PAGE 0x3
|
|
+
|
|
+#define BLOCK_SIZE_MASK (0x3 << 8)
|
|
+
|
|
+#define ECC_TYPE_0BIT 0x0
|
|
+#define ECC_TYPE_8BIT 0x1
|
|
+#define ECC_TYPE_16BIT 0x2
|
|
+#define ECC_TYPE_24BIT 0x3
|
|
+#define ECC_TYPE_28BIT 0x4
|
|
+#define ECC_TYPE_40BIT 0x5
|
|
+#define ECC_TYPE_64BIT 0x6
|
|
+
|
|
+#define ECC_TYPE_SHIFT 5
|
|
+#define ECC_TYPE_MASK (0x7 << ECC_TYPE_SHIFT)
|
|
+
|
|
+#define PAGE_SIZE_2KB 0x0
|
|
+#define PAGE_SIZE_4KB 0x1
|
|
+#define PAGE_SIZE_8KB 0x2
|
|
+#define PAGE_SIZE_16KB 0x3
|
|
+
|
|
+#define PAGE_SIZE_SHIFT 3
|
|
+#define PAGE_SIZE_MASK (0x3 << PAGE_SIZE_SHIFT)
|
|
+
|
|
+#define FLASH_TYPE_SPI_NOR 0x0
|
|
+#define FLASH_TYPE_SPI_NAND 0x1
|
|
+#define FLASH_TYPE_NAND 0x2
|
|
+#define FLASH_TYPE_UNKNOWN 0x3
|
|
+
|
|
+#define FLASH_TYPE_SEL_MASK (0x3 << 1)
|
|
+#define GET_SPI_FLASH_TYPE(_reg) (((_reg) >> 1) & 0x3)
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_GLOBAL_CFG 0x04
|
|
+#define FMC_GLOBAL_CFG_WP_ENABLE BIT(6)
|
|
+#define FMC_GLOBAL_CFG_RANDOMIZER_EN (1 << 2)
|
|
+#define FLASH_TYPE_SEL_MASK (0x3 << 1)
|
|
+#define FMC_CFG_FLASH_SEL(_type) (((_type) & 0x3) << 1)
|
|
+
|
|
+#define FMC_GLOBAL_CFG_DTR_MODE BIT(11)
|
|
+/*****************************************************************************/
|
|
+#define FMC_SPI_TIMING_CFG 0x08
|
|
+#define TIMING_CFG_TCSH(nr) (((nr) & 0xf) << 8)
|
|
+#define TIMING_CFG_TCSS(nr) (((nr) & 0xf) << 4)
|
|
+#define TIMING_CFG_TSHSL(nr) ((nr) & 0xf)
|
|
+
|
|
+#define CS_HOLD_TIME 0x6
|
|
+#define CS_SETUP_TIME 0x6
|
|
+#define CS_DESELECT_TIME 0xf
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_PND_PWIDTH_CFG 0x0c
|
|
+#define PWIDTH_CFG_RW_HCNT(_n) (((_n) & 0xf) << 8)
|
|
+#define PWIDTH_CFG_R_LCNT(_n) (((_n) & 0xf) << 4)
|
|
+#define PWIDTH_CFG_W_LCNT(_n) ((_n) & 0xf)
|
|
+
|
|
+#define RW_H_WIDTH (0xa)
|
|
+#define R_L_WIDTH (0xa)
|
|
+#define W_L_WIDTH (0xa)
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_INT 0x18
|
|
+#define FMC_INT_AHB_OP BIT(7)
|
|
+#define FMC_INT_WR_LOCK BIT(6)
|
|
+#define FMC_INT_DMA_ERR BIT(5)
|
|
+#define FMC_INT_ERR_ALARM BIT(4)
|
|
+#define FMC_INT_ERR_INVALID BIT(3)
|
|
+#define FMC_INT_ERR_INVALID_MASK (0x8)
|
|
+#define FMC_INT_ERR_VALID BIT(2)
|
|
+#define FMC_INT_ERR_VALID_MASK (0x4)
|
|
+#define FMC_INT_OP_FAIL BIT(1)
|
|
+#define FMC_INT_OP_DONE BIT(0)
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_INT_EN 0x1c
|
|
+#define FMC_INT_EN_AHB_OP BIT(7)
|
|
+#define FMC_INT_EN_WR_LOCK BIT(6)
|
|
+#define FMC_INT_EN_DMA_ERR BIT(5)
|
|
+#define FMC_INT_EN_ERR_ALARM BIT(4)
|
|
+#define FMC_INT_EN_ERR_INVALID BIT(3)
|
|
+#define FMC_INT_EN_ERR_VALID BIT(2)
|
|
+#define FMC_INT_EN_OP_FAIL BIT(1)
|
|
+#define FMC_INT_EN_OP_DONE BIT(0)
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_INT_CLR 0x20
|
|
+#define FMC_INT_CLR_AHB_OP BIT(7)
|
|
+#define FMC_INT_CLR_WR_LOCK BIT(6)
|
|
+#define FMC_INT_CLR_DMA_ERR BIT(5)
|
|
+#define FMC_INT_CLR_ERR_ALARM BIT(4)
|
|
+#define FMC_INT_CLR_ERR_INVALID BIT(3)
|
|
+#define FMC_INT_CLR_ERR_VALID BIT(2)
|
|
+#define FMC_INT_CLR_OP_FAIL BIT(1)
|
|
+#define FMC_INT_CLR_OP_DONE BIT(0)
|
|
+
|
|
+#define FMC_INT_CLR_ALL 0xff
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_CMD 0x24
|
|
+#define FMC_CMD_CMD2(_cmd) (((_cmd) & 0xff) << 8)
|
|
+#define FMC_CMD_CMD1(_cmd) ((_cmd) & 0xff)
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_ADDRH 0x28
|
|
+#define FMC_ADDRH_SET(_addr) ((_addr) & 0xff)
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_ADDRL 0x2c
|
|
+#define FMC_ADDRL_BLOCK_MASK(_page) ((_page) & 0xffffffc0)
|
|
+#define FMC_ADDRL_BLOCK_H_MASK(_page) (((_page) & 0xffff) << 16)
|
|
+#define FMC_ADDRL_BLOCK_L_MASK(_page) ((_page) & 0xffc0)
|
|
+
|
|
+#define READ_ID_ADDR 0x00
|
|
+#define PROTECT_ADDR 0xa0
|
|
+#define FEATURE_ADDR 0xb0
|
|
+#define STATUS_ADDR 0xc0
|
|
+/*****************************************************************************/
|
|
+#define FMC_OP_CFG 0x30
|
|
+#define OP_CFG_FM_CS(_cs) ((_cs) << 11)
|
|
+#define OP_CFG_FORCE_CS_EN(_en) ((_en) << 10)
|
|
+#define OP_CFG_MEM_IF_TYPE(_type) (((_type) & 0x7) << 7)
|
|
+#define OP_CFG_ADDR_NUM(_addr) (((_addr) & 0x7) << 4)
|
|
+#define OP_CFG_DUMMY_NUM(_dummy) ((_dummy) & 0xf)
|
|
+#define OP_CFG_OEN_EN (0x1 << 13)
|
|
+
|
|
+#define IF_TYPE_SHIFT 7
|
|
+#define IF_TYPE_MASK (0x7 << IF_TYPE_SHIFT)
|
|
+
|
|
+#define READ_ID_ADDR_NUM 1
|
|
+#define FEATURES_OP_ADDR_NUM 1
|
|
+#define STD_OP_ADDR_NUM 3
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_SPI_OP_ADDR 0x34
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_DATA_NUM 0x38
|
|
+#define FMC_DATA_NUM_CNT(_n) ((_n) & 0x3fff)
|
|
+
|
|
+#define SPI_NOR_SR_LEN 1 /* Status Register length */
|
|
+#define SPI_NOR_CR_LEN 1 /* Config Register length */
|
|
+#define FEATURES_DATA_LEN 1
|
|
+#define READ_OOB_BB_LEN 1
|
|
+
|
|
+#define PROTECT_BRWD_MASK BIT(7)
|
|
+#define PROTECT_BP3_MASK BIT(6)
|
|
+#define PROTECT_BP2_MASK BIT(5)
|
|
+#define PROTECT_BP1_MASK BIT(4)
|
|
+#define PROTECT_BP0_MASK BIT(3)
|
|
+
|
|
+#define ANY_BP_ENABLE(_val) ((PROTECT_BP3_MASK & _val) \
|
|
+ || (PROTECT_BP2_MASK & _val) \
|
|
+ || (PROTECT_BP1_MASK & _val) \
|
|
+ || (PROTECT_BP0_MASK & _val))
|
|
+
|
|
+#define ALL_BP_MASK (PROTECT_BP3_MASK \
|
|
+ | PROTECT_BP2_MASK \
|
|
+ | PROTECT_BP1_MASK \
|
|
+ | PROTECT_BP0_MASK)
|
|
+
|
|
+#define FEATURE_ECC_ENABLE (1 << 4)
|
|
+#define FEATURE_QE_ENABLE (1 << 0)
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_OP 0x3c
|
|
+#define FMC_OP_DUMMY_EN BIT(8)
|
|
+#define FMC_OP_CMD1_EN BIT(7)
|
|
+#define FMC_OP_ADDR_EN BIT(6)
|
|
+#define FMC_OP_WRITE_DATA_EN BIT(5)
|
|
+#define FMC_OP_CMD2_EN BIT(4)
|
|
+#define FMC_OP_WAIT_READY_EN BIT(3)
|
|
+#define FMC_OP_READ_DATA_EN BIT(2)
|
|
+#define FMC_OP_READ_STATUS_EN BIT(1)
|
|
+#define FMC_OP_REG_OP_START BIT(0)
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_DMA_LEN 0x40
|
|
+#define FMC_DMA_LEN_SET(_len) ((_len) & 0x0fffffff)
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_DMA_AHB_CTRL 0x48
|
|
+#define FMC_DMA_AHB_CTRL_DMA_PP_EN BIT(3)
|
|
+#define FMC_DMA_AHB_CTRL_BURST16_EN BIT(2)
|
|
+#define FMC_DMA_AHB_CTRL_BURST8_EN BIT(1)
|
|
+#define FMC_DMA_AHB_CTRL_BURST4_EN BIT(0)
|
|
+
|
|
+#define ALL_BURST_ENABLE (FMC_DMA_AHB_CTRL_BURST16_EN \
|
|
+ | FMC_DMA_AHB_CTRL_BURST8_EN \
|
|
+ | FMC_DMA_AHB_CTRL_BURST4_EN)
|
|
+
|
|
+#define FMC_DMA_ADDR_OFFSET 4096
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_DMA_SADDR_D0 0x4c
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_DMA_SADDR_D1 0x50
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_DMA_SADDR_D2 0x54
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_DMA_SADDR_D3 0x58
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_DMA_SADDR_OOB 0x5c
|
|
+
|
|
+#ifdef CONFIG_64BIT
|
|
+/*****************************************************************************/
|
|
+#define FMC_DMA_SADDRH_D0 0x200
|
|
+#define FMC_DMA_SADDRH_SHIFT 0x3LL
|
|
+#define FMC_DMA_SADDRH_MASK (FMC_DMA_SADDRH_SHIFT << 32)
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_DMA_SADDRH_OOB 0x210
|
|
+#endif
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_DMA_BLK_SADDR 0x60
|
|
+#define FMC_DMA_BLK_SADDR_SET(_addr) ((_addr) & 0xffffff)
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_DMA_BLK_LEN 0x64
|
|
+#define FMC_DMA_BLK_LEN_SET(_len) ((_len) & 0xffff)
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_OP_CTRL 0x68
|
|
+#define OP_CTRL_RD_OPCODE(code) (((code) & 0xff) << 16)
|
|
+#define OP_CTRL_WR_OPCODE(code) (((code) & 0xff) << 8)
|
|
+#define OP_CTRL_RD_OP_SEL(_op) (((_op) & 0x3) << 4)
|
|
+#define OP_CTRL_DMA_OP(_type) ((_type) << 2)
|
|
+#define OP_CTRL_RW_OP(op) ((op) << 1)
|
|
+#define OP_CTRL_DMA_OP_READY BIT(0)
|
|
+
|
|
+#define RD_OP_READ_ALL_PAGE 0x0
|
|
+#define RD_OP_READ_OOB 0x1
|
|
+#define RD_OP_BLOCK_READ 0x2
|
|
+
|
|
+#define RD_OP_SHIFT 4
|
|
+#define RD_OP_MASK (0x3 << RD_OP_SHIFT)
|
|
+
|
|
+#define OP_TYPE_DMA 0x0
|
|
+#define OP_TYPE_REG 0x1
|
|
+
|
|
+#define FMC_OP_READ 0x0
|
|
+#define FMC_OP_WRITE 0x1
|
|
+#define RW_OP_READ 0x0
|
|
+#define RW_OP_WRITE 0x1
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_OP_PARA 0x70
|
|
+#define FMC_OP_PARA_RD_OOB_ONLY BIT(1)
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_BOOT_SET 0x74
|
|
+#define FMC_BOOT_SET_DEVICE_ECC_EN BIT(3)
|
|
+#define FMC_BOOT_SET_BOOT_QUAD_EN BIT(1)
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_STATUS 0xac
|
|
+
|
|
+/*****************************************************************************/
|
|
+#ifndef FMC_VERSION
|
|
+#define FMC_VERSION 0xbc
|
|
+#endif
|
|
+
|
|
+/* fmc IP version */
|
|
+#ifndef FMC_VER_100
|
|
+#define FMC_VER_100 (0x100)
|
|
+#endif
|
|
+
|
|
+/*****************************************************************************/
|
|
+/* DMA address align with 32 bytes. */
|
|
+#define FMC_DMA_ALIGN 32
|
|
+
|
|
+#define FMC_CHIP_DELAY 25
|
|
+/*****************************************************************************/
|
|
+#define FMC_ECC_ERR_NUM0_BUF0 0xc0
|
|
+#define GET_ECC_ERR_NUM(_i, _reg) (((_reg) >> ((_i) * 8)) & 0xff)
|
|
+
|
|
+#define DISABLE 0
|
|
+#define ENABLE 1
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_REG_ADDRESS_LEN 0x200
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_MAX_READY_WAIT_JIFFIES (HZ)
|
|
+
|
|
+#define MAX_SPI_NOR_ID_LEN 8
|
|
+#define MAX_NAND_ID_LEN 8
|
|
+#define MAX_SPI_NAND_ID_LEN 3
|
|
+
|
|
+#define GET_OP 0
|
|
+#define SET_OP 1
|
|
+
|
|
+#define STATUS_ECC_MASK (0x3 << 4)
|
|
+#define STATUS_P_FAIL_MASK (1 << 3)
|
|
+#define STATUS_E_FAIL_MASK (1 << 2)
|
|
+#define STATUS_WEL_MASK (1 << 1)
|
|
+#define STATUS_OIP_MASK (1 << 0)
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_VERSION 0xbc
|
|
+
|
|
+/* fmc IP version */
|
|
+#define FMC_VER_100 (0x100)
|
|
+
|
|
+#define CONFIG_SPI_NAND_MAX_CHIP_NUM (1)
|
|
+
|
|
+#define CONFIG_FMC100_MAX_NAND_CHIP (1)
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define GET_PAGE_INDEX(host) \
|
|
+ ((host->addr_value[0] >> 16) | (host->addr_value[1] << 16))
|
|
+/*****************************************************************************/
|
|
+#define FMC_MAX_CHIP_NUM 2
|
|
+
|
|
+extern unsigned char fmc_cs_user[];
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define fmc_readl(_host, _reg) \
|
|
+ (readl((char *)_host->regbase + (_reg)))
|
|
+
|
|
+#define fmc_readb( _addr) \
|
|
+ (readb((void __iomem *)(_addr)))
|
|
+
|
|
+#define fmc_readw( _addr) \
|
|
+ (readw((void __iomem *)(_addr)))
|
|
+
|
|
+#define fmc_writel(_host, _reg, _value) \
|
|
+ (writel((u_int)(_value), ((char *)_host->regbase + (_reg))))
|
|
+
|
|
+#define fmc_writeb(_val, _addr) \
|
|
+ (writeb((u_int)(_val), ((char *)_addr)))
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_WAIT_TIMEOUT 0x2000000
|
|
+
|
|
+#define FMC_CMD_WAIT_CPU_FINISH(_host) \
|
|
+ do { \
|
|
+ unsigned regval, timeout = FMC_WAIT_TIMEOUT * 2; \
|
|
+ do { \
|
|
+ regval = fmc_readl((_host), FMC_OP); \
|
|
+ --timeout; \
|
|
+ } while ((regval & FMC_OP_REG_OP_START) && timeout); \
|
|
+ if (!timeout) \
|
|
+ pr_info("Error: Wait cmd cpu finish timeout!\n"); \
|
|
+ } while (0)
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_DMA_WAIT_INT_FINISH(_host) \
|
|
+ do { \
|
|
+ unsigned regval, timeout = FMC_WAIT_TIMEOUT; \
|
|
+ do { \
|
|
+ regval = fmc_readl((_host), FMC_INT); \
|
|
+ --timeout; \
|
|
+ } while ((!(regval & FMC_INT_OP_DONE) && timeout)); \
|
|
+ if (!timeout) \
|
|
+ pr_info("Error: Wait dma int finish timeout!\n"); \
|
|
+ } while (0)
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define FMC_DMA_WAIT_CPU_FINISH(_host) \
|
|
+ do { \
|
|
+ unsigned regval, timeout = FMC_WAIT_TIMEOUT; \
|
|
+ do { \
|
|
+ regval = fmc_readl((_host), FMC_OP_CTRL); \
|
|
+ --timeout; \
|
|
+ } while ((regval & OP_CTRL_DMA_OP_READY) && timeout); \
|
|
+ if (!timeout) \
|
|
+ pr_info("Error: Wait dma cpu finish timeout!\n"); \
|
|
+ } while (0)
|
|
+
|
|
+/*****************************************************************************/
|
|
+#define BT_DBG 0 /* Boot init debug print */
|
|
+#define ER_DBG 0 /* Erase debug print */
|
|
+#define WR_DBG 0 /* Write debug print */
|
|
+#define RD_DBG 0 /* Read debug print */
|
|
+#define QE_DBG 0 /* Quad Enable debug print */
|
|
+#define OP_DBG 0 /* OP command debug print */
|
|
+#define DMA_DB 0 /* DMA read or write debug print */
|
|
+#define AC_DBG 0 /* 3-4byte Address Cycle */
|
|
+#define SR_DBG 0 /* Status Register debug print */
|
|
+#define CR_DBG 0 /* Config Register debug print */
|
|
+#define FT_DBG 0 /* Features debug print */
|
|
+#define WE_DBG 0 /* Write Enable debug print */
|
|
+#define BP_DBG 0 /* Block Protection debug print */
|
|
+#define EC_DBG 0 /* enable/disable ecc0 and randomizer */
|
|
+#define PM_DBG 0 /* power management debug */
|
|
+
|
|
+#define FMC_PR(_type, _fmt, arg...) \
|
|
+ do { \
|
|
+ if (_type) \
|
|
+ DB_MSG(_fmt, ##arg) \
|
|
+ } while (0)
|
|
+
|
|
+#define DB_MSG(_fmt, arg...) \
|
|
+ pr_info("%s(%d): " _fmt, __func__, __LINE__, ##arg);
|
|
+
|
|
+#define DB_BUG(fmt, args...) \
|
|
+ do { \
|
|
+ pr_info("%s(%d): BUG: " fmt, __FILE__, __LINE__, ##args); \
|
|
+ while (1) \
|
|
+ ; \
|
|
+ } while (0)
|
|
+
|
|
+/*****************************************************************************/
|
|
+enum fmc_iftype {
|
|
+ IF_TYPE_STD,
|
|
+ IF_TYPE_DUAL,
|
|
+ IF_TYPE_DIO,
|
|
+ IF_TYPE_QUAD,
|
|
+ IF_TYPE_QIO,
|
|
+};
|
|
+
|
|
+struct bsp_fmc {
|
|
+ void __iomem *regbase;
|
|
+ void __iomem *iobase;
|
|
+ struct clk *clk;
|
|
+ struct mutex lock;
|
|
+ void *buffer;
|
|
+ dma_addr_t dma_buffer;
|
|
+ unsigned int dma_len;
|
|
+};
|
|
+
|
|
+struct fmc_cmd_op {
|
|
+ unsigned char cs;
|
|
+ unsigned char cmd;
|
|
+ unsigned char l_cmd;
|
|
+ unsigned char addr_h;
|
|
+ unsigned int addr_l;
|
|
+ unsigned int data_no;
|
|
+ unsigned short option;
|
|
+ unsigned short op_cfg;
|
|
+};
|
|
+
|
|
+extern struct mutex fmc_switch_mutex;
|
|
+
|
|
+#endif /*__BSP_FMC_H*/
|