drv_sdio.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2018-02-08 RT-Thread the first version
  9. */
  10. #ifndef __DRV_SDIO_H__
  11. #define __DRV_SDIO_H__
  12. #define MMC0_BASE_ADDR 0x01C0F000
  13. #define MMC1_BASE_ADDR 0x01C10000
  14. struct tina_mmc
  15. {
  16. volatile rt_uint32_t gctl_reg; /* (0x000) */
  17. volatile rt_uint32_t ckcr_reg; /* (0x004) */
  18. volatile rt_uint32_t tmor_reg; /* (0x008) */
  19. volatile rt_uint32_t bwdr_reg; /* (0x00C) */
  20. volatile rt_uint32_t bksr_reg; /* (0x010) */
  21. volatile rt_uint32_t bycr_reg; /* (0x014) */
  22. volatile rt_uint32_t cmdr_reg; /* (0x018) */
  23. volatile rt_uint32_t cagr_reg; /* (0x01C) */
  24. volatile rt_uint32_t resp0_reg; /* (0x020) */
  25. volatile rt_uint32_t resp1_reg; /* (0x024) */
  26. volatile rt_uint32_t resp2_reg; /* (0x028) */
  27. volatile rt_uint32_t resp3_reg; /* (0x02C) */
  28. volatile rt_uint32_t imkr_reg; /* (0x030) */
  29. volatile rt_uint32_t misr_reg; /* (0x034) */
  30. volatile rt_uint32_t risr_reg; /* (0x038) */
  31. volatile rt_uint32_t star_reg; /* (0x03C) */
  32. volatile rt_uint32_t fwlr_reg; /* (0x040) */
  33. volatile rt_uint32_t funs_reg; /* (0x044) */
  34. volatile rt_uint32_t cbcr_reg; /* (0x048) */
  35. volatile rt_uint32_t bbcr_reg; /* (0x04C) */
  36. volatile rt_uint32_t dbgc_reg; /* (0x050) */
  37. volatile rt_uint32_t reserved0;
  38. volatile rt_uint32_t a12a_reg; /* (0x058) */
  39. volatile rt_uint32_t reserved1[7];
  40. volatile rt_uint32_t hwrst_reg; /* (0x078) */
  41. volatile rt_uint32_t reserved2;
  42. volatile rt_uint32_t dmac_reg; /* (0x080) */
  43. volatile rt_uint32_t dlba_reg; /* (0x084) */
  44. volatile rt_uint32_t idst_reg; /* (0x088) */
  45. volatile rt_uint32_t idie_reg; /* (0x08C) */
  46. volatile rt_uint32_t chda_reg; /* (0x090) */
  47. volatile rt_uint32_t cbda_reg; /* (0x094) */
  48. volatile rt_uint32_t reserved3[26];
  49. volatile rt_uint32_t card_thldc_reg; /* (0x100) */
  50. volatile rt_uint32_t reserved4[2];
  51. volatile rt_uint32_t emmc_dsbd_reg; /* (0x10c) */
  52. volatile rt_uint32_t reserved5[12];
  53. volatile rt_uint32_t reserved6[48];
  54. volatile rt_uint32_t fifo_reg; /* (0x200) */
  55. };
  56. typedef struct tina_mmc *tina_mmc_t;
  57. #define MMC0 ((tina_mmc_t)MMC0_BASE_ADDR)
  58. #define MMC1 ((tina_mmc_t)MMC1_BASE_ADDR)
  59. #define BIT(x) (1<<(x))
  60. /* Struct for Intrrrupt Information */
  61. #define SDXC_RespErr BIT(1) //0x2
  62. #define SDXC_CmdDone BIT(2) //0x4
  63. #define SDXC_DataOver BIT(3) //0x8
  64. #define SDXC_TxDataReq BIT(4) //0x10
  65. #define SDXC_RxDataReq BIT(5) //0x20
  66. #define SDXC_RespCRCErr BIT(6) //0x40
  67. #define SDXC_DataCRCErr BIT(7) //0x80
  68. #define SDXC_RespTimeout BIT(8) //0x100
  69. #define SDXC_ACKRcv BIT(8) //0x100
  70. #define SDXC_DataTimeout BIT(9) //0x200
  71. #define SDXC_BootStart BIT(9) //0x200
  72. #define SDXC_DataStarve BIT(10) //0x400
  73. #define SDXC_VolChgDone BIT(10) //0x400
  74. #define SDXC_FIFORunErr BIT(11) //0x800
  75. #define SDXC_HardWLocked BIT(12) //0x1000
  76. #define SDXC_StartBitErr BIT(13) //0x2000
  77. #define SDXC_AutoCMDDone BIT(14) //0x4000
  78. #define SDXC_EndBitErr BIT(15) //0x8000
  79. #define SDXC_SDIOInt BIT(16) //0x10000
  80. #define SDXC_CardInsert BIT(30) //0x40000000
  81. #define SDXC_CardRemove BIT(31) //0x80000000
  82. #define SDXC_IntErrBit (SDXC_RespErr | SDXC_RespCRCErr | SDXC_DataCRCErr \
  83. | SDXC_RespTimeout | SDXC_DataTimeout | SDXC_FIFORunErr \
  84. | SDXC_HardWLocked | SDXC_StartBitErr | SDXC_EndBitErr) //0xbfc2
  85. /*
  86. SD CMD reg
  87. REG[0-5] : Cmd ID
  88. REG[6] : Has response
  89. REG[7] : Long response
  90. REG[8] : Check response CRC
  91. REG[9] : Has data
  92. REG[10] : Write
  93. REG[11] : Steam mode
  94. REG[12] : Auto stop
  95. REG[13] : Wait previous over
  96. REG[14] : About cmd
  97. REG[15] : Send initialization
  98. REG[21] : Update clock
  99. REG[31] : Load cmd
  100. */
  101. #define SDXC_RESPONSE_CMD BIT(6)
  102. #define SDXC_LONG_RESPONSE_CMD BIT(7)
  103. #define SDXC_CHECK_CRC_CMD BIT(8)
  104. #define SDXC_HAS_DATA_CMD BIT(9)
  105. #define SDXC_WRITE_CMD BIT(10)
  106. #define SDXC_STEAM_CMD BIT(11)
  107. #define SDXC_AUTO_STOP_CMD BIT(12)
  108. #define SDXC_WAIT_OVER_CMD BIT(13)
  109. #define SDXC_ABOUT_CMD BIT(14)
  110. #define SDXC_SEND_INIT_CMD BIT(15)
  111. #define SDXC_UPDATE_CLOCK_CMD BIT(21)
  112. #define SDXC_LOAD_CMD BIT(31)
  113. /*
  114. SD status reg
  115. REG[0] : FIFO_RX_LEVEL
  116. REG[1] : FIFO_TX_LEVEL
  117. REG[2] : FIFO_EMPTY
  118. REG[3] : FIFO_FULL
  119. REG[4-7] : FSM_STA
  120. REG[8] : CARD_PRESENT
  121. REG[9] : CARD_BUSY
  122. REG[10] : FSM_BUSY
  123. REG[11-16]: RESP_IDX
  124. REG[17-21]: FIFO_LEVEL
  125. REG[31] : DMA_REQ
  126. */
  127. #define SDXC_FIFO_RX_LEVEL BIT(0)
  128. #define SDXC_FIFO_TX_LEVEL BIT(1)
  129. #define SDXC_FIFO_EMPTY BIT(2)
  130. #define SDXC_FIFO_FULL BIT(3)
  131. #define SDXC_CARD_PRESENT BIT(8)
  132. #define SDXC_CARD_BUSY BIT(9)
  133. #define SDXC_FSM_BUSY BIT(10)
  134. #define SDXC_DMA_REQ BIT(31)
  135. struct mmc_des_v4p1
  136. {
  137. rt_uint32_t : 1,
  138. dic : 1, /* disable interrupt on completion */
  139. last_des : 1, /* 1-this data buffer is the last buffer */
  140. first_des : 1, /* 1-data buffer is the first buffer,0-data buffer contained in the next descriptor is 1st buffer */
  141. des_chain : 1, /* 1-the 2nd address in the descriptor is the next descriptor address */
  142. end_of_ring : 1, /* 1-last descriptor flag when using dual data buffer in descriptor */
  143. : 24,
  144. card_err_sum : 1, /* transfer error flag */
  145. own : 1; /* des owner:1-idma owns it, 0-host owns it */
  146. #define SDXC_DES_NUM_SHIFT 12 /* smhc2!! */
  147. #define SDXC_DES_BUFFER_MAX_LEN (1 << SDXC_DES_NUM_SHIFT)
  148. rt_uint32_t data_buf1_sz : 16,
  149. data_buf2_sz : 16;
  150. rt_uint32_t buf_addr_ptr1;
  151. rt_uint32_t buf_addr_ptr2;
  152. };
  153. #endif