gsi_reg-v3.5.1.c 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. // SPDX-License-Identifier: GPL-2.0
  2. /* Copyright (C) 2023-2024 Linaro Ltd. */
  3. #include <linux/array_size.h>
  4. #include <linux/bits.h>
  5. #include <linux/types.h>
  6. #include "../gsi_reg.h"
  7. #include "../ipa_version.h"
  8. #include "../reg.h"
  9. REG(INTER_EE_SRC_CH_IRQ_MSK, inter_ee_src_ch_irq_msk,
  10. 0x0000c020 + 0x1000 * GSI_EE_AP);
  11. REG(INTER_EE_SRC_EV_CH_IRQ_MSK, inter_ee_src_ev_ch_irq_msk,
  12. 0x0000c024 + 0x1000 * GSI_EE_AP);
  13. static const u32 reg_ch_c_cntxt_0_fmask[] = {
  14. [CHTYPE_PROTOCOL] = GENMASK(2, 0),
  15. [CHTYPE_DIR] = BIT(3),
  16. [CH_EE] = GENMASK(7, 4),
  17. [CHID] = GENMASK(12, 8),
  18. /* Bit 13 reserved */
  19. [ERINDEX] = GENMASK(18, 14),
  20. /* Bit 19 reserved */
  21. [CHSTATE] = GENMASK(23, 20),
  22. [ELEMENT_SIZE] = GENMASK(31, 24),
  23. };
  24. REG_STRIDE_FIELDS(CH_C_CNTXT_0, ch_c_cntxt_0,
  25. 0x0001c000 + 0x4000 * GSI_EE_AP, 0x80);
  26. static const u32 reg_ch_c_cntxt_1_fmask[] = {
  27. [CH_R_LENGTH] = GENMASK(15, 0),
  28. /* Bits 16-31 reserved */
  29. };
  30. REG_STRIDE_FIELDS(CH_C_CNTXT_1, ch_c_cntxt_1,
  31. 0x0001c004 + 0x4000 * GSI_EE_AP, 0x80);
  32. REG_STRIDE(CH_C_CNTXT_2, ch_c_cntxt_2, 0x0001c008 + 0x4000 * GSI_EE_AP, 0x80);
  33. REG_STRIDE(CH_C_CNTXT_3, ch_c_cntxt_3, 0x0001c00c + 0x4000 * GSI_EE_AP, 0x80);
  34. static const u32 reg_ch_c_qos_fmask[] = {
  35. [WRR_WEIGHT] = GENMASK(3, 0),
  36. /* Bits 4-7 reserved */
  37. [MAX_PREFETCH] = BIT(8),
  38. [USE_DB_ENG] = BIT(9),
  39. /* Bits 10-31 reserved */
  40. };
  41. REG_STRIDE_FIELDS(CH_C_QOS, ch_c_qos, 0x0001c05c + 0x4000 * GSI_EE_AP, 0x80);
  42. static const u32 reg_error_log_fmask[] = {
  43. [ERR_ARG3] = GENMASK(3, 0),
  44. [ERR_ARG2] = GENMASK(7, 4),
  45. [ERR_ARG1] = GENMASK(11, 8),
  46. [ERR_CODE] = GENMASK(15, 12),
  47. /* Bits 16-18 reserved */
  48. [ERR_VIRT_IDX] = GENMASK(23, 19),
  49. [ERR_TYPE] = GENMASK(27, 24),
  50. [ERR_EE] = GENMASK(31, 28),
  51. };
  52. REG_STRIDE(CH_C_SCRATCH_0, ch_c_scratch_0,
  53. 0x0001c060 + 0x4000 * GSI_EE_AP, 0x80);
  54. REG_STRIDE(CH_C_SCRATCH_1, ch_c_scratch_1,
  55. 0x0001c064 + 0x4000 * GSI_EE_AP, 0x80);
  56. REG_STRIDE(CH_C_SCRATCH_2, ch_c_scratch_2,
  57. 0x0001c068 + 0x4000 * GSI_EE_AP, 0x80);
  58. REG_STRIDE(CH_C_SCRATCH_3, ch_c_scratch_3,
  59. 0x0001c06c + 0x4000 * GSI_EE_AP, 0x80);
  60. static const u32 reg_ev_ch_e_cntxt_0_fmask[] = {
  61. [EV_CHTYPE] = GENMASK(3, 0),
  62. [EV_EE] = GENMASK(7, 4),
  63. [EV_EVCHID] = GENMASK(15, 8),
  64. [EV_INTYPE] = BIT(16),
  65. /* Bits 17-19 reserved */
  66. [EV_CHSTATE] = GENMASK(23, 20),
  67. [EV_ELEMENT_SIZE] = GENMASK(31, 24),
  68. };
  69. REG_STRIDE_FIELDS(EV_CH_E_CNTXT_0, ev_ch_e_cntxt_0,
  70. 0x0001d000 + 0x4000 * GSI_EE_AP, 0x80);
  71. static const u32 reg_ev_ch_e_cntxt_1_fmask[] = {
  72. [R_LENGTH] = GENMASK(15, 0),
  73. };
  74. REG_STRIDE_FIELDS(EV_CH_E_CNTXT_1, ev_ch_e_cntxt_1,
  75. 0x0001d004 + 0x4000 * GSI_EE_AP, 0x80);
  76. REG_STRIDE(EV_CH_E_CNTXT_2, ev_ch_e_cntxt_2,
  77. 0x0001d008 + 0x4000 * GSI_EE_AP, 0x80);
  78. REG_STRIDE(EV_CH_E_CNTXT_3, ev_ch_e_cntxt_3,
  79. 0x0001d00c + 0x4000 * GSI_EE_AP, 0x80);
  80. REG_STRIDE(EV_CH_E_CNTXT_4, ev_ch_e_cntxt_4,
  81. 0x0001d010 + 0x4000 * GSI_EE_AP, 0x80);
  82. static const u32 reg_ev_ch_e_cntxt_8_fmask[] = {
  83. [EV_MODT] = GENMASK(15, 0),
  84. [EV_MODC] = GENMASK(23, 16),
  85. [EV_MOD_CNT] = GENMASK(31, 24),
  86. };
  87. REG_STRIDE_FIELDS(EV_CH_E_CNTXT_8, ev_ch_e_cntxt_8,
  88. 0x0001d020 + 0x4000 * GSI_EE_AP, 0x80);
  89. REG_STRIDE(EV_CH_E_CNTXT_9, ev_ch_e_cntxt_9,
  90. 0x0001d024 + 0x4000 * GSI_EE_AP, 0x80);
  91. REG_STRIDE(EV_CH_E_CNTXT_10, ev_ch_e_cntxt_10,
  92. 0x0001d028 + 0x4000 * GSI_EE_AP, 0x80);
  93. REG_STRIDE(EV_CH_E_CNTXT_11, ev_ch_e_cntxt_11,
  94. 0x0001d02c + 0x4000 * GSI_EE_AP, 0x80);
  95. REG_STRIDE(EV_CH_E_CNTXT_12, ev_ch_e_cntxt_12,
  96. 0x0001d030 + 0x4000 * GSI_EE_AP, 0x80);
  97. REG_STRIDE(EV_CH_E_CNTXT_13, ev_ch_e_cntxt_13,
  98. 0x0001d034 + 0x4000 * GSI_EE_AP, 0x80);
  99. REG_STRIDE(EV_CH_E_SCRATCH_0, ev_ch_e_scratch_0,
  100. 0x0001d048 + 0x4000 * GSI_EE_AP, 0x80);
  101. REG_STRIDE(EV_CH_E_SCRATCH_1, ev_ch_e_scratch_1,
  102. 0x0001d04c + 0x4000 * GSI_EE_AP, 0x80);
  103. REG_STRIDE(CH_C_DOORBELL_0, ch_c_doorbell_0,
  104. 0x0001e000 + 0x4000 * GSI_EE_AP, 0x08);
  105. REG_STRIDE(EV_CH_E_DOORBELL_0, ev_ch_e_doorbell_0,
  106. 0x0001e100 + 0x4000 * GSI_EE_AP, 0x08);
  107. static const u32 reg_gsi_status_fmask[] = {
  108. [ENABLED] = BIT(0),
  109. /* Bits 1-31 reserved */
  110. };
  111. REG_FIELDS(GSI_STATUS, gsi_status, 0x0001f000 + 0x4000 * GSI_EE_AP);
  112. static const u32 reg_ch_cmd_fmask[] = {
  113. [CH_CHID] = GENMASK(7, 0),
  114. /* Bits 8-23 reserved */
  115. [CH_OPCODE] = GENMASK(31, 24),
  116. };
  117. REG_FIELDS(CH_CMD, ch_cmd, 0x0001f008 + 0x4000 * GSI_EE_AP);
  118. static const u32 reg_ev_ch_cmd_fmask[] = {
  119. [EV_CHID] = GENMASK(7, 0),
  120. /* Bits 8-23 reserved */
  121. [EV_OPCODE] = GENMASK(31, 24),
  122. };
  123. REG_FIELDS(EV_CH_CMD, ev_ch_cmd, 0x0001f010 + 0x4000 * GSI_EE_AP);
  124. static const u32 reg_generic_cmd_fmask[] = {
  125. [GENERIC_OPCODE] = GENMASK(4, 0),
  126. [GENERIC_CHID] = GENMASK(9, 5),
  127. [GENERIC_EE] = GENMASK(13, 10),
  128. /* Bits 14-31 reserved */
  129. };
  130. REG_FIELDS(GENERIC_CMD, generic_cmd, 0x0001f018 + 0x4000 * GSI_EE_AP);
  131. static const u32 reg_hw_param_2_fmask[] = {
  132. [IRAM_SIZE] = GENMASK(2, 0),
  133. [NUM_CH_PER_EE] = GENMASK(7, 3),
  134. [NUM_EV_PER_EE] = GENMASK(12, 8),
  135. [GSI_CH_PEND_TRANSLATE] = BIT(13),
  136. [GSI_CH_FULL_LOGIC] = BIT(14),
  137. /* Bits 15-31 reserved */
  138. };
  139. REG_FIELDS(HW_PARAM_2, hw_param_2, 0x0001f040 + 0x4000 * GSI_EE_AP);
  140. REG(CNTXT_TYPE_IRQ, cntxt_type_irq, 0x0001f080 + 0x4000 * GSI_EE_AP);
  141. REG(CNTXT_TYPE_IRQ_MSK, cntxt_type_irq_msk, 0x0001f088 + 0x4000 * GSI_EE_AP);
  142. REG(CNTXT_SRC_CH_IRQ, cntxt_src_ch_irq, 0x0001f090 + 0x4000 * GSI_EE_AP);
  143. REG(CNTXT_SRC_EV_CH_IRQ, cntxt_src_ev_ch_irq, 0x0001f094 + 0x4000 * GSI_EE_AP);
  144. REG(CNTXT_SRC_CH_IRQ_MSK, cntxt_src_ch_irq_msk,
  145. 0x0001f098 + 0x4000 * GSI_EE_AP);
  146. REG(CNTXT_SRC_EV_CH_IRQ_MSK, cntxt_src_ev_ch_irq_msk,
  147. 0x0001f09c + 0x4000 * GSI_EE_AP);
  148. REG(CNTXT_SRC_CH_IRQ_CLR, cntxt_src_ch_irq_clr,
  149. 0x0001f0a0 + 0x4000 * GSI_EE_AP);
  150. REG(CNTXT_SRC_EV_CH_IRQ_CLR, cntxt_src_ev_ch_irq_clr,
  151. 0x0001f0a4 + 0x4000 * GSI_EE_AP);
  152. REG(CNTXT_SRC_IEOB_IRQ, cntxt_src_ieob_irq, 0x0001f0b0 + 0x4000 * GSI_EE_AP);
  153. REG(CNTXT_SRC_IEOB_IRQ_MSK, cntxt_src_ieob_irq_msk,
  154. 0x0001f0b8 + 0x4000 * GSI_EE_AP);
  155. REG(CNTXT_SRC_IEOB_IRQ_CLR, cntxt_src_ieob_irq_clr,
  156. 0x0001f0c0 + 0x4000 * GSI_EE_AP);
  157. REG(CNTXT_GLOB_IRQ_STTS, cntxt_glob_irq_stts, 0x0001f100 + 0x4000 * GSI_EE_AP);
  158. REG(CNTXT_GLOB_IRQ_EN, cntxt_glob_irq_en, 0x0001f108 + 0x4000 * GSI_EE_AP);
  159. REG(CNTXT_GLOB_IRQ_CLR, cntxt_glob_irq_clr, 0x0001f110 + 0x4000 * GSI_EE_AP);
  160. REG(CNTXT_GSI_IRQ_STTS, cntxt_gsi_irq_stts, 0x0001f118 + 0x4000 * GSI_EE_AP);
  161. REG(CNTXT_GSI_IRQ_EN, cntxt_gsi_irq_en, 0x0001f120 + 0x4000 * GSI_EE_AP);
  162. REG(CNTXT_GSI_IRQ_CLR, cntxt_gsi_irq_clr, 0x0001f128 + 0x4000 * GSI_EE_AP);
  163. static const u32 reg_cntxt_intset_fmask[] = {
  164. [INTYPE] = BIT(0)
  165. /* Bits 1-31 reserved */
  166. };
  167. REG_FIELDS(CNTXT_INTSET, cntxt_intset, 0x0001f180 + 0x4000 * GSI_EE_AP);
  168. REG_FIELDS(ERROR_LOG, error_log, 0x0001f200 + 0x4000 * GSI_EE_AP);
  169. REG(ERROR_LOG_CLR, error_log_clr, 0x0001f210 + 0x4000 * GSI_EE_AP);
  170. static const u32 reg_cntxt_scratch_0_fmask[] = {
  171. [INTER_EE_RESULT] = GENMASK(2, 0),
  172. /* Bits 3-4 reserved */
  173. [GENERIC_EE_RESULT] = GENMASK(7, 5),
  174. /* Bits 8-31 reserved */
  175. };
  176. REG_FIELDS(CNTXT_SCRATCH_0, cntxt_scratch_0, 0x0001f400 + 0x4000 * GSI_EE_AP);
  177. static const struct reg *reg_array[] = {
  178. [INTER_EE_SRC_CH_IRQ_MSK] = &reg_inter_ee_src_ch_irq_msk,
  179. [INTER_EE_SRC_EV_CH_IRQ_MSK] = &reg_inter_ee_src_ev_ch_irq_msk,
  180. [CH_C_CNTXT_0] = &reg_ch_c_cntxt_0,
  181. [CH_C_CNTXT_1] = &reg_ch_c_cntxt_1,
  182. [CH_C_CNTXT_2] = &reg_ch_c_cntxt_2,
  183. [CH_C_CNTXT_3] = &reg_ch_c_cntxt_3,
  184. [CH_C_QOS] = &reg_ch_c_qos,
  185. [CH_C_SCRATCH_0] = &reg_ch_c_scratch_0,
  186. [CH_C_SCRATCH_1] = &reg_ch_c_scratch_1,
  187. [CH_C_SCRATCH_2] = &reg_ch_c_scratch_2,
  188. [CH_C_SCRATCH_3] = &reg_ch_c_scratch_3,
  189. [EV_CH_E_CNTXT_0] = &reg_ev_ch_e_cntxt_0,
  190. [EV_CH_E_CNTXT_1] = &reg_ev_ch_e_cntxt_1,
  191. [EV_CH_E_CNTXT_2] = &reg_ev_ch_e_cntxt_2,
  192. [EV_CH_E_CNTXT_3] = &reg_ev_ch_e_cntxt_3,
  193. [EV_CH_E_CNTXT_4] = &reg_ev_ch_e_cntxt_4,
  194. [EV_CH_E_CNTXT_8] = &reg_ev_ch_e_cntxt_8,
  195. [EV_CH_E_CNTXT_9] = &reg_ev_ch_e_cntxt_9,
  196. [EV_CH_E_CNTXT_10] = &reg_ev_ch_e_cntxt_10,
  197. [EV_CH_E_CNTXT_11] = &reg_ev_ch_e_cntxt_11,
  198. [EV_CH_E_CNTXT_12] = &reg_ev_ch_e_cntxt_12,
  199. [EV_CH_E_CNTXT_13] = &reg_ev_ch_e_cntxt_13,
  200. [EV_CH_E_SCRATCH_0] = &reg_ev_ch_e_scratch_0,
  201. [EV_CH_E_SCRATCH_1] = &reg_ev_ch_e_scratch_1,
  202. [CH_C_DOORBELL_0] = &reg_ch_c_doorbell_0,
  203. [EV_CH_E_DOORBELL_0] = &reg_ev_ch_e_doorbell_0,
  204. [GSI_STATUS] = &reg_gsi_status,
  205. [CH_CMD] = &reg_ch_cmd,
  206. [EV_CH_CMD] = &reg_ev_ch_cmd,
  207. [GENERIC_CMD] = &reg_generic_cmd,
  208. [HW_PARAM_2] = &reg_hw_param_2,
  209. [CNTXT_TYPE_IRQ] = &reg_cntxt_type_irq,
  210. [CNTXT_TYPE_IRQ_MSK] = &reg_cntxt_type_irq_msk,
  211. [CNTXT_SRC_CH_IRQ] = &reg_cntxt_src_ch_irq,
  212. [CNTXT_SRC_EV_CH_IRQ] = &reg_cntxt_src_ev_ch_irq,
  213. [CNTXT_SRC_CH_IRQ_MSK] = &reg_cntxt_src_ch_irq_msk,
  214. [CNTXT_SRC_EV_CH_IRQ_MSK] = &reg_cntxt_src_ev_ch_irq_msk,
  215. [CNTXT_SRC_CH_IRQ_CLR] = &reg_cntxt_src_ch_irq_clr,
  216. [CNTXT_SRC_EV_CH_IRQ_CLR] = &reg_cntxt_src_ev_ch_irq_clr,
  217. [CNTXT_SRC_IEOB_IRQ] = &reg_cntxt_src_ieob_irq,
  218. [CNTXT_SRC_IEOB_IRQ_MSK] = &reg_cntxt_src_ieob_irq_msk,
  219. [CNTXT_SRC_IEOB_IRQ_CLR] = &reg_cntxt_src_ieob_irq_clr,
  220. [CNTXT_GLOB_IRQ_STTS] = &reg_cntxt_glob_irq_stts,
  221. [CNTXT_GLOB_IRQ_EN] = &reg_cntxt_glob_irq_en,
  222. [CNTXT_GLOB_IRQ_CLR] = &reg_cntxt_glob_irq_clr,
  223. [CNTXT_GSI_IRQ_STTS] = &reg_cntxt_gsi_irq_stts,
  224. [CNTXT_GSI_IRQ_EN] = &reg_cntxt_gsi_irq_en,
  225. [CNTXT_GSI_IRQ_CLR] = &reg_cntxt_gsi_irq_clr,
  226. [CNTXT_INTSET] = &reg_cntxt_intset,
  227. [ERROR_LOG] = &reg_error_log,
  228. [ERROR_LOG_CLR] = &reg_error_log_clr,
  229. [CNTXT_SCRATCH_0] = &reg_cntxt_scratch_0,
  230. };
  231. const struct regs gsi_regs_v3_5_1 = {
  232. .reg_count = ARRAY_SIZE(reg_array),
  233. .reg = reg_array,
  234. };