| /* SPDX-License-Identifier: GPL-2.0-only */ |
| /* |
| * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved. |
| * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. |
| */ |
| #ifndef __ADRENO_GEN7_SNAPSHOT_H |
| #define __ADRENO_GEN7_SNAPSHOT_H |
| |
| #include "adreno.h" |
| #include "adreno_gen7.h" |
| #include "kgsl_regmap.h" |
| |
| #define CLUSTER_NONE 0 |
| #define CLUSTER_FE 1 |
| #define CLUSTER_SP_VS 2 |
| #define CLUSTER_PC_VS 3 |
| #define CLUSTER_GRAS 4 |
| #define CLUSTER_SP_PS 5 |
| #define CLUSTER_VPC_PS 6 |
| #define CLUSTER_PS 7 |
| |
| #define HLSQ_STATE 0 |
| #define HLSQ_DP 1 |
| #define SP_TOP 2 |
| #define USPTP 3 |
| #define HLSQ_DP_STR 4 |
| |
| #define STATE_NON_CONTEXT 0 |
| #define STATE_TOGGLE_CTXT 1 |
| #define STATE_FORCE_CTXT_0 2 |
| #define STATE_FORCE_CTXT_1 3 |
| |
| #define GEN7_DEBUGBUS_BLOCK_SIZE 0x100 |
| |
| struct gen7_sel_reg { |
| unsigned int host_reg; |
| unsigned int cd_reg; |
| unsigned int val; |
| }; |
| |
| struct gen7_sptp_cluster_registers { |
| /* cluster_id: Cluster identifier */ |
| int cluster_id; |
| /* statetype: SP block state type for the cluster */ |
| int statetype; |
| /* pipe_id: Pipe identifier */ |
| int pipe_id; |
| /* context_id: Context identifier */ |
| int context_id; |
| /* location_id: Location identifier */ |
| int location_id; |
| /* regs: Pointer to the list of register pairs to read */ |
| const u32 *regs; |
| /* regbase: Dword offset of the register block in the GPu register space */ |
| unsigned int regbase; |
| /* offset: Internal variable used to track the crashdump state */ |
| unsigned int offset; |
| }; |
| |
| struct gen7_shader_block { |
| /* statetype: Type identifer for the block */ |
| u32 statetype; |
| /* size: Size of the block (in dwords) */ |
| u32 size; |
| /* num_sps: The SP id to dump */ |
| u32 num_sps; |
| /* num_usptps: The number of USPTPs to dump */; |
| u32 num_usptps; |
| /* pipe_id: Pipe identifier for the block data */ |
| u32 pipeid; |
| /* location: Location identifer for the block data */ |
| u32 location; |
| /* offset: The offset in the snasphot dump */ |
| u64 offset; |
| }; |
| |
| struct gen7_shader_block_info { |
| struct gen7_shader_block *block; |
| unsigned int sp_id; |
| unsigned int usptp; |
| u32 bank; |
| u64 offset; |
| }; |
| |
| struct gen7_reg_list { |
| const u32 *regs; |
| const struct gen7_sel_reg *sel; |
| u64 offset; |
| }; |
| |
| struct gen7_cp_indexed_reg { |
| u32 addr; |
| u32 data; |
| u32 size; |
| }; |
| |
| struct gen7_cluster_registers { |
| /* cluster_id: Cluster identifier */ |
| int cluster_id; |
| /* pipe_id: Pipe Identifier */ |
| int pipe_id; |
| /* context_id: one of STATE_ that identifies the context to dump */ |
| int context_id; |
| /* regs: Pointer to an array of register pairs */ |
| const u32 *regs; |
| /* sel: Pointer to a selector register to write before reading */ |
| const struct gen7_sel_reg *sel; |
| /* offset: Internal variable to track the state of the crashdump */ |
| unsigned int offset; |
| }; |
| |
| struct gen7_snapshot_block_list { |
| /* pre_crashdumper_regs : Registers which need to be dumped before CD runs */ |
| const u32 *pre_crashdumper_regs; |
| /* debugbus_blocks : List of debugbus blocks */ |
| const u32 *debugbus_blocks; |
| /* debugbus_blocks_len : Length of the debugbus list */ |
| size_t debugbus_blocks_len; |
| /* gbif_debugbus_blocks : List of GBIF debugbus blocks */ |
| const u32 *gbif_debugbus_blocks; |
| /* gbif_debugbus_blocks_len : Length of GBIF debugbus list */ |
| size_t gbif_debugbus_blocks_len; |
| /* cx_debugbus_blocks : List of CX debugbus blocks */ |
| const u32 *cx_debugbus_blocks; |
| /* cx_debugbus_blocks_len : Length of the CX debugbus list */ |
| size_t cx_debugbus_blocks_len; |
| /* external_core_regs : List of external core registers */ |
| const u32 **external_core_regs; |
| /* num_external_core_regs : length of external core registers list */ |
| size_t num_external_core_regs; |
| /* gmu_regs : List of GMU registers */ |
| const u32 *gmu_regs; |
| /* gmu_gx_regs : List of GMU GX registers */ |
| const u32 *gmu_gx_regs; |
| /* rscc_regs : List of RSCC registers */ |
| const u32 *rscc_regs; |
| /* reg_list : List of GPU internal registers */ |
| struct gen7_reg_list *reg_list; |
| /* shader_blocks : List of GPU shader memory */ |
| struct gen7_shader_block *shader_blocks; |
| /* num_shader_blocks : Length of the shader memory list */ |
| size_t num_shader_blocks; |
| /* cluster_registers : List of GPU cluster registers */ |
| struct gen7_cluster_registers *clusters; |
| /* num_clusters : Length of GPU cluster registers list */ |
| size_t num_clusters; |
| /* spstp_cluster_registers : List of GPU SPTP cluster registers */ |
| struct gen7_sptp_cluster_registers *sptp_clusters; |
| /* num_sptp_clusters : Length of GPU SPTP cluster registers list */ |
| size_t num_sptp_clusters; |
| /* post_crashdumper_regs : Registers which need to be dumped after CD runs */ |
| const u32 *post_crashdumper_regs; |
| /* index_registers : List of index_registers */ |
| struct gen7_cp_indexed_reg *index_registers; |
| /* index_registers_len : Length of the index registers */ |
| size_t index_registers_len; |
| }; |
| |
| struct gen7_trace_buffer_info { |
| u16 dbgc_ctrl; |
| u16 segment; |
| u16 granularity; |
| u16 ping_blk[TRACE_BUF_NUM_SIG]; |
| u16 ping_idx[TRACE_BUF_NUM_SIG]; |
| }; |
| |
| enum gen7_debugbus_ids { |
| DEBUGBUS_CP_0_0 = 1, |
| DEBUGBUS_CP_0_1 = 2, |
| DEBUGBUS_RBBM = 3, |
| DEBUGBUS_GBIF_GX = 5, |
| DEBUGBUS_GBIF_CX = 6, |
| DEBUGBUS_HLSQ = 7, |
| DEBUGBUS_UCHE_0 = 9, |
| DEBUGBUS_UCHE_1 = 10, |
| DEBUGBUS_TESS_BR = 13, |
| DEBUGBUS_TESS_BV = 14, |
| DEBUGBUS_PC_BR = 17, |
| DEBUGBUS_PC_BV = 18, |
| DEBUGBUS_VFDP_BR = 21, |
| DEBUGBUS_VFDP_BV = 22, |
| DEBUGBUS_VPC_BR = 25, |
| DEBUGBUS_VPC_BV = 26, |
| DEBUGBUS_TSE_BR = 29, |
| DEBUGBUS_TSE_BV = 30, |
| DEBUGBUS_RAS_BR = 33, |
| DEBUGBUS_RAS_BV = 34, |
| DEBUGBUS_VSC = 37, |
| DEBUGBUS_COM_0 = 39, |
| DEBUGBUS_LRZ_BR = 43, |
| DEBUGBUS_LRZ_BV = 44, |
| DEBUGBUS_UFC_0 = 47, |
| DEBUGBUS_UFC_1 = 48, |
| DEBUGBUS_GMU_GX = 55, |
| DEBUGBUS_DBGC = 59, |
| DEBUGBUS_CX = 60, |
| DEBUGBUS_GMU_CX = 61, |
| DEBUGBUS_GPC_BR = 62, |
| DEBUGBUS_GPC_BV = 63, |
| DEBUGBUS_LARC = 66, |
| DEBUGBUS_HLSQ_SPTP = 68, |
| DEBUGBUS_RB_0 = 70, |
| DEBUGBUS_RB_1 = 71, |
| DEBUGBUS_RB_2 = 72, |
| DEBUGBUS_RB_3 = 73, |
| DEBUGBUS_RB_4 = 74, |
| DEBUGBUS_RB_5 = 75, |
| DEBUGBUS_UCHE_WRAPPER = 102, |
| DEBUGBUS_CCU_0 = 106, |
| DEBUGBUS_CCU_1 = 107, |
| DEBUGBUS_CCU_2 = 108, |
| DEBUGBUS_CCU_3 = 109, |
| DEBUGBUS_CCU_4 = 110, |
| DEBUGBUS_CCU_5 = 111, |
| DEBUGBUS_VFD_BR_0 = 138, |
| DEBUGBUS_VFD_BR_1 = 139, |
| DEBUGBUS_VFD_BR_2 = 140, |
| DEBUGBUS_VFD_BR_3 = 141, |
| DEBUGBUS_VFD_BR_4 = 142, |
| DEBUGBUS_VFD_BR_5 = 143, |
| DEBUGBUS_VFD_BR_6 = 144, |
| DEBUGBUS_VFD_BR_7 = 145, |
| DEBUGBUS_VFD_BV_0 = 202, |
| DEBUGBUS_VFD_BV_1 = 203, |
| DEBUGBUS_VFD_BV_2 = 204, |
| DEBUGBUS_VFD_BV_3 = 205, |
| DEBUGBUS_USP_0 = 234, |
| DEBUGBUS_USP_1 = 235, |
| DEBUGBUS_USP_2 = 236, |
| DEBUGBUS_USP_3 = 237, |
| DEBUGBUS_USP_4 = 238, |
| DEBUGBUS_USP_5 = 239, |
| DEBUGBUS_TP_0 = 266, |
| DEBUGBUS_TP_1 = 267, |
| DEBUGBUS_TP_2 = 268, |
| DEBUGBUS_TP_3 = 269, |
| DEBUGBUS_TP_4 = 270, |
| DEBUGBUS_TP_5 = 271, |
| DEBUGBUS_TP_6 = 272, |
| DEBUGBUS_TP_7 = 273, |
| DEBUGBUS_TP_8 = 274, |
| DEBUGBUS_TP_9 = 275, |
| DEBUGBUS_TP_10 = 276, |
| DEBUGBUS_TP_11 = 277, |
| DEBUGBUS_USPTP_0 = 330, |
| DEBUGBUS_USPTP_1 = 331, |
| DEBUGBUS_USPTP_2 = 332, |
| DEBUGBUS_USPTP_3 = 333, |
| DEBUGBUS_USPTP_4 = 334, |
| DEBUGBUS_USPTP_5 = 335, |
| DEBUGBUS_USPTP_6 = 336, |
| DEBUGBUS_USPTP_7 = 337, |
| DEBUGBUS_USPTP_8 = 338, |
| DEBUGBUS_USPTP_9 = 339, |
| DEBUGBUS_USPTP_10 = 340, |
| DEBUGBUS_USPTP_11 = 341, |
| DEBUGBUS_CCHE_0 = 396, |
| DEBUGBUS_CCHE_1 = 397, |
| DEBUGBUS_CCHE_2 = 398, |
| DEBUGBUS_VPC_DSTR_0 = 408, |
| DEBUGBUS_VPC_DSTR_1 = 409, |
| DEBUGBUS_VPC_DSTR_2 = 410, |
| DEBUGBUS_HLSQ_DP_STR_0 = 411, |
| DEBUGBUS_HLSQ_DP_STR_1 = 412, |
| DEBUGBUS_HLSQ_DP_STR_2 = 413, |
| DEBUGBUS_HLSQ_DP_STR_3 = 414, |
| DEBUGBUS_HLSQ_DP_STR_4 = 415, |
| DEBUGBUS_HLSQ_DP_STR_5 = 416, |
| DEBUGBUS_UFC_DSTR_0 = 443, |
| DEBUGBUS_UFC_DSTR_1 = 444, |
| DEBUGBUS_UFC_DSTR_2 = 445, |
| DEBUGBUS_CGC_SUBCORE = 446, |
| DEBUGBUS_CGC_CORE = 447, |
| }; |
| |
| static const u32 gen7_gbif_debugbus_blocks[] = { |
| DEBUGBUS_GBIF_CX, |
| DEBUGBUS_GBIF_GX, |
| }; |
| |
| static const u32 gen7_cx_dbgc_debugbus_blocks[] = { |
| DEBUGBUS_GMU_CX, |
| DEBUGBUS_CX, |
| DEBUGBUS_GBIF_CX, |
| }; |
| |
| enum gen7_statetype_ids { |
| TP0_NCTX_REG = 0, |
| TP0_CTX0_3D_CVS_REG = 1, |
| TP0_CTX0_3D_CPS_REG = 2, |
| TP0_CTX1_3D_CVS_REG = 3, |
| TP0_CTX1_3D_CPS_REG = 4, |
| TP0_CTX2_3D_CPS_REG = 5, |
| TP0_CTX3_3D_CPS_REG = 6, |
| TP0_TMO_DATA = 9, |
| TP0_SMO_DATA = 10, |
| TP0_MIPMAP_BASE_DATA = 11, |
| SP_NCTX_REG = 32, |
| SP_CTX0_3D_CVS_REG = 33, |
| SP_CTX0_3D_CPS_REG = 34, |
| SP_CTX1_3D_CVS_REG = 35, |
| SP_CTX1_3D_CPS_REG = 36, |
| SP_CTX2_3D_CPS_REG = 37, |
| SP_CTX3_3D_CPS_REG = 38, |
| SP_INST_DATA = 39, |
| SP_INST_DATA_1 = 40, |
| SP_LB_0_DATA = 41, |
| SP_LB_1_DATA = 42, |
| SP_LB_2_DATA = 43, |
| SP_LB_3_DATA = 44, |
| SP_LB_4_DATA = 45, |
| SP_LB_5_DATA = 46, |
| SP_LB_6_DATA = 47, |
| SP_LB_7_DATA = 48, |
| SP_CB_RAM = 49, |
| SP_LB_13_DATA = 50, |
| SP_LB_14_DATA = 51, |
| SP_INST_TAG = 52, |
| SP_INST_DATA_2 = 53, |
| SP_TMO_TAG = 54, |
| SP_SMO_TAG = 55, |
| SP_STATE_DATA = 56, |
| SP_HWAVE_RAM = 57, |
| SP_L0_INST_BUF = 58, |
| SP_LB_8_DATA = 59, |
| SP_LB_9_DATA = 60, |
| SP_LB_10_DATA = 61, |
| SP_LB_11_DATA = 62, |
| SP_LB_12_DATA = 63, |
| HLSQ_DATAPATH_DSTR_META = 64, |
| HLSQ_L2STC_TAG_RAM = 67, |
| HLSQ_L2STC_INFO_CMD = 68, |
| HLSQ_CVS_BE_CTXT_BUF_RAM_TAG = 69, |
| HLSQ_CPS_BE_CTXT_BUF_RAM_TAG = 70, |
| HLSQ_GFX_CVS_BE_CTXT_BUF_RAM = 71, |
| HLSQ_GFX_CPS_BE_CTXT_BUF_RAM = 72, |
| HLSQ_CHUNK_CVS_RAM = 73, |
| HLSQ_CHUNK_CPS_RAM = 74, |
| HLSQ_CHUNK_CVS_RAM_TAG = 75, |
| HLSQ_CHUNK_CPS_RAM_TAG = 76, |
| HLSQ_ICB_CVS_CB_BASE_TAG = 77, |
| HLSQ_ICB_CPS_CB_BASE_TAG = 78, |
| HLSQ_CVS_MISC_RAM = 79, |
| HLSQ_CPS_MISC_RAM = 80, |
| HLSQ_CPS_MISC_RAM_1 = 81, |
| HLSQ_INST_RAM = 82, |
| HLSQ_GFX_CVS_CONST_RAM = 83, |
| HLSQ_GFX_CPS_CONST_RAM = 84, |
| HLSQ_CVS_MISC_RAM_TAG = 85, |
| HLSQ_CPS_MISC_RAM_TAG = 86, |
| HLSQ_INST_RAM_TAG = 87, |
| HLSQ_GFX_CVS_CONST_RAM_TAG = 88, |
| HLSQ_GFX_CPS_CONST_RAM_TAG = 89, |
| HLSQ_GFX_LOCAL_MISC_RAM = 90, |
| HLSQ_GFX_LOCAL_MISC_RAM_TAG = 91, |
| HLSQ_INST_RAM_1 = 92, |
| HLSQ_STPROC_META = 93, |
| HLSQ_BV_BE_META = 94, |
| HLSQ_INST_RAM_2 = 95, |
| HLSQ_DATAPATH_META = 96, |
| HLSQ_FRONTEND_META = 97, |
| HLSQ_INDIRECT_META = 98, |
| HLSQ_BACKEND_META = 99, |
| }; |
| |
| static struct gen7_cp_indexed_reg gen7_cp_indexed_reg_list[] = { |
| { GEN7_CP_SQE_STAT_ADDR, GEN7_CP_SQE_STAT_DATA, 0x40}, |
| { GEN7_CP_DRAW_STATE_ADDR, GEN7_CP_DRAW_STATE_DATA, 0x100}, |
| { GEN7_CP_SQE_UCODE_DBG_ADDR, GEN7_CP_SQE_UCODE_DBG_DATA, 0x8000}, |
| { GEN7_CP_BV_SQE_STAT_ADDR, GEN7_CP_BV_SQE_STAT_DATA, 0x40}, |
| { GEN7_CP_BV_DRAW_STATE_ADDR, GEN7_CP_BV_DRAW_STATE_DATA, 0x100}, |
| { GEN7_CP_BV_SQE_UCODE_DBG_ADDR, GEN7_CP_BV_SQE_UCODE_DBG_DATA, 0x8000}, |
| { GEN7_CP_SQE_AC_STAT_ADDR, GEN7_CP_SQE_AC_STAT_DATA, 0x40}, |
| { GEN7_CP_LPAC_DRAW_STATE_ADDR, GEN7_CP_LPAC_DRAW_STATE_DATA, 0x100}, |
| { GEN7_CP_SQE_AC_UCODE_DBG_ADDR, GEN7_CP_SQE_AC_UCODE_DBG_DATA, 0x8000}, |
| { GEN7_CP_LPAC_FIFO_DBG_ADDR, GEN7_CP_LPAC_FIFO_DBG_DATA, 0x40}, |
| }; |
| #endif /*_ADRENO_GEN7_SNAPSHOT_H */ |