MCI_LPC18xx.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. /* --------------------------------------------------------------------------
  2. * Copyright (c) 2013-2016 ARM Limited. All rights reserved.
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Licensed under the Apache License, Version 2.0 (the License); you may
  7. * not use this file except in compliance with the License.
  8. * You may obtain a copy of the License at
  9. *
  10. * www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an AS IS BASIS, WITHOUT
  14. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. *
  18. * $Date: 02. March 2016
  19. * $Revision: V2.4
  20. *
  21. * Project: MCI Driver Definitions for NXP LPC18xx
  22. * -------------------------------------------------------------------------- */
  23. #ifndef __MCI_LPC18XX_H
  24. #define __MCI_LPC18XX_H
  25. #include "Driver_MCI.h"
  26. #include "LPC18xx.h"
  27. #include "SCU_LPC18xx.h"
  28. #include "MCI_LPC18xx.h"
  29. #include "RTE_Device.h"
  30. #include "RTE_Components.h"
  31. #include <string.h>
  32. #if (defined(RTE_Drivers_MCI0) && !RTE_SDMMC)
  33. #error "SDMMC not configured in RTE_Device.h!"
  34. #endif
  35. /* Driver flag definitions */
  36. #define MCI_INIT (1 << 0) /* MCI initialized */
  37. #define MCI_POWER (1 << 1) /* MCI powered on */
  38. #define MCI_SETUP (1 << 2) /* MCI configured */
  39. #define MCI_WRITE (1 << 3) /* Write transfer */
  40. #define MCI_STREAM (1 << 4) /* Stream stransfer */
  41. #define MCI_RESP_LONG (1 << 5) /* Long response expected */
  42. #define MCI_RESPONSE_EXPECTED_Msk (ARM_MCI_RESPONSE_SHORT | \
  43. ARM_MCI_RESPONSE_SHORT_BUSY | \
  44. ARM_MCI_RESPONSE_LONG)
  45. #define MCI_TRANSFER_EVENT_Msk (ARM_MCI_EVENT_TRANSFER_ERROR | \
  46. ARM_MCI_EVENT_TRANSFER_TIMEOUT | \
  47. ARM_MCI_EVENT_TRANSFER_COMPLETE)
  48. #define MCI_COMMAND_EVENT_Msk (ARM_MCI_EVENT_COMMAND_ERROR | \
  49. ARM_MCI_EVENT_COMMAND_TIMEOUT | \
  50. ARM_MCI_EVENT_COMMAND_COMPLETE)
  51. #define MCI_CONTROL_EVENT_Msk (ARM_MCI_EVENT_CARD_INSERTED | \
  52. ARM_MCI_EVENT_CARD_REMOVED | \
  53. ARM_MCI_EVENT_SDIO_INTERRUPT)
  54. #define SDMMC_CTRL_RESET_BITMASK (SDMMC_CTRL_CONTROLLER_RESET | \
  55. SDMMC_CTRL_FIFO_RESET | \
  56. SDMMC_CTRL_DMA_RESET)
  57. #define SDMMC_RINT_ERR_SDIO_Msk (SDMMC_RINTSTS_RE | \
  58. SDMMC_RINTSTS_RCRC | \
  59. SDMMC_RINTSTS_DCRC | \
  60. SDMMC_RINTSTS_RTO_BAR | \
  61. SDMMC_RINTSTS_DRTO_BDS | \
  62. SDMMC_RINTSTS_HLE | \
  63. SDMMC_RINTSTS_SBE | \
  64. SDMMC_RINTSTS_EBE | \
  65. SDMMC_RINTSTS_SDIO_INTERRUPT)
  66. /* Clock Control Unit register bits */
  67. #define CCU_CLK_CFG_RUN (1 << 0)
  68. #define CCU_CLK_CFG_AUTO (1 << 1)
  69. #define CCU_CLK_STAT_RUN (1 << 0)
  70. /* Reset Generation Unit register bits */
  71. #define RGU_RESET_CTRL0_SDIO_RST (1 << 20)
  72. /* CGU BASE_SDIO_CLK CLK_SEL definition */
  73. #define SDIO_CLK_SEL_PLL1 0x09
  74. /* Number of DMA descriptors */
  75. #define SDMMC_DMA_DESC_CNT 4
  76. /* DMA descriptor bit definitions */
  77. #define SDMMC_DMA_DESC_DIC (1U << 1) /* Disable Interrupt on Completion */
  78. #define SDMMC_DMA_DESC_LD (1U << 2) /* Last Descriptor */
  79. #define SDMMC_DMA_DESC_FS (1U << 3) /* First Descriptor */
  80. #define SDMMC_DMA_DESC_CH (1U << 4) /* Second Address Chained */
  81. #define SDMMC_DMA_DESC_ER (1U << 5) /* End of Ring */
  82. #define SDMMC_DMA_DESC_CES (1U << 30) /* Card Error Summary */
  83. #define SDMMC_DMA_DESC_OWN (1U << 31) /* Descriptor Ownership */
  84. /* SDMMC Internal DMA Descriptor Definition */
  85. typedef struct {
  86. uint32_t CtrlStat; /* Control and Status Information */
  87. uint32_t BufSize; /* Buffer Size */
  88. uint32_t BufAddr1; /* Address pointer to data buffer 1 */
  89. uint32_t BufAddr2; /* Address pointer to data buffer 2 */
  90. } SDMMC_DMA_DESC;
  91. /* MCI Transfer Information Definition */
  92. typedef struct _MCI_XFER {
  93. uint8_t *buf; /* Data buffer */
  94. uint32_t cnt; /* Data bytes to transfer */
  95. } MCI_XFER;
  96. /* MCI Driver State Definition */
  97. typedef struct _MCI_INFO {
  98. ARM_MCI_SignalEvent_t cb_event; /* Driver event callback function */
  99. ARM_MCI_STATUS status; /* Driver status */
  100. uint32_t *response; /* Pointer to response buffer */
  101. MCI_XFER xfer; /* Data transfer description */
  102. uint8_t flags; /* Driver state flags */
  103. } MCI_INFO;
  104. /* SDMMC CTRL Register Bitmask Definitions */
  105. #define SDMMC_CTRL_CONTROLLER_RESET (1U << 0)
  106. #define SDMMC_CTRL_FIFO_RESET (1U << 1)
  107. #define SDMMC_CTRL_DMA_RESET (1U << 2)
  108. #define SDMMC_CTRL_INT_ENABLE (1U << 4)
  109. #define SDMMC_CTRL_READ_WAIT (1U << 6)
  110. #define SDMMC_CTRL_SEND_IRQ_RESPONSE (1U << 7)
  111. #define SDMMC_CTRL_ABORT_READ_DATA (1U << 8)
  112. #define SDMMC_CTRL_SEND_CCSD (1U << 9)
  113. #define SDMMC_CTRL_SEND_AUTO_STOP_CCSD (1U << 10)
  114. #define SDMMC_CTRL_CEATA_DEVICE_INTERRUPT_STATUS (1U << 11)
  115. #define SDMMC_CTRL_USE_INTERNAL_DMAC (1U << 25)
  116. /* SDMMC PWREN Register Bitmask Definitions */
  117. #define SDMMC_PWREN_POWER_ENABLE (1U << 0)
  118. /* SDMMC CLKDIV Register Bitmask Definitions */
  119. #define SDMMC_CLKDIV_CLK_DIVIDER0(x) (((x) & 0xFF) << 0)
  120. #define SDMMC_CLKDIV_CLK_DIVIDER1(x) (((x) & 0xFF) << 8)
  121. #define SDMMC_CLKDIV_CLK_DIVIDER2(x) (((x) & 0xFF) << 16)
  122. #define SDMMC_CLKDIV_CLK_DIVIDER3(x) (((x) & 0xFF) << 24)
  123. /* SDMMC CLKSRC Register Bitmask Definitions */
  124. #define SDMMC_CLKSRC_CLK_SOURCE(x) (((x) & 0x03) << 0)
  125. /* SDMMC CLKENA Register Bitmask Definitions */
  126. #define SDMMC_CLKENA_CCLK_ENABLE (1U << 0)
  127. #define SDMMC_CLKENA_CCLK_LOW_POWER (1U << 16)
  128. /* SDMMC TMOUT Register Bitmask Definitions */
  129. #define SDMMC_TMOUT_RESPONSE_TIMEOUT(x) (((x) & 0xFF) << 0)
  130. #define SDMMC_TMOUT_DATA_TIMEOUT(x) (((x) & 0xFFFFFF) << 8)
  131. /* SDMMC CTYPE Register Bitmask Definitions */
  132. #define SDMMC_CTYPE_CARD_WIDTH0 (1U << 0)
  133. #define SDMMC_CTYPE_CARD_WIDTH1 (1U << 16)
  134. /* SDMMC BLKSIZ Register Bitmask Definitions */
  135. #define SDMMC_BLKSIZ_BLOCK_SIZE(x) (((x) & 0xFFFF) << 0)
  136. /* SDMMC BYTCNT Register Bitmask Definitions */
  137. #define SDMMC_BYTCNT_BYTE_COUNT(x) ((x) << 0)
  138. /* SDMMC INTMASK Register Bitmask Definitions */
  139. #define SDMMC_INTMASK_CDET (1U << 0)
  140. #define SDMMC_INTMASK_RE (1U << 1)
  141. #define SDMMC_INTMASK_CDONE (1U << 2)
  142. #define SDMMC_INTMASK_DTO (1U << 3)
  143. #define SDMMC_INTMASK_TXDR (1U << 4)
  144. #define SDMMC_INTMASK_RXDR (1U << 5)
  145. #define SDMMC_INTMASK_RCRC (1U << 6)
  146. #define SDMMC_INTMASK_DCRC (1U << 7)
  147. #define SDMMC_INTMASK_RTO (1U << 8)
  148. #define SDMMC_INTMASK_DRTO (1U << 9)
  149. #define SDMMC_INTMASK_HTO (1U << 10)
  150. #define SDMMC_INTMASK_FRUN (1U << 11)
  151. #define SDMMC_INTMASK_HLE (1U << 12)
  152. #define SDMMC_INTMASK_SBE (1U << 13)
  153. #define SDMMC_INTMASK_ACD (1U << 14)
  154. #define SDMMC_INTMASK_EBE (1U << 15)
  155. #define SDMMC_INTMASK_SDIO_INT_MASK (1U << 16)
  156. /* SDMMC CMDARG Register Bitmask Definitions */
  157. #define SDMMC_CMDARG_CMD_ARG(x) ((x) << 0)
  158. /* SDMMC CMD Register Bitmask Definitions */
  159. #define SDMMC_CMD_CMD_INDEX(x) (((x) & 0x3F) << 0)
  160. #define SDMMC_CMD_RESPONSE_EXPECT (1U << 6)
  161. #define SDMMC_CMD_RESPONSE_LENGTH (1U << 7)
  162. #define SDMMC_CMD_CHECK_RESPONSE_CRC (1U << 8)
  163. #define SDMMC_CMD_DATA_EXPECTED (1U << 9)
  164. #define SDMMC_CMD_READ_WRITE (1U << 10)
  165. #define SDMMC_CMD_TRANSFER_MODE (1U << 11)
  166. #define SDMMC_CMD_SEND_AUTO_STOP (1U << 12)
  167. #define SDMMC_CMD_WAIT_PRVDATA_COMPLETE (1U << 13)
  168. #define SDMMC_CMD_STOP_ABORT_CMD (1U << 14)
  169. #define SDMMC_CMD_SEND_INITIALIZATION (1U << 15)
  170. #define SDMMC_CMD_UPDATE_CLOCK_REGISTERS_ONLY (1U << 21)
  171. #define SDMMC_CMD_READ_CEATA_DEVICE (1U << 22)
  172. #define SDMMC_CMD_CCS_EXPECTED (1U << 23)
  173. #define SDMMC_CMD_ENABLE_BOOT (1U << 24)
  174. #define SDMMC_CMD_EXPECT_BOOT_ACK (1U << 25)
  175. #define SDMMC_CMD_DISABLE_BOOT (1U << 26)
  176. #define SDMMC_CMD_BOOT_MODE (1U << 27)
  177. #define SDMMC_CMD_VOLT_SWITCH (1U << 28)
  178. #define SDMMC_CMD_START_CMD (1U << 31)
  179. /* SDMMC MINTSTS Register Bitmask Definitions */
  180. #define SDMMC_MINTSTS_CDET (1U << 0)
  181. #define SDMMC_MINTSTS_RE (1U << 1)
  182. #define SDMMC_MINTSTS_CDONE (1U << 2)
  183. #define SDMMC_MINTSTS_DTO (1U << 3)
  184. #define SDMMC_MINTSTS_TXDR (1U << 4)
  185. #define SDMMC_MINTSTS_RXDR (1U << 5)
  186. #define SDMMC_MINTSTS_RCRC (1U << 6)
  187. #define SDMMC_MINTSTS_DCRC (1U << 7)
  188. #define SDMMC_MINTSTS_RTO (1U << 8)
  189. #define SDMMC_MINTSTS_DRTO (1U << 9)
  190. #define SDMMC_MINTSTS_HTO (1U << 10)
  191. #define SDMMC_MINTSTS_FRUN (1U << 11)
  192. #define SDMMC_MINTSTS_HLE (1U << 12)
  193. #define SDMMC_MINTSTS_SBE (1U << 13)
  194. #define SDMMC_MINTSTS_ACD (1U << 14)
  195. #define SDMMC_MINTSTS_EBE (1U << 15)
  196. #define SDMMC_MINTSTS_SDIO_INTERRUPT (1U << 16)
  197. /* SDMMC RINTSTS Register Bitmask Definitions */
  198. #define SDMMC_RINTSTS_CDET (1U << 0)
  199. #define SDMMC_RINTSTS_RE (1U << 1)
  200. #define SDMMC_RINTSTS_CDONE (1U << 2)
  201. #define SDMMC_RINTSTS_DTO (1U << 3)
  202. #define SDMMC_RINTSTS_TXDR (1U << 4)
  203. #define SDMMC_RINTSTS_RXDR (1U << 5)
  204. #define SDMMC_RINTSTS_RCRC (1U << 6)
  205. #define SDMMC_RINTSTS_DCRC (1U << 7)
  206. #define SDMMC_RINTSTS_RTO_BAR (1U << 8)
  207. #define SDMMC_RINTSTS_DRTO_BDS (1U << 9)
  208. #define SDMMC_RINTSTS_HTO (1U << 10)
  209. #define SDMMC_RINTSTS_FRUN (1U << 11)
  210. #define SDMMC_RINTSTS_HLE (1U << 12)
  211. #define SDMMC_RINTSTS_SBE (1U << 13)
  212. #define SDMMC_RINTSTS_ACD (1U << 14)
  213. #define SDMMC_RINTSTS_EBE (1U << 15)
  214. #define SDMMC_RINTSTS_SDIO_INTERRUPT (1U << 16)
  215. /* SDMMC STATUS Register Bitmask Definitions */
  216. #define SDMMC_STATUS_FIFO_RX_WATERMARK (1U << 0)
  217. #define SDMMC_STATUS_FIFO_TX_WATERMARK (1U << 1)
  218. #define SDMMC_STATUS_FIFO_EMPTY (1U << 2)
  219. #define SDMMC_STATUS_FIFO_FULL (1U << 3)
  220. #define SDMMC_STATUS_DATA_3_STATUS (1U << 8)
  221. #define SDMMC_STATUS_DATA_BUSY (1U << 9)
  222. #define SDMMC_STATUS_DATA_STATE_MC_BUSY (1U << 10)
  223. #define SDMMC_STATUS_DMA_ACK (1U << 30)
  224. #define SDMMC_STATUS_DMA_REQ (1U << 31)
  225. /* SDMMC FIFOTH Register Bitmask Definitions */
  226. #define SDMMC_FIFOTH_TX_WMARK(x) (((x) & 0x7FF) << 0)
  227. #define SDMMC_FIFOTH_RX_WMARK(x) (((x) & 0x7FF) << 16)
  228. #define SDMMC_FIFOTH_DMA_MTS(x) (((x) & 0x007) << 28)
  229. /* SDMMC CDETECT Register Bitmask Definitions */
  230. #define SDMMC_CDETECT_CARD_DETECT (1U << 0)
  231. /* SDMMC WRTPRT Register Bitmask Definitions */
  232. #define SDMMC_WRTPRT_WRITE_PROTECT (1U << 0)
  233. /* SDMMC DEBNCE Register Bitmask Definitions */
  234. #define SDMMC_DEBNCE_DEBOUNCE_COUNT(x) (((x)&0xFFFFFF)<< 0)
  235. /* SDMMC RST_N Register Bitmask Definitions */
  236. #define SDMMC_RST_N_CARD_RESET (1U << 0)
  237. /* SDMMC BMOD Register Bitmask Definitions */
  238. #define SDMMC_BMOD_SWR (1U << 0)
  239. #define SDMMC_BMOD_FB (1U << 1)
  240. #define SDMMC_BMOD_DSL(x) (((x) & 0x1F) << 2)
  241. #define SDMMC_BMOD_DE (1U << 7)
  242. #define SDMMC_BMOD_PBL(x) (((x) & 0x07) << 8)
  243. /* SDMMC PLDMND Register Bitmask Definitions */
  244. #define SDMMC_PLDMND_PD(x) ((x) << 0)
  245. /* SDMMC IDSTS Register Bitmask Definitions */
  246. #define SDMMC_IDSTS_TI (1U << 0)
  247. #define SDMMC_IDSTS_RI (1U << 1)
  248. #define SDMMC_IDSTS_FBE (1U << 2)
  249. #define SDMMC_IDSTS_DU (1U << 4)
  250. #define SDMMC_IDSTS_CES (1U << 5)
  251. #define SDMMC_IDSTS_NIS (1U << 8)
  252. #define SDMMC_IDSTS_AIS (1U << 9)
  253. /* SDMMC IDSTS Register Bitmask Definitions */
  254. #define SDMMC_IDINTEN_TI (1U << 0)
  255. #define SDMMC_IDINTEN_RI (1U << 1)
  256. #define SDMMC_IDINTEN_FBE (1U << 2)
  257. #define SDMMC_IDINTEN_DU (1U << 4)
  258. #define SDMMC_IDINTEN_CES (1U << 5)
  259. #define SDMMC_IDINTEN_NIS (1U << 8)
  260. #define SDMMC_IDINTEN_AIS (1U << 9)
  261. #endif /* __MCI_LPC18XX_H */