a6xx_gpu_state.h 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #ifndef _A6XX_CRASH_DUMP_H_
  7. #define _A6XX_CRASH_DUMP_H_
  8. #include "a6xx.xml.h"
  9. #define A6XX_NUM_CONTEXTS 2
  10. #define A6XX_NUM_SHADER_BANKS 3
  11. static const u32 a6xx_gras_cluster[] = {
  12. 0x8000, 0x8006, 0x8010, 0x8092, 0x8094, 0x809d, 0x80a0, 0x80a6,
  13. 0x80af, 0x80f1, 0x8100, 0x8107, 0x8109, 0x8109, 0x8110, 0x8110,
  14. 0x8400, 0x840b,
  15. };
  16. static const u32 a6xx_ps_cluster_rac[] = {
  17. 0x8800, 0x8806, 0x8809, 0x8811, 0x8818, 0x881e, 0x8820, 0x8865,
  18. 0x8870, 0x8879, 0x8880, 0x8889, 0x8890, 0x8891, 0x8898, 0x8898,
  19. 0x88c0, 0x88c1, 0x88d0, 0x88e3, 0x8900, 0x890c, 0x890f, 0x891a,
  20. 0x8c00, 0x8c01, 0x8c08, 0x8c10, 0x8c17, 0x8c1f, 0x8c26, 0x8c33,
  21. };
  22. static const u32 a6xx_ps_cluster_rbp[] = {
  23. 0x88f0, 0x88f3, 0x890d, 0x890e, 0x8927, 0x8928, 0x8bf0, 0x8bf1,
  24. 0x8c02, 0x8c07, 0x8c11, 0x8c16, 0x8c20, 0x8c25,
  25. };
  26. static const u32 a6xx_ps_cluster[] = {
  27. 0x9200, 0x9216, 0x9218, 0x9236, 0x9300, 0x9306,
  28. };
  29. static const u32 a6xx_fe_cluster[] = {
  30. 0x9300, 0x9306, 0x9800, 0x9806, 0x9b00, 0x9b07, 0xa000, 0xa009,
  31. 0xa00e, 0xa0ef, 0xa0f8, 0xa0f8,
  32. };
  33. static const u32 a660_fe_cluster[] = {
  34. 0x9807, 0x9807,
  35. };
  36. static const u32 a6xx_pc_vs_cluster[] = {
  37. 0x9100, 0x9108, 0x9300, 0x9306, 0x9980, 0x9981, 0x9b00, 0x9b07,
  38. };
  39. #define CLUSTER_FE 0
  40. #define CLUSTER_SP_VS 1
  41. #define CLUSTER_PC_VS 2
  42. #define CLUSTER_GRAS 3
  43. #define CLUSTER_SP_PS 4
  44. #define CLUSTER_PS 5
  45. #define CLUSTER_VPC_PS 6
  46. #define CLUSTER_NONE 7
  47. #define CLUSTER(_id, _reg, _sel_reg, _sel_val) \
  48. { .id = _id, .name = #_id,\
  49. .registers = _reg, \
  50. .count = ARRAY_SIZE(_reg), \
  51. .sel_reg = _sel_reg, .sel_val = _sel_val }
  52. static const struct a6xx_cluster {
  53. u32 id;
  54. const char *name;
  55. const u32 *registers;
  56. size_t count;
  57. u32 sel_reg;
  58. u32 sel_val;
  59. } a6xx_clusters[] = {
  60. CLUSTER(CLUSTER_GRAS, a6xx_gras_cluster, 0, 0),
  61. CLUSTER(CLUSTER_PS, a6xx_ps_cluster_rac, REG_A6XX_RB_SUB_BLOCK_SEL_CNTL_CD, 0x0),
  62. CLUSTER(CLUSTER_PS, a6xx_ps_cluster_rbp, REG_A6XX_RB_SUB_BLOCK_SEL_CNTL_CD, 0x9),
  63. CLUSTER(CLUSTER_PS, a6xx_ps_cluster, 0, 0),
  64. CLUSTER(CLUSTER_FE, a6xx_fe_cluster, 0, 0),
  65. CLUSTER(CLUSTER_PC_VS, a6xx_pc_vs_cluster, 0, 0),
  66. CLUSTER(CLUSTER_FE, a660_fe_cluster, 0, 0),
  67. };
  68. static const u32 a6xx_sp_vs_hlsq_cluster[] = {
  69. 0xb800, 0xb803, 0xb820, 0xb822,
  70. };
  71. static const u32 a6xx_sp_vs_sp_cluster[] = {
  72. 0xa800, 0xa824, 0xa830, 0xa83c, 0xa840, 0xa864, 0xa870, 0xa895,
  73. 0xa8a0, 0xa8af, 0xa8c0, 0xa8c3,
  74. };
  75. static const u32 a6xx_hlsq_duplicate_cluster[] = {
  76. 0xbb10, 0xbb11, 0xbb20, 0xbb29,
  77. };
  78. static const u32 a6xx_hlsq_2d_duplicate_cluster[] = {
  79. 0xbd80, 0xbd80,
  80. };
  81. static const u32 a6xx_sp_duplicate_cluster[] = {
  82. 0xab00, 0xab00, 0xab04, 0xab05, 0xab10, 0xab1b, 0xab20, 0xab20,
  83. };
  84. static const u32 a6xx_tp_duplicate_cluster[] = {
  85. 0xb300, 0xb307, 0xb309, 0xb309, 0xb380, 0xb382,
  86. };
  87. static const u32 a6xx_sp_ps_hlsq_cluster[] = {
  88. 0xb980, 0xb980, 0xb982, 0xb987, 0xb990, 0xb99b, 0xb9a0, 0xb9a2,
  89. 0xb9c0, 0xb9c9,
  90. };
  91. static const u32 a6xx_sp_ps_hlsq_2d_cluster[] = {
  92. 0xbd80, 0xbd80,
  93. };
  94. static const u32 a6xx_sp_ps_sp_cluster[] = {
  95. 0xa980, 0xa9a8, 0xa9b0, 0xa9bc, 0xa9d0, 0xa9d3, 0xa9e0, 0xa9f3,
  96. 0xaa00, 0xaa00, 0xaa30, 0xaa31, 0xaaf2, 0xaaf2,
  97. };
  98. static const u32 a6xx_sp_ps_sp_2d_cluster[] = {
  99. 0xacc0, 0xacc0,
  100. };
  101. static const u32 a6xx_sp_ps_tp_cluster[] = {
  102. 0xb180, 0xb183, 0xb190, 0xb191,
  103. };
  104. static const u32 a6xx_sp_ps_tp_2d_cluster[] = {
  105. 0xb4c0, 0xb4d1,
  106. };
  107. #define CLUSTER_DBGAHB(_id, _base, _type, _reg) \
  108. { .name = #_id, .statetype = _type, .base = _base, \
  109. .registers = _reg, .count = ARRAY_SIZE(_reg) }
  110. static const struct a6xx_dbgahb_cluster {
  111. const char *name;
  112. u32 statetype;
  113. u32 base;
  114. const u32 *registers;
  115. size_t count;
  116. } a6xx_dbgahb_clusters[] = {
  117. CLUSTER_DBGAHB(CLUSTER_SP_VS, 0x0002e000, 0x41, a6xx_sp_vs_hlsq_cluster),
  118. CLUSTER_DBGAHB(CLUSTER_SP_VS, 0x0002a000, 0x21, a6xx_sp_vs_sp_cluster),
  119. CLUSTER_DBGAHB(CLUSTER_SP_VS, 0x0002e000, 0x41, a6xx_hlsq_duplicate_cluster),
  120. CLUSTER_DBGAHB(CLUSTER_SP_VS, 0x0002f000, 0x45, a6xx_hlsq_2d_duplicate_cluster),
  121. CLUSTER_DBGAHB(CLUSTER_SP_VS, 0x0002a000, 0x21, a6xx_sp_duplicate_cluster),
  122. CLUSTER_DBGAHB(CLUSTER_SP_VS, 0x0002c000, 0x1, a6xx_tp_duplicate_cluster),
  123. CLUSTER_DBGAHB(CLUSTER_SP_PS, 0x0002e000, 0x42, a6xx_sp_ps_hlsq_cluster),
  124. CLUSTER_DBGAHB(CLUSTER_SP_PS, 0x0002f000, 0x46, a6xx_sp_ps_hlsq_2d_cluster),
  125. CLUSTER_DBGAHB(CLUSTER_SP_PS, 0x0002a000, 0x22, a6xx_sp_ps_sp_cluster),
  126. CLUSTER_DBGAHB(CLUSTER_SP_PS, 0x0002b000, 0x26, a6xx_sp_ps_sp_2d_cluster),
  127. CLUSTER_DBGAHB(CLUSTER_SP_PS, 0x0002c000, 0x2, a6xx_sp_ps_tp_cluster),
  128. CLUSTER_DBGAHB(CLUSTER_SP_PS, 0x0002d000, 0x6, a6xx_sp_ps_tp_2d_cluster),
  129. CLUSTER_DBGAHB(CLUSTER_SP_PS, 0x0002e000, 0x42, a6xx_hlsq_duplicate_cluster),
  130. CLUSTER_DBGAHB(CLUSTER_SP_PS, 0x0002a000, 0x22, a6xx_sp_duplicate_cluster),
  131. CLUSTER_DBGAHB(CLUSTER_SP_PS, 0x0002c000, 0x2, a6xx_tp_duplicate_cluster),
  132. };
  133. static const u32 a6xx_hlsq_registers[] = {
  134. 0xbe00, 0xbe01, 0xbe04, 0xbe05, 0xbe08, 0xbe09, 0xbe10, 0xbe15,
  135. 0xbe20, 0xbe23,
  136. };
  137. static const u32 a6xx_sp_registers[] = {
  138. 0xae00, 0xae04, 0xae0c, 0xae0c, 0xae0f, 0xae2b, 0xae30, 0xae32,
  139. 0xae35, 0xae35, 0xae3a, 0xae3f, 0xae50, 0xae52,
  140. };
  141. static const u32 a6xx_tp_registers[] = {
  142. 0xb600, 0xb601, 0xb604, 0xb605, 0xb610, 0xb61b, 0xb620, 0xb623,
  143. };
  144. struct a6xx_registers {
  145. const u32 *registers;
  146. size_t count;
  147. u32 val0;
  148. u32 val1;
  149. };
  150. #define HLSQ_DBG_REGS(_base, _type, _array) \
  151. { .val0 = _base, .val1 = _type, .registers = _array, \
  152. .count = ARRAY_SIZE(_array), }
  153. static const struct a6xx_registers a6xx_hlsq_reglist[] = {
  154. HLSQ_DBG_REGS(0x0002F800, 0x40, a6xx_hlsq_registers),
  155. HLSQ_DBG_REGS(0x0002B800, 0x20, a6xx_sp_registers),
  156. HLSQ_DBG_REGS(0x0002D800, 0x0, a6xx_tp_registers),
  157. };
  158. #define SHADER(_type, _size) \
  159. { .type = _type, .name = #_type, .size = _size }
  160. static const struct a6xx_shader_block {
  161. const char *name;
  162. u32 type;
  163. u32 size;
  164. } a6xx_shader_blocks[] = {
  165. SHADER(A6XX_TP0_TMO_DATA, 0x200),
  166. SHADER(A6XX_TP0_SMO_DATA, 0x80),
  167. SHADER(A6XX_TP0_MIPMAP_BASE_DATA, 0x3c0),
  168. SHADER(A6XX_TP1_TMO_DATA, 0x200),
  169. SHADER(A6XX_TP1_SMO_DATA, 0x80),
  170. SHADER(A6XX_TP1_MIPMAP_BASE_DATA, 0x3c0),
  171. SHADER(A6XX_SP_INST_DATA, 0x800),
  172. SHADER(A6XX_SP_LB_0_DATA, 0x800),
  173. SHADER(A6XX_SP_LB_1_DATA, 0x800),
  174. SHADER(A6XX_SP_LB_2_DATA, 0x800),
  175. SHADER(A6XX_SP_LB_3_DATA, 0x800),
  176. SHADER(A6XX_SP_LB_4_DATA, 0x800),
  177. SHADER(A6XX_SP_LB_5_DATA, 0x200),
  178. SHADER(A6XX_SP_CB_BINDLESS_DATA, 0x800),
  179. SHADER(A6XX_SP_CB_LEGACY_DATA, 0x280),
  180. SHADER(A6XX_SP_GFX_UAV_BASE_DATA, 0x80),
  181. SHADER(A6XX_SP_INST_TAG, 0x80),
  182. SHADER(A6XX_SP_CB_BINDLESS_TAG, 0x80),
  183. SHADER(A6XX_SP_TMO_UMO_TAG, 0x80),
  184. SHADER(A6XX_SP_SMO_TAG, 0x80),
  185. SHADER(A6XX_SP_STATE_DATA, 0x3f),
  186. SHADER(A6XX_HLSQ_CHUNK_CVS_RAM, 0x1c0),
  187. SHADER(A6XX_HLSQ_CHUNK_CPS_RAM, 0x280),
  188. SHADER(A6XX_HLSQ_CHUNK_CVS_RAM_TAG, 0x40),
  189. SHADER(A6XX_HLSQ_CHUNK_CPS_RAM_TAG, 0x40),
  190. SHADER(A6XX_HLSQ_ICB_CVS_CB_BASE_TAG, 0x4),
  191. SHADER(A6XX_HLSQ_ICB_CPS_CB_BASE_TAG, 0x4),
  192. SHADER(A6XX_HLSQ_CVS_MISC_RAM, 0x1c0),
  193. SHADER(A6XX_HLSQ_CPS_MISC_RAM, 0x580),
  194. SHADER(A6XX_HLSQ_INST_RAM, 0x800),
  195. SHADER(A6XX_HLSQ_GFX_CVS_CONST_RAM, 0x800),
  196. SHADER(A6XX_HLSQ_GFX_CPS_CONST_RAM, 0x800),
  197. SHADER(A6XX_HLSQ_CVS_MISC_RAM_TAG, 0x8),
  198. SHADER(A6XX_HLSQ_CPS_MISC_RAM_TAG, 0x4),
  199. SHADER(A6XX_HLSQ_INST_RAM_TAG, 0x80),
  200. SHADER(A6XX_HLSQ_GFX_CVS_CONST_RAM_TAG, 0xc),
  201. SHADER(A6XX_HLSQ_GFX_CPS_CONST_RAM_TAG, 0x10),
  202. SHADER(A6XX_HLSQ_PWR_REST_RAM, 0x28),
  203. SHADER(A6XX_HLSQ_PWR_REST_TAG, 0x14),
  204. SHADER(A6XX_HLSQ_DATAPATH_META, 0x40),
  205. SHADER(A6XX_HLSQ_FRONTEND_META, 0x40),
  206. SHADER(A6XX_HLSQ_INDIRECT_META, 0x40),
  207. SHADER(A6XX_SP_LB_6_DATA, 0x200),
  208. SHADER(A6XX_SP_LB_7_DATA, 0x200),
  209. SHADER(A6XX_HLSQ_INST_RAM_1, 0x200),
  210. };
  211. static const u32 a6xx_rb_rac_registers[] = {
  212. 0x8e04, 0x8e05, 0x8e07, 0x8e08, 0x8e10, 0x8e1c, 0x8e20, 0x8e25,
  213. 0x8e28, 0x8e28, 0x8e2c, 0x8e2f, 0x8e50, 0x8e52,
  214. };
  215. static const u32 a6xx_rb_rbp_registers[] = {
  216. 0x8e01, 0x8e01, 0x8e0c, 0x8e0c, 0x8e3b, 0x8e3e, 0x8e40, 0x8e43,
  217. 0x8e53, 0x8e5f, 0x8e70, 0x8e77,
  218. };
  219. static const u32 a6xx_registers[] = {
  220. /* RBBM */
  221. 0x0000, 0x0002, 0x0010, 0x0010, 0x0012, 0x0012, 0x0018, 0x001b,
  222. 0x001e, 0x0032, 0x0038, 0x003c, 0x0042, 0x0042, 0x0044, 0x0044,
  223. 0x0047, 0x0047, 0x0056, 0x0056, 0x00ad, 0x00ae, 0x00b0, 0x00fb,
  224. 0x0100, 0x011d, 0x0200, 0x020d, 0x0218, 0x023d, 0x0400, 0x04f9,
  225. 0x0500, 0x0500, 0x0505, 0x050b, 0x050e, 0x0511, 0x0533, 0x0533,
  226. 0x0540, 0x0555,
  227. /* CP */
  228. 0x0800, 0x0808, 0x0810, 0x0813, 0x0820, 0x0821, 0x0823, 0x0824,
  229. 0x0826, 0x0827, 0x0830, 0x0833, 0x0840, 0x0845, 0x084f, 0x086f,
  230. 0x0880, 0x088a, 0x08a0, 0x08ab, 0x08c0, 0x08c4, 0x08d0, 0x08dd,
  231. 0x08f0, 0x08f3, 0x0900, 0x0903, 0x0908, 0x0911, 0x0928, 0x093e,
  232. 0x0942, 0x094d, 0x0980, 0x0984, 0x098d, 0x0996, 0x0998, 0x099e,
  233. 0x09a0, 0x09a6, 0x09a8, 0x09ae, 0x09b0, 0x09b1, 0x09c2, 0x09c8,
  234. 0x0a00, 0x0a03,
  235. /* VSC */
  236. 0x0c00, 0x0c04, 0x0c06, 0x0c06, 0x0c10, 0x0cd9, 0x0e00, 0x0e0e,
  237. /* UCHE */
  238. 0x0e10, 0x0e13, 0x0e17, 0x0e19, 0x0e1c, 0x0e2b, 0x0e30, 0x0e32,
  239. 0x0e38, 0x0e39,
  240. /* GRAS */
  241. 0x8600, 0x8601, 0x8610, 0x861b, 0x8620, 0x8620, 0x8628, 0x862b,
  242. 0x8630, 0x8637,
  243. /* VPC */
  244. 0x9600, 0x9604, 0x9624, 0x9637,
  245. /* PC */
  246. 0x9e00, 0x9e01, 0x9e03, 0x9e0e, 0x9e11, 0x9e16, 0x9e19, 0x9e19,
  247. 0x9e1c, 0x9e1c, 0x9e20, 0x9e23, 0x9e30, 0x9e31, 0x9e34, 0x9e34,
  248. 0x9e70, 0x9e72, 0x9e78, 0x9e79, 0x9e80, 0x9fff,
  249. /* VFD */
  250. 0xa600, 0xa601, 0xa603, 0xa603, 0xa60a, 0xa60a, 0xa610, 0xa617,
  251. 0xa630, 0xa630,
  252. /* HLSQ */
  253. 0xd002, 0xd003,
  254. };
  255. static const u32 a660_registers[] = {
  256. /* UCHE */
  257. 0x0e3c, 0x0e3c,
  258. };
  259. #define REGS(_array, _sel_reg, _sel_val) \
  260. { .registers = _array, .count = ARRAY_SIZE(_array), \
  261. .val0 = _sel_reg, .val1 = _sel_val }
  262. static const struct a6xx_registers a6xx_reglist[] = {
  263. REGS(a6xx_registers, 0, 0),
  264. REGS(a660_registers, 0, 0),
  265. REGS(a6xx_rb_rac_registers, REG_A6XX_RB_SUB_BLOCK_SEL_CNTL_CD, 0),
  266. REGS(a6xx_rb_rbp_registers, REG_A6XX_RB_SUB_BLOCK_SEL_CNTL_CD, 9),
  267. };
  268. static const u32 a6xx_ahb_registers[] = {
  269. /* RBBM_STATUS - RBBM_STATUS3 */
  270. 0x210, 0x213,
  271. /* CP_STATUS_1 */
  272. 0x825, 0x825,
  273. };
  274. static const u32 a6xx_vbif_registers[] = {
  275. 0x3000, 0x3007, 0x300c, 0x3014, 0x3018, 0x302d, 0x3030, 0x3031,
  276. 0x3034, 0x3036, 0x303c, 0x303d, 0x3040, 0x3040, 0x3042, 0x3042,
  277. 0x3049, 0x3049, 0x3058, 0x3058, 0x305a, 0x3061, 0x3064, 0x3068,
  278. 0x306c, 0x306d, 0x3080, 0x3088, 0x308b, 0x308c, 0x3090, 0x3094,
  279. 0x3098, 0x3098, 0x309c, 0x309c, 0x30c0, 0x30c0, 0x30c8, 0x30c8,
  280. 0x30d0, 0x30d0, 0x30d8, 0x30d8, 0x30e0, 0x30e0, 0x3100, 0x3100,
  281. 0x3108, 0x3108, 0x3110, 0x3110, 0x3118, 0x3118, 0x3120, 0x3120,
  282. 0x3124, 0x3125, 0x3129, 0x3129, 0x3131, 0x3131, 0x3154, 0x3154,
  283. 0x3156, 0x3156, 0x3158, 0x3158, 0x315a, 0x315a, 0x315c, 0x315c,
  284. 0x315e, 0x315e, 0x3160, 0x3160, 0x3162, 0x3162, 0x340c, 0x340c,
  285. 0x3410, 0x3410, 0x3800, 0x3801,
  286. };
  287. static const u32 a6xx_gbif_registers[] = {
  288. 0x3C00, 0X3C0B, 0X3C40, 0X3C47, 0X3CC0, 0X3CD1, 0xE3A, 0xE3A,
  289. };
  290. static const struct a6xx_registers a6xx_ahb_reglist =
  291. REGS(a6xx_ahb_registers, 0, 0);
  292. static const struct a6xx_registers a6xx_vbif_reglist =
  293. REGS(a6xx_vbif_registers, 0, 0);
  294. static const struct a6xx_registers a6xx_gbif_reglist =
  295. REGS(a6xx_gbif_registers, 0, 0);
  296. static const u32 a6xx_gmu_gx_registers[] = {
  297. /* GMU GX */
  298. 0x1a800, 0x1a800, 0x1a810, 0x1a813, 0x1a816, 0x1a816, 0x1a818, 0x1a81b,
  299. 0x1a81e, 0x1a81e, 0x1a820, 0x1a823, 0x1a826, 0x1a826, 0x1a828, 0x1a82b,
  300. 0x1a82e, 0x1a82e, 0x1a830, 0x1a833, 0x1a836, 0x1a836, 0x1a838, 0x1a83b,
  301. 0x1a83e, 0x1a83e, 0x1a840, 0x1a843, 0x1a846, 0x1a846, 0x1a880, 0x1a884,
  302. 0x1a900, 0x1a92b, 0x1a940, 0x1a940,
  303. };
  304. static const u32 a6xx_gmu_cx_registers[] = {
  305. /* GMU CX */
  306. 0x1f400, 0x1f407, 0x1f410, 0x1f412, 0x1f500, 0x1f500, 0x1f507, 0x1f50a,
  307. 0x1f800, 0x1f804, 0x1f807, 0x1f808, 0x1f80b, 0x1f80c, 0x1f80f, 0x1f81c,
  308. 0x1f824, 0x1f82a, 0x1f82d, 0x1f830, 0x1f840, 0x1f853, 0x1f887, 0x1f889,
  309. 0x1f8a0, 0x1f8a2, 0x1f8a4, 0x1f8af, 0x1f8c0, 0x1f8c3, 0x1f8d0, 0x1f8d0,
  310. 0x1f8e4, 0x1f8e4, 0x1f8e8, 0x1f8ec, 0x1f900, 0x1f903, 0x1f940, 0x1f940,
  311. 0x1f942, 0x1f944, 0x1f94c, 0x1f94d, 0x1f94f, 0x1f951, 0x1f954, 0x1f954,
  312. 0x1f957, 0x1f958, 0x1f95d, 0x1f95d, 0x1f962, 0x1f962, 0x1f964, 0x1f965,
  313. 0x1f980, 0x1f986, 0x1f990, 0x1f99e, 0x1f9c0, 0x1f9c0, 0x1f9c5, 0x1f9cc,
  314. 0x1f9e0, 0x1f9e2, 0x1f9f0, 0x1f9f0, 0x1fa00, 0x1fa01,
  315. /* GMU AO */
  316. 0x23b00, 0x23b16, 0x23c00, 0x23c00,
  317. };
  318. static const u32 a6xx_gmu_gpucc_registers[] = {
  319. /* GPU CC */
  320. 0x24000, 0x24012, 0x24040, 0x24052, 0x24400, 0x24404, 0x24407, 0x2440b,
  321. 0x24415, 0x2441c, 0x2441e, 0x2442d, 0x2443c, 0x2443d, 0x2443f, 0x24440,
  322. 0x24442, 0x24449, 0x24458, 0x2445a, 0x24540, 0x2455e, 0x24800, 0x24802,
  323. 0x24c00, 0x24c02, 0x25400, 0x25402, 0x25800, 0x25802, 0x25c00, 0x25c02,
  324. 0x26000, 0x26002,
  325. /* GPU CC ACD */
  326. 0x26400, 0x26416, 0x26420, 0x26427,
  327. };
  328. static const u32 a621_gmu_gpucc_registers[] = {
  329. /* GPU CC */
  330. 0x24000, 0x2400e, 0x24400, 0x2440e, 0x25800, 0x25804, 0x25c00, 0x25c04,
  331. 0x26000, 0x26004, 0x26400, 0x26405, 0x26414, 0x2641d, 0x2642a, 0x26430,
  332. 0x26432, 0x26432, 0x26441, 0x26455, 0x26466, 0x26468, 0x26478, 0x2647a,
  333. 0x26489, 0x2648a, 0x2649c, 0x2649e, 0x264a0, 0x264a3, 0x264b3, 0x264b5,
  334. 0x264c5, 0x264c7, 0x264d6, 0x264d8, 0x264e8, 0x264e9, 0x264f9, 0x264fc,
  335. 0x2650b, 0x2650c, 0x2651c, 0x2651e, 0x26540, 0x26570, 0x26600, 0x26616,
  336. 0x26620, 0x2662d,
  337. };
  338. static const u32 a6xx_gmu_cx_rscc_registers[] = {
  339. /* GPU RSCC */
  340. 0x008c, 0x008c, 0x0101, 0x0102, 0x0340, 0x0342, 0x0344, 0x0347,
  341. 0x034c, 0x0387, 0x03ec, 0x03ef, 0x03f4, 0x042f, 0x0494, 0x0497,
  342. 0x049c, 0x04d7, 0x053c, 0x053f, 0x0544, 0x057f,
  343. };
  344. static const struct a6xx_registers a6xx_gmu_reglist[] = {
  345. REGS(a6xx_gmu_cx_registers, 0, 0),
  346. REGS(a6xx_gmu_cx_rscc_registers, 0, 0),
  347. REGS(a6xx_gmu_gx_registers, 0, 0),
  348. };
  349. static const struct a6xx_registers a6xx_gpucc_reg = REGS(a6xx_gmu_gpucc_registers, 0, 0);
  350. static const struct a6xx_registers a621_gpucc_reg = REGS(a621_gmu_gpucc_registers, 0, 0);
  351. static u32 a6xx_get_cp_roq_size(struct msm_gpu *gpu);
  352. static u32 a7xx_get_cp_roq_size(struct msm_gpu *gpu);
  353. struct a6xx_indexed_registers {
  354. const char *name;
  355. u32 addr;
  356. u32 data;
  357. u32 count;
  358. u32 (*count_fn)(struct msm_gpu *gpu);
  359. };
  360. static const struct a6xx_indexed_registers a6xx_indexed_reglist[] = {
  361. { "CP_SQE_STAT", REG_A6XX_CP_SQE_STAT_ADDR,
  362. REG_A6XX_CP_SQE_STAT_DATA, 0x33, NULL },
  363. { "CP_DRAW_STATE", REG_A6XX_CP_DRAW_STATE_ADDR,
  364. REG_A6XX_CP_DRAW_STATE_DATA, 0x100, NULL },
  365. { "CP_SQE_UCODE_DBG", REG_A6XX_CP_SQE_UCODE_DBG_ADDR,
  366. REG_A6XX_CP_SQE_UCODE_DBG_DATA, 0x8000, NULL },
  367. { "CP_ROQ_DBG", REG_A6XX_CP_ROQ_DBG_ADDR,
  368. REG_A6XX_CP_ROQ_DBG_DATA, 0, a6xx_get_cp_roq_size},
  369. };
  370. static const struct a6xx_indexed_registers a7xx_indexed_reglist[] = {
  371. { "CP_SQE_STAT", REG_A6XX_CP_SQE_STAT_ADDR,
  372. REG_A6XX_CP_SQE_STAT_DATA, 0x40, NULL },
  373. { "CP_DRAW_STATE", REG_A6XX_CP_DRAW_STATE_ADDR,
  374. REG_A6XX_CP_DRAW_STATE_DATA, 0x100, NULL },
  375. { "CP_SQE_UCODE_DBG", REG_A6XX_CP_SQE_UCODE_DBG_ADDR,
  376. REG_A6XX_CP_SQE_UCODE_DBG_DATA, 0x8000, NULL },
  377. { "CP_BV_SQE_STAT", REG_A7XX_CP_BV_SQE_STAT_ADDR,
  378. REG_A7XX_CP_BV_SQE_STAT_DATA, 0x40, NULL },
  379. { "CP_BV_DRAW_STATE", REG_A7XX_CP_BV_DRAW_STATE_ADDR,
  380. REG_A7XX_CP_BV_DRAW_STATE_DATA, 0x100, NULL },
  381. { "CP_BV_SQE_UCODE_DBG", REG_A7XX_CP_BV_SQE_UCODE_DBG_ADDR,
  382. REG_A7XX_CP_BV_SQE_UCODE_DBG_DATA, 0x8000, NULL },
  383. { "CP_SQE_AC_STAT", REG_A7XX_CP_SQE_AC_STAT_ADDR,
  384. REG_A7XX_CP_SQE_AC_STAT_DATA, 0x40, NULL },
  385. { "CP_LPAC_DRAW_STATE", REG_A7XX_CP_LPAC_DRAW_STATE_ADDR,
  386. REG_A7XX_CP_LPAC_DRAW_STATE_DATA, 0x100, NULL },
  387. { "CP_SQE_AC_UCODE_DBG", REG_A7XX_CP_SQE_AC_UCODE_DBG_ADDR,
  388. REG_A7XX_CP_SQE_AC_UCODE_DBG_DATA, 0x8000, NULL },
  389. { "CP_LPAC_FIFO_DBG", REG_A7XX_CP_LPAC_FIFO_DBG_ADDR,
  390. REG_A7XX_CP_LPAC_FIFO_DBG_DATA, 0x40, NULL },
  391. { "CP_ROQ_DBG", REG_A6XX_CP_ROQ_DBG_ADDR,
  392. REG_A6XX_CP_ROQ_DBG_DATA, 0, a7xx_get_cp_roq_size },
  393. };
  394. static const struct a6xx_indexed_registers a6xx_cp_mempool_indexed = {
  395. "CP_MEM_POOL_DBG", REG_A6XX_CP_MEM_POOL_DBG_ADDR,
  396. REG_A6XX_CP_MEM_POOL_DBG_DATA, 0x2060, NULL,
  397. };
  398. static const struct a6xx_indexed_registers a7xx_cp_bv_mempool_indexed[] = {
  399. { "CP_MEM_POOL_DBG", REG_A6XX_CP_MEM_POOL_DBG_ADDR,
  400. REG_A6XX_CP_MEM_POOL_DBG_DATA, 0x2200, NULL },
  401. { "CP_BV_MEM_POOL_DBG", REG_A7XX_CP_BV_MEM_POOL_DBG_ADDR,
  402. REG_A7XX_CP_BV_MEM_POOL_DBG_DATA, 0x2200, NULL },
  403. };
  404. #define DEBUGBUS(_id, _count) { .id = _id, .name = #_id, .count = _count }
  405. static const struct a6xx_debugbus_block {
  406. const char *name;
  407. u32 id;
  408. u32 count;
  409. } a6xx_debugbus_blocks[] = {
  410. DEBUGBUS(A6XX_DBGBUS_CP, 0x100),
  411. DEBUGBUS(A6XX_DBGBUS_RBBM, 0x100),
  412. DEBUGBUS(A6XX_DBGBUS_HLSQ, 0x100),
  413. DEBUGBUS(A6XX_DBGBUS_UCHE, 0x100),
  414. DEBUGBUS(A6XX_DBGBUS_DPM, 0x100),
  415. DEBUGBUS(A6XX_DBGBUS_TESS, 0x100),
  416. DEBUGBUS(A6XX_DBGBUS_PC, 0x100),
  417. DEBUGBUS(A6XX_DBGBUS_VFDP, 0x100),
  418. DEBUGBUS(A6XX_DBGBUS_VPC, 0x100),
  419. DEBUGBUS(A6XX_DBGBUS_TSE, 0x100),
  420. DEBUGBUS(A6XX_DBGBUS_RAS, 0x100),
  421. DEBUGBUS(A6XX_DBGBUS_VSC, 0x100),
  422. DEBUGBUS(A6XX_DBGBUS_COM, 0x100),
  423. DEBUGBUS(A6XX_DBGBUS_LRZ, 0x100),
  424. DEBUGBUS(A6XX_DBGBUS_A2D, 0x100),
  425. DEBUGBUS(A6XX_DBGBUS_CCUFCHE, 0x100),
  426. DEBUGBUS(A6XX_DBGBUS_RBP, 0x100),
  427. DEBUGBUS(A6XX_DBGBUS_DCS, 0x100),
  428. DEBUGBUS(A6XX_DBGBUS_DBGC, 0x100),
  429. DEBUGBUS(A6XX_DBGBUS_GMU_GX, 0x100),
  430. DEBUGBUS(A6XX_DBGBUS_TPFCHE, 0x100),
  431. DEBUGBUS(A6XX_DBGBUS_GPC, 0x100),
  432. DEBUGBUS(A6XX_DBGBUS_LARC, 0x100),
  433. DEBUGBUS(A6XX_DBGBUS_HLSQ_SPTP, 0x100),
  434. DEBUGBUS(A6XX_DBGBUS_RB_0, 0x100),
  435. DEBUGBUS(A6XX_DBGBUS_RB_1, 0x100),
  436. DEBUGBUS(A6XX_DBGBUS_UCHE_WRAPPER, 0x100),
  437. DEBUGBUS(A6XX_DBGBUS_CCU_0, 0x100),
  438. DEBUGBUS(A6XX_DBGBUS_CCU_1, 0x100),
  439. DEBUGBUS(A6XX_DBGBUS_VFD_0, 0x100),
  440. DEBUGBUS(A6XX_DBGBUS_VFD_1, 0x100),
  441. DEBUGBUS(A6XX_DBGBUS_VFD_2, 0x100),
  442. DEBUGBUS(A6XX_DBGBUS_VFD_3, 0x100),
  443. DEBUGBUS(A6XX_DBGBUS_SP_0, 0x100),
  444. DEBUGBUS(A6XX_DBGBUS_SP_1, 0x100),
  445. DEBUGBUS(A6XX_DBGBUS_TPL1_0, 0x100),
  446. DEBUGBUS(A6XX_DBGBUS_TPL1_1, 0x100),
  447. DEBUGBUS(A6XX_DBGBUS_TPL1_2, 0x100),
  448. DEBUGBUS(A6XX_DBGBUS_TPL1_3, 0x100),
  449. };
  450. static const struct a6xx_debugbus_block a6xx_gbif_debugbus_block =
  451. DEBUGBUS(A6XX_DBGBUS_VBIF, 0x100);
  452. static const struct a6xx_debugbus_block a6xx_cx_debugbus_blocks[] = {
  453. DEBUGBUS(A6XX_DBGBUS_GMU_CX, 0x100),
  454. DEBUGBUS(A6XX_DBGBUS_CX, 0x100),
  455. };
  456. static const struct a6xx_debugbus_block a650_debugbus_blocks[] = {
  457. DEBUGBUS(A6XX_DBGBUS_RB_2, 0x100),
  458. DEBUGBUS(A6XX_DBGBUS_CCU_2, 0x100),
  459. DEBUGBUS(A6XX_DBGBUS_VFD_4, 0x100),
  460. DEBUGBUS(A6XX_DBGBUS_VFD_5, 0x100),
  461. DEBUGBUS(A6XX_DBGBUS_SP_2, 0x100),
  462. DEBUGBUS(A6XX_DBGBUS_TPL1_4, 0x100),
  463. DEBUGBUS(A6XX_DBGBUS_TPL1_5, 0x100),
  464. DEBUGBUS(A6XX_DBGBUS_SPTP_0, 0x100),
  465. DEBUGBUS(A6XX_DBGBUS_SPTP_1, 0x100),
  466. DEBUGBUS(A6XX_DBGBUS_SPTP_2, 0x100),
  467. DEBUGBUS(A6XX_DBGBUS_SPTP_3, 0x100),
  468. DEBUGBUS(A6XX_DBGBUS_SPTP_4, 0x100),
  469. DEBUGBUS(A6XX_DBGBUS_SPTP_5, 0x100),
  470. };
  471. static const u32 a7xx_gbif_debugbus_blocks[] = {
  472. A7XX_DBGBUS_GBIF_CX,
  473. A7XX_DBGBUS_GBIF_GX,
  474. };
  475. static const struct a6xx_debugbus_block a7xx_cx_debugbus_blocks[] = {
  476. DEBUGBUS(A7XX_DBGBUS_GMU_CX, 0x100),
  477. DEBUGBUS(A7XX_DBGBUS_CX, 0x100),
  478. DEBUGBUS(A7XX_DBGBUS_GBIF_CX, 0x100),
  479. };
  480. #define STATE_NON_CONTEXT 0
  481. #define STATE_TOGGLE_CTXT 1
  482. #define STATE_FORCE_CTXT_0 2
  483. #define STATE_FORCE_CTXT_1 3
  484. struct gen7_sel_reg {
  485. unsigned int host_reg;
  486. unsigned int cd_reg;
  487. unsigned int val;
  488. };
  489. struct gen7_cluster_registers {
  490. /* cluster_id: Cluster identifier */
  491. int cluster_id;
  492. /* pipe_id: Pipe Identifier */
  493. int pipe_id;
  494. /* context_id: one of STATE_ that identifies the context to dump */
  495. int context_id;
  496. /* regs: Pointer to an array of register pairs */
  497. const u32 *regs;
  498. /* sel: Pointer to a selector register to write before reading */
  499. const struct gen7_sel_reg *sel;
  500. };
  501. struct gen7_sptp_cluster_registers {
  502. /* cluster_id: Cluster identifier */
  503. enum a7xx_cluster cluster_id;
  504. /* statetype: SP block state type for the cluster */
  505. enum a7xx_statetype_id statetype;
  506. /* pipe_id: Pipe identifier */
  507. enum adreno_pipe pipe_id;
  508. /* context_id: Context identifier */
  509. int context_id;
  510. /* location_id: Location identifier */
  511. enum a7xx_state_location location_id;
  512. /* regs: Pointer to the list of register pairs to read */
  513. const u32 *regs;
  514. /* regbase: Dword offset of the register block in the GPu register space */
  515. unsigned int regbase;
  516. };
  517. struct gen7_shader_block {
  518. /* statetype: Type identifer for the block */
  519. u32 statetype;
  520. /* size: Size of the block (in dwords) */
  521. u32 size;
  522. /* num_sps: The SP id to dump */
  523. u32 num_sps;
  524. /* num_usptps: The number of USPTPs to dump */;
  525. u32 num_usptps;
  526. /* pipe_id: Pipe identifier for the block data */
  527. u32 pipeid;
  528. /* location: Location identifer for the block data */
  529. u32 location;
  530. };
  531. struct gen7_reg_list {
  532. const u32 *regs;
  533. const struct gen7_sel_reg *sel;
  534. };
  535. /* adreno_gen7_x_y_snapshot.h defines which debugbus blocks a given family has, but the
  536. * list of debugbus blocks is global on a7xx.
  537. */
  538. #define A7XX_DEBUGBUS(_id, _count) [_id] = { .id = _id, .name = #_id, .count = _count },
  539. static const struct a6xx_debugbus_block a7xx_debugbus_blocks[] = {
  540. A7XX_DEBUGBUS(A7XX_DBGBUS_CP_0_0, 0x100)
  541. A7XX_DEBUGBUS(A7XX_DBGBUS_CP_0_1, 0x100)
  542. A7XX_DEBUGBUS(A7XX_DBGBUS_RBBM, 0x100)
  543. A7XX_DEBUGBUS(A7XX_DBGBUS_GBIF_GX, 0x100)
  544. A7XX_DEBUGBUS(A7XX_DBGBUS_GBIF_CX, 0x100)
  545. A7XX_DEBUGBUS(A7XX_DBGBUS_HLSQ, 0x100)
  546. A7XX_DEBUGBUS(A7XX_DBGBUS_UCHE_0, 0x100)
  547. A7XX_DEBUGBUS(A7XX_DBGBUS_UCHE_1, 0x100)
  548. A7XX_DEBUGBUS(A7XX_DBGBUS_TESS_BR, 0x100)
  549. A7XX_DEBUGBUS(A7XX_DBGBUS_TESS_BV, 0x100)
  550. A7XX_DEBUGBUS(A7XX_DBGBUS_PC_BR, 0x100)
  551. A7XX_DEBUGBUS(A7XX_DBGBUS_PC_BV, 0x100)
  552. A7XX_DEBUGBUS(A7XX_DBGBUS_VFDP_BR, 0x100)
  553. A7XX_DEBUGBUS(A7XX_DBGBUS_VFDP_BV, 0x100)
  554. A7XX_DEBUGBUS(A7XX_DBGBUS_VPC_BR, 0x100)
  555. A7XX_DEBUGBUS(A7XX_DBGBUS_VPC_BV, 0x100)
  556. A7XX_DEBUGBUS(A7XX_DBGBUS_TSE_BR, 0x100)
  557. A7XX_DEBUGBUS(A7XX_DBGBUS_TSE_BV, 0x100)
  558. A7XX_DEBUGBUS(A7XX_DBGBUS_RAS_BR, 0x100)
  559. A7XX_DEBUGBUS(A7XX_DBGBUS_RAS_BV, 0x100)
  560. A7XX_DEBUGBUS(A7XX_DBGBUS_VSC, 0x100)
  561. A7XX_DEBUGBUS(A7XX_DBGBUS_COM_0, 0x100)
  562. A7XX_DEBUGBUS(A7XX_DBGBUS_LRZ_BR, 0x100)
  563. A7XX_DEBUGBUS(A7XX_DBGBUS_LRZ_BV, 0x100)
  564. A7XX_DEBUGBUS(A7XX_DBGBUS_UFC_0, 0x100)
  565. A7XX_DEBUGBUS(A7XX_DBGBUS_UFC_1, 0x100)
  566. A7XX_DEBUGBUS(A7XX_DBGBUS_GMU_GX, 0x100)
  567. A7XX_DEBUGBUS(A7XX_DBGBUS_DBGC, 0x100)
  568. A7XX_DEBUGBUS(A7XX_DBGBUS_CX, 0x100)
  569. A7XX_DEBUGBUS(A7XX_DBGBUS_GMU_CX, 0x100)
  570. A7XX_DEBUGBUS(A7XX_DBGBUS_GPC_BR, 0x100)
  571. A7XX_DEBUGBUS(A7XX_DBGBUS_GPC_BV, 0x100)
  572. A7XX_DEBUGBUS(A7XX_DBGBUS_LARC, 0x100)
  573. A7XX_DEBUGBUS(A7XX_DBGBUS_HLSQ_SPTP, 0x100)
  574. A7XX_DEBUGBUS(A7XX_DBGBUS_RB_0, 0x100)
  575. A7XX_DEBUGBUS(A7XX_DBGBUS_RB_1, 0x100)
  576. A7XX_DEBUGBUS(A7XX_DBGBUS_RB_2, 0x100)
  577. A7XX_DEBUGBUS(A7XX_DBGBUS_RB_3, 0x100)
  578. A7XX_DEBUGBUS(A7XX_DBGBUS_RB_4, 0x100)
  579. A7XX_DEBUGBUS(A7XX_DBGBUS_RB_5, 0x100)
  580. A7XX_DEBUGBUS(A7XX_DBGBUS_UCHE_WRAPPER, 0x100)
  581. A7XX_DEBUGBUS(A7XX_DBGBUS_CCU_0, 0x100)
  582. A7XX_DEBUGBUS(A7XX_DBGBUS_CCU_1, 0x100)
  583. A7XX_DEBUGBUS(A7XX_DBGBUS_CCU_2, 0x100)
  584. A7XX_DEBUGBUS(A7XX_DBGBUS_CCU_3, 0x100)
  585. A7XX_DEBUGBUS(A7XX_DBGBUS_CCU_4, 0x100)
  586. A7XX_DEBUGBUS(A7XX_DBGBUS_CCU_5, 0x100)
  587. A7XX_DEBUGBUS(A7XX_DBGBUS_VFD_BR_0, 0x100)
  588. A7XX_DEBUGBUS(A7XX_DBGBUS_VFD_BR_1, 0x100)
  589. A7XX_DEBUGBUS(A7XX_DBGBUS_VFD_BR_2, 0x100)
  590. A7XX_DEBUGBUS(A7XX_DBGBUS_VFD_BR_3, 0x100)
  591. A7XX_DEBUGBUS(A7XX_DBGBUS_VFD_BR_4, 0x100)
  592. A7XX_DEBUGBUS(A7XX_DBGBUS_VFD_BR_5, 0x100)
  593. A7XX_DEBUGBUS(A7XX_DBGBUS_VFD_BR_6, 0x100)
  594. A7XX_DEBUGBUS(A7XX_DBGBUS_VFD_BR_7, 0x100)
  595. A7XX_DEBUGBUS(A7XX_DBGBUS_VFD_BV_0, 0x100)
  596. A7XX_DEBUGBUS(A7XX_DBGBUS_VFD_BV_1, 0x100)
  597. A7XX_DEBUGBUS(A7XX_DBGBUS_VFD_BV_2, 0x100)
  598. A7XX_DEBUGBUS(A7XX_DBGBUS_VFD_BV_3, 0x100)
  599. A7XX_DEBUGBUS(A7XX_DBGBUS_USP_0, 0x100)
  600. A7XX_DEBUGBUS(A7XX_DBGBUS_USP_1, 0x100)
  601. A7XX_DEBUGBUS(A7XX_DBGBUS_USP_2, 0x100)
  602. A7XX_DEBUGBUS(A7XX_DBGBUS_USP_3, 0x100)
  603. A7XX_DEBUGBUS(A7XX_DBGBUS_USP_4, 0x100)
  604. A7XX_DEBUGBUS(A7XX_DBGBUS_USP_5, 0x100)
  605. A7XX_DEBUGBUS(A7XX_DBGBUS_TP_0, 0x100)
  606. A7XX_DEBUGBUS(A7XX_DBGBUS_TP_1, 0x100)
  607. A7XX_DEBUGBUS(A7XX_DBGBUS_TP_2, 0x100)
  608. A7XX_DEBUGBUS(A7XX_DBGBUS_TP_3, 0x100)
  609. A7XX_DEBUGBUS(A7XX_DBGBUS_TP_4, 0x100)
  610. A7XX_DEBUGBUS(A7XX_DBGBUS_TP_5, 0x100)
  611. A7XX_DEBUGBUS(A7XX_DBGBUS_TP_6, 0x100)
  612. A7XX_DEBUGBUS(A7XX_DBGBUS_TP_7, 0x100)
  613. A7XX_DEBUGBUS(A7XX_DBGBUS_TP_8, 0x100)
  614. A7XX_DEBUGBUS(A7XX_DBGBUS_TP_9, 0x100)
  615. A7XX_DEBUGBUS(A7XX_DBGBUS_TP_10, 0x100)
  616. A7XX_DEBUGBUS(A7XX_DBGBUS_TP_11, 0x100)
  617. A7XX_DEBUGBUS(A7XX_DBGBUS_USPTP_0, 0x100)
  618. A7XX_DEBUGBUS(A7XX_DBGBUS_USPTP_1, 0x100)
  619. A7XX_DEBUGBUS(A7XX_DBGBUS_USPTP_2, 0x100)
  620. A7XX_DEBUGBUS(A7XX_DBGBUS_USPTP_3, 0x100)
  621. A7XX_DEBUGBUS(A7XX_DBGBUS_USPTP_4, 0x100)
  622. A7XX_DEBUGBUS(A7XX_DBGBUS_USPTP_5, 0x100)
  623. A7XX_DEBUGBUS(A7XX_DBGBUS_USPTP_6, 0x100)
  624. A7XX_DEBUGBUS(A7XX_DBGBUS_USPTP_7, 0x100)
  625. A7XX_DEBUGBUS(A7XX_DBGBUS_USPTP_8, 0x100)
  626. A7XX_DEBUGBUS(A7XX_DBGBUS_USPTP_9, 0x100)
  627. A7XX_DEBUGBUS(A7XX_DBGBUS_USPTP_10, 0x100)
  628. A7XX_DEBUGBUS(A7XX_DBGBUS_USPTP_11, 0x100)
  629. A7XX_DEBUGBUS(A7XX_DBGBUS_CCHE_0, 0x100)
  630. A7XX_DEBUGBUS(A7XX_DBGBUS_CCHE_1, 0x100)
  631. A7XX_DEBUGBUS(A7XX_DBGBUS_CCHE_2, 0x100)
  632. A7XX_DEBUGBUS(A7XX_DBGBUS_VPC_DSTR_0, 0x100)
  633. A7XX_DEBUGBUS(A7XX_DBGBUS_VPC_DSTR_1, 0x100)
  634. A7XX_DEBUGBUS(A7XX_DBGBUS_VPC_DSTR_2, 0x100)
  635. A7XX_DEBUGBUS(A7XX_DBGBUS_HLSQ_DP_STR_0, 0x100)
  636. A7XX_DEBUGBUS(A7XX_DBGBUS_HLSQ_DP_STR_1, 0x100)
  637. A7XX_DEBUGBUS(A7XX_DBGBUS_HLSQ_DP_STR_2, 0x100)
  638. A7XX_DEBUGBUS(A7XX_DBGBUS_HLSQ_DP_STR_3, 0x100)
  639. A7XX_DEBUGBUS(A7XX_DBGBUS_HLSQ_DP_STR_4, 0x100)
  640. A7XX_DEBUGBUS(A7XX_DBGBUS_HLSQ_DP_STR_5, 0x100)
  641. A7XX_DEBUGBUS(A7XX_DBGBUS_UFC_DSTR_0, 0x100)
  642. A7XX_DEBUGBUS(A7XX_DBGBUS_UFC_DSTR_1, 0x100)
  643. A7XX_DEBUGBUS(A7XX_DBGBUS_UFC_DSTR_2, 0x100)
  644. A7XX_DEBUGBUS(A7XX_DBGBUS_CGC_SUBCORE, 0x100)
  645. A7XX_DEBUGBUS(A7XX_DBGBUS_CGC_CORE, 0x100)
  646. };
  647. #define A7XX_NAME(enumval) [enumval] = #enumval
  648. static const char *a7xx_statetype_names[] = {
  649. A7XX_NAME(A7XX_TP0_NCTX_REG),
  650. A7XX_NAME(A7XX_TP0_CTX0_3D_CVS_REG),
  651. A7XX_NAME(A7XX_TP0_CTX0_3D_CPS_REG),
  652. A7XX_NAME(A7XX_TP0_CTX1_3D_CVS_REG),
  653. A7XX_NAME(A7XX_TP0_CTX1_3D_CPS_REG),
  654. A7XX_NAME(A7XX_TP0_CTX2_3D_CPS_REG),
  655. A7XX_NAME(A7XX_TP0_CTX3_3D_CPS_REG),
  656. A7XX_NAME(A7XX_TP0_TMO_DATA),
  657. A7XX_NAME(A7XX_TP0_SMO_DATA),
  658. A7XX_NAME(A7XX_TP0_MIPMAP_BASE_DATA),
  659. A7XX_NAME(A7XX_SP_NCTX_REG),
  660. A7XX_NAME(A7XX_SP_CTX0_3D_CVS_REG),
  661. A7XX_NAME(A7XX_SP_CTX0_3D_CPS_REG),
  662. A7XX_NAME(A7XX_SP_CTX1_3D_CVS_REG),
  663. A7XX_NAME(A7XX_SP_CTX1_3D_CPS_REG),
  664. A7XX_NAME(A7XX_SP_CTX2_3D_CPS_REG),
  665. A7XX_NAME(A7XX_SP_CTX3_3D_CPS_REG),
  666. A7XX_NAME(A7XX_SP_INST_DATA),
  667. A7XX_NAME(A7XX_SP_INST_DATA_1),
  668. A7XX_NAME(A7XX_SP_LB_0_DATA),
  669. A7XX_NAME(A7XX_SP_LB_1_DATA),
  670. A7XX_NAME(A7XX_SP_LB_2_DATA),
  671. A7XX_NAME(A7XX_SP_LB_3_DATA),
  672. A7XX_NAME(A7XX_SP_LB_4_DATA),
  673. A7XX_NAME(A7XX_SP_LB_5_DATA),
  674. A7XX_NAME(A7XX_SP_LB_6_DATA),
  675. A7XX_NAME(A7XX_SP_LB_7_DATA),
  676. A7XX_NAME(A7XX_SP_CB_RAM),
  677. A7XX_NAME(A7XX_SP_LB_13_DATA),
  678. A7XX_NAME(A7XX_SP_LB_14_DATA),
  679. A7XX_NAME(A7XX_SP_INST_TAG),
  680. A7XX_NAME(A7XX_SP_INST_DATA_2),
  681. A7XX_NAME(A7XX_SP_TMO_TAG),
  682. A7XX_NAME(A7XX_SP_SMO_TAG),
  683. A7XX_NAME(A7XX_SP_STATE_DATA),
  684. A7XX_NAME(A7XX_SP_HWAVE_RAM),
  685. A7XX_NAME(A7XX_SP_L0_INST_BUF),
  686. A7XX_NAME(A7XX_SP_LB_8_DATA),
  687. A7XX_NAME(A7XX_SP_LB_9_DATA),
  688. A7XX_NAME(A7XX_SP_LB_10_DATA),
  689. A7XX_NAME(A7XX_SP_LB_11_DATA),
  690. A7XX_NAME(A7XX_SP_LB_12_DATA),
  691. A7XX_NAME(A7XX_HLSQ_DATAPATH_DSTR_META),
  692. A7XX_NAME(A7XX_HLSQ_L2STC_TAG_RAM),
  693. A7XX_NAME(A7XX_HLSQ_L2STC_INFO_CMD),
  694. A7XX_NAME(A7XX_HLSQ_CVS_BE_CTXT_BUF_RAM_TAG),
  695. A7XX_NAME(A7XX_HLSQ_CPS_BE_CTXT_BUF_RAM_TAG),
  696. A7XX_NAME(A7XX_HLSQ_GFX_CVS_BE_CTXT_BUF_RAM),
  697. A7XX_NAME(A7XX_HLSQ_GFX_CPS_BE_CTXT_BUF_RAM),
  698. A7XX_NAME(A7XX_HLSQ_CHUNK_CVS_RAM),
  699. A7XX_NAME(A7XX_HLSQ_CHUNK_CPS_RAM),
  700. A7XX_NAME(A7XX_HLSQ_CHUNK_CVS_RAM_TAG),
  701. A7XX_NAME(A7XX_HLSQ_CHUNK_CPS_RAM_TAG),
  702. A7XX_NAME(A7XX_HLSQ_ICB_CVS_CB_BASE_TAG),
  703. A7XX_NAME(A7XX_HLSQ_ICB_CPS_CB_BASE_TAG),
  704. A7XX_NAME(A7XX_HLSQ_CVS_MISC_RAM),
  705. A7XX_NAME(A7XX_HLSQ_CPS_MISC_RAM),
  706. A7XX_NAME(A7XX_HLSQ_CPS_MISC_RAM_1),
  707. A7XX_NAME(A7XX_HLSQ_INST_RAM),
  708. A7XX_NAME(A7XX_HLSQ_GFX_CVS_CONST_RAM),
  709. A7XX_NAME(A7XX_HLSQ_GFX_CPS_CONST_RAM),
  710. A7XX_NAME(A7XX_HLSQ_CVS_MISC_RAM_TAG),
  711. A7XX_NAME(A7XX_HLSQ_CPS_MISC_RAM_TAG),
  712. A7XX_NAME(A7XX_HLSQ_INST_RAM_TAG),
  713. A7XX_NAME(A7XX_HLSQ_GFX_CVS_CONST_RAM_TAG),
  714. A7XX_NAME(A7XX_HLSQ_GFX_CPS_CONST_RAM_TAG),
  715. A7XX_NAME(A7XX_HLSQ_GFX_LOCAL_MISC_RAM),
  716. A7XX_NAME(A7XX_HLSQ_GFX_LOCAL_MISC_RAM_TAG),
  717. A7XX_NAME(A7XX_HLSQ_INST_RAM_1),
  718. A7XX_NAME(A7XX_HLSQ_STPROC_META),
  719. A7XX_NAME(A7XX_HLSQ_BV_BE_META),
  720. A7XX_NAME(A7XX_HLSQ_INST_RAM_2),
  721. A7XX_NAME(A7XX_HLSQ_DATAPATH_META),
  722. A7XX_NAME(A7XX_HLSQ_FRONTEND_META),
  723. A7XX_NAME(A7XX_HLSQ_INDIRECT_META),
  724. A7XX_NAME(A7XX_HLSQ_BACKEND_META),
  725. };
  726. static const char *a7xx_pipe_names[] = {
  727. A7XX_NAME(PIPE_NONE),
  728. A7XX_NAME(PIPE_BR),
  729. A7XX_NAME(PIPE_BV),
  730. A7XX_NAME(PIPE_LPAC),
  731. };
  732. static const char *a7xx_cluster_names[] = {
  733. A7XX_NAME(A7XX_CLUSTER_NONE),
  734. A7XX_NAME(A7XX_CLUSTER_FE),
  735. A7XX_NAME(A7XX_CLUSTER_SP_VS),
  736. A7XX_NAME(A7XX_CLUSTER_PC_VS),
  737. A7XX_NAME(A7XX_CLUSTER_GRAS),
  738. A7XX_NAME(A7XX_CLUSTER_SP_PS),
  739. A7XX_NAME(A7XX_CLUSTER_VPC_PS),
  740. A7XX_NAME(A7XX_CLUSTER_PS),
  741. };
  742. #endif