aboutsummaryrefslogtreecommitdiff
path: root/drivers/misc/mediatek/eemcs/sdio_reg_fw_side.h
blob: 49c2a3da5fa6ec97a0968102949dc5e7818bcbd4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
#ifndef __SDIO_REG_FWSIDE_H__
#define __SDIO_REG_FWSIDE_H__



/* Because this SDIO IP is a general IP from DT,
    The Tx & Rx definition is different between DT & WAT.
    So we keep the original TxRx definition in this file,
    and user can find the correct register with same in CSR document.

    For match WAT's TxRx style,
    we do not directly use the register definition here. 
    Instead, we map these registers to WAT style in hif_sdioq_reg.h & hif_sdiodev_reg.h

*/

#define MD_IRQID_SDIO (16)

#define ORG_SDIO_BASE	    (0xBFC00000)
#define ORG_SDIO_IRQID      MD_IRQID_SDIO
#define BASE_ADDR_CISCC     (0xBF230000)

/* CISRAM & Card Capability Bus R/W Interface */
#define ORG_SDIO_CIS0_BASE			(volatile kal_uint32 *)(BASE_ADDR_CISCC+0xC000) 
#define ORG_SDIO_CIS1_BASE			(volatile kal_uint32 *)(BASE_ADDR_CISCC+0xC400)
#define ORG_SDIO_CAPABILITY_BASE    (volatile kal_uint32 *)(BASE_ADDR_CISCC+0xCC00)
#define ORG_SDIO_CIS_READY	        (volatile kal_uint32 *)(BASE_ADDR_CISCC+0xCC40)
#define ORG_SDIO_CAPABILITY_READY	(volatile kal_uint32 *)(BASE_ADDR_CISCC+0xCC44)

 
/* SDIO QMU  Register */

#define ORG_SDIO_HGFCR				(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0000)
#define ORG_SDIO_HGFISR				(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0004)
#define ORG_SDIO_HGFIER				(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0008)

//#define ORG_SDIO_HSDBDLSR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0010)
#define ORG_SDIO_HSDLSR				(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0014)
#define ORG_SDIO_HDBGCR				(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0020)

#define ORG_SDIO_HWFISR				(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0100)
#define ORG_SDIO_HWFIER				(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0104)
#define ORG_SDIO_HWFTE0SR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0110)
#define ORG_SDIO_HWFTE0ER			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0120)
#define ORG_SDIO_HWFRE0SR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0130)
#define ORG_SDIO_HWFRE1SR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0134)
#define ORG_SDIO_HWFRE0ER			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0140)
#define ORG_SDIO_HWFRE1ER			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0144)

#define ORG_SDIO_HWFICR				(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0150)
#define ORG_SDIO_HWFCR				(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0154)
#define ORG_SDIO_HWTDCR				(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0158)
#define ORG_SDIO_HWTPCCR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x015C)

//#define ORG_SDIO_HWFTQ0SAR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0160)
#define ORG_SDIO_HWFTQ1SAR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0164)
#define ORG_SDIO_HWFTQ2SAR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0168)
#define ORG_SDIO_HWFTQ3SAR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x016C)
#define ORG_SDIO_HWFTQ4SAR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0170)
#define ORG_SDIO_HWFTQ5SAR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0174)
#define ORG_SDIO_HWFTQ6SAR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0178)
#define ORG_SDIO_HWFTQ7SAR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x017C)


#define ORG_SDIO_HWFRQ0SAR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0180)
#define ORG_SDIO_HWFRQ1SAR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0184)
#define ORG_SDIO_HWFRQ2SAR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x0188)
#define ORG_SDIO_HWFRQ3SAR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x018C)

#define ORG_SDIO_H2DRM0R				(volatile kal_uint32 *)(ORG_SDIO_BASE+0x01A0)
#define ORG_SDIO_H2DRM1R				(volatile kal_uint32 *)(ORG_SDIO_BASE+0x01A4)
#define ORG_SDIO_D2HSM0R				(volatile kal_uint32 *)(ORG_SDIO_BASE+0x01A8)
#define ORG_SDIO_D2HSM1R				(volatile kal_uint32 *)(ORG_SDIO_BASE+0x01AC)
#define ORG_SDIO_D2HSM2R				(volatile kal_uint32 *)(ORG_SDIO_BASE+0x01B0)

#define ORG_SDIO_HWRQ0CR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x01C0)
#define ORG_SDIO_HWRQ1CR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x01C4)
#define ORG_SDIO_HWRQ2CR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x01C8)
#define ORG_SDIO_HWRQ3CR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x01CC)

#define ORG_SDIO_HWRLFACR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x01E0)
#define ORG_SDIO_HWDMACR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x01E8)
#define ORG_SDIO_HWFIOCDR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x01EC)
#define ORG_SDIO_HSDIOTOCR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x01F0)
#define ORG_SDIO_HSDIOSPCR			(volatile kal_uint32 *)(ORG_SDIO_BASE+0x01F4)


// TxQ0 is removed, use  TxQ1 in HW as TxQ0 in SW
#define ORG_SDIO_TQSAR_n(q_num)			(volatile kal_uint32 *)(((kal_uint32)ORG_SDIO_HWFTQ1SAR) + (0x04 * q_num))
#define ORG_SDIO_RQSAR_n(q_num)			(volatile kal_uint32 *)(((kal_uint32)ORG_SDIO_HWFRQ0SAR) + (0x04 * q_num))
#define ORG_SDIO_RQCR_n(q_num)			(volatile kal_uint32 *)(((kal_uint32)ORG_SDIO_HWRQ0CR) + (0x04 * q_num))




/**
 *	@brief	Configuration value Definition
 */ 

/* Only use in ORG_SDIO_HGFCR */
#define ORG_SDIO_DB_HIF_SEL			0x00000007
#define ORG_SDIO_SPI_MODE			0x00000010
#define ORG_SDIO_EHPI_MODE			0x00000020
#define ORG_SDIO_HINT_AS_FW_OB		0x00000100
#define ORG_SDIO_CARD_IS_18V		0x00000200
#define ORG_SDIO_INT_TER_CYC_MASK	0x00010000
#define ORG_SDIO_HCLK_NO_GATED		0x00020000
#define ORG_SDIO_FORCE_SD_HS		0x00040000
#define ORG_SDIO_SDIO_HCLK_DIS		0x01000000
#define ORG_SDIO_SPI_HCLK_DIS		0x02000000
#define ORG_SDIO_EHPI_HCLK_DIS		0x04000000
#define ORG_SDIO_PB_HCLK_DIS		0x08000000

/* Only use in ORG_SDIO_HWFCR */
#define ORG_SDIO_W_FUNC_RDY			0x00000001
#define ORG_SDIO_TRX_DESC_CHKSUM_EN	0x00000002
#define ORG_SDIO_TRX_DESC_CHKSUM_12	0x00000004
#define ORG_SDIO_TX_CS_OFLD_EN		0x00000008
#define ORG_SDIO_RX_IPV6_CS_OFLD_EN	0x00000010
#define ORG_SDIO_RX_IPV4_CS_OFLD_EN	0x00000020
#define ORG_SDIO_RX_TCP_CS_OFLD_EN	0x00000040
#define ORG_SDIO_RX_UDP_CS_OFLD_EN	0x00000080
#define ORG_SDIO_TX_NO_HEADER       0x00000100
#define ORG_SDIO_RX_NO_TAIL         0x00000200


/* Only use in ORG_SDIO_HWDMACR */
#define ORG_SDIO_AHB_1KBNDRY_PRTCT	0x00000001
#define ORG_SDIO_DEST_BST_TYP		0x00000002
#define ORG_SDIO_DMA_BST_SIZE		0x00000004

/* Only use in ORG_SDIO_HWFIOCDR */
    // TxQ0 is removed, use  TxQ1 in HW as TxQ0 in SW
#define ORG_SDIO_TXQ1_IOC_DIS		0x00000002
#define ORG_SDIO_TXQ_IOC_DIS(n)		(ORG_SDIO_TXQ1_IOC_DIS<<(n))
#define ORG_SDIO_RXQ0_IOC_DIS		0x00000100
#define ORG_SDIO_RXQ_IOC_DIS(n)		(ORG_SDIO_RXQ0_IOC_DIS<<(n))


/* Only use in ORG_SDIO_HSDIOTOCR */
#define ORG_SDIO_TIMEOUT_NUM		0x0000FFFF
#define ORG_SDIO_RD_TIMEOUT_EN		0x00010000
#define ORG_SDIO_WR_TIMEOUT_EN		0x00020000

/* Only use in ORG_SDIO_HSDIOSPCR */
#define ORG_SDIO_CMD_SAMPLE         0x00000001
#define ORG_SDIO_DAT0_SAMPLE        0x00000002
#define ORG_SDIO_DAT1_SAMPLE        0x00000004
#define ORG_SDIO_DAT2_SAMPLE        0x00000008
#define ORG_SDIO_DAT3_SAMPLE        0x00000010


/**
 *	@brief	General Interrupt value Definition
 */ 

/* Only use in ORG_SDIO_HGFISR */
#define ORG_SDIO_DRV_CLR_DB_IOE		0x00000001
#define ORG_SDIO_DRV_SET_DB_IOE		0x00000004
#define ORG_SDIO_SET_RES			0x00000010
#define ORG_SDIO_SET_ABT			0x00000020
#define ORG_SDIO_DB_INT				0x00000040
#define ORG_SDIO_CRC_ERROR_INT		0x00000100
#define ORG_SDIO_CHG_TO_18V_REQ		0x00000200


/* Only use in ORG_SDIO_HWFISR */
#define ORG_SDIO_DRV_SET_FW_OWN		0x00000001
#define ORG_SDIO_DRV_CLR_FW_OWN		0x00000002
#define ORG_SDIO_D2HSM2R_RD			0x00000004
#define ORG_SDIO_RD_TIMEOUT			0x00000008
#define ORG_SDIO_WR_TIMEOUT			0x00000010
#define ORG_SDIO_TX_EVENT_0			0x00000100
#define ORG_SDIO_RX_EVENT_0			0x00001000
#define ORG_SDIO_RX_EVENT_1			0x00002000

#define ORG_SDIO_H2D_SW_INT0		0x00010000
#define ORG_SDIO_H2D_SW_INT(n)		(ORG_SDIO_H2D_SW_INT0<<(n))




/**
 *	@brief	FW Set Interrupt to Host value Definition
 */

/* Only use in ORG_SDIO_HWFICR */
#define ORG_SDIO_FW_OWN_BACK_SET	0x00000010
#define ORG_SDIO_FW_OWN_READ        0x00000010
#define ORG_SDIO_D2H_SW_INT0		0x00000100
#define ORG_SDIO_D2H_SW_INT(n)		(ORG_SDIO_D2H_SW_INT0<<(n))


/**
 *	@brief	Queue Related Interrupt value Definition
 */   
     // TxQ0 is removed, use  TxQ1 in HW as TxQ0 in SW
#define ORG_SDIO_TXQ1_RDY			0x00000002
#define ORG_SDIO_TXP1_OVERFLOW		0x00000200
#define ORG_SDIO_TXQ1_CHKSUM_ERR	0x00020000
#define ORG_SDIO_TXQ1_LEN_ERR       0x02000000
#define ORG_SDIO_TXQ_RDY(n)			(ORG_SDIO_TXQ1_RDY<<(n))
#define ORG_SDIO_TXP_OVERFLOW(n)	(ORG_SDIO_TXP1_OVERFLOW<<(n))
#define ORG_SDIO_TXQ_CHKSUM_ERR(n)	(ORG_SDIO_TXQ1_CHKSUM_ERR<<(n))
#define ORG_SDIO_TXQ_LEN_ERR(n)	    (ORG_SDIO_TXQ1_LEN_ERR<<(n))


#define ORG_SDIO_RXQ0_DONE			0x00000001
#define ORG_SDIO_RXP0_UNDERFLOW		0x00000100
#define ORG_SDIO_RXQ0_CHKSUM_ERR	0x00010000
#define ORG_SDIO_RXP0_OVERFLOW		0x01000000
#define ORG_SDIO_RXQ0_OWN_CLEAR		0x00000001
#define ORG_SDIO_RXQ0_LEN_ERR		0x00000100
#define ORG_SDIO_RXQ_DONE(n)		(ORG_SDIO_RXQ0_DONE<<(n))
#define ORG_SDIO_RXP_UNDERFLOW(n)	(ORG_SDIO_RXP0_UNDERFLOW<<(n))
#define ORG_SDIO_RXQ_CHKSUM_ERR(n)	(ORG_SDIO_RXQ0_CHKSUM_ERR<<(n))
#define ORG_SDIO_RXP_OVERFLOW(n)	(ORG_SDIO_RXP0_OVERFLOW<<(n))
#define ORG_SDIO_RXQ_OWN_CLEAR(n)	(ORG_SDIO_RXQ0_OWN_CLEAR<<(n))
#define ORG_SDIO_RXQ_LEN_ERR(n)	    (ORG_SDIO_RXQ0_LEN_ERR<<(n))



 /**
  *  @brief  Queue Control value Definition
  */							
      // TxQ0 is removed, use  TxQ1 in HW as TxQ0 in SW
#define ORG_SDIO_TXQ1_STOP			0x00000002
#define ORG_SDIO_TXQ1_START			0x00000200
#define ORG_SDIO_TXQ1_RESUME		0x00020000
#define ORG_SDIO_TXQ1_STATUS		0x02000000
#define ORG_SDIO_TXQ_STOP(n)		(ORG_SDIO_TXQ1_STOP<<(n))
#define ORG_SDIO_TXQ_START(n)		(ORG_SDIO_TXQ1_START<<(n))
#define ORG_SDIO_TXQ_RESUME(n)		(ORG_SDIO_TXQ1_RESUME<<(n))
#define ORG_SDIO_TXQ_STATUS(n)		(ORG_SDIO_TXQ1_STATUS<<(n))

/* Only use in ORG_SDIO_HWTPCCR */
#define ORG_SDIO_INC_TQ_CNT			0x000000FF
#define ORG_SDIO_TQ_INDEX			0x0000F000
#define ORG_SDIO_TQ_INDEX_OFFSET	(12)
#define ORG_SDIO_TQ_CNT_RESET		0x00010000

  
#define ORG_SDIO_RXQ_STOP			0x00010000
#define ORG_SDIO_RXQ_START			0x00020000
#define ORG_SDIO_RXQ_RESUME			0x00040000
#define ORG_SDIO_RXQ_STATUS			0x00080000
#define ORG_SDIO_RXQ_PKT_LEN		0x0000FFFF

/* Only use in ORG_SDIO_HWRLFACR */
#define ORG_SDIO_RX0_LEN_FIFO_AVAIL_CNT			0x0000001F
#define ORG_SDIO_RX_LEN_FIFO_AVAIL_CNT_OFFSET	(8)
#define ORG_SDIO_RX_LEN_FIFO_AVAIL_CNT(n)		(ORG_SDIO_RX0_LEN_FIFO_AVAIL_CNT<<(n*ORG_SDIO_RX_LEN_FIFO_AVAIL_CNT_OFFSET))


#endif