2 * Rockchip MMC Interface driver
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
13 #include <linux/bitops.h>
16 #define mmc_dbg(host, format, arg...) \
17 dev_printk(KERN_DEBUG , host->dev , format , ## arg)
19 #define mmc_dbg(host, format, arg...)
22 #define mmc_info(host, format, arg...) \
23 dev_printk(KERN_INFO , host->dev , format , ## arg)
24 #define mmc_err(host, format, arg...) \
25 dev_printk(KERN_ERR , host->dev , format , ## arg)
27 #define mmc_writel(host, reg, val) writel_relaxed(val, host->regs + MMC_##reg)
28 #define mmc_readl(host, reg) readl_relaxed(host->regs + MMC_##reg)
32 #define MMC_PWREN 0X04
33 #define MMC_CLKDIV 0x08
34 #define MMC_CLKSRC 0x0c
35 #define MMC_CLKENA 0x10
36 #define MMC_TMOUT 0x14
37 #define MMC_CTYPE 0x18
38 #define MMC_BLKSIZ 0x1c
39 #define MMC_BYTCNT 0x20
40 #define MMC_INTMASK 0x24
41 #define MMC_CMDARG 0x28
43 #define MMC_RESP0 0x30
44 #define MMC_RESP1 0X34
45 #define MMC_RESP2 0x38
46 #define MMC_RESP3 0x3c
47 #define MMC_MINTSTS 0x40
48 #define MMC_RINTSTS 0x44
49 #define MMC_STATUS 0x48
50 #define MMC_FIFOTH 0x4c
51 #define MMC_CDETECT 0x50
52 #define MMC_WRTPRT 0x54
53 #define MMC_TCBCNT 0x5c
54 #define MMC_TBBCNT 0x60
55 #define MMC_DEBNCE 0x64
56 #define MMC_USRID 0x68
57 #define MMC_VERID 0x6c
58 #define MMC_UHS_REG 0X74
59 #define MMC_RST_N 0x78
61 #define MMC_FIFO_BASE 0x200
62 #define MMC_DATA MMC_FIFO_BASE
63 /* Control register defines */
64 #define MMC_CTRL_ABORT_READ_DATA BIT(8)
65 #define MMC_CTRL_SEND_IRQ_RESPONSE BIT(7)
66 #define MMC_CTRL_READ_WAIT BIT(6)
67 #define MMC_CTRL_DMA_ENABLE BIT(5)
68 #define MMC_CTRL_INT_ENABLE BIT(4)
69 #define MMC_CTRL_DMA_RESET BIT(2)
70 #define MMC_CTRL_FIFO_RESET BIT(1)
71 #define MMC_CTRL_RESET BIT(0)
72 /* Hardware reset register defines */
73 #define MMC_CARD_RESET BIT(0)
74 /* Power enable register defines */
75 #define MMC_PWREN_ON BIT(0)
76 /* Clock Enable register defines */
77 #define MMC_CLKEN_LOW_PWR BIT(16)
78 #define MMC_CLKEN_ENABLE BIT(0)
79 /* time-out register defines */
80 #define MMC_TMOUT_DATA(n) _SBF(8, (n))
81 #define MMC_TMOUT_DATA_MSK 0xFFFFFF00
82 #define MMC_TMOUT_RESP(n) ((n) & 0xFF)
83 #define MMC_TMOUT_RESP_MSK 0xFF
84 /* card-type register defines */
85 #define MMC_CTYPE_8BIT BIT(16)
86 #define MMC_CTYPE_4BIT BIT(0)
87 #define MMC_CTYPE_1BIT 0
88 /* Interrupt status & mask register defines */
89 #define MMC_INT_SDIO BIT(16)
90 #define MMC_INT_EBE BIT(15)
91 #define MMC_INT_ACD BIT(14)
92 #define MMC_INT_SBE BIT(13)
93 #define MMC_INT_HLE BIT(12)
94 #define MMC_INT_FRUN BIT(11)
95 #define MMC_INT_HTO BIT(10)
96 #define MMC_INT_DTO BIT(9)
97 #define MMC_INT_RTO BIT(8)
98 #define MMC_INT_DCRC BIT(7)
99 #define MMC_INT_RCRC BIT(6)
100 #define MMC_INT_RXDR BIT(5)
101 #define MMC_INT_TXDR BIT(4)
102 #define MMC_INT_DATA_OVER BIT(3)
103 #define MMC_INT_CMD_DONE BIT(2)
104 #define MMC_INT_RESP_ERR BIT(1)
105 #define MMC_INT_CD BIT(0)
106 #define MMC_INT_ERROR 0xbfc2
107 /* Command register defines */
108 #define MMC_CMD_START BIT(31)
109 #define MMC_USE_HOLD_REG BIT(29)
110 #define MMC_CMD_CCS_EXP BIT(23)
111 #define MMC_CMD_CEATA_RD BIT(22)
112 #define MMC_CMD_UPD_CLK BIT(21)
113 #define MMC_CMD_INIT BIT(15)
114 #define MMC_CMD_STOP BIT(14)
115 #define MMC_CMD_PRV_DAT_WAIT BIT(13)
116 #define MMC_CMD_SEND_STOP BIT(12)
117 #define MMC_CMD_STRM_MODE BIT(11)
118 #define MMC_CMD_DAT_WR BIT(10)
119 #define MMC_CMD_DAT_EXP BIT(9)
120 #define MMC_CMD_RESP_CRC BIT(8)
121 #define MMC_CMD_RESP_LONG BIT(7)
122 #define MMC_CMD_RESP_EXP BIT(6)
123 #define MMC_CMD_INDX(n) ((n) & 0x1F)
124 /* Status register defines */
125 #define MMC_GET_FCNT(x) (((x)>>17) & 0x1FF)
126 #define MMC_MC_BUSY BIT(10)
127 #define MMC_DATA_BUSY BIT(9)
128 /* FIFO threshold register defines */
129 #define FIFO_DETH 256
131 /* UHS-1 register defines */
132 #define MMC_UHS_DDR_MODE BIT(16)
133 #define MMC_UHS_VOLT_18 BIT(0)
136 /* Common flag combinations */
137 #define MMC_DATA_ERROR_FLAGS (MMC_INT_DTO | MMC_INT_DCRC | \
138 MMC_INT_HTO | MMC_INT_SBE | \
140 #define MMC_CMD_ERROR_FLAGS (MMC_INT_RTO | MMC_INT_RCRC | \
142 #define MMC_ERROR_FLAGS (MMC_DATA_ERROR_FLAGS | \
143 MMC_CMD_ERROR_FLAGS | MMC_INT_HLE)
145 #define MMC_DMA_THRESHOLD (16)
147 #define MMC_BUS_CLOCK 96000000
158 EVENT_CMD_COMPLETE = 0,
169 struct tasklet_struct tasklet;
175 struct scatterlist *sg;
176 unsigned int pio_offset;
178 struct mmc_command stop;
181 struct mmc_host *mmc;
182 struct mmc_request *mrq;
183 struct mmc_command *cmd;
184 struct mmc_data *data;
189 unsigned long dma_addr;
190 struct rk_mmc_dma_ops *ops;
198 #define MMC_RECV_DATA 0
199 #define MMC_SEND_DATA 1
206 enum rk_mmc_state state;
207 unsigned long pending_events;
208 unsigned long completed_events;
211 #define MMC_NEED_INIT 1
215 struct rk_mmc_dma_ops {
216 int (*init)(struct rk_mmc *host);
217 int (*start)(struct rk_mmc *host);
218 int (*stop)(struct rk_mmc *host);
219 void (*exit)(struct rk_mmc *host);