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