cavium.h 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. /*
  2. * Driver for MMC and SSD cards for Cavium OCTEON and ThunderX SOCs.
  3. *
  4. * This file is subject to the terms and conditions of the GNU General Public
  5. * License. See the file "COPYING" in the main directory of this archive
  6. * for more details.
  7. *
  8. * Copyright (C) 2012-2017 Cavium Inc.
  9. */
  10. #ifndef _CAVIUM_MMC_H_
  11. #define _CAVIUM_MMC_H_
  12. #include <linux/bitops.h>
  13. #include <linux/clk.h>
  14. #include <linux/gpio/consumer.h>
  15. #include <linux/io.h>
  16. #include <linux/mmc/host.h>
  17. #include <linux/of.h>
  18. #include <linux/scatterlist.h>
  19. #include <linux/semaphore.h>
  20. #define CAVIUM_MAX_MMC 4
  21. /* DMA register addresses */
  22. #define MIO_EMM_DMA_FIFO_CFG(x) (0x00 + x->reg_off_dma)
  23. #define MIO_EMM_DMA_FIFO_ADR(x) (0x10 + x->reg_off_dma)
  24. #define MIO_EMM_DMA_FIFO_CMD(x) (0x18 + x->reg_off_dma)
  25. #define MIO_EMM_DMA_CFG(x) (0x20 + x->reg_off_dma)
  26. #define MIO_EMM_DMA_ADR(x) (0x28 + x->reg_off_dma)
  27. #define MIO_EMM_DMA_INT(x) (0x30 + x->reg_off_dma)
  28. #define MIO_EMM_DMA_INT_W1S(x) (0x38 + x->reg_off_dma)
  29. #define MIO_EMM_DMA_INT_ENA_W1S(x) (0x40 + x->reg_off_dma)
  30. #define MIO_EMM_DMA_INT_ENA_W1C(x) (0x48 + x->reg_off_dma)
  31. /* register addresses */
  32. #define MIO_EMM_CFG(x) (0x00 + x->reg_off)
  33. #define MIO_EMM_SWITCH(x) (0x48 + x->reg_off)
  34. #define MIO_EMM_DMA(x) (0x50 + x->reg_off)
  35. #define MIO_EMM_CMD(x) (0x58 + x->reg_off)
  36. #define MIO_EMM_RSP_STS(x) (0x60 + x->reg_off)
  37. #define MIO_EMM_RSP_LO(x) (0x68 + x->reg_off)
  38. #define MIO_EMM_RSP_HI(x) (0x70 + x->reg_off)
  39. #define MIO_EMM_INT(x) (0x78 + x->reg_off)
  40. #define MIO_EMM_INT_EN(x) (0x80 + x->reg_off)
  41. #define MIO_EMM_WDOG(x) (0x88 + x->reg_off)
  42. #define MIO_EMM_SAMPLE(x) (0x90 + x->reg_off)
  43. #define MIO_EMM_STS_MASK(x) (0x98 + x->reg_off)
  44. #define MIO_EMM_RCA(x) (0xa0 + x->reg_off)
  45. #define MIO_EMM_INT_EN_SET(x) (0xb0 + x->reg_off)
  46. #define MIO_EMM_INT_EN_CLR(x) (0xb8 + x->reg_off)
  47. #define MIO_EMM_BUF_IDX(x) (0xe0 + x->reg_off)
  48. #define MIO_EMM_BUF_DAT(x) (0xe8 + x->reg_off)
  49. struct cvm_mmc_host {
  50. struct device *dev;
  51. void __iomem *base;
  52. void __iomem *dma_base;
  53. int reg_off;
  54. int reg_off_dma;
  55. u64 emm_cfg;
  56. u64 n_minus_one; /* OCTEON II workaround location */
  57. int last_slot;
  58. struct clk *clk;
  59. int sys_freq;
  60. struct mmc_request *current_req;
  61. struct sg_mapping_iter smi;
  62. bool dma_active;
  63. bool use_sg;
  64. bool has_ciu3;
  65. bool big_dma_addr;
  66. bool need_irq_handler_lock;
  67. spinlock_t irq_handler_lock;
  68. struct semaphore mmc_serializer;
  69. struct gpio_desc *global_pwr_gpiod;
  70. atomic_t shared_power_users;
  71. struct cvm_mmc_slot *slot[CAVIUM_MAX_MMC];
  72. struct platform_device *slot_pdev[CAVIUM_MAX_MMC];
  73. void (*set_shared_power)(struct cvm_mmc_host *, int);
  74. void (*acquire_bus)(struct cvm_mmc_host *);
  75. void (*release_bus)(struct cvm_mmc_host *);
  76. void (*int_enable)(struct cvm_mmc_host *, u64);
  77. /* required on some MIPS models */
  78. void (*dmar_fixup)(struct cvm_mmc_host *, struct mmc_command *,
  79. struct mmc_data *, u64);
  80. void (*dmar_fixup_done)(struct cvm_mmc_host *);
  81. };
  82. struct cvm_mmc_slot {
  83. struct mmc_host *mmc; /* slot-level mmc_core object */
  84. struct cvm_mmc_host *host; /* common hw for all slots */
  85. u64 clock;
  86. u64 cached_switch;
  87. u64 cached_rca;
  88. unsigned int cmd_cnt; /* sample delay */
  89. unsigned int dat_cnt; /* sample delay */
  90. int bus_id;
  91. };
  92. struct cvm_mmc_cr_type {
  93. u8 ctype;
  94. u8 rtype;
  95. };
  96. struct cvm_mmc_cr_mods {
  97. u8 ctype_xor;
  98. u8 rtype_xor;
  99. };
  100. /* Bitfield definitions */
  101. #define MIO_EMM_DMA_FIFO_CFG_CLR BIT_ULL(16)
  102. #define MIO_EMM_DMA_FIFO_CFG_INT_LVL GENMASK_ULL(12, 8)
  103. #define MIO_EMM_DMA_FIFO_CFG_COUNT GENMASK_ULL(4, 0)
  104. #define MIO_EMM_DMA_FIFO_CMD_RW BIT_ULL(62)
  105. #define MIO_EMM_DMA_FIFO_CMD_INTDIS BIT_ULL(60)
  106. #define MIO_EMM_DMA_FIFO_CMD_SWAP32 BIT_ULL(59)
  107. #define MIO_EMM_DMA_FIFO_CMD_SWAP16 BIT_ULL(58)
  108. #define MIO_EMM_DMA_FIFO_CMD_SWAP8 BIT_ULL(57)
  109. #define MIO_EMM_DMA_FIFO_CMD_ENDIAN BIT_ULL(56)
  110. #define MIO_EMM_DMA_FIFO_CMD_SIZE GENMASK_ULL(55, 36)
  111. #define MIO_EMM_CMD_SKIP_BUSY BIT_ULL(62)
  112. #define MIO_EMM_CMD_BUS_ID GENMASK_ULL(61, 60)
  113. #define MIO_EMM_CMD_VAL BIT_ULL(59)
  114. #define MIO_EMM_CMD_DBUF BIT_ULL(55)
  115. #define MIO_EMM_CMD_OFFSET GENMASK_ULL(54, 49)
  116. #define MIO_EMM_CMD_CTYPE_XOR GENMASK_ULL(42, 41)
  117. #define MIO_EMM_CMD_RTYPE_XOR GENMASK_ULL(40, 38)
  118. #define MIO_EMM_CMD_IDX GENMASK_ULL(37, 32)
  119. #define MIO_EMM_CMD_ARG GENMASK_ULL(31, 0)
  120. #define MIO_EMM_DMA_SKIP_BUSY BIT_ULL(62)
  121. #define MIO_EMM_DMA_BUS_ID GENMASK_ULL(61, 60)
  122. #define MIO_EMM_DMA_VAL BIT_ULL(59)
  123. #define MIO_EMM_DMA_SECTOR BIT_ULL(58)
  124. #define MIO_EMM_DMA_DAT_NULL BIT_ULL(57)
  125. #define MIO_EMM_DMA_THRES GENMASK_ULL(56, 51)
  126. #define MIO_EMM_DMA_REL_WR BIT_ULL(50)
  127. #define MIO_EMM_DMA_RW BIT_ULL(49)
  128. #define MIO_EMM_DMA_MULTI BIT_ULL(48)
  129. #define MIO_EMM_DMA_BLOCK_CNT GENMASK_ULL(47, 32)
  130. #define MIO_EMM_DMA_CARD_ADDR GENMASK_ULL(31, 0)
  131. #define MIO_EMM_DMA_CFG_EN BIT_ULL(63)
  132. #define MIO_EMM_DMA_CFG_RW BIT_ULL(62)
  133. #define MIO_EMM_DMA_CFG_CLR BIT_ULL(61)
  134. #define MIO_EMM_DMA_CFG_SWAP32 BIT_ULL(59)
  135. #define MIO_EMM_DMA_CFG_SWAP16 BIT_ULL(58)
  136. #define MIO_EMM_DMA_CFG_SWAP8 BIT_ULL(57)
  137. #define MIO_EMM_DMA_CFG_ENDIAN BIT_ULL(56)
  138. #define MIO_EMM_DMA_CFG_SIZE GENMASK_ULL(55, 36)
  139. #define MIO_EMM_DMA_CFG_ADR GENMASK_ULL(35, 0)
  140. #define MIO_EMM_INT_SWITCH_ERR BIT_ULL(6)
  141. #define MIO_EMM_INT_SWITCH_DONE BIT_ULL(5)
  142. #define MIO_EMM_INT_DMA_ERR BIT_ULL(4)
  143. #define MIO_EMM_INT_CMD_ERR BIT_ULL(3)
  144. #define MIO_EMM_INT_DMA_DONE BIT_ULL(2)
  145. #define MIO_EMM_INT_CMD_DONE BIT_ULL(1)
  146. #define MIO_EMM_INT_BUF_DONE BIT_ULL(0)
  147. #define MIO_EMM_RSP_STS_BUS_ID GENMASK_ULL(61, 60)
  148. #define MIO_EMM_RSP_STS_CMD_VAL BIT_ULL(59)
  149. #define MIO_EMM_RSP_STS_SWITCH_VAL BIT_ULL(58)
  150. #define MIO_EMM_RSP_STS_DMA_VAL BIT_ULL(57)
  151. #define MIO_EMM_RSP_STS_DMA_PEND BIT_ULL(56)
  152. #define MIO_EMM_RSP_STS_DBUF_ERR BIT_ULL(28)
  153. #define MIO_EMM_RSP_STS_DBUF BIT_ULL(23)
  154. #define MIO_EMM_RSP_STS_BLK_TIMEOUT BIT_ULL(22)
  155. #define MIO_EMM_RSP_STS_BLK_CRC_ERR BIT_ULL(21)
  156. #define MIO_EMM_RSP_STS_RSP_BUSYBIT BIT_ULL(20)
  157. #define MIO_EMM_RSP_STS_STP_TIMEOUT BIT_ULL(19)
  158. #define MIO_EMM_RSP_STS_STP_CRC_ERR BIT_ULL(18)
  159. #define MIO_EMM_RSP_STS_STP_BAD_STS BIT_ULL(17)
  160. #define MIO_EMM_RSP_STS_STP_VAL BIT_ULL(16)
  161. #define MIO_EMM_RSP_STS_RSP_TIMEOUT BIT_ULL(15)
  162. #define MIO_EMM_RSP_STS_RSP_CRC_ERR BIT_ULL(14)
  163. #define MIO_EMM_RSP_STS_RSP_BAD_STS BIT_ULL(13)
  164. #define MIO_EMM_RSP_STS_RSP_VAL BIT_ULL(12)
  165. #define MIO_EMM_RSP_STS_RSP_TYPE GENMASK_ULL(11, 9)
  166. #define MIO_EMM_RSP_STS_CMD_TYPE GENMASK_ULL(8, 7)
  167. #define MIO_EMM_RSP_STS_CMD_IDX GENMASK_ULL(6, 1)
  168. #define MIO_EMM_RSP_STS_CMD_DONE BIT_ULL(0)
  169. #define MIO_EMM_SAMPLE_CMD_CNT GENMASK_ULL(25, 16)
  170. #define MIO_EMM_SAMPLE_DAT_CNT GENMASK_ULL(9, 0)
  171. #define MIO_EMM_SWITCH_BUS_ID GENMASK_ULL(61, 60)
  172. #define MIO_EMM_SWITCH_EXE BIT_ULL(59)
  173. #define MIO_EMM_SWITCH_ERR0 BIT_ULL(58)
  174. #define MIO_EMM_SWITCH_ERR1 BIT_ULL(57)
  175. #define MIO_EMM_SWITCH_ERR2 BIT_ULL(56)
  176. #define MIO_EMM_SWITCH_HS_TIMING BIT_ULL(48)
  177. #define MIO_EMM_SWITCH_BUS_WIDTH GENMASK_ULL(42, 40)
  178. #define MIO_EMM_SWITCH_POWER_CLASS GENMASK_ULL(35, 32)
  179. #define MIO_EMM_SWITCH_CLK_HI GENMASK_ULL(31, 16)
  180. #define MIO_EMM_SWITCH_CLK_LO GENMASK_ULL(15, 0)
  181. /* Protoypes */
  182. irqreturn_t cvm_mmc_interrupt(int irq, void *dev_id);
  183. int cvm_mmc_of_slot_probe(struct device *dev, struct cvm_mmc_host *host);
  184. int cvm_mmc_of_slot_remove(struct cvm_mmc_slot *slot);
  185. extern const char *cvm_mmc_irq_names[];
  186. #endif