atmel_mci.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. /*
  2. * Copyright (C) 2005-2006 Atmel Corporation
  3. *
  4. * SPDX-License-Identifier: GPL-2.0+
  5. */
  6. #ifndef __ATMEL_MCI_H__
  7. #define __ATMEL_MCI_H__
  8. int atmel_mci_init(void *regs);
  9. #ifndef __ASSEMBLY__
  10. /*
  11. * Structure for struct SoC access.
  12. * Names starting with '_' are fillers.
  13. */
  14. typedef struct atmel_mci {
  15. /* reg Offset */
  16. u32 cr; /* 0x00 */
  17. u32 mr; /* 0x04 */
  18. u32 dtor; /* 0x08 */
  19. u32 sdcr; /* 0x0c */
  20. u32 argr; /* 0x10 */
  21. u32 cmdr; /* 0x14 */
  22. u32 blkr; /* 0x18 */
  23. u32 _1c; /* 0x1c */
  24. u32 rspr; /* 0x20 */
  25. u32 rspr1; /* 0x24 */
  26. u32 rspr2; /* 0x28 */
  27. u32 rspr3; /* 0x2c */
  28. u32 rdr; /* 0x30 */
  29. u32 tdr; /* 0x34 */
  30. u32 _38; /* 0x38 */
  31. u32 _3c; /* 0x3c */
  32. u32 sr; /* 0x40 */
  33. u32 ier; /* 0x44 */
  34. u32 idr; /* 0x48 */
  35. u32 imr; /* 0x4c */
  36. u32 dma; /* 0x50 */
  37. u32 cfg; /* 0x54 */
  38. u32 reserved[41];
  39. u32 version;
  40. } atmel_mci_t;
  41. #endif /* __ASSEMBLY__ */
  42. /* Bitfields in CR */
  43. #define MMCI_MCIEN_OFFSET 0
  44. #define MMCI_MCIEN_SIZE 1
  45. #define MMCI_MCIDIS_OFFSET 1
  46. #define MMCI_MCIDIS_SIZE 1
  47. #define MMCI_PWSEN_OFFSET 2
  48. #define MMCI_PWSEN_SIZE 1
  49. #define MMCI_PWSDIS_OFFSET 3
  50. #define MMCI_PWSDIS_SIZE 1
  51. #define MMCI_SWRST_OFFSET 7
  52. #define MMCI_SWRST_SIZE 1
  53. /* Bitfields in MR */
  54. #define MMCI_CLKDIV_OFFSET 0
  55. #define MMCI_CLKDIV_SIZE 8
  56. #define MMCI_PWSDIV_OFFSET 8
  57. #define MMCI_PWSDIV_SIZE 3
  58. #define MMCI_RDPROOF_OFFSET 11
  59. #define MMCI_RDPROOF_SIZE 1
  60. #define MMCI_WRPROOF_OFFSET 12
  61. #define MMCI_WRPROOF_SIZE 1
  62. #define MMCI_PDCPADV_OFFSET 14
  63. #define MMCI_PDCPADV_SIZE 1
  64. #define MMCI_PDCMODE_OFFSET 15
  65. #define MMCI_PDCMODE_SIZE 1
  66. /* MCI IP version >= 0x500, MR bit 16 used for CLKODD */
  67. #define MMCI_CLKODD_OFFSET 16
  68. #define MMCI_CLKODD_SIZE 1
  69. /* MCI IP version < 0x200, MR higher 16bits for BLKLEN */
  70. #define MMCI_BLKLEN_OFFSET 16
  71. #define MMCI_BLKLEN_SIZE 16
  72. /* Bitfields in DTOR */
  73. #define MMCI_DTOCYC_OFFSET 0
  74. #define MMCI_DTOCYC_SIZE 4
  75. #define MMCI_DTOMUL_OFFSET 4
  76. #define MMCI_DTOMUL_SIZE 3
  77. /* Bitfields in SDCR */
  78. #define MMCI_SCDSEL_OFFSET 0
  79. #define MMCI_SCDSEL_SIZE 4
  80. #define MMCI_SCDBUS_OFFSET 7
  81. #define MMCI_SCDBUS_SIZE 1
  82. /* Bitfields in ARGR */
  83. #define MMCI_ARG_OFFSET 0
  84. #define MMCI_ARG_SIZE 32
  85. /* Bitfields in CMDR */
  86. #define MMCI_CMDNB_OFFSET 0
  87. #define MMCI_CMDNB_SIZE 6
  88. #define MMCI_RSPTYP_OFFSET 6
  89. #define MMCI_RSPTYP_SIZE 2
  90. #define MMCI_SPCMD_OFFSET 8
  91. #define MMCI_SPCMD_SIZE 3
  92. #define MMCI_OPDCMD_OFFSET 11
  93. #define MMCI_OPDCMD_SIZE 1
  94. #define MMCI_MAXLAT_OFFSET 12
  95. #define MMCI_MAXLAT_SIZE 1
  96. #define MMCI_TRCMD_OFFSET 16
  97. #define MMCI_TRCMD_SIZE 2
  98. #define MMCI_TRDIR_OFFSET 18
  99. #define MMCI_TRDIR_SIZE 1
  100. #define MMCI_TRTYP_OFFSET 19
  101. #define MMCI_TRTYP_SIZE 2
  102. /* Bitfields in BLKR */
  103. /* MMCI_BLKLEN_OFFSET/SIZE already defined in MR */
  104. #define MMCI_BCNT_OFFSET 0
  105. #define MMCI_BCNT_SIZE 16
  106. /* Bitfields in RSPRx */
  107. #define MMCI_RSP_OFFSET 0
  108. #define MMCI_RSP_SIZE 32
  109. /* Bitfields in SR/IER/IDR/IMR */
  110. #define MMCI_CMDRDY_OFFSET 0
  111. #define MMCI_CMDRDY_SIZE 1
  112. #define MMCI_RXRDY_OFFSET 1
  113. #define MMCI_RXRDY_SIZE 1
  114. #define MMCI_TXRDY_OFFSET 2
  115. #define MMCI_TXRDY_SIZE 1
  116. #define MMCI_BLKE_OFFSET 3
  117. #define MMCI_BLKE_SIZE 1
  118. #define MMCI_DTIP_OFFSET 4
  119. #define MMCI_DTIP_SIZE 1
  120. #define MMCI_NOTBUSY_OFFSET 5
  121. #define MMCI_NOTBUSY_SIZE 1
  122. #define MMCI_ENDRX_OFFSET 6
  123. #define MMCI_ENDRX_SIZE 1
  124. #define MMCI_ENDTX_OFFSET 7
  125. #define MMCI_ENDTX_SIZE 1
  126. #define MMCI_RXBUFF_OFFSET 14
  127. #define MMCI_RXBUFF_SIZE 1
  128. #define MMCI_TXBUFE_OFFSET 15
  129. #define MMCI_TXBUFE_SIZE 1
  130. #define MMCI_RINDE_OFFSET 16
  131. #define MMCI_RINDE_SIZE 1
  132. #define MMCI_RDIRE_OFFSET 17
  133. #define MMCI_RDIRE_SIZE 1
  134. #define MMCI_RCRCE_OFFSET 18
  135. #define MMCI_RCRCE_SIZE 1
  136. #define MMCI_RENDE_OFFSET 19
  137. #define MMCI_RENDE_SIZE 1
  138. #define MMCI_RTOE_OFFSET 20
  139. #define MMCI_RTOE_SIZE 1
  140. #define MMCI_DCRCE_OFFSET 21
  141. #define MMCI_DCRCE_SIZE 1
  142. #define MMCI_DTOE_OFFSET 22
  143. #define MMCI_DTOE_SIZE 1
  144. #define MMCI_OVRE_OFFSET 30
  145. #define MMCI_OVRE_SIZE 1
  146. #define MMCI_UNRE_OFFSET 31
  147. #define MMCI_UNRE_SIZE 1
  148. /* Constants for DTOMUL */
  149. #define MMCI_DTOMUL_1_CYCLE 0
  150. #define MMCI_DTOMUL_16_CYCLES 1
  151. #define MMCI_DTOMUL_128_CYCLES 2
  152. #define MMCI_DTOMUL_256_CYCLES 3
  153. #define MMCI_DTOMUL_1024_CYCLES 4
  154. #define MMCI_DTOMUL_4096_CYCLES 5
  155. #define MMCI_DTOMUL_65536_CYCLES 6
  156. #define MMCI_DTOMUL_1048576_CYCLES 7
  157. /* Constants for RSPTYP */
  158. #define MMCI_RSPTYP_NO_RESP 0
  159. #define MMCI_RSPTYP_48_BIT_RESP 1
  160. #define MMCI_RSPTYP_136_BIT_RESP 2
  161. /* Constants for SPCMD */
  162. #define MMCI_SPCMD_NO_SPEC_CMD 0
  163. #define MMCI_SPCMD_INIT_CMD 1
  164. #define MMCI_SPCMD_SYNC_CMD 2
  165. #define MMCI_SPCMD_INT_CMD 4
  166. #define MMCI_SPCMD_INT_RESP 5
  167. /* Constants for TRCMD */
  168. #define MMCI_TRCMD_NO_TRANS 0
  169. #define MMCI_TRCMD_START_TRANS 1
  170. #define MMCI_TRCMD_STOP_TRANS 2
  171. /* Constants for TRTYP */
  172. #define MMCI_TRTYP_BLOCK 0
  173. #define MMCI_TRTYP_MULTI_BLOCK 1
  174. #define MMCI_TRTYP_STREAM 2
  175. /* Bitfields in CFG */
  176. #define MMCI_FIFOMODE_OFFSET 0
  177. #define MMCI_FIFOMODE_SIZE 1
  178. #define MMCI_FERRCTRL_OFFSET 4
  179. #define MMCI_FERRCTRL_SIZE 1
  180. #define MMCI_HSMODE_OFFSET 8
  181. #define MMCI_HSMODE_SIZE 1
  182. #define MMCI_LSYNC_OFFSET 12
  183. #define MMCI_LSYNC_SIZE 1
  184. /* Bit manipulation macros */
  185. #define MMCI_BIT(name) \
  186. (1 << MMCI_##name##_OFFSET)
  187. #define MMCI_BF(name,value) \
  188. (((value) & ((1 << MMCI_##name##_SIZE) - 1)) \
  189. << MMCI_##name##_OFFSET)
  190. #define MMCI_BFEXT(name,value) \
  191. (((value) >> MMCI_##name##_OFFSET)\
  192. & ((1 << MMCI_##name##_SIZE) - 1))
  193. #define MMCI_BFINS(name,value,old) \
  194. (((old) & ~(((1 << MMCI_##name##_SIZE) - 1) \
  195. << MMCI_##name##_OFFSET)) \
  196. | MMCI_BF(name,value))
  197. #endif /* __ATMEL_MCI_H__ */