123 lines
4.1 KiB
C
123 lines
4.1 KiB
C
|
|
#ifndef __DAVINCI_MMC_H__
|
|
#define __DAVINCI_MMC_H__
|
|
|
|
/* DAVINCI_MMCCTL definitions */
|
|
#define MMCCTL_DATRST (1 << 0)
|
|
#define MMCCTL_CMDRST (1 << 1)
|
|
#define MMCCTL_WIDTH_8_BIT (1 << 8)
|
|
#define MMCCTL_WIDTH_4_BIT (1 << 2)
|
|
#define MMCCTL_DATEG_DISABLED (0 << 6)
|
|
#define MMCCTL_DATEG_RISING (1 << 6)
|
|
#define MMCCTL_DATEG_FALLING (2 << 6)
|
|
#define MMCCTL_DATEG_BOTH (3 << 6)
|
|
#define MMCCTL_PERMDR_LE (0 << 9)
|
|
#define MMCCTL_PERMDR_BE (1 << 9)
|
|
#define MMCCTL_PERMDX_LE (0 << 10)
|
|
#define MMCCTL_PERMDX_BE (1 << 10)
|
|
|
|
/* DAVINCI_MMCCLK definitions */
|
|
#define MMCCLK_CLKEN (1 << 8)
|
|
#define MMCCLK_CLKRT_MASK (0xFF << 0)
|
|
|
|
/* IRQ bit definitions, for DAVINCI_MMCST0 and DAVINCI_MMCIM */
|
|
#define MMCST0_DATDNE (1 << 0) /* data done */
|
|
#define MMCST0_BSYDNE (1 << 1) /* busy done */
|
|
#define MMCST0_RSPDNE (1 << 2) /* command done */
|
|
#define MMCST0_TOUTRD (1 << 3) /* data read timeout */
|
|
#define MMCST0_TOUTRS (1 << 4) /* command response timeout */
|
|
#define MMCST0_CRCWR (1 << 5) /* data write CRC error */
|
|
#define MMCST0_CRCRD (1 << 6) /* data read CRC error */
|
|
#define MMCST0_CRCRS (1 << 7) /* command response CRC error */
|
|
#define MMCST0_DXRDY (1 << 9) /* data transmit ready (fifo empty) */
|
|
#define MMCST0_DRRDY (1 << 10) /* data receive ready (data in fifo)*/
|
|
#define MMCST0_DATED (1 << 11) /* DAT3 edge detect */
|
|
#define MMCST0_TRNDNE (1 << 12) /* transfer done */
|
|
|
|
/* DAVINCI_MMCST1 definitions */
|
|
#define MMCST1_BUSY (1 << 0)
|
|
|
|
/* DAVINCI_MMCCMD definitions */
|
|
#define MMCCMD_CMD_MASK (0x3F << 0)
|
|
#define MMCCMD_PPLEN (1 << 7)
|
|
#define MMCCMD_BSYEXP (1 << 8)
|
|
#define MMCCMD_RSPFMT_MASK (3 << 9)
|
|
#define MMCCMD_RSPFMT_NONE (0 << 9)
|
|
#define MMCCMD_RSPFMT_R1456 (1 << 9)
|
|
#define MMCCMD_RSPFMT_R2 (2 << 9)
|
|
#define MMCCMD_RSPFMT_R3 (3 << 9)
|
|
#define MMCCMD_DTRW (1 << 11)
|
|
#define MMCCMD_STRMTP (1 << 12)
|
|
#define MMCCMD_WDATX (1 << 13)
|
|
#define MMCCMD_INITCK (1 << 14)
|
|
#define MMCCMD_DCLR (1 << 15)
|
|
#define MMCCMD_DMATRIG (1 << 16)
|
|
|
|
/* DAVINCI_MMCFIFOCTL definitions */
|
|
#define MMCFIFOCTL_FIFORST (1 << 0)
|
|
#define MMCFIFOCTL_FIFODIR_WR (1 << 1)
|
|
#define MMCFIFOCTL_FIFODIR_RD (0 << 1)
|
|
#define MMCFIFOCTL_FIFOLEV (1 << 2) /* 0 = 128 bits, 1 = 256 bits */
|
|
#define MMCFIFOCTL_ACCWD_4 (0 << 3) /* access width of 4 bytes */
|
|
#define MMCFIFOCTL_ACCWD_3 (1 << 3) /* access width of 3 bytes */
|
|
#define MMCFIFOCTL_ACCWD_2 (2 << 3) /* access width of 2 bytes */
|
|
#define MMCFIFOCTL_ACCWD_1 (3 << 3) /* access width of 1 byte */
|
|
|
|
/* DAVINCI_SDIOST0 definitions */
|
|
#define SDIOST0_DAT1_HI (1 << 0)
|
|
#define SDIOST0_INTPRD (1 << 1)
|
|
#define SDIOST0_RDWTST (1 << 2)
|
|
|
|
/* DAVINCI_SDIOIEN definitions */
|
|
#define SDIOIEN_IOINTEN (1 << 0)
|
|
#define SDIOIEN_RWSEN (1 << 1)
|
|
|
|
/* DAVINCI_SDIOIST definitions */
|
|
#define SDIOIST_IOINT (1 << 0)
|
|
#define SDIOIST_RWS (1 << 1)
|
|
|
|
/* MMCSD Init clock in Hz in opendrain mode */
|
|
#define MMCSD_INIT_CLOCK 200000
|
|
|
|
#define MAX_CCNT ((1 << 16) - 1)
|
|
|
|
#define MAX_NR_SG 16
|
|
|
|
#define MMC_DATA_WRITE (1 << 8)
|
|
#define MMC_DATA_READ (1 << 9)
|
|
#define MMC_DATA_STREAM (1 << 10)
|
|
|
|
typedef struct {
|
|
volatile rt_uint32_t MMCCTL;
|
|
volatile rt_uint32_t MMCCLK;
|
|
volatile rt_uint32_t MMCST0;
|
|
volatile rt_uint32_t MMCST1;
|
|
volatile rt_uint32_t MMCIM;
|
|
volatile rt_uint32_t MMCTOR;
|
|
volatile rt_uint32_t MMCTOD;
|
|
volatile rt_uint32_t MMCBLEN;
|
|
volatile rt_uint32_t MMCNBLK;
|
|
volatile rt_uint32_t MMCNBLC;
|
|
volatile rt_uint32_t MMCDRR;
|
|
volatile rt_uint32_t MMCDXR;
|
|
volatile rt_uint32_t MMCCMD;
|
|
volatile rt_uint32_t MMCARGHL;
|
|
volatile rt_uint32_t MMCRSP01;
|
|
volatile rt_uint32_t MMCRSP23;
|
|
volatile rt_uint32_t MMCRSP45;
|
|
volatile rt_uint32_t MMCRSP67;
|
|
volatile rt_uint32_t MMCDRSP;
|
|
volatile rt_uint32_t reserved0;
|
|
volatile rt_uint32_t MMCCIDX;
|
|
volatile rt_uint32_t reserved1[4];
|
|
volatile rt_uint32_t SDIOCTL;
|
|
volatile rt_uint32_t SDIOST0;
|
|
volatile rt_uint32_t SDIOIEN;
|
|
volatile rt_uint32_t SDIOIST;
|
|
volatile rt_uint32_t MMCFIFOCTL;
|
|
}mmcsd_regs_t;
|
|
|
|
extern rt_int32_t rt_hw_mmcsd_init(void);
|
|
|
|
#endif
|