sh_sdhi.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * drivers/mmc/sh-sdhi.h
  4. *
  5. * SD/MMC driver for Renesas rmobile ARM SoCs
  6. *
  7. * Copyright (C) 2013-2017 Renesas Electronics Corporation
  8. * Copyright (C) 2008-2009 Renesas Solutions Corp.
  9. */
  10. #ifndef _SH_SDHI_H
  11. #define _SH_SDHI_H
  12. #include <linux/bitops.h>
  13. #define SDHI_CMD (0x0000 >> 1)
  14. #define SDHI_PORTSEL (0x0004 >> 1)
  15. #define SDHI_ARG0 (0x0008 >> 1)
  16. #define SDHI_ARG1 (0x000C >> 1)
  17. #define SDHI_STOP (0x0010 >> 1)
  18. #define SDHI_SECCNT (0x0014 >> 1)
  19. #define SDHI_RSP00 (0x0018 >> 1)
  20. #define SDHI_RSP01 (0x001C >> 1)
  21. #define SDHI_RSP02 (0x0020 >> 1)
  22. #define SDHI_RSP03 (0x0024 >> 1)
  23. #define SDHI_RSP04 (0x0028 >> 1)
  24. #define SDHI_RSP05 (0x002C >> 1)
  25. #define SDHI_RSP06 (0x0030 >> 1)
  26. #define SDHI_RSP07 (0x0034 >> 1)
  27. #define SDHI_INFO1 (0x0038 >> 1)
  28. #define SDHI_INFO2 (0x003C >> 1)
  29. #define SDHI_INFO1_MASK (0x0040 >> 1)
  30. #define SDHI_INFO2_MASK (0x0044 >> 1)
  31. #define SDHI_CLK_CTRL (0x0048 >> 1)
  32. #define SDHI_SIZE (0x004C >> 1)
  33. #define SDHI_OPTION (0x0050 >> 1)
  34. #define SDHI_ERR_STS1 (0x0058 >> 1)
  35. #define SDHI_ERR_STS2 (0x005C >> 1)
  36. #define SDHI_BUF0 (0x0060 >> 1)
  37. #define SDHI_SDIO_MODE (0x0068 >> 1)
  38. #define SDHI_SDIO_INFO1 (0x006C >> 1)
  39. #define SDHI_SDIO_INFO1_MASK (0x0070 >> 1)
  40. #define SDHI_CC_EXT_MODE (0x01B0 >> 1)
  41. #define SDHI_SOFT_RST (0x01C0 >> 1)
  42. #define SDHI_VERSION (0x01C4 >> 1)
  43. #define SDHI_HOST_MODE (0x01C8 >> 1)
  44. #define SDHI_SDIF_MODE (0x01CC >> 1)
  45. #define SDHI_EXT_SWAP (0x01E0 >> 1)
  46. #define SDHI_SD_DMACR (0x0324 >> 1)
  47. /* SDHI CMD VALUE */
  48. #define CMD_MASK 0x0000ffff
  49. /* SDHI_PORTSEL */
  50. #define USE_1PORT (1 << 8) /* 1 port */
  51. /* SDHI_ARG */
  52. #define ARG0_MASK 0x0000ffff
  53. #define ARG1_MASK 0x0000ffff
  54. /* SDHI_STOP */
  55. #define STOP_SEC_ENABLE (1 << 8)
  56. /* SDHI_INFO1 */
  57. #define INFO1_RESP_END (1 << 0)
  58. #define INFO1_ACCESS_END (1 << 2)
  59. #define INFO1_CARD_RE (1 << 3)
  60. #define INFO1_CARD_IN (1 << 4)
  61. #define INFO1_ISD0CD (1 << 5)
  62. #define INFO1_WRITE_PRO (1 << 7)
  63. #define INFO1_DATA3_CARD_RE (1 << 8)
  64. #define INFO1_DATA3_CARD_IN (1 << 9)
  65. #define INFO1_DATA3 (1 << 10)
  66. /* SDHI_INFO2 */
  67. #define INFO2_CMD_ERROR (1 << 0)
  68. #define INFO2_CRC_ERROR (1 << 1)
  69. #define INFO2_END_ERROR (1 << 2)
  70. #define INFO2_TIMEOUT (1 << 3)
  71. #define INFO2_BUF_ILL_WRITE (1 << 4)
  72. #define INFO2_BUF_ILL_READ (1 << 5)
  73. #define INFO2_RESP_TIMEOUT (1 << 6)
  74. #define INFO2_SDDAT0 (1 << 7)
  75. #define INFO2_BRE_ENABLE (1 << 8)
  76. #define INFO2_BWE_ENABLE (1 << 9)
  77. #define INFO2_CBUSY (1 << 14)
  78. #define INFO2_ILA (1 << 15)
  79. #define INFO2_ALL_ERR (0x807f)
  80. /* SDHI_INFO1_MASK */
  81. #define INFO1M_RESP_END (1 << 0)
  82. #define INFO1M_ACCESS_END (1 << 2)
  83. #define INFO1M_CARD_RE (1 << 3)
  84. #define INFO1M_CARD_IN (1 << 4)
  85. #define INFO1M_DATA3_CARD_RE (1 << 8)
  86. #define INFO1M_DATA3_CARD_IN (1 << 9)
  87. #define INFO1M_ALL (0xffff)
  88. #define INFO1M_SET (INFO1M_RESP_END | \
  89. INFO1M_ACCESS_END | \
  90. INFO1M_DATA3_CARD_RE | \
  91. INFO1M_DATA3_CARD_IN)
  92. /* SDHI_INFO2_MASK */
  93. #define INFO2M_CMD_ERROR (1 << 0)
  94. #define INFO2M_CRC_ERROR (1 << 1)
  95. #define INFO2M_END_ERROR (1 << 2)
  96. #define INFO2M_TIMEOUT (1 << 3)
  97. #define INFO2M_BUF_ILL_WRITE (1 << 4)
  98. #define INFO2M_BUF_ILL_READ (1 << 5)
  99. #define INFO2M_RESP_TIMEOUT (1 << 6)
  100. #define INFO2M_BRE_ENABLE (1 << 8)
  101. #define INFO2M_BWE_ENABLE (1 << 9)
  102. #define INFO2M_ILA (1 << 15)
  103. #define INFO2M_ALL (0xffff)
  104. #define INFO2M_ALL_ERR (0x807f)
  105. /* SDHI_CLK_CTRL */
  106. #define CLK_ENABLE (1 << 8)
  107. /* SDHI_OPTION */
  108. #define OPT_BUS_WIDTH_M (5 << 13) /* 101b (15-13bit) */
  109. #define OPT_BUS_WIDTH_1 (4 << 13) /* bus width = 1 bit */
  110. #define OPT_BUS_WIDTH_4 (0 << 13) /* bus width = 4 bit */
  111. #define OPT_BUS_WIDTH_8 (1 << 13) /* bus width = 8 bit */
  112. /* SDHI_ERR_STS1 */
  113. #define ERR_STS1_CRC_ERROR ((1 << 11) | (1 << 10) | (1 << 9) | \
  114. (1 << 8) | (1 << 5))
  115. #define ERR_STS1_CMD_ERROR ((1 << 4) | (1 << 3) | (1 << 2) | \
  116. (1 << 1) | (1 << 0))
  117. /* SDHI_ERR_STS2 */
  118. #define ERR_STS2_RES_TIMEOUT (1 << 0)
  119. #define ERR_STS2_RES_STOP_TIMEOUT ((1 << 0) | (1 << 1))
  120. #define ERR_STS2_SYS_ERROR ((1 << 6) | (1 << 5) | (1 << 4) | \
  121. (1 << 3) | (1 << 2) | (1 << 1) | \
  122. (1 << 0))
  123. /* SDHI_SDIO_MODE */
  124. #define SDIO_MODE_ON (1 << 0)
  125. #define SDIO_MODE_OFF (0 << 0)
  126. /* SDHI_SDIO_INFO1 */
  127. #define SDIO_INFO1_IOIRQ (1 << 0)
  128. #define SDIO_INFO1_EXPUB52 (1 << 14)
  129. #define SDIO_INFO1_EXWT (1 << 15)
  130. /* SDHI_SDIO_INFO1_MASK */
  131. #define SDIO_INFO1M_CLEAR ((1 << 1) | (1 << 2))
  132. #define SDIO_INFO1M_ON ((1 << 15) | (1 << 14) | (1 << 2) | \
  133. (1 << 1) | (1 << 0))
  134. /* SDHI_EXT_SWAP */
  135. #define SET_SWAP ((1 << 6) | (1 << 7)) /* SWAP */
  136. /* SDHI_SOFT_RST */
  137. #define SOFT_RST_ON (0 << 0)
  138. #define SOFT_RST_OFF (1 << 0)
  139. #define CLKDEV_SD_DATA 25000000 /* 25 MHz */
  140. #define CLKDEV_HS_DATA 50000000 /* 50 MHz */
  141. #define CLKDEV_MMC_DATA 20000000 /* 20MHz */
  142. #define CLKDEV_INIT 400000 /* 100 - 400 KHz */
  143. /* For quirk */
  144. #define SH_SDHI_QUIRK_16BIT_BUF BIT(0)
  145. #define SH_SDHI_QUIRK_64BIT_BUF BIT(1)
  146. int sh_sdhi_init(unsigned long addr, int ch, unsigned long quirks);
  147. #endif /* _SH_SDHI_H */