// SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2021, The Linux Foundation. All rights reserved. * Copyright (c) 2023-2024, Qualcomm Innovation Center, Inc. All rights reserved. */ #include "adreno.h" #include "adreno_gen8.h" #include "adreno_perfcounter.h" #include "adreno_pm4types.h" #include "kgsl_device.h" #define PERFCOUNTER_FLUSH_DONE_MASK BIT(0) static void gen8_rbbm_perfctr_flush(struct kgsl_device *device) { u32 val; int ret; /* * Flush delta counters (both perf counters and pipe stats) present in * RBBM_S and RBBM_US to perf RAM logic to get the latest data. */ kgsl_regwrite(device, GEN8_RBBM_PERFCTR_FLUSH_HOST_CMD, BIT(0)); kgsl_regwrite(device, GEN8_RBBM_SLICE_PERFCTR_FLUSH_HOST_CMD, BIT(0)); ret = kgsl_regmap_read_poll_timeout(&device->regmap, GEN8_RBBM_PERFCTR_FLUSH_HOST_STATUS, val, (val & PERFCOUNTER_FLUSH_DONE_MASK) == PERFCOUNTER_FLUSH_DONE_MASK, 100, 100 * 1000); if (ret) dev_err(device->dev, "Perfcounter flush timed out: status=0x%08x\n", val); } /* * For registers that do not get restored on power cycle, read the value and add * the stored shadow value */ static u64 gen8_counter_read_norestore(struct adreno_device *adreno_dev, const struct adreno_perfcount_group *group, u32 counter) { struct kgsl_device *device = KGSL_DEVICE(adreno_dev); struct adreno_perfcount_register *reg = &group->regs[counter]; u32 hi, lo; gen8_rbbm_perfctr_flush(device); kgsl_regread(device, reg->offset, &lo); kgsl_regread(device, reg->offset_hi, &hi); return ((((u64) hi) << 32) | lo) + reg->value; } static int gen8_counter_br_enable(struct adreno_device *adreno_dev, const struct adreno_perfcount_group *group, u32 counter, u32 countable) { struct kgsl_device *device = KGSL_DEVICE(adreno_dev); struct adreno_perfcount_register *reg = &group->regs[counter]; int ret = 0; u32 val = 0; kgsl_regread(device, GEN8_CP_APERTURE_CNTL_HOST, &val); kgsl_regwrite(device, GEN8_CP_APERTURE_CNTL_HOST, FIELD_PREP(GENMASK(15, 12), PIPE_BR)); ret = gen8_perfcounter_update(adreno_dev, reg, true, FIELD_PREP(GENMASK(15, 12), PIPE_BR), group->flags); kgsl_regwrite(device, GEN8_CP_APERTURE_CNTL_HOST, val); /* Ensure all writes are posted before reading the piped register */ mb(); if (!ret) reg->value = 0; return ret; } static int gen8_counter_bv_enable(struct adreno_device *adreno_dev, const struct adreno_perfcount_group *group, u32 counter, u32 countable) { struct kgsl_device *device = KGSL_DEVICE(adreno_dev); struct adreno_perfcount_register *reg = &group->regs[counter]; int ret = 0; u32 val = 0; kgsl_regread(device, GEN8_CP_APERTURE_CNTL_HOST, &val); kgsl_regwrite(device, GEN8_CP_APERTURE_CNTL_HOST, FIELD_PREP(GENMASK(15, 12), PIPE_BV)); ret = gen8_perfcounter_update(adreno_dev, reg, true, FIELD_PREP(GENMASK(15, 12), PIPE_BV), group->flags); kgsl_regwrite(device, GEN8_CP_APERTURE_CNTL_HOST, val); /* Ensure all writes are posted before reading the piped register */ mb(); if (!ret) reg->value = 0; return ret; } static int gen8_counter_enable(struct adreno_device *adreno_dev, const struct adreno_perfcount_group *group, u32 counter, u32 countable) { struct adreno_perfcount_register *reg = &group->regs[counter]; int ret = 0; ret = gen8_perfcounter_update(adreno_dev, reg, true, FIELD_PREP(GENMASK(15, 12), PIPE_NONE), group->flags); if (!ret) reg->value = 0; return ret; } static u64 gen8_counter_read(struct adreno_device *adreno_dev, const struct adreno_perfcount_group *group, u32 counter) { struct kgsl_device *device = KGSL_DEVICE(adreno_dev); struct adreno_perfcount_register *reg = &group->regs[counter]; u32 hi, lo; gen8_rbbm_perfctr_flush(device); kgsl_regread(device, reg->offset, &lo); kgsl_regread(device, reg->offset_hi, &hi); /* These registers are restored on power resume */ return (((u64) hi) << 32) | lo; } static int gen8_counter_gbif_enable(struct adreno_device *adreno_dev, const struct adreno_perfcount_group *group, u32 counter, u32 countable) { struct kgsl_device *device = KGSL_DEVICE(adreno_dev); struct adreno_perfcount_register *reg = &group->regs[counter]; u32 shift = counter << 3; u32 select = BIT(counter); if (countable > 0xff) return -EINVAL; /* * Write 1, followed by 0 to CLR register for * clearing the counter */ kgsl_regrmw(device, GEN8_GBIF_PERF_PWR_CNT_CLR, select, select); kgsl_regrmw(device, GEN8_GBIF_PERF_PWR_CNT_CLR, select, 0); /* select the desired countable */ kgsl_regrmw(device, reg->select, 0xff << shift, countable << shift); /* enable counter */ kgsl_regrmw(device, GEN8_GBIF_PERF_PWR_CNT_EN, select, select); reg->value = 0; return 0; } static int gen8_counter_gbif_pwr_enable(struct adreno_device *adreno_dev, const struct adreno_perfcount_group *group, u32 counter, u32 countable) { struct kgsl_device *device = KGSL_DEVICE(adreno_dev); struct adreno_perfcount_register *reg = &group->regs[counter]; u32 shift = counter << 3; u32 select = BIT(16 + counter); if (countable > 0xff) return -EINVAL; /* * Write 1, followed by 0 to CLR register for * clearing the counter */ kgsl_regrmw(device, GEN8_GBIF_PERF_PWR_CNT_CLR, select, select); kgsl_regrmw(device, GEN8_GBIF_PERF_PWR_CNT_CLR, select, 0); /* select the desired countable */ kgsl_regrmw(device, reg->select, 0xff << shift, countable << shift); /* Enable the counter */ kgsl_regrmw(device, GEN8_GBIF_PERF_PWR_CNT_EN, select, select); reg->value = 0; return 0; } static int gen8_counter_alwayson_enable(struct adreno_device *adreno_dev, const struct adreno_perfcount_group *group, u32 counter, u32 countable) { return 0; } static u64 gen8_counter_alwayson_read(struct adreno_device *adreno_dev, const struct adreno_perfcount_group *group, u32 counter) { struct adreno_perfcount_register *reg = &group->regs[counter]; const struct adreno_gpudev *gpudev = ADRENO_GPU_DEVICE(adreno_dev); return gpudev->read_alwayson(adreno_dev) + reg->value; } static void gen8_write_gmu_counter_enable(struct kgsl_device *device, struct adreno_perfcount_register *reg, u32 bit, u32 countable) { kgsl_regrmw(device, reg->select, 0xff << bit, countable << bit); } static int gen8_counter_gmu_pwr_enable(struct adreno_device *adreno_dev, const struct adreno_perfcount_group *group, u32 counter, u32 countable) { struct kgsl_device *device = KGSL_DEVICE(adreno_dev); struct adreno_perfcount_register *reg = &group->regs[counter]; /* Four counters can be programmed per select register */ int offset = counter % 4; if (countable > 0xff) return -EINVAL; gen8_write_gmu_counter_enable(device, reg, offset << 3, countable); kgsl_regwrite(device, GEN8_GMUCX_POWER_COUNTER_ENABLE, 1); reg->value = 0; return 0; } static int gen8_counter_gmu_perf_enable(struct adreno_device *adreno_dev, const struct adreno_perfcount_group *group, u32 counter, u32 countable) { struct kgsl_device *device = KGSL_DEVICE(adreno_dev); struct adreno_perfcount_register *reg = &group->regs[counter]; /* Four counters can be programmed per select register */ int offset = counter % 4; if (countable > 0xff) return -EINVAL; gen8_write_gmu_counter_enable(device, reg, offset << 3, countable); kgsl_regwrite(device, GEN8_GMUCX_PERF_COUNTER_ENABLE, 1); reg->value = 0; return 0; } static struct adreno_perfcount_register gen8_perfcounters_cp[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_0_LO, GEN8_RBBM_PERFCTR_CP_0_HI, -1, GEN8_CP_PERFCTR_CP_SEL_0 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_1_LO, GEN8_RBBM_PERFCTR_CP_1_HI, -1, GEN8_CP_PERFCTR_CP_SEL_1 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_2_LO, GEN8_RBBM_PERFCTR_CP_2_HI, -1, GEN8_CP_PERFCTR_CP_SEL_2 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_3_LO, GEN8_RBBM_PERFCTR_CP_3_HI, -1, GEN8_CP_PERFCTR_CP_SEL_3 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_4_LO, GEN8_RBBM_PERFCTR_CP_4_HI, -1, GEN8_CP_PERFCTR_CP_SEL_4 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_5_LO, GEN8_RBBM_PERFCTR_CP_5_HI, -1, GEN8_CP_PERFCTR_CP_SEL_5 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_6_LO, GEN8_RBBM_PERFCTR_CP_6_HI, -1, GEN8_CP_PERFCTR_CP_SEL_6 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_7_LO, GEN8_RBBM_PERFCTR_CP_7_HI, -1, GEN8_CP_PERFCTR_CP_SEL_7 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_8_LO, GEN8_RBBM_PERFCTR_CP_8_HI, -1, GEN8_CP_PERFCTR_CP_SEL_8 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_9_LO, GEN8_RBBM_PERFCTR_CP_9_HI, -1, GEN8_CP_PERFCTR_CP_SEL_9 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_10_LO, GEN8_RBBM_PERFCTR_CP_10_HI, -1, GEN8_CP_PERFCTR_CP_SEL_10 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_11_LO, GEN8_RBBM_PERFCTR_CP_11_HI, -1, GEN8_CP_PERFCTR_CP_SEL_11 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_12_LO, GEN8_RBBM_PERFCTR_CP_12_HI, -1, GEN8_CP_PERFCTR_CP_SEL_12 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_13_LO, GEN8_RBBM_PERFCTR_CP_13_HI, -1, GEN8_CP_PERFCTR_CP_SEL_13 }, }; static struct adreno_perfcount_register gen8_perfcounters_bv_cp[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_CP_0_LO, GEN8_RBBM_PERFCTR2_CP_0_HI, -1, GEN8_CP_PERFCTR_CP_SEL_14 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_CP_1_LO, GEN8_RBBM_PERFCTR2_CP_1_HI, -1, GEN8_CP_PERFCTR_CP_SEL_15 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_CP_2_LO, GEN8_RBBM_PERFCTR2_CP_2_HI, -1, GEN8_CP_PERFCTR_CP_SEL_16 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_CP_3_LO, GEN8_RBBM_PERFCTR2_CP_3_HI, -1, GEN8_CP_PERFCTR_CP_SEL_17 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_CP_4_LO, GEN8_RBBM_PERFCTR2_CP_4_HI, -1, GEN8_CP_PERFCTR_CP_SEL_18 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_CP_5_LO, GEN8_RBBM_PERFCTR2_CP_5_HI, -1, GEN8_CP_PERFCTR_CP_SEL_19 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_CP_6_LO, GEN8_RBBM_PERFCTR2_CP_6_HI, -1, GEN8_CP_PERFCTR_CP_SEL_20 }, }; static struct adreno_perfcount_register gen8_perfcounters_rbbm[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RBBM_0_LO, GEN8_RBBM_PERFCTR_RBBM_0_HI, -1, GEN8_RBBM_PERFCTR_RBBM_SEL_0, 0, { GEN8_RBBM_SLICE_PERFCTR_RBBM_SEL_0 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RBBM_1_LO, GEN8_RBBM_PERFCTR_RBBM_1_HI, -1, GEN8_RBBM_PERFCTR_RBBM_SEL_1, 0, { GEN8_RBBM_SLICE_PERFCTR_RBBM_SEL_0 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RBBM_2_LO, GEN8_RBBM_PERFCTR_RBBM_2_HI, -1, GEN8_RBBM_PERFCTR_RBBM_SEL_2, 0, { GEN8_RBBM_SLICE_PERFCTR_RBBM_SEL_0 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RBBM_3_LO, GEN8_RBBM_PERFCTR_RBBM_3_HI, -1, GEN8_RBBM_PERFCTR_RBBM_SEL_3, 0, { GEN8_RBBM_SLICE_PERFCTR_RBBM_SEL_0 } }, }; static struct adreno_perfcount_register gen8_perfcounters_pc[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_PC_0_LO, GEN8_RBBM_PERFCTR_PC_0_HI, -1, GEN8_PC_PERFCTR_PC_SEL_0, 0, { GEN8_PC_SLICE_PERFCTR_PC_SEL_0 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_PC_1_LO, GEN8_RBBM_PERFCTR_PC_1_HI, -1, GEN8_PC_PERFCTR_PC_SEL_1, 0, { GEN8_PC_SLICE_PERFCTR_PC_SEL_1 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_PC_2_LO, GEN8_RBBM_PERFCTR_PC_2_HI, -1, GEN8_PC_PERFCTR_PC_SEL_2, 0, { GEN8_PC_SLICE_PERFCTR_PC_SEL_2 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_PC_3_LO, GEN8_RBBM_PERFCTR_PC_3_HI, -1, GEN8_PC_PERFCTR_PC_SEL_3, 0, { GEN8_PC_SLICE_PERFCTR_PC_SEL_3 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_PC_4_LO, GEN8_RBBM_PERFCTR_PC_4_HI, -1, GEN8_PC_PERFCTR_PC_SEL_4, 0, { GEN8_PC_SLICE_PERFCTR_PC_SEL_4 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_PC_5_LO, GEN8_RBBM_PERFCTR_PC_5_HI, -1, GEN8_PC_PERFCTR_PC_SEL_5, 0, { GEN8_PC_SLICE_PERFCTR_PC_SEL_5 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_PC_6_LO, GEN8_RBBM_PERFCTR_PC_6_HI, -1, GEN8_PC_PERFCTR_PC_SEL_6, 0, { GEN8_PC_SLICE_PERFCTR_PC_SEL_6 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_PC_7_LO, GEN8_RBBM_PERFCTR_PC_7_HI, -1, GEN8_PC_PERFCTR_PC_SEL_7, 0, { GEN8_PC_SLICE_PERFCTR_PC_SEL_7 } }, }; static struct adreno_perfcount_register gen8_perfcounters_bv_pc[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_PC_0_LO, GEN8_RBBM_PERFCTR_BV_PC_0_HI, -1, GEN8_PC_PERFCTR_PC_SEL_8, 0, { GEN8_PC_SLICE_PERFCTR_PC_SEL_8 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_PC_1_LO, GEN8_RBBM_PERFCTR_BV_PC_1_HI, -1, GEN8_PC_PERFCTR_PC_SEL_9, 0, { GEN8_PC_SLICE_PERFCTR_PC_SEL_9 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_PC_2_LO, GEN8_RBBM_PERFCTR_BV_PC_2_HI, -1, GEN8_PC_PERFCTR_PC_SEL_10, 0, { GEN8_PC_SLICE_PERFCTR_PC_SEL_10 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_PC_3_LO, GEN8_RBBM_PERFCTR_BV_PC_3_HI, -1, GEN8_PC_PERFCTR_PC_SEL_11, 0, { GEN8_PC_SLICE_PERFCTR_PC_SEL_11 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_PC_4_LO, GEN8_RBBM_PERFCTR_BV_PC_4_HI, -1, GEN8_PC_PERFCTR_PC_SEL_12, 0, { GEN8_PC_SLICE_PERFCTR_PC_SEL_12 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_PC_5_LO, GEN8_RBBM_PERFCTR_BV_PC_5_HI, -1, GEN8_PC_PERFCTR_PC_SEL_13, 0, { GEN8_PC_SLICE_PERFCTR_PC_SEL_13 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_PC_6_LO, GEN8_RBBM_PERFCTR_BV_PC_6_HI, -1, GEN8_PC_PERFCTR_PC_SEL_14, 0, { GEN8_PC_SLICE_PERFCTR_PC_SEL_14 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_PC_7_LO, GEN8_RBBM_PERFCTR_BV_PC_7_HI, -1, GEN8_PC_PERFCTR_PC_SEL_15, 0, { GEN8_PC_SLICE_PERFCTR_PC_SEL_15 } }, }; static struct adreno_perfcount_register gen8_perfcounters_vfd[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VFD_0_LO, GEN8_RBBM_PERFCTR_VFD_0_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_0 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VFD_1_LO, GEN8_RBBM_PERFCTR_VFD_1_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_1 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VFD_2_LO, GEN8_RBBM_PERFCTR_VFD_2_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_2 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VFD_3_LO, GEN8_RBBM_PERFCTR_VFD_3_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_3 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VFD_4_LO, GEN8_RBBM_PERFCTR_VFD_4_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_4 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VFD_5_LO, GEN8_RBBM_PERFCTR_VFD_5_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_5 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VFD_6_LO, GEN8_RBBM_PERFCTR_VFD_6_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_6 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VFD_7_LO, GEN8_RBBM_PERFCTR_VFD_7_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_7 }, }; static struct adreno_perfcount_register gen8_perfcounters_bv_vfd[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VFD_0_LO, GEN8_RBBM_PERFCTR_BV_VFD_0_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_8 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VFD_1_LO, GEN8_RBBM_PERFCTR_BV_VFD_1_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_9 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VFD_2_LO, GEN8_RBBM_PERFCTR_BV_VFD_2_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_10 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VFD_3_LO, GEN8_RBBM_PERFCTR_BV_VFD_3_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_11 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VFD_4_LO, GEN8_RBBM_PERFCTR_BV_VFD_4_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_12 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VFD_5_LO, GEN8_RBBM_PERFCTR_BV_VFD_5_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_13 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VFD_6_LO, GEN8_RBBM_PERFCTR_BV_VFD_6_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_14 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VFD_7_LO, GEN8_RBBM_PERFCTR_BV_VFD_7_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_15 }, }; static struct adreno_perfcount_register gen8_perfcounters_hlsq[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_HLSQ_0_LO, GEN8_RBBM_PERFCTR_HLSQ_0_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_0, 0, { GEN8_SP_PERFCTR_HLSQ_SEL_2_0 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_HLSQ_1_LO, GEN8_RBBM_PERFCTR_HLSQ_1_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_1, 0, { GEN8_SP_PERFCTR_HLSQ_SEL_2_1 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_HLSQ_2_LO, GEN8_RBBM_PERFCTR_HLSQ_2_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_2, 0, { GEN8_SP_PERFCTR_HLSQ_SEL_2_2 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_HLSQ_3_LO, GEN8_RBBM_PERFCTR_HLSQ_3_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_3, 0, { GEN8_SP_PERFCTR_HLSQ_SEL_2_3 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_HLSQ_4_LO, GEN8_RBBM_PERFCTR_HLSQ_4_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_4, 0, { GEN8_SP_PERFCTR_HLSQ_SEL_2_4 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_HLSQ_5_LO, GEN8_RBBM_PERFCTR_HLSQ_5_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_5, 0, { GEN8_SP_PERFCTR_HLSQ_SEL_2_5 } }, }; static struct adreno_perfcount_register gen8_perfcounters_bv_hlsq[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_HLSQ_0_LO, GEN8_RBBM_PERFCTR2_HLSQ_0_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_0, 0, { GEN8_SP_PERFCTR_HLSQ_SEL_2_0 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_HLSQ_1_LO, GEN8_RBBM_PERFCTR2_HLSQ_1_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_1, 0, { GEN8_SP_PERFCTR_HLSQ_SEL_2_1 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_HLSQ_2_LO, GEN8_RBBM_PERFCTR2_HLSQ_2_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_2, 0, { GEN8_SP_PERFCTR_HLSQ_SEL_2_2 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_HLSQ_3_LO, GEN8_RBBM_PERFCTR2_HLSQ_3_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_3, 0, { GEN8_SP_PERFCTR_HLSQ_SEL_2_3 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_HLSQ_4_LO, GEN8_RBBM_PERFCTR2_HLSQ_4_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_4, 0, { GEN8_SP_PERFCTR_HLSQ_SEL_2_4 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_HLSQ_5_LO, GEN8_RBBM_PERFCTR2_HLSQ_5_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_5, 0, { GEN8_SP_PERFCTR_HLSQ_SEL_2_5 } }, }; static struct adreno_perfcount_register gen8_perfcounters_vpc[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VPC_0_LO, GEN8_RBBM_PERFCTR_VPC_0_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_0, 0, { GEN8_VPC_PERFCTR_VPC_SEL_1_0, GEN8_VPC_PERFCTR_VPC_SEL_2_0 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VPC_1_LO, GEN8_RBBM_PERFCTR_VPC_1_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_1, 0, { GEN8_VPC_PERFCTR_VPC_SEL_1_1, GEN8_VPC_PERFCTR_VPC_SEL_2_1 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VPC_2_LO, GEN8_RBBM_PERFCTR_VPC_2_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_2, 0, { GEN8_VPC_PERFCTR_VPC_SEL_1_2, GEN8_VPC_PERFCTR_VPC_SEL_2_2 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VPC_3_LO, GEN8_RBBM_PERFCTR_VPC_3_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_3, 0, { GEN8_VPC_PERFCTR_VPC_SEL_1_3, GEN8_VPC_PERFCTR_VPC_SEL_2_3 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VPC_4_LO, GEN8_RBBM_PERFCTR_VPC_4_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_4, 0, { GEN8_VPC_PERFCTR_VPC_SEL_1_4, GEN8_VPC_PERFCTR_VPC_SEL_2_4 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VPC_5_LO, GEN8_RBBM_PERFCTR_VPC_5_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_5, 0, { GEN8_VPC_PERFCTR_VPC_SEL_1_5, GEN8_VPC_PERFCTR_VPC_SEL_2_5 } }, }; static struct adreno_perfcount_register gen8_perfcounters_bv_vpc[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VPC_0_LO, GEN8_RBBM_PERFCTR_BV_VPC_0_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_2_6, 0, { GEN8_VPC_PERFCTR_VPC_SEL_1_6, GEN8_VPC_PERFCTR_VPC_SEL_2_6 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VPC_1_LO, GEN8_RBBM_PERFCTR_BV_VPC_1_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_2_7, 0, { GEN8_VPC_PERFCTR_VPC_SEL_1_7, GEN8_VPC_PERFCTR_VPC_SEL_2_7 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VPC_2_LO, GEN8_RBBM_PERFCTR_BV_VPC_2_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_2_8, 0, { GEN8_VPC_PERFCTR_VPC_SEL_1_8, GEN8_VPC_PERFCTR_VPC_SEL_2_8 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VPC_3_LO, GEN8_RBBM_PERFCTR_BV_VPC_3_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_2_9, 0, { GEN8_VPC_PERFCTR_VPC_SEL_1_9, GEN8_VPC_PERFCTR_VPC_SEL_2_9 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VPC_4_LO, GEN8_RBBM_PERFCTR_BV_VPC_4_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_2_10, 0, { GEN8_VPC_PERFCTR_VPC_SEL_1_10, GEN8_VPC_PERFCTR_VPC_SEL_2_10 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VPC_5_LO, GEN8_RBBM_PERFCTR_BV_VPC_5_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_2_11, 0, { GEN8_VPC_PERFCTR_VPC_SEL_1_11, GEN8_VPC_PERFCTR_VPC_SEL_2_11 } }, }; static struct adreno_perfcount_register gen8_perfcounters_ccu[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CCU_0_LO, GEN8_RBBM_PERFCTR_CCU_0_HI, -1, GEN8_RB_PERFCTR_CCU_SEL_0 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CCU_1_LO, GEN8_RBBM_PERFCTR_CCU_1_HI, -1, GEN8_RB_PERFCTR_CCU_SEL_1 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CCU_2_LO, GEN8_RBBM_PERFCTR_CCU_2_HI, -1, GEN8_RB_PERFCTR_CCU_SEL_2 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CCU_3_LO, GEN8_RBBM_PERFCTR_CCU_3_HI, -1, GEN8_RB_PERFCTR_CCU_SEL_3 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CCU_4_LO, GEN8_RBBM_PERFCTR_CCU_4_HI, -1, GEN8_RB_PERFCTR_CCU_SEL_4 }, }; static struct adreno_perfcount_register gen8_perfcounters_tse[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TSE_0_LO, GEN8_RBBM_PERFCTR_TSE_0_HI, -1, GEN8_GRAS_PERFCTR_TSE_SEL_0, 0, { GEN8_GRAS_PERFCTR_TSEFE_SEL_0 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TSE_1_LO, GEN8_RBBM_PERFCTR_TSE_1_HI, -1, GEN8_GRAS_PERFCTR_TSE_SEL_1, 0, { GEN8_GRAS_PERFCTR_TSEFE_SEL_1 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TSE_2_LO, GEN8_RBBM_PERFCTR_TSE_2_HI, -1, GEN8_GRAS_PERFCTR_TSE_SEL_2, 0, { GEN8_GRAS_PERFCTR_TSEFE_SEL_2 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TSE_3_LO, GEN8_RBBM_PERFCTR_TSE_3_HI, -1, GEN8_GRAS_PERFCTR_TSE_SEL_3, 0, { GEN8_GRAS_PERFCTR_TSEFE_SEL_3 } }, }; static struct adreno_perfcount_register gen8_perfcounters_bv_tse[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_TSE_0_LO, GEN8_RBBM_PERFCTR_BV_TSE_0_HI, -1, GEN8_GRAS_PERFCTR_TSE_SEL_0, 0, { GEN8_GRAS_PERFCTR_TSEFE_SEL_0 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_TSE_1_LO, GEN8_RBBM_PERFCTR_BV_TSE_1_HI, -1, GEN8_GRAS_PERFCTR_TSE_SEL_1, 0, { GEN8_GRAS_PERFCTR_TSEFE_SEL_1 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_TSE_2_LO, GEN8_RBBM_PERFCTR_BV_TSE_2_HI, -1, GEN8_GRAS_PERFCTR_TSE_SEL_2, 0, { GEN8_GRAS_PERFCTR_TSEFE_SEL_2 } }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_TSE_3_LO, GEN8_RBBM_PERFCTR_BV_TSE_3_HI, -1, GEN8_GRAS_PERFCTR_TSE_SEL_3, 0, { GEN8_GRAS_PERFCTR_TSEFE_SEL_3 } }, }; static struct adreno_perfcount_register gen8_perfcounters_ras[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RAS_0_LO, GEN8_RBBM_PERFCTR_RAS_0_HI, -1, GEN8_GRAS_PERFCTR_RAS_SEL_0 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RAS_1_LO, GEN8_RBBM_PERFCTR_RAS_1_HI, -1, GEN8_GRAS_PERFCTR_RAS_SEL_1 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RAS_2_LO, GEN8_RBBM_PERFCTR_RAS_2_HI, -1, GEN8_GRAS_PERFCTR_RAS_SEL_2 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RAS_3_LO, GEN8_RBBM_PERFCTR_RAS_3_HI, -1, GEN8_GRAS_PERFCTR_RAS_SEL_3 }, }; static struct adreno_perfcount_register gen8_perfcounters_bv_ras[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_RAS_0_LO, GEN8_RBBM_PERFCTR_BV_RAS_0_HI, -1, GEN8_GRAS_PERFCTR_RAS_SEL_0 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_RAS_1_LO, GEN8_RBBM_PERFCTR_BV_RAS_1_HI, -1, GEN8_GRAS_PERFCTR_RAS_SEL_1 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_RAS_2_LO, GEN8_RBBM_PERFCTR_BV_RAS_2_HI, -1, GEN8_GRAS_PERFCTR_RAS_SEL_2 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_RAS_3_LO, GEN8_RBBM_PERFCTR_BV_RAS_3_HI, -1, GEN8_GRAS_PERFCTR_RAS_SEL_3 }, }; static struct adreno_perfcount_register gen8_perfcounters_uche[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_0_LO, GEN8_RBBM_PERFCTR_UCHE_0_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_0 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_1_LO, GEN8_RBBM_PERFCTR_UCHE_1_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_1 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_2_LO, GEN8_RBBM_PERFCTR_UCHE_2_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_2 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_3_LO, GEN8_RBBM_PERFCTR_UCHE_3_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_3 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_4_LO, GEN8_RBBM_PERFCTR_UCHE_4_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_4 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_5_LO, GEN8_RBBM_PERFCTR_UCHE_5_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_5 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_6_LO, GEN8_RBBM_PERFCTR_UCHE_6_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_6 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_7_LO, GEN8_RBBM_PERFCTR_UCHE_7_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_7 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_8_LO, GEN8_RBBM_PERFCTR_UCHE_8_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_8 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_9_LO, GEN8_RBBM_PERFCTR_UCHE_9_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_9 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_10_LO, GEN8_RBBM_PERFCTR_UCHE_10_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_10 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_11_LO, GEN8_RBBM_PERFCTR_UCHE_11_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_11 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_12_LO, GEN8_RBBM_PERFCTR_UCHE_12_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_12 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_13_LO, GEN8_RBBM_PERFCTR_UCHE_13_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_13 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_14_LO, GEN8_RBBM_PERFCTR_UCHE_14_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_14 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_15_LO, GEN8_RBBM_PERFCTR_UCHE_15_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_15 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_16_LO, GEN8_RBBM_PERFCTR_UCHE_16_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_16 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_17_LO, GEN8_RBBM_PERFCTR_UCHE_17_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_17 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_18_LO, GEN8_RBBM_PERFCTR_UCHE_18_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_18 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_19_LO, GEN8_RBBM_PERFCTR_UCHE_19_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_19 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_20_LO, GEN8_RBBM_PERFCTR_UCHE_20_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_20 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_21_LO, GEN8_RBBM_PERFCTR_UCHE_21_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_21 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_22_LO, GEN8_RBBM_PERFCTR_UCHE_22_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_22 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_23_LO, GEN8_RBBM_PERFCTR_UCHE_23_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_23 }, }; static struct adreno_perfcount_register gen8_perfcounters_tp[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_0_LO, GEN8_RBBM_PERFCTR_TP_0_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_0 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_1_LO, GEN8_RBBM_PERFCTR_TP_1_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_1 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_2_LO, GEN8_RBBM_PERFCTR_TP_2_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_2 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_3_LO, GEN8_RBBM_PERFCTR_TP_3_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_3 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_4_LO, GEN8_RBBM_PERFCTR_TP_4_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_4 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_5_LO, GEN8_RBBM_PERFCTR_TP_5_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_5 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_6_LO, GEN8_RBBM_PERFCTR_TP_6_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_6 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_7_LO, GEN8_RBBM_PERFCTR_TP_7_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_7 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_8_LO, GEN8_RBBM_PERFCTR_TP_8_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_8 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_9_LO, GEN8_RBBM_PERFCTR_TP_9_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_9 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_10_LO, GEN8_RBBM_PERFCTR_TP_10_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_10 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_11_LO, GEN8_RBBM_PERFCTR_TP_11_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_11 }, }; static struct adreno_perfcount_register gen8_perfcounters_bv_tp[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_TP_0_LO, GEN8_RBBM_PERFCTR2_TP_0_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_12 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_TP_1_LO, GEN8_RBBM_PERFCTR2_TP_1_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_13 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_TP_2_LO, GEN8_RBBM_PERFCTR2_TP_2_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_14 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_TP_3_LO, GEN8_RBBM_PERFCTR2_TP_3_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_15 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_TP_4_LO, GEN8_RBBM_PERFCTR2_TP_4_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_16 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_TP_5_LO, GEN8_RBBM_PERFCTR2_TP_5_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_17 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_TP_6_LO, GEN8_RBBM_PERFCTR2_TP_6_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_18 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_TP_7_LO, GEN8_RBBM_PERFCTR2_TP_7_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_19 }, }; static struct adreno_perfcount_register gen8_perfcounters_sp[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_0_LO, GEN8_RBBM_PERFCTR_SP_0_HI, -1, GEN8_SP_PERFCTR_SP_SEL_0 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_1_LO, GEN8_RBBM_PERFCTR_SP_1_HI, -1, GEN8_SP_PERFCTR_SP_SEL_1 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_2_LO, GEN8_RBBM_PERFCTR_SP_2_HI, -1, GEN8_SP_PERFCTR_SP_SEL_2 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_3_LO, GEN8_RBBM_PERFCTR_SP_3_HI, -1, GEN8_SP_PERFCTR_SP_SEL_3 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_4_LO, GEN8_RBBM_PERFCTR_SP_4_HI, -1, GEN8_SP_PERFCTR_SP_SEL_4 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_5_LO, GEN8_RBBM_PERFCTR_SP_5_HI, -1, GEN8_SP_PERFCTR_SP_SEL_5 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_6_LO, GEN8_RBBM_PERFCTR_SP_6_HI, -1, GEN8_SP_PERFCTR_SP_SEL_6 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_7_LO, GEN8_RBBM_PERFCTR_SP_7_HI, -1, GEN8_SP_PERFCTR_SP_SEL_7 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_8_LO, GEN8_RBBM_PERFCTR_SP_8_HI, -1, GEN8_SP_PERFCTR_SP_SEL_8 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_9_LO, GEN8_RBBM_PERFCTR_SP_9_HI, -1, GEN8_SP_PERFCTR_SP_SEL_9 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_10_LO, GEN8_RBBM_PERFCTR_SP_10_HI, -1, GEN8_SP_PERFCTR_SP_SEL_10 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_11_LO, GEN8_RBBM_PERFCTR_SP_11_HI, -1, GEN8_SP_PERFCTR_SP_SEL_11 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_12_LO, GEN8_RBBM_PERFCTR_SP_12_HI, -1, GEN8_SP_PERFCTR_SP_SEL_12 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_13_LO, GEN8_RBBM_PERFCTR_SP_13_HI, -1, GEN8_SP_PERFCTR_SP_SEL_13 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_14_LO, GEN8_RBBM_PERFCTR_SP_14_HI, -1, GEN8_SP_PERFCTR_SP_SEL_14 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_15_LO, GEN8_RBBM_PERFCTR_SP_15_HI, -1, GEN8_SP_PERFCTR_SP_SEL_15 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_16_LO, GEN8_RBBM_PERFCTR_SP_16_HI, -1, GEN8_SP_PERFCTR_SP_SEL_16 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_17_LO, GEN8_RBBM_PERFCTR_SP_17_HI, -1, GEN8_SP_PERFCTR_SP_SEL_17 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_18_LO, GEN8_RBBM_PERFCTR_SP_18_HI, -1, GEN8_SP_PERFCTR_SP_SEL_18 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_19_LO, GEN8_RBBM_PERFCTR_SP_19_HI, -1, GEN8_SP_PERFCTR_SP_SEL_19 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_20_LO, GEN8_RBBM_PERFCTR_SP_20_HI, -1, GEN8_SP_PERFCTR_SP_SEL_20 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_21_LO, GEN8_RBBM_PERFCTR_SP_21_HI, -1, GEN8_SP_PERFCTR_SP_SEL_21 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_22_LO, GEN8_RBBM_PERFCTR_SP_22_HI, -1, GEN8_SP_PERFCTR_SP_SEL_22 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_23_LO, GEN8_RBBM_PERFCTR_SP_23_HI, -1, GEN8_SP_PERFCTR_SP_SEL_23 }, }; static struct adreno_perfcount_register gen8_perfcounters_bv_sp[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_0_LO, GEN8_RBBM_PERFCTR2_SP_0_HI, -1, GEN8_SP_PERFCTR_SP_SEL_24 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_1_LO, GEN8_RBBM_PERFCTR2_SP_1_HI, -1, GEN8_SP_PERFCTR_SP_SEL_25 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_2_LO, GEN8_RBBM_PERFCTR2_SP_2_HI, -1, GEN8_SP_PERFCTR_SP_SEL_26 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_3_LO, GEN8_RBBM_PERFCTR2_SP_3_HI, -1, GEN8_SP_PERFCTR_SP_SEL_27 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_4_LO, GEN8_RBBM_PERFCTR2_SP_4_HI, -1, GEN8_SP_PERFCTR_SP_SEL_28 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_5_LO, GEN8_RBBM_PERFCTR2_SP_5_HI, -1, GEN8_SP_PERFCTR_SP_SEL_29 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_6_LO, GEN8_RBBM_PERFCTR2_SP_6_HI, -1, GEN8_SP_PERFCTR_SP_SEL_30 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_7_LO, GEN8_RBBM_PERFCTR2_SP_7_HI, -1, GEN8_SP_PERFCTR_SP_SEL_31 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_8_LO, GEN8_RBBM_PERFCTR2_SP_8_HI, -1, GEN8_SP_PERFCTR_SP_SEL_32 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_9_LO, GEN8_RBBM_PERFCTR2_SP_9_HI, -1, GEN8_SP_PERFCTR_SP_SEL_33 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_10_LO, GEN8_RBBM_PERFCTR2_SP_10_HI, -1, GEN8_SP_PERFCTR_SP_SEL_34 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_11_LO, GEN8_RBBM_PERFCTR2_SP_11_HI, -1, GEN8_SP_PERFCTR_SP_SEL_35 }, }; static struct adreno_perfcount_register gen8_perfcounters_rb[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RB_0_LO, GEN8_RBBM_PERFCTR_RB_0_HI, -1, GEN8_RB_PERFCTR_RB_SEL_0 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RB_1_LO, GEN8_RBBM_PERFCTR_RB_1_HI, -1, GEN8_RB_PERFCTR_RB_SEL_1 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RB_2_LO, GEN8_RBBM_PERFCTR_RB_2_HI, -1, GEN8_RB_PERFCTR_RB_SEL_2 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RB_3_LO, GEN8_RBBM_PERFCTR_RB_3_HI, -1, GEN8_RB_PERFCTR_RB_SEL_3 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RB_4_LO, GEN8_RBBM_PERFCTR_RB_4_HI, -1, GEN8_RB_PERFCTR_RB_SEL_4 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RB_5_LO, GEN8_RBBM_PERFCTR_RB_5_HI, -1, GEN8_RB_PERFCTR_RB_SEL_5 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RB_6_LO, GEN8_RBBM_PERFCTR_RB_6_HI, -1, GEN8_RB_PERFCTR_RB_SEL_6 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RB_7_LO, GEN8_RBBM_PERFCTR_RB_7_HI, -1, GEN8_RB_PERFCTR_RB_SEL_7 }, }; static struct adreno_perfcount_register gen8_perfcounters_vsc[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VSC_0_LO, GEN8_RBBM_PERFCTR_VSC_0_HI, -1, GEN8_VSC_PERFCTR_VSC_SEL_0 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VSC_1_LO, GEN8_RBBM_PERFCTR_VSC_1_HI, -1, GEN8_VSC_PERFCTR_VSC_SEL_1 }, }; static struct adreno_perfcount_register gen8_perfcounters_lrz[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_LRZ_0_LO, GEN8_RBBM_PERFCTR_LRZ_0_HI, -1, GEN8_GRAS_PERFCTR_LRZ_SEL_0 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_LRZ_1_LO, GEN8_RBBM_PERFCTR_LRZ_1_HI, -1, GEN8_GRAS_PERFCTR_LRZ_SEL_1 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_LRZ_2_LO, GEN8_RBBM_PERFCTR_LRZ_2_HI, -1, GEN8_GRAS_PERFCTR_LRZ_SEL_2 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_LRZ_3_LO, GEN8_RBBM_PERFCTR_LRZ_3_HI, -1, GEN8_GRAS_PERFCTR_LRZ_SEL_3 }, }; static struct adreno_perfcount_register gen8_perfcounters_bv_lrz[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_LRZ_0_LO, GEN8_RBBM_PERFCTR_BV_LRZ_0_HI, -1, GEN8_GRAS_PERFCTR_LRZ_SEL_0 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_LRZ_1_LO, GEN8_RBBM_PERFCTR_BV_LRZ_1_HI, -1, GEN8_GRAS_PERFCTR_LRZ_SEL_1 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_LRZ_2_LO, GEN8_RBBM_PERFCTR_BV_LRZ_2_HI, -1, GEN8_GRAS_PERFCTR_LRZ_SEL_2 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_LRZ_3_LO, GEN8_RBBM_PERFCTR_BV_LRZ_3_HI, -1, GEN8_GRAS_PERFCTR_LRZ_SEL_3 }, }; static struct adreno_perfcount_register gen8_perfcounters_cmp[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CMP_0_LO, GEN8_RBBM_PERFCTR_CMP_0_HI, -1, GEN8_RB_PERFCTR_CMP_SEL_0 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CMP_1_LO, GEN8_RBBM_PERFCTR_CMP_1_HI, -1, GEN8_RB_PERFCTR_CMP_SEL_1 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CMP_2_LO, GEN8_RBBM_PERFCTR_CMP_2_HI, -1, GEN8_RB_PERFCTR_CMP_SEL_2 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CMP_3_LO, GEN8_RBBM_PERFCTR_CMP_3_HI, -1, GEN8_RB_PERFCTR_CMP_SEL_3 }, }; static struct adreno_perfcount_register gen8_perfcounters_ufc[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UFC_0_LO, GEN8_RBBM_PERFCTR_UFC_0_HI, -1, GEN8_RB_PERFCTR_UFC_SEL_0 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UFC_1_LO, GEN8_RBBM_PERFCTR_UFC_1_HI, -1, GEN8_RB_PERFCTR_UFC_SEL_1 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UFC_2_LO, GEN8_RBBM_PERFCTR_UFC_2_HI, -1, GEN8_RB_PERFCTR_UFC_SEL_2 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UFC_3_LO, GEN8_RBBM_PERFCTR_UFC_3_HI, -1, GEN8_RB_PERFCTR_UFC_SEL_3 }, }; static struct adreno_perfcount_register gen8_perfcounters_bv_ufc[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_UFC_0_LO, GEN8_RBBM_PERFCTR2_UFC_0_HI, -1, GEN8_RB_PERFCTR_UFC_SEL_4 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_UFC_1_LO, GEN8_RBBM_PERFCTR2_UFC_1_HI, -1, GEN8_RB_PERFCTR_UFC_SEL_5 }, }; static struct adreno_perfcount_register gen8_perfcounters_gbif[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PERF_CNT_LO_0, GEN8_GBIF_PERF_CNT_HI_0, -1, GEN8_GBIF_PERF_CNT_SEL_0 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PERF_CNT_LO_1, GEN8_GBIF_PERF_CNT_HI_1, -1, GEN8_GBIF_PERF_CNT_SEL_0 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PERF_CNT_LO_2, GEN8_GBIF_PERF_CNT_HI_2, -1, GEN8_GBIF_PERF_CNT_SEL_0 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PERF_CNT_LO_3, GEN8_GBIF_PERF_CNT_HI_3, -1, GEN8_GBIF_PERF_CNT_SEL_0 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PERF_CNT_LO_4, GEN8_GBIF_PERF_CNT_HI_4, -1, GEN8_GBIF_PERF_CNT_SEL_1 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PERF_CNT_LO_5, GEN8_GBIF_PERF_CNT_HI_5, -1, GEN8_GBIF_PERF_CNT_SEL_1 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PERF_CNT_LO_6, GEN8_GBIF_PERF_CNT_HI_6, -1, GEN8_GBIF_PERF_CNT_SEL_1 }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PERF_CNT_LO_7, GEN8_GBIF_PERF_CNT_HI_7, -1, GEN8_GBIF_PERF_CNT_SEL_1 }, }; static struct adreno_perfcount_register gen8_perfcounters_gbif_pwr[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PWR_CNT_LO_0, GEN8_GBIF_PWR_CNT_HI_0, -1, GEN8_GBIF_PWR_CNT_SEL }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PWR_CNT_LO_1, GEN8_GBIF_PWR_CNT_HI_1, -1, GEN8_GBIF_PWR_CNT_SEL }, { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PWR_CNT_LO_2, GEN8_GBIF_PWR_CNT_HI_2, -1, GEN8_GBIF_PWR_CNT_SEL }, }; #define GMU_COUNTER(lo, hi, sel) \ { .countable = KGSL_PERFCOUNTER_NOT_USED, \ .offset = lo, .offset_hi = hi, .select = sel } #define GMU_COUNTER_RESERVED(lo, hi, sel) \ { .countable = KGSL_PERFCOUNTER_BROKEN, \ .offset = lo, .offset_hi = hi, .select = sel } static struct adreno_perfcount_register gen8_perfcounters_gmu_xoclk[] = { /* * COUNTER_XOCLK_0 and COUNTER_XOCLK_4 are used for the GPU * busy and ifpc count. Mark them as reserved to ensure they * are not re-used. */ GMU_COUNTER_RESERVED(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_0, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_0, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_0), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_1, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_1, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_0), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_2, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_2, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_0), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_3, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_3, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_0), GMU_COUNTER_RESERVED(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_4, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_4, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_1), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_5, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_5, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_1), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_6, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_6, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_1), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_7, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_7, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_1), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_8, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_8, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_2), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_9, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_9, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_2), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_10, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_10, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_2), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_11, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_11, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_2), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_12, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_12, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_3), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_13, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_13, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_3), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_14, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_14, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_3), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_15, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_15, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_3), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_16, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_16, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_4), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_17, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_17, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_4), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_18, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_18, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_4), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_19, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_19, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_4), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_20, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_20, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_5), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_21, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_21, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_5), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_22, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_22, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_5), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_23, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_23, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_5), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_24, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_24, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_6), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_25, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_25, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_6), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_26, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_26, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_6), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_27, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_27, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_6), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_28, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_28, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_7), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_29, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_29, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_7), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_30, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_30, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_7), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_31, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_31, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_7), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_32, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_32, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_8), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_33, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_33, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_8), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_34, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_34, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_8), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_35, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_35, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_8), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_36, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_36, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_9), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_37, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_37, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_9), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_38, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_38, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_9), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_39, GEN8_GMUCX_POWER_COUNTER_XOCLK_H_39, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_9), }; static struct adreno_perfcount_register gen8_perfcounters_gmu_gmuclk[] = { GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_0, GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_0, GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_0), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_1, GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_1, GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_0), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_2, GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_2, GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_0), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_3, GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_3, GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_0), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_4, GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_4, GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_1), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_5, GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_5, GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_1), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_6, GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_6, GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_1), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_7, GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_7, GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_1), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_8, GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_8, GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_2), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_9, GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_9, GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_2), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_10, GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_10, GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_2), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_11, GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_11, GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_2), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_12, GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_12, GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_3), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_13, GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_13, GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_3), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_14, GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_14, GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_3), GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_15, GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_15, GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_3), }; static struct adreno_perfcount_register gen8_perfcounters_gmu_perf[] = { GMU_COUNTER(GEN8_GMUCX_PERF_COUNTER_L_0, GEN8_GMUCX_PERF_COUNTER_H_0, GEN8_GMUCX_PERF_COUNTER_SELECT_0), GMU_COUNTER(GEN8_GMUCX_PERF_COUNTER_L_1, GEN8_GMUCX_PERF_COUNTER_H_1, GEN8_GMUCX_PERF_COUNTER_SELECT_0), GMU_COUNTER(GEN8_GMUCX_PERF_COUNTER_L_2, GEN8_GMUCX_PERF_COUNTER_H_2, GEN8_GMUCX_PERF_COUNTER_SELECT_0), GMU_COUNTER(GEN8_GMUCX_PERF_COUNTER_L_3, GEN8_GMUCX_PERF_COUNTER_H_3, GEN8_GMUCX_PERF_COUNTER_SELECT_0), GMU_COUNTER(GEN8_GMUCX_PERF_COUNTER_L_4, GEN8_GMUCX_PERF_COUNTER_H_4, GEN8_GMUCX_PERF_COUNTER_SELECT_1), GMU_COUNTER(GEN8_GMUCX_PERF_COUNTER_L_5, GEN8_GMUCX_PERF_COUNTER_H_5, GEN8_GMUCX_PERF_COUNTER_SELECT_1), }; static struct adreno_perfcount_register gen8_perfcounters_alwayson[] = { { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_CP_ALWAYS_ON_COUNTER_LO, GEN8_CP_ALWAYS_ON_COUNTER_HI, -1 }, }; /* * ADRENO_PERFCOUNTER_GROUP_RESTORE flag is enabled by default * because most of the perfcounter groups need to be restored * as part of preemption and IFPC. Perfcounter groups that are * not restored as part of preemption and IFPC should be defined * using GEN8_PERFCOUNTER_GROUP_FLAGS macro */ #define GEN8_PERFCOUNTER_GROUP_FLAGS(core, offset, name, flags, \ enable, read) \ [KGSL_PERFCOUNTER_GROUP_##offset] = { core##_perfcounters_##name, \ ARRAY_SIZE(core##_perfcounters_##name), __stringify(name), flags, \ enable, read } #define GEN8_PERFCOUNTER_GROUP(offset, name, enable, read) \ GEN8_PERFCOUNTER_GROUP_FLAGS(gen8, offset, name, \ ADRENO_PERFCOUNTER_GROUP_RESTORE, enable, read) #define GEN8_REGULAR_PERFCOUNTER_GROUP(offset, name) \ GEN8_PERFCOUNTER_GROUP(offset, name, \ gen8_counter_enable, gen8_counter_read) #define GEN8_BV_PERFCOUNTER_GROUP(offset, name, enable, read) \ GEN8_PERFCOUNTER_GROUP_FLAGS(gen8, BV_##offset, bv_##name, \ ADRENO_PERFCOUNTER_GROUP_RESTORE, enable, read) #define GEN8_BV_REGULAR_PERFCOUNTER_GROUP(offset, name) \ GEN8_BV_PERFCOUNTER_GROUP(offset, name, \ gen8_counter_enable, gen8_counter_read) static const struct adreno_perfcount_group gen8_perfcounter_groups [KGSL_PERFCOUNTER_GROUP_MAX] = { GEN8_REGULAR_PERFCOUNTER_GROUP(CP, cp), GEN8_PERFCOUNTER_GROUP_FLAGS(gen8, RBBM, rbbm, 0, gen8_counter_enable, gen8_counter_read), GEN8_PERFCOUNTER_GROUP(PC, pc, gen8_counter_br_enable, gen8_counter_read), GEN8_PERFCOUNTER_GROUP(VFD, vfd, gen8_counter_br_enable, gen8_counter_read), GEN8_PERFCOUNTER_GROUP(HLSQ, hlsq, gen8_counter_br_enable, gen8_counter_read), GEN8_PERFCOUNTER_GROUP(VPC, vpc, gen8_counter_br_enable, gen8_counter_read), GEN8_PERFCOUNTER_GROUP(CCU, ccu, gen8_counter_br_enable, gen8_counter_read), GEN8_PERFCOUNTER_GROUP(CMP, cmp, gen8_counter_br_enable, gen8_counter_read), GEN8_PERFCOUNTER_GROUP(TSE, tse, gen8_counter_br_enable, gen8_counter_read), GEN8_PERFCOUNTER_GROUP(RAS, ras, gen8_counter_br_enable, gen8_counter_read), GEN8_PERFCOUNTER_GROUP(LRZ, lrz, gen8_counter_br_enable, gen8_counter_read), GEN8_REGULAR_PERFCOUNTER_GROUP(UCHE, uche), GEN8_REGULAR_PERFCOUNTER_GROUP(TP, tp), GEN8_REGULAR_PERFCOUNTER_GROUP(SP, sp), GEN8_PERFCOUNTER_GROUP(RB, rb, gen8_counter_br_enable, gen8_counter_read), GEN8_REGULAR_PERFCOUNTER_GROUP(VSC, vsc), GEN8_PERFCOUNTER_GROUP_FLAGS(gen8, VBIF, gbif, 0, gen8_counter_gbif_enable, gen8_counter_read_norestore), GEN8_PERFCOUNTER_GROUP_FLAGS(gen8, VBIF_PWR, gbif_pwr, ADRENO_PERFCOUNTER_GROUP_FIXED, gen8_counter_gbif_pwr_enable, gen8_counter_read_norestore), GEN8_PERFCOUNTER_GROUP_FLAGS(gen8, ALWAYSON, alwayson, ADRENO_PERFCOUNTER_GROUP_FIXED, gen8_counter_alwayson_enable, gen8_counter_alwayson_read), GEN8_PERFCOUNTER_GROUP_FLAGS(gen8, GMU_XOCLK, gmu_xoclk, 0, gen8_counter_gmu_pwr_enable, gen8_counter_read_norestore), GEN8_PERFCOUNTER_GROUP_FLAGS(gen8, GMU_GMUCLK, gmu_gmuclk, 0, gen8_counter_gmu_pwr_enable, gen8_counter_read_norestore), GEN8_PERFCOUNTER_GROUP_FLAGS(gen8, GMU_PERF, gmu_perf, 0, gen8_counter_gmu_perf_enable, gen8_counter_read_norestore), GEN8_REGULAR_PERFCOUNTER_GROUP(UFC, ufc), GEN8_BV_REGULAR_PERFCOUNTER_GROUP(CP, cp), GEN8_BV_PERFCOUNTER_GROUP(PC, pc, gen8_counter_bv_enable, gen8_counter_read), GEN8_BV_PERFCOUNTER_GROUP(VFD, vfd, gen8_counter_bv_enable, gen8_counter_read), GEN8_BV_PERFCOUNTER_GROUP(VPC, vpc, gen8_counter_bv_enable, gen8_counter_read), GEN8_BV_REGULAR_PERFCOUNTER_GROUP(TP, tp), GEN8_BV_REGULAR_PERFCOUNTER_GROUP(SP, sp), GEN8_BV_REGULAR_PERFCOUNTER_GROUP(UFC, ufc), GEN8_BV_PERFCOUNTER_GROUP(TSE, tse, gen8_counter_bv_enable, gen8_counter_read), GEN8_BV_PERFCOUNTER_GROUP(RAS, ras, gen8_counter_bv_enable, gen8_counter_read), GEN8_BV_PERFCOUNTER_GROUP(LRZ, lrz, gen8_counter_bv_enable, gen8_counter_read), GEN8_BV_PERFCOUNTER_GROUP(HLSQ, hlsq, gen8_counter_bv_enable, gen8_counter_read), }; const struct adreno_perfcounters adreno_gen8_perfcounters = { gen8_perfcounter_groups, ARRAY_SIZE(gen8_perfcounter_groups), };