11707add8SJordan Crouse // SPDX-License-Identifier: GPL-2.0
2a5ab3176SSharat Masetty /* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved. */
31707add8SJordan Crouse 
41707add8SJordan Crouse #ifndef _A6XX_CRASH_DUMP_H_
51707add8SJordan Crouse #define _A6XX_CRASH_DUMP_H_
61707add8SJordan Crouse 
71707add8SJordan Crouse #include "a6xx.xml.h"
81707add8SJordan Crouse 
91707add8SJordan Crouse #define A6XX_NUM_CONTEXTS 2
101707add8SJordan Crouse #define A6XX_NUM_SHADER_BANKS 3
111707add8SJordan Crouse 
121707add8SJordan Crouse static const u32 a6xx_gras_cluster[] = {
131707add8SJordan Crouse 	0x8000, 0x8006, 0x8010, 0x8092, 0x8094, 0x809d, 0x80a0, 0x80a6,
141707add8SJordan Crouse 	0x80af, 0x80f1, 0x8100, 0x8107, 0x8109, 0x8109, 0x8110, 0x8110,
151707add8SJordan Crouse 	0x8400, 0x840b,
161707add8SJordan Crouse };
171707add8SJordan Crouse 
181707add8SJordan Crouse static const u32 a6xx_ps_cluster_rac[] = {
191707add8SJordan Crouse 	0x8800, 0x8806, 0x8809, 0x8811, 0x8818, 0x881e, 0x8820, 0x8865,
201707add8SJordan Crouse 	0x8870, 0x8879, 0x8880, 0x8889, 0x8890, 0x8891, 0x8898, 0x8898,
211707add8SJordan Crouse 	0x88c0, 0x88c1, 0x88d0, 0x88e3, 0x8900, 0x890c, 0x890f, 0x891a,
221707add8SJordan Crouse 	0x8c00, 0x8c01, 0x8c08, 0x8c10, 0x8c17, 0x8c1f, 0x8c26, 0x8c33,
231707add8SJordan Crouse };
241707add8SJordan Crouse 
251707add8SJordan Crouse static const u32 a6xx_ps_cluster_rbp[] = {
261707add8SJordan Crouse 	0x88f0, 0x88f3, 0x890d, 0x890e, 0x8927, 0x8928, 0x8bf0, 0x8bf1,
271707add8SJordan Crouse 	0x8c02, 0x8c07, 0x8c11, 0x8c16, 0x8c20, 0x8c25,
281707add8SJordan Crouse };
291707add8SJordan Crouse 
301707add8SJordan Crouse static const u32 a6xx_ps_cluster[] = {
311707add8SJordan Crouse 	0x9200, 0x9216, 0x9218, 0x9236, 0x9300, 0x9306,
321707add8SJordan Crouse };
331707add8SJordan Crouse 
341707add8SJordan Crouse static const u32 a6xx_fe_cluster[] = {
351707add8SJordan Crouse 	0x9300, 0x9306, 0x9800, 0x9806, 0x9b00, 0x9b07, 0xa000, 0xa009,
361707add8SJordan Crouse 	0xa00e, 0xa0ef, 0xa0f8, 0xa0f8,
371707add8SJordan Crouse };
381707add8SJordan Crouse 
391707add8SJordan Crouse static const u32 a6xx_pc_vs_cluster[] = {
401707add8SJordan Crouse 	0x9100, 0x9108, 0x9300, 0x9306, 0x9980, 0x9981, 0x9b00, 0x9b07,
411707add8SJordan Crouse };
421707add8SJordan Crouse 
431707add8SJordan Crouse #define CLUSTER_FE    0
441707add8SJordan Crouse #define CLUSTER_SP_VS 1
451707add8SJordan Crouse #define CLUSTER_PC_VS 2
461707add8SJordan Crouse #define CLUSTER_GRAS  3
471707add8SJordan Crouse #define CLUSTER_SP_PS 4
481707add8SJordan Crouse #define CLUSTER_PS    5
491707add8SJordan Crouse 
501707add8SJordan Crouse #define CLUSTER(_id, _reg, _sel_reg, _sel_val) \
511707add8SJordan Crouse 	{ .id = _id, .name = #_id,\
521707add8SJordan Crouse 		.registers = _reg, \
531707add8SJordan Crouse 		.count = ARRAY_SIZE(_reg), \
541707add8SJordan Crouse 		.sel_reg = _sel_reg, .sel_val = _sel_val }
551707add8SJordan Crouse 
561707add8SJordan Crouse static const struct a6xx_cluster {
571707add8SJordan Crouse 	u32 id;
581707add8SJordan Crouse 	const char *name;
591707add8SJordan Crouse 	const u32 *registers;
601707add8SJordan Crouse 	size_t count;
611707add8SJordan Crouse 	u32 sel_reg;
621707add8SJordan Crouse 	u32 sel_val;
631707add8SJordan Crouse } a6xx_clusters[] = {
641707add8SJordan Crouse 	CLUSTER(CLUSTER_GRAS, a6xx_gras_cluster, 0, 0),
651707add8SJordan Crouse 	CLUSTER(CLUSTER_PS, a6xx_ps_cluster_rac, REG_A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_CD, 0x0),
661707add8SJordan Crouse 	CLUSTER(CLUSTER_PS, a6xx_ps_cluster_rbp, REG_A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_CD, 0x9),
671707add8SJordan Crouse 	CLUSTER(CLUSTER_PS, a6xx_ps_cluster, 0, 0),
681707add8SJordan Crouse 	CLUSTER(CLUSTER_FE, a6xx_fe_cluster, 0, 0),
691707add8SJordan Crouse 	CLUSTER(CLUSTER_PC_VS, a6xx_pc_vs_cluster, 0, 0),
701707add8SJordan Crouse };
711707add8SJordan Crouse 
721707add8SJordan Crouse static const u32 a6xx_sp_vs_hlsq_cluster[] = {
731707add8SJordan Crouse 	0xb800, 0xb803, 0xb820, 0xb822,
741707add8SJordan Crouse };
751707add8SJordan Crouse 
761707add8SJordan Crouse static const u32 a6xx_sp_vs_sp_cluster[] = {
771707add8SJordan Crouse 	0xa800, 0xa824, 0xa830, 0xa83c, 0xa840, 0xa864, 0xa870, 0xa895,
781707add8SJordan Crouse 	0xa8a0, 0xa8af, 0xa8c0, 0xa8c3,
791707add8SJordan Crouse };
801707add8SJordan Crouse 
811707add8SJordan Crouse static const u32 a6xx_hlsq_duplicate_cluster[] = {
821707add8SJordan Crouse 	0xbb10, 0xbb11, 0xbb20, 0xbb29,
831707add8SJordan Crouse };
841707add8SJordan Crouse 
851707add8SJordan Crouse static const u32 a6xx_hlsq_2d_duplicate_cluster[] = {
861707add8SJordan Crouse 	0xbd80, 0xbd80,
871707add8SJordan Crouse };
881707add8SJordan Crouse 
891707add8SJordan Crouse static const u32 a6xx_sp_duplicate_cluster[] = {
901707add8SJordan Crouse 	0xab00, 0xab00, 0xab04, 0xab05, 0xab10, 0xab1b, 0xab20, 0xab20,
911707add8SJordan Crouse };
921707add8SJordan Crouse 
931707add8SJordan Crouse static const u32 a6xx_tp_duplicate_cluster[] = {
941707add8SJordan Crouse 	0xb300, 0xb307, 0xb309, 0xb309, 0xb380, 0xb382,
951707add8SJordan Crouse };
961707add8SJordan Crouse 
971707add8SJordan Crouse static const u32 a6xx_sp_ps_hlsq_cluster[] = {
981707add8SJordan Crouse 	0xb980, 0xb980, 0xb982, 0xb987, 0xb990, 0xb99b, 0xb9a0, 0xb9a2,
991707add8SJordan Crouse 	0xb9c0, 0xb9c9,
1001707add8SJordan Crouse };
1011707add8SJordan Crouse 
1021707add8SJordan Crouse static const u32 a6xx_sp_ps_hlsq_2d_cluster[] = {
1031707add8SJordan Crouse 	0xbd80, 0xbd80,
1041707add8SJordan Crouse };
1051707add8SJordan Crouse 
1061707add8SJordan Crouse static const u32 a6xx_sp_ps_sp_cluster[] = {
1071707add8SJordan Crouse 	0xa980, 0xa9a8, 0xa9b0, 0xa9bc, 0xa9d0, 0xa9d3, 0xa9e0, 0xa9f3,
1081707add8SJordan Crouse 	0xaa00, 0xaa00, 0xaa30, 0xaa31,
1091707add8SJordan Crouse };
1101707add8SJordan Crouse 
1111707add8SJordan Crouse static const u32 a6xx_sp_ps_sp_2d_cluster[] = {
1121707add8SJordan Crouse 	0xacc0, 0xacc0,
1131707add8SJordan Crouse };
1141707add8SJordan Crouse 
1151707add8SJordan Crouse static const u32 a6xx_sp_ps_tp_cluster[] = {
1161707add8SJordan Crouse 	0xb180, 0xb183, 0xb190, 0xb191,
1171707add8SJordan Crouse };
1181707add8SJordan Crouse 
1191707add8SJordan Crouse static const u32 a6xx_sp_ps_tp_2d_cluster[] = {
1201707add8SJordan Crouse 	0xb4c0, 0xb4d1,
1211707add8SJordan Crouse };
1221707add8SJordan Crouse 
1231707add8SJordan Crouse #define CLUSTER_DBGAHB(_id, _base, _type, _reg) \
1241707add8SJordan Crouse 	{ .name = #_id, .statetype = _type, .base = _base, \
1251707add8SJordan Crouse 		.registers = _reg, .count = ARRAY_SIZE(_reg) }
1261707add8SJordan Crouse 
1271707add8SJordan Crouse static const struct a6xx_dbgahb_cluster {
1281707add8SJordan Crouse 	const char *name;
1291707add8SJordan Crouse 	u32 statetype;
1301707add8SJordan Crouse 	u32 base;
1311707add8SJordan Crouse 	const u32 *registers;
1321707add8SJordan Crouse 	size_t count;
1331707add8SJordan Crouse } a6xx_dbgahb_clusters[] = {
1341707add8SJordan Crouse 	CLUSTER_DBGAHB(CLUSTER_SP_VS, 0x0002e000, 0x41, a6xx_sp_vs_hlsq_cluster),
1351707add8SJordan Crouse 	CLUSTER_DBGAHB(CLUSTER_SP_VS, 0x0002a000, 0x21, a6xx_sp_vs_sp_cluster),
1361707add8SJordan Crouse 	CLUSTER_DBGAHB(CLUSTER_SP_VS, 0x0002e000, 0x41, a6xx_hlsq_duplicate_cluster),
1371707add8SJordan Crouse 	CLUSTER_DBGAHB(CLUSTER_SP_VS, 0x0002f000, 0x45, a6xx_hlsq_2d_duplicate_cluster),
1381707add8SJordan Crouse 	CLUSTER_DBGAHB(CLUSTER_SP_VS, 0x0002a000, 0x21, a6xx_sp_duplicate_cluster),
1391707add8SJordan Crouse 	CLUSTER_DBGAHB(CLUSTER_SP_VS, 0x0002c000, 0x1, a6xx_tp_duplicate_cluster),
1401707add8SJordan Crouse 	CLUSTER_DBGAHB(CLUSTER_SP_PS, 0x0002e000, 0x42, a6xx_sp_ps_hlsq_cluster),
1411707add8SJordan Crouse 	CLUSTER_DBGAHB(CLUSTER_SP_PS, 0x0002f000, 0x46, a6xx_sp_ps_hlsq_2d_cluster),
1421707add8SJordan Crouse 	CLUSTER_DBGAHB(CLUSTER_SP_PS, 0x0002a000, 0x22, a6xx_sp_ps_sp_cluster),
1431707add8SJordan Crouse 	CLUSTER_DBGAHB(CLUSTER_SP_PS, 0x0002b000, 0x26, a6xx_sp_ps_sp_2d_cluster),
1441707add8SJordan Crouse 	CLUSTER_DBGAHB(CLUSTER_SP_PS, 0x0002c000, 0x2, a6xx_sp_ps_tp_cluster),
1451707add8SJordan Crouse 	CLUSTER_DBGAHB(CLUSTER_SP_PS, 0x0002d000, 0x6, a6xx_sp_ps_tp_2d_cluster),
1461707add8SJordan Crouse 	CLUSTER_DBGAHB(CLUSTER_SP_PS, 0x0002e000, 0x42, a6xx_hlsq_duplicate_cluster),
1471707add8SJordan Crouse 	CLUSTER_DBGAHB(CLUSTER_SP_PS, 0x0002a000, 0x22, a6xx_sp_duplicate_cluster),
1481707add8SJordan Crouse 	CLUSTER_DBGAHB(CLUSTER_SP_PS, 0x0002c000, 0x2, a6xx_tp_duplicate_cluster),
1491707add8SJordan Crouse };
1501707add8SJordan Crouse 
1511707add8SJordan Crouse static const u32 a6xx_hlsq_registers[] = {
1521707add8SJordan Crouse 	0xbe00, 0xbe01, 0xbe04, 0xbe05, 0xbe08, 0xbe09, 0xbe10, 0xbe15,
1531707add8SJordan Crouse 	0xbe20, 0xbe23,
1541707add8SJordan Crouse };
1551707add8SJordan Crouse 
1561707add8SJordan Crouse static const u32 a6xx_sp_registers[] = {
1571707add8SJordan Crouse 	0xae00, 0xae04, 0xae0c, 0xae0c, 0xae0f, 0xae2b, 0xae30, 0xae32,
1581707add8SJordan Crouse 	0xae35, 0xae35, 0xae3a, 0xae3f, 0xae50, 0xae52,
1591707add8SJordan Crouse };
1601707add8SJordan Crouse 
1611707add8SJordan Crouse static const u32 a6xx_tp_registers[] = {
1621707add8SJordan Crouse 	0xb600, 0xb601, 0xb604, 0xb605, 0xb610, 0xb61b, 0xb620, 0xb623,
1631707add8SJordan Crouse };
1641707add8SJordan Crouse 
1651707add8SJordan Crouse struct a6xx_registers {
1661707add8SJordan Crouse 	const u32 *registers;
1671707add8SJordan Crouse 	size_t count;
1681707add8SJordan Crouse 	u32 val0;
1691707add8SJordan Crouse 	u32 val1;
1701707add8SJordan Crouse };
1711707add8SJordan Crouse 
1721707add8SJordan Crouse #define HLSQ_DBG_REGS(_base, _type, _array) \
1731707add8SJordan Crouse 	{ .val0 = _base, .val1 = _type, .registers = _array, \
1741707add8SJordan Crouse 		.count = ARRAY_SIZE(_array), }
1751707add8SJordan Crouse 
1761707add8SJordan Crouse static const struct a6xx_registers a6xx_hlsq_reglist[] = {
1771707add8SJordan Crouse 	HLSQ_DBG_REGS(0x0002F800, 0x40, a6xx_hlsq_registers),
1781707add8SJordan Crouse 	HLSQ_DBG_REGS(0x0002B800, 0x20, a6xx_sp_registers),
1791707add8SJordan Crouse 	HLSQ_DBG_REGS(0x0002D800, 0x0, a6xx_tp_registers),
1801707add8SJordan Crouse };
1811707add8SJordan Crouse 
1821707add8SJordan Crouse #define SHADER(_type, _size) \
1831707add8SJordan Crouse 	{ .type = _type, .name = #_type, .size = _size }
1841707add8SJordan Crouse 
1851707add8SJordan Crouse static const struct a6xx_shader_block {
1861707add8SJordan Crouse 	const char *name;
1871707add8SJordan Crouse 	u32 type;
1881707add8SJordan Crouse 	u32 size;
1891707add8SJordan Crouse } a6xx_shader_blocks[] = {
1901707add8SJordan Crouse 	SHADER(A6XX_TP0_TMO_DATA, 0x200),
1911707add8SJordan Crouse 	SHADER(A6XX_TP0_SMO_DATA, 0x80),
1921707add8SJordan Crouse 	SHADER(A6XX_TP0_MIPMAP_BASE_DATA, 0x3c0),
1931707add8SJordan Crouse 	SHADER(A6XX_TP1_TMO_DATA, 0x200),
1941707add8SJordan Crouse 	SHADER(A6XX_TP1_SMO_DATA, 0x80),
1951707add8SJordan Crouse 	SHADER(A6XX_TP1_MIPMAP_BASE_DATA, 0x3c0),
1961707add8SJordan Crouse 	SHADER(A6XX_SP_INST_DATA, 0x800),
1971707add8SJordan Crouse 	SHADER(A6XX_SP_LB_0_DATA, 0x800),
1981707add8SJordan Crouse 	SHADER(A6XX_SP_LB_1_DATA, 0x800),
1991707add8SJordan Crouse 	SHADER(A6XX_SP_LB_2_DATA, 0x800),
2001707add8SJordan Crouse 	SHADER(A6XX_SP_LB_3_DATA, 0x800),
2011707add8SJordan Crouse 	SHADER(A6XX_SP_LB_4_DATA, 0x800),
2021707add8SJordan Crouse 	SHADER(A6XX_SP_LB_5_DATA, 0x200),
2031707add8SJordan Crouse 	SHADER(A6XX_SP_CB_BINDLESS_DATA, 0x2000),
2041707add8SJordan Crouse 	SHADER(A6XX_SP_CB_LEGACY_DATA, 0x280),
2051707add8SJordan Crouse 	SHADER(A6XX_SP_UAV_DATA, 0x80),
2061707add8SJordan Crouse 	SHADER(A6XX_SP_INST_TAG, 0x80),
2071707add8SJordan Crouse 	SHADER(A6XX_SP_CB_BINDLESS_TAG, 0x80),
2081707add8SJordan Crouse 	SHADER(A6XX_SP_TMO_UMO_TAG, 0x80),
2091707add8SJordan Crouse 	SHADER(A6XX_SP_SMO_TAG, 0x80),
2101707add8SJordan Crouse 	SHADER(A6XX_SP_STATE_DATA, 0x3f),
2111707add8SJordan Crouse 	SHADER(A6XX_HLSQ_CHUNK_CVS_RAM, 0x1c0),
2121707add8SJordan Crouse 	SHADER(A6XX_HLSQ_CHUNK_CPS_RAM, 0x280),
2131707add8SJordan Crouse 	SHADER(A6XX_HLSQ_CHUNK_CVS_RAM_TAG, 0x40),
2141707add8SJordan Crouse 	SHADER(A6XX_HLSQ_CHUNK_CPS_RAM_TAG, 0x40),
2151707add8SJordan Crouse 	SHADER(A6XX_HLSQ_ICB_CVS_CB_BASE_TAG, 0x4),
2161707add8SJordan Crouse 	SHADER(A6XX_HLSQ_ICB_CPS_CB_BASE_TAG, 0x4),
2171707add8SJordan Crouse 	SHADER(A6XX_HLSQ_CVS_MISC_RAM, 0x1c0),
2181707add8SJordan Crouse 	SHADER(A6XX_HLSQ_CPS_MISC_RAM, 0x580),
2191707add8SJordan Crouse 	SHADER(A6XX_HLSQ_INST_RAM, 0x800),
2201707add8SJordan Crouse 	SHADER(A6XX_HLSQ_GFX_CVS_CONST_RAM, 0x800),
2211707add8SJordan Crouse 	SHADER(A6XX_HLSQ_GFX_CPS_CONST_RAM, 0x800),
2221707add8SJordan Crouse 	SHADER(A6XX_HLSQ_CVS_MISC_RAM_TAG, 0x8),
2231707add8SJordan Crouse 	SHADER(A6XX_HLSQ_CPS_MISC_RAM_TAG, 0x4),
2241707add8SJordan Crouse 	SHADER(A6XX_HLSQ_INST_RAM_TAG, 0x80),
2251707add8SJordan Crouse 	SHADER(A6XX_HLSQ_GFX_CVS_CONST_RAM_TAG, 0xc),
2261707add8SJordan Crouse 	SHADER(A6XX_HLSQ_GFX_CPS_CONST_RAM_TAG, 0x10),
2271707add8SJordan Crouse 	SHADER(A6XX_HLSQ_PWR_REST_RAM, 0x28),
2281707add8SJordan Crouse 	SHADER(A6XX_HLSQ_PWR_REST_TAG, 0x14),
2291707add8SJordan Crouse 	SHADER(A6XX_HLSQ_DATAPATH_META, 0x40),
2301707add8SJordan Crouse 	SHADER(A6XX_HLSQ_FRONTEND_META, 0x40),
2311707add8SJordan Crouse 	SHADER(A6XX_HLSQ_INDIRECT_META, 0x40),
2321707add8SJordan Crouse };
2331707add8SJordan Crouse 
2341707add8SJordan Crouse static const u32 a6xx_rb_rac_registers[] = {
2351707add8SJordan Crouse 	0x8e04, 0x8e05, 0x8e07, 0x8e08, 0x8e10, 0x8e1c, 0x8e20, 0x8e25,
2361707add8SJordan Crouse 	0x8e28, 0x8e28, 0x8e2c, 0x8e2f, 0x8e50, 0x8e52,
2371707add8SJordan Crouse };
2381707add8SJordan Crouse 
2391707add8SJordan Crouse static const u32 a6xx_rb_rbp_registers[] = {
2401707add8SJordan Crouse 	0x8e01, 0x8e01, 0x8e0c, 0x8e0c, 0x8e3b, 0x8e3e, 0x8e40, 0x8e43,
2411707add8SJordan Crouse 	0x8e53, 0x8e5f, 0x8e70, 0x8e77,
2421707add8SJordan Crouse };
2431707add8SJordan Crouse 
2441707add8SJordan Crouse static const u32 a6xx_registers[] = {
2451707add8SJordan Crouse 	/* RBBM */
2461707add8SJordan Crouse 	0x0000, 0x0002, 0x0010, 0x0010, 0x0012, 0x0012, 0x0018, 0x001b,
2471707add8SJordan Crouse 	0x001e, 0x0032, 0x0038, 0x003c, 0x0042, 0x0042, 0x0044, 0x0044,
2481707add8SJordan Crouse 	0x0047, 0x0047, 0x0056, 0x0056, 0x00ad, 0x00ae, 0x00b0, 0x00fb,
2491707add8SJordan Crouse 	0x0100, 0x011d, 0x0200, 0x020d, 0x0218, 0x023d, 0x0400, 0x04f9,
2501707add8SJordan Crouse 	0x0500, 0x0500, 0x0505, 0x050b, 0x050e, 0x0511, 0x0533, 0x0533,
2511707add8SJordan Crouse 	0x0540, 0x0555,
2521707add8SJordan Crouse 	/* CP */
2531707add8SJordan Crouse 	0x0800, 0x0808, 0x0810, 0x0813, 0x0820, 0x0821, 0x0823, 0x0824,
2541707add8SJordan Crouse 	0x0826, 0x0827, 0x0830, 0x0833, 0x0840, 0x0843, 0x084f, 0x086f,
2551707add8SJordan Crouse 	0x0880, 0x088a, 0x08a0, 0x08ab, 0x08c0, 0x08c4, 0x08d0, 0x08dd,
2561707add8SJordan Crouse 	0x08f0, 0x08f3, 0x0900, 0x0903, 0x0908, 0x0911, 0x0928, 0x093e,
2571707add8SJordan Crouse 	0x0942, 0x094d, 0x0980, 0x0984, 0x098d, 0x0996, 0x0998, 0x099e,
2581707add8SJordan Crouse 	0x09a0, 0x09a6, 0x09a8, 0x09ae, 0x09b0, 0x09b1, 0x09c2, 0x09c8,
2591707add8SJordan Crouse 	0x0a00, 0x0a03,
2601707add8SJordan Crouse 	/* VSC */
2611707add8SJordan Crouse 	0x0c00, 0x0c04, 0x0c06, 0x0c06, 0x0c10, 0x0cd9, 0x0e00, 0x0e0e,
2621707add8SJordan Crouse 	/* UCHE */
2631707add8SJordan Crouse 	0x0e10, 0x0e13, 0x0e17, 0x0e19, 0x0e1c, 0x0e2b, 0x0e30, 0x0e32,
2641707add8SJordan Crouse 	0x0e38, 0x0e39,
2651707add8SJordan Crouse 	/* GRAS */
2661707add8SJordan Crouse 	0x8600, 0x8601, 0x8610, 0x861b, 0x8620, 0x8620, 0x8628, 0x862b,
2671707add8SJordan Crouse 	0x8630, 0x8637,
2681707add8SJordan Crouse 	/* VPC */
2691707add8SJordan Crouse 	0x9600, 0x9604, 0x9624, 0x9637,
2701707add8SJordan Crouse 	/* PC */
2711707add8SJordan Crouse 	0x9e00, 0x9e01, 0x9e03, 0x9e0e, 0x9e11, 0x9e16, 0x9e19, 0x9e19,
2721707add8SJordan Crouse 	0x9e1c, 0x9e1c, 0x9e20, 0x9e23, 0x9e30, 0x9e31, 0x9e34, 0x9e34,
2731707add8SJordan Crouse 	0x9e70, 0x9e72, 0x9e78, 0x9e79, 0x9e80, 0x9fff,
2741707add8SJordan Crouse 	/* VFD */
2751707add8SJordan Crouse 	0xa600, 0xa601, 0xa603, 0xa603, 0xa60a, 0xa60a, 0xa610, 0xa617,
2761707add8SJordan Crouse 	0xa630, 0xa630,
2771707add8SJordan Crouse };
2781707add8SJordan Crouse 
2791707add8SJordan Crouse #define REGS(_array, _sel_reg, _sel_val) \
2801707add8SJordan Crouse 	{ .registers = _array, .count = ARRAY_SIZE(_array), \
2811707add8SJordan Crouse 		.val0 = _sel_reg, .val1 = _sel_val }
2821707add8SJordan Crouse 
2831707add8SJordan Crouse static const struct a6xx_registers a6xx_reglist[] = {
2841707add8SJordan Crouse 	REGS(a6xx_registers, 0, 0),
2851707add8SJordan Crouse 	REGS(a6xx_rb_rac_registers, REG_A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_CD, 0),
2861707add8SJordan Crouse 	REGS(a6xx_rb_rbp_registers, REG_A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_CD, 9),
2871707add8SJordan Crouse };
2881707add8SJordan Crouse 
2891707add8SJordan Crouse static const u32 a6xx_ahb_registers[] = {
2901707add8SJordan Crouse 	/* RBBM_STATUS - RBBM_STATUS3 */
2911707add8SJordan Crouse 	0x210, 0x213,
2921707add8SJordan Crouse 	/* CP_STATUS_1 */
2931707add8SJordan Crouse 	0x825, 0x825,
2941707add8SJordan Crouse };
2951707add8SJordan Crouse 
2961707add8SJordan Crouse static const u32 a6xx_vbif_registers[] = {
2971707add8SJordan Crouse 	0x3000, 0x3007, 0x300c, 0x3014, 0x3018, 0x302d, 0x3030, 0x3031,
2981707add8SJordan Crouse 	0x3034, 0x3036, 0x303c, 0x303d, 0x3040, 0x3040, 0x3042, 0x3042,
2991707add8SJordan Crouse 	0x3049, 0x3049, 0x3058, 0x3058, 0x305a, 0x3061, 0x3064, 0x3068,
3001707add8SJordan Crouse 	0x306c, 0x306d, 0x3080, 0x3088, 0x308b, 0x308c, 0x3090, 0x3094,
3011707add8SJordan Crouse 	0x3098, 0x3098, 0x309c, 0x309c, 0x30c0, 0x30c0, 0x30c8, 0x30c8,
3021707add8SJordan Crouse 	0x30d0, 0x30d0, 0x30d8, 0x30d8, 0x30e0, 0x30e0, 0x3100, 0x3100,
3031707add8SJordan Crouse 	0x3108, 0x3108, 0x3110, 0x3110, 0x3118, 0x3118, 0x3120, 0x3120,
3041707add8SJordan Crouse 	0x3124, 0x3125, 0x3129, 0x3129, 0x3131, 0x3131, 0x3154, 0x3154,
3051707add8SJordan Crouse 	0x3156, 0x3156, 0x3158, 0x3158, 0x315a, 0x315a, 0x315c, 0x315c,
3061707add8SJordan Crouse 	0x315e, 0x315e, 0x3160, 0x3160, 0x3162, 0x3162, 0x340c, 0x340c,
3071707add8SJordan Crouse 	0x3410, 0x3410, 0x3800, 0x3801,
3081707add8SJordan Crouse };
3091707add8SJordan Crouse 
310a5ab3176SSharat Masetty static const u32 a6xx_gbif_registers[] = {
311a5ab3176SSharat Masetty 	0x3C00, 0X3C0B, 0X3C40, 0X3C47, 0X3CC0, 0X3CD1, 0xE3A, 0xE3A,
312a5ab3176SSharat Masetty };
313a5ab3176SSharat Masetty 
3141707add8SJordan Crouse static const struct a6xx_registers a6xx_ahb_reglist[] = {
3151707add8SJordan Crouse 	REGS(a6xx_ahb_registers, 0, 0),
3161707add8SJordan Crouse };
3171707add8SJordan Crouse 
318a5ab3176SSharat Masetty static const struct a6xx_registers a6xx_vbif_reglist =
319a5ab3176SSharat Masetty 			REGS(a6xx_vbif_registers, 0, 0);
320a5ab3176SSharat Masetty 
321a5ab3176SSharat Masetty static const struct a6xx_registers a6xx_gbif_reglist =
322a5ab3176SSharat Masetty 			REGS(a6xx_gbif_registers, 0, 0);
323a5ab3176SSharat Masetty 
3241707add8SJordan Crouse static const u32 a6xx_gmu_gx_registers[] = {
3251707add8SJordan Crouse 	/* GMU GX */
3261707add8SJordan Crouse 	0x0000, 0x0000, 0x0010, 0x0013, 0x0016, 0x0016, 0x0018, 0x001b,
3271707add8SJordan Crouse 	0x001e, 0x001e, 0x0020, 0x0023, 0x0026, 0x0026, 0x0028, 0x002b,
3281707add8SJordan Crouse 	0x002e, 0x002e, 0x0030, 0x0033, 0x0036, 0x0036, 0x0038, 0x003b,
3291707add8SJordan Crouse 	0x003e, 0x003e, 0x0040, 0x0043, 0x0046, 0x0046, 0x0080, 0x0084,
3301707add8SJordan Crouse 	0x0100, 0x012b, 0x0140, 0x0140,
3311707add8SJordan Crouse };
3321707add8SJordan Crouse 
3331707add8SJordan Crouse static const u32 a6xx_gmu_cx_registers[] = {
3341707add8SJordan Crouse 	/* GMU CX */
3351707add8SJordan Crouse 	0x4c00, 0x4c07, 0x4c10, 0x4c12, 0x4d00, 0x4d00, 0x4d07, 0x4d0a,
3361707add8SJordan Crouse 	0x5000, 0x5004, 0x5007, 0x5008, 0x500b, 0x500c, 0x500f, 0x501c,
3371707add8SJordan Crouse 	0x5024, 0x502a, 0x502d, 0x5030, 0x5040, 0x5053, 0x5087, 0x5089,
3381707add8SJordan Crouse 	0x50a0, 0x50a2, 0x50a4, 0x50af, 0x50c0, 0x50c3, 0x50d0, 0x50d0,
3391707add8SJordan Crouse 	0x50e4, 0x50e4, 0x50e8, 0x50ec, 0x5100, 0x5103, 0x5140, 0x5140,
3401707add8SJordan Crouse 	0x5142, 0x5144, 0x514c, 0x514d, 0x514f, 0x5151, 0x5154, 0x5154,
3411707add8SJordan Crouse 	0x5157, 0x5158, 0x515d, 0x515d, 0x5162, 0x5162, 0x5164, 0x5165,
3421707add8SJordan Crouse 	0x5180, 0x5186, 0x5190, 0x519e, 0x51c0, 0x51c0, 0x51c5, 0x51cc,
3431707add8SJordan Crouse 	0x51e0, 0x51e2, 0x51f0, 0x51f0, 0x5200, 0x5201,
3441707add8SJordan Crouse 	/* GPU RSCC */
3451707add8SJordan Crouse 	0x8c8c, 0x8c8c, 0x8d01, 0x8d02, 0x8f40, 0x8f42, 0x8f44, 0x8f47,
3461707add8SJordan Crouse 	0x8f4c, 0x8f87, 0x8fec, 0x8fef, 0x8ff4, 0x902f, 0x9094, 0x9097,
3471707add8SJordan Crouse 	0x909c, 0x90d7, 0x913c, 0x913f, 0x9144, 0x917f,
3481707add8SJordan Crouse 	/* GMU AO */
3491707add8SJordan Crouse 	0x9300, 0x9316, 0x9400, 0x9400,
3501707add8SJordan Crouse 	/* GPU CC */
3511707add8SJordan Crouse 	0x9800, 0x9812, 0x9840, 0x9852, 0x9c00, 0x9c04, 0x9c07, 0x9c0b,
3521707add8SJordan Crouse 	0x9c15, 0x9c1c, 0x9c1e, 0x9c2d, 0x9c3c, 0x9c3d, 0x9c3f, 0x9c40,
3531707add8SJordan Crouse 	0x9c42, 0x9c49, 0x9c58, 0x9c5a, 0x9d40, 0x9d5e, 0xa000, 0xa002,
3541707add8SJordan Crouse 	0xa400, 0xa402, 0xac00, 0xac02, 0xb000, 0xb002, 0xb400, 0xb402,
3551707add8SJordan Crouse 	0xb800, 0xb802,
3561707add8SJordan Crouse 	/* GPU CC ACD */
3571707add8SJordan Crouse 	0xbc00, 0xbc16, 0xbc20, 0xbc27,
3581707add8SJordan Crouse };
3591707add8SJordan Crouse 
3601707add8SJordan Crouse static const struct a6xx_registers a6xx_gmu_reglist[] = {
3611707add8SJordan Crouse 	REGS(a6xx_gmu_cx_registers, 0, 0),
3621707add8SJordan Crouse 	REGS(a6xx_gmu_gx_registers, 0, 0),
3631707add8SJordan Crouse };
3641707add8SJordan Crouse 
3651707add8SJordan Crouse static const struct a6xx_indexed_registers {
3661707add8SJordan Crouse 	const char *name;
3671707add8SJordan Crouse 	u32 addr;
3681707add8SJordan Crouse 	u32 data;
3691707add8SJordan Crouse 	u32 count;
3701707add8SJordan Crouse } a6xx_indexed_reglist[] = {
3711707add8SJordan Crouse 	{ "CP_SEQ_STAT", REG_A6XX_CP_SQE_STAT_ADDR,
3721707add8SJordan Crouse 		REG_A6XX_CP_SQE_STAT_DATA, 0x33 },
3731707add8SJordan Crouse 	{ "CP_DRAW_STATE", REG_A6XX_CP_DRAW_STATE_ADDR,
3741707add8SJordan Crouse 		REG_A6XX_CP_DRAW_STATE_DATA, 0x100 },
3751707add8SJordan Crouse 	{ "CP_UCODE_DBG_DATA", REG_A6XX_CP_SQE_UCODE_DBG_ADDR,
3761707add8SJordan Crouse 		REG_A6XX_CP_SQE_UCODE_DBG_DATA, 0x6000 },
3771707add8SJordan Crouse 	{ "CP_ROQ", REG_A6XX_CP_ROQ_DBG_ADDR,
3781707add8SJordan Crouse 		REG_A6XX_CP_ROQ_DBG_DATA, 0x400 },
3791707add8SJordan Crouse };
3801707add8SJordan Crouse 
3811707add8SJordan Crouse static const struct a6xx_indexed_registers a6xx_cp_mempool_indexed = {
382e6cada89SRob Clark 	"CP_MEMPOOL", REG_A6XX_CP_MEM_POOL_DBG_ADDR,
3831707add8SJordan Crouse 		REG_A6XX_CP_MEM_POOL_DBG_DATA, 0x2060,
3841707add8SJordan Crouse };
3851707add8SJordan Crouse 
3861707add8SJordan Crouse #define DEBUGBUS(_id, _count) { .id = _id, .name = #_id, .count = _count }
3871707add8SJordan Crouse 
3881707add8SJordan Crouse static const struct a6xx_debugbus_block {
3891707add8SJordan Crouse 	const char *name;
3901707add8SJordan Crouse 	u32 id;
3911707add8SJordan Crouse 	u32 count;
3921707add8SJordan Crouse } a6xx_debugbus_blocks[] = {
3931707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_CP, 0x100),
3941707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_RBBM, 0x100),
3951707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_HLSQ, 0x100),
3961707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_UCHE, 0x100),
3971707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_DPM, 0x100),
3981707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_TESS, 0x100),
3991707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_PC, 0x100),
4001707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_VFDP, 0x100),
4011707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_VPC, 0x100),
4021707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_TSE, 0x100),
4031707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_RAS, 0x100),
4041707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_VSC, 0x100),
4051707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_COM, 0x100),
4061707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_LRZ, 0x100),
4071707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_A2D, 0x100),
4081707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_CCUFCHE, 0x100),
4091707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_RBP, 0x100),
4101707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_DCS, 0x100),
4111707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_DBGC, 0x100),
4121707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_GMU_GX, 0x100),
4131707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_TPFCHE, 0x100),
4141707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_GPC, 0x100),
4151707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_LARC, 0x100),
4161707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_HLSQ_SPTP, 0x100),
4171707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_RB_0, 0x100),
4181707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_RB_1, 0x100),
4191707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_UCHE_WRAPPER, 0x100),
4201707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_CCU_0, 0x100),
4211707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_CCU_1, 0x100),
4221707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_VFD_0, 0x100),
4231707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_VFD_1, 0x100),
4241707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_VFD_2, 0x100),
4251707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_VFD_3, 0x100),
4261707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_SP_0, 0x100),
4271707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_SP_1, 0x100),
4281707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_TPL1_0, 0x100),
4291707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_TPL1_1, 0x100),
4301707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_TPL1_2, 0x100),
4311707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_TPL1_3, 0x100),
4321707add8SJordan Crouse };
4331707add8SJordan Crouse 
434a5ab3176SSharat Masetty static const struct a6xx_debugbus_block a6xx_gbif_debugbus_block =
435a5ab3176SSharat Masetty 			DEBUGBUS(A6XX_DBGBUS_VBIF, 0x100);
436a5ab3176SSharat Masetty 
4371707add8SJordan Crouse static const struct a6xx_debugbus_block a6xx_cx_debugbus_blocks[] = {
4381707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_GMU_CX, 0x100),
4391707add8SJordan Crouse 	DEBUGBUS(A6XX_DBGBUS_CX, 0x100),
4401707add8SJordan Crouse };
4411707add8SJordan Crouse 
4421707add8SJordan Crouse #endif
443