1 /******************************************************************************
\r
3 * Copyright (C) 2013 - 2015 Xilinx, Inc. All rights reserved.
\r
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
\r
6 * of this software and associated documentation files (the "Software"), to deal
\r
7 * in the Software without restriction, including without limitation the rights
\r
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
\r
9 * copies of the Software, and to permit persons to whom the Software is
\r
10 * furnished to do so, subject to the following conditions:
\r
12 * The above copyright notice and this permission notice shall be included in
\r
13 * all copies or substantial portions of the Software.
\r
15 * Use of the Software is limited solely to applications:
\r
16 * (a) running on a Xilinx device, or
\r
17 * (b) that interact with a Xilinx device through a bus or interconnect.
\r
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
\r
20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
\r
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
\r
22 * XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
\r
23 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
\r
24 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
\r
27 * Except as contained in this notice, the name of the Xilinx shall not be used
\r
28 * in advertising or otherwise to promote the sale, use or other dealings in
\r
29 * this Software without prior written authorization from Xilinx.
\r
31 ******************************************************************************/
\r
32 /*****************************************************************************/
\r
36 * @addtogroup sdps_v2_5
\r
39 * This header file contains the identifiers and basic HW access driver
\r
40 * functions (or macros) that can be used to access the device. Other driver
\r
41 * functions are defined in xsdps.h.
\r
44 * MODIFICATION HISTORY:
\r
46 * Ver Who Date Changes
\r
47 * ----- --- -------- -----------------------------------------------
\r
48 * 1.00a hk/sg 10/17/13 Initial release
\r
49 * 2.5 sg 07/09/15 Added SD 3.0 features
\r
50 * kvn 07/15/15 Modified the code according to MISRAC-2012.
\r
53 ******************************************************************************/
\r
62 /***************************** Include Files *********************************/
\r
64 #include "xil_types.h"
\r
65 #include "xil_assert.h"
\r
67 #include "xparameters.h"
\r
69 /************************** Constant Definitions *****************************/
\r
71 /** @name Register Map
\r
73 * Register offsets from the base address of an SD device.
\r
77 #define XSDPS_SDMA_SYS_ADDR_OFFSET 0x00U /**< SDMA System Address
\r
79 #define XSDPS_SDMA_SYS_ADDR_LO_OFFSET XSDPS_SDMA_SYS_ADDR_OFFSET
\r
80 /**< SDMA System Address
\r
82 #define XSDPS_ARGMT2_LO_OFFSET 0x00U /**< Argument2 Low Register */
\r
83 #define XSDPS_SDMA_SYS_ADDR_HI_OFFSET 0x02U /**< SDMA System Address
\r
85 #define XSDPS_ARGMT2_HI_OFFSET 0x02U /**< Argument2 High Register */
\r
87 #define XSDPS_BLK_SIZE_OFFSET 0x04U /**< Block Size Register */
\r
88 #define XSDPS_BLK_CNT_OFFSET 0x06U /**< Block Count Register */
\r
89 #define XSDPS_ARGMT_OFFSET 0x08U /**< Argument Register */
\r
90 #define XSDPS_ARGMT1_LO_OFFSET XSDPS_ARGMT_OFFSET
\r
91 /**< Argument1 Register */
\r
92 #define XSDPS_ARGMT1_HI_OFFSET 0x0AU /**< Argument1 Register */
\r
94 #define XSDPS_XFER_MODE_OFFSET 0x0CU /**< Transfer Mode Register */
\r
95 #define XSDPS_CMD_OFFSET 0x0EU /**< Command Register */
\r
96 #define XSDPS_RESP0_OFFSET 0x10U /**< Response0 Register */
\r
97 #define XSDPS_RESP1_OFFSET 0x14U /**< Response1 Register */
\r
98 #define XSDPS_RESP2_OFFSET 0x18U /**< Response2 Register */
\r
99 #define XSDPS_RESP3_OFFSET 0x1CU /**< Response3 Register */
\r
100 #define XSDPS_BUF_DAT_PORT_OFFSET 0x20U /**< Buffer Data Port */
\r
101 #define XSDPS_PRES_STATE_OFFSET 0x24U /**< Present State */
\r
102 #define XSDPS_HOST_CTRL1_OFFSET 0x28U /**< Host Control 1 */
\r
103 #define XSDPS_POWER_CTRL_OFFSET 0x29U /**< Power Control */
\r
104 #define XSDPS_BLK_GAP_CTRL_OFFSET 0x2AU /**< Block Gap Control */
\r
105 #define XSDPS_WAKE_UP_CTRL_OFFSET 0x2BU /**< Wake Up Control */
\r
106 #define XSDPS_CLK_CTRL_OFFSET 0x2CU /**< Clock Control */
\r
107 #define XSDPS_TIMEOUT_CTRL_OFFSET 0x2EU /**< Timeout Control */
\r
108 #define XSDPS_SW_RST_OFFSET 0x2FU /**< Software Reset */
\r
109 #define XSDPS_NORM_INTR_STS_OFFSET 0x30U /**< Normal Interrupt
\r
111 #define XSDPS_ERR_INTR_STS_OFFSET 0x32U /**< Error Interrupt
\r
113 #define XSDPS_NORM_INTR_STS_EN_OFFSET 0x34U /**< Normal Interrupt
\r
114 Status Enable Register */
\r
115 #define XSDPS_ERR_INTR_STS_EN_OFFSET 0x36U /**< Error Interrupt
\r
116 Status Enable Register */
\r
117 #define XSDPS_NORM_INTR_SIG_EN_OFFSET 0x38U /**< Normal Interrupt
\r
118 Signal Enable Register */
\r
119 #define XSDPS_ERR_INTR_SIG_EN_OFFSET 0x3AU /**< Error Interrupt
\r
120 Signal Enable Register */
\r
122 #define XSDPS_AUTO_CMD12_ERR_STS_OFFSET 0x3CU /**< Auto CMD12 Error Status
\r
124 #define XSDPS_HOST_CTRL2_OFFSET 0x3EU /**< Host Control2 Register */
\r
125 #define XSDPS_CAPS_OFFSET 0x40U /**< Capabilities Register */
\r
126 #define XSDPS_CAPS_EXT_OFFSET 0x44U /**< Capabilities Extended */
\r
127 #define XSDPS_MAX_CURR_CAPS_OFFSET 0x48U /**< Maximum Current
\r
128 Capabilities Register */
\r
129 #define XSDPS_MAX_CURR_CAPS_EXT_OFFSET 0x4CU /**< Maximum Current
\r
130 Capabilities Ext Register */
\r
131 #define XSDPS_FE_ERR_INT_STS_OFFSET 0x52U /**< Force Event for
\r
132 Error Interrupt Status */
\r
133 #define XSDPS_FE_AUTO_CMD12_EIS_OFFSET 0x50U /**< Auto CM12 Error Interrupt
\r
135 #define XSDPS_ADMA_ERR_STS_OFFSET 0x54U /**< ADMA Error Status
\r
137 #define XSDPS_ADMA_SAR_OFFSET 0x58U /**< ADMA System Address
\r
139 #define XSDPS_ADMA_SAR_EXT_OFFSET 0x5CU /**< ADMA System Address
\r
140 Extended Register */
\r
141 #define XSDPS_PRE_VAL_1_OFFSET 0x60U /**< Preset Value Register */
\r
142 #define XSDPS_PRE_VAL_2_OFFSET 0x64U /**< Preset Value Register */
\r
143 #define XSDPS_PRE_VAL_3_OFFSET 0x68U /**< Preset Value Register */
\r
144 #define XSDPS_PRE_VAL_4_OFFSET 0x6CU /**< Preset Value Register */
\r
145 #define XSDPS_BOOT_TOUT_CTRL_OFFSET 0x70U /**< Boot timeout control
\r
148 #define XSDPS_SHARED_BUS_CTRL_OFFSET 0xE0U /**< Shared Bus Control
\r
150 #define XSDPS_SLOT_INTR_STS_OFFSET 0xFCU /**< Slot Interrupt Status
\r
152 #define XSDPS_HOST_CTRL_VER_OFFSET 0xFEU /**< Host Controller Version
\r
157 /** @name Control Register - Host control, Power control,
\r
158 * Block Gap control and Wakeup control
\r
160 * This register contains bits for various configuration options of
\r
161 * the SD host controller. Read/Write apart from the reserved bits.
\r
165 #define XSDPS_HC_LED_MASK 0x00000001U /**< LED Control */
\r
166 #define XSDPS_HC_WIDTH_MASK 0x00000002U /**< Bus width */
\r
167 #define XSDPS_HC_BUS_WIDTH_4 0x00000002U
\r
168 #define XSDPS_HC_SPEED_MASK 0x00000004U /**< High Speed */
\r
169 #define XSDPS_HC_DMA_MASK 0x00000018U /**< DMA Mode Select */
\r
170 #define XSDPS_HC_DMA_SDMA_MASK 0x00000000U /**< SDMA Mode */
\r
171 #define XSDPS_HC_DMA_ADMA1_MASK 0x00000008U /**< ADMA1 Mode */
\r
172 #define XSDPS_HC_DMA_ADMA2_32_MASK 0x00000010U /**< ADMA2 Mode - 32 bit */
\r
173 #define XSDPS_HC_DMA_ADMA2_64_MASK 0x00000018U /**< ADMA2 Mode - 64 bit */
\r
174 #define XSDPS_HC_EXT_BUS_WIDTH 0x00000020U /**< Bus width - 8 bit */
\r
175 #define XSDPS_HC_CARD_DET_TL_MASK 0x00000040U /**< Card Detect Tst Lvl */
\r
176 #define XSDPS_HC_CARD_DET_SD_MASK 0x00000080U /**< Card Detect Sig Det */
\r
178 #define XSDPS_PC_BUS_PWR_MASK 0x00000001U /**< Bus Power Control */
\r
179 #define XSDPS_PC_BUS_VSEL_MASK 0x0000000EU /**< Bus Voltage Select */
\r
180 #define XSDPS_PC_BUS_VSEL_3V3_MASK 0x0000000EU /**< Bus Voltage 3.3V */
\r
181 #define XSDPS_PC_BUS_VSEL_3V0_MASK 0x0000000CU /**< Bus Voltage 3.0V */
\r
182 #define XSDPS_PC_BUS_VSEL_1V8_MASK 0x0000000AU /**< Bus Voltage 1.8V */
\r
183 #define XSDPS_PC_EMMC_HW_RST_MASK 0x00000010U /**< HW reset for eMMC */
\r
185 #define XSDPS_BGC_STP_REQ_MASK 0x00000001U /**< Block Gap Stop Req */
\r
186 #define XSDPS_BGC_CNT_REQ_MASK 0x00000002U /**< Block Gap Cont Req */
\r
187 #define XSDPS_BGC_RWC_MASK 0x00000004U /**< Block Gap Rd Wait */
\r
188 #define XSDPS_BGC_INTR_MASK 0x00000008U /**< Block Gap Intr */
\r
189 #define XSDPS_BGC_SPI_MODE_MASK 0x00000010U /**< Block Gap SPI Mode */
\r
190 #define XSDPS_BGC_BOOT_EN_MASK 0x00000020U /**< Block Gap Boot Enb */
\r
191 #define XSDPS_BGC_ALT_BOOT_EN_MASK 0x00000040U /**< Block Gap Alt BootEn */
\r
192 #define XSDPS_BGC_BOOT_ACK_MASK 0x00000080U /**< Block Gap Boot Ack */
\r
194 #define XSDPS_WC_WUP_ON_INTR_MASK 0x00000001U /**< Wakeup Card Intr */
\r
195 #define XSDPS_WC_WUP_ON_INSRT_MASK 0x00000002U /**< Wakeup Card Insert */
\r
196 #define XSDPS_WC_WUP_ON_REM_MASK 0x00000004U /**< Wakeup Card Removal */
\r
200 /** @name Control Register - Clock control, Timeout control & Software reset
\r
202 * This register contains bits for configuration options of clock, timeout and
\r
204 * Read/Write except for Inter_Clock_Stable bit (read only) and reserved bits.
\r
208 #define XSDPS_CC_INT_CLK_EN_MASK 0x00000001U
\r
209 #define XSDPS_CC_INT_CLK_STABLE_MASK 0x00000002U
\r
210 #define XSDPS_CC_SD_CLK_EN_MASK 0x00000004U
\r
211 #define XSDPS_CC_SD_CLK_GEN_SEL_MASK 0x00000020U
\r
212 #define XSDPS_CC_SDCLK_FREQ_SEL_EXT_MASK 0x000000C0U
\r
213 #define XSDPS_CC_SDCLK_FREQ_SEL_MASK 0x0000FF00U
\r
214 #define XSDPS_CC_SDCLK_FREQ_D256_MASK 0x00008000U
\r
215 #define XSDPS_CC_SDCLK_FREQ_D128_MASK 0x00004000U
\r
216 #define XSDPS_CC_SDCLK_FREQ_D64_MASK 0x00002000U
\r
217 #define XSDPS_CC_SDCLK_FREQ_D32_MASK 0x00001000U
\r
218 #define XSDPS_CC_SDCLK_FREQ_D16_MASK 0x00000800U
\r
219 #define XSDPS_CC_SDCLK_FREQ_D8_MASK 0x00000400U
\r
220 #define XSDPS_CC_SDCLK_FREQ_D4_MASK 0x00000200U
\r
221 #define XSDPS_CC_SDCLK_FREQ_D2_MASK 0x00000100U
\r
222 #define XSDPS_CC_SDCLK_FREQ_BASE_MASK 0x00000000U
\r
223 #define XSDPS_CC_MAX_DIV_CNT 256U
\r
224 #define XSDPS_CC_EXT_MAX_DIV_CNT 2046U
\r
225 #define XSDPS_CC_EXT_DIV_SHIFT 6U
\r
227 #define XSDPS_TC_CNTR_VAL_MASK 0x0000000FU
\r
229 #define XSDPS_SWRST_ALL_MASK 0x00000001U
\r
230 #define XSDPS_SWRST_CMD_LINE_MASK 0x00000002U
\r
231 #define XSDPS_SWRST_DAT_LINE_MASK 0x00000004U
\r
233 #define XSDPS_CC_MAX_NUM_OF_DIV 9U
\r
234 #define XSDPS_CC_DIV_SHIFT 8U
\r
238 /** @name SD Interrupt Registers
\r
240 * <b> Normal and Error Interrupt Status Register </b>
\r
241 * This register shows the normal and error interrupt status.
\r
242 * Status enable register affects reads of this register.
\r
243 * If Signal enable register is set and the corresponding status bit is set,
\r
244 * interrupt is generated.
\r
245 * Write to clear except
\r
246 * Error_interrupt and Card_Interrupt bits - Read only
\r
248 * <b> Normal and Error Interrupt Status Enable Register </b>
\r
249 * Setting this register bits enables Interrupt status.
\r
250 * Read/Write except Fixed_to_0 bit (Read only)
\r
252 * <b> Normal and Error Interrupt Signal Enable Register </b>
\r
253 * This register is used to select which interrupt status is
\r
254 * indicated to the Host System as the interrupt.
\r
255 * Read/Write except Fixed_to_0 bit (Read only)
\r
257 * All three registers have same bit definitions
\r
261 #define XSDPS_INTR_CC_MASK 0x00000001U /**< Command Complete */
\r
262 #define XSDPS_INTR_TC_MASK 0x00000002U /**< Transfer Complete */
\r
263 #define XSDPS_INTR_BGE_MASK 0x00000004U /**< Block Gap Event */
\r
264 #define XSDPS_INTR_DMA_MASK 0x00000008U /**< DMA Interrupt */
\r
265 #define XSDPS_INTR_BWR_MASK 0x00000010U /**< Buffer Write Ready */
\r
266 #define XSDPS_INTR_BRR_MASK 0x00000020U /**< Buffer Read Ready */
\r
267 #define XSDPS_INTR_CARD_INSRT_MASK 0x00000040U /**< Card Insert */
\r
268 #define XSDPS_INTR_CARD_REM_MASK 0x00000080U /**< Card Remove */
\r
269 #define XSDPS_INTR_CARD_MASK 0x00000100U /**< Card Interrupt */
\r
270 #define XSDPS_INTR_INT_A_MASK 0x00000200U /**< INT A Interrupt */
\r
271 #define XSDPS_INTR_INT_B_MASK 0x00000400U /**< INT B Interrupt */
\r
272 #define XSDPS_INTR_INT_C_MASK 0x00000800U /**< INT C Interrupt */
\r
273 #define XSDPS_INTR_RE_TUNING_MASK 0x00001000U /**< Re-Tuning Interrupt */
\r
274 #define XSDPS_INTR_BOOT_ACK_RECV_MASK 0x00002000U /**< Boot Ack Recv
\r
276 #define XSDPS_INTR_BOOT_TERM_MASK 0x00004000U /**< Boot Terminate
\r
278 #define XSDPS_INTR_ERR_MASK 0x00008000U /**< Error Interrupt */
\r
279 #define XSDPS_NORM_INTR_ALL_MASK 0x0000FFFFU
\r
281 #define XSDPS_INTR_ERR_CT_MASK 0x00000001U /**< Command Timeout
\r
283 #define XSDPS_INTR_ERR_CCRC_MASK 0x00000002U /**< Command CRC Error */
\r
284 #define XSDPS_INTR_ERR_CEB_MASK 0x00000004U /**< Command End Bit
\r
286 #define XSDPS_INTR_ERR_CI_MASK 0x00000008U /**< Command Index Error */
\r
287 #define XSDPS_INTR_ERR_DT_MASK 0x00000010U /**< Data Timeout Error */
\r
288 #define XSDPS_INTR_ERR_DCRC_MASK 0x00000020U /**< Data CRC Error */
\r
289 #define XSDPS_INTR_ERR_DEB_MASK 0x00000040U /**< Data End Bit Error */
\r
290 #define XSDPS_INTR_ERR_CUR_LMT_MASK 0x00000080U /**< Current Limit Error */
\r
291 #define XSDPS_INTR_ERR_AUTO_CMD12_MASK 0x00000100U /**< Auto CMD12 Error */
\r
292 #define XSDPS_INTR_ERR_ADMA_MASK 0x00000200U /**< ADMA Error */
\r
293 #define XSDPS_INTR_ERR_TR_MASK 0x00001000U /**< Tuning Error */
\r
294 #define XSDPS_INTR_VEND_SPF_ERR_MASK 0x0000E000U /**< Vendor Specific
\r
296 #define XSDPS_ERROR_INTR_ALL_MASK 0x0000F3FFU /**< Mask for error bits */
\r
299 /** @name Block Size and Block Count Register
\r
301 * This register contains the block count for current transfer,
\r
302 * block size and SDMA buffer size.
\r
303 * Read/Write except for reserved bits.
\r
307 #define XSDPS_BLK_SIZE_MASK 0x00000FFFU /**< Transfer Block Size */
\r
308 #define XSDPS_SDMA_BUFF_SIZE_MASK 0x00007000U /**< Host SDMA Buffer Size */
\r
309 #define XSDPS_BLK_SIZE_1024 0x400U
\r
310 #define XSDPS_BLK_SIZE_2048 0x800U
\r
311 #define XSDPS_BLK_CNT_MASK 0x0000FFFFU /**< Block Count for
\r
312 Current Transfer */
\r
316 /** @name Transfer Mode and Command Register
\r
318 * The Transfer Mode register is used to control the data transfers and
\r
319 * Command register is used for command generation
\r
320 * Read/Write except for reserved bits.
\r
324 #define XSDPS_TM_DMA_EN_MASK 0x00000001U /**< DMA Enable */
\r
325 #define XSDPS_TM_BLK_CNT_EN_MASK 0x00000002U /**< Block Count Enable */
\r
326 #define XSDPS_TM_AUTO_CMD12_EN_MASK 0x00000004U /**< Auto CMD12 Enable */
\r
327 #define XSDPS_TM_DAT_DIR_SEL_MASK 0x00000010U /**< Data Transfer
\r
328 Direction Select */
\r
329 #define XSDPS_TM_MUL_SIN_BLK_SEL_MASK 0x00000020U /**< Multi/Single
\r
332 #define XSDPS_CMD_RESP_SEL_MASK 0x00000003U /**< Response Type
\r
334 #define XSDPS_CMD_RESP_NONE_MASK 0x00000000U /**< No Response */
\r
335 #define XSDPS_CMD_RESP_L136_MASK 0x00000001U /**< Response length 138 */
\r
336 #define XSDPS_CMD_RESP_L48_MASK 0x00000002U /**< Response length 48 */
\r
337 #define XSDPS_CMD_RESP_L48_BSY_CHK_MASK 0x00000003U /**< Response length 48 &
\r
340 #define XSDPS_CMD_CRC_CHK_EN_MASK 0x00000008U /**< Command CRC Check
\r
342 #define XSDPS_CMD_INX_CHK_EN_MASK 0x00000010U /**< Command Index Check
\r
344 #define XSDPS_DAT_PRESENT_SEL_MASK 0x00000020U /**< Data Present Select */
\r
345 #define XSDPS_CMD_TYPE_MASK 0x000000C0U /**< Command Type */
\r
346 #define XSDPS_CMD_TYPE_NORM_MASK 0x00000000U /**< CMD Type - Normal */
\r
347 #define XSDPS_CMD_TYPE_SUSPEND_MASK 0x00000040U /**< CMD Type - Suspend */
\r
348 #define XSDPS_CMD_TYPE_RESUME_MASK 0x00000080U /**< CMD Type - Resume */
\r
349 #define XSDPS_CMD_TYPE_ABORT_MASK 0x000000C0U /**< CMD Type - Abort */
\r
350 #define XSDPS_CMD_MASK 0x00003F00U /**< Command Index Mask -
\r
356 /** @name Auto CMD Error Status Register
\r
358 * This register is read only register which contains
\r
359 * information about the error status of Auto CMD 12 and 23.
\r
363 #define XSDPS_AUTO_CMD12_NT_EX_MASK 0x0001U /**< Auto CMD12 Not
\r
365 #define XSDPS_AUTO_CMD_TOUT_MASK 0x0002U /**< Auto CMD Timeout
\r
367 #define XSDPS_AUTO_CMD_CRC_MASK 0x0004U /**< Auto CMD CRC Error */
\r
368 #define XSDPS_AUTO_CMD_EB_MASK 0x0008U /**< Auto CMD End Bit
\r
370 #define XSDPS_AUTO_CMD_IND_MASK 0x0010U /**< Auto CMD Index Error */
\r
371 #define XSDPS_AUTO_CMD_CNI_ERR_MASK 0x0080U /**< Command not issued by
\r
372 Auto CMD12 Error */
\r
375 /** @name Host Control2 Register
\r
377 * This register contains extended configuration bits.
\r
381 #define XSDPS_HC2_UHS_MODE_MASK 0x0007U /**< UHS Mode select bits */
\r
382 #define XSDPS_HC2_UHS_MODE_SDR12_MASK 0x0000U /**< SDR12 UHS Mode */
\r
383 #define XSDPS_HC2_UHS_MODE_SDR25_MASK 0x0001U /**< SDR25 UHS Mode */
\r
384 #define XSDPS_HC2_UHS_MODE_SDR50_MASK 0x0002U /**< SDR50 UHS Mode */
\r
385 #define XSDPS_HC2_UHS_MODE_SDR104_MASK 0x0003U /**< SDR104 UHS Mode */
\r
386 #define XSDPS_HC2_UHS_MODE_DDR50_MASK 0x0004U /**< DDR50 UHS Mode */
\r
387 #define XSDPS_HC2_1V8_EN_MASK 0x0008U /**< 1.8V Signal Enable */
\r
388 #define XSDPS_HC2_DRV_STR_SEL_MASK 0x0030U /**< Driver Strength
\r
390 #define XSDPS_HC2_DRV_STR_B_MASK 0x0000U /**< Driver Strength B */
\r
391 #define XSDPS_HC2_DRV_STR_A_MASK 0x0010U /**< Driver Strength A */
\r
392 #define XSDPS_HC2_DRV_STR_C_MASK 0x0020U /**< Driver Strength C */
\r
393 #define XSDPS_HC2_DRV_STR_D_MASK 0x0030U /**< Driver Strength D */
\r
394 #define XSDPS_HC2_EXEC_TNG_MASK 0x0040U /**< Execute Tuning */
\r
395 #define XSDPS_HC2_SAMP_CLK_SEL_MASK 0x0080U /**< Sampling Clock
\r
397 #define XSDPS_HC2_ASYNC_INTR_EN_MASK 0x4000U /**< Asynchronous Interrupt
\r
399 #define XSDPS_HC2_PRE_VAL_EN_MASK 0x8000U /**< Preset Value Enable */
\r
403 /** @name Capabilities Register
\r
405 * Capabilities register is a read only register which contains
\r
406 * information about the host controller.
\r
407 * Sufficient if read once after power on.
\r
411 #define XSDPS_CAP_TOUT_CLK_FREQ_MASK 0x0000003FU /**< Timeout clock freq
\r
413 #define XSDPS_CAP_TOUT_CLK_UNIT_MASK 0x00000080U /**< Timeout clock unit -
\r
415 #define XSDPS_CAP_MAX_BLK_LEN_MASK 0x00030000U /**< Max block length */
\r
416 #define XSDPS_CAP_MAX_BLK_LEN_512B_MASK 0x00000000U /**< Max block 512 bytes */
\r
417 #define XSDPS_CAP_MAX_BL_LN_1024_MASK 0x00010000U /**< Max block 1024 bytes */
\r
418 #define XSDPS_CAP_MAX_BL_LN_2048_MASK 0x00020000U /**< Max block 2048 bytes */
\r
419 #define XSDPS_CAP_MAX_BL_LN_4096_MASK 0x00030000U /**< Max block 4096 bytes */
\r
421 #define XSDPS_CAP_EXT_MEDIA_BUS_MASK 0x00040000U /**< Extended media bus */
\r
422 #define XSDPS_CAP_ADMA2_MASK 0x00080000U /**< ADMA2 support */
\r
423 #define XSDPS_CAP_HIGH_SPEED_MASK 0x00200000U /**< High speed support */
\r
424 #define XSDPS_CAP_SDMA_MASK 0x00400000U /**< SDMA support */
\r
425 #define XSDPS_CAP_SUSP_RESUME_MASK 0x00800000U /**< Suspend/Resume
\r
427 #define XSDPS_CAP_VOLT_3V3_MASK 0x01000000U /**< 3.3V support */
\r
428 #define XSDPS_CAP_VOLT_3V0_MASK 0x02000000U /**< 3.0V support */
\r
429 #define XSDPS_CAP_VOLT_1V8_MASK 0x04000000U /**< 1.8V support */
\r
431 #define XSDPS_CAP_SYS_BUS_64_MASK 0x10000000U /**< 64 bit system bus
\r
434 #define XSDPS_CAP_INTR_MODE_MASK 0x08000000U /**< Interrupt mode
\r
436 #define XSDPS_CAP_SPI_MODE_MASK 0x20000000U /**< SPI mode */
\r
437 #define XSDPS_CAP_SPI_BLOCK_MODE_MASK 0x40000000U /**< SPI block mode */
\r
441 #define XSDPS_CAPS_ASYNC_INTR_MASK 0x20000000U /**< Async Interrupt
\r
443 #define XSDPS_CAPS_SLOT_TYPE_MASK 0xC0000000U /**< Slot Type */
\r
444 #define XSDPS_CAPS_REM_CARD 0x00000000U /**< Removable Slot */
\r
445 #define XSDPS_CAPS_EMB_SLOT 0x40000000U /**< Embedded Slot */
\r
446 #define XSDPS_CAPS_SHR_BUS 0x80000000U /**< Shared Bus Slot */
\r
448 #define XSDPS_ECAPS_SDR50_MASK 0x00000001U /**< SDR50 Mode support */
\r
449 #define XSDPS_ECAPS_SDR104_MASK 0x00000002U /**< SDR104 Mode support */
\r
450 #define XSDPS_ECAPS_DDR50_MASK 0x00000004U /**< DDR50 Mode support */
\r
451 #define XSDPS_ECAPS_DRV_TYPE_A_MASK 0x00000010U /**< DriverType A support */
\r
452 #define XSDPS_ECAPS_DRV_TYPE_C_MASK 0x00000020U /**< DriverType C support */
\r
453 #define XSDPS_ECAPS_DRV_TYPE_D_MASK 0x00000040U /**< DriverType D support */
\r
454 #define XSDPS_ECAPS_TMR_CNT_MASK 0x00000F00U /**< Timer Count for
\r
456 #define XSDPS_ECAPS_USE_TNG_SDR50_MASK 0x00002000U /**< SDR50 Mode needs
\r
458 #define XSDPS_ECAPS_RE_TNG_MODES_MASK 0x0000C000U /**< Re-tuning modes
\r
460 #define XSDPS_ECAPS_RE_TNG_MODE1_MASK 0x00000000U /**< Re-tuning mode 1 */
\r
461 #define XSDPS_ECAPS_RE_TNG_MODE2_MASK 0x00004000U /**< Re-tuning mode 2 */
\r
462 #define XSDPS_ECAPS_RE_TNG_MODE3_MASK 0x00008000U /**< Re-tuning mode 3 */
\r
463 #define XSDPS_ECAPS_CLK_MULT_MASK 0x00FF0000U /**< Clock Multiplier value
\r
464 for Programmable clock
\r
466 #define XSDPS_ECAPS_SPI_MODE_MASK 0x01000000U /**< SPI mode */
\r
467 #define XSDPS_ECAPS_SPI_BLK_MODE_MASK 0x02000000U /**< SPI block mode */
\r
471 /** @name Present State Register
\r
473 * Gives the current status of the host controller
\r
478 #define XSDPS_PSR_INHIBIT_CMD_MASK 0x00000001U /**< Command inhibit - CMD */
\r
479 #define XSDPS_PSR_INHIBIT_DAT_MASK 0x00000002U /**< Command Inhibit - DAT */
\r
480 #define XSDPS_PSR_DAT_ACTIVE_MASK 0x00000004U /**< DAT line active */
\r
481 #define XSDPS_PSR_RE_TUNING_REQ_MASK 0x00000008U /**< Re-tuning request */
\r
482 #define XSDPS_PSR_WR_ACTIVE_MASK 0x00000100U /**< Write transfer active */
\r
483 #define XSDPS_PSR_RD_ACTIVE_MASK 0x00000200U /**< Read transfer active */
\r
484 #define XSDPS_PSR_BUFF_WR_EN_MASK 0x00000400U /**< Buffer write enable */
\r
485 #define XSDPS_PSR_BUFF_RD_EN_MASK 0x00000800U /**< Buffer read enable */
\r
486 #define XSDPS_PSR_CARD_INSRT_MASK 0x00010000U /**< Card inserted */
\r
487 #define XSDPS_PSR_CARD_STABLE_MASK 0x00020000U /**< Card state stable */
\r
488 #define XSDPS_PSR_CARD_DPL_MASK 0x00040000U /**< Card detect pin level */
\r
489 #define XSDPS_PSR_WPS_PL_MASK 0x00080000U /**< Write protect switch
\r
491 #define XSDPS_PSR_DAT30_SG_LVL_MASK 0x00F00000U /**< Data 3:0 signal lvl */
\r
492 #define XSDPS_PSR_CMD_SG_LVL_MASK 0x01000000U /**< Cmd Line signal lvl */
\r
493 #define XSDPS_PSR_DAT74_SG_LVL_MASK 0x1E000000U /**< Data 7:4 signal lvl */
\r
497 /** @name Maximum Current Capablities Register
\r
499 * This register is read only register which contains
\r
500 * information about current capabilities at each voltage levels.
\r
504 #define XSDPS_MAX_CUR_CAPS_1V8_MASK 0x00000F00U /**< Maximum Current
\r
505 Capability at 1.8V */
\r
506 #define XSDPS_MAX_CUR_CAPS_3V0_MASK 0x000000F0U /**< Maximum Current
\r
507 Capability at 3.0V */
\r
508 #define XSDPS_MAX_CUR_CAPS_3V3_MASK 0x0000000FU /**< Maximum Current
\r
509 Capability at 3.3V */
\r
513 /** @name Force Event for Auto CMD Error Status Register
\r
515 * This register is write only register which contains
\r
516 * control bits to generate events for Auto CMD error status.
\r
520 #define XSDPS_FE_AUTO_CMD12_NT_EX_MASK 0x0001U /**< Auto CMD12 Not
\r
522 #define XSDPS_FE_AUTO_CMD_TOUT_MASK 0x0002U /**< Auto CMD Timeout
\r
524 #define XSDPS_FE_AUTO_CMD_CRC_MASK 0x0004U /**< Auto CMD CRC Error */
\r
525 #define XSDPS_FE_AUTO_CMD_EB_MASK 0x0008U /**< Auto CMD End Bit
\r
527 #define XSDPS_FE_AUTO_CMD_IND_MASK 0x0010U /**< Auto CMD Index Error */
\r
528 #define XSDPS_FE_AUTO_CMD_CNI_ERR_MASK 0x0080U /**< Command not issued by
\r
529 Auto CMD12 Error */
\r
534 /** @name Force Event for Error Interrupt Status Register
\r
536 * This register is write only register which contains
\r
537 * control bits to generate events of error interrupt status register.
\r
541 #define XSDPS_FE_INTR_ERR_CT_MASK 0x0001U /**< Command Timeout
\r
543 #define XSDPS_FE_INTR_ERR_CCRC_MASK 0x0002U /**< Command CRC Error */
\r
544 #define XSDPS_FE_INTR_ERR_CEB_MASK 0x0004U /**< Command End Bit
\r
546 #define XSDPS_FE_INTR_ERR_CI_MASK 0x0008U /**< Command Index Error */
\r
547 #define XSDPS_FE_INTR_ERR_DT_MASK 0x0010U /**< Data Timeout Error */
\r
548 #define XSDPS_FE_INTR_ERR_DCRC_MASK 0x0020U /**< Data CRC Error */
\r
549 #define XSDPS_FE_INTR_ERR_DEB_MASK 0x0040U /**< Data End Bit Error */
\r
550 #define XSDPS_FE_INTR_ERR_CUR_LMT_MASK 0x0080U /**< Current Limit Error */
\r
551 #define XSDPS_FE_INTR_ERR_AUTO_CMD_MASK 0x0100U /**< Auto CMD Error */
\r
552 #define XSDPS_FE_INTR_ERR_ADMA_MASK 0x0200U /**< ADMA Error */
\r
553 #define XSDPS_FE_INTR_ERR_TR_MASK 0x1000U /**< Target Reponse */
\r
554 #define XSDPS_FE_INTR_VEND_SPF_ERR_MASK 0xE000U /**< Vendor Specific
\r
559 /** @name ADMA Error Status Register
\r
561 * This register is read only register which contains
\r
562 * status information about ADMA errors.
\r
566 #define XSDPS_ADMA_ERR_MM_LEN_MASK 0x04U /**< ADMA Length Mismatch
\r
568 #define XSDPS_ADMA_ERR_STATE_MASK 0x03U /**< ADMA Error State */
\r
569 #define XSDPS_ADMA_ERR_STATE_STOP_MASK 0x00U /**< ADMA Error State
\r
571 #define XSDPS_ADMA_ERR_STATE_FDS_MASK 0x01U /**< ADMA Error State
\r
573 #define XSDPS_ADMA_ERR_STATE_TFR_MASK 0x03U /**< ADMA Error State
\r
577 /** @name Preset Values Register
\r
579 * This register is read only register which contains
\r
580 * preset values for each of speed modes.
\r
584 #define XSDPS_PRE_VAL_SDCLK_FSEL_MASK 0x03FFU /**< SDCLK Frequency
\r
586 #define XSDPS_PRE_VAL_CLK_GEN_SEL_MASK 0x0400U /**< Clock Generator
\r
588 #define XSDPS_PRE_VAL_DRV_STR_SEL_MASK 0xC000U /**< Driver Strength
\r
593 /** @name Slot Interrupt Status Register
\r
595 * This register is read only register which contains
\r
596 * interrupt slot signal for each slot.
\r
600 #define XSDPS_SLOT_INTR_STS_INT_MASK 0x0007U /**< Interrupt Signal
\r
605 /** @name Host Controller Version Register
\r
607 * This register is read only register which contains
\r
608 * Host Controller and Vendor Specific version.
\r
612 #define XSDPS_HC_VENDOR_VER 0xFF00U /**< Vendor
\r
615 #define XSDPS_HC_SPEC_VER_MASK 0x00FFU /**< Host
\r
618 #define XSDPS_HC_SPEC_V3 0x0002U
\r
619 #define XSDPS_HC_SPEC_V2 0x0001U
\r
620 #define XSDPS_HC_SPEC_V1 0x0000U
\r
622 /** @name Block size mask for 512 bytes
\r
624 * Block size mask for 512 bytes - This is the default block size.
\r
628 #define XSDPS_BLK_SIZE_512_MASK 0x200U
\r
634 * Constant definitions for commands and response related to SD
\r
638 #define XSDPS_APP_CMD_PREFIX 0x8000U
\r
639 #define CMD0 0x0000U
\r
640 #define CMD1 0x0100U
\r
641 #define CMD2 0x0200U
\r
642 #define CMD3 0x0300U
\r
643 #define CMD4 0x0400U
\r
644 #define CMD5 0x0500U
\r
645 #define CMD6 0x0600U
\r
646 #define ACMD6 (XSDPS_APP_CMD_PREFIX + 0x0600U)
\r
647 #define CMD7 0x0700U
\r
648 #define CMD8 0x0800U
\r
649 #define CMD9 0x0900U
\r
650 #define CMD10 0x0A00U
\r
651 #define CMD11 0x0B00U
\r
652 #define CMD12 0x0C00U
\r
653 #define CMD13 0x0D00U
\r
654 #define ACMD13 (XSDPS_APP_CMD_PREFIX + 0x0D00U)
\r
655 #define CMD16 0x1000U
\r
656 #define CMD17 0x1100U
\r
657 #define CMD18 0x1200U
\r
658 #define CMD19 0x1300U
\r
659 #define CMD21 0x1500U
\r
660 #define CMD23 0x1700U
\r
661 #define ACMD23 (XSDPS_APP_CMD_PREFIX + 0x1700U)
\r
662 #define CMD24 0x1800U
\r
663 #define CMD25 0x1900U
\r
664 #define CMD41 0x2900U
\r
665 #define ACMD41 (XSDPS_APP_CMD_PREFIX + 0x2900U)
\r
666 #define ACMD42 (XSDPS_APP_CMD_PREFIX + 0x2A00U)
\r
667 #define ACMD51 (XSDPS_APP_CMD_PREFIX + 0x3300U)
\r
668 #define CMD52 0x3400U
\r
669 #define CMD55 0x3700U
\r
670 #define CMD58 0x3A00U
\r
672 #define RESP_NONE (u32)XSDPS_CMD_RESP_NONE_MASK
\r
673 #define RESP_R1 (u32)XSDPS_CMD_RESP_L48_MASK | (u32)XSDPS_CMD_CRC_CHK_EN_MASK | \
\r
674 (u32)XSDPS_CMD_INX_CHK_EN_MASK
\r
676 #define RESP_R1B (u32)XSDPS_CMD_RESP_L48_BSY_CHK_MASK | \
\r
677 (u32)XSDPS_CMD_CRC_CHK_EN_MASK | (u32)XSDPS_CMD_INX_CHK_EN_MASK
\r
679 #define RESP_R2 (u32)XSDPS_CMD_RESP_L136_MASK | (u32)XSDPS_CMD_CRC_CHK_EN_MASK
\r
680 #define RESP_R3 (u32)XSDPS_CMD_RESP_L48_MASK
\r
682 #define RESP_R6 (u32)XSDPS_CMD_RESP_L48_BSY_CHK_MASK | \
\r
683 (u32)XSDPS_CMD_CRC_CHK_EN_MASK | (u32)XSDPS_CMD_INX_CHK_EN_MASK
\r
687 /* Card Interface Conditions Definitions */
\r
688 #define XSDPS_CIC_CHK_PATTERN 0xAAU
\r
689 #define XSDPS_CIC_VOLT_MASK (0xFU<<8)
\r
690 #define XSDPS_CIC_VOLT_2V7_3V6 (1U<<8)
\r
691 #define XSDPS_CIC_VOLT_LOW (1U<<9)
\r
693 /* Operation Conditions Register Definitions */
\r
694 #define XSDPS_OCR_PWRUP_STS (1U<<31)
\r
695 #define XSDPS_OCR_CC_STS (1U<<30)
\r
696 #define XSDPS_OCR_S18 (1U<<24)
\r
697 #define XSDPS_OCR_3V5_3V6 (1U<<23)
\r
698 #define XSDPS_OCR_3V4_3V5 (1U<<22)
\r
699 #define XSDPS_OCR_3V3_3V4 (1U<<21)
\r
700 #define XSDPS_OCR_3V2_3V3 (1U<<20)
\r
701 #define XSDPS_OCR_3V1_3V2 (1U<<19)
\r
702 #define XSDPS_OCR_3V0_3V1 (1U<<18)
\r
703 #define XSDPS_OCR_2V9_3V0 (1U<<17)
\r
704 #define XSDPS_OCR_2V8_2V9 (1U<<16)
\r
705 #define XSDPS_OCR_2V7_2V8 (1U<<15)
\r
706 #define XSDPS_OCR_1V7_1V95 (1U<<7)
\r
707 #define XSDPS_OCR_HIGH_VOL 0x00FF8000U
\r
708 #define XSDPS_OCR_LOW_VOL 0x00000080U
\r
710 /* SD Card Configuration Register Definitions */
\r
711 #define XSDPS_SCR_REG_LEN 8U
\r
712 #define XSDPS_SCR_STRUCT_MASK (0xFU<<28)
\r
713 #define XSDPS_SCR_SPEC_MASK (0xFU<<24)
\r
714 #define XSDPS_SCR_SPEC_1V0 0U
\r
715 #define XSDPS_SCR_SPEC_1V1 (1U<<24)
\r
716 #define XSDPS_SCR_SPEC_2V0_3V0 (2U<<24)
\r
717 #define XSDPS_SCR_MEM_VAL_AF_ERASE (1U<<23)
\r
718 #define XSDPS_SCR_SEC_SUPP_MASK (7U<<20)
\r
719 #define XSDPS_SCR_SEC_SUPP_NONE 0U
\r
720 #define XSDPS_SCR_SEC_SUPP_1V1 (2U<<20)
\r
721 #define XSDPS_SCR_SEC_SUPP_2V0 (3U<<20)
\r
722 #define XSDPS_SCR_SEC_SUPP_3V0 (4U<<20)
\r
723 #define XSDPS_SCR_BUS_WIDTH_MASK (0xFU<<16)
\r
724 #define XSDPS_SCR_BUS_WIDTH_1 (1U<<16)
\r
725 #define XSDPS_SCR_BUS_WIDTH_4 (4U<<16)
\r
726 #define XSDPS_SCR_SPEC3_MASK (1U<<12)
\r
727 #define XSDPS_SCR_SPEC3_2V0 0U
\r
728 #define XSDPS_SCR_SPEC3_3V0 (1U<<12)
\r
729 #define XSDPS_SCR_CMD_SUPP_MASK 0x3U
\r
730 #define XSDPS_SCR_CMD23_SUPP (1U<<1)
\r
731 #define XSDPS_SCR_CMD20_SUPP (1U<<0)
\r
733 /* Card Status Register Definitions */
\r
734 #define XSDPS_CD_STS_OUT_OF_RANGE (1U<<31)
\r
735 #define XSDPS_CD_STS_ADDR_ERR (1U<<30)
\r
736 #define XSDPS_CD_STS_BLK_LEN_ERR (1U<<29)
\r
737 #define XSDPS_CD_STS_ER_SEQ_ERR (1U<<28)
\r
738 #define XSDPS_CD_STS_ER_PRM_ERR (1U<<27)
\r
739 #define XSDPS_CD_STS_WP_VIO (1U<<26)
\r
740 #define XSDPS_CD_STS_IS_LOCKED (1U<<25)
\r
741 #define XSDPS_CD_STS_LOCK_UNLOCK_FAIL (1U<<24)
\r
742 #define XSDPS_CD_STS_CMD_CRC_ERR (1U<<23)
\r
743 #define XSDPS_CD_STS_ILGL_CMD (1U<<22)
\r
744 #define XSDPS_CD_STS_CARD_ECC_FAIL (1U<<21)
\r
745 #define XSDPS_CD_STS_CC_ERR (1U<<20)
\r
746 #define XSDPS_CD_STS_ERR (1U<<19)
\r
747 #define XSDPS_CD_STS_CSD_OVRWR (1U<<16)
\r
748 #define XSDPS_CD_STS_WP_ER_SKIP (1U<<15)
\r
749 #define XSDPS_CD_STS_CARD_ECC_DIS (1U<<14)
\r
750 #define XSDPS_CD_STS_ER_RST (1U<<13)
\r
751 #define XSDPS_CD_STS_CUR_STATE (0xFU<<9)
\r
752 #define XSDPS_CD_STS_RDY_FOR_DATA (1U<<8)
\r
753 #define XSDPS_CD_STS_APP_CMD (1U<<5)
\r
754 #define XSDPS_CD_STS_AKE_SEQ_ERR (1U<<2)
\r
756 /* Switch Function Definitions CMD6 */
\r
757 #define XSDPS_SWITCH_SD_RESP_LEN 64U
\r
759 #define XSDPS_SWITCH_FUNC_SWITCH (1U<<31)
\r
760 #define XSDPS_SWITCH_FUNC_CHECK 0U
\r
762 #define XSDPS_MODE_FUNC_GRP1 1U
\r
763 #define XSDPS_MODE_FUNC_GRP2 2U
\r
764 #define XSDPS_MODE_FUNC_GRP3 3U
\r
765 #define XSDPS_MODE_FUNC_GRP4 4U
\r
766 #define XSDPS_MODE_FUNC_GRP5 5U
\r
767 #define XSDPS_MODE_FUNC_GRP6 6U
\r
769 #define XSDPS_FUNC_GRP_DEF_VAL 0xFU
\r
770 #define XSDPS_FUNC_ALL_GRP_DEF_VAL 0xFFFFFFU
\r
772 #define XSDPS_ACC_MODE_DEF_SDR12 0U
\r
773 #define XSDPS_ACC_MODE_HS_SDR25 1U
\r
774 #define XSDPS_ACC_MODE_SDR50 2U
\r
775 #define XSDPS_ACC_MODE_SDR104 3U
\r
776 #define XSDPS_ACC_MODE_DDR50 4U
\r
778 #define XSDPS_CMD_SYS_ARG_SHIFT 4U
\r
779 #define XSDPS_CMD_SYS_DEF 0U
\r
780 #define XSDPS_CMD_SYS_eC 1U
\r
781 #define XSDPS_CMD_SYS_OTP 3U
\r
782 #define XSDPS_CMD_SYS_ASSD 4U
\r
783 #define XSDPS_CMD_SYS_VEND 5U
\r
785 #define XSDPS_DRV_TYPE_ARG_SHIFT 8U
\r
786 #define XSDPS_DRV_TYPE_B 0U
\r
787 #define XSDPS_DRV_TYPE_A 1U
\r
788 #define XSDPS_DRV_TYPE_C 2U
\r
789 #define XSDPS_DRV_TYPE_D 3U
\r
791 #define XSDPS_CUR_LIM_ARG_SHIFT 12U
\r
792 #define XSDPS_CUR_LIM_200 0U
\r
793 #define XSDPS_CUR_LIM_400 1U
\r
794 #define XSDPS_CUR_LIM_600 2U
\r
795 #define XSDPS_CUR_LIM_800 3U
\r
798 /* EXT_CSD field definitions */
\r
799 #define XSDPS_EXT_CSD_SIZE 512U
\r
801 #define EXT_CSD_WR_REL_PARAM_EN (1U<<2)
\r
803 #define EXT_CSD_BOOT_WP_B_PWR_WP_DIS (0x40U)
\r
804 #define EXT_CSD_BOOT_WP_B_PERM_WP_DIS (0x10U)
\r
805 #define EXT_CSD_BOOT_WP_B_PERM_WP_EN (0x04U)
\r
806 #define EXT_CSD_BOOT_WP_B_PWR_WP_EN (0x01U)
\r
808 #define EXT_CSD_PART_CONFIG_ACC_MASK (0x7U)
\r
809 #define EXT_CSD_PART_CONFIG_ACC_BOOT0 (0x1U)
\r
810 #define EXT_CSD_PART_CONFIG_ACC_RPMB (0x3U)
\r
811 #define EXT_CSD_PART_CONFIG_ACC_GP0 (0x4U)
\r
813 #define EXT_CSD_PART_SUPPORT_PART_EN (0x1U)
\r
815 #define EXT_CSD_CMD_SET_NORMAL (1U<<0)
\r
816 #define EXT_CSD_CMD_SET_SECURE (1U<<1)
\r
817 #define EXT_CSD_CMD_SET_CPSECURE (1U<<2)
\r
819 #define EXT_CSD_CARD_TYPE_26 (1U<<0) /* Card can run at 26MHz */
\r
820 #define EXT_CSD_CARD_TYPE_52 (1U<<1) /* Card can run at 52MHz */
\r
821 #define EXT_CSD_CARD_TYPE_MASK 0x3FU /* Mask out reserved bits */
\r
822 #define EXT_CSD_CARD_TYPE_DDR_1_8V (1U<<2) /* Card can run at 52MHz */
\r
823 /* DDR mode @1.8V or 3V I/O */
\r
824 #define EXT_CSD_CARD_TYPE_DDR_1_2V (1U<<3) /* Card can run at 52MHz */
\r
825 /* DDR mode @1.2V I/O */
\r
826 #define EXT_CSD_CARD_TYPE_DDR_52 (EXT_CSD_CARD_TYPE_DDR_1_8V \
\r
827 | EXT_CSD_CARD_TYPE_DDR_1_2V)
\r
828 #define EXT_CSD_CARD_TYPE_SDR_1_8V (1U<<4) /* Card can run at 200MHz */
\r
829 #define EXT_CSD_CARD_TYPE_SDR_1_2V (1U<<5) /* Card can run at 200MHz */
\r
830 /* SDR mode @1.2V I/O */
\r
831 #define EXT_CSD_BUS_WIDTH_BYTE 183U
\r
832 #define EXT_CSD_BUS_WIDTH_1_BIT 0U /* Card is in 1 bit mode */
\r
833 #define EXT_CSD_BUS_WIDTH_4_BIT 1U /* Card is in 4 bit mode */
\r
834 #define EXT_CSD_BUS_WIDTH_8_BIT 2U /* Card is in 8 bit mode */
\r
835 #define EXT_CSD_BUS_WIDTH_DDR_4_BIT 5U /* Card is in 4 bit DDR mode */
\r
836 #define EXT_CSD_BUS_WIDTH_DDR_8_BIT 6U /* Card is in 8 bit DDR mode */
\r
838 #define EXT_CSD_HS_TIMING_BYTE 185U
\r
839 #define EXT_CSD_HS_TIMING_DEF 0U
\r
840 #define EXT_CSD_HS_TIMING_HIGH 1U /* Card is in high speed mode */
\r
841 #define EXT_CSD_HS_TIMING_HS200 2U /* Card is in HS200 mode */
\r
844 #define XSDPS_EXT_CSD_CMD_SET 0U
\r
845 #define XSDPS_EXT_CSD_SET_BITS 1U
\r
846 #define XSDPS_EXT_CSD_CLR_BITS 2U
\r
847 #define XSDPS_EXT_CSD_WRITE_BYTE 3U
\r
849 #define XSDPS_MMC_DEF_SPEED_ARG (((u32)XSDPS_EXT_CSD_WRITE_BYTE << 24) \
\r
850 | ((u32)EXT_CSD_HS_TIMING_BYTE << 16) \
\r
851 | ((u32)EXT_CSD_HS_TIMING_DEF << 8))
\r
853 #define XSDPS_MMC_HIGH_SPEED_ARG (((u32)XSDPS_EXT_CSD_WRITE_BYTE << 24) \
\r
854 | ((u32)EXT_CSD_HS_TIMING_BYTE << 16) \
\r
855 | ((u32)EXT_CSD_HS_TIMING_HIGH << 8))
\r
857 #define XSDPS_MMC_HS200_ARG (((u32)XSDPS_EXT_CSD_WRITE_BYTE << 24) \
\r
858 | ((u32)EXT_CSD_HS_TIMING_BYTE << 16) \
\r
859 | ((u32)EXT_CSD_HS_TIMING_HS200 << 8))
\r
861 #define XSDPS_MMC_1_BIT_BUS_ARG (((u32)XSDPS_EXT_CSD_WRITE_BYTE << 24) \
\r
862 | ((u32)EXT_CSD_BUS_WIDTH_BYTE << 16) \
\r
863 | ((u32)EXT_CSD_BUS_WITH_1_BIT << 8))
\r
865 #define XSDPS_MMC_4_BIT_BUS_ARG (((u32)XSDPS_EXT_CSD_WRITE_BYTE << 24) \
\r
866 | ((u32)EXT_CSD_BUS_WIDTH_BYTE << 16) \
\r
867 | ((u32)EXT_CSD_BUS_WIDTH_4_BIT << 8))
\r
869 #define XSDPS_MMC_8_BIT_BUS_ARG (((u32)XSDPS_EXT_CSD_WRITE_BYTE << 24) \
\r
870 | ((u32)EXT_CSD_BUS_WIDTH_BYTE << 16) \
\r
871 | ((u32)EXT_CSD_BUS_WIDTH_8_BIT << 8))
\r
873 #define XSDPS_MMC_DDR_4_BIT_BUS_ARG (((u32)XSDPS_EXT_CSD_WRITE_BYTE << 24) \
\r
874 | ((u32)EXT_CSD_BUS_WIDTH_BYTE << 16) \
\r
875 | ((u32)EXT_CSD_BUS_WIDTH_DDR_4_BIT << 8))
\r
877 #define XSDPS_MMC_DDR_8_BIT_BUS_ARG (((u32)XSDPS_EXT_CSD_WRITE_BYTE << 24) \
\r
878 | ((u32)EXT_CSD_BUS_WIDTH_BYTE << 16) \
\r
879 | ((u32)EXT_CSD_BUS_WIDTH_DDR_8_BIT << 8))
\r
881 #define XSDPS_MMC_DELAY_FOR_SWITCH 1000U
\r
885 /* @400KHz, in usec */
\r
886 #define XSDPS_74CLK_DELAY 2960U
\r
887 #define XSDPS_100CLK_DELAY 4000U
\r
888 #define XSDPS_INIT_DELAY 10000U
\r
890 #define XSDPS_DEF_VOLT_LVL XSDPS_PC_BUS_VSEL_3V0_MASK
\r
891 #define XSDPS_CARD_DEF_ADDR 0x1234U
\r
893 #define XSDPS_CARD_SD 1U
\r
894 #define XSDPS_CARD_MMC 2U
\r
895 #define XSDPS_CARD_SDIO 3U
\r
896 #define XSDPS_CARD_SDCOMBO 4U
\r
897 #define XSDPS_CHIP_EMMC 5U
\r
900 /** @name ADMA2 Descriptor related definitions
\r
902 * ADMA2 Descriptor related definitions
\r
906 #define XSDPS_DESC_MAX_LENGTH 65536U
\r
908 #define XSDPS_DESC_VALID (0x1U << 0)
\r
909 #define XSDPS_DESC_END (0x1U << 1)
\r
910 #define XSDPS_DESC_INT (0x1U << 2)
\r
911 #define XSDPS_DESC_TRAN (0x2U << 4)
\r
915 /* For changing clock frequencies */
\r
916 #define XSDPS_CLK_400_KHZ 400000U /**< 400 KHZ */
\r
917 #define XSDPS_CLK_50_MHZ 50000000U /**< 50 MHZ */
\r
918 #define XSDPS_CLK_52_MHZ 52000000U /**< 52 MHZ */
\r
919 #define XSDPS_SD_VER_1_0 0x1U /**< SD ver 1 */
\r
920 #define XSDPS_SD_VER_2_0 0x2U /**< SD ver 2 */
\r
921 #define XSDPS_SCR_BLKCNT 1U
\r
922 #define XSDPS_SCR_BLKSIZE 8U
\r
923 #define XSDPS_1_BIT_WIDTH 0x1U
\r
924 #define XSDPS_4_BIT_WIDTH 0x2U
\r
925 #define XSDPS_8_BIT_WIDTH 0x3U
\r
926 #define XSDPS_UHS_SPEED_MODE_SDR12 0x0U
\r
927 #define XSDPS_UHS_SPEED_MODE_SDR25 0x1U
\r
928 #define XSDPS_UHS_SPEED_MODE_SDR50 0x2U
\r
929 #define XSDPS_UHS_SPEED_MODE_SDR104 0x3U
\r
930 #define XSDPS_UHS_SPEED_MODE_DDR50 0x4U
\r
931 #define XSDPS_SWITCH_CMD_BLKCNT 1U
\r
932 #define XSDPS_SWITCH_CMD_BLKSIZE 64U
\r
933 #define XSDPS_SWITCH_CMD_HS_GET 0x00FFFFF0U
\r
934 #define XSDPS_SWITCH_CMD_HS_SET 0x80FFFFF1U
\r
935 #define XSDPS_SWITCH_CMD_SDR12_SET 0x80FFFFF0U
\r
936 #define XSDPS_SWITCH_CMD_SDR25_SET 0x80FFFFF1U
\r
937 #define XSDPS_SWITCH_CMD_SDR50_SET 0x80FFFFF2U
\r
938 #define XSDPS_SWITCH_CMD_SDR104_SET 0x80FFFFF3U
\r
939 #define XSDPS_SWITCH_CMD_DDR50_SET 0x80FFFFF4U
\r
940 #define XSDPS_EXT_CSD_CMD_BLKCNT 1U
\r
941 #define XSDPS_EXT_CSD_CMD_BLKSIZE 512U
\r
942 #define XSDPS_TUNING_CMD_BLKCNT 1U
\r
943 #define XSDPS_TUNING_CMD_BLKSIZE 64U
\r
945 #define XSDPS_HIGH_SPEED_MAX_CLK 50000000U
\r
946 #define XSDPS_UHS_SDR104_MAX_CLK 208000000U
\r
947 #define XSDPS_UHS_SDR50_MAX_CLK 100000000U
\r
948 #define XSDPS_UHS_DDR50_MAX_CLK 50000000U
\r
949 #define XSDPS_UHS_SDR25_MAX_CLK 50000000U
\r
950 #define XSDPS_UHS_SDR12_MAX_CLK 25000000U
\r
952 #define SD_DRIVER_TYPE_B 0x01U
\r
953 #define SD_DRIVER_TYPE_A 0x02U
\r
954 #define SD_DRIVER_TYPE_C 0x04U
\r
955 #define SD_DRIVER_TYPE_D 0x08U
\r
956 #define SD_SET_CURRENT_LIMIT_200 0U
\r
957 #define SD_SET_CURRENT_LIMIT_400 1U
\r
958 #define SD_SET_CURRENT_LIMIT_600 2U
\r
959 #define SD_SET_CURRENT_LIMIT_800 3U
\r
961 #define SD_MAX_CURRENT_200 (1U << SD_SET_CURRENT_LIMIT_200)
\r
962 #define SD_MAX_CURRENT_400 (1U << SD_SET_CURRENT_LIMIT_400)
\r
963 #define SD_MAX_CURRENT_600 (1U << SD_SET_CURRENT_LIMIT_600)
\r
964 #define SD_MAX_CURRENT_800 (1U << SD_SET_CURRENT_LIMIT_800)
\r
966 #define XSDPS_SD_SDR12_MAX_CLK 25000000U
\r
967 #define XSDPS_SD_SDR25_MAX_CLK 50000000U
\r
968 #define XSDPS_SD_SDR50_MAX_CLK 100000000U
\r
969 #define XSDPS_SD_DDR50_MAX_CLK 50000000U
\r
970 #define XSDPS_SD_SDR104_MAX_CLK 208000000U
\r
971 #define XSDPS_MMC_HS200_MAX_CLK 200000000U
\r
973 #define XSDPS_CARD_STATE_IDLE 0U
\r
974 #define XSDPS_CARD_STATE_RDY 1U
\r
975 #define XSDPS_CARD_STATE_IDEN 2U
\r
976 #define XSDPS_CARD_STATE_STBY 3U
\r
977 #define XSDPS_CARD_STATE_TRAN 4U
\r
978 #define XSDPS_CARD_STATE_DATA 5U
\r
979 #define XSDPS_CARD_STATE_RCV 6U
\r
980 #define XSDPS_CARD_STATE_PROG 7U
\r
981 #define XSDPS_CARD_STATE_DIS 8U
\r
982 #define XSDPS_CARD_STATE_BTST 9U
\r
983 #define XSDPS_CARD_STATE_SLP 10U
\r
985 #define XSDPS_SLOT_REM 0U
\r
986 #define XSDPS_SLOT_EMB 1U
\r
988 /**************************** Type Definitions *******************************/
\r
990 /***************** Macros (Inline Functions) Definitions *********************/
\r
991 #define XSdPs_In64 Xil_In64
\r
992 #define XSdPs_Out64 Xil_Out64
\r
994 #define XSdPs_In32 Xil_In32
\r
995 #define XSdPs_Out32 Xil_Out32
\r
997 #define XSdPs_In16 Xil_In16
\r
998 #define XSdPs_Out16 Xil_Out16
\r
1000 #define XSdPs_In8 Xil_In8
\r
1001 #define XSdPs_Out8 Xil_Out8
\r
1003 /****************************************************************************/
\r
1005 * Read a register.
\r
1007 * @param BaseAddress contains the base address of the device.
\r
1008 * @param RegOffset contains the offset from the 1st register of the
\r
1009 * device to the target register.
\r
1011 * @return The value read from the register.
\r
1013 * @note C-Style signature:
\r
1014 * u32 XSdPs_ReadReg(XSdPs *InstancePtr. s32 RegOffset)
\r
1016 ******************************************************************************/
\r
1017 #define XSdPs_ReadReg64(InstancePtr, RegOffset) \
\r
1018 XSdPs_In64((InstancePtr->Config.BaseAddress) + RegOffset)
\r
1020 /***************************************************************************/
\r
1022 * Write to a register.
\r
1024 * @param BaseAddress contains the base address of the device.
\r
1025 * @param RegOffset contains the offset from the 1st register of the
\r
1026 * device to target register.
\r
1027 * @param RegisterValue is the value to be written to the register.
\r
1031 * @note C-Style signature:
\r
1032 * void XSdPs_WriteReg(XSdPs *InstancePtr, s32 RegOffset,
\r
1033 * u64 RegisterValue)
\r
1035 ******************************************************************************/
\r
1036 #define XSdPs_WriteReg64(InstancePtr, RegOffset, RegisterValue) \
\r
1037 XSdPs_Out64((InstancePtr->Config.BaseAddress) + (RegOffset), \
\r
1040 /****************************************************************************/
\r
1042 * Read a register.
\r
1044 * @param BaseAddress contains the base address of the device.
\r
1045 * @param RegOffset contains the offset from the 1st register of the
\r
1046 * device to the target register.
\r
1048 * @return The value read from the register.
\r
1050 * @note C-Style signature:
\r
1051 * u32 XSdPs_ReadReg(u32 BaseAddress. int RegOffset)
\r
1053 ******************************************************************************/
\r
1054 #define XSdPs_ReadReg(BaseAddress, RegOffset) \
\r
1055 XSdPs_In32((BaseAddress) + (RegOffset))
\r
1057 /***************************************************************************/
\r
1059 * Write to a register.
\r
1061 * @param BaseAddress contains the base address of the device.
\r
1062 * @param RegOffset contains the offset from the 1st register of the
\r
1063 * device to target register.
\r
1064 * @param RegisterValue is the value to be written to the register.
\r
1068 * @note C-Style signature:
\r
1069 * void XSdPs_WriteReg(u32 BaseAddress, int RegOffset,
\r
1070 * u32 RegisterValue)
\r
1072 ******************************************************************************/
\r
1073 #define XSdPs_WriteReg(BaseAddress, RegOffset, RegisterValue) \
\r
1074 XSdPs_Out32((BaseAddress) + (RegOffset), (RegisterValue))
\r
1076 /****************************************************************************/
\r
1078 * Read a register.
\r
1080 * @param BaseAddress contains the base address of the device.
\r
1081 * @param RegOffset contains the offset from the 1st register of the
\r
1082 * device to the target register.
\r
1084 * @return The value read from the register.
\r
1086 * @note C-Style signature:
\r
1087 * u16 XSdPs_ReadReg(u32 BaseAddress. int RegOffset)
\r
1089 ******************************************************************************/
\r
1090 #define XSdPs_ReadReg16(BaseAddress, RegOffset) \
\r
1091 XSdPs_In16((BaseAddress) + (RegOffset))
\r
1093 /***************************************************************************/
\r
1095 * Write to a register.
\r
1097 * @param BaseAddress contains the base address of the device.
\r
1098 * @param RegOffset contains the offset from the 1st register of the
\r
1099 * device to target register.
\r
1100 * @param RegisterValue is the value to be written to the register.
\r
1104 * @note C-Style signature:
\r
1105 * void XSdPs_WriteReg(u32 BaseAddress, int RegOffset,
\r
1106 * u16 RegisterValue)
\r
1108 ******************************************************************************/
\r
1109 #define XSdPs_WriteReg16(BaseAddress, RegOffset, RegisterValue) \
\r
1110 XSdPs_Out16((BaseAddress) + (RegOffset), (RegisterValue))
\r
1112 /****************************************************************************/
\r
1114 * Read a register.
\r
1116 * @param BaseAddress contains the base address of the device.
\r
1117 * @param RegOffset contains the offset from the 1st register of the
\r
1118 * device to the target register.
\r
1120 * @return The value read from the register.
\r
1122 * @note C-Style signature:
\r
1123 * u8 XSdPs_ReadReg(u32 BaseAddress. int RegOffset)
\r
1125 ******************************************************************************/
\r
1126 #define XSdPs_ReadReg8(BaseAddress, RegOffset) \
\r
1127 XSdPs_In8((BaseAddress) + (RegOffset))
\r
1129 /***************************************************************************/
\r
1131 * Write to a register.
\r
1133 * @param BaseAddress contains the base address of the device.
\r
1134 * @param RegOffset contains the offset from the 1st register of the
\r
1135 * device to target register.
\r
1136 * @param RegisterValue is the value to be written to the register.
\r
1140 * @note C-Style signature:
\r
1141 * void XSdPs_WriteReg(u32 BaseAddress, int RegOffset,
\r
1142 * u8 RegisterValue)
\r
1144 ******************************************************************************/
\r
1145 #define XSdPs_WriteReg8(BaseAddress, RegOffset, RegisterValue) \
\r
1146 XSdPs_Out8((BaseAddress) + (RegOffset), (RegisterValue))
\r
1148 /***************************************************************************/
\r
1150 * Macro to get present status register
\r
1152 * @param BaseAddress contains the base address of the device.
\r
1156 * @note C-Style signature:
\r
1157 * void XSdPs_WriteReg(u32 BaseAddress, int RegOffset,
\r
1158 * u8 RegisterValue)
\r
1160 ******************************************************************************/
\r
1161 #define XSdPs_GetPresentStatusReg(BaseAddress) \
\r
1162 XSdPs_In32((BaseAddress) + (XSDPS_PRES_STATE_OFFSET))
\r
1164 /************************** Function Prototypes ******************************/
\r
1166 /************************** Variable Definitions *****************************/
\r
1168 #ifdef __cplusplus
\r
1172 #endif /* SD_HW_H_ */
\r