xref: /openbsd-src/sys/dev/ic/rtsxreg.h (revision d3ec1c866e9430d7ce7695f3393de4712072e4e8)
1*d3ec1c86Skettenis /*	$OpenBSD: rtsxreg.h,v 1.5 2020/08/24 15:06:10 kettenis Exp $	*/
2f615cd67Sstsp 
3f615cd67Sstsp /*
4f615cd67Sstsp  * Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org>
5f615cd67Sstsp  * Copyright (c) 2012 Stefan Sperling <stsp@openbsd.org>
6f615cd67Sstsp  *
7f615cd67Sstsp  * Permission to use, copy, modify, and distribute this software for any
8f615cd67Sstsp  * purpose with or without fee is hereby granted, provided that the above
9f615cd67Sstsp  * copyright notice and this permission notice appear in all copies.
10f615cd67Sstsp  *
11f615cd67Sstsp  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12f615cd67Sstsp  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13f615cd67Sstsp  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14f615cd67Sstsp  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15f615cd67Sstsp  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16f615cd67Sstsp  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17f615cd67Sstsp  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18f615cd67Sstsp  */
19f615cd67Sstsp 
20f615cd67Sstsp #ifndef _RTSXREG_H_
21f615cd67Sstsp #define _RTSXREG_H_
22f615cd67Sstsp 
23f615cd67Sstsp /* Host command buffer control register. */
24f615cd67Sstsp #define	RTSX_HCBAR		0x00
25f615cd67Sstsp #define	RTSX_HCBCTLR		0x04
2661e87b28Sderaadt #define	RTSX_START_CMD		(1U << 31)
2761e87b28Sderaadt #define	RTSX_HW_AUTO_RSP	(1U << 30)
2861e87b28Sderaadt #define	RTSX_STOP_CMD		(1U << 28)
29f615cd67Sstsp 
30f615cd67Sstsp /* Host data buffer control register. */
31f615cd67Sstsp #define	RTSX_HDBAR		0x08
32f615cd67Sstsp #define	RTSX_HDBCTLR		0x0C
3361e87b28Sderaadt #define	RTSX_TRIG_DMA		(1U << 31)
3461e87b28Sderaadt #define	RTSX_DMA_READ		(1U << 29)
3561e87b28Sderaadt #define	RTSX_STOP_DMA		(1U << 28)
3661e87b28Sderaadt #define	RTSX_ADMA_MODE		(2U << 26)
37f615cd67Sstsp 
38f615cd67Sstsp /* Interrupt pending register. */
39f615cd67Sstsp #define	RTSX_BIPR		0x14
4061e87b28Sderaadt #define	RTSX_CMD_DONE_INT	(1U << 31)
4161e87b28Sderaadt #define	RTSX_DATA_DONE_INT	(1U << 30)
4261e87b28Sderaadt #define	RTSX_TRANS_OK_INT	(1U << 29)
4361e87b28Sderaadt #define	RTSX_TRANS_FAIL_INT	(1U << 28)
4461e87b28Sderaadt #define	RTSX_XD_INT		(1U << 27)
4561e87b28Sderaadt #define	RTSX_MS_INT		(1U << 26)
4661e87b28Sderaadt #define	RTSX_SD_INT		(1U << 25)
4761e87b28Sderaadt #define	RTSX_SD_WRITE_PROTECT	(1U << 19)
4861e87b28Sderaadt #define	RTSX_XD_EXIST		(1U << 18)
4961e87b28Sderaadt #define	RTSX_MS_EXIST		(1U << 17)
5061e87b28Sderaadt #define	RTSX_SD_EXIST		(1U << 16)
51f615cd67Sstsp #define	RTSX_CARD_EXIST		(RTSX_XD_EXIST|RTSX_MS_EXIST|RTSX_SD_EXIST)
52f615cd67Sstsp #define	RTSX_CARD_INT		(RTSX_XD_INT|RTSX_MS_INT|RTSX_SD_INT)
53f615cd67Sstsp 
54f615cd67Sstsp /* Chip register access. */
55f615cd67Sstsp #define	RTSX_HAIMR		0x10
56f615cd67Sstsp #define	RTSX_HAIMR_WRITE	0x40000000
57f615cd67Sstsp #define	RTSX_HAIMR_BUSY		0x80000000
58f615cd67Sstsp 
59f615cd67Sstsp /* Interrupt enable register. */
60f615cd67Sstsp #define	RTSX_BIER		0x18
6161e87b28Sderaadt #define	RTSX_CMD_DONE_INT_EN	(1U << 31)
6261e87b28Sderaadt #define	RTSX_DATA_DONE_INT_EN	(1U << 30)
6361e87b28Sderaadt #define	RTSX_TRANS_OK_INT_EN	(1U << 29)
6461e87b28Sderaadt #define	RTSX_TRANS_FAIL_INT_EN	(1U << 28)
6561e87b28Sderaadt #define	RTSX_XD_INT_EN		(1U << 27)
6661e87b28Sderaadt #define	RTSX_MS_INT_EN		(1U << 26)
6761e87b28Sderaadt #define	RTSX_SD_INT_EN		(1U << 25)
6861e87b28Sderaadt #define	RTSX_GPIO0_INT_EN	(1U << 24)
6961e87b28Sderaadt #define	RTSX_MS_OC_INT_EN	(1U << 23)
7061e87b28Sderaadt #define	RTSX_SD_OC_INT_EN	(1U << 22)
71f615cd67Sstsp 
72f615cd67Sstsp /* Power on/off. */
73f615cd67Sstsp #define	RTSX_FPDCTL	0xFC00
74f615cd67Sstsp #define	RTSX_SSC_POWER_DOWN	0x01
75f615cd67Sstsp #define	RTSX_SD_OC_POWER_DOWN	0x02
76f615cd67Sstsp #define	RTSX_MS_OC_POWER_DOWN	0x04
77f615cd67Sstsp #define	RTSX_ALL_POWER_DOWN	0x07
78f615cd67Sstsp #define	RTSX_OC_POWER_DOWN	0x06
79f615cd67Sstsp 
80f615cd67Sstsp /* Card power control register. */
81f615cd67Sstsp #define	RTSX_CARD_PWR_CTL	0xFD50
82f615cd67Sstsp #define	RTSX_SD_PWR_ON		0x00
83f615cd67Sstsp #define	RTSX_SD_PARTIAL_PWR_ON	0x01
84f615cd67Sstsp #define	RTSX_SD_PWR_OFF		0x03
85f615cd67Sstsp #define	RTSX_SD_PWR_MASK	0x03
86f615cd67Sstsp #define	RTSX_PMOS_STRG_MASK	0x10
87f615cd67Sstsp #define	RTSX_PMOS_STRG_400mA	0x00
88f615cd67Sstsp #define	RTSX_PMOS_STRG_800mA	0x10
89f615cd67Sstsp 
90f615cd67Sstsp #define	RTSX_MS_PWR_OFF		0x0C
91f615cd67Sstsp #define	RTSX_MS_PWR_ON		0x00
92f615cd67Sstsp #define	RTSX_MS_PARTIAL_PWR_ON	0x04
93f615cd67Sstsp 
94f615cd67Sstsp #define	RTSX_CARD_SHARE_MODE	0xFD52
95f615cd67Sstsp #define	RTSX_CARD_SHARE_48_XD	0x02
96f615cd67Sstsp #define	RTSX_CARD_SHARE_48_SD	0x04
97f615cd67Sstsp #define	RTSX_CARD_SHARE_48_MS	0x08
98f615cd67Sstsp #define	RTSX_CARD_DRIVE_SEL	0xFE53
99f615cd67Sstsp 
100f615cd67Sstsp /* Card clock. */
101f615cd67Sstsp #define	RTSX_CARD_CLK_EN	0xFD69
102f615cd67Sstsp #define	RTSX_XD_CLK_EN		0x02
103f615cd67Sstsp #define	RTSX_SD_CLK_EN		0x04
104f615cd67Sstsp #define	RTSX_MS_CLK_EN		0x08
105f615cd67Sstsp #define	RTSX_SPI_CLK_EN		0x10
106f615cd67Sstsp #define	RTSX_CARD_CLK_EN_ALL	\
107f615cd67Sstsp     (RTSX_XD_CLK_EN|RTSX_SD_CLK_EN|RTSX_MS_CLK_EN|RTSX_SPI_CLK_EN)
108f615cd67Sstsp 
109f615cd67Sstsp #define RTSX_SDIO_CTRL		0xFD6B
110f615cd67Sstsp #define RTSX_SDIO_BUS_CTRL	0x01
111f615cd67Sstsp #define RTSX_SDIO_CD_CTRL	0x02
112f615cd67Sstsp 
113f615cd67Sstsp /* Internal clock. */
114f615cd67Sstsp #define	RTSX_CLK_CTL		0xFC02
115f615cd67Sstsp #define	RTSX_CLK_LOW_FREQ	0x01
116f615cd67Sstsp 
117f615cd67Sstsp /* Internal clock divisor values. */
118f615cd67Sstsp #define	RTSX_CLK_DIV		0xFC03
119f615cd67Sstsp #define	RTSX_CLK_DIV_1		0x01
120f615cd67Sstsp #define	RTSX_CLK_DIV_2		0x02
121f615cd67Sstsp #define	RTSX_CLK_DIV_4		0x03
122f615cd67Sstsp #define	RTSX_CLK_DIV_8		0x04
123f615cd67Sstsp 
124f615cd67Sstsp /* Internal clock selection. */
125f615cd67Sstsp #define	RTSX_CLK_SEL	0xFC04
126f615cd67Sstsp #define	RTSX_SSC_80	0
127f615cd67Sstsp #define	RTSX_SSC_100	1
128f615cd67Sstsp #define	RTSX_SSC_120	2
129f615cd67Sstsp #define	RTSX_SSC_150	3
130f615cd67Sstsp #define	RTSX_SSC_200	4
131f615cd67Sstsp 
132f615cd67Sstsp #define	RTSX_SSC_DIV_N_0	0xFC0F
133f615cd67Sstsp 
134f615cd67Sstsp #define	RTSX_SSC_CTL1	0xFC11
135f615cd67Sstsp #define	RTSX_RSTB		0x80
136f615cd67Sstsp #define	RTSX_SSC_8X_EN		0x40
137f615cd67Sstsp #define	RTSX_SSC_FIX_FRAC	0x20
138f615cd67Sstsp #define	RTSX_SSC_SEL_1M		0x00
139f615cd67Sstsp #define	RTSX_SSC_SEL_2M		0x08
140f615cd67Sstsp #define	RTSX_SSC_SEL_2M		0x08
141f615cd67Sstsp #define	RTSX_SSC_SEL_4M		0x10
142f615cd67Sstsp #define	RTSX_SSC_SEL_8M		0x18
143f615cd67Sstsp #define	RTSX_SSC_CTL2	0xFC12
144f615cd67Sstsp #define	RTSX_SSC_DEPTH_MASK	0x07
145f615cd67Sstsp 
146f615cd67Sstsp /* RC oscillator, default is 2M */
147f615cd67Sstsp #define	RTSX_RCCTL		0xFC14
148f615cd67Sstsp #define	RTSX_RCCTL_F_400K	0x0
149f615cd67Sstsp #define	RTSX_RCCTL_F_2M		0x1
150f615cd67Sstsp 
1510cd9a838Sstsp /* RTS5229-only. */
1520cd9a838Sstsp #define	RTSX_OLT_LED_CTL	0xFC1E
1530cd9a838Sstsp #define	RTSX_OLT_LED_PERIOD	0x02
1540cd9a838Sstsp #define	RTSX_OLT_LED_AUTOBLINK	0x08
1550cd9a838Sstsp 
1560cd9a838Sstsp #define	RTSX_GPIO_CTL		0xFC1F
1570cd9a838Sstsp #define	RTSX_GPIO_LED_ON	0x02
1580cd9a838Sstsp 
159f615cd67Sstsp /* Host controller commands. */
160f615cd67Sstsp #define	RTSX_READ_REG_CMD	0
161f615cd67Sstsp #define	RTSX_WRITE_REG_CMD	1
162f615cd67Sstsp #define	RTSX_CHECK_REG_CMD	2
163f615cd67Sstsp 
164f615cd67Sstsp 
165f615cd67Sstsp #define	RTSX_OCPCTL	0xFC15
166f615cd67Sstsp #define	RTSX_OCPSTAT	0xFC16
167f615cd67Sstsp #define	RTSX_OCPGLITCH	0xFC17
168f615cd67Sstsp #define	RTSX_OCPPARA1	0xFC18
169f615cd67Sstsp #define	RTSX_OCPPARA2	0xFC19
170f615cd67Sstsp 
171f615cd67Sstsp /* FPGA */
172f615cd67Sstsp #define	RTSX_FPGA_PULL_CTL	0xFC1D
173f615cd67Sstsp #define	RTSX_FPGA_MS_PULL_CTL_BIT	0x10
174f615cd67Sstsp #define	RTSX_FPGA_SD_PULL_CTL_BIT	0x08
175f615cd67Sstsp 
176f615cd67Sstsp /* Clock source configuration register. */
177f615cd67Sstsp #define	RTSX_CARD_CLK_SOURCE	0xFC2E
178f615cd67Sstsp #define	RTSX_CRC_FIX_CLK	(0x00 << 0)
179f615cd67Sstsp #define	RTSX_CRC_VAR_CLK0	(0x01 << 0)
180f615cd67Sstsp #define	RTSX_CRC_VAR_CLK1	(0x02 << 0)
181f615cd67Sstsp #define	RTSX_SD30_FIX_CLK	(0x00 << 2)
182f615cd67Sstsp #define	RTSX_SD30_VAR_CLK0	(0x01 << 2)
183f615cd67Sstsp #define	RTSX_SD30_VAR_CLK1	(0x02 << 2)
184f615cd67Sstsp #define	RTSX_SAMPLE_FIX_CLK	(0x00 << 4)
185f615cd67Sstsp #define	RTSX_SAMPLE_VAR_CLK0	(0x01 << 4)
186f615cd67Sstsp #define	RTSX_SAMPLE_VAR_CLK1	(0x02 << 4)
187f615cd67Sstsp 
188f615cd67Sstsp 
189f615cd67Sstsp /* ASIC */
190f615cd67Sstsp #define	RTSX_CARD_PULL_CTL1	0xFD60
191f615cd67Sstsp #define	RTSX_CARD_PULL_CTL2	0xFD61
192f615cd67Sstsp #define	RTSX_CARD_PULL_CTL3	0xFD62
193f615cd67Sstsp 
194f615cd67Sstsp #define	RTSX_PULL_CTL_DISABLE12		0x55
195f615cd67Sstsp #define	RTSX_PULL_CTL_DISABLE3		0xD5
1960cd9a838Sstsp #define	RTSX_PULL_CTL_DISABLE3_TYPE_C	0xE5
197f615cd67Sstsp #define	RTSX_PULL_CTL_ENABLE12		0xAA
198f615cd67Sstsp #define	RTSX_PULL_CTL_ENABLE3		0xE9
1990cd9a838Sstsp #define	RTSX_PULL_CTL_ENABLE3_TYPE_C	0xD9
200f615cd67Sstsp 
201f615cd67Sstsp /* SD configuration register 1 (clock divider, bus mode and width). */
202f615cd67Sstsp #define	RTSX_SD_CFG1		0xFDA0
203f615cd67Sstsp #define	RTSX_CLK_DIVIDE_0	0x00
204f615cd67Sstsp #define	RTSX_CLK_DIVIDE_128	0x80
205f615cd67Sstsp #define	RTSX_CLK_DIVIDE_256	0xC0
206f615cd67Sstsp #define	RTSX_CLK_DIVIDE_MASK	0xC0
207f615cd67Sstsp #define	RTSX_SD20_MODE		0x00
208f615cd67Sstsp #define	RTSX_SDDDR_MODE		0x04
209f615cd67Sstsp #define	RTSX_SD30_MODE		0x08
210f615cd67Sstsp #define	RTSX_SD_MODE_MASK	0x0C
211f615cd67Sstsp #define	RTSX_BUS_WIDTH_1	0x00
212f615cd67Sstsp #define	RTSX_BUS_WIDTH_4	0x01
213f615cd67Sstsp #define	RTSX_BUS_WIDTH_8	0x02
214f615cd67Sstsp #define	RTSX_BUS_WIDTH_MASK	0x03
215f615cd67Sstsp 
216f615cd67Sstsp /* SD configuration register 2 (SD command response flags). */
217f615cd67Sstsp #define	RTSX_SD_CFG2		0xFDA1
218f615cd67Sstsp #define	RTSX_SD_CALCULATE_CRC7		0x00
219f615cd67Sstsp #define	RTSX_SD_NO_CALCULATE_CRC7	0x80
220f615cd67Sstsp #define	RTSX_SD_CHECK_CRC16		0x00
221f615cd67Sstsp #define	RTSX_SD_NO_CHECK_CRC16		0x40
222f615cd67Sstsp #define	RTSX_SD_NO_CHECK_WAIT_CRC_TO	0x20
223f615cd67Sstsp #define	RTSX_SD_WAIT_BUSY_END		0x08
224f615cd67Sstsp #define	RTSX_SD_NO_WAIT_BUSY_END	0x00
225f615cd67Sstsp #define	RTSX_SD_CHECK_CRC7		0x00
226f615cd67Sstsp #define	RTSX_SD_NO_CHECK_CRC7		0x04
227f615cd67Sstsp #define	RTSX_SD_RSP_LEN_0		0x00
228f615cd67Sstsp #define	RTSX_SD_RSP_LEN_6		0x01
229f615cd67Sstsp #define	RTSX_SD_RSP_LEN_17		0x02
230f615cd67Sstsp /* SD command response types. */
231f615cd67Sstsp #define	RTSX_SD_RSP_TYPE_R0	0x04
232f615cd67Sstsp #define	RTSX_SD_RSP_TYPE_R1	0x01
233f615cd67Sstsp #define	RTSX_SD_RSP_TYPE_R1B	0x09
234f615cd67Sstsp #define	RTSX_SD_RSP_TYPE_R2	0x02
235f615cd67Sstsp #define	RTSX_SD_RSP_TYPE_R3	0x05
236f615cd67Sstsp #define	RTSX_SD_RSP_TYPE_R4	0x05
237f615cd67Sstsp #define	RTSX_SD_RSP_TYPE_R5	0x01
238f615cd67Sstsp #define	RTSX_SD_RSP_TYPE_R6	0x01
239f615cd67Sstsp #define	RTSX_SD_RSP_TYPE_R7	0x01
240f615cd67Sstsp 
241f615cd67Sstsp #define	RTSX_SD_STAT1		0xFDA3
242f615cd67Sstsp #define	RTSX_SD_CRC7_ERR			0x80
243f615cd67Sstsp #define	RTSX_SD_CRC16_ERR			0x40
244f615cd67Sstsp #define	RTSX_SD_CRC_WRITE_ERR			0x20
245f615cd67Sstsp #define	RTSX_SD_CRC_WRITE_ERR_MASK	    	0x1C
246f615cd67Sstsp #define	RTSX_GET_CRC_TIME_OUT			0x02
247f615cd67Sstsp #define	RTSX_SD_TUNING_COMPARE_ERR		0x01
248f615cd67Sstsp #define	RTSX_SD_STAT2		0xFDA4
249f615cd67Sstsp #define	RTSX_SD_RSP_80CLK_TIMEOUT	0x01
250f615cd67Sstsp 
251f615cd67Sstsp #define	RTSX_SD_CRC_ERR	(RTSX_SD_CRC7_ERR|RTSX_SD_CRC16_ERR|RTSX_SD_CRC_WRITE_ERR)
252f615cd67Sstsp 
253f615cd67Sstsp /* SD bus status register. */
254f615cd67Sstsp #define	RTSX_SD_BUS_STAT	0xFDA5
255f615cd67Sstsp #define	RTSX_SD_CLK_TOGGLE_EN	0x80
256f615cd67Sstsp #define	RTSX_SD_CLK_FORCE_STOP	0x40
257f615cd67Sstsp #define	RTSX_SD_DAT3_STATUS	0x10
258f615cd67Sstsp #define	RTSX_SD_DAT2_STATUS	0x08
259f615cd67Sstsp #define	RTSX_SD_DAT1_STATUS	0x04
260f615cd67Sstsp #define	RTSX_SD_DAT0_STATUS	0x02
261f615cd67Sstsp #define	RTSX_SD_CMD_STATUS	0x01
262f615cd67Sstsp 
263f615cd67Sstsp #define	RTSX_SD_PAD_CTL		0xFDA6
264f615cd67Sstsp #define	RTSX_SD_IO_USING_1V8	0x80
265f615cd67Sstsp 
266f615cd67Sstsp /* Sample point control register. */
267f615cd67Sstsp #define	RTSX_SD_SAMPLE_POINT_CTL	0xFDA7
268f615cd67Sstsp #define	RTSX_DDR_FIX_RX_DAT                  0x00
269f615cd67Sstsp #define	RTSX_DDR_VAR_RX_DAT                  0x80
270f615cd67Sstsp #define	RTSX_DDR_FIX_RX_DAT_EDGE             0x00
271f615cd67Sstsp #define	RTSX_DDR_FIX_RX_DAT_14_DELAY         0x40
272f615cd67Sstsp #define	RTSX_DDR_FIX_RX_CMD                  0x00
273f615cd67Sstsp #define	RTSX_DDR_VAR_RX_CMD                  0x20
274f615cd67Sstsp #define	RTSX_DDR_FIX_RX_CMD_POS_EDGE         0x00
275f615cd67Sstsp #define	RTSX_DDR_FIX_RX_CMD_14_DELAY         0x10
276f615cd67Sstsp #define	RTSX_SD20_RX_POS_EDGE                0x00
277f615cd67Sstsp #define	RTSX_SD20_RX_14_DELAY                0x08
278f615cd67Sstsp #define	RTSX_SD20_RX_SEL_MASK                0x08
279f615cd67Sstsp 
280f615cd67Sstsp #define	RTSX_SD_PUSH_POINT_CTL	0xFDA8
281f615cd67Sstsp #define	RTSX_SD20_TX_NEG_EDGE	0x00
282f615cd67Sstsp 
283f615cd67Sstsp #define	RTSX_SD_CMD0		0xFDA9
284f615cd67Sstsp #define	RTSX_SD_CMD1		0xFDAA
285f615cd67Sstsp #define	RTSX_SD_CMD2		0xFDAB
286f615cd67Sstsp #define	RTSX_SD_CMD3		0xFDAC
287f615cd67Sstsp #define	RTSX_SD_CMD4		0xFDAD
288f615cd67Sstsp #define	RTSX_SD_CMD5		0xFDAE
289f615cd67Sstsp #define	RTSX_SD_BYTE_CNT_L	0xFDAF
290f615cd67Sstsp #define	RTSX_SD_BYTE_CNT_H	0xFDB0
291f615cd67Sstsp #define	RTSX_SD_BLOCK_CNT_L	0xFDB1
292f615cd67Sstsp #define	RTSX_SD_BLOCK_CNT_H	0xFDB2
293f615cd67Sstsp 
294f615cd67Sstsp /*
295f615cd67Sstsp  * Transfer modes.
296f615cd67Sstsp  */
297f615cd67Sstsp #define	RTSX_SD_TRANSFER	0xFDB3
298f615cd67Sstsp 
299f615cd67Sstsp /* Write one or two bytes from SD_CMD2 and SD_CMD3 to the card. */
300f615cd67Sstsp #define	RTSX_TM_NORMAL_WRITE	0x00
301f615cd67Sstsp 
302f615cd67Sstsp /* Write (SD_BYTE_CNT * SD_BLOCK_COUNTS) bytes from ring buffer to card. */
303f615cd67Sstsp #define	RTSX_TM_AUTO_WRITE3	0x01
304f615cd67Sstsp 
305f615cd67Sstsp /* Like AUTO_WRITE3, plus automatically send CMD 12 when done.
306f615cd67Sstsp  * The response to CMD 12 is written to SD_CMD{0,1,2,3,4}. */
307f615cd67Sstsp #define	RTSX_TM_AUTO_WRITE4	0x02
308f615cd67Sstsp 
309f615cd67Sstsp /* Read (SD_BYTE_CNT * SD_BLOCK_CNT) bytes from card into ring buffer. */
310f615cd67Sstsp #define	RTSX_TM_AUTO_READ3	0x05
311f615cd67Sstsp 
312f615cd67Sstsp /* Like AUTO_READ3, plus automatically send CMD 12 when done.
313f615cd67Sstsp  * The response to CMD 12 is written to SD_CMD{0,1,2,3,4}. */
314f615cd67Sstsp #define	RTSX_TM_AUTO_READ4	0x06
315f615cd67Sstsp 
316f615cd67Sstsp /* Send an SD command described in SD_CMD{0,1,2,3,4} to the card and put
317f615cd67Sstsp  * the response into SD_CMD{0,1,2,3,4}. Long responses (17 byte) are put
318f615cd67Sstsp  * into ping-pong buffer 2 instead. */
319f615cd67Sstsp #define	RTSX_TM_CMD_RSP		0x08
320f615cd67Sstsp 
321f615cd67Sstsp /* Send write command, get response from the card, write data from ring
322f615cd67Sstsp  * buffer to card, and send CMD 12 when done.
323f615cd67Sstsp  * The response to CMD 12 is written to SD_CMD{0,1,2,3,4}. */
324f615cd67Sstsp #define	RTSX_TM_AUTO_WRITE1	0x09
325f615cd67Sstsp 
326f615cd67Sstsp /* Like AUTO_WRITE1 except no CMD 12 is sent. */
327f615cd67Sstsp #define	RTSX_TM_AUTO_WRITE2	0x0A
328f615cd67Sstsp 
329f615cd67Sstsp /* Send read command, read up to 512 bytes (SD_BYTE_CNT * SD_BLOCK_CNT)
330f615cd67Sstsp  * from the card into the ring buffer or ping-pong buffer 2. */
331f615cd67Sstsp #define	RTSX_TM_NORMAL_READ	0x0C
332f615cd67Sstsp 
333f615cd67Sstsp /* Same as WRITE1, except data is read from the card to the ring buffer. */
334f615cd67Sstsp #define	RTSX_TM_AUTO_READ1	0x0D
335f615cd67Sstsp 
336f615cd67Sstsp /* Same as WRITE2, except data is read from the card to the ring buffer. */
337f615cd67Sstsp #define	RTSX_TM_AUTO_READ2	0x0E
338f615cd67Sstsp 
339f615cd67Sstsp /* Send CMD 19 and receive response and tuning pattern from card and
340f615cd67Sstsp  * report the result. */
341f615cd67Sstsp #define	RTSX_TM_AUTO_TUNING	0x0F
342f615cd67Sstsp 
343f615cd67Sstsp /* transfer control */
344f615cd67Sstsp #define	RTSX_SD_TRANSFER_START	0x80
345f615cd67Sstsp #define	RTSX_SD_TRANSFER_END	0x40
346f615cd67Sstsp #define	RTSX_SD_STAT_IDLE	0x20
347f615cd67Sstsp #define	RTSX_SD_TRANSFER_ERR	0x10
348f615cd67Sstsp 
349f615cd67Sstsp #define	RTSX_SD_CMD_STATE	0xFDB5
350f615cd67Sstsp #define	RTSX_SD_DATA_STATE	0xFDB6
351f615cd67Sstsp 
352f615cd67Sstsp #define	RTSX_CARD_STOP		0xFD54
353f615cd67Sstsp #define	RTSX_SPI_STOP		0x01
354f615cd67Sstsp #define	RTSX_XD_STOP		0x02
355f615cd67Sstsp #define	RTSX_SD_STOP		0x04
356f615cd67Sstsp #define	RTSX_MS_STOP		0x08
357f615cd67Sstsp #define	RTSX_SPI_CLR_ERR	0x10
358f615cd67Sstsp #define	RTSX_XD_CLR_ERR		0x20
359f615cd67Sstsp #define	RTSX_SD_CLR_ERR		0x40
360f615cd67Sstsp #define	RTSX_MS_CLR_ERR		0x80
361f615cd67Sstsp #define	RTSX_ALL_STOP		0x0F
362f615cd67Sstsp #define	RTSX_ALL_CLR_ERR	0xF0
363f615cd67Sstsp 
364f615cd67Sstsp #define	RTSX_CARD_OE		0xFD55
365f615cd67Sstsp #define	RTSX_XD_OUTPUT_EN	0x02
366f615cd67Sstsp #define	RTSX_SD_OUTPUT_EN	0x04
367f615cd67Sstsp #define	RTSX_MS_OUTPUT_EN	0x08
368f615cd67Sstsp #define	RTSX_SPI_OUTPUT_EN	0x10
369f615cd67Sstsp #define	RTSX_CARD_OUTPUT_EN	(RTSX_XD_OUTPUT_EN|RTSX_SD_OUTPUT_EN|\
370f615cd67Sstsp 				RTSX_MS_OUTPUT_EN)
371f615cd67Sstsp 
372f615cd67Sstsp #define	RTSX_CARD_DATA_SOURCE	0xFD5B
373f615cd67Sstsp #define	RTSX_RING_BUFFER	0x00
374f615cd67Sstsp #define	RTSX_PINGPONG_BUFFER	0x01
375f615cd67Sstsp #define	RTSX_CARD_SELECT	0xFD5C
376f615cd67Sstsp #define	RTSX_XD_MOD_SEL		0x01
377f615cd67Sstsp #define	RTSX_SD_MOD_SEL		0x02
378f615cd67Sstsp #define	RTSX_MS_MOD_SEL		0x03
379f615cd67Sstsp #define	RTSX_SPI_MOD_SEL	0x04
380f615cd67Sstsp 
381f615cd67Sstsp #define	RTSX_CARD_GPIO_DIR	0xFD57
382f615cd67Sstsp #define	RTSX_CARD_GPIO		0xFD58
383f615cd67Sstsp #define	RTSX_CARD_GPIO_LED_OFF	0x01
384f615cd67Sstsp 
385f615cd67Sstsp /* ping-pong buffer 2 */
386f615cd67Sstsp #define	RTSX_PPBUF_BASE2	0xFA00
387f615cd67Sstsp #define	RTSX_PPBUF_SIZE		256
388f615cd67Sstsp 
389f615cd67Sstsp #define	RTSX_SUPPORT_VOLTAGE	(MMC_OCR_3_3V_3_4V|MMC_OCR_3_2V_3_3V|\
390*d3ec1c86Skettenis 				MMC_OCR_3_1V_3_2V|MMC_OCR_3_0V_3_1V)
391f615cd67Sstsp 
392f615cd67Sstsp #define	RTSX_CFG_PCI		0x1C
393f615cd67Sstsp #define	RTSX_CFG_ASIC		0x10
394f615cd67Sstsp 
395f615cd67Sstsp #define	RTSX_IRQEN0		0xFE20
396f615cd67Sstsp #define	RTSX_LINK_DOWN_INT_EN	0x10
397f615cd67Sstsp #define	RTSX_LINK_READY_INT_EN	0x20
398f615cd67Sstsp #define	RTSX_SUSPEND_INT_EN	0x40
399f615cd67Sstsp #define	RTSX_DMA_DONE_INT_EN	0x80
400f615cd67Sstsp #define	RTSX_IRQSTAT0		0xFE21
401f615cd67Sstsp #define	RTSX_LINK_DOWN_INT	0x10
402f615cd67Sstsp #define	RTSX_LINK_READY_INT	0x20
403f615cd67Sstsp #define	RTSX_SUSPEND_INT	0x40
404f615cd67Sstsp #define	RTSX_DMA_DONE_INT	0x80
405f615cd67Sstsp 
406f615cd67Sstsp #define	RTSX_DMATC0		0xFE28
407f615cd67Sstsp #define	RTSX_DMATC1		0xFE29
408f615cd67Sstsp #define	RTSX_DMATC2		0xFE2A
409f615cd67Sstsp #define	RTSX_DMATC3		0xFE2B
410f615cd67Sstsp 
411f615cd67Sstsp #define	RTSX_DMACTL		0xFE2C
412f615cd67Sstsp #define	RTSX_DMA_DIR_TO_CARD	0x00
413f615cd67Sstsp #define	RTSX_DMA_EN		0x01
414f615cd67Sstsp #define	RTSX_DMA_DIR_FROM_CARD	0x02
415f615cd67Sstsp #define	RTSX_DMA_BUSY		0x04
416f615cd67Sstsp #define	RTSX_DMA_RST		0x80
417f615cd67Sstsp #define	RTSX_DMA_128		(0 << 4)
418f615cd67Sstsp #define	RTSX_DMA_256		(1 << 4)
419f615cd67Sstsp #define	RTSX_DMA_512		(2 << 4)
420f615cd67Sstsp #define	RTSX_DMA_1024		(3 << 4)
421f615cd67Sstsp #define	RTSX_DMA_PACK_SIZE_MASK	0x30
422f615cd67Sstsp 
423f615cd67Sstsp #define	RTSX_RBCTL		0xFE34
424f615cd67Sstsp #define	RTSX_RB_FLUSH		0x80
425f615cd67Sstsp 
426f615cd67Sstsp #define	RTSX_CFGADDR0		0xFE35
427f615cd67Sstsp #define	RTSX_CFGADDR1		0xFE36
428f615cd67Sstsp #define	RTSX_CFGDATA0		0xFE37
429f615cd67Sstsp #define	RTSX_CFGDATA1		0xFE38
430f615cd67Sstsp #define	RTSX_CFGDATA2		0xFE39
431f615cd67Sstsp #define	RTSX_CFGDATA3		0xFE3A
432f615cd67Sstsp #define	RTSX_CFGRWCTL		0xFE3B
433f615cd67Sstsp #define	RTSX_CFG_WRITE_DATA0	0x01
434f615cd67Sstsp #define	RTSX_CFG_WRITE_DATA1	0x02
435f615cd67Sstsp #define	RTSX_CFG_WRITE_DATA2	0x04
436f615cd67Sstsp #define	RTSX_CFG_WRITE_DATA3	0x08
437f615cd67Sstsp #define	RTSX_CFG_BUSY		0x80
438f615cd67Sstsp 
439f615cd67Sstsp #define	RTSX_SDIOCFG_REG	0x724
440f615cd67Sstsp #define	RTSX_SDIOCFG_NO_BYPASS_SDIO	0x02
441f615cd67Sstsp #define	RTSX_SDIOCFG_HAVE_SDIO		0x04
442f615cd67Sstsp #define	RTSX_SDIOCFG_SINGLE_LUN		0x08
443f615cd67Sstsp #define	RTSX_SDIOCFG_SDIO_ONLY		0x80
444f615cd67Sstsp 
445f615cd67Sstsp #define	RTSX_HOST_SLEEP_STATE	0xFE60
446f615cd67Sstsp #define	RTSX_HOST_ENTER_S1	0x01
447f615cd67Sstsp #define	RTSX_HOST_ENTER_S3	0x02
448f615cd67Sstsp 
449f615cd67Sstsp #define	RTSX_SDIO_CFG		0xFE70
450f615cd67Sstsp #define	RTSX_SDIO_BUS_AUTO_SWITCH	0x10
451f615cd67Sstsp 
452f615cd67Sstsp #define	RTSX_NFTS_TX_CTRL	0xFE72
453f615cd67Sstsp #define	RTSX_INT_READ_CLR	0x02
454f615cd67Sstsp 
455f615cd67Sstsp #define	RTSX_PWR_GATE_CTRL	0xFE75
456f615cd67Sstsp #define	RTSX_PWR_GATE_EN	0x01
457f615cd67Sstsp #define	RTSX_LDO3318_ON		0x00
458f615cd67Sstsp #define	RTSX_LDO3318_SUSPEND	0x04
459f615cd67Sstsp #define	RTSX_LDO3318_OFF	0x06
4600cd9a838Sstsp #define	RTSX_LDO3318_VCC1	0x02
4610cd9a838Sstsp #define	RTSX_LDO3318_VCC2	0x04
462f615cd67Sstsp #define	RTSX_PWD_SUSPEND_EN	0xFE76
4630cd9a838Sstsp #define	RTSX_LDO_PWR_SEL	0xFE78
4640cd9a838Sstsp #define	RTSX_LDO_PWR_SEL_3V3	0x01
4650cd9a838Sstsp #define	RTSX_LDO_PWR_SEL_DV33	0x03
466f615cd67Sstsp 
467f615cd67Sstsp #define	RTSX_PHY_RWCTL		0xFE3C
468f615cd67Sstsp #define	RTSX_PHY_READ		0x00
469f615cd67Sstsp #define	RTSX_PHY_WRITE		0x01
470f615cd67Sstsp #define	RTSX_PHY_BUSY		0x80
471f615cd67Sstsp #define	RTSX_PHY_DATA0		0xFE3D
472f615cd67Sstsp #define	RTSX_PHY_DATA1		0xFE3E
473f615cd67Sstsp #define	RTSX_PHY_ADDR		0xFE3F
474f615cd67Sstsp 
475f615cd67Sstsp #define	RTSX_PHY_VOLTAGE	0x08
476f615cd67Sstsp #define	RTSX_PHY_VOLTAGE_MASK	0x3F
477f615cd67Sstsp 
478f615cd67Sstsp #define	RTSX_PETXCFG		0xFE49
479f615cd67Sstsp #define	RTSX_PETXCFG_CLKREQ_PIN	0x08
480f615cd67Sstsp 
4810cd9a838Sstsp #define	RTSX_CARD_AUTO_BLINK	0xFD56
482f615cd67Sstsp #define	RTSX_LED_BLINK_EN	0x08
483f615cd67Sstsp #define	RTSX_LED_BLINK_SPEED	0x05
484f615cd67Sstsp 
485f615cd67Sstsp #define	RTSX_WAKE_SEL_CTL	0xFE54
486f615cd67Sstsp #define	RTSX_PME_FORCE_CTL	0xFE56
487f615cd67Sstsp 
488f615cd67Sstsp #define	RTSX_CHANGE_LINK_STATE	0xFE5B
489f615cd67Sstsp #define	RTSX_CD_RST_CORE_EN		0x01
490f615cd67Sstsp #define	RTSX_FORCE_RST_CORE_EN		0x02
491f615cd67Sstsp #define	RTSX_NON_STICKY_RST_N_DBG	0x08
492f615cd67Sstsp #define	RTSX_MAC_PHY_RST_N_DBG		0x10
493f615cd67Sstsp 
494f615cd67Sstsp #define	RTSX_PERST_GLITCH_WIDTH	0xFE5C
495f615cd67Sstsp 
496f615cd67Sstsp #define	RTSX_SD30_DRIVE_SEL	0xFE5E
497f615cd67Sstsp #define	RTSX_SD30_DRIVE_SEL_3V3		0x01
498f615cd67Sstsp #define	RTSX_SD30_DRIVE_SEL_1V8		0x03
499f615cd67Sstsp #define	RTSX_SD30_DRIVE_SEL_MASK	0x07
500f615cd67Sstsp 
5010cd9a838Sstsp #define	RTSX_DUMMY_REG		0xFE90
5020cd9a838Sstsp 
5032c295eddSjcs #define	RTSX_LDO_VCC_CFG1	0xFF73
5042c295eddSjcs #define	RTSX_LDO_VCC_REF_TUNE_MASK	0x30
5052c295eddSjcs #define	RTSX_LDO_VCC_REF_1V2		0x20
5062c295eddSjcs #define	RTSX_LDO_VCC_TUNE_MASK		0x07
5072c295eddSjcs #define	RTSX_LDO_VCC_1V8		0x04
5082c295eddSjcs #define	RTSX_LDO_VCC_3V3		0x07
5092c295eddSjcs #define	RTSX_LDO_VCC_LMT_EN		0x08
5102c295eddSjcs 
511f615cd67Sstsp #define	RTSX_SG_INT		0x04
512f615cd67Sstsp #define	RTSX_SG_END		0x02
513f615cd67Sstsp #define	RTSX_SG_VALID		0x01
514f615cd67Sstsp 
515f615cd67Sstsp #define	RTSX_SG_NO_OP		0x00
516f615cd67Sstsp #define	RTSX_SG_TRANS_DATA	(0x02 << 4)
517f615cd67Sstsp #define	RTSX_SG_LINK_DESC	(0x03 << 4)
518f615cd67Sstsp 
5190cd9a838Sstsp #define	RTSX_IC_VERSION_A	0x00
5200cd9a838Sstsp #define	RTSX_IC_VERSION_B	0x01
5210cd9a838Sstsp #define	RTSX_IC_VERSION_C	0x02
5220cd9a838Sstsp #define	RTSX_IC_VERSION_D	0x03
5230cd9a838Sstsp 
524f615cd67Sstsp #endif
525