xref: /rk3399_ARM-atf/include/drivers/brcm/emmc/emmc_csl_sdprot.h (revision 4bd8c929b4bc6e1731c2892b38d4a8c43e8e89dc)
1bffde63dSSheetal Tigadoli /*
2bffde63dSSheetal Tigadoli  * Copyright (c) 2016 - 2020, Broadcom
3bffde63dSSheetal Tigadoli  *
4bffde63dSSheetal Tigadoli  * SPDX-License-Identifier: BSD-3-Clause
5bffde63dSSheetal Tigadoli  */
6bffde63dSSheetal Tigadoli 
7bffde63dSSheetal Tigadoli #ifndef	CSL_SD_PROT_H
8bffde63dSSheetal Tigadoli #define	CSL_SD_PROT_H
9bffde63dSSheetal Tigadoli 
10bffde63dSSheetal Tigadoli #define SD_CARD_UNKNOWN		0	/* bad type or unrecognized */
11bffde63dSSheetal Tigadoli #define SD_CARD_SD		1	/* IO only card */
12bffde63dSSheetal Tigadoli #define SD_CARD_SDIO		2	/* memory only card */
13bffde63dSSheetal Tigadoli #define SD_CARD_COMBO		3	/* IO and memory combo card */
14bffde63dSSheetal Tigadoli #define SD_CARD_MMC		4	/* memory only card */
15bffde63dSSheetal Tigadoli #define SD_CARD_CEATA		5	/* IO and memory combo card */
16bffde63dSSheetal Tigadoli 
17bffde63dSSheetal Tigadoli #define SD_IO_FIXED_ADDRESS	0	/* fix Address */
18bffde63dSSheetal Tigadoli #define SD_IO_INCREMENT_ADDRESS	1
19bffde63dSSheetal Tigadoli 
20bffde63dSSheetal Tigadoli #define SD_HIGH_CAPACITY_CARD	0x40000000
21bffde63dSSheetal Tigadoli 
22bffde63dSSheetal Tigadoli #define MMC_CMD_IDLE_RESET_ARG	0xF0F0F0F0
23bffde63dSSheetal Tigadoli 
24bffde63dSSheetal Tigadoli /* Supported operating voltages are 3.2-3.3 and 3.3-3.4 */
25bffde63dSSheetal Tigadoli #define MMC_OCR_OP_VOLT			0x00300000
26bffde63dSSheetal Tigadoli /* Enable sector access mode */
27bffde63dSSheetal Tigadoli #define MMC_OCR_SECTOR_ACCESS_MODE	0x40000000
28bffde63dSSheetal Tigadoli 
29bffde63dSSheetal Tigadoli /* command index */
30bffde63dSSheetal Tigadoli #define SD_CMD_GO_IDLE_STATE		0	/* mandatory for SDIO */
31bffde63dSSheetal Tigadoli #define SD_CMD_SEND_OPCOND		1
32bffde63dSSheetal Tigadoli #define SD_CMD_ALL_SEND_CID		2
33bffde63dSSheetal Tigadoli #define SD_CMD_MMC_SET_RCA		3
34bffde63dSSheetal Tigadoli #define SD_CMD_MMC_SET_DSR		4
35bffde63dSSheetal Tigadoli #define SD_CMD_IO_SEND_OP_COND		5	/* mandatory for SDIO */
36bffde63dSSheetal Tigadoli #define SD_ACMD_SET_BUS_WIDTH		6
37bffde63dSSheetal Tigadoli #define SD_CMD_SWITCH_FUNC		6
38bffde63dSSheetal Tigadoli #define SD_CMD_SELECT_DESELECT_CARD	7
39bffde63dSSheetal Tigadoli #define SD_CMD_READ_EXT_CSD		8
40bffde63dSSheetal Tigadoli #define SD_CMD_SEND_CSD			9
41bffde63dSSheetal Tigadoli #define SD_CMD_SEND_CID			10
42bffde63dSSheetal Tigadoli #define SD_CMD_STOP_TRANSMISSION	12
43bffde63dSSheetal Tigadoli #define SD_CMD_SEND_STATUS		13
44bffde63dSSheetal Tigadoli #define SD_ACMD_SD_STATUS		13
45bffde63dSSheetal Tigadoli #define SD_CMD_GO_INACTIVE_STATE	15
46bffde63dSSheetal Tigadoli #define SD_CMD_SET_BLOCKLEN		16
47bffde63dSSheetal Tigadoli #define SD_CMD_READ_SINGLE_BLOCK	17
48bffde63dSSheetal Tigadoli #define SD_CMD_READ_MULTIPLE_BLOCK	18
49bffde63dSSheetal Tigadoli #define SD_CMD_WRITE_BLOCK		24
50bffde63dSSheetal Tigadoli #define SD_CMD_WRITE_MULTIPLE_BLOCK	25
51bffde63dSSheetal Tigadoli #define SD_CMD_PROGRAM_CSD		27
52bffde63dSSheetal Tigadoli #define SD_CMD_SET_WRITE_PROT		28
53bffde63dSSheetal Tigadoli #define SD_CMD_CLR_WRITE_PROT		29
54bffde63dSSheetal Tigadoli #define SD_CMD_SEND_WRITE_PROT		30
55bffde63dSSheetal Tigadoli #define SD_CMD_ERASE_WR_BLK_START	32
56bffde63dSSheetal Tigadoli #define SD_CMD_ERASE_WR_BLK_END		33
57bffde63dSSheetal Tigadoli #define SD_CMD_ERASE_GROUP_START	35
58bffde63dSSheetal Tigadoli #define SD_CMD_ERASE_GROUP_END		36
59bffde63dSSheetal Tigadoli #define SD_CMD_ERASE			38
60bffde63dSSheetal Tigadoli #define SD_CMD_LOCK_UNLOCK		42
61bffde63dSSheetal Tigadoli #define SD_CMD_IO_RW_DIRECT		52	/* mandatory for SDIO */
62bffde63dSSheetal Tigadoli #define SD_CMD_IO_RW_EXTENDED		53	/* mandatory for SDIO */
63bffde63dSSheetal Tigadoli #define SD_CMD_APP_CMD			55
64bffde63dSSheetal Tigadoli #define SD_CMD_GEN_CMD			56
65bffde63dSSheetal Tigadoli #define SD_CMD_READ_OCR			58
66bffde63dSSheetal Tigadoli #define SD_CMD_CRC_ON_OFF		59	/* mandatory for SDIO */
67bffde63dSSheetal Tigadoli #define SD_ACMD_SEND_NUM_WR_BLOCKS	22
68bffde63dSSheetal Tigadoli #define SD_ACMD_SET_WR_BLOCK_ERASE_CNT	23
69bffde63dSSheetal Tigadoli #define SD_ACMD_SD_SEND_OP_COND		41
70bffde63dSSheetal Tigadoli #define SD_ACMD_SET_CLR_CARD_DETECT	42
71bffde63dSSheetal Tigadoli #define SD_ACMD_SEND_SCR		51
72bffde63dSSheetal Tigadoli 
73bffde63dSSheetal Tigadoli /* response parameters */
74bffde63dSSheetal Tigadoli #define SD_RSP_NO_NONE	0
75bffde63dSSheetal Tigadoli #define SD_RSP_NO_1	1
76bffde63dSSheetal Tigadoli #define SD_RSP_NO_2	2
77bffde63dSSheetal Tigadoli #define SD_RSP_NO_3	3
78bffde63dSSheetal Tigadoli #define SD_RSP_NO_4	4
79bffde63dSSheetal Tigadoli #define SD_RSP_NO_5	5
80bffde63dSSheetal Tigadoli #define SD_RSP_NO_6	6
81bffde63dSSheetal Tigadoli 
82bffde63dSSheetal Tigadoli /* Modified R6 response (to CMD3) */
83bffde63dSSheetal Tigadoli #define SD_RSP_MR6_COM_CRC_ERROR	0x8000
84bffde63dSSheetal Tigadoli #define SD_RSP_MR6_ILLEGAL_COMMAND	0x4000
85bffde63dSSheetal Tigadoli #define SD_RSP_MR6_ERROR		0x2000
86bffde63dSSheetal Tigadoli 
87bffde63dSSheetal Tigadoli /* Modified R1 in R4 Response (to CMD5) */
88bffde63dSSheetal Tigadoli #define SD_RSP_MR1_SBIT			0x80
89bffde63dSSheetal Tigadoli #define SD_RSP_MR1_PARAMETER_ERROR	0x40
90bffde63dSSheetal Tigadoli #define SD_RSP_MR1_RFU5			0x20
91bffde63dSSheetal Tigadoli #define SD_RSP_MR1_FUNC_NUM_ERROR	0x10
92bffde63dSSheetal Tigadoli #define SD_RSP_MR1_COM_CRC_ERROR	0x80
93bffde63dSSheetal Tigadoli #define SD_RSP_MR1_ILLEGAL_COMMAND	0x40
94bffde63dSSheetal Tigadoli #define SD_RSP_MR1_RFU1			0x20
95bffde63dSSheetal Tigadoli #define SD_RSP_MR1_IDLE_STATE		0x01
96bffde63dSSheetal Tigadoli 
97bffde63dSSheetal Tigadoli /* R5 response (to CMD52 and CMD53) */
98bffde63dSSheetal Tigadoli #define SD_RSP_R5_COM_CRC_ERROR		0x80
99bffde63dSSheetal Tigadoli #define SD_RSP_R5_ILLEGAL_COMMAND	0x40
100bffde63dSSheetal Tigadoli #define SD_RSP_R5_IO_CURRENTSTATE1	0x20
101bffde63dSSheetal Tigadoli #define SD_RSP_R5_IO_CURRENTSTATE0	0x10
102bffde63dSSheetal Tigadoli #define SD_RSP_R5_ERROR			0x80
103bffde63dSSheetal Tigadoli #define SD_RSP_R5_RFU			0x40
104bffde63dSSheetal Tigadoli #define SD_RSP_R5_FUNC_NUM_ERROR	0x20
105bffde63dSSheetal Tigadoli #define SD_RSP_R5_OUT_OF_RANGE		0x01
106bffde63dSSheetal Tigadoli 
107bffde63dSSheetal Tigadoli /* argument for SD_CMD_IO_RW_DIRECT and SD_CMD_IO_RW_EXTENDED */
108bffde63dSSheetal Tigadoli #define SD_OP_READ			0 /* Read_Write */
109bffde63dSSheetal Tigadoli #define SD_OP_WRITE			1 /* Read_Write */
110bffde63dSSheetal Tigadoli 
111bffde63dSSheetal Tigadoli #define SD_RW_NORMAL			0 /* no RAW */
112bffde63dSSheetal Tigadoli #define SD_RW_RAW			1 /* RAW */
113bffde63dSSheetal Tigadoli 
114bffde63dSSheetal Tigadoli #define SD_BYTE_MODE			0 /* Byte Mode */
115bffde63dSSheetal Tigadoli #define SD_BLOCK_MODE			1 /* BlockMode */
116bffde63dSSheetal Tigadoli 
117bffde63dSSheetal Tigadoli #define SD_FIXED_ADDRESS		0 /* fix Address */
118bffde63dSSheetal Tigadoli #define SD_INCREMENT_ADDRESS		1 /* IncrementAddress */
119bffde63dSSheetal Tigadoli 
120bffde63dSSheetal Tigadoli #define SD_CMD5_ARG_IO_OCR_MASK		0x00FFFFFF
121bffde63dSSheetal Tigadoli #define SD_CMD5_ARG_IO_OCR_SHIFT	0
122bffde63dSSheetal Tigadoli #define SD_CMD55_ARG_RCA_SHIFT		16
123bffde63dSSheetal Tigadoli #define SD_CMD59_ARG_CRC_OPTION_MASK	0x01
124bffde63dSSheetal Tigadoli #define SD_CMD59_ARG_CRC_OPTION_SHIFT	0
125bffde63dSSheetal Tigadoli 
126bffde63dSSheetal Tigadoli /* SD_CMD_IO_RW_DIRECT Argument */
127bffde63dSSheetal Tigadoli #define SdioIoRWDirectArg(rw, raw, func, addr, data) \
128bffde63dSSheetal Tigadoli 		(((rw & 1) << 31) | ((func & 0x7) << 28) | \
129bffde63dSSheetal Tigadoli 		((raw & 1) << 27) | ((addr & 0x1FFFF) << 9) | \
130bffde63dSSheetal Tigadoli 		(data & 0xFF))
131bffde63dSSheetal Tigadoli 
132bffde63dSSheetal Tigadoli /* build SD_CMD_IO_RW_EXTENDED Argument */
133bffde63dSSheetal Tigadoli #define SdioIoRWExtArg(rw, blk, func, addr, inc_addr, count) \
134bffde63dSSheetal Tigadoli 		(((rw & 1) << 31) | ((func & 0x7) << 28) | \
135bffde63dSSheetal Tigadoli 		((blk & 1) << 27) | ((inc_addr & 1) << 26) | \
136bffde63dSSheetal Tigadoli 		((addr & 0x1FFFF) << 9) | (count & 0x1FF))
137bffde63dSSheetal Tigadoli 
138bffde63dSSheetal Tigadoli /*
139bffde63dSSheetal Tigadoli  * The Common I/O area shall be implemented on all SDIO cards and
140bffde63dSSheetal Tigadoli  * is accessed the the host via I/O reads and writes to function 0,
141bffde63dSSheetal Tigadoli  * the registers within the CIA are provided to enable/disable
142*1b491eeaSElyes Haouas  * the operationo fthe i/o function.
143bffde63dSSheetal Tigadoli  */
144bffde63dSSheetal Tigadoli 
145bffde63dSSheetal Tigadoli /* cccr_sdio_rev */
146bffde63dSSheetal Tigadoli #define SDIO_REV_SDIOID_MASK		0xf0 /* SDIO spec revision number */
147bffde63dSSheetal Tigadoli #define SDIO_REV_CCCRID_MASK		0x0f /* CCCR format version number */
148bffde63dSSheetal Tigadoli 
149bffde63dSSheetal Tigadoli /* sd_rev */
150bffde63dSSheetal Tigadoli #define SDIO_REV_PHY_MASK	    0x0f /* SD format version number */
151bffde63dSSheetal Tigadoli #define SDIO_FUNC_ENABLE_1	    0x02 /* function 1 I/O enable */
152bffde63dSSheetal Tigadoli #define SDIO_FUNC_READY_1	    0x02 /* function 1 I/O ready */
153bffde63dSSheetal Tigadoli #define SDIO_INTR_CTL_FUNC1_EN	    0x2  /* interrupt enable for function 1 */
154bffde63dSSheetal Tigadoli #define SDIO_INTR_CTL_MASTER_EN	    0x1  /* interrupt enable master */
155bffde63dSSheetal Tigadoli #define SDIO_INTR_STATUS_FUNC1	    0x2  /* interrupt pending for function 1 */
156bffde63dSSheetal Tigadoli #define SDIO_IO_ABORT_RESET_ALL	    0x08 /* I/O card reset */
157bffde63dSSheetal Tigadoli #define SDIO_IO_ABORT_FUNC_MASK	    0x07 /* abort selection: function x */
158bffde63dSSheetal Tigadoli #define SDIO_BUS_CARD_DETECT_DIS    0x80 /* Card Detect disable */
159bffde63dSSheetal Tigadoli #define SDIO_BUS_SPI_CONT_INTR_CAP  0x40 /* support continuous SPI interrupt */
160bffde63dSSheetal Tigadoli #define SDIO_BUS_SPI_CONT_INTR_EN   0x20 /* continuous SPI interrupt enable */
161bffde63dSSheetal Tigadoli #define SDIO_BUS_DATA_WIDTH_MASK    0x03 /* bus width mask */
162bffde63dSSheetal Tigadoli #define SDIO_BUS_DATA_WIDTH_4BIT    0x02 /* bus width 4-bit mode */
163bffde63dSSheetal Tigadoli #define SDIO_BUS_DATA_WIDTH_1BIT    0x00 /* bus width 1-bit mode */
164bffde63dSSheetal Tigadoli 
165bffde63dSSheetal Tigadoli /* capability */
166bffde63dSSheetal Tigadoli #define SDIO_CAP_4BLS  0x80 /* 4-bit support for low speed card */
167bffde63dSSheetal Tigadoli #define SDIO_CAP_LSC   0x40 /* low speed card */
168bffde63dSSheetal Tigadoli #define SDIO_CAP_E4MI  0x20 /* enable int between block in 4-bit mode */
169bffde63dSSheetal Tigadoli #define SDIO_CAP_S4MI  0x10 /* support int between block in 4-bit mode */
170bffde63dSSheetal Tigadoli #define SDIO_CAP_SBS   0x08 /* support suspend/resume */
171bffde63dSSheetal Tigadoli #define SDIO_CAP_SRW   0x04 /* support read wait */
172bffde63dSSheetal Tigadoli #define SDIO_CAP_SMB   0x02 /* support multi-block transfer */
173bffde63dSSheetal Tigadoli #define SDIO_CAP_SDC   0x01 /* Support Direct cmd during multi-uint8 transfer */
174bffde63dSSheetal Tigadoli 
175bffde63dSSheetal Tigadoli /* CIA FBR1 registers */
176bffde63dSSheetal Tigadoli #define SDIO_FUNC1_INFO           0x100 /* basic info for function 1 */
177bffde63dSSheetal Tigadoli #define SDIO_FUNC1_EXT            0x101 /* extension of standard I/O device */
178bffde63dSSheetal Tigadoli #define SDIO_CIS_FUNC1_BASE_LOW   0x109 /* function 1 cis address bit 0-7 */
179bffde63dSSheetal Tigadoli #define SDIO_CIS_FUNC1_BASE_MID   0x10A /* function 1 cis address bit 8-15 */
180bffde63dSSheetal Tigadoli #define SDIO_CIS_FUNC1_BASE_HIGH  0x10B /* function 1 cis address bit 16 */
181bffde63dSSheetal Tigadoli #define SDIO_CSA_BASE_LOW         0x10C /* CSA base address uint8_t 0 */
182bffde63dSSheetal Tigadoli #define SDIO_CSA_BASE_MID         0x10D /* CSA base address uint8_t 1 */
183bffde63dSSheetal Tigadoli #define SDIO_CSA_BASE_HIGH        0x10E /* CSA base address uint8_t 2 */
184bffde63dSSheetal Tigadoli #define SDIO_CSA_DATA_OFFSET      0x10F /* CSA data register */
185bffde63dSSheetal Tigadoli #define SDIO_IO_BLK_SIZE_LOW      0x110 /* I/O block size uint8_t 0 */
186bffde63dSSheetal Tigadoli #define SDIO_IO_BLK_SIZE_HIGH     0x111 /* I/O block size uint8_t 1 */
187bffde63dSSheetal Tigadoli 
188bffde63dSSheetal Tigadoli /* SD_SDIO_FUNC1_INFO bits */
189bffde63dSSheetal Tigadoli #define SDIO_FUNC1_INFO_DIC     0x0f	/* device interface code */
190bffde63dSSheetal Tigadoli #define SDIO_FUNC1_INFO_CSA     0x40	/* CSA support flag */
191bffde63dSSheetal Tigadoli #define SDIO_FUNC1_INFO_CSA_EN  0x80	/* CSA enabled */
192bffde63dSSheetal Tigadoli 
193bffde63dSSheetal Tigadoli /* SD_SDIO_FUNC1_EXT bits */
194bffde63dSSheetal Tigadoli #define SDIO_FUNC1_EXT_SHP		0x03	/* support high power */
195bffde63dSSheetal Tigadoli #define SDIO_FUNC1_EXT_EHP		0x04	/* enable high power */
196bffde63dSSheetal Tigadoli 
197bffde63dSSheetal Tigadoli /* devctr */
198bffde63dSSheetal Tigadoli /* I/O device interface code */
199bffde63dSSheetal Tigadoli #define SDIO_DEVCTR_DEVINTER		0x0f
200bffde63dSSheetal Tigadoli /* support CSA */
201bffde63dSSheetal Tigadoli #define SDIO_DEVCTR_CSA_SUP		0x40
202bffde63dSSheetal Tigadoli /* enable CSA */
203bffde63dSSheetal Tigadoli #define SDIO_DEVCTR_CSA_EN		0x80
204bffde63dSSheetal Tigadoli 
205bffde63dSSheetal Tigadoli /* ext_dev */
206bffde63dSSheetal Tigadoli /* supports high-power mask */
207bffde63dSSheetal Tigadoli #define SDIO_HIGHPWR_SUPPORT_M		0x3
208bffde63dSSheetal Tigadoli /* enable high power */
209bffde63dSSheetal Tigadoli #define SDIO_HIGHPWR_EN			0x4
210bffde63dSSheetal Tigadoli /* standard power function(up to 200mA */
211bffde63dSSheetal Tigadoli #define SDIO_HP_STD			0
212bffde63dSSheetal Tigadoli /* need high power to operate */
213bffde63dSSheetal Tigadoli #define SDIO_HP_REQUIRED		0x2
214bffde63dSSheetal Tigadoli /* can work with standard power, but prefer high power */
215bffde63dSSheetal Tigadoli #define SDIO_HP_DESIRED			0x3
216bffde63dSSheetal Tigadoli 
217bffde63dSSheetal Tigadoli /* misc define */
218bffde63dSSheetal Tigadoli /* macro to calculate fbr register base */
219bffde63dSSheetal Tigadoli #define FBR_REG_BASE(n)			(n*0x100)
220bffde63dSSheetal Tigadoli #define SDIO_FUNC_0			0
221bffde63dSSheetal Tigadoli #define SDIO_FUNC_1			1
222bffde63dSSheetal Tigadoli #define SDIO_FUNC_2			2
223bffde63dSSheetal Tigadoli #define SDIO_FUNC_3			3
224bffde63dSSheetal Tigadoli #define SDIO_FUNC_4			4
225bffde63dSSheetal Tigadoli #define SDIO_FUNC_5			5
226bffde63dSSheetal Tigadoli #define SDIO_FUNC_6			6
227bffde63dSSheetal Tigadoli #define SDIO_FUNC_7			7
228bffde63dSSheetal Tigadoli 
229bffde63dSSheetal Tigadoli /* maximum block size for block mode operation */
230bffde63dSSheetal Tigadoli #define SDIO_MAX_BLOCK_SIZE		2048
231bffde63dSSheetal Tigadoli /* minimum block size for block mode operation */
232bffde63dSSheetal Tigadoli #define SDIO_MIN_BLOCK_SIZE		1
233bffde63dSSheetal Tigadoli 
234bffde63dSSheetal Tigadoli /* Card registers: status bit position */
235bffde63dSSheetal Tigadoli #define SDIO_STATUS_OUTOFRANGE		31
236bffde63dSSheetal Tigadoli #define SDIO_STATUS_COMCRCERROR		23
237bffde63dSSheetal Tigadoli #define SDIO_STATUS_ILLEGALCOMMAND	22
238bffde63dSSheetal Tigadoli #define SDIO_STATUS_ERROR		19
239bffde63dSSheetal Tigadoli #define SDIO_STATUS_IOCURRENTSTATE3	12
240bffde63dSSheetal Tigadoli #define SDIO_STATUS_IOCURRENTSTATE2	11
241bffde63dSSheetal Tigadoli #define SDIO_STATUS_IOCURRENTSTATE1	10
242bffde63dSSheetal Tigadoli #define SDIO_STATUS_IOCURRENTSTATE0	9
243bffde63dSSheetal Tigadoli #define SDIO_STATUS_FUN_NUM_ERROR	4
244bffde63dSSheetal Tigadoli 
245bffde63dSSheetal Tigadoli #define GET_SDIOCARD_STATUS(x)		((x >> 9) & 0x0f)
246bffde63dSSheetal Tigadoli #define SDIO_STATUS_STATE_IDLE		0
247bffde63dSSheetal Tigadoli #define SDIO_STATUS_STATE_READY		1
248bffde63dSSheetal Tigadoli #define SDIO_STATUS_STATE_IDENT		2
249bffde63dSSheetal Tigadoli #define SDIO_STATUS_STATE_STBY		3
250bffde63dSSheetal Tigadoli #define SDIO_STATUS_STATE_TRAN		4
251bffde63dSSheetal Tigadoli #define SDIO_STATUS_STATE_DATA		5
252bffde63dSSheetal Tigadoli #define SDIO_STATUS_STATE_RCV		6
253bffde63dSSheetal Tigadoli #define SDIO_STATUS_STATE_PRG		7
254bffde63dSSheetal Tigadoli #define SDIO_STATUS_STATE_DIS		8
255bffde63dSSheetal Tigadoli 
256bffde63dSSheetal Tigadoli /* sprom */
257bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_CS        0x10000	/* command and status */
258bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_INFO      0x10001	/* info register */
259bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_DATA_LOW  0x10002	/* indirect access data uint8_t 0 */
260bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_DATA_HIGH 0x10003	/* indirect access data uint8_t 1 */
261bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_ADDR_LOW  0x10004	/* indirect access addr uint8_t 0 */
262bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_ADDR_HIGH 0x10005	/* indirect access addr uint8_t 0 */
263bffde63dSSheetal Tigadoli #define SBSDIO_CHIP_CTRL_DATA  0x10006	/* xtal_pu data output */
264bffde63dSSheetal Tigadoli #define SBSDIO_CHIP_CTRL_EN    0x10007	/* xtal_pu enable */
265bffde63dSSheetal Tigadoli #define SBSDIO_WATERMARK       0x10008	/* retired in rev 7 */
266bffde63dSSheetal Tigadoli #define SBSDIO_DEVICE_CTL      0x10009	/* control busy signal generation */
267bffde63dSSheetal Tigadoli 
268bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_IDLE      0
269bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_WRITE     1
270bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_READ      2
271bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_WEN       4
272bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_WDS       7
273bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_DONE      8
274bffde63dSSheetal Tigadoli 
275bffde63dSSheetal Tigadoli /* SBSDIO_SPROM_INFO */
276bffde63dSSheetal Tigadoli #define SBSDIO_SROM_SZ_MASK		0x03	/* SROM size, 1: 4k, 2: 16k */
277bffde63dSSheetal Tigadoli #define SBSDIO_SROM_BLANK		0x04	/* depreciated in corerev 6 */
278bffde63dSSheetal Tigadoli #define	SBSDIO_SROM_OTP			0x80	/* OTP present */
279bffde63dSSheetal Tigadoli 
280bffde63dSSheetal Tigadoli /* SBSDIO_CHIP_CTRL */
281bffde63dSSheetal Tigadoli /* or'd with onchip xtal_pu, 1: power on oscillator */
282bffde63dSSheetal Tigadoli #define SBSDIO_CHIP_CTRL_XTAL		0x01
283bffde63dSSheetal Tigadoli 
284bffde63dSSheetal Tigadoli /* SBSDIO_WATERMARK */
285bffde63dSSheetal Tigadoli /* number of bytes minus 1 for sd device to wait before sending data to host */
286bffde63dSSheetal Tigadoli #define SBSDIO_WATERMARK_MASK		0x3f
287bffde63dSSheetal Tigadoli 
288bffde63dSSheetal Tigadoli /* SBSDIO_DEVICE_CTL */
289bffde63dSSheetal Tigadoli /* 1: device will assert busy signal when receiving CMD53 */
290bffde63dSSheetal Tigadoli #define SBSDIO_DEVCTL_SETBUSY		0x01
291bffde63dSSheetal Tigadoli /* 1: assertion of sdio interrupt is synchronous to the sdio clock */
292bffde63dSSheetal Tigadoli #define SBSDIO_DEVCTL_SPI_INTR_SYNC	0x02
293bffde63dSSheetal Tigadoli 
294bffde63dSSheetal Tigadoli /* function 1 OCP space */
295bffde63dSSheetal Tigadoli /* sb offset addr is <= 15 bits, 32k */
296bffde63dSSheetal Tigadoli #define SBSDIO_SB_OFT_ADDR_MASK		0x07FFF
297bffde63dSSheetal Tigadoli #define SBSDIO_SB_OFT_ADDR_LIMIT	0x08000
298bffde63dSSheetal Tigadoli /* sdsdio function 1 OCP space has 16/32 bit section */
299bffde63dSSheetal Tigadoli #define SBSDIO_SB_ACCESS_2_4B_FLAG	0x08000
300bffde63dSSheetal Tigadoli 
301bffde63dSSheetal Tigadoli /* direct(mapped) cis space */
302bffde63dSSheetal Tigadoli /* MAPPED common CIS address */
303bffde63dSSheetal Tigadoli #define SBSDIO_CIS_BASE_COMMON		0x1000
304bffde63dSSheetal Tigadoli /* function 0(common) cis size in bytes */
305bffde63dSSheetal Tigadoli #define SBSDIO_CIS_FUNC0_LIMIT		0x020
306*1b491eeaSElyes Haouas /* function 1 cis size in bytes */
307bffde63dSSheetal Tigadoli #define SBSDIO_CIS_SIZE_LIMIT		0x200
308bffde63dSSheetal Tigadoli /* cis offset addr is < 17 bits */
309bffde63dSSheetal Tigadoli #define SBSDIO_CIS_OFT_ADDR_MASK	0x1FFFF
310bffde63dSSheetal Tigadoli /* manfid tuple length, include tuple, link bytes */
311bffde63dSSheetal Tigadoli #define SBSDIO_CIS_MANFID_TUPLE_LEN	6
312bffde63dSSheetal Tigadoli 
313bffde63dSSheetal Tigadoli /* indirect cis access (in sprom) */
314bffde63dSSheetal Tigadoli /* 8 control bytes first, CIS starts from 8th uint8_t */
315bffde63dSSheetal Tigadoli #define SBSDIO_SPROM_CIS_OFFSET		0x8
316*1b491eeaSElyes Haouas /* sdio uint8_t mode: maximum length of one data command */
317bffde63dSSheetal Tigadoli #define SBSDIO_BYTEMODE_DATALEN_MAX	64
318bffde63dSSheetal Tigadoli /* 4317 supports less */
319bffde63dSSheetal Tigadoli #define SBSDIO_BYTEMODE_DATALEN_MAX_4317	52
320bffde63dSSheetal Tigadoli /* sdio core function one address mask */
321bffde63dSSheetal Tigadoli #define SBSDIO_CORE_ADDR_MASK	0x1FFFF
322bffde63dSSheetal Tigadoli 
323bffde63dSSheetal Tigadoli /* CEATA defines */
324bffde63dSSheetal Tigadoli #define CEATA_EXT_CSDBLOCK_SIZE         512
325bffde63dSSheetal Tigadoli #define CEATA_FAST_IO                   39
326bffde63dSSheetal Tigadoli #define CEATA_MULTIPLE_REGISTER_RW      60
327bffde63dSSheetal Tigadoli #define CEATA_MULTIPLE_BLOCK_RW         61
328bffde63dSSheetal Tigadoli 
329bffde63dSSheetal Tigadoli /* defines CE ATA task file registers */
330bffde63dSSheetal Tigadoli #define CEATA_SCT_CNT_EXP_REG           0x02
331bffde63dSSheetal Tigadoli #define CEATA_LBA_LOW_EXP_REG           0x03
332bffde63dSSheetal Tigadoli #define CEATA_LBA_MID_EXP_REG           0x04
333bffde63dSSheetal Tigadoli #define CEATA_LBA_HIGH_EXP_REG          0x05
334bffde63dSSheetal Tigadoli #define CEATA_CNTRL_REG                 0x06
335bffde63dSSheetal Tigadoli #define CEATA_FEATURE_REG               0x09	/* write */
336bffde63dSSheetal Tigadoli #define CEATA_ERROR_REG                 0x09	/* read */
337bffde63dSSheetal Tigadoli #define CEATA_SCT_CNT_REG               0x0A
338bffde63dSSheetal Tigadoli #define CEATA_LBA_LOW_REG               0x0B
339bffde63dSSheetal Tigadoli #define CEATA_LBA_MID_REG               0x0C
340bffde63dSSheetal Tigadoli #define CEATA_LBA_HIGH_REG              0x0D
341bffde63dSSheetal Tigadoli #define CEATA_DEV_HEAD_REG              0x0E
342bffde63dSSheetal Tigadoli #define CEATA_STA_REG                   0x0F	/* read */
343bffde63dSSheetal Tigadoli #define CEATA_CMD_REG                   0x0F	/* write */
344bffde63dSSheetal Tigadoli 
345bffde63dSSheetal Tigadoli /* defines CEATA control and status registers for ce ata client driver */
346bffde63dSSheetal Tigadoli #define CEATA_SCR_TEMPC_REG             0x80
347bffde63dSSheetal Tigadoli #define CEATA_SCR_TEMPMAXP_REG          0x84
348bffde63dSSheetal Tigadoli #define CEATA_TEMPMINP_REG              0x88
349bffde63dSSheetal Tigadoli #define CEATA_SCR_STATUS_REG            0x8C
350bffde63dSSheetal Tigadoli #define CEATA_SCR_REALLOCSA_REG         0x90
351bffde63dSSheetal Tigadoli #define CEATA_SCR_ERETRACTSA_REG        0x94
352bffde63dSSheetal Tigadoli #define CEATA_SCR_CAPABILITIES_REG      0x98
353bffde63dSSheetal Tigadoli #define CEATA_SCR_CONTROL_REG           0xC0
354bffde63dSSheetal Tigadoli 
355bffde63dSSheetal Tigadoli /* defines for SCR capabilities register bits for ce ata client driver */
356bffde63dSSheetal Tigadoli #define CEATA_SCR_CAP_512               0x00000001
357bffde63dSSheetal Tigadoli #define CEATA_SCR_CAP_1K                0x00000002
358bffde63dSSheetal Tigadoli #define CEATA_SCR_CAP_4K                0x00000004
359bffde63dSSheetal Tigadoli 
360bffde63dSSheetal Tigadoli /* defines CE ATA Control reg bits for ce ata client driver */
361bffde63dSSheetal Tigadoli #define CEATA_CNTRL_ENABLE_INTR         0x00
362bffde63dSSheetal Tigadoli #define CEATA_CNTRL_DISABLE_INTR        0x02
363bffde63dSSheetal Tigadoli #define CEATA_CNTRL_SRST                0x04
364bffde63dSSheetal Tigadoli #define CEATA_CNTRL_RSRST               0x00
365bffde63dSSheetal Tigadoli 
366bffde63dSSheetal Tigadoli /* define CE ATA Status reg bits for ce ata client driver */
367bffde63dSSheetal Tigadoli #define CEATA_STA_ERROR_BIT             0x01
368bffde63dSSheetal Tigadoli #define CEATA_STA_OVR_BIT               0x02
369bffde63dSSheetal Tigadoli #define CEATA_STA_SPT_BIT               0x04
370bffde63dSSheetal Tigadoli #define CEATA_STA_DRQ_BIT               0x08
371bffde63dSSheetal Tigadoli #define CEATA_STA_DRDY_BIT              0x40
372bffde63dSSheetal Tigadoli #define CEATA_STA_BSY_BIT               0x80
373bffde63dSSheetal Tigadoli 
374bffde63dSSheetal Tigadoli /* define CE ATA Error reg bits for ce ata client driver */
375bffde63dSSheetal Tigadoli #define CEATA_ERROR_ABORTED_BIT         0x04
376bffde63dSSheetal Tigadoli #define CEATA_ERROR_IDNF_BIT            0x10
377bffde63dSSheetal Tigadoli #define CEATA_ERROR_UNCORRECTABLE_BIT   0x40
378bffde63dSSheetal Tigadoli #define CEATA_ERROR_ICRC_BIT            0x80
379bffde63dSSheetal Tigadoli 
380bffde63dSSheetal Tigadoli /* define CE ATA Commands for ce ata client driver */
381bffde63dSSheetal Tigadoli #define CEATA_CMD_IDENTIFY_DEVICE       0xEC
382bffde63dSSheetal Tigadoli #define CEATA_CMD_READ_DMA_EXT          0x25
383bffde63dSSheetal Tigadoli #define CEATA_CMD_WRITE_DMA_EXT         0x35
384bffde63dSSheetal Tigadoli #define CEATA_CMD_STANDBY_IMMEDIATE     0xE0
385bffde63dSSheetal Tigadoli #define CEATA_CMD_FLUSH_CACHE_EXT       0xEA
386bffde63dSSheetal Tigadoli 
387bffde63dSSheetal Tigadoli struct csd_mmc {
388bffde63dSSheetal Tigadoli 	uint32_t padding:8;
389bffde63dSSheetal Tigadoli 	uint32_t structure:2;
390bffde63dSSheetal Tigadoli 	uint32_t csdSpecVer:4;
391bffde63dSSheetal Tigadoli 	uint32_t reserved1:2;
392bffde63dSSheetal Tigadoli 	uint32_t taac:8;
393bffde63dSSheetal Tigadoli 	uint32_t nsac:8;
394bffde63dSSheetal Tigadoli 	uint32_t speed:8;
395bffde63dSSheetal Tigadoli 	uint32_t classes:12;
396bffde63dSSheetal Tigadoli 	uint32_t rdBlkLen:4;
397bffde63dSSheetal Tigadoli 	uint32_t rdBlkPartial:1;
398bffde63dSSheetal Tigadoli 	uint32_t wrBlkMisalign:1;
399bffde63dSSheetal Tigadoli 	uint32_t rdBlkMisalign:1;
400bffde63dSSheetal Tigadoli 	uint32_t dsr:1;
401bffde63dSSheetal Tigadoli 	uint32_t reserved2:2;
402bffde63dSSheetal Tigadoli 	uint32_t size:12;
403bffde63dSSheetal Tigadoli 	uint32_t vddRdCurrMin:3;
404bffde63dSSheetal Tigadoli 	uint32_t vddRdCurrMax:3;
405bffde63dSSheetal Tigadoli 	uint32_t vddWrCurrMin:3;
406bffde63dSSheetal Tigadoli 	uint32_t vddWrCurrMax:3;
407bffde63dSSheetal Tigadoli 	uint32_t devSizeMulti:3;
408bffde63dSSheetal Tigadoli 	uint32_t eraseGrpSize:5;
409bffde63dSSheetal Tigadoli 	uint32_t eraseGrpSizeMulti:5;
410bffde63dSSheetal Tigadoli 	uint32_t wrProtGroupSize:5;
411bffde63dSSheetal Tigadoli 	uint32_t wrProtGroupEnable:1;
412bffde63dSSheetal Tigadoli 	uint32_t manuDefEcc:2;
413bffde63dSSheetal Tigadoli 	uint32_t wrSpeedFactor:3;
414bffde63dSSheetal Tigadoli 	uint32_t wrBlkLen:4;
415bffde63dSSheetal Tigadoli 	uint32_t wrBlkPartial:1;
416bffde63dSSheetal Tigadoli 	uint32_t reserved5:4;
417bffde63dSSheetal Tigadoli 	uint32_t protAppl:1;
418bffde63dSSheetal Tigadoli 	uint32_t fileFormatGrp:1;
419bffde63dSSheetal Tigadoli 	uint32_t copyFlag:1;
420bffde63dSSheetal Tigadoli 	uint32_t permWrProt:1;
421bffde63dSSheetal Tigadoli 	uint32_t tmpWrProt:1;
422bffde63dSSheetal Tigadoli 	uint32_t fileFormat:2;
423bffde63dSSheetal Tigadoli 	uint32_t eccCode:2;
424bffde63dSSheetal Tigadoli };
425bffde63dSSheetal Tigadoli 
426bffde63dSSheetal Tigadoli /* CSD register*/
427bffde63dSSheetal Tigadoli union sd_csd {
428bffde63dSSheetal Tigadoli 	uint32_t csd[4];
429bffde63dSSheetal Tigadoli 	struct csd_mmc mmc;
430bffde63dSSheetal Tigadoli };
431bffde63dSSheetal Tigadoli 
432bffde63dSSheetal Tigadoli struct sd_card_data {
433bffde63dSSheetal Tigadoli 	union sd_csd csd;
434bffde63dSSheetal Tigadoli };
435bffde63dSSheetal Tigadoli #endif /* CSL_SD_PROT_H */
436