mmcsd.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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. * 2011-01-13 weety first version
  9. */
  10. #ifndef __DAVINCI_MMC_H__
  11. #define __DAVINCI_MMC_H__
  12. /* DAVINCI_MMCCTL definitions */
  13. #define MMCCTL_DATRST (1 << 0)
  14. #define MMCCTL_CMDRST (1 << 1)
  15. #define MMCCTL_WIDTH_8_BIT (1 << 8)
  16. #define MMCCTL_WIDTH_4_BIT (1 << 2)
  17. #define MMCCTL_DATEG_DISABLED (0 << 6)
  18. #define MMCCTL_DATEG_RISING (1 << 6)
  19. #define MMCCTL_DATEG_FALLING (2 << 6)
  20. #define MMCCTL_DATEG_BOTH (3 << 6)
  21. #define MMCCTL_PERMDR_LE (0 << 9)
  22. #define MMCCTL_PERMDR_BE (1 << 9)
  23. #define MMCCTL_PERMDX_LE (0 << 10)
  24. #define MMCCTL_PERMDX_BE (1 << 10)
  25. /* DAVINCI_MMCCLK definitions */
  26. #define MMCCLK_CLKEN (1 << 8)
  27. #define MMCCLK_CLKRT_MASK (0xFF << 0)
  28. /* IRQ bit definitions, for DAVINCI_MMCST0 and DAVINCI_MMCIM */
  29. #define MMCST0_DATDNE (1 << 0) /* data done */
  30. #define MMCST0_BSYDNE (1 << 1) /* busy done */
  31. #define MMCST0_RSPDNE (1 << 2) /* command done */
  32. #define MMCST0_TOUTRD (1 << 3) /* data read timeout */
  33. #define MMCST0_TOUTRS (1 << 4) /* command response timeout */
  34. #define MMCST0_CRCWR (1 << 5) /* data write CRC error */
  35. #define MMCST0_CRCRD (1 << 6) /* data read CRC error */
  36. #define MMCST0_CRCRS (1 << 7) /* command response CRC error */
  37. #define MMCST0_DXRDY (1 << 9) /* data transmit ready (fifo empty) */
  38. #define MMCST0_DRRDY (1 << 10) /* data receive ready (data in fifo)*/
  39. #define MMCST0_DATED (1 << 11) /* DAT3 edge detect */
  40. #define MMCST0_TRNDNE (1 << 12) /* transfer done */
  41. /* DAVINCI_MMCST1 definitions */
  42. #define MMCST1_BUSY (1 << 0)
  43. /* DAVINCI_MMCCMD definitions */
  44. #define MMCCMD_CMD_MASK (0x3F << 0)
  45. #define MMCCMD_PPLEN (1 << 7)
  46. #define MMCCMD_BSYEXP (1 << 8)
  47. #define MMCCMD_RSPFMT_MASK (3 << 9)
  48. #define MMCCMD_RSPFMT_NONE (0 << 9)
  49. #define MMCCMD_RSPFMT_R1456 (1 << 9)
  50. #define MMCCMD_RSPFMT_R2 (2 << 9)
  51. #define MMCCMD_RSPFMT_R3 (3 << 9)
  52. #define MMCCMD_DTRW (1 << 11)
  53. #define MMCCMD_STRMTP (1 << 12)
  54. #define MMCCMD_WDATX (1 << 13)
  55. #define MMCCMD_INITCK (1 << 14)
  56. #define MMCCMD_DCLR (1 << 15)
  57. #define MMCCMD_DMATRIG (1 << 16)
  58. /* DAVINCI_MMCFIFOCTL definitions */
  59. #define MMCFIFOCTL_FIFORST (1 << 0)
  60. #define MMCFIFOCTL_FIFODIR_WR (1 << 1)
  61. #define MMCFIFOCTL_FIFODIR_RD (0 << 1)
  62. #define MMCFIFOCTL_FIFOLEV (1 << 2) /* 0 = 128 bits, 1 = 256 bits */
  63. #define MMCFIFOCTL_ACCWD_4 (0 << 3) /* access width of 4 bytes */
  64. #define MMCFIFOCTL_ACCWD_3 (1 << 3) /* access width of 3 bytes */
  65. #define MMCFIFOCTL_ACCWD_2 (2 << 3) /* access width of 2 bytes */
  66. #define MMCFIFOCTL_ACCWD_1 (3 << 3) /* access width of 1 byte */
  67. /* DAVINCI_SDIOST0 definitions */
  68. #define SDIOST0_DAT1_HI (1 << 0)
  69. #define SDIOST0_INTPRD (1 << 1)
  70. #define SDIOST0_RDWTST (1 << 2)
  71. /* DAVINCI_SDIOIEN definitions */
  72. #define SDIOIEN_IOINTEN (1 << 0)
  73. #define SDIOIEN_RWSEN (1 << 1)
  74. /* DAVINCI_SDIOIST definitions */
  75. #define SDIOIST_IOINT (1 << 0)
  76. #define SDIOIST_RWS (1 << 1)
  77. /* MMCSD Init clock in Hz in opendrain mode */
  78. #define MMCSD_INIT_CLOCK 200000
  79. #define MAX_CCNT ((1 << 16) - 1)
  80. #define MAX_NR_SG 16
  81. #define MMC_DATA_WRITE (1 << 8)
  82. #define MMC_DATA_READ (1 << 9)
  83. #define MMC_DATA_STREAM (1 << 10)
  84. typedef struct {
  85. volatile rt_uint32_t MMCCTL;
  86. volatile rt_uint32_t MMCCLK;
  87. volatile rt_uint32_t MMCST0;
  88. volatile rt_uint32_t MMCST1;
  89. volatile rt_uint32_t MMCIM;
  90. volatile rt_uint32_t MMCTOR;
  91. volatile rt_uint32_t MMCTOD;
  92. volatile rt_uint32_t MMCBLEN;
  93. volatile rt_uint32_t MMCNBLK;
  94. volatile rt_uint32_t MMCNBLC;
  95. volatile rt_uint32_t MMCDRR;
  96. volatile rt_uint32_t MMCDXR;
  97. volatile rt_uint32_t MMCCMD;
  98. volatile rt_uint32_t MMCARGHL;
  99. volatile rt_uint32_t MMCRSP01;
  100. volatile rt_uint32_t MMCRSP23;
  101. volatile rt_uint32_t MMCRSP45;
  102. volatile rt_uint32_t MMCRSP67;
  103. volatile rt_uint32_t MMCDRSP;
  104. volatile rt_uint32_t reserved0;
  105. volatile rt_uint32_t MMCCIDX;
  106. volatile rt_uint32_t reserved1[4];
  107. volatile rt_uint32_t SDIOCTL;
  108. volatile rt_uint32_t SDIOST0;
  109. volatile rt_uint32_t SDIOIEN;
  110. volatile rt_uint32_t SDIOIST;
  111. volatile rt_uint32_t MMCFIFOCTL;
  112. }mmcsd_regs_t;
  113. extern int rt_hw_mmcsd_init(void);
  114. #endif