]> git.sur5r.net Git - freertos/blob - FreeRTOS-Labs/Source/FreeRTOS-Plus-FAT/portable/Zynq/xsdps_hw.h
Add the Labs projects provided in the V10.2.1_191129 zip file.
[freertos] / FreeRTOS-Labs / Source / FreeRTOS-Plus-FAT / portable / Zynq / xsdps_hw.h
1 /******************************************************************************\r
2 *\r
3 * Copyright (C) 2013 - 2015 Xilinx, Inc.  All rights reserved.\r
4 *\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
11 *\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
14 *\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
18 *\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
25 * SOFTWARE.\r
26 *\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
30 *\r
31 ******************************************************************************/\r
32 /*****************************************************************************/\r
33 /**\r
34 *\r
35 * @file xsdps_hw.h\r
36 * @addtogroup sdps_v2_5\r
37 * @{\r
38 *\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
42 *\r
43 * <pre>\r
44 * MODIFICATION HISTORY:\r
45 *\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
51 * </pre>\r
52 *\r
53 ******************************************************************************/\r
54 \r
55 #ifndef SD_HW_H_\r
56 #define SD_HW_H_\r
57 \r
58 #ifdef __cplusplus\r
59 extern "C" {\r
60 #endif\r
61 \r
62 /***************************** Include Files *********************************/\r
63 \r
64 #include "xil_types.h"\r
65 #include "xil_assert.h"\r
66 #include "xil_io.h"\r
67 #include "xparameters.h"\r
68 \r
69 /************************** Constant Definitions *****************************/\r
70 \r
71 /** @name Register Map\r
72  *\r
73  * Register offsets from the base address of an SD device.\r
74  * @{\r
75  */\r
76 \r
77 #define XSDPS_SDMA_SYS_ADDR_OFFSET      0x00U   /**< SDMA System Address\r
78                                                         Register */\r
79 #define XSDPS_SDMA_SYS_ADDR_LO_OFFSET   XSDPS_SDMA_SYS_ADDR_OFFSET\r
80                                                 /**< SDMA System Address\r
81                                                         Low Register */\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
84                                                         High Register */\r
85 #define XSDPS_ARGMT2_HI_OFFSET          0x02U   /**< Argument2 High Register */\r
86 \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
93 \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
110                                                         Status Register */\r
111 #define XSDPS_ERR_INTR_STS_OFFSET       0x32U   /**< Error Interrupt\r
112                                                         Status Register */\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
121 \r
122 #define XSDPS_AUTO_CMD12_ERR_STS_OFFSET 0x3CU   /**< Auto CMD12 Error Status\r
123                                                         Register */\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
134                                                         Status Register */\r
135 #define XSDPS_ADMA_ERR_STS_OFFSET       0x54U   /**< ADMA Error Status\r
136                                                         Register */\r
137 #define XSDPS_ADMA_SAR_OFFSET           0x58U   /**< ADMA System Address\r
138                                                         Register */\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
146                                                         register */\r
147 \r
148 #define XSDPS_SHARED_BUS_CTRL_OFFSET    0xE0U   /**< Shared Bus Control\r
149                                                         Register */\r
150 #define XSDPS_SLOT_INTR_STS_OFFSET      0xFCU   /**< Slot Interrupt Status\r
151                                                         Register */\r
152 #define XSDPS_HOST_CTRL_VER_OFFSET      0xFEU   /**< Host Controller Version\r
153                                                         Register */\r
154 \r
155 /* @} */\r
156 \r
157 /** @name Control Register - Host control, Power control,\r
158  *                      Block Gap control and Wakeup control\r
159  *\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
162  * @{\r
163  */\r
164 \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
177 \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
184 \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
193 \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
197 \r
198 /* @} */\r
199 \r
200 /** @name Control Register - Clock control, Timeout control & Software reset\r
201  *\r
202  * This register contains bits for configuration options of clock, timeout and\r
203  * software reset.\r
204  * Read/Write except for Inter_Clock_Stable bit (read only) and reserved bits.\r
205  * @{\r
206  */\r
207 \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
226 \r
227 #define XSDPS_TC_CNTR_VAL_MASK                  0x0000000FU\r
228 \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
232 \r
233 #define XSDPS_CC_MAX_NUM_OF_DIV         9U\r
234 #define XSDPS_CC_DIV_SHIFT              8U\r
235 \r
236 /* @} */\r
237 \r
238 /** @name SD Interrupt Registers\r
239  *\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
247  *\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
251  *\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
256  *\r
257  * All three registers have same bit definitions\r
258  * @{\r
259  */\r
260 \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
275                                                         Interrupt */\r
276 #define XSDPS_INTR_BOOT_TERM_MASK       0x00004000U /**< Boot Terminate\r
277                                                         Interrupt */\r
278 #define XSDPS_INTR_ERR_MASK             0x00008000U /**< Error Interrupt */\r
279 #define XSDPS_NORM_INTR_ALL_MASK        0x0000FFFFU\r
280 \r
281 #define XSDPS_INTR_ERR_CT_MASK          0x00000001U /**< Command Timeout\r
282                                                         Error */\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
285                                                         Error */\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
295                                                         Error */\r
296 #define XSDPS_ERROR_INTR_ALL_MASK       0x0000F3FFU /**< Mask for error bits */\r
297 /* @} */\r
298 \r
299 /** @name Block Size and Block Count Register\r
300  *\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
304  * @{\r
305  */\r
306 \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
313 \r
314 /* @} */\r
315 \r
316 /** @name Transfer Mode and Command Register\r
317  *\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
321  * @{\r
322  */\r
323 \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
330                                                         Block Select */\r
331 \r
332 #define XSDPS_CMD_RESP_SEL_MASK         0x00000003U /**< Response Type\r
333                                                         Select */\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
338                                                         check busy after\r
339                                                         response */\r
340 #define XSDPS_CMD_CRC_CHK_EN_MASK       0x00000008U /**< Command CRC Check\r
341                                                         Enable */\r
342 #define XSDPS_CMD_INX_CHK_EN_MASK       0x00000010U /**< Command Index Check\r
343                                                         Enable */\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
351                                                         Set to CMD0-63,\r
352                                                         AMCD0-63 */\r
353 \r
354 /* @} */\r
355 \r
356 /** @name Auto CMD Error Status Register\r
357  *\r
358  * This register is read only register which contains\r
359  * information about the error status of Auto CMD 12 and 23.\r
360  * Read Only\r
361  * @{\r
362  */\r
363 #define XSDPS_AUTO_CMD12_NT_EX_MASK     0x0001U /**< Auto CMD12 Not\r
364                                                         executed */\r
365 #define XSDPS_AUTO_CMD_TOUT_MASK        0x0002U /**< Auto CMD Timeout\r
366                                                         Error */\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
369                                                         Error */\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
373 /* @} */\r
374 \r
375 /** @name Host Control2 Register\r
376  *\r
377  * This register contains extended configuration bits.\r
378  * Read Write\r
379  * @{\r
380  */\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
389                                                         Selection */\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
396                                                         Selection */\r
397 #define XSDPS_HC2_ASYNC_INTR_EN_MASK    0x4000U /**< Asynchronous Interrupt\r
398                                                         Enable */\r
399 #define XSDPS_HC2_PRE_VAL_EN_MASK       0x8000U /**< Preset Value Enable */\r
400 \r
401 /* @} */\r
402 \r
403 /** @name Capabilities Register\r
404  *\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
408  * Read Only\r
409  * @{\r
410  */\r
411 #define XSDPS_CAP_TOUT_CLK_FREQ_MASK    0x0000003FU /**< Timeout clock freq\r
412                                                         select */\r
413 #define XSDPS_CAP_TOUT_CLK_UNIT_MASK    0x00000080U /**< Timeout clock unit -\r
414                                                         MHz/KHz */\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
420 \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
426                                                         support */\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
430 \r
431 #define XSDPS_CAP_SYS_BUS_64_MASK       0x10000000U /**< 64 bit system bus\r
432                                                         support */\r
433 /* Spec 2.0 */\r
434 #define XSDPS_CAP_INTR_MODE_MASK        0x08000000U /**< Interrupt mode\r
435                                                         support */\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
438 \r
439 \r
440 /* Spec 3.0 */\r
441 #define XSDPS_CAPS_ASYNC_INTR_MASK      0x20000000U /**< Async Interrupt\r
442                                                         support */\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
447 \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
455                                                         Re-tuning */\r
456 #define XSDPS_ECAPS_USE_TNG_SDR50_MASK  0x00002000U /**< SDR50 Mode needs\r
457                                                         tuning */\r
458 #define XSDPS_ECAPS_RE_TNG_MODES_MASK   0x0000C000U /**< Re-tuning modes\r
459                                                         support */\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
465                                                         mode */\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
468 \r
469 /* @} */\r
470 \r
471 /** @name Present State Register\r
472  *\r
473  * Gives the current status of the host controller\r
474  * Read Only\r
475  * @{\r
476  */\r
477 \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
490                                                                 pin level */\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
494 \r
495 /* @} */\r
496 \r
497 /** @name Maximum Current Capablities Register\r
498  *\r
499  * This register is read only register which contains\r
500  * information about current capabilities at each voltage levels.\r
501  * Read Only\r
502  * @{\r
503  */\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
510 /* @} */\r
511 \r
512 \r
513 /** @name Force Event for Auto CMD Error Status Register\r
514  *\r
515  * This register is write only register which contains\r
516  * control bits to generate events for Auto CMD error status.\r
517  * Write Only\r
518  * @{\r
519  */\r
520 #define XSDPS_FE_AUTO_CMD12_NT_EX_MASK  0x0001U /**< Auto CMD12 Not\r
521                                                         executed */\r
522 #define XSDPS_FE_AUTO_CMD_TOUT_MASK     0x0002U /**< Auto CMD Timeout\r
523                                                         Error */\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
526                                                         Error */\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
530 /* @} */\r
531 \r
532 \r
533 \r
534 /** @name Force Event for Error Interrupt Status Register\r
535  *\r
536  * This register is write only register which contains\r
537  * control bits to generate events of error interrupt status register.\r
538  * Write Only\r
539  * @{\r
540  */\r
541 #define XSDPS_FE_INTR_ERR_CT_MASK       0x0001U /**< Command Timeout\r
542                                                         Error */\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
545                                                         Error */\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
555                                                         Error */\r
556 \r
557 /* @} */\r
558 \r
559 /** @name ADMA Error Status Register\r
560  *\r
561  * This register is read only register which contains\r
562  * status information about ADMA errors.\r
563  * Read Only\r
564  * @{\r
565  */\r
566 #define XSDPS_ADMA_ERR_MM_LEN_MASK      0x04U /**< ADMA Length Mismatch\r
567                                                         Error */\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
570                                                         STOP */\r
571 #define XSDPS_ADMA_ERR_STATE_FDS_MASK   0x01U /**< ADMA Error State\r
572                                                         FDS */\r
573 #define XSDPS_ADMA_ERR_STATE_TFR_MASK   0x03U /**< ADMA Error State\r
574                                                         TFR */\r
575 /* @} */\r
576 \r
577 /** @name Preset Values Register\r
578  *\r
579  * This register is read only register which contains\r
580  * preset values for each of speed modes.\r
581  * Read Only\r
582  * @{\r
583  */\r
584 #define XSDPS_PRE_VAL_SDCLK_FSEL_MASK   0x03FFU /**< SDCLK Frequency\r
585                                                         Select Value */\r
586 #define XSDPS_PRE_VAL_CLK_GEN_SEL_MASK  0x0400U /**< Clock Generator\r
587                                                         Mode Select */\r
588 #define XSDPS_PRE_VAL_DRV_STR_SEL_MASK  0xC000U /**< Driver Strength\r
589                                                         Select Value */\r
590 \r
591 /* @} */\r
592 \r
593 /** @name Slot Interrupt Status Register\r
594  *\r
595  * This register is read only register which contains\r
596  * interrupt slot signal for each slot.\r
597  * Read Only\r
598  * @{\r
599  */\r
600 #define XSDPS_SLOT_INTR_STS_INT_MASK    0x0007U /**< Interrupt Signal\r
601                                                         mask */\r
602 \r
603 /* @} */\r
604 \r
605 /** @name Host Controller Version Register\r
606  *\r
607  * This register is read only register which contains\r
608  * Host Controller and Vendor Specific version.\r
609  * Read Only\r
610  * @{\r
611  */\r
612 #define XSDPS_HC_VENDOR_VER             0xFF00U /**< Vendor\r
613                                                         Specification\r
614                                                         version mask */\r
615 #define XSDPS_HC_SPEC_VER_MASK          0x00FFU /**< Host\r
616                                                         Specification\r
617                                                         version mask */\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
621 \r
622 /** @name Block size mask for 512 bytes\r
623  *\r
624  * Block size mask for 512 bytes - This is the default block size.\r
625  * @{\r
626  */\r
627 \r
628 #define XSDPS_BLK_SIZE_512_MASK 0x200U\r
629 \r
630 /* @} */\r
631 \r
632 /** @name Commands\r
633  *\r
634  * Constant definitions for commands and response related to SD\r
635  * @{\r
636  */\r
637 \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
671 \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
675 \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
678 \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
681 \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
684 \r
685 /* @} */\r
686 \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
692 \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
709 \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
732 \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
755 \r
756 /* Switch Function Definitions CMD6 */\r
757 #define XSDPS_SWITCH_SD_RESP_LEN        64U\r
758 \r
759 #define XSDPS_SWITCH_FUNC_SWITCH        (1U<<31)\r
760 #define XSDPS_SWITCH_FUNC_CHECK         0U\r
761 \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
768 \r
769 #define XSDPS_FUNC_GRP_DEF_VAL          0xFU\r
770 #define XSDPS_FUNC_ALL_GRP_DEF_VAL      0xFFFFFFU\r
771 \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
777 \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
784 \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
790 \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
796 \r
797 \r
798 /* EXT_CSD field definitions */\r
799 #define XSDPS_EXT_CSD_SIZE              512U\r
800 \r
801 #define EXT_CSD_WR_REL_PARAM_EN         (1U<<2)\r
802 \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
807 \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
812 \r
813 #define EXT_CSD_PART_SUPPORT_PART_EN    (0x1U)\r
814 \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
818 \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
837 \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
842 \r
843 \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
848 \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
852 \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
856 \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
860 \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
864 \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
868 \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
872 \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
876 \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
880 \r
881 #define XSDPS_MMC_DELAY_FOR_SWITCH      1000U\r
882 \r
883 /* @} */\r
884 \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
889 \r
890 #define XSDPS_DEF_VOLT_LVL      XSDPS_PC_BUS_VSEL_3V0_MASK\r
891 #define XSDPS_CARD_DEF_ADDR     0x1234U\r
892 \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
898 \r
899 \r
900 /** @name ADMA2 Descriptor related definitions\r
901  *\r
902  * ADMA2 Descriptor related definitions\r
903  * @{\r
904  */\r
905 \r
906 #define XSDPS_DESC_MAX_LENGTH 65536U\r
907 \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
912 \r
913 /* @} */\r
914 \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
944 \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
951 \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
960 \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
965 \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
972 \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
984 \r
985 #define XSDPS_SLOT_REM                  0U\r
986 #define XSDPS_SLOT_EMB                  1U\r
987 \r
988 /**************************** Type Definitions *******************************/\r
989 \r
990 /***************** Macros (Inline Functions) Definitions *********************/\r
991 #define XSdPs_In64 Xil_In64\r
992 #define XSdPs_Out64 Xil_Out64\r
993 \r
994 #define XSdPs_In32 Xil_In32\r
995 #define XSdPs_Out32 Xil_Out32\r
996 \r
997 #define XSdPs_In16 Xil_In16\r
998 #define XSdPs_Out16 Xil_Out16\r
999 \r
1000 #define XSdPs_In8 Xil_In8\r
1001 #define XSdPs_Out8 Xil_Out8\r
1002 \r
1003 /****************************************************************************/\r
1004 /**\r
1005 * Read a register.\r
1006 *\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
1010 *\r
1011 * @return       The value read from the register.\r
1012 *\r
1013 * @note         C-Style signature:\r
1014 *               u32 XSdPs_ReadReg(XSdPs *InstancePtr. s32 RegOffset)\r
1015 *\r
1016 ******************************************************************************/\r
1017 #define XSdPs_ReadReg64(InstancePtr, RegOffset) \\r
1018         XSdPs_In64((InstancePtr->Config.BaseAddress) + RegOffset)\r
1019 \r
1020 /***************************************************************************/\r
1021 /**\r
1022 * Write to a register.\r
1023 *\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
1028 *\r
1029 * @return       None.\r
1030 *\r
1031 * @note         C-Style signature:\r
1032 *               void XSdPs_WriteReg(XSdPs *InstancePtr, s32 RegOffset,\r
1033 *               u64 RegisterValue)\r
1034 *\r
1035 ******************************************************************************/\r
1036 #define XSdPs_WriteReg64(InstancePtr, RegOffset, RegisterValue) \\r
1037         XSdPs_Out64((InstancePtr->Config.BaseAddress) + (RegOffset), \\r
1038                 (RegisterValue))\r
1039 \r
1040 /****************************************************************************/\r
1041 /**\r
1042 * Read a register.\r
1043 *\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
1047 *\r
1048 * @return       The value read from the register.\r
1049 *\r
1050 * @note         C-Style signature:\r
1051 *               u32 XSdPs_ReadReg(u32 BaseAddress. int RegOffset)\r
1052 *\r
1053 ******************************************************************************/\r
1054 #define XSdPs_ReadReg(BaseAddress, RegOffset) \\r
1055         XSdPs_In32((BaseAddress) + (RegOffset))\r
1056 \r
1057 /***************************************************************************/\r
1058 /**\r
1059 * Write to a register.\r
1060 *\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
1065 *\r
1066 * @return       None.\r
1067 *\r
1068 * @note         C-Style signature:\r
1069 *               void XSdPs_WriteReg(u32 BaseAddress, int RegOffset,\r
1070 *               u32 RegisterValue)\r
1071 *\r
1072 ******************************************************************************/\r
1073 #define XSdPs_WriteReg(BaseAddress, RegOffset, RegisterValue) \\r
1074         XSdPs_Out32((BaseAddress) + (RegOffset), (RegisterValue))\r
1075 \r
1076 /****************************************************************************/\r
1077 /**\r
1078 * Read a register.\r
1079 *\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
1083 *\r
1084 * @return       The value read from the register.\r
1085 *\r
1086 * @note         C-Style signature:\r
1087 *               u16 XSdPs_ReadReg(u32 BaseAddress. int RegOffset)\r
1088 *\r
1089 ******************************************************************************/\r
1090 #define XSdPs_ReadReg16(BaseAddress, RegOffset) \\r
1091         XSdPs_In16((BaseAddress) + (RegOffset))\r
1092 \r
1093 /***************************************************************************/\r
1094 /**\r
1095 * Write to a register.\r
1096 *\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
1101 *\r
1102 * @return       None.\r
1103 *\r
1104 * @note         C-Style signature:\r
1105 *               void XSdPs_WriteReg(u32 BaseAddress, int RegOffset,\r
1106 *               u16 RegisterValue)\r
1107 *\r
1108 ******************************************************************************/\r
1109 #define XSdPs_WriteReg16(BaseAddress, RegOffset, RegisterValue) \\r
1110         XSdPs_Out16((BaseAddress) + (RegOffset), (RegisterValue))\r
1111 \r
1112 /****************************************************************************/\r
1113 /**\r
1114 * Read a register.\r
1115 *\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
1119 *\r
1120 * @return       The value read from the register.\r
1121 *\r
1122 * @note         C-Style signature:\r
1123 *               u8 XSdPs_ReadReg(u32 BaseAddress. int RegOffset)\r
1124 *\r
1125 ******************************************************************************/\r
1126 #define XSdPs_ReadReg8(BaseAddress, RegOffset) \\r
1127         XSdPs_In8((BaseAddress) + (RegOffset))\r
1128 \r
1129 /***************************************************************************/\r
1130 /**\r
1131 * Write to a register.\r
1132 *\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
1137 *\r
1138 * @return       None.\r
1139 *\r
1140 * @note         C-Style signature:\r
1141 *               void XSdPs_WriteReg(u32 BaseAddress, int RegOffset,\r
1142 *               u8 RegisterValue)\r
1143 *\r
1144 ******************************************************************************/\r
1145 #define XSdPs_WriteReg8(BaseAddress, RegOffset, RegisterValue) \\r
1146         XSdPs_Out8((BaseAddress) + (RegOffset), (RegisterValue))\r
1147 \r
1148 /***************************************************************************/\r
1149 /**\r
1150 * Macro to get present status register\r
1151 *\r
1152 * @param        BaseAddress contains the base address of the device.\r
1153 *\r
1154 * @return       None.\r
1155 *\r
1156 * @note         C-Style signature:\r
1157 *               void XSdPs_WriteReg(u32 BaseAddress, int RegOffset,\r
1158 *               u8 RegisterValue)\r
1159 *\r
1160 ******************************************************************************/\r
1161 #define XSdPs_GetPresentStatusReg(BaseAddress) \\r
1162                 XSdPs_In32((BaseAddress) + (XSDPS_PRES_STATE_OFFSET))\r
1163 \r
1164 /************************** Function Prototypes ******************************/\r
1165 \r
1166 /************************** Variable Definitions *****************************/\r
1167 \r
1168 #ifdef __cplusplus\r
1169 }\r
1170 #endif\r
1171 \r
1172 #endif /* SD_HW_H_ */\r
1173 /** @} */\r