/*
 *
 * (C) COPYRIGHT 2016-2018 ARM Limited. All rights reserved.
 *
 * This program is free software and is provided to you under the terms of the
 * GNU General Public License version 2 as published by the Free Software
 * Foundation, and any use by you of this program is subject to the terms
 * of such GNU licence.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, you can access it online at
 * http://www.gnu.org/licenses/gpl-2.0.html.
 *
 * SPDX-License-Identifier: GPL-2.0
 *
 */

/*
 * This header was autogenerated, it should not be edited.
 */

#ifndef _KBASE_GATOR_HWCNT_NAMES_TSIX_H_
#define _KBASE_GATOR_HWCNT_NAMES_TSIX_H_

static const char * const hardware_counters_mali_tSIx[] = {
	/* Performance counters for the Job Manager */
	"",
	"",
	"",
	"",
	"TSIx_MESSAGES_SENT",
	"TSIx_MESSAGES_RECEIVED",
	"TSIx_GPU_ACTIVE",
	"TSIx_IRQ_ACTIVE",
	"TSIx_JS0_JOBS",
	"TSIx_JS0_TASKS",
	"TSIx_JS0_ACTIVE",
	"",
	"TSIx_JS0_WAIT_READ",
	"TSIx_JS0_WAIT_ISSUE",
	"TSIx_JS0_WAIT_DEPEND",
	"TSIx_JS0_WAIT_FINISH",
	"TSIx_JS1_JOBS",
	"TSIx_JS1_TASKS",
	"TSIx_JS1_ACTIVE",
	"",
	"TSIx_JS1_WAIT_READ",
	"TSIx_JS1_WAIT_ISSUE",
	"TSIx_JS1_WAIT_DEPEND",
	"TSIx_JS1_WAIT_FINISH",
	"TSIx_JS2_JOBS",
	"TSIx_JS2_TASKS",
	"TSIx_JS2_ACTIVE",
	"",
	"TSIx_JS2_WAIT_READ",
	"TSIx_JS2_WAIT_ISSUE",
	"TSIx_JS2_WAIT_DEPEND",
	"TSIx_JS2_WAIT_FINISH",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",

	/* Performance counters for the Tiler */
	"",
	"",
	"",
	"",
	"TSIx_TILER_ACTIVE",
	"TSIx_JOBS_PROCESSED",
	"TSIx_TRIANGLES",
	"TSIx_LINES",
	"TSIx_POINTS",
	"TSIx_FRONT_FACING",
	"TSIx_BACK_FACING",
	"TSIx_PRIM_VISIBLE",
	"TSIx_PRIM_CULLED",
	"TSIx_PRIM_CLIPPED",
	"TSIx_PRIM_SAT_CULLED",
	"TSIx_BIN_ALLOC_INIT",
	"TSIx_BIN_ALLOC_OVERFLOW",
	"TSIx_BUS_READ",
	"",
	"TSIx_BUS_WRITE",
	"TSIx_LOADING_DESC",
	"TSIx_IDVS_POS_SHAD_REQ",
	"TSIx_IDVS_POS_SHAD_WAIT",
	"TSIx_IDVS_POS_SHAD_STALL",
	"TSIx_IDVS_POS_FIFO_FULL",
	"TSIx_PREFETCH_STALL",
	"TSIx_VCACHE_HIT",
	"TSIx_VCACHE_MISS",
	"TSIx_VCACHE_LINE_WAIT",
	"TSIx_VFETCH_POS_READ_WAIT",
	"TSIx_VFETCH_VERTEX_WAIT",
	"TSIx_VFETCH_STALL",
	"TSIx_PRIMASSY_STALL",
	"TSIx_BBOX_GEN_STALL",
	"TSIx_IDVS_VBU_HIT",
	"TSIx_IDVS_VBU_MISS",
	"TSIx_IDVS_VBU_LINE_DEALLOCATE",
	"TSIx_IDVS_VAR_SHAD_REQ",
	"TSIx_IDVS_VAR_SHAD_STALL",
	"TSIx_BINNER_STALL",
	"TSIx_ITER_STALL",
	"TSIx_COMPRESS_MISS",
	"TSIx_COMPRESS_STALL",
	"TSIx_PCACHE_HIT",
	"TSIx_PCACHE_MISS",
	"TSIx_PCACHE_MISS_STALL",
	"TSIx_PCACHE_EVICT_STALL",
	"TSIx_PMGR_PTR_WR_STALL",
	"TSIx_PMGR_PTR_RD_STALL",
	"TSIx_PMGR_CMD_WR_STALL",
	"TSIx_WRBUF_ACTIVE",
	"TSIx_WRBUF_HIT",
	"TSIx_WRBUF_MISS",
	"TSIx_WRBUF_NO_FREE_LINE_STALL",
	"TSIx_WRBUF_NO_AXI_ID_STALL",
	"TSIx_WRBUF_AXI_STALL",
	"",
	"",
	"",
	"TSIx_UTLB_TRANS",
	"TSIx_UTLB_TRANS_HIT",
	"TSIx_UTLB_TRANS_STALL",
	"TSIx_UTLB_TRANS_MISS_DELAY",
	"TSIx_UTLB_MMU_REQ",

	/* Performance counters for the Shader Core */
	"",
	"",
	"",
	"",
	"TSIx_FRAG_ACTIVE",
	"TSIx_FRAG_PRIMITIVES",
	"TSIx_FRAG_PRIM_RAST",
	"TSIx_FRAG_FPK_ACTIVE",
	"TSIx_FRAG_STARVING",
	"TSIx_FRAG_WARPS",
	"TSIx_FRAG_PARTIAL_WARPS",
	"TSIx_FRAG_QUADS_RAST",
	"TSIx_FRAG_QUADS_EZS_TEST",
	"TSIx_FRAG_QUADS_EZS_UPDATE",
	"TSIx_FRAG_QUADS_EZS_KILL",
	"TSIx_FRAG_LZS_TEST",
	"TSIx_FRAG_LZS_KILL",
	"",
	"TSIx_FRAG_PTILES",
	"TSIx_FRAG_TRANS_ELIM",
	"TSIx_QUAD_FPK_KILLER",
	"",
	"TSIx_COMPUTE_ACTIVE",
	"TSIx_COMPUTE_TASKS",
	"TSIx_COMPUTE_WARPS",
	"TSIx_COMPUTE_STARVING",
	"TSIx_EXEC_CORE_ACTIVE",
	"TSIx_EXEC_ACTIVE",
	"TSIx_EXEC_INSTR_COUNT",
	"TSIx_EXEC_INSTR_DIVERGED",
	"TSIx_EXEC_INSTR_STARVING",
	"TSIx_ARITH_INSTR_SINGLE_FMA",
	"TSIx_ARITH_INSTR_DOUBLE",
	"TSIx_ARITH_INSTR_MSG",
	"TSIx_ARITH_INSTR_MSG_ONLY",
	"TSIx_TEX_MSGI_NUM_QUADS",
	"TSIx_TEX_DFCH_NUM_PASSES",
	"TSIx_TEX_DFCH_NUM_PASSES_MISS",
	"TSIx_TEX_DFCH_NUM_PASSES_MIP_MAP",
	"TSIx_TEX_TIDX_NUM_SPLIT_MIP_MAP",
	"TSIx_TEX_TFCH_NUM_LINES_FETCHED",
	"TSIx_TEX_TFCH_NUM_LINES_FETCHED_BLOCK",
	"TSIx_TEX_TFCH_NUM_OPERATIONS",
	"TSIx_TEX_FILT_NUM_OPERATIONS",
	"TSIx_LS_MEM_READ_FULL",
	"TSIx_LS_MEM_READ_SHORT",
	"TSIx_LS_MEM_WRITE_FULL",
	"TSIx_LS_MEM_WRITE_SHORT",
	"TSIx_LS_MEM_ATOMIC",
	"TSIx_VARY_INSTR",
	"TSIx_VARY_SLOT_32",
	"TSIx_VARY_SLOT_16",
	"TSIx_ATTR_INSTR",
	"TSIx_ARITH_INSTR_FP_MUL",
	"TSIx_BEATS_RD_FTC",
	"TSIx_BEATS_RD_FTC_EXT",
	"TSIx_BEATS_RD_LSC",
	"TSIx_BEATS_RD_LSC_EXT",
	"TSIx_BEATS_RD_TEX",
	"TSIx_BEATS_RD_TEX_EXT",
	"TSIx_BEATS_RD_OTHER",
	"TSIx_BEATS_WR_LSC_OTHER",
	"TSIx_BEATS_WR_TIB",
	"TSIx_BEATS_WR_LSC_WB",

	/* Performance counters for the Memory System */
	"",
	"",
	"",
	"",
	"TSIx_MMU_REQUESTS",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"TSIx_L2_RD_MSG_IN",
	"TSIx_L2_RD_MSG_IN_STALL",
	"TSIx_L2_WR_MSG_IN",
	"TSIx_L2_WR_MSG_IN_STALL",
	"TSIx_L2_SNP_MSG_IN",
	"TSIx_L2_SNP_MSG_IN_STALL",
	"TSIx_L2_RD_MSG_OUT",
	"TSIx_L2_RD_MSG_OUT_STALL",
	"TSIx_L2_WR_MSG_OUT",
	"TSIx_L2_ANY_LOOKUP",
	"TSIx_L2_READ_LOOKUP",
	"TSIx_L2_WRITE_LOOKUP",
	"TSIx_L2_EXT_SNOOP_LOOKUP",
	"TSIx_L2_EXT_READ",
	"TSIx_L2_EXT_READ_NOSNP",
	"TSIx_L2_EXT_READ_UNIQUE",
	"TSIx_L2_EXT_READ_BEATS",
	"TSIx_L2_EXT_AR_STALL",
	"TSIx_L2_EXT_AR_CNT_Q1",
	"TSIx_L2_EXT_AR_CNT_Q2",
	"TSIx_L2_EXT_AR_CNT_Q3",
	"TSIx_L2_EXT_RRESP_0_127",
	"TSIx_L2_EXT_RRESP_128_191",
	"TSIx_L2_EXT_RRESP_192_255",
	"TSIx_L2_EXT_RRESP_256_319",
	"TSIx_L2_EXT_RRESP_320_383",
	"TSIx_L2_EXT_WRITE",
	"TSIx_L2_EXT_WRITE_NOSNP_FULL",
	"TSIx_L2_EXT_WRITE_NOSNP_PTL",
	"TSIx_L2_EXT_WRITE_SNP_FULL",
	"TSIx_L2_EXT_WRITE_SNP_PTL",
	"TSIx_L2_EXT_WRITE_BEATS",
	"TSIx_L2_EXT_W_STALL",
	"TSIx_L2_EXT_AW_CNT_Q1",
	"TSIx_L2_EXT_AW_CNT_Q2",
	"TSIx_L2_EXT_AW_CNT_Q3",
	"TSIx_L2_EXT_SNOOP",
	"TSIx_L2_EXT_SNOOP_STALL",
	"TSIx_L2_EXT_SNOOP_RESP_CLEAN",
	"TSIx_L2_EXT_SNOOP_RESP_DATA",
	"TSIx_L2_EXT_SNOOP_INTERNAL",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
};

#endif /* _KBASE_GATOR_HWCNT_NAMES_TSIX_H_ */
