/*
 * Copyright (c) 2017-2018 Arm Limited.
 *
 * SPDX-License-Identifier: MIT
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to
 * deal in the Software without restriction, including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 * sell copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
#ifndef ARM_COMPUTE_TEST_HWC_NAMES
#define ARM_COMPUTE_TEST_HWC_NAMES

#ifndef DOXYGEN_SKIP_THIS

namespace mali_userspace
{
enum MaliCounterBlockName
{
    MALI_NAME_BLOCK_JM     = 0,
    MALI_NAME_BLOCK_TILER  = 1,
    MALI_NAME_BLOCK_SHADER = 2,
    MALI_NAME_BLOCK_MMU    = 3
};

enum
{
    MALI_NAME_BLOCK_SIZE = 64
};

/*
     * "Short names" for hardware counters used by Streamline. Counters names are
     * stored in accordance with their memory layout in the binary counter block
     * emitted by the Mali GPU. Each "master" in the GPU emits a fixed-size block
     * of 64 counters, and each GPU implements the same set of "masters" although
     * the counters each master exposes within its block of 64 may vary.
     *
     * Counters which are an empty string are simply "holes" in the counter memory
     * where no counter exists.
     */

static const char *const hardware_counters_mali_t60x[] =
{
    /* Job Manager */
    "",
    "",
    "",
    "",
    "T60x_MESSAGES_SENT",
    "T60x_MESSAGES_RECEIVED",
    "T60x_GPU_ACTIVE",
    "T60x_IRQ_ACTIVE",
    "T60x_JS0_JOBS",
    "T60x_JS0_TASKS",
    "T60x_JS0_ACTIVE",
    "",
    "T60x_JS0_WAIT_READ",
    "T60x_JS0_WAIT_ISSUE",
    "T60x_JS0_WAIT_DEPEND",
    "T60x_JS0_WAIT_FINISH",
    "T60x_JS1_JOBS",
    "T60x_JS1_TASKS",
    "T60x_JS1_ACTIVE",
    "",
    "T60x_JS1_WAIT_READ",
    "T60x_JS1_WAIT_ISSUE",
    "T60x_JS1_WAIT_DEPEND",
    "T60x_JS1_WAIT_FINISH",
    "T60x_JS2_JOBS",
    "T60x_JS2_TASKS",
    "T60x_JS2_ACTIVE",
    "",
    "T60x_JS2_WAIT_READ",
    "T60x_JS2_WAIT_ISSUE",
    "T60x_JS2_WAIT_DEPEND",
    "T60x_JS2_WAIT_FINISH",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",

    /*Tiler */
    "",
    "",
    "",
    "T60x_TI_JOBS_PROCESSED",
    "T60x_TI_TRIANGLES",
    "T60x_TI_QUADS",
    "T60x_TI_POLYGONS",
    "T60x_TI_POINTS",
    "T60x_TI_LINES",
    "T60x_TI_VCACHE_HIT",
    "T60x_TI_VCACHE_MISS",
    "T60x_TI_FRONT_FACING",
    "T60x_TI_BACK_FACING",
    "T60x_TI_PRIM_VISIBLE",
    "T60x_TI_PRIM_CULLED",
    "T60x_TI_PRIM_CLIPPED",
    "T60x_TI_LEVEL0",
    "T60x_TI_LEVEL1",
    "T60x_TI_LEVEL2",
    "T60x_TI_LEVEL3",
    "T60x_TI_LEVEL4",
    "T60x_TI_LEVEL5",
    "T60x_TI_LEVEL6",
    "T60x_TI_LEVEL7",
    "T60x_TI_COMMAND_1",
    "T60x_TI_COMMAND_2",
    "T60x_TI_COMMAND_3",
    "T60x_TI_COMMAND_4",
    "T60x_TI_COMMAND_4_7",
    "T60x_TI_COMMAND_8_15",
    "T60x_TI_COMMAND_16_63",
    "T60x_TI_COMMAND_64",
    "T60x_TI_COMPRESS_IN",
    "T60x_TI_COMPRESS_OUT",
    "T60x_TI_COMPRESS_FLUSH",
    "T60x_TI_TIMESTAMPS",
    "T60x_TI_PCACHE_HIT",
    "T60x_TI_PCACHE_MISS",
    "T60x_TI_PCACHE_LINE",
    "T60x_TI_PCACHE_STALL",
    "T60x_TI_WRBUF_HIT",
    "T60x_TI_WRBUF_MISS",
    "T60x_TI_WRBUF_LINE",
    "T60x_TI_WRBUF_PARTIAL",
    "T60x_TI_WRBUF_STALL",
    "T60x_TI_ACTIVE",
    "T60x_TI_LOADING_DESC",
    "T60x_TI_INDEX_WAIT",
    "T60x_TI_INDEX_RANGE_WAIT",
    "T60x_TI_VERTEX_WAIT",
    "T60x_TI_PCACHE_WAIT",
    "T60x_TI_WRBUF_WAIT",
    "T60x_TI_BUS_READ",
    "T60x_TI_BUS_WRITE",
    "",
    "",
    "",
    "",
    "",
    "T60x_TI_UTLB_STALL",
    "T60x_TI_UTLB_REPLAY_MISS",
    "T60x_TI_UTLB_REPLAY_FULL",
    "T60x_TI_UTLB_NEW_MISS",
    "T60x_TI_UTLB_HIT",

    /* Shader Core */
    "",
    "",
    "",
    "",
    "T60x_FRAG_ACTIVE",
    "T60x_FRAG_PRIMITIVES",
    "T60x_FRAG_PRIMITIVES_DROPPED",
    "T60x_FRAG_CYCLES_DESC",
    "T60x_FRAG_CYCLES_PLR",
    "T60x_FRAG_CYCLES_VERT",
    "T60x_FRAG_CYCLES_TRISETUP",
    "T60x_FRAG_CYCLES_RAST",
    "T60x_FRAG_THREADS",
    "T60x_FRAG_DUMMY_THREADS",
    "T60x_FRAG_QUADS_RAST",
    "T60x_FRAG_QUADS_EZS_TEST",
    "T60x_FRAG_QUADS_EZS_KILLED",
    "T60x_FRAG_THREADS_LZS_TEST",
    "T60x_FRAG_THREADS_LZS_KILLED",
    "T60x_FRAG_CYCLES_NO_TILE",
    "T60x_FRAG_NUM_TILES",
    "T60x_FRAG_TRANS_ELIM",
    "T60x_COMPUTE_ACTIVE",
    "T60x_COMPUTE_TASKS",
    "T60x_COMPUTE_THREADS",
    "T60x_COMPUTE_CYCLES_DESC",
    "T60x_TRIPIPE_ACTIVE",
    "T60x_ARITH_WORDS",
    "T60x_ARITH_CYCLES_REG",
    "T60x_ARITH_CYCLES_L0",
    "T60x_ARITH_FRAG_DEPEND",
    "T60x_LS_WORDS",
    "T60x_LS_ISSUES",
    "T60x_LS_RESTARTS",
    "T60x_LS_REISSUES_MISS",
    "T60x_LS_REISSUES_VD",
    "T60x_LS_REISSUE_ATTRIB_MISS",
    "T60x_LS_NO_WB",
    "T60x_TEX_WORDS",
    "T60x_TEX_BUBBLES",
    "T60x_TEX_WORDS_L0",
    "T60x_TEX_WORDS_DESC",
    "T60x_TEX_ISSUES",
    "T60x_TEX_RECIRC_FMISS",
    "T60x_TEX_RECIRC_DESC",
    "T60x_TEX_RECIRC_MULTI",
    "T60x_TEX_RECIRC_PMISS",
    "T60x_TEX_RECIRC_CONF",
    "T60x_LSC_READ_HITS",
    "T60x_LSC_READ_MISSES",
    "T60x_LSC_WRITE_HITS",
    "T60x_LSC_WRITE_MISSES",
    "T60x_LSC_ATOMIC_HITS",
    "T60x_LSC_ATOMIC_MISSES",
    "T60x_LSC_LINE_FETCHES",
    "T60x_LSC_DIRTY_LINE",
    "T60x_LSC_SNOOPS",
    "T60x_AXI_TLB_STALL",
    "T60x_AXI_TLB_MISS",
    "T60x_AXI_TLB_TRANSACTION",
    "T60x_LS_TLB_MISS",
    "T60x_LS_TLB_HIT",
    "T60x_AXI_BEATS_READ",
    "T60x_AXI_BEATS_WRITTEN",

    /*L2 and MMU */
    "",
    "",
    "",
    "",
    "T60x_MMU_HIT",
    "T60x_MMU_NEW_MISS",
    "T60x_MMU_REPLAY_FULL",
    "T60x_MMU_REPLAY_MISS",
    "T60x_MMU_TABLE_WALK",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "T60x_UTLB_HIT",
    "T60x_UTLB_NEW_MISS",
    "T60x_UTLB_REPLAY_FULL",
    "T60x_UTLB_REPLAY_MISS",
    "T60x_UTLB_STALL",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "T60x_L2_EXT_WRITE_BEATS",
    "T60x_L2_EXT_READ_BEATS",
    "T60x_L2_ANY_LOOKUP",
    "T60x_L2_READ_LOOKUP",
    "T60x_L2_SREAD_LOOKUP",
    "T60x_L2_READ_REPLAY",
    "T60x_L2_READ_SNOOP",
    "T60x_L2_READ_HIT",
    "T60x_L2_CLEAN_MISS",
    "T60x_L2_WRITE_LOOKUP",
    "T60x_L2_SWRITE_LOOKUP",
    "T60x_L2_WRITE_REPLAY",
    "T60x_L2_WRITE_SNOOP",
    "T60x_L2_WRITE_HIT",
    "T60x_L2_EXT_READ_FULL",
    "T60x_L2_EXT_READ_HALF",
    "T60x_L2_EXT_WRITE_FULL",
    "T60x_L2_EXT_WRITE_HALF",
    "T60x_L2_EXT_READ",
    "T60x_L2_EXT_READ_LINE",
    "T60x_L2_EXT_WRITE",
    "T60x_L2_EXT_WRITE_LINE",
    "T60x_L2_EXT_WRITE_SMALL",
    "T60x_L2_EXT_BARRIER",
    "T60x_L2_EXT_AR_STALL",
    "T60x_L2_EXT_R_BUF_FULL",
    "T60x_L2_EXT_RD_BUF_FULL",
    "T60x_L2_EXT_R_RAW",
    "T60x_L2_EXT_W_STALL",
    "T60x_L2_EXT_W_BUF_FULL",
    "T60x_L2_EXT_R_W_HAZARD",
    "T60x_L2_TAG_HAZARD",
    "T60x_L2_SNOOP_FULL",
    "T60x_L2_REPLAY_FULL"
};
static const char *const hardware_counters_mali_t62x[] =
{
    /* Job Manager */
    "",
    "",
    "",
    "",
    "T62x_MESSAGES_SENT",
    "T62x_MESSAGES_RECEIVED",
    "T62x_GPU_ACTIVE",
    "T62x_IRQ_ACTIVE",
    "T62x_JS0_JOBS",
    "T62x_JS0_TASKS",
    "T62x_JS0_ACTIVE",
    "",
    "T62x_JS0_WAIT_READ",
    "T62x_JS0_WAIT_ISSUE",
    "T62x_JS0_WAIT_DEPEND",
    "T62x_JS0_WAIT_FINISH",
    "T62x_JS1_JOBS",
    "T62x_JS1_TASKS",
    "T62x_JS1_ACTIVE",
    "",
    "T62x_JS1_WAIT_READ",
    "T62x_JS1_WAIT_ISSUE",
    "T62x_JS1_WAIT_DEPEND",
    "T62x_JS1_WAIT_FINISH",
    "T62x_JS2_JOBS",
    "T62x_JS2_TASKS",
    "T62x_JS2_ACTIVE",
    "",
    "T62x_JS2_WAIT_READ",
    "T62x_JS2_WAIT_ISSUE",
    "T62x_JS2_WAIT_DEPEND",
    "T62x_JS2_WAIT_FINISH",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",

    /*Tiler */
    "",
    "",
    "",
    "T62x_TI_JOBS_PROCESSED",
    "T62x_TI_TRIANGLES",
    "T62x_TI_QUADS",
    "T62x_TI_POLYGONS",
    "T62x_TI_POINTS",
    "T62x_TI_LINES",
    "T62x_TI_VCACHE_HIT",
    "T62x_TI_VCACHE_MISS",
    "T62x_TI_FRONT_FACING",
    "T62x_TI_BACK_FACING",
    "T62x_TI_PRIM_VISIBLE",
    "T62x_TI_PRIM_CULLED",
    "T62x_TI_PRIM_CLIPPED",
    "T62x_TI_LEVEL0",
    "T62x_TI_LEVEL1",
    "T62x_TI_LEVEL2",
    "T62x_TI_LEVEL3",
    "T62x_TI_LEVEL4",
    "T62x_TI_LEVEL5",
    "T62x_TI_LEVEL6",
    "T62x_TI_LEVEL7",
    "T62x_TI_COMMAND_1",
    "T62x_TI_COMMAND_2",
    "T62x_TI_COMMAND_3",
    "T62x_TI_COMMAND_4",
    "T62x_TI_COMMAND_5_7",
    "T62x_TI_COMMAND_8_15",
    "T62x_TI_COMMAND_16_63",
    "T62x_TI_COMMAND_64",
    "T62x_TI_COMPRESS_IN",
    "T62x_TI_COMPRESS_OUT",
    "T62x_TI_COMPRESS_FLUSH",
    "T62x_TI_TIMESTAMPS",
    "T62x_TI_PCACHE_HIT",
    "T62x_TI_PCACHE_MISS",
    "T62x_TI_PCACHE_LINE",
    "T62x_TI_PCACHE_STALL",
    "T62x_TI_WRBUF_HIT",
    "T62x_TI_WRBUF_MISS",
    "T62x_TI_WRBUF_LINE",
    "T62x_TI_WRBUF_PARTIAL",
    "T62x_TI_WRBUF_STALL",
    "T62x_TI_ACTIVE",
    "T62x_TI_LOADING_DESC",
    "T62x_TI_INDEX_WAIT",
    "T62x_TI_INDEX_RANGE_WAIT",
    "T62x_TI_VERTEX_WAIT",
    "T62x_TI_PCACHE_WAIT",
    "T62x_TI_WRBUF_WAIT",
    "T62x_TI_BUS_READ",
    "T62x_TI_BUS_WRITE",
    "",
    "",
    "",
    "",
    "",
    "T62x_TI_UTLB_STALL",
    "T62x_TI_UTLB_REPLAY_MISS",
    "T62x_TI_UTLB_REPLAY_FULL",
    "T62x_TI_UTLB_NEW_MISS",
    "T62x_TI_UTLB_HIT",

    /* Shader Core */
    "",
    "",
    "",
    "T62x_SHADER_CORE_ACTIVE",
    "T62x_FRAG_ACTIVE",
    "T62x_FRAG_PRIMITIVES",
    "T62x_FRAG_PRIMITIVES_DROPPED",
    "T62x_FRAG_CYCLES_DESC",
    "T62x_FRAG_CYCLES_FPKQ_ACTIVE",
    "T62x_FRAG_CYCLES_VERT",
    "T62x_FRAG_CYCLES_TRISETUP",
    "T62x_FRAG_CYCLES_EZS_ACTIVE",
    "T62x_FRAG_THREADS",
    "T62x_FRAG_DUMMY_THREADS",
    "T62x_FRAG_QUADS_RAST",
    "T62x_FRAG_QUADS_EZS_TEST",
    "T62x_FRAG_QUADS_EZS_KILLED",
    "T62x_FRAG_THREADS_LZS_TEST",
    "T62x_FRAG_THREADS_LZS_KILLED",
    "T62x_FRAG_CYCLES_NO_TILE",
    "T62x_FRAG_NUM_TILES",
    "T62x_FRAG_TRANS_ELIM",
    "T62x_COMPUTE_ACTIVE",
    "T62x_COMPUTE_TASKS",
    "T62x_COMPUTE_THREADS",
    "T62x_COMPUTE_CYCLES_DESC",
    "T62x_TRIPIPE_ACTIVE",
    "T62x_ARITH_WORDS",
    "T62x_ARITH_CYCLES_REG",
    "T62x_ARITH_CYCLES_L0",
    "T62x_ARITH_FRAG_DEPEND",
    "T62x_LS_WORDS",
    "T62x_LS_ISSUES",
    "T62x_LS_RESTARTS",
    "T62x_LS_REISSUES_MISS",
    "T62x_LS_REISSUES_VD",
    "T62x_LS_REISSUE_ATTRIB_MISS",
    "T62x_LS_NO_WB",
    "T62x_TEX_WORDS",
    "T62x_TEX_BUBBLES",
    "T62x_TEX_WORDS_L0",
    "T62x_TEX_WORDS_DESC",
    "T62x_TEX_ISSUES",
    "T62x_TEX_RECIRC_FMISS",
    "T62x_TEX_RECIRC_DESC",
    "T62x_TEX_RECIRC_MULTI",
    "T62x_TEX_RECIRC_PMISS",
    "T62x_TEX_RECIRC_CONF",
    "T62x_LSC_READ_HITS",
    "T62x_LSC_READ_MISSES",
    "T62x_LSC_WRITE_HITS",
    "T62x_LSC_WRITE_MISSES",
    "T62x_LSC_ATOMIC_HITS",
    "T62x_LSC_ATOMIC_MISSES",
    "T62x_LSC_LINE_FETCHES",
    "T62x_LSC_DIRTY_LINE",
    "T62x_LSC_SNOOPS",
    "T62x_AXI_TLB_STALL",
    "T62x_AXI_TLB_MISS",
    "T62x_AXI_TLB_TRANSACTION",
    "T62x_LS_TLB_MISS",
    "T62x_LS_TLB_HIT",
    "T62x_AXI_BEATS_READ",
    "T62x_AXI_BEATS_WRITTEN",

    /*L2 and MMU */
    "",
    "",
    "",
    "",
    "T62x_MMU_HIT",
    "T62x_MMU_NEW_MISS",
    "T62x_MMU_REPLAY_FULL",
    "T62x_MMU_REPLAY_MISS",
    "T62x_MMU_TABLE_WALK",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "T62x_UTLB_HIT",
    "T62x_UTLB_NEW_MISS",
    "T62x_UTLB_REPLAY_FULL",
    "T62x_UTLB_REPLAY_MISS",
    "T62x_UTLB_STALL",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "T62x_L2_EXT_WRITE_BEATS",
    "T62x_L2_EXT_READ_BEATS",
    "T62x_L2_ANY_LOOKUP",
    "T62x_L2_READ_LOOKUP",
    "T62x_L2_SREAD_LOOKUP",
    "T62x_L2_READ_REPLAY",
    "T62x_L2_READ_SNOOP",
    "T62x_L2_READ_HIT",
    "T62x_L2_CLEAN_MISS",
    "T62x_L2_WRITE_LOOKUP",
    "T62x_L2_SWRITE_LOOKUP",
    "T62x_L2_WRITE_REPLAY",
    "T62x_L2_WRITE_SNOOP",
    "T62x_L2_WRITE_HIT",
    "T62x_L2_EXT_READ_FULL",
    "T62x_L2_EXT_READ_HALF",
    "T62x_L2_EXT_WRITE_FULL",
    "T62x_L2_EXT_WRITE_HALF",
    "T62x_L2_EXT_READ",
    "T62x_L2_EXT_READ_LINE",
    "T62x_L2_EXT_WRITE",
    "T62x_L2_EXT_WRITE_LINE",
    "T62x_L2_EXT_WRITE_SMALL",
    "T62x_L2_EXT_BARRIER",
    "T62x_L2_EXT_AR_STALL",
    "T62x_L2_EXT_R_BUF_FULL",
    "T62x_L2_EXT_RD_BUF_FULL",
    "T62x_L2_EXT_R_RAW",
    "T62x_L2_EXT_W_STALL",
    "T62x_L2_EXT_W_BUF_FULL",
    "T62x_L2_EXT_R_W_HAZARD",
    "T62x_L2_TAG_HAZARD",
    "T62x_L2_SNOOP_FULL",
    "T62x_L2_REPLAY_FULL"
};

static const char *const hardware_counters_mali_t72x[] =
{
    /* Job Manager */
    "",
    "",
    "",
    "",
    "T72x_GPU_ACTIVE",
    "T72x_IRQ_ACTIVE",
    "T72x_JS0_JOBS",
    "T72x_JS0_TASKS",
    "T72x_JS0_ACTIVE",
    "T72x_JS1_JOBS",
    "T72x_JS1_TASKS",
    "T72x_JS1_ACTIVE",
    "T72x_JS2_JOBS",
    "T72x_JS2_TASKS",
    "T72x_JS2_ACTIVE",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",

    /*Tiler */
    "",
    "",
    "",
    "T72x_TI_JOBS_PROCESSED",
    "T72x_TI_TRIANGLES",
    "T72x_TI_QUADS",
    "T72x_TI_POLYGONS",
    "T72x_TI_POINTS",
    "T72x_TI_LINES",
    "T72x_TI_FRONT_FACING",
    "T72x_TI_BACK_FACING",
    "T72x_TI_PRIM_VISIBLE",
    "T72x_TI_PRIM_CULLED",
    "T72x_TI_PRIM_CLIPPED",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "T72x_TI_ACTIVE",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",

    /* Shader Core */
    "",
    "",
    "",
    "",
    "T72x_FRAG_ACTIVE",
    "T72x_FRAG_PRIMITIVES",
    "T72x_FRAG_PRIMITIVES_DROPPED",
    "T72x_FRAG_THREADS",
    "T72x_FRAG_DUMMY_THREADS",
    "T72x_FRAG_QUADS_RAST",
    "T72x_FRAG_QUADS_EZS_TEST",
    "T72x_FRAG_QUADS_EZS_KILLED",
    "T72x_FRAG_THREADS_LZS_TEST",
    "T72x_FRAG_THREADS_LZS_KILLED",
    "T72x_FRAG_CYCLES_NO_TILE",
    "T72x_FRAG_NUM_TILES",
    "T72x_FRAG_TRANS_ELIM",
    "T72x_COMPUTE_ACTIVE",
    "T72x_COMPUTE_TASKS",
    "T72x_COMPUTE_THREADS",
    "T72x_TRIPIPE_ACTIVE",
    "T72x_ARITH_WORDS",
    "T72x_ARITH_CYCLES_REG",
    "T72x_LS_WORDS",
    "T72x_LS_ISSUES",
    "T72x_LS_RESTARTS",
    "T72x_LS_REISSUES_MISS",
    "T72x_TEX_WORDS",
    "T72x_TEX_BUBBLES",
    "T72x_TEX_ISSUES",
    "T72x_LSC_READ_HITS",
    "T72x_LSC_READ_MISSES",
    "T72x_LSC_WRITE_HITS",
    "T72x_LSC_WRITE_MISSES",
    "T72x_LSC_ATOMIC_HITS",
    "T72x_LSC_ATOMIC_MISSES",
    "T72x_LSC_LINE_FETCHES",
    "T72x_LSC_DIRTY_LINE",
    "T72x_LSC_SNOOPS",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",

    /*L2 and MMU */
    "",
    "",
    "",
    "",
    "T72x_L2_EXT_WRITE_BEAT",
    "T72x_L2_EXT_READ_BEAT",
    "T72x_L2_READ_SNOOP",
    "T72x_L2_READ_HIT",
    "T72x_L2_WRITE_SNOOP",
    "T72x_L2_WRITE_HIT",
    "T72x_L2_EXT_WRITE_SMALL",
    "T72x_L2_EXT_BARRIER",
    "T72x_L2_EXT_AR_STALL",
    "T72x_L2_EXT_W_STALL",
    "T72x_L2_SNOOP_FULL",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    ""
};

static const char *const hardware_counters_mali_t76x[] =
{
    /* Job Manager */
    "",
    "",
    "",
    "",
    "T76x_MESSAGES_SENT",
    "T76x_MESSAGES_RECEIVED",
    "T76x_GPU_ACTIVE",
    "T76x_IRQ_ACTIVE",
    "T76x_JS0_JOBS",
    "T76x_JS0_TASKS",
    "T76x_JS0_ACTIVE",
    "",
    "T76x_JS0_WAIT_READ",
    "T76x_JS0_WAIT_ISSUE",
    "T76x_JS0_WAIT_DEPEND",
    "T76x_JS0_WAIT_FINISH",
    "T76x_JS1_JOBS",
    "T76x_JS1_TASKS",
    "T76x_JS1_ACTIVE",
    "",
    "T76x_JS1_WAIT_READ",
    "T76x_JS1_WAIT_ISSUE",
    "T76x_JS1_WAIT_DEPEND",
    "T76x_JS1_WAIT_FINISH",
    "T76x_JS2_JOBS",
    "T76x_JS2_TASKS",
    "T76x_JS2_ACTIVE",
    "",
    "T76x_JS2_WAIT_READ",
    "T76x_JS2_WAIT_ISSUE",
    "T76x_JS2_WAIT_DEPEND",
    "T76x_JS2_WAIT_FINISH",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",

    /*Tiler */
    "",
    "",
    "",
    "T76x_TI_JOBS_PROCESSED",
    "T76x_TI_TRIANGLES",
    "T76x_TI_QUADS",
    "T76x_TI_POLYGONS",
    "T76x_TI_POINTS",
    "T76x_TI_LINES",
    "T76x_TI_VCACHE_HIT",
    "T76x_TI_VCACHE_MISS",
    "T76x_TI_FRONT_FACING",
    "T76x_TI_BACK_FACING",
    "T76x_TI_PRIM_VISIBLE",
    "T76x_TI_PRIM_CULLED",
    "T76x_TI_PRIM_CLIPPED",
    "T76x_TI_LEVEL0",
    "T76x_TI_LEVEL1",
    "T76x_TI_LEVEL2",
    "T76x_TI_LEVEL3",
    "T76x_TI_LEVEL4",
    "T76x_TI_LEVEL5",
    "T76x_TI_LEVEL6",
    "T76x_TI_LEVEL7",
    "T76x_TI_COMMAND_1",
    "T76x_TI_COMMAND_2",
    "T76x_TI_COMMAND_3",
    "T76x_TI_COMMAND_4",
    "T76x_TI_COMMAND_5_7",
    "T76x_TI_COMMAND_8_15",
    "T76x_TI_COMMAND_16_63",
    "T76x_TI_COMMAND_64",
    "T76x_TI_COMPRESS_IN",
    "T76x_TI_COMPRESS_OUT",
    "T76x_TI_COMPRESS_FLUSH",
    "T76x_TI_TIMESTAMPS",
    "T76x_TI_PCACHE_HIT",
    "T76x_TI_PCACHE_MISS",
    "T76x_TI_PCACHE_LINE",
    "T76x_TI_PCACHE_STALL",
    "T76x_TI_WRBUF_HIT",
    "T76x_TI_WRBUF_MISS",
    "T76x_TI_WRBUF_LINE",
    "T76x_TI_WRBUF_PARTIAL",
    "T76x_TI_WRBUF_STALL",
    "T76x_TI_ACTIVE",
    "T76x_TI_LOADING_DESC",
    "T76x_TI_INDEX_WAIT",
    "T76x_TI_INDEX_RANGE_WAIT",
    "T76x_TI_VERTEX_WAIT",
    "T76x_TI_PCACHE_WAIT",
    "T76x_TI_WRBUF_WAIT",
    "T76x_TI_BUS_READ",
    "T76x_TI_BUS_WRITE",
    "",
    "",
    "",
    "",
    "",
    "T76x_TI_UTLB_HIT",
    "T76x_TI_UTLB_NEW_MISS",
    "T76x_TI_UTLB_REPLAY_FULL",
    "T76x_TI_UTLB_REPLAY_MISS",
    "T76x_TI_UTLB_STALL",

    /* Shader Core */
    "",
    "",
    "",
    "",
    "T76x_FRAG_ACTIVE",
    "T76x_FRAG_PRIMITIVES",
    "T76x_FRAG_PRIMITIVES_DROPPED",
    "T76x_FRAG_CYCLES_DESC",
    "T76x_FRAG_CYCLES_FPKQ_ACTIVE",
    "T76x_FRAG_CYCLES_VERT",
    "T76x_FRAG_CYCLES_TRISETUP",
    "T76x_FRAG_CYCLES_EZS_ACTIVE",
    "T76x_FRAG_THREADS",
    "T76x_FRAG_DUMMY_THREADS",
    "T76x_FRAG_QUADS_RAST",
    "T76x_FRAG_QUADS_EZS_TEST",
    "T76x_FRAG_QUADS_EZS_KILLED",
    "T76x_FRAG_THREADS_LZS_TEST",
    "T76x_FRAG_THREADS_LZS_KILLED",
    "T76x_FRAG_CYCLES_NO_TILE",
    "T76x_FRAG_NUM_TILES",
    "T76x_FRAG_TRANS_ELIM",
    "T76x_COMPUTE_ACTIVE",
    "T76x_COMPUTE_TASKS",
    "T76x_COMPUTE_THREADS",
    "T76x_COMPUTE_CYCLES_DESC",
    "T76x_TRIPIPE_ACTIVE",
    "T76x_ARITH_WORDS",
    "T76x_ARITH_CYCLES_REG",
    "T76x_ARITH_CYCLES_L0",
    "T76x_ARITH_FRAG_DEPEND",
    "T76x_LS_WORDS",
    "T76x_LS_ISSUES",
    "T76x_LS_REISSUE_ATTR",
    "T76x_LS_REISSUES_VARY",
    "T76x_LS_VARY_RV_MISS",
    "T76x_LS_VARY_RV_HIT",
    "T76x_LS_NO_UNPARK",
    "T76x_TEX_WORDS",
    "T76x_TEX_BUBBLES",
    "T76x_TEX_WORDS_L0",
    "T76x_TEX_WORDS_DESC",
    "T76x_TEX_ISSUES",
    "T76x_TEX_RECIRC_FMISS",
    "T76x_TEX_RECIRC_DESC",
    "T76x_TEX_RECIRC_MULTI",
    "T76x_TEX_RECIRC_PMISS",
    "T76x_TEX_RECIRC_CONF",
    "T76x_LSC_READ_HITS",
    "T76x_LSC_READ_OP",
    "T76x_LSC_WRITE_HITS",
    "T76x_LSC_WRITE_OP",
    "T76x_LSC_ATOMIC_HITS",
    "T76x_LSC_ATOMIC_OP",
    "T76x_LSC_LINE_FETCHES",
    "T76x_LSC_DIRTY_LINE",
    "T76x_LSC_SNOOPS",
    "T76x_AXI_TLB_STALL",
    "T76x_AXI_TLB_MISS",
    "T76x_AXI_TLB_TRANSACTION",
    "T76x_LS_TLB_MISS",
    "T76x_LS_TLB_HIT",
    "T76x_AXI_BEATS_READ",
    "T76x_AXI_BEATS_WRITTEN",

    /*L2 and MMU */
    "",
    "",
    "",
    "",
    "T76x_MMU_HIT",
    "T76x_MMU_NEW_MISS",
    "T76x_MMU_REPLAY_FULL",
    "T76x_MMU_REPLAY_MISS",
    "T76x_MMU_TABLE_WALK",
    "T76x_MMU_REQUESTS",
    "",
    "",
    "T76x_UTLB_HIT",
    "T76x_UTLB_NEW_MISS",
    "T76x_UTLB_REPLAY_FULL",
    "T76x_UTLB_REPLAY_MISS",
    "T76x_UTLB_STALL",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "T76x_L2_EXT_WRITE_BEATS",
    "T76x_L2_EXT_READ_BEATS",
    "T76x_L2_ANY_LOOKUP",
    "T76x_L2_READ_LOOKUP",
    "T76x_L2_SREAD_LOOKUP",
    "T76x_L2_READ_REPLAY",
    "T76x_L2_READ_SNOOP",
    "T76x_L2_READ_HIT",
    "T76x_L2_CLEAN_MISS",
    "T76x_L2_WRITE_LOOKUP",
    "T76x_L2_SWRITE_LOOKUP",
    "T76x_L2_WRITE_REPLAY",
    "T76x_L2_WRITE_SNOOP",
    "T76x_L2_WRITE_HIT",
    "T76x_L2_EXT_READ_FULL",
    "",
    "T76x_L2_EXT_WRITE_FULL",
    "T76x_L2_EXT_R_W_HAZARD",
    "T76x_L2_EXT_READ",
    "T76x_L2_EXT_READ_LINE",
    "T76x_L2_EXT_WRITE",
    "T76x_L2_EXT_WRITE_LINE",
    "T76x_L2_EXT_WRITE_SMALL",
    "T76x_L2_EXT_BARRIER",
    "T76x_L2_EXT_AR_STALL",
    "T76x_L2_EXT_R_BUF_FULL",
    "T76x_L2_EXT_RD_BUF_FULL",
    "T76x_L2_EXT_R_RAW",
    "T76x_L2_EXT_W_STALL",
    "T76x_L2_EXT_W_BUF_FULL",
    "T76x_L2_EXT_R_BUF_FULL",
    "T76x_L2_TAG_HAZARD",
    "T76x_L2_SNOOP_FULL",
    "T76x_L2_REPLAY_FULL"
};

static const char *const hardware_counters_mali_t82x[] =
{
    /* Job Manager */
    "",
    "",
    "",
    "",
    "T82x_MESSAGES_SENT",
    "T82x_MESSAGES_RECEIVED",
    "T82x_GPU_ACTIVE",
    "T82x_IRQ_ACTIVE",
    "T82x_JS0_JOBS",
    "T82x_JS0_TASKS",
    "T82x_JS0_ACTIVE",
    "",
    "T82x_JS0_WAIT_READ",
    "T82x_JS0_WAIT_ISSUE",
    "T82x_JS0_WAIT_DEPEND",
    "T82x_JS0_WAIT_FINISH",
    "T82x_JS1_JOBS",
    "T82x_JS1_TASKS",
    "T82x_JS1_ACTIVE",
    "",
    "T82x_JS1_WAIT_READ",
    "T82x_JS1_WAIT_ISSUE",
    "T82x_JS1_WAIT_DEPEND",
    "T82x_JS1_WAIT_FINISH",
    "T82x_JS2_JOBS",
    "T82x_JS2_TASKS",
    "T82x_JS2_ACTIVE",
    "",
    "T82x_JS2_WAIT_READ",
    "T82x_JS2_WAIT_ISSUE",
    "T82x_JS2_WAIT_DEPEND",
    "T82x_JS2_WAIT_FINISH",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",

    /*Tiler */
    "",
    "",
    "",
    "T82x_TI_JOBS_PROCESSED",
    "T82x_TI_TRIANGLES",
    "T82x_TI_QUADS",
    "T82x_TI_POLYGONS",
    "T82x_TI_POINTS",
    "T82x_TI_LINES",
    "T82x_TI_FRONT_FACING",
    "T82x_TI_BACK_FACING",
    "T82x_TI_PRIM_VISIBLE",
    "T82x_TI_PRIM_CULLED",
    "T82x_TI_PRIM_CLIPPED",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "T82x_TI_ACTIVE",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",

    /* Shader Core */
    "",
    "",
    "",
    "",
    "T82x_FRAG_ACTIVE",
    "T82x_FRAG_PRIMITIVES",
    "T82x_FRAG_PRIMITIVES_DROPPED",
    "T82x_FRAG_CYCLES_DESC",
    "T82x_FRAG_CYCLES_FPKQ_ACTIVE",
    "T82x_FRAG_CYCLES_VERT",
    "T82x_FRAG_CYCLES_TRISETUP",
    "T82x_FRAG_CYCLES_EZS_ACTIVE",
    "T82x_FRAG_THREADS",
    "T82x_FRAG_DUMMY_THREADS",
    "T82x_FRAG_QUADS_RAST",
    "T82x_FRAG_QUADS_EZS_TEST",
    "T82x_FRAG_QUADS_EZS_KILLED",
    "T82x_FRAG_THREADS_LZS_TEST",
    "T82x_FRAG_THREADS_LZS_KILLED",
    "T82x_FRAG_CYCLES_NO_TILE",
    "T82x_FRAG_NUM_TILES",
    "T82x_FRAG_TRANS_ELIM",
    "T82x_COMPUTE_ACTIVE",
    "T82x_COMPUTE_TASKS",
    "T82x_COMPUTE_THREADS",
    "T82x_COMPUTE_CYCLES_DESC",
    "T82x_TRIPIPE_ACTIVE",
    "T82x_ARITH_WORDS",
    "T82x_ARITH_CYCLES_REG",
    "T82x_ARITH_CYCLES_L0",
    "T82x_ARITH_FRAG_DEPEND",
    "T82x_LS_WORDS",
    "T82x_LS_ISSUES",
    "T82x_LS_REISSUE_ATTR",
    "T82x_LS_REISSUES_VARY",
    "T82x_LS_VARY_RV_MISS",
    "T82x_LS_VARY_RV_HIT",
    "T82x_LS_NO_UNPARK",
    "T82x_TEX_WORDS",
    "T82x_TEX_BUBBLES",
    "T82x_TEX_WORDS_L0",
    "T82x_TEX_WORDS_DESC",
    "T82x_TEX_ISSUES",
    "T82x_TEX_RECIRC_FMISS",
    "T82x_TEX_RECIRC_DESC",
    "T82x_TEX_RECIRC_MULTI",
    "T82x_TEX_RECIRC_PMISS",
    "T82x_TEX_RECIRC_CONF",
    "T82x_LSC_READ_HITS",
    "T82x_LSC_READ_OP",
    "T82x_LSC_WRITE_HITS",
    "T82x_LSC_WRITE_OP",
    "T82x_LSC_ATOMIC_HITS",
    "T82x_LSC_ATOMIC_OP",
    "T82x_LSC_LINE_FETCHES",
    "T82x_LSC_DIRTY_LINE",
    "T82x_LSC_SNOOPS",
    "T82x_AXI_TLB_STALL",
    "T82x_AXI_TLB_MISS",
    "T82x_AXI_TLB_TRANSACTION",
    "T82x_LS_TLB_MISS",
    "T82x_LS_TLB_HIT",
    "T82x_AXI_BEATS_READ",
    "T82x_AXI_BEATS_WRITTEN",

    /*L2 and MMU */
    "",
    "",
    "",
    "",
    "T82x_MMU_HIT",
    "T82x_MMU_NEW_MISS",
    "T82x_MMU_REPLAY_FULL",
    "T82x_MMU_REPLAY_MISS",
    "T82x_MMU_TABLE_WALK",
    "T82x_MMU_REQUESTS",
    "",
    "",
    "T82x_UTLB_HIT",
    "T82x_UTLB_NEW_MISS",
    "T82x_UTLB_REPLAY_FULL",
    "T82x_UTLB_REPLAY_MISS",
    "T82x_UTLB_STALL",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "T82x_L2_EXT_WRITE_BEATS",
    "T82x_L2_EXT_READ_BEATS",
    "T82x_L2_ANY_LOOKUP",
    "T82x_L2_READ_LOOKUP",
    "T82x_L2_SREAD_LOOKUP",
    "T82x_L2_READ_REPLAY",
    "T82x_L2_READ_SNOOP",
    "T82x_L2_READ_HIT",
    "T82x_L2_CLEAN_MISS",
    "T82x_L2_WRITE_LOOKUP",
    "T82x_L2_SWRITE_LOOKUP",
    "T82x_L2_WRITE_REPLAY",
    "T82x_L2_WRITE_SNOOP",
    "T82x_L2_WRITE_HIT",
    "T82x_L2_EXT_READ_FULL",
    "",
    "T82x_L2_EXT_WRITE_FULL",
    "T82x_L2_EXT_R_W_HAZARD",
    "T82x_L2_EXT_READ",
    "T82x_L2_EXT_READ_LINE",
    "T82x_L2_EXT_WRITE",
    "T82x_L2_EXT_WRITE_LINE",
    "T82x_L2_EXT_WRITE_SMALL",
    "T82x_L2_EXT_BARRIER",
    "T82x_L2_EXT_AR_STALL",
    "T82x_L2_EXT_R_BUF_FULL",
    "T82x_L2_EXT_RD_BUF_FULL",
    "T82x_L2_EXT_R_RAW",
    "T82x_L2_EXT_W_STALL",
    "T82x_L2_EXT_W_BUF_FULL",
    "T82x_L2_EXT_R_BUF_FULL",
    "T82x_L2_TAG_HAZARD",
    "T82x_L2_SNOOP_FULL",
    "T82x_L2_REPLAY_FULL"
};

static const char *const hardware_counters_mali_t83x[] =
{
    /* Job Manager */
    "",
    "",
    "",
    "",
    "T83x_MESSAGES_SENT",
    "T83x_MESSAGES_RECEIVED",
    "T83x_GPU_ACTIVE",
    "T83x_IRQ_ACTIVE",
    "T83x_JS0_JOBS",
    "T83x_JS0_TASKS",
    "T83x_JS0_ACTIVE",
    "",
    "T83x_JS0_WAIT_READ",
    "T83x_JS0_WAIT_ISSUE",
    "T83x_JS0_WAIT_DEPEND",
    "T83x_JS0_WAIT_FINISH",
    "T83x_JS1_JOBS",
    "T83x_JS1_TASKS",
    "T83x_JS1_ACTIVE",
    "",
    "T83x_JS1_WAIT_READ",
    "T83x_JS1_WAIT_ISSUE",
    "T83x_JS1_WAIT_DEPEND",
    "T83x_JS1_WAIT_FINISH",
    "T83x_JS2_JOBS",
    "T83x_JS2_TASKS",
    "T83x_JS2_ACTIVE",
    "",
    "T83x_JS2_WAIT_READ",
    "T83x_JS2_WAIT_ISSUE",
    "T83x_JS2_WAIT_DEPEND",
    "T83x_JS2_WAIT_FINISH",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",

    /*Tiler */
    "",
    "",
    "",
    "T83x_TI_JOBS_PROCESSED",
    "T83x_TI_TRIANGLES",
    "T83x_TI_QUADS",
    "T83x_TI_POLYGONS",
    "T83x_TI_POINTS",
    "T83x_TI_LINES",
    "T83x_TI_FRONT_FACING",
    "T83x_TI_BACK_FACING",
    "T83x_TI_PRIM_VISIBLE",
    "T83x_TI_PRIM_CULLED",
    "T83x_TI_PRIM_CLIPPED",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "T83x_TI_ACTIVE",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",

    /* Shader Core */
    "",
    "",
    "",
    "",
    "T83x_FRAG_ACTIVE",
    "T83x_FRAG_PRIMITIVES",
    "T83x_FRAG_PRIMITIVES_DROPPED",
    "T83x_FRAG_CYCLES_DESC",
    "T83x_FRAG_CYCLES_FPKQ_ACTIVE",
    "T83x_FRAG_CYCLES_VERT",
    "T83x_FRAG_CYCLES_TRISETUP",
    "T83x_FRAG_CYCLES_EZS_ACTIVE",
    "T83x_FRAG_THREADS",
    "T83x_FRAG_DUMMY_THREADS",
    "T83x_FRAG_QUADS_RAST",
    "T83x_FRAG_QUADS_EZS_TEST",
    "T83x_FRAG_QUADS_EZS_KILLED",
    "T83x_FRAG_THREADS_LZS_TEST",
    "T83x_FRAG_THREADS_LZS_KILLED",
    "T83x_FRAG_CYCLES_NO_TILE",
    "T83x_FRAG_NUM_TILES",
    "T83x_FRAG_TRANS_ELIM",
    "T83x_COMPUTE_ACTIVE",
    "T83x_COMPUTE_TASKS",
    "T83x_COMPUTE_THREADS",
    "T83x_COMPUTE_CYCLES_DESC",
    "T83x_TRIPIPE_ACTIVE",
    "T83x_ARITH_WORDS",
    "T83x_ARITH_CYCLES_REG",
    "T83x_ARITH_CYCLES_L0",
    "T83x_ARITH_FRAG_DEPEND",
    "T83x_LS_WORDS",
    "T83x_LS_ISSUES",
    "T83x_LS_REISSUE_ATTR",
    "T83x_LS_REISSUES_VARY",
    "T83x_LS_VARY_RV_MISS",
    "T83x_LS_VARY_RV_HIT",
    "T83x_LS_NO_UNPARK",
    "T83x_TEX_WORDS",
    "T83x_TEX_BUBBLES",
    "T83x_TEX_WORDS_L0",
    "T83x_TEX_WORDS_DESC",
    "T83x_TEX_ISSUES",
    "T83x_TEX_RECIRC_FMISS",
    "T83x_TEX_RECIRC_DESC",
    "T83x_TEX_RECIRC_MULTI",
    "T83x_TEX_RECIRC_PMISS",
    "T83x_TEX_RECIRC_CONF",
    "T83x_LSC_READ_HITS",
    "T83x_LSC_READ_OP",
    "T83x_LSC_WRITE_HITS",
    "T83x_LSC_WRITE_OP",
    "T83x_LSC_ATOMIC_HITS",
    "T83x_LSC_ATOMIC_OP",
    "T83x_LSC_LINE_FETCHES",
    "T83x_LSC_DIRTY_LINE",
    "T83x_LSC_SNOOPS",
    "T83x_AXI_TLB_STALL",
    "T83x_AXI_TLB_MISS",
    "T83x_AXI_TLB_TRANSACTION",
    "T83x_LS_TLB_MISS",
    "T83x_LS_TLB_HIT",
    "T83x_AXI_BEATS_READ",
    "T83x_AXI_BEATS_WRITTEN",

    /*L2 and MMU */
    "",
    "",
    "",
    "",
    "T83x_MMU_HIT",
    "T83x_MMU_NEW_MISS",
    "T83x_MMU_REPLAY_FULL",
    "T83x_MMU_REPLAY_MISS",
    "T83x_MMU_TABLE_WALK",
    "T83x_MMU_REQUESTS",
    "",
    "",
    "T83x_UTLB_HIT",
    "T83x_UTLB_NEW_MISS",
    "T83x_UTLB_REPLAY_FULL",
    "T83x_UTLB_REPLAY_MISS",
    "T83x_UTLB_STALL",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "T83x_L2_EXT_WRITE_BEATS",
    "T83x_L2_EXT_READ_BEATS",
    "T83x_L2_ANY_LOOKUP",
    "T83x_L2_READ_LOOKUP",
    "T83x_L2_SREAD_LOOKUP",
    "T83x_L2_READ_REPLAY",
    "T83x_L2_READ_SNOOP",
    "T83x_L2_READ_HIT",
    "T83x_L2_CLEAN_MISS",
    "T83x_L2_WRITE_LOOKUP",
    "T83x_L2_SWRITE_LOOKUP",
    "T83x_L2_WRITE_REPLAY",
    "T83x_L2_WRITE_SNOOP",
    "T83x_L2_WRITE_HIT",
    "T83x_L2_EXT_READ_FULL",
    "",
    "T83x_L2_EXT_WRITE_FULL",
    "T83x_L2_EXT_R_W_HAZARD",
    "T83x_L2_EXT_READ",
    "T83x_L2_EXT_READ_LINE",
    "T83x_L2_EXT_WRITE",
    "T83x_L2_EXT_WRITE_LINE",
    "T83x_L2_EXT_WRITE_SMALL",
    "T83x_L2_EXT_BARRIER",
    "T83x_L2_EXT_AR_STALL",
    "T83x_L2_EXT_R_BUF_FULL",
    "T83x_L2_EXT_RD_BUF_FULL",
    "T83x_L2_EXT_R_RAW",
    "T83x_L2_EXT_W_STALL",
    "T83x_L2_EXT_W_BUF_FULL",
    "T83x_L2_EXT_R_BUF_FULL",
    "T83x_L2_TAG_HAZARD",
    "T83x_L2_SNOOP_FULL",
    "T83x_L2_REPLAY_FULL"
};

static const char *const hardware_counters_mali_t86x[] =
{
    /* Job Manager */
    "",
    "",
    "",
    "",
    "T86x_MESSAGES_SENT",
    "T86x_MESSAGES_RECEIVED",
    "T86x_GPU_ACTIVE",
    "T86x_IRQ_ACTIVE",
    "T86x_JS0_JOBS",
    "T86x_JS0_TASKS",
    "T86x_JS0_ACTIVE",
    "",
    "T86x_JS0_WAIT_READ",
    "T86x_JS0_WAIT_ISSUE",
    "T86x_JS0_WAIT_DEPEND",
    "T86x_JS0_WAIT_FINISH",
    "T86x_JS1_JOBS",
    "T86x_JS1_TASKS",
    "T86x_JS1_ACTIVE",
    "",
    "T86x_JS1_WAIT_READ",
    "T86x_JS1_WAIT_ISSUE",
    "T86x_JS1_WAIT_DEPEND",
    "T86x_JS1_WAIT_FINISH",
    "T86x_JS2_JOBS",
    "T86x_JS2_TASKS",
    "T86x_JS2_ACTIVE",
    "",
    "T86x_JS2_WAIT_READ",
    "T86x_JS2_WAIT_ISSUE",
    "T86x_JS2_WAIT_DEPEND",
    "T86x_JS2_WAIT_FINISH",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",

    /*Tiler */
    "",
    "",
    "",
    "T86x_TI_JOBS_PROCESSED",
    "T86x_TI_TRIANGLES",
    "T86x_TI_QUADS",
    "T86x_TI_POLYGONS",
    "T86x_TI_POINTS",
    "T86x_TI_LINES",
    "T86x_TI_VCACHE_HIT",
    "T86x_TI_VCACHE_MISS",
    "T86x_TI_FRONT_FACING",
    "T86x_TI_BACK_FACING",
    "T86x_TI_PRIM_VISIBLE",
    "T86x_TI_PRIM_CULLED",
    "T86x_TI_PRIM_CLIPPED",
    "T86x_TI_LEVEL0",
    "T86x_TI_LEVEL1",
    "T86x_TI_LEVEL2",
    "T86x_TI_LEVEL3",
    "T86x_TI_LEVEL4",
    "T86x_TI_LEVEL5",
    "T86x_TI_LEVEL6",
    "T86x_TI_LEVEL7",
    "T86x_TI_COMMAND_1",
    "T86x_TI_COMMAND_2",
    "T86x_TI_COMMAND_3",
    "T86x_TI_COMMAND_4",
    "T86x_TI_COMMAND_5_7",
    "T86x_TI_COMMAND_8_15",
    "T86x_TI_COMMAND_16_63",
    "T86x_TI_COMMAND_64",
    "T86x_TI_COMPRESS_IN",
    "T86x_TI_COMPRESS_OUT",
    "T86x_TI_COMPRESS_FLUSH",
    "T86x_TI_TIMESTAMPS",
    "T86x_TI_PCACHE_HIT",
    "T86x_TI_PCACHE_MISS",
    "T86x_TI_PCACHE_LINE",
    "T86x_TI_PCACHE_STALL",
    "T86x_TI_WRBUF_HIT",
    "T86x_TI_WRBUF_MISS",
    "T86x_TI_WRBUF_LINE",
    "T86x_TI_WRBUF_PARTIAL",
    "T86x_TI_WRBUF_STALL",
    "T86x_TI_ACTIVE",
    "T86x_TI_LOADING_DESC",
    "T86x_TI_INDEX_WAIT",
    "T86x_TI_INDEX_RANGE_WAIT",
    "T86x_TI_VERTEX_WAIT",
    "T86x_TI_PCACHE_WAIT",
    "T86x_TI_WRBUF_WAIT",
    "T86x_TI_BUS_READ",
    "T86x_TI_BUS_WRITE",
    "",
    "",
    "",
    "",
    "",
    "T86x_TI_UTLB_HIT",
    "T86x_TI_UTLB_NEW_MISS",
    "T86x_TI_UTLB_REPLAY_FULL",
    "T86x_TI_UTLB_REPLAY_MISS",
    "T86x_TI_UTLB_STALL",

    /* Shader Core */
    "",
    "",
    "",
    "",
    "T86x_FRAG_ACTIVE",
    "T86x_FRAG_PRIMITIVES",
    "T86x_FRAG_PRIMITIVES_DROPPED",
    "T86x_FRAG_CYCLES_DESC",
    "T86x_FRAG_CYCLES_FPKQ_ACTIVE",
    "T86x_FRAG_CYCLES_VERT",
    "T86x_FRAG_CYCLES_TRISETUP",
    "T86x_FRAG_CYCLES_EZS_ACTIVE",
    "T86x_FRAG_THREADS",
    "T86x_FRAG_DUMMY_THREADS",
    "T86x_FRAG_QUADS_RAST",
    "T86x_FRAG_QUADS_EZS_TEST",
    "T86x_FRAG_QUADS_EZS_KILLED",
    "T86x_FRAG_THREADS_LZS_TEST",
    "T86x_FRAG_THREADS_LZS_KILLED",
    "T86x_FRAG_CYCLES_NO_TILE",
    "T86x_FRAG_NUM_TILES",
    "T86x_FRAG_TRANS_ELIM",
    "T86x_COMPUTE_ACTIVE",
    "T86x_COMPUTE_TASKS",
    "T86x_COMPUTE_THREADS",
    "T86x_COMPUTE_CYCLES_DESC",
    "T86x_TRIPIPE_ACTIVE",
    "T86x_ARITH_WORDS",
    "T86x_ARITH_CYCLES_REG",
    "T86x_ARITH_CYCLES_L0",
    "T86x_ARITH_FRAG_DEPEND",
    "T86x_LS_WORDS",
    "T86x_LS_ISSUES",
    "T86x_LS_REISSUE_ATTR",
    "T86x_LS_REISSUES_VARY",
    "T86x_LS_VARY_RV_MISS",
    "T86x_LS_VARY_RV_HIT",
    "T86x_LS_NO_UNPARK",
    "T86x_TEX_WORDS",
    "T86x_TEX_BUBBLES",
    "T86x_TEX_WORDS_L0",
    "T86x_TEX_WORDS_DESC",
    "T86x_TEX_ISSUES",
    "T86x_TEX_RECIRC_FMISS",
    "T86x_TEX_RECIRC_DESC",
    "T86x_TEX_RECIRC_MULTI",
    "T86x_TEX_RECIRC_PMISS",
    "T86x_TEX_RECIRC_CONF",
    "T86x_LSC_READ_HITS",
    "T86x_LSC_READ_OP",
    "T86x_LSC_WRITE_HITS",
    "T86x_LSC_WRITE_OP",
    "T86x_LSC_ATOMIC_HITS",
    "T86x_LSC_ATOMIC_OP",
    "T86x_LSC_LINE_FETCHES",
    "T86x_LSC_DIRTY_LINE",
    "T86x_LSC_SNOOPS",
    "T86x_AXI_TLB_STALL",
    "T86x_AXI_TLB_MISS",
    "T86x_AXI_TLB_TRANSACTION",
    "T86x_LS_TLB_MISS",
    "T86x_LS_TLB_HIT",
    "T86x_AXI_BEATS_READ",
    "T86x_AXI_BEATS_WRITTEN",

    /*L2 and MMU */
    "",
    "",
    "",
    "",
    "T86x_MMU_HIT",
    "T86x_MMU_NEW_MISS",
    "T86x_MMU_REPLAY_FULL",
    "T86x_MMU_REPLAY_MISS",
    "T86x_MMU_TABLE_WALK",
    "T86x_MMU_REQUESTS",
    "",
    "",
    "T86x_UTLB_HIT",
    "T86x_UTLB_NEW_MISS",
    "T86x_UTLB_REPLAY_FULL",
    "T86x_UTLB_REPLAY_MISS",
    "T86x_UTLB_STALL",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "T86x_L2_EXT_WRITE_BEATS",
    "T86x_L2_EXT_READ_BEATS",
    "T86x_L2_ANY_LOOKUP",
    "T86x_L2_READ_LOOKUP",
    "T86x_L2_SREAD_LOOKUP",
    "T86x_L2_READ_REPLAY",
    "T86x_L2_READ_SNOOP",
    "T86x_L2_READ_HIT",
    "T86x_L2_CLEAN_MISS",
    "T86x_L2_WRITE_LOOKUP",
    "T86x_L2_SWRITE_LOOKUP",
    "T86x_L2_WRITE_REPLAY",
    "T86x_L2_WRITE_SNOOP",
    "T86x_L2_WRITE_HIT",
    "T86x_L2_EXT_READ_FULL",
    "",
    "T86x_L2_EXT_WRITE_FULL",
    "T86x_L2_EXT_R_W_HAZARD",
    "T86x_L2_EXT_READ",
    "T86x_L2_EXT_READ_LINE",
    "T86x_L2_EXT_WRITE",
    "T86x_L2_EXT_WRITE_LINE",
    "T86x_L2_EXT_WRITE_SMALL",
    "T86x_L2_EXT_BARRIER",
    "T86x_L2_EXT_AR_STALL",
    "T86x_L2_EXT_R_BUF_FULL",
    "T86x_L2_EXT_RD_BUF_FULL",
    "T86x_L2_EXT_R_RAW",
    "T86x_L2_EXT_W_STALL",
    "T86x_L2_EXT_W_BUF_FULL",
    "T86x_L2_EXT_R_BUF_FULL",
    "T86x_L2_TAG_HAZARD",
    "T86x_L2_SNOOP_FULL",
    "T86x_L2_REPLAY_FULL"
};

static const char *const hardware_counters_mali_t88x[] =
{
    /* Job Manager */
    "",
    "",
    "",
    "",
    "T88x_MESSAGES_SENT",
    "T88x_MESSAGES_RECEIVED",
    "T88x_GPU_ACTIVE",
    "T88x_IRQ_ACTIVE",
    "T88x_JS0_JOBS",
    "T88x_JS0_TASKS",
    "T88x_JS0_ACTIVE",
    "",
    "T88x_JS0_WAIT_READ",
    "T88x_JS0_WAIT_ISSUE",
    "T88x_JS0_WAIT_DEPEND",
    "T88x_JS0_WAIT_FINISH",
    "T88x_JS1_JOBS",
    "T88x_JS1_TASKS",
    "T88x_JS1_ACTIVE",
    "",
    "T88x_JS1_WAIT_READ",
    "T88x_JS1_WAIT_ISSUE",
    "T88x_JS1_WAIT_DEPEND",
    "T88x_JS1_WAIT_FINISH",
    "T88x_JS2_JOBS",
    "T88x_JS2_TASKS",
    "T88x_JS2_ACTIVE",
    "",
    "T88x_JS2_WAIT_READ",
    "T88x_JS2_WAIT_ISSUE",
    "T88x_JS2_WAIT_DEPEND",
    "T88x_JS2_WAIT_FINISH",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",

    /*Tiler */
    "",
    "",
    "",
    "T88x_TI_JOBS_PROCESSED",
    "T88x_TI_TRIANGLES",
    "T88x_TI_QUADS",
    "T88x_TI_POLYGONS",
    "T88x_TI_POINTS",
    "T88x_TI_LINES",
    "T88x_TI_VCACHE_HIT",
    "T88x_TI_VCACHE_MISS",
    "T88x_TI_FRONT_FACING",
    "T88x_TI_BACK_FACING",
    "T88x_TI_PRIM_VISIBLE",
    "T88x_TI_PRIM_CULLED",
    "T88x_TI_PRIM_CLIPPED",
    "T88x_TI_LEVEL0",
    "T88x_TI_LEVEL1",
    "T88x_TI_LEVEL2",
    "T88x_TI_LEVEL3",
    "T88x_TI_LEVEL4",
    "T88x_TI_LEVEL5",
    "T88x_TI_LEVEL6",
    "T88x_TI_LEVEL7",
    "T88x_TI_COMMAND_1",
    "T88x_TI_COMMAND_2",
    "T88x_TI_COMMAND_3",
    "T88x_TI_COMMAND_4",
    "T88x_TI_COMMAND_5_7",
    "T88x_TI_COMMAND_8_15",
    "T88x_TI_COMMAND_16_63",
    "T88x_TI_COMMAND_64",
    "T88x_TI_COMPRESS_IN",
    "T88x_TI_COMPRESS_OUT",
    "T88x_TI_COMPRESS_FLUSH",
    "T88x_TI_TIMESTAMPS",
    "T88x_TI_PCACHE_HIT",
    "T88x_TI_PCACHE_MISS",
    "T88x_TI_PCACHE_LINE",
    "T88x_TI_PCACHE_STALL",
    "T88x_TI_WRBUF_HIT",
    "T88x_TI_WRBUF_MISS",
    "T88x_TI_WRBUF_LINE",
    "T88x_TI_WRBUF_PARTIAL",
    "T88x_TI_WRBUF_STALL",
    "T88x_TI_ACTIVE",
    "T88x_TI_LOADING_DESC",
    "T88x_TI_INDEX_WAIT",
    "T88x_TI_INDEX_RANGE_WAIT",
    "T88x_TI_VERTEX_WAIT",
    "T88x_TI_PCACHE_WAIT",
    "T88x_TI_WRBUF_WAIT",
    "T88x_TI_BUS_READ",
    "T88x_TI_BUS_WRITE",
    "",
    "",
    "",
    "",
    "",
    "T88x_TI_UTLB_HIT",
    "T88x_TI_UTLB_NEW_MISS",
    "T88x_TI_UTLB_REPLAY_FULL",
    "T88x_TI_UTLB_REPLAY_MISS",
    "T88x_TI_UTLB_STALL",

    /* Shader Core */
    "",
    "",
    "",
    "",
    "T88x_FRAG_ACTIVE",
    "T88x_FRAG_PRIMITIVES",
    "T88x_FRAG_PRIMITIVES_DROPPED",
    "T88x_FRAG_CYCLES_DESC",
    "T88x_FRAG_CYCLES_FPKQ_ACTIVE",
    "T88x_FRAG_CYCLES_VERT",
    "T88x_FRAG_CYCLES_TRISETUP",
    "T88x_FRAG_CYCLES_EZS_ACTIVE",
    "T88x_FRAG_THREADS",
    "T88x_FRAG_DUMMY_THREADS",
    "T88x_FRAG_QUADS_RAST",
    "T88x_FRAG_QUADS_EZS_TEST",
    "T88x_FRAG_QUADS_EZS_KILLED",
    "T88x_FRAG_THREADS_LZS_TEST",
    "T88x_FRAG_THREADS_LZS_KILLED",
    "T88x_FRAG_CYCLES_NO_TILE",
    "T88x_FRAG_NUM_TILES",
    "T88x_FRAG_TRANS_ELIM",
    "T88x_COMPUTE_ACTIVE",
    "T88x_COMPUTE_TASKS",
    "T88x_COMPUTE_THREADS",
    "T88x_COMPUTE_CYCLES_DESC",
    "T88x_TRIPIPE_ACTIVE",
    "T88x_ARITH_WORDS",
    "T88x_ARITH_CYCLES_REG",
    "T88x_ARITH_CYCLES_L0",
    "T88x_ARITH_FRAG_DEPEND",
    "T88x_LS_WORDS",
    "T88x_LS_ISSUES",
    "T88x_LS_REISSUE_ATTR",
    "T88x_LS_REISSUES_VARY",
    "T88x_LS_VARY_RV_MISS",
    "T88x_LS_VARY_RV_HIT",
    "T88x_LS_NO_UNPARK",
    "T88x_TEX_WORDS",
    "T88x_TEX_BUBBLES",
    "T88x_TEX_WORDS_L0",
    "T88x_TEX_WORDS_DESC",
    "T88x_TEX_ISSUES",
    "T88x_TEX_RECIRC_FMISS",
    "T88x_TEX_RECIRC_DESC",
    "T88x_TEX_RECIRC_MULTI",
    "T88x_TEX_RECIRC_PMISS",
    "T88x_TEX_RECIRC_CONF",
    "T88x_LSC_READ_HITS",
    "T88x_LSC_READ_OP",
    "T88x_LSC_WRITE_HITS",
    "T88x_LSC_WRITE_OP",
    "T88x_LSC_ATOMIC_HITS",
    "T88x_LSC_ATOMIC_OP",
    "T88x_LSC_LINE_FETCHES",
    "T88x_LSC_DIRTY_LINE",
    "T88x_LSC_SNOOPS",
    "T88x_AXI_TLB_STALL",
    "T88x_AXI_TLB_MISS",
    "T88x_AXI_TLB_TRANSACTION",
    "T88x_LS_TLB_MISS",
    "T88x_LS_TLB_HIT",
    "T88x_AXI_BEATS_READ",
    "T88x_AXI_BEATS_WRITTEN",

    /*L2 and MMU */
    "",
    "",
    "",
    "",
    "T88x_MMU_HIT",
    "T88x_MMU_NEW_MISS",
    "T88x_MMU_REPLAY_FULL",
    "T88x_MMU_REPLAY_MISS",
    "T88x_MMU_TABLE_WALK",
    "T88x_MMU_REQUESTS",
    "",
    "",
    "T88x_UTLB_HIT",
    "T88x_UTLB_NEW_MISS",
    "T88x_UTLB_REPLAY_FULL",
    "T88x_UTLB_REPLAY_MISS",
    "T88x_UTLB_STALL",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "T88x_L2_EXT_WRITE_BEATS",
    "T88x_L2_EXT_READ_BEATS",
    "T88x_L2_ANY_LOOKUP",
    "T88x_L2_READ_LOOKUP",
    "T88x_L2_SREAD_LOOKUP",
    "T88x_L2_READ_REPLAY",
    "T88x_L2_READ_SNOOP",
    "T88x_L2_READ_HIT",
    "T88x_L2_CLEAN_MISS",
    "T88x_L2_WRITE_LOOKUP",
    "T88x_L2_SWRITE_LOOKUP",
    "T88x_L2_WRITE_REPLAY",
    "T88x_L2_WRITE_SNOOP",
    "T88x_L2_WRITE_HIT",
    "T88x_L2_EXT_READ_FULL",
    "",
    "T88x_L2_EXT_WRITE_FULL",
    "T88x_L2_EXT_R_W_HAZARD",
    "T88x_L2_EXT_READ",
    "T88x_L2_EXT_READ_LINE",
    "T88x_L2_EXT_WRITE",
    "T88x_L2_EXT_WRITE_LINE",
    "T88x_L2_EXT_WRITE_SMALL",
    "T88x_L2_EXT_BARRIER",
    "T88x_L2_EXT_AR_STALL",
    "T88x_L2_EXT_R_BUF_FULL",
    "T88x_L2_EXT_RD_BUF_FULL",
    "T88x_L2_EXT_R_RAW",
    "T88x_L2_EXT_W_STALL",
    "T88x_L2_EXT_W_BUF_FULL",
    "T88x_L2_EXT_R_BUF_FULL",
    "T88x_L2_TAG_HAZARD",
    "T88x_L2_SNOOP_FULL",
    "T88x_L2_REPLAY_FULL"
};

static const char *const hardware_counters_mali_tHEx[] =
{
    /* Performance counters for the Job Manager */
    "",
    "",
    "",
    "",
    "THEx_MESSAGES_SENT",
    "THEx_MESSAGES_RECEIVED",
    "THEx_GPU_ACTIVE",
    "THEx_IRQ_ACTIVE",
    "THEx_JS0_JOBS",
    "THEx_JS0_TASKS",
    "THEx_JS0_ACTIVE",
    "",
    "THEx_JS0_WAIT_READ",
    "THEx_JS0_WAIT_ISSUE",
    "THEx_JS0_WAIT_DEPEND",
    "THEx_JS0_WAIT_FINISH",
    "THEx_JS1_JOBS",
    "THEx_JS1_TASKS",
    "THEx_JS1_ACTIVE",
    "",
    "THEx_JS1_WAIT_READ",
    "THEx_JS1_WAIT_ISSUE",
    "THEx_JS1_WAIT_DEPEND",
    "THEx_JS1_WAIT_FINISH",
    "THEx_JS2_JOBS",
    "THEx_JS2_TASKS",
    "THEx_JS2_ACTIVE",
    "",
    "THEx_JS2_WAIT_READ",
    "THEx_JS2_WAIT_ISSUE",
    "THEx_JS2_WAIT_DEPEND",
    "THEx_JS2_WAIT_FINISH",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",

    /* Performance counters for the Tiler */
    "",
    "",
    "",
    "",
    "THEx_TILER_ACTIVE",
    "THEx_JOBS_PROCESSED",
    "THEx_TRIANGLES",
    "THEx_LINES",
    "THEx_POINTS",
    "THEx_FRONT_FACING",
    "THEx_BACK_FACING",
    "THEx_PRIM_VISIBLE",
    "THEx_PRIM_CULLED",
    "THEx_PRIM_CLIPPED",
    "THEx_PRIM_SAT_CULLED",
    "",
    "",
    "THEx_BUS_READ",
    "",
    "THEx_BUS_WRITE",
    "THEx_LOADING_DESC",
    "THEx_IDVS_POS_SHAD_REQ",
    "THEx_IDVS_POS_SHAD_WAIT",
    "THEx_IDVS_POS_SHAD_STALL",
    "THEx_IDVS_POS_FIFO_FULL",
    "THEx_PREFETCH_STALL",
    "THEx_VCACHE_HIT",
    "THEx_VCACHE_MISS",
    "THEx_VCACHE_LINE_WAIT",
    "THEx_VFETCH_POS_READ_WAIT",
    "THEx_VFETCH_VERTEX_WAIT",
    "THEx_VFETCH_STALL",
    "THEx_PRIMASSY_STALL",
    "THEx_BBOX_GEN_STALL",
    "THEx_IDVS_VBU_HIT",
    "THEx_IDVS_VBU_MISS",
    "THEx_IDVS_VBU_LINE_DEALLOCATE",
    "THEx_IDVS_VAR_SHAD_REQ",
    "THEx_IDVS_VAR_SHAD_STALL",
    "THEx_BINNER_STALL",
    "THEx_ITER_STALL",
    "THEx_COMPRESS_MISS",
    "THEx_COMPRESS_STALL",
    "THEx_PCACHE_HIT",
    "THEx_PCACHE_MISS",
    "THEx_PCACHE_MISS_STALL",
    "THEx_PCACHE_EVICT_STALL",
    "THEx_PMGR_PTR_WR_STALL",
    "THEx_PMGR_PTR_RD_STALL",
    "THEx_PMGR_CMD_WR_STALL",
    "THEx_WRBUF_ACTIVE",
    "THEx_WRBUF_HIT",
    "THEx_WRBUF_MISS",
    "THEx_WRBUF_NO_FREE_LINE_STALL",
    "THEx_WRBUF_NO_AXI_ID_STALL",
    "THEx_WRBUF_AXI_STALL",
    "",
    "",
    "",
    "THEx_UTLB_TRANS",
    "THEx_UTLB_TRANS_HIT",
    "THEx_UTLB_TRANS_STALL",
    "THEx_UTLB_TRANS_MISS_DELAY",
    "THEx_UTLB_MMU_REQ",

    /* Performance counters for the Shader Core */
    "",
    "",
    "",
    "",
    "THEx_FRAG_ACTIVE",
    "THEx_FRAG_PRIMITIVES",
    "THEx_FRAG_PRIM_RAST",
    "THEx_FRAG_FPK_ACTIVE",
    "THEx_FRAG_STARVING",
    "THEx_FRAG_WARPS",
    "THEx_FRAG_PARTIAL_WARPS",
    "THEx_FRAG_QUADS_RAST",
    "THEx_FRAG_QUADS_EZS_TEST",
    "THEx_FRAG_QUADS_EZS_UPDATE",
    "THEx_FRAG_QUADS_EZS_KILL",
    "THEx_FRAG_LZS_TEST",
    "THEx_FRAG_LZS_KILL",
    "",
    "THEx_FRAG_PTILES",
    "THEx_FRAG_TRANS_ELIM",
    "THEx_QUAD_FPK_KILLER",
    "",
    "THEx_COMPUTE_ACTIVE",
    "THEx_COMPUTE_TASKS",
    "THEx_COMPUTE_WARPS",
    "THEx_COMPUTE_STARVING",
    "THEx_EXEC_CORE_ACTIVE",
    "THEx_EXEC_ACTIVE",
    "THEx_EXEC_INSTR_COUNT",
    "THEx_EXEC_INSTR_DIVERGED",
    "THEx_EXEC_INSTR_STARVING",
    "THEx_ARITH_INSTR_SINGLE_FMA",
    "THEx_ARITH_INSTR_DOUBLE",
    "THEx_ARITH_INSTR_MSG",
    "THEx_ARITH_INSTR_MSG_ONLY",
    "THEx_TEX_INSTR",
    "THEx_TEX_INSTR_MIPMAP",
    "THEx_TEX_INSTR_COMPRESSED",
    "THEx_TEX_INSTR_3D",
    "THEx_TEX_INSTR_TRILINEAR",
    "THEx_TEX_COORD_ISSUE",
    "THEx_TEX_COORD_STALL",
    "THEx_TEX_STARVE_CACHE",
    "THEx_TEX_STARVE_FILTER",
    "THEx_LS_MEM_READ_FULL",
    "THEx_LS_MEM_READ_SHORT",
    "THEx_LS_MEM_WRITE_FULL",
    "THEx_LS_MEM_WRITE_SHORT",
    "THEx_LS_MEM_ATOMIC",
    "THEx_VARY_INSTR",
    "THEx_VARY_SLOT_32",
    "THEx_VARY_SLOT_16",
    "THEx_ATTR_INSTR",
    "THEx_ARITH_INSTR_FP_MUL",
    "THEx_BEATS_RD_FTC",
    "THEx_BEATS_RD_FTC_EXT",
    "THEx_BEATS_RD_LSC",
    "THEx_BEATS_RD_LSC_EXT",
    "THEx_BEATS_RD_TEX",
    "THEx_BEATS_RD_TEX_EXT",
    "THEx_BEATS_RD_OTHER",
    "THEx_BEATS_WR_LSC",
    "THEx_BEATS_WR_TIB",
    "",

    /* Performance counters for the Memory System */
    "",
    "",
    "",
    "",
    "THEx_MMU_REQUESTS",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "THEx_L2_RD_MSG_IN",
    "THEx_L2_RD_MSG_IN_STALL",
    "THEx_L2_WR_MSG_IN",
    "THEx_L2_WR_MSG_IN_STALL",
    "THEx_L2_SNP_MSG_IN",
    "THEx_L2_SNP_MSG_IN_STALL",
    "THEx_L2_RD_MSG_OUT",
    "THEx_L2_RD_MSG_OUT_STALL",
    "THEx_L2_WR_MSG_OUT",
    "THEx_L2_ANY_LOOKUP",
    "THEx_L2_READ_LOOKUP",
    "THEx_L2_WRITE_LOOKUP",
    "THEx_L2_EXT_SNOOP_LOOKUP",
    "THEx_L2_EXT_READ",
    "THEx_L2_EXT_READ_NOSNP",
    "THEx_L2_EXT_READ_UNIQUE",
    "THEx_L2_EXT_READ_BEATS",
    "THEx_L2_EXT_AR_STALL",
    "THEx_L2_EXT_AR_CNT_Q1",
    "THEx_L2_EXT_AR_CNT_Q2",
    "THEx_L2_EXT_AR_CNT_Q3",
    "THEx_L2_EXT_RRESP_0_127",
    "THEx_L2_EXT_RRESP_128_191",
    "THEx_L2_EXT_RRESP_192_255",
    "THEx_L2_EXT_RRESP_256_319",
    "THEx_L2_EXT_RRESP_320_383",
    "THEx_L2_EXT_WRITE",
    "THEx_L2_EXT_WRITE_NOSNP_FULL",
    "THEx_L2_EXT_WRITE_NOSNP_PTL",
    "THEx_L2_EXT_WRITE_SNP_FULL",
    "THEx_L2_EXT_WRITE_SNP_PTL",
    "THEx_L2_EXT_WRITE_BEATS",
    "THEx_L2_EXT_W_STALL",
    "THEx_L2_EXT_AW_CNT_Q1",
    "THEx_L2_EXT_AW_CNT_Q2",
    "THEx_L2_EXT_AW_CNT_Q3",
    "THEx_L2_EXT_SNOOP",
    "THEx_L2_EXT_SNOOP_STALL",
    "THEx_L2_EXT_SNOOP_RESP_CLEAN",
    "THEx_L2_EXT_SNOOP_RESP_DATA",
    "THEx_L2_EXT_SNOOP_INTERNAL",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
};

static const char *const hardware_counters_mali_tMIx[] =
{
    /* Performance counters for the Job Manager */
    "",
    "",
    "",
    "",
    "TMIx_MESSAGES_SENT",
    "TMIx_MESSAGES_RECEIVED",
    "TMIx_GPU_ACTIVE",
    "TMIx_IRQ_ACTIVE",
    "TMIx_JS0_JOBS",
    "TMIx_JS0_TASKS",
    "TMIx_JS0_ACTIVE",
    "",
    "TMIx_JS0_WAIT_READ",
    "TMIx_JS0_WAIT_ISSUE",
    "TMIx_JS0_WAIT_DEPEND",
    "TMIx_JS0_WAIT_FINISH",
    "TMIx_JS1_JOBS",
    "TMIx_JS1_TASKS",
    "TMIx_JS1_ACTIVE",
    "",
    "TMIx_JS1_WAIT_READ",
    "TMIx_JS1_WAIT_ISSUE",
    "TMIx_JS1_WAIT_DEPEND",
    "TMIx_JS1_WAIT_FINISH",
    "TMIx_JS2_JOBS",
    "TMIx_JS2_TASKS",
    "TMIx_JS2_ACTIVE",
    "",
    "TMIx_JS2_WAIT_READ",
    "TMIx_JS2_WAIT_ISSUE",
    "TMIx_JS2_WAIT_DEPEND",
    "TMIx_JS2_WAIT_FINISH",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",

    /* Performance counters for the Tiler */
    "",
    "",
    "",
    "",
    "TMIx_TILER_ACTIVE",
    "TMIx_JOBS_PROCESSED",
    "TMIx_TRIANGLES",
    "TMIx_LINES",
    "TMIx_POINTS",
    "TMIx_FRONT_FACING",
    "TMIx_BACK_FACING",
    "TMIx_PRIM_VISIBLE",
    "TMIx_PRIM_CULLED",
    "TMIx_PRIM_CLIPPED",
    "TMIx_PRIM_SAT_CULLED",
    "",
    "",
    "TMIx_BUS_READ",
    "",
    "TMIx_BUS_WRITE",
    "TMIx_LOADING_DESC",
    "TMIx_IDVS_POS_SHAD_REQ",
    "TMIx_IDVS_POS_SHAD_WAIT",
    "TMIx_IDVS_POS_SHAD_STALL",
    "TMIx_IDVS_POS_FIFO_FULL",
    "TMIx_PREFETCH_STALL",
    "TMIx_VCACHE_HIT",
    "TMIx_VCACHE_MISS",
    "TMIx_VCACHE_LINE_WAIT",
    "TMIx_VFETCH_POS_READ_WAIT",
    "TMIx_VFETCH_VERTEX_WAIT",
    "TMIx_VFETCH_STALL",
    "TMIx_PRIMASSY_STALL",
    "TMIx_BBOX_GEN_STALL",
    "TMIx_IDVS_VBU_HIT",
    "TMIx_IDVS_VBU_MISS",
    "TMIx_IDVS_VBU_LINE_DEALLOCATE",
    "TMIx_IDVS_VAR_SHAD_REQ",
    "TMIx_IDVS_VAR_SHAD_STALL",
    "TMIx_BINNER_STALL",
    "TMIx_ITER_STALL",
    "TMIx_COMPRESS_MISS",
    "TMIx_COMPRESS_STALL",
    "TMIx_PCACHE_HIT",
    "TMIx_PCACHE_MISS",
    "TMIx_PCACHE_MISS_STALL",
    "TMIx_PCACHE_EVICT_STALL",
    "TMIx_PMGR_PTR_WR_STALL",
    "TMIx_PMGR_PTR_RD_STALL",
    "TMIx_PMGR_CMD_WR_STALL",
    "TMIx_WRBUF_ACTIVE",
    "TMIx_WRBUF_HIT",
    "TMIx_WRBUF_MISS",
    "TMIx_WRBUF_NO_FREE_LINE_STALL",
    "TMIx_WRBUF_NO_AXI_ID_STALL",
    "TMIx_WRBUF_AXI_STALL",
    "",
    "",
    "",
    "TMIx_UTLB_TRANS",
    "TMIx_UTLB_TRANS_HIT",
    "TMIx_UTLB_TRANS_STALL",
    "TMIx_UTLB_TRANS_MISS_DELAY",
    "TMIx_UTLB_MMU_REQ",

    /* Performance counters for the Shader Core */
    "",
    "",
    "",
    "",
    "TMIx_FRAG_ACTIVE",
    "TMIx_FRAG_PRIMITIVES",
    "TMIx_FRAG_PRIM_RAST",
    "TMIx_FRAG_FPK_ACTIVE",
    "TMIx_FRAG_STARVING",
    "TMIx_FRAG_WARPS",
    "TMIx_FRAG_PARTIAL_WARPS",
    "TMIx_FRAG_QUADS_RAST",
    "TMIx_FRAG_QUADS_EZS_TEST",
    "TMIx_FRAG_QUADS_EZS_UPDATE",
    "TMIx_FRAG_QUADS_EZS_KILL",
    "TMIx_FRAG_LZS_TEST",
    "TMIx_FRAG_LZS_KILL",
    "",
    "TMIx_FRAG_PTILES",
    "TMIx_FRAG_TRANS_ELIM",
    "TMIx_QUAD_FPK_KILLER",
    "",
    "TMIx_COMPUTE_ACTIVE",
    "TMIx_COMPUTE_TASKS",
    "TMIx_COMPUTE_WARPS",
    "TMIx_COMPUTE_STARVING",
    "TMIx_EXEC_CORE_ACTIVE",
    "TMIx_EXEC_ACTIVE",
    "TMIx_EXEC_INSTR_COUNT",
    "TMIx_EXEC_INSTR_DIVERGED",
    "TMIx_EXEC_INSTR_STARVING",
    "TMIx_ARITH_INSTR_SINGLE_FMA",
    "TMIx_ARITH_INSTR_DOUBLE",
    "TMIx_ARITH_INSTR_MSG",
    "TMIx_ARITH_INSTR_MSG_ONLY",
    "TMIx_TEX_INSTR",
    "TMIx_TEX_INSTR_MIPMAP",
    "TMIx_TEX_INSTR_COMPRESSED",
    "TMIx_TEX_INSTR_3D",
    "TMIx_TEX_INSTR_TRILINEAR",
    "TMIx_TEX_COORD_ISSUE",
    "TMIx_TEX_COORD_STALL",
    "TMIx_TEX_STARVE_CACHE",
    "TMIx_TEX_STARVE_FILTER",
    "TMIx_LS_MEM_READ_FULL",
    "TMIx_LS_MEM_READ_SHORT",
    "TMIx_LS_MEM_WRITE_FULL",
    "TMIx_LS_MEM_WRITE_SHORT",
    "TMIx_LS_MEM_ATOMIC",
    "TMIx_VARY_INSTR",
    "TMIx_VARY_SLOT_32",
    "TMIx_VARY_SLOT_16",
    "TMIx_ATTR_INSTR",
    "TMIx_ARITH_INSTR_FP_MUL",
    "TMIx_BEATS_RD_FTC",
    "TMIx_BEATS_RD_FTC_EXT",
    "TMIx_BEATS_RD_LSC",
    "TMIx_BEATS_RD_LSC_EXT",
    "TMIx_BEATS_RD_TEX",
    "TMIx_BEATS_RD_TEX_EXT",
    "TMIx_BEATS_RD_OTHER",
    "TMIx_BEATS_WR_LSC",
    "TMIx_BEATS_WR_TIB",
    "",

    /* Performance counters for the Memory System */
    "",
    "",
    "",
    "",
    "TMIx_MMU_REQUESTS",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "TMIx_L2_RD_MSG_IN",
    "TMIx_L2_RD_MSG_IN_STALL",
    "TMIx_L2_WR_MSG_IN",
    "TMIx_L2_WR_MSG_IN_STALL",
    "TMIx_L2_SNP_MSG_IN",
    "TMIx_L2_SNP_MSG_IN_STALL",
    "TMIx_L2_RD_MSG_OUT",
    "TMIx_L2_RD_MSG_OUT_STALL",
    "TMIx_L2_WR_MSG_OUT",
    "TMIx_L2_ANY_LOOKUP",
    "TMIx_L2_READ_LOOKUP",
    "TMIx_L2_WRITE_LOOKUP",
    "TMIx_L2_EXT_SNOOP_LOOKUP",
    "TMIx_L2_EXT_READ",
    "TMIx_L2_EXT_READ_NOSNP",
    "TMIx_L2_EXT_READ_UNIQUE",
    "TMIx_L2_EXT_READ_BEATS",
    "TMIx_L2_EXT_AR_STALL",
    "TMIx_L2_EXT_AR_CNT_Q1",
    "TMIx_L2_EXT_AR_CNT_Q2",
    "TMIx_L2_EXT_AR_CNT_Q3",
    "TMIx_L2_EXT_RRESP_0_127",
    "TMIx_L2_EXT_RRESP_128_191",
    "TMIx_L2_EXT_RRESP_192_255",
    "TMIx_L2_EXT_RRESP_256_319",
    "TMIx_L2_EXT_RRESP_320_383",
    "TMIx_L2_EXT_WRITE",
    "TMIx_L2_EXT_WRITE_NOSNP_FULL",
    "TMIx_L2_EXT_WRITE_NOSNP_PTL",
    "TMIx_L2_EXT_WRITE_SNP_FULL",
    "TMIx_L2_EXT_WRITE_SNP_PTL",
    "TMIx_L2_EXT_WRITE_BEATS",
    "TMIx_L2_EXT_W_STALL",
    "TMIx_L2_EXT_AW_CNT_Q1",
    "TMIx_L2_EXT_AW_CNT_Q2",
    "TMIx_L2_EXT_AW_CNT_Q3",
    "TMIx_L2_EXT_SNOOP",
    "TMIx_L2_EXT_SNOOP_STALL",
    "TMIx_L2_EXT_SNOOP_RESP_CLEAN",
    "TMIx_L2_EXT_SNOOP_RESP_DATA",
    "TMIx_L2_EXT_SNOOP_INTERNAL",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
};

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_BUS_READ",
    "",
    "TSIx_BUS_WRITE",
    "TSIx_LOADING_DESC",
    "",
    "",
    "",
    "",
    "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_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_INSTR",
    "TSIx_TEX_INSTR_MIPMAP",
    "TSIx_TEX_INSTR_COMPRESSED",
    "TSIx_TEX_INSTR_3D",
    "TSIx_TEX_INSTR_TRILINEAR",
    "TSIx_TEX_COORD_ISSUE",
    "TSIx_TEX_COORD_STALL",
    "TSIx_TEX_STARVE_CACHE",
    "TSIx_TEX_STARVE_FILTER",
    "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",
    "TSIx_BEATS_WR_TIB",
    "",

    /* 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",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
};

enum
{
    /* product id masks for old and new versions of the id field. NB: the T60x must be tested before anything else as it could exceptionally be
         * treated as a new style of id with produce code 0x6006 */
    PRODUCT_ID_MASK_OLD = 0xffff,
    PRODUCT_ID_MASK_NEW = 0xf00f,
    /* Old style product ids */
    PRODUCT_ID_T60X = 0x6956,
    PRODUCT_ID_T62X = 0x0620,
    PRODUCT_ID_T72X = 0x0720,
    PRODUCT_ID_T76X = 0x0750,
    PRODUCT_ID_T82X = 0x0820,
    PRODUCT_ID_T83X = 0x0830,
    PRODUCT_ID_T86X = 0x0860,
    PRODUCT_ID_TFRX = 0x0880,
    /* New style product ids */
    PRODUCT_ID_TMIX = 0x6000,
    PRODUCT_ID_THEX = 0x6001,
    PRODUCT_ID_TSIX = 0x7000
};

struct CounterMapping
{
    uint32_t           product_mask;
    uint32_t           product_id;
    const char *const *names_lut;
};

static const CounterMapping products[] =
{
    {
        PRODUCT_ID_MASK_OLD, PRODUCT_ID_T60X, hardware_counters_mali_t60x,
    },
    {
        PRODUCT_ID_MASK_OLD, PRODUCT_ID_T62X, hardware_counters_mali_t62x,
    },
    {
        PRODUCT_ID_MASK_OLD, PRODUCT_ID_T72X, hardware_counters_mali_t72x,
    },
    {
        PRODUCT_ID_MASK_OLD, PRODUCT_ID_T76X, hardware_counters_mali_t76x,
    },
    {
        PRODUCT_ID_MASK_OLD, PRODUCT_ID_T82X, hardware_counters_mali_t82x,
    },
    {
        PRODUCT_ID_MASK_OLD, PRODUCT_ID_T83X, hardware_counters_mali_t83x,
    },
    {
        PRODUCT_ID_MASK_OLD, PRODUCT_ID_T86X, hardware_counters_mali_t86x,
    },
    {
        PRODUCT_ID_MASK_OLD, PRODUCT_ID_TFRX, hardware_counters_mali_t88x,
    },
    {
        PRODUCT_ID_MASK_NEW, PRODUCT_ID_TMIX, hardware_counters_mali_tMIx,
    },
    {
        PRODUCT_ID_MASK_NEW, PRODUCT_ID_THEX, hardware_counters_mali_tHEx,
    },
    {
        PRODUCT_ID_MASK_NEW, PRODUCT_ID_TSIX, hardware_counters_mali_tSIx,
    },
};

enum
{
    NUM_PRODUCTS = sizeof(products) / sizeof(products[0])
};
} // namespace mali_userspace

#endif /* DOXYGEN_SKIP_THIS */

#endif /* ARM_COMPUTE_TEST_HWC_NAMES */
