adreno_gen8_perfcounter.c 52 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2021, The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2023-2024, Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #include "adreno.h"
  7. #include "adreno_gen8.h"
  8. #include "adreno_perfcounter.h"
  9. #include "adreno_pm4types.h"
  10. #include "kgsl_device.h"
  11. #define PERFCOUNTER_FLUSH_DONE_MASK BIT(0)
  12. static void gen8_rbbm_perfctr_flush(struct kgsl_device *device)
  13. {
  14. u32 val;
  15. int ret;
  16. /*
  17. * Flush delta counters (both perf counters and pipe stats) present in
  18. * RBBM_S and RBBM_US to perf RAM logic to get the latest data.
  19. */
  20. kgsl_regwrite(device, GEN8_RBBM_PERFCTR_FLUSH_HOST_CMD, BIT(0));
  21. kgsl_regwrite(device, GEN8_RBBM_SLICE_PERFCTR_FLUSH_HOST_CMD, BIT(0));
  22. ret = kgsl_regmap_read_poll_timeout(&device->regmap, GEN8_RBBM_PERFCTR_FLUSH_HOST_STATUS,
  23. val, (val & PERFCOUNTER_FLUSH_DONE_MASK) == PERFCOUNTER_FLUSH_DONE_MASK,
  24. 100, 100 * 1000);
  25. if (ret)
  26. dev_err(device->dev, "Perfcounter flush timed out: status=0x%08x\n", val);
  27. }
  28. /*
  29. * For registers that do not get restored on power cycle, read the value and add
  30. * the stored shadow value
  31. */
  32. static u64 gen8_counter_read_norestore(struct adreno_device *adreno_dev,
  33. const struct adreno_perfcount_group *group, u32 counter)
  34. {
  35. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  36. struct adreno_perfcount_register *reg = &group->regs[counter];
  37. u32 hi, lo;
  38. gen8_rbbm_perfctr_flush(device);
  39. kgsl_regread(device, reg->offset, &lo);
  40. kgsl_regread(device, reg->offset_hi, &hi);
  41. return ((((u64) hi) << 32) | lo) + reg->value;
  42. }
  43. static int gen8_counter_br_enable(struct adreno_device *adreno_dev,
  44. const struct adreno_perfcount_group *group,
  45. u32 counter, u32 countable)
  46. {
  47. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  48. struct adreno_perfcount_register *reg = &group->regs[counter];
  49. int ret = 0;
  50. u32 val = 0;
  51. kgsl_regread(device, GEN8_CP_APERTURE_CNTL_HOST, &val);
  52. kgsl_regwrite(device, GEN8_CP_APERTURE_CNTL_HOST, FIELD_PREP(GENMASK(15, 12), PIPE_BR));
  53. ret = gen8_perfcounter_update(adreno_dev, reg, true,
  54. FIELD_PREP(GENMASK(15, 12), PIPE_BR), group->flags);
  55. kgsl_regwrite(device, GEN8_CP_APERTURE_CNTL_HOST, val);
  56. /* Ensure all writes are posted before reading the piped register */
  57. mb();
  58. if (!ret)
  59. reg->value = 0;
  60. return ret;
  61. }
  62. static int gen8_counter_bv_enable(struct adreno_device *adreno_dev,
  63. const struct adreno_perfcount_group *group,
  64. u32 counter, u32 countable)
  65. {
  66. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  67. struct adreno_perfcount_register *reg = &group->regs[counter];
  68. int ret = 0;
  69. u32 val = 0;
  70. kgsl_regread(device, GEN8_CP_APERTURE_CNTL_HOST, &val);
  71. kgsl_regwrite(device, GEN8_CP_APERTURE_CNTL_HOST, FIELD_PREP(GENMASK(15, 12), PIPE_BV));
  72. ret = gen8_perfcounter_update(adreno_dev, reg, true,
  73. FIELD_PREP(GENMASK(15, 12), PIPE_BV), group->flags);
  74. kgsl_regwrite(device, GEN8_CP_APERTURE_CNTL_HOST, val);
  75. /* Ensure all writes are posted before reading the piped register */
  76. mb();
  77. if (!ret)
  78. reg->value = 0;
  79. return ret;
  80. }
  81. static int gen8_counter_enable(struct adreno_device *adreno_dev,
  82. const struct adreno_perfcount_group *group,
  83. u32 counter, u32 countable)
  84. {
  85. struct adreno_perfcount_register *reg = &group->regs[counter];
  86. int ret = 0;
  87. ret = gen8_perfcounter_update(adreno_dev, reg, true,
  88. FIELD_PREP(GENMASK(15, 12), PIPE_NONE), group->flags);
  89. if (!ret)
  90. reg->value = 0;
  91. return ret;
  92. }
  93. static u64 gen8_counter_read(struct adreno_device *adreno_dev,
  94. const struct adreno_perfcount_group *group, u32 counter)
  95. {
  96. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  97. struct adreno_perfcount_register *reg = &group->regs[counter];
  98. u32 hi, lo;
  99. gen8_rbbm_perfctr_flush(device);
  100. kgsl_regread(device, reg->offset, &lo);
  101. kgsl_regread(device, reg->offset_hi, &hi);
  102. /* These registers are restored on power resume */
  103. return (((u64) hi) << 32) | lo;
  104. }
  105. static int gen8_counter_gbif_enable(struct adreno_device *adreno_dev,
  106. const struct adreno_perfcount_group *group,
  107. u32 counter, u32 countable)
  108. {
  109. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  110. struct adreno_perfcount_register *reg = &group->regs[counter];
  111. u32 shift = counter << 3;
  112. u32 select = BIT(counter);
  113. if (countable > 0xff)
  114. return -EINVAL;
  115. /*
  116. * Write 1, followed by 0 to CLR register for
  117. * clearing the counter
  118. */
  119. kgsl_regrmw(device, GEN8_GBIF_PERF_PWR_CNT_CLR, select, select);
  120. kgsl_regrmw(device, GEN8_GBIF_PERF_PWR_CNT_CLR, select, 0);
  121. /* select the desired countable */
  122. kgsl_regrmw(device, reg->select, 0xff << shift, countable << shift);
  123. /* enable counter */
  124. kgsl_regrmw(device, GEN8_GBIF_PERF_PWR_CNT_EN, select, select);
  125. reg->value = 0;
  126. return 0;
  127. }
  128. static int gen8_counter_gbif_pwr_enable(struct adreno_device *adreno_dev,
  129. const struct adreno_perfcount_group *group,
  130. u32 counter, u32 countable)
  131. {
  132. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  133. struct adreno_perfcount_register *reg = &group->regs[counter];
  134. u32 shift = counter << 3;
  135. u32 select = BIT(16 + counter);
  136. if (countable > 0xff)
  137. return -EINVAL;
  138. /*
  139. * Write 1, followed by 0 to CLR register for
  140. * clearing the counter
  141. */
  142. kgsl_regrmw(device, GEN8_GBIF_PERF_PWR_CNT_CLR, select, select);
  143. kgsl_regrmw(device, GEN8_GBIF_PERF_PWR_CNT_CLR, select, 0);
  144. /* select the desired countable */
  145. kgsl_regrmw(device, reg->select, 0xff << shift, countable << shift);
  146. /* Enable the counter */
  147. kgsl_regrmw(device, GEN8_GBIF_PERF_PWR_CNT_EN, select, select);
  148. reg->value = 0;
  149. return 0;
  150. }
  151. static int gen8_counter_alwayson_enable(struct adreno_device *adreno_dev,
  152. const struct adreno_perfcount_group *group,
  153. u32 counter, u32 countable)
  154. {
  155. return 0;
  156. }
  157. static u64 gen8_counter_alwayson_read(struct adreno_device *adreno_dev,
  158. const struct adreno_perfcount_group *group, u32 counter)
  159. {
  160. struct adreno_perfcount_register *reg = &group->regs[counter];
  161. const struct adreno_gpudev *gpudev = ADRENO_GPU_DEVICE(adreno_dev);
  162. return gpudev->read_alwayson(adreno_dev) + reg->value;
  163. }
  164. static void gen8_write_gmu_counter_enable(struct kgsl_device *device,
  165. struct adreno_perfcount_register *reg, u32 bit, u32 countable)
  166. {
  167. kgsl_regrmw(device, reg->select, 0xff << bit, countable << bit);
  168. }
  169. static int gen8_counter_gmu_pwr_enable(struct adreno_device *adreno_dev,
  170. const struct adreno_perfcount_group *group,
  171. u32 counter, u32 countable)
  172. {
  173. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  174. struct adreno_perfcount_register *reg = &group->regs[counter];
  175. /* Four counters can be programmed per select register */
  176. int offset = counter % 4;
  177. if (countable > 0xff)
  178. return -EINVAL;
  179. gen8_write_gmu_counter_enable(device, reg, offset << 3, countable);
  180. kgsl_regwrite(device, GEN8_GMUCX_POWER_COUNTER_ENABLE, 1);
  181. reg->value = 0;
  182. return 0;
  183. }
  184. static int gen8_counter_gmu_perf_enable(struct adreno_device *adreno_dev,
  185. const struct adreno_perfcount_group *group,
  186. u32 counter, u32 countable)
  187. {
  188. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  189. struct adreno_perfcount_register *reg = &group->regs[counter];
  190. /* Four counters can be programmed per select register */
  191. int offset = counter % 4;
  192. if (countable > 0xff)
  193. return -EINVAL;
  194. gen8_write_gmu_counter_enable(device, reg, offset << 3, countable);
  195. kgsl_regwrite(device, GEN8_GMUCX_PERF_COUNTER_ENABLE, 1);
  196. reg->value = 0;
  197. return 0;
  198. }
  199. static struct adreno_perfcount_register gen8_perfcounters_cp[] = {
  200. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_0_LO,
  201. GEN8_RBBM_PERFCTR_CP_0_HI, -1, GEN8_CP_PERFCTR_CP_SEL_0 },
  202. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_1_LO,
  203. GEN8_RBBM_PERFCTR_CP_1_HI, -1, GEN8_CP_PERFCTR_CP_SEL_1 },
  204. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_2_LO,
  205. GEN8_RBBM_PERFCTR_CP_2_HI, -1, GEN8_CP_PERFCTR_CP_SEL_2 },
  206. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_3_LO,
  207. GEN8_RBBM_PERFCTR_CP_3_HI, -1, GEN8_CP_PERFCTR_CP_SEL_3 },
  208. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_4_LO,
  209. GEN8_RBBM_PERFCTR_CP_4_HI, -1, GEN8_CP_PERFCTR_CP_SEL_4 },
  210. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_5_LO,
  211. GEN8_RBBM_PERFCTR_CP_5_HI, -1, GEN8_CP_PERFCTR_CP_SEL_5 },
  212. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_6_LO,
  213. GEN8_RBBM_PERFCTR_CP_6_HI, -1, GEN8_CP_PERFCTR_CP_SEL_6 },
  214. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_7_LO,
  215. GEN8_RBBM_PERFCTR_CP_7_HI, -1, GEN8_CP_PERFCTR_CP_SEL_7 },
  216. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_8_LO,
  217. GEN8_RBBM_PERFCTR_CP_8_HI, -1, GEN8_CP_PERFCTR_CP_SEL_8 },
  218. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_9_LO,
  219. GEN8_RBBM_PERFCTR_CP_9_HI, -1, GEN8_CP_PERFCTR_CP_SEL_9 },
  220. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_10_LO,
  221. GEN8_RBBM_PERFCTR_CP_10_HI, -1, GEN8_CP_PERFCTR_CP_SEL_10 },
  222. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_11_LO,
  223. GEN8_RBBM_PERFCTR_CP_11_HI, -1, GEN8_CP_PERFCTR_CP_SEL_11 },
  224. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_12_LO,
  225. GEN8_RBBM_PERFCTR_CP_12_HI, -1, GEN8_CP_PERFCTR_CP_SEL_12 },
  226. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CP_13_LO,
  227. GEN8_RBBM_PERFCTR_CP_13_HI, -1, GEN8_CP_PERFCTR_CP_SEL_13 },
  228. };
  229. static struct adreno_perfcount_register gen8_perfcounters_bv_cp[] = {
  230. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_CP_0_LO,
  231. GEN8_RBBM_PERFCTR2_CP_0_HI, -1, GEN8_CP_PERFCTR_CP_SEL_14 },
  232. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_CP_1_LO,
  233. GEN8_RBBM_PERFCTR2_CP_1_HI, -1, GEN8_CP_PERFCTR_CP_SEL_15 },
  234. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_CP_2_LO,
  235. GEN8_RBBM_PERFCTR2_CP_2_HI, -1, GEN8_CP_PERFCTR_CP_SEL_16 },
  236. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_CP_3_LO,
  237. GEN8_RBBM_PERFCTR2_CP_3_HI, -1, GEN8_CP_PERFCTR_CP_SEL_17 },
  238. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_CP_4_LO,
  239. GEN8_RBBM_PERFCTR2_CP_4_HI, -1, GEN8_CP_PERFCTR_CP_SEL_18 },
  240. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_CP_5_LO,
  241. GEN8_RBBM_PERFCTR2_CP_5_HI, -1, GEN8_CP_PERFCTR_CP_SEL_19 },
  242. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_CP_6_LO,
  243. GEN8_RBBM_PERFCTR2_CP_6_HI, -1, GEN8_CP_PERFCTR_CP_SEL_20 },
  244. };
  245. static struct adreno_perfcount_register gen8_perfcounters_rbbm[] = {
  246. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RBBM_0_LO,
  247. GEN8_RBBM_PERFCTR_RBBM_0_HI, -1, GEN8_RBBM_PERFCTR_RBBM_SEL_0, 0,
  248. { GEN8_RBBM_SLICE_PERFCTR_RBBM_SEL_0 } },
  249. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RBBM_1_LO,
  250. GEN8_RBBM_PERFCTR_RBBM_1_HI, -1, GEN8_RBBM_PERFCTR_RBBM_SEL_1, 0,
  251. { GEN8_RBBM_SLICE_PERFCTR_RBBM_SEL_0 } },
  252. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RBBM_2_LO,
  253. GEN8_RBBM_PERFCTR_RBBM_2_HI, -1, GEN8_RBBM_PERFCTR_RBBM_SEL_2, 0,
  254. { GEN8_RBBM_SLICE_PERFCTR_RBBM_SEL_0 } },
  255. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RBBM_3_LO,
  256. GEN8_RBBM_PERFCTR_RBBM_3_HI, -1, GEN8_RBBM_PERFCTR_RBBM_SEL_3, 0,
  257. { GEN8_RBBM_SLICE_PERFCTR_RBBM_SEL_0 } },
  258. };
  259. static struct adreno_perfcount_register gen8_perfcounters_pc[] = {
  260. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_PC_0_LO,
  261. GEN8_RBBM_PERFCTR_PC_0_HI, -1, GEN8_PC_PERFCTR_PC_SEL_0, 0,
  262. { GEN8_PC_SLICE_PERFCTR_PC_SEL_0 } },
  263. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_PC_1_LO,
  264. GEN8_RBBM_PERFCTR_PC_1_HI, -1, GEN8_PC_PERFCTR_PC_SEL_1, 0,
  265. { GEN8_PC_SLICE_PERFCTR_PC_SEL_1 } },
  266. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_PC_2_LO,
  267. GEN8_RBBM_PERFCTR_PC_2_HI, -1, GEN8_PC_PERFCTR_PC_SEL_2, 0,
  268. { GEN8_PC_SLICE_PERFCTR_PC_SEL_2 } },
  269. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_PC_3_LO,
  270. GEN8_RBBM_PERFCTR_PC_3_HI, -1, GEN8_PC_PERFCTR_PC_SEL_3, 0,
  271. { GEN8_PC_SLICE_PERFCTR_PC_SEL_3 } },
  272. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_PC_4_LO,
  273. GEN8_RBBM_PERFCTR_PC_4_HI, -1, GEN8_PC_PERFCTR_PC_SEL_4, 0,
  274. { GEN8_PC_SLICE_PERFCTR_PC_SEL_4 } },
  275. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_PC_5_LO,
  276. GEN8_RBBM_PERFCTR_PC_5_HI, -1, GEN8_PC_PERFCTR_PC_SEL_5, 0,
  277. { GEN8_PC_SLICE_PERFCTR_PC_SEL_5 } },
  278. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_PC_6_LO,
  279. GEN8_RBBM_PERFCTR_PC_6_HI, -1, GEN8_PC_PERFCTR_PC_SEL_6, 0,
  280. { GEN8_PC_SLICE_PERFCTR_PC_SEL_6 } },
  281. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_PC_7_LO,
  282. GEN8_RBBM_PERFCTR_PC_7_HI, -1, GEN8_PC_PERFCTR_PC_SEL_7, 0,
  283. { GEN8_PC_SLICE_PERFCTR_PC_SEL_7 } },
  284. };
  285. static struct adreno_perfcount_register gen8_perfcounters_bv_pc[] = {
  286. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_PC_0_LO,
  287. GEN8_RBBM_PERFCTR_BV_PC_0_HI, -1, GEN8_PC_PERFCTR_PC_SEL_8, 0,
  288. { GEN8_PC_SLICE_PERFCTR_PC_SEL_8 } },
  289. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_PC_1_LO,
  290. GEN8_RBBM_PERFCTR_BV_PC_1_HI, -1, GEN8_PC_PERFCTR_PC_SEL_9, 0,
  291. { GEN8_PC_SLICE_PERFCTR_PC_SEL_9 } },
  292. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_PC_2_LO,
  293. GEN8_RBBM_PERFCTR_BV_PC_2_HI, -1, GEN8_PC_PERFCTR_PC_SEL_10, 0,
  294. { GEN8_PC_SLICE_PERFCTR_PC_SEL_10 } },
  295. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_PC_3_LO,
  296. GEN8_RBBM_PERFCTR_BV_PC_3_HI, -1, GEN8_PC_PERFCTR_PC_SEL_11, 0,
  297. { GEN8_PC_SLICE_PERFCTR_PC_SEL_11 } },
  298. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_PC_4_LO,
  299. GEN8_RBBM_PERFCTR_BV_PC_4_HI, -1, GEN8_PC_PERFCTR_PC_SEL_12, 0,
  300. { GEN8_PC_SLICE_PERFCTR_PC_SEL_12 } },
  301. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_PC_5_LO,
  302. GEN8_RBBM_PERFCTR_BV_PC_5_HI, -1, GEN8_PC_PERFCTR_PC_SEL_13, 0,
  303. { GEN8_PC_SLICE_PERFCTR_PC_SEL_13 } },
  304. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_PC_6_LO,
  305. GEN8_RBBM_PERFCTR_BV_PC_6_HI, -1, GEN8_PC_PERFCTR_PC_SEL_14, 0,
  306. { GEN8_PC_SLICE_PERFCTR_PC_SEL_14 } },
  307. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_PC_7_LO,
  308. GEN8_RBBM_PERFCTR_BV_PC_7_HI, -1, GEN8_PC_PERFCTR_PC_SEL_15, 0,
  309. { GEN8_PC_SLICE_PERFCTR_PC_SEL_15 } },
  310. };
  311. static struct adreno_perfcount_register gen8_perfcounters_vfd[] = {
  312. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VFD_0_LO,
  313. GEN8_RBBM_PERFCTR_VFD_0_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_0 },
  314. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VFD_1_LO,
  315. GEN8_RBBM_PERFCTR_VFD_1_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_1 },
  316. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VFD_2_LO,
  317. GEN8_RBBM_PERFCTR_VFD_2_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_2 },
  318. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VFD_3_LO,
  319. GEN8_RBBM_PERFCTR_VFD_3_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_3 },
  320. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VFD_4_LO,
  321. GEN8_RBBM_PERFCTR_VFD_4_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_4 },
  322. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VFD_5_LO,
  323. GEN8_RBBM_PERFCTR_VFD_5_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_5 },
  324. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VFD_6_LO,
  325. GEN8_RBBM_PERFCTR_VFD_6_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_6 },
  326. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VFD_7_LO,
  327. GEN8_RBBM_PERFCTR_VFD_7_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_7 },
  328. };
  329. static struct adreno_perfcount_register gen8_perfcounters_bv_vfd[] = {
  330. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VFD_0_LO,
  331. GEN8_RBBM_PERFCTR_BV_VFD_0_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_8 },
  332. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VFD_1_LO,
  333. GEN8_RBBM_PERFCTR_BV_VFD_1_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_9 },
  334. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VFD_2_LO,
  335. GEN8_RBBM_PERFCTR_BV_VFD_2_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_10 },
  336. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VFD_3_LO,
  337. GEN8_RBBM_PERFCTR_BV_VFD_3_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_11 },
  338. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VFD_4_LO,
  339. GEN8_RBBM_PERFCTR_BV_VFD_4_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_12 },
  340. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VFD_5_LO,
  341. GEN8_RBBM_PERFCTR_BV_VFD_5_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_13 },
  342. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VFD_6_LO,
  343. GEN8_RBBM_PERFCTR_BV_VFD_6_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_14 },
  344. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VFD_7_LO,
  345. GEN8_RBBM_PERFCTR_BV_VFD_7_HI, -1, GEN8_VFD_PERFCTR_VFD_SEL_15 },
  346. };
  347. static struct adreno_perfcount_register gen8_perfcounters_hlsq[] = {
  348. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_HLSQ_0_LO,
  349. GEN8_RBBM_PERFCTR_HLSQ_0_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_0, 0,
  350. { GEN8_SP_PERFCTR_HLSQ_SEL_2_0 } },
  351. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_HLSQ_1_LO,
  352. GEN8_RBBM_PERFCTR_HLSQ_1_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_1, 0,
  353. { GEN8_SP_PERFCTR_HLSQ_SEL_2_1 } },
  354. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_HLSQ_2_LO,
  355. GEN8_RBBM_PERFCTR_HLSQ_2_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_2, 0,
  356. { GEN8_SP_PERFCTR_HLSQ_SEL_2_2 } },
  357. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_HLSQ_3_LO,
  358. GEN8_RBBM_PERFCTR_HLSQ_3_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_3, 0,
  359. { GEN8_SP_PERFCTR_HLSQ_SEL_2_3 } },
  360. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_HLSQ_4_LO,
  361. GEN8_RBBM_PERFCTR_HLSQ_4_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_4, 0,
  362. { GEN8_SP_PERFCTR_HLSQ_SEL_2_4 } },
  363. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_HLSQ_5_LO,
  364. GEN8_RBBM_PERFCTR_HLSQ_5_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_5, 0,
  365. { GEN8_SP_PERFCTR_HLSQ_SEL_2_5 } },
  366. };
  367. static struct adreno_perfcount_register gen8_perfcounters_bv_hlsq[] = {
  368. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_HLSQ_0_LO,
  369. GEN8_RBBM_PERFCTR2_HLSQ_0_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_0, 0,
  370. { GEN8_SP_PERFCTR_HLSQ_SEL_2_0 } },
  371. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_HLSQ_1_LO,
  372. GEN8_RBBM_PERFCTR2_HLSQ_1_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_1, 0,
  373. { GEN8_SP_PERFCTR_HLSQ_SEL_2_1 } },
  374. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_HLSQ_2_LO,
  375. GEN8_RBBM_PERFCTR2_HLSQ_2_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_2, 0,
  376. { GEN8_SP_PERFCTR_HLSQ_SEL_2_2 } },
  377. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_HLSQ_3_LO,
  378. GEN8_RBBM_PERFCTR2_HLSQ_3_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_3, 0,
  379. { GEN8_SP_PERFCTR_HLSQ_SEL_2_3 } },
  380. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_HLSQ_4_LO,
  381. GEN8_RBBM_PERFCTR2_HLSQ_4_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_4, 0,
  382. { GEN8_SP_PERFCTR_HLSQ_SEL_2_4 } },
  383. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_HLSQ_5_LO,
  384. GEN8_RBBM_PERFCTR2_HLSQ_5_HI, -1, GEN8_SP_PERFCTR_HLSQ_SEL_5, 0,
  385. { GEN8_SP_PERFCTR_HLSQ_SEL_2_5 } },
  386. };
  387. static struct adreno_perfcount_register gen8_perfcounters_vpc[] = {
  388. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VPC_0_LO,
  389. GEN8_RBBM_PERFCTR_VPC_0_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_0, 0,
  390. { GEN8_VPC_PERFCTR_VPC_SEL_1_0, GEN8_VPC_PERFCTR_VPC_SEL_2_0 } },
  391. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VPC_1_LO,
  392. GEN8_RBBM_PERFCTR_VPC_1_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_1, 0,
  393. { GEN8_VPC_PERFCTR_VPC_SEL_1_1, GEN8_VPC_PERFCTR_VPC_SEL_2_1 } },
  394. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VPC_2_LO,
  395. GEN8_RBBM_PERFCTR_VPC_2_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_2, 0,
  396. { GEN8_VPC_PERFCTR_VPC_SEL_1_2, GEN8_VPC_PERFCTR_VPC_SEL_2_2 } },
  397. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VPC_3_LO,
  398. GEN8_RBBM_PERFCTR_VPC_3_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_3, 0,
  399. { GEN8_VPC_PERFCTR_VPC_SEL_1_3, GEN8_VPC_PERFCTR_VPC_SEL_2_3 } },
  400. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VPC_4_LO,
  401. GEN8_RBBM_PERFCTR_VPC_4_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_4, 0,
  402. { GEN8_VPC_PERFCTR_VPC_SEL_1_4, GEN8_VPC_PERFCTR_VPC_SEL_2_4 } },
  403. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VPC_5_LO,
  404. GEN8_RBBM_PERFCTR_VPC_5_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_5, 0,
  405. { GEN8_VPC_PERFCTR_VPC_SEL_1_5, GEN8_VPC_PERFCTR_VPC_SEL_2_5 } },
  406. };
  407. static struct adreno_perfcount_register gen8_perfcounters_bv_vpc[] = {
  408. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VPC_0_LO,
  409. GEN8_RBBM_PERFCTR_BV_VPC_0_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_2_6, 0,
  410. { GEN8_VPC_PERFCTR_VPC_SEL_1_6, GEN8_VPC_PERFCTR_VPC_SEL_2_6 } },
  411. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VPC_1_LO,
  412. GEN8_RBBM_PERFCTR_BV_VPC_1_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_2_7, 0,
  413. { GEN8_VPC_PERFCTR_VPC_SEL_1_7, GEN8_VPC_PERFCTR_VPC_SEL_2_7 } },
  414. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VPC_2_LO,
  415. GEN8_RBBM_PERFCTR_BV_VPC_2_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_2_8, 0,
  416. { GEN8_VPC_PERFCTR_VPC_SEL_1_8, GEN8_VPC_PERFCTR_VPC_SEL_2_8 } },
  417. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VPC_3_LO,
  418. GEN8_RBBM_PERFCTR_BV_VPC_3_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_2_9, 0,
  419. { GEN8_VPC_PERFCTR_VPC_SEL_1_9, GEN8_VPC_PERFCTR_VPC_SEL_2_9 } },
  420. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VPC_4_LO,
  421. GEN8_RBBM_PERFCTR_BV_VPC_4_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_2_10, 0,
  422. { GEN8_VPC_PERFCTR_VPC_SEL_1_10, GEN8_VPC_PERFCTR_VPC_SEL_2_10 } },
  423. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_VPC_5_LO,
  424. GEN8_RBBM_PERFCTR_BV_VPC_5_HI, -1, GEN8_VPC_PERFCTR_VPC_SEL_2_11, 0,
  425. { GEN8_VPC_PERFCTR_VPC_SEL_1_11, GEN8_VPC_PERFCTR_VPC_SEL_2_11 } },
  426. };
  427. static struct adreno_perfcount_register gen8_perfcounters_ccu[] = {
  428. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CCU_0_LO,
  429. GEN8_RBBM_PERFCTR_CCU_0_HI, -1, GEN8_RB_PERFCTR_CCU_SEL_0 },
  430. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CCU_1_LO,
  431. GEN8_RBBM_PERFCTR_CCU_1_HI, -1, GEN8_RB_PERFCTR_CCU_SEL_1 },
  432. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CCU_2_LO,
  433. GEN8_RBBM_PERFCTR_CCU_2_HI, -1, GEN8_RB_PERFCTR_CCU_SEL_2 },
  434. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CCU_3_LO,
  435. GEN8_RBBM_PERFCTR_CCU_3_HI, -1, GEN8_RB_PERFCTR_CCU_SEL_3 },
  436. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CCU_4_LO,
  437. GEN8_RBBM_PERFCTR_CCU_4_HI, -1, GEN8_RB_PERFCTR_CCU_SEL_4 },
  438. };
  439. static struct adreno_perfcount_register gen8_perfcounters_tse[] = {
  440. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TSE_0_LO,
  441. GEN8_RBBM_PERFCTR_TSE_0_HI, -1, GEN8_GRAS_PERFCTR_TSE_SEL_0, 0,
  442. { GEN8_GRAS_PERFCTR_TSEFE_SEL_0 } },
  443. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TSE_1_LO,
  444. GEN8_RBBM_PERFCTR_TSE_1_HI, -1, GEN8_GRAS_PERFCTR_TSE_SEL_1, 0,
  445. { GEN8_GRAS_PERFCTR_TSEFE_SEL_1 } },
  446. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TSE_2_LO,
  447. GEN8_RBBM_PERFCTR_TSE_2_HI, -1, GEN8_GRAS_PERFCTR_TSE_SEL_2, 0,
  448. { GEN8_GRAS_PERFCTR_TSEFE_SEL_2 } },
  449. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TSE_3_LO,
  450. GEN8_RBBM_PERFCTR_TSE_3_HI, -1, GEN8_GRAS_PERFCTR_TSE_SEL_3, 0,
  451. { GEN8_GRAS_PERFCTR_TSEFE_SEL_3 } },
  452. };
  453. static struct adreno_perfcount_register gen8_perfcounters_bv_tse[] = {
  454. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_TSE_0_LO,
  455. GEN8_RBBM_PERFCTR_BV_TSE_0_HI, -1, GEN8_GRAS_PERFCTR_TSE_SEL_0, 0,
  456. { GEN8_GRAS_PERFCTR_TSEFE_SEL_0 } },
  457. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_TSE_1_LO,
  458. GEN8_RBBM_PERFCTR_BV_TSE_1_HI, -1, GEN8_GRAS_PERFCTR_TSE_SEL_1, 0,
  459. { GEN8_GRAS_PERFCTR_TSEFE_SEL_1 } },
  460. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_TSE_2_LO,
  461. GEN8_RBBM_PERFCTR_BV_TSE_2_HI, -1, GEN8_GRAS_PERFCTR_TSE_SEL_2, 0,
  462. { GEN8_GRAS_PERFCTR_TSEFE_SEL_2 } },
  463. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_TSE_3_LO,
  464. GEN8_RBBM_PERFCTR_BV_TSE_3_HI, -1, GEN8_GRAS_PERFCTR_TSE_SEL_3, 0,
  465. { GEN8_GRAS_PERFCTR_TSEFE_SEL_3 } },
  466. };
  467. static struct adreno_perfcount_register gen8_perfcounters_ras[] = {
  468. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RAS_0_LO,
  469. GEN8_RBBM_PERFCTR_RAS_0_HI, -1, GEN8_GRAS_PERFCTR_RAS_SEL_0 },
  470. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RAS_1_LO,
  471. GEN8_RBBM_PERFCTR_RAS_1_HI, -1, GEN8_GRAS_PERFCTR_RAS_SEL_1 },
  472. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RAS_2_LO,
  473. GEN8_RBBM_PERFCTR_RAS_2_HI, -1, GEN8_GRAS_PERFCTR_RAS_SEL_2 },
  474. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RAS_3_LO,
  475. GEN8_RBBM_PERFCTR_RAS_3_HI, -1, GEN8_GRAS_PERFCTR_RAS_SEL_3 },
  476. };
  477. static struct adreno_perfcount_register gen8_perfcounters_bv_ras[] = {
  478. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_RAS_0_LO,
  479. GEN8_RBBM_PERFCTR_BV_RAS_0_HI, -1, GEN8_GRAS_PERFCTR_RAS_SEL_0 },
  480. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_RAS_1_LO,
  481. GEN8_RBBM_PERFCTR_BV_RAS_1_HI, -1, GEN8_GRAS_PERFCTR_RAS_SEL_1 },
  482. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_RAS_2_LO,
  483. GEN8_RBBM_PERFCTR_BV_RAS_2_HI, -1, GEN8_GRAS_PERFCTR_RAS_SEL_2 },
  484. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_RAS_3_LO,
  485. GEN8_RBBM_PERFCTR_BV_RAS_3_HI, -1, GEN8_GRAS_PERFCTR_RAS_SEL_3 },
  486. };
  487. static struct adreno_perfcount_register gen8_perfcounters_uche[] = {
  488. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_0_LO,
  489. GEN8_RBBM_PERFCTR_UCHE_0_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_0 },
  490. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_1_LO,
  491. GEN8_RBBM_PERFCTR_UCHE_1_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_1 },
  492. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_2_LO,
  493. GEN8_RBBM_PERFCTR_UCHE_2_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_2 },
  494. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_3_LO,
  495. GEN8_RBBM_PERFCTR_UCHE_3_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_3 },
  496. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_4_LO,
  497. GEN8_RBBM_PERFCTR_UCHE_4_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_4 },
  498. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_5_LO,
  499. GEN8_RBBM_PERFCTR_UCHE_5_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_5 },
  500. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_6_LO,
  501. GEN8_RBBM_PERFCTR_UCHE_6_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_6 },
  502. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_7_LO,
  503. GEN8_RBBM_PERFCTR_UCHE_7_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_7 },
  504. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_8_LO,
  505. GEN8_RBBM_PERFCTR_UCHE_8_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_8 },
  506. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_9_LO,
  507. GEN8_RBBM_PERFCTR_UCHE_9_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_9 },
  508. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_10_LO,
  509. GEN8_RBBM_PERFCTR_UCHE_10_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_10 },
  510. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_11_LO,
  511. GEN8_RBBM_PERFCTR_UCHE_11_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_11 },
  512. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_12_LO,
  513. GEN8_RBBM_PERFCTR_UCHE_12_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_12 },
  514. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_13_LO,
  515. GEN8_RBBM_PERFCTR_UCHE_13_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_13 },
  516. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_14_LO,
  517. GEN8_RBBM_PERFCTR_UCHE_14_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_14 },
  518. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_15_LO,
  519. GEN8_RBBM_PERFCTR_UCHE_15_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_15 },
  520. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_16_LO,
  521. GEN8_RBBM_PERFCTR_UCHE_16_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_16 },
  522. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_17_LO,
  523. GEN8_RBBM_PERFCTR_UCHE_17_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_17 },
  524. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_18_LO,
  525. GEN8_RBBM_PERFCTR_UCHE_18_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_18 },
  526. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_19_LO,
  527. GEN8_RBBM_PERFCTR_UCHE_19_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_19 },
  528. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_20_LO,
  529. GEN8_RBBM_PERFCTR_UCHE_20_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_20 },
  530. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_21_LO,
  531. GEN8_RBBM_PERFCTR_UCHE_21_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_21 },
  532. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_22_LO,
  533. GEN8_RBBM_PERFCTR_UCHE_22_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_22 },
  534. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UCHE_23_LO,
  535. GEN8_RBBM_PERFCTR_UCHE_23_HI, -1, GEN8_UCHE_PERFCTR_UCHE_SEL_23 },
  536. };
  537. static struct adreno_perfcount_register gen8_perfcounters_tp[] = {
  538. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_0_LO,
  539. GEN8_RBBM_PERFCTR_TP_0_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_0 },
  540. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_1_LO,
  541. GEN8_RBBM_PERFCTR_TP_1_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_1 },
  542. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_2_LO,
  543. GEN8_RBBM_PERFCTR_TP_2_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_2 },
  544. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_3_LO,
  545. GEN8_RBBM_PERFCTR_TP_3_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_3 },
  546. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_4_LO,
  547. GEN8_RBBM_PERFCTR_TP_4_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_4 },
  548. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_5_LO,
  549. GEN8_RBBM_PERFCTR_TP_5_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_5 },
  550. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_6_LO,
  551. GEN8_RBBM_PERFCTR_TP_6_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_6 },
  552. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_7_LO,
  553. GEN8_RBBM_PERFCTR_TP_7_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_7 },
  554. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_8_LO,
  555. GEN8_RBBM_PERFCTR_TP_8_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_8 },
  556. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_9_LO,
  557. GEN8_RBBM_PERFCTR_TP_9_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_9 },
  558. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_10_LO,
  559. GEN8_RBBM_PERFCTR_TP_10_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_10 },
  560. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_TP_11_LO,
  561. GEN8_RBBM_PERFCTR_TP_11_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_11 },
  562. };
  563. static struct adreno_perfcount_register gen8_perfcounters_bv_tp[] = {
  564. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_TP_0_LO,
  565. GEN8_RBBM_PERFCTR2_TP_0_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_12 },
  566. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_TP_1_LO,
  567. GEN8_RBBM_PERFCTR2_TP_1_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_13 },
  568. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_TP_2_LO,
  569. GEN8_RBBM_PERFCTR2_TP_2_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_14 },
  570. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_TP_3_LO,
  571. GEN8_RBBM_PERFCTR2_TP_3_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_15 },
  572. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_TP_4_LO,
  573. GEN8_RBBM_PERFCTR2_TP_4_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_16 },
  574. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_TP_5_LO,
  575. GEN8_RBBM_PERFCTR2_TP_5_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_17 },
  576. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_TP_6_LO,
  577. GEN8_RBBM_PERFCTR2_TP_6_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_18 },
  578. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_TP_7_LO,
  579. GEN8_RBBM_PERFCTR2_TP_7_HI, -1, GEN8_TPL1_PERFCTR_TP_SEL_19 },
  580. };
  581. static struct adreno_perfcount_register gen8_perfcounters_sp[] = {
  582. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_0_LO,
  583. GEN8_RBBM_PERFCTR_SP_0_HI, -1, GEN8_SP_PERFCTR_SP_SEL_0 },
  584. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_1_LO,
  585. GEN8_RBBM_PERFCTR_SP_1_HI, -1, GEN8_SP_PERFCTR_SP_SEL_1 },
  586. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_2_LO,
  587. GEN8_RBBM_PERFCTR_SP_2_HI, -1, GEN8_SP_PERFCTR_SP_SEL_2 },
  588. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_3_LO,
  589. GEN8_RBBM_PERFCTR_SP_3_HI, -1, GEN8_SP_PERFCTR_SP_SEL_3 },
  590. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_4_LO,
  591. GEN8_RBBM_PERFCTR_SP_4_HI, -1, GEN8_SP_PERFCTR_SP_SEL_4 },
  592. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_5_LO,
  593. GEN8_RBBM_PERFCTR_SP_5_HI, -1, GEN8_SP_PERFCTR_SP_SEL_5 },
  594. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_6_LO,
  595. GEN8_RBBM_PERFCTR_SP_6_HI, -1, GEN8_SP_PERFCTR_SP_SEL_6 },
  596. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_7_LO,
  597. GEN8_RBBM_PERFCTR_SP_7_HI, -1, GEN8_SP_PERFCTR_SP_SEL_7 },
  598. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_8_LO,
  599. GEN8_RBBM_PERFCTR_SP_8_HI, -1, GEN8_SP_PERFCTR_SP_SEL_8 },
  600. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_9_LO,
  601. GEN8_RBBM_PERFCTR_SP_9_HI, -1, GEN8_SP_PERFCTR_SP_SEL_9 },
  602. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_10_LO,
  603. GEN8_RBBM_PERFCTR_SP_10_HI, -1, GEN8_SP_PERFCTR_SP_SEL_10 },
  604. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_11_LO,
  605. GEN8_RBBM_PERFCTR_SP_11_HI, -1, GEN8_SP_PERFCTR_SP_SEL_11 },
  606. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_12_LO,
  607. GEN8_RBBM_PERFCTR_SP_12_HI, -1, GEN8_SP_PERFCTR_SP_SEL_12 },
  608. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_13_LO,
  609. GEN8_RBBM_PERFCTR_SP_13_HI, -1, GEN8_SP_PERFCTR_SP_SEL_13 },
  610. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_14_LO,
  611. GEN8_RBBM_PERFCTR_SP_14_HI, -1, GEN8_SP_PERFCTR_SP_SEL_14 },
  612. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_15_LO,
  613. GEN8_RBBM_PERFCTR_SP_15_HI, -1, GEN8_SP_PERFCTR_SP_SEL_15 },
  614. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_16_LO,
  615. GEN8_RBBM_PERFCTR_SP_16_HI, -1, GEN8_SP_PERFCTR_SP_SEL_16 },
  616. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_17_LO,
  617. GEN8_RBBM_PERFCTR_SP_17_HI, -1, GEN8_SP_PERFCTR_SP_SEL_17 },
  618. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_18_LO,
  619. GEN8_RBBM_PERFCTR_SP_18_HI, -1, GEN8_SP_PERFCTR_SP_SEL_18 },
  620. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_19_LO,
  621. GEN8_RBBM_PERFCTR_SP_19_HI, -1, GEN8_SP_PERFCTR_SP_SEL_19 },
  622. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_20_LO,
  623. GEN8_RBBM_PERFCTR_SP_20_HI, -1, GEN8_SP_PERFCTR_SP_SEL_20 },
  624. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_21_LO,
  625. GEN8_RBBM_PERFCTR_SP_21_HI, -1, GEN8_SP_PERFCTR_SP_SEL_21 },
  626. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_22_LO,
  627. GEN8_RBBM_PERFCTR_SP_22_HI, -1, GEN8_SP_PERFCTR_SP_SEL_22 },
  628. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_SP_23_LO,
  629. GEN8_RBBM_PERFCTR_SP_23_HI, -1, GEN8_SP_PERFCTR_SP_SEL_23 },
  630. };
  631. static struct adreno_perfcount_register gen8_perfcounters_bv_sp[] = {
  632. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_0_LO,
  633. GEN8_RBBM_PERFCTR2_SP_0_HI, -1, GEN8_SP_PERFCTR_SP_SEL_24 },
  634. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_1_LO,
  635. GEN8_RBBM_PERFCTR2_SP_1_HI, -1, GEN8_SP_PERFCTR_SP_SEL_25 },
  636. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_2_LO,
  637. GEN8_RBBM_PERFCTR2_SP_2_HI, -1, GEN8_SP_PERFCTR_SP_SEL_26 },
  638. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_3_LO,
  639. GEN8_RBBM_PERFCTR2_SP_3_HI, -1, GEN8_SP_PERFCTR_SP_SEL_27 },
  640. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_4_LO,
  641. GEN8_RBBM_PERFCTR2_SP_4_HI, -1, GEN8_SP_PERFCTR_SP_SEL_28 },
  642. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_5_LO,
  643. GEN8_RBBM_PERFCTR2_SP_5_HI, -1, GEN8_SP_PERFCTR_SP_SEL_29 },
  644. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_6_LO,
  645. GEN8_RBBM_PERFCTR2_SP_6_HI, -1, GEN8_SP_PERFCTR_SP_SEL_30 },
  646. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_7_LO,
  647. GEN8_RBBM_PERFCTR2_SP_7_HI, -1, GEN8_SP_PERFCTR_SP_SEL_31 },
  648. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_8_LO,
  649. GEN8_RBBM_PERFCTR2_SP_8_HI, -1, GEN8_SP_PERFCTR_SP_SEL_32 },
  650. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_9_LO,
  651. GEN8_RBBM_PERFCTR2_SP_9_HI, -1, GEN8_SP_PERFCTR_SP_SEL_33 },
  652. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_10_LO,
  653. GEN8_RBBM_PERFCTR2_SP_10_HI, -1, GEN8_SP_PERFCTR_SP_SEL_34 },
  654. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_SP_11_LO,
  655. GEN8_RBBM_PERFCTR2_SP_11_HI, -1, GEN8_SP_PERFCTR_SP_SEL_35 },
  656. };
  657. static struct adreno_perfcount_register gen8_perfcounters_rb[] = {
  658. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RB_0_LO,
  659. GEN8_RBBM_PERFCTR_RB_0_HI, -1, GEN8_RB_PERFCTR_RB_SEL_0 },
  660. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RB_1_LO,
  661. GEN8_RBBM_PERFCTR_RB_1_HI, -1, GEN8_RB_PERFCTR_RB_SEL_1 },
  662. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RB_2_LO,
  663. GEN8_RBBM_PERFCTR_RB_2_HI, -1, GEN8_RB_PERFCTR_RB_SEL_2 },
  664. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RB_3_LO,
  665. GEN8_RBBM_PERFCTR_RB_3_HI, -1, GEN8_RB_PERFCTR_RB_SEL_3 },
  666. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RB_4_LO,
  667. GEN8_RBBM_PERFCTR_RB_4_HI, -1, GEN8_RB_PERFCTR_RB_SEL_4 },
  668. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RB_5_LO,
  669. GEN8_RBBM_PERFCTR_RB_5_HI, -1, GEN8_RB_PERFCTR_RB_SEL_5 },
  670. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RB_6_LO,
  671. GEN8_RBBM_PERFCTR_RB_6_HI, -1, GEN8_RB_PERFCTR_RB_SEL_6 },
  672. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_RB_7_LO,
  673. GEN8_RBBM_PERFCTR_RB_7_HI, -1, GEN8_RB_PERFCTR_RB_SEL_7 },
  674. };
  675. static struct adreno_perfcount_register gen8_perfcounters_vsc[] = {
  676. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VSC_0_LO,
  677. GEN8_RBBM_PERFCTR_VSC_0_HI, -1, GEN8_VSC_PERFCTR_VSC_SEL_0 },
  678. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_VSC_1_LO,
  679. GEN8_RBBM_PERFCTR_VSC_1_HI, -1, GEN8_VSC_PERFCTR_VSC_SEL_1 },
  680. };
  681. static struct adreno_perfcount_register gen8_perfcounters_lrz[] = {
  682. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_LRZ_0_LO,
  683. GEN8_RBBM_PERFCTR_LRZ_0_HI, -1, GEN8_GRAS_PERFCTR_LRZ_SEL_0 },
  684. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_LRZ_1_LO,
  685. GEN8_RBBM_PERFCTR_LRZ_1_HI, -1, GEN8_GRAS_PERFCTR_LRZ_SEL_1 },
  686. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_LRZ_2_LO,
  687. GEN8_RBBM_PERFCTR_LRZ_2_HI, -1, GEN8_GRAS_PERFCTR_LRZ_SEL_2 },
  688. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_LRZ_3_LO,
  689. GEN8_RBBM_PERFCTR_LRZ_3_HI, -1, GEN8_GRAS_PERFCTR_LRZ_SEL_3 },
  690. };
  691. static struct adreno_perfcount_register gen8_perfcounters_bv_lrz[] = {
  692. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_LRZ_0_LO,
  693. GEN8_RBBM_PERFCTR_BV_LRZ_0_HI, -1, GEN8_GRAS_PERFCTR_LRZ_SEL_0 },
  694. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_LRZ_1_LO,
  695. GEN8_RBBM_PERFCTR_BV_LRZ_1_HI, -1, GEN8_GRAS_PERFCTR_LRZ_SEL_1 },
  696. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_LRZ_2_LO,
  697. GEN8_RBBM_PERFCTR_BV_LRZ_2_HI, -1, GEN8_GRAS_PERFCTR_LRZ_SEL_2 },
  698. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_BV_LRZ_3_LO,
  699. GEN8_RBBM_PERFCTR_BV_LRZ_3_HI, -1, GEN8_GRAS_PERFCTR_LRZ_SEL_3 },
  700. };
  701. static struct adreno_perfcount_register gen8_perfcounters_cmp[] = {
  702. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CMP_0_LO,
  703. GEN8_RBBM_PERFCTR_CMP_0_HI, -1, GEN8_RB_PERFCTR_CMP_SEL_0 },
  704. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CMP_1_LO,
  705. GEN8_RBBM_PERFCTR_CMP_1_HI, -1, GEN8_RB_PERFCTR_CMP_SEL_1 },
  706. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CMP_2_LO,
  707. GEN8_RBBM_PERFCTR_CMP_2_HI, -1, GEN8_RB_PERFCTR_CMP_SEL_2 },
  708. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_CMP_3_LO,
  709. GEN8_RBBM_PERFCTR_CMP_3_HI, -1, GEN8_RB_PERFCTR_CMP_SEL_3 },
  710. };
  711. static struct adreno_perfcount_register gen8_perfcounters_ufc[] = {
  712. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UFC_0_LO,
  713. GEN8_RBBM_PERFCTR_UFC_0_HI, -1, GEN8_RB_PERFCTR_UFC_SEL_0 },
  714. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UFC_1_LO,
  715. GEN8_RBBM_PERFCTR_UFC_1_HI, -1, GEN8_RB_PERFCTR_UFC_SEL_1 },
  716. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UFC_2_LO,
  717. GEN8_RBBM_PERFCTR_UFC_2_HI, -1, GEN8_RB_PERFCTR_UFC_SEL_2 },
  718. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR_UFC_3_LO,
  719. GEN8_RBBM_PERFCTR_UFC_3_HI, -1, GEN8_RB_PERFCTR_UFC_SEL_3 },
  720. };
  721. static struct adreno_perfcount_register gen8_perfcounters_bv_ufc[] = {
  722. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_UFC_0_LO,
  723. GEN8_RBBM_PERFCTR2_UFC_0_HI, -1, GEN8_RB_PERFCTR_UFC_SEL_4 },
  724. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_RBBM_PERFCTR2_UFC_1_LO,
  725. GEN8_RBBM_PERFCTR2_UFC_1_HI, -1, GEN8_RB_PERFCTR_UFC_SEL_5 },
  726. };
  727. static struct adreno_perfcount_register gen8_perfcounters_gbif[] = {
  728. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PERF_CNT_LO_0,
  729. GEN8_GBIF_PERF_CNT_HI_0, -1, GEN8_GBIF_PERF_CNT_SEL_0 },
  730. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PERF_CNT_LO_1,
  731. GEN8_GBIF_PERF_CNT_HI_1, -1, GEN8_GBIF_PERF_CNT_SEL_0 },
  732. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PERF_CNT_LO_2,
  733. GEN8_GBIF_PERF_CNT_HI_2, -1, GEN8_GBIF_PERF_CNT_SEL_0 },
  734. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PERF_CNT_LO_3,
  735. GEN8_GBIF_PERF_CNT_HI_3, -1, GEN8_GBIF_PERF_CNT_SEL_0 },
  736. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PERF_CNT_LO_4,
  737. GEN8_GBIF_PERF_CNT_HI_4, -1, GEN8_GBIF_PERF_CNT_SEL_1 },
  738. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PERF_CNT_LO_5,
  739. GEN8_GBIF_PERF_CNT_HI_5, -1, GEN8_GBIF_PERF_CNT_SEL_1 },
  740. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PERF_CNT_LO_6,
  741. GEN8_GBIF_PERF_CNT_HI_6, -1, GEN8_GBIF_PERF_CNT_SEL_1 },
  742. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PERF_CNT_LO_7,
  743. GEN8_GBIF_PERF_CNT_HI_7, -1, GEN8_GBIF_PERF_CNT_SEL_1 },
  744. };
  745. static struct adreno_perfcount_register gen8_perfcounters_gbif_pwr[] = {
  746. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PWR_CNT_LO_0,
  747. GEN8_GBIF_PWR_CNT_HI_0, -1, GEN8_GBIF_PWR_CNT_SEL },
  748. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PWR_CNT_LO_1,
  749. GEN8_GBIF_PWR_CNT_HI_1, -1, GEN8_GBIF_PWR_CNT_SEL },
  750. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_GBIF_PWR_CNT_LO_2,
  751. GEN8_GBIF_PWR_CNT_HI_2, -1, GEN8_GBIF_PWR_CNT_SEL },
  752. };
  753. #define GMU_COUNTER(lo, hi, sel) \
  754. { .countable = KGSL_PERFCOUNTER_NOT_USED, \
  755. .offset = lo, .offset_hi = hi, .select = sel }
  756. #define GMU_COUNTER_RESERVED(lo, hi, sel) \
  757. { .countable = KGSL_PERFCOUNTER_BROKEN, \
  758. .offset = lo, .offset_hi = hi, .select = sel }
  759. static struct adreno_perfcount_register gen8_perfcounters_gmu_xoclk[] = {
  760. /*
  761. * COUNTER_XOCLK_0 and COUNTER_XOCLK_4 are used for the GPU
  762. * busy and ifpc count. Mark them as reserved to ensure they
  763. * are not re-used.
  764. */
  765. GMU_COUNTER_RESERVED(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_0,
  766. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_0,
  767. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_0),
  768. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_1,
  769. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_1,
  770. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_0),
  771. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_2,
  772. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_2,
  773. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_0),
  774. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_3,
  775. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_3,
  776. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_0),
  777. GMU_COUNTER_RESERVED(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_4,
  778. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_4,
  779. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_1),
  780. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_5,
  781. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_5,
  782. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_1),
  783. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_6,
  784. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_6,
  785. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_1),
  786. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_7,
  787. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_7,
  788. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_1),
  789. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_8,
  790. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_8,
  791. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_2),
  792. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_9,
  793. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_9,
  794. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_2),
  795. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_10,
  796. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_10,
  797. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_2),
  798. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_11,
  799. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_11,
  800. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_2),
  801. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_12,
  802. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_12,
  803. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_3),
  804. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_13,
  805. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_13,
  806. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_3),
  807. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_14,
  808. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_14,
  809. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_3),
  810. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_15,
  811. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_15,
  812. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_3),
  813. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_16,
  814. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_16,
  815. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_4),
  816. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_17,
  817. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_17,
  818. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_4),
  819. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_18,
  820. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_18,
  821. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_4),
  822. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_19,
  823. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_19,
  824. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_4),
  825. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_20,
  826. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_20,
  827. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_5),
  828. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_21,
  829. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_21,
  830. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_5),
  831. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_22,
  832. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_22,
  833. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_5),
  834. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_23,
  835. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_23,
  836. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_5),
  837. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_24,
  838. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_24,
  839. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_6),
  840. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_25,
  841. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_25,
  842. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_6),
  843. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_26,
  844. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_26,
  845. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_6),
  846. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_27,
  847. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_27,
  848. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_6),
  849. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_28,
  850. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_28,
  851. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_7),
  852. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_29,
  853. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_29,
  854. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_7),
  855. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_30,
  856. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_30,
  857. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_7),
  858. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_31,
  859. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_31,
  860. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_7),
  861. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_32,
  862. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_32,
  863. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_8),
  864. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_33,
  865. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_33,
  866. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_8),
  867. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_34,
  868. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_34,
  869. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_8),
  870. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_35,
  871. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_35,
  872. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_8),
  873. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_36,
  874. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_36,
  875. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_9),
  876. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_37,
  877. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_37,
  878. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_9),
  879. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_38,
  880. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_38,
  881. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_9),
  882. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_XOCLK_L_39,
  883. GEN8_GMUCX_POWER_COUNTER_XOCLK_H_39,
  884. GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_9),
  885. };
  886. static struct adreno_perfcount_register gen8_perfcounters_gmu_gmuclk[] = {
  887. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_0,
  888. GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_0,
  889. GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_0),
  890. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_1,
  891. GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_1,
  892. GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_0),
  893. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_2,
  894. GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_2,
  895. GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_0),
  896. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_3,
  897. GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_3,
  898. GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_0),
  899. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_4,
  900. GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_4,
  901. GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_1),
  902. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_5,
  903. GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_5,
  904. GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_1),
  905. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_6,
  906. GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_6,
  907. GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_1),
  908. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_7,
  909. GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_7,
  910. GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_1),
  911. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_8,
  912. GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_8,
  913. GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_2),
  914. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_9,
  915. GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_9,
  916. GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_2),
  917. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_10,
  918. GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_10,
  919. GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_2),
  920. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_11,
  921. GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_11,
  922. GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_2),
  923. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_12,
  924. GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_12,
  925. GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_3),
  926. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_13,
  927. GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_13,
  928. GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_3),
  929. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_14,
  930. GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_14,
  931. GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_3),
  932. GMU_COUNTER(GEN8_GMUCX_POWER_COUNTER_GMUCLK_L_15,
  933. GEN8_GMUCX_POWER_COUNTER_GMUCLK_H_15,
  934. GEN8_GMUCX_POWER_COUNTER_SELECT_GMUCLK_3),
  935. };
  936. static struct adreno_perfcount_register gen8_perfcounters_gmu_perf[] = {
  937. GMU_COUNTER(GEN8_GMUCX_PERF_COUNTER_L_0,
  938. GEN8_GMUCX_PERF_COUNTER_H_0,
  939. GEN8_GMUCX_PERF_COUNTER_SELECT_0),
  940. GMU_COUNTER(GEN8_GMUCX_PERF_COUNTER_L_1,
  941. GEN8_GMUCX_PERF_COUNTER_H_1,
  942. GEN8_GMUCX_PERF_COUNTER_SELECT_0),
  943. GMU_COUNTER(GEN8_GMUCX_PERF_COUNTER_L_2,
  944. GEN8_GMUCX_PERF_COUNTER_H_2,
  945. GEN8_GMUCX_PERF_COUNTER_SELECT_0),
  946. GMU_COUNTER(GEN8_GMUCX_PERF_COUNTER_L_3,
  947. GEN8_GMUCX_PERF_COUNTER_H_3,
  948. GEN8_GMUCX_PERF_COUNTER_SELECT_0),
  949. GMU_COUNTER(GEN8_GMUCX_PERF_COUNTER_L_4,
  950. GEN8_GMUCX_PERF_COUNTER_H_4,
  951. GEN8_GMUCX_PERF_COUNTER_SELECT_1),
  952. GMU_COUNTER(GEN8_GMUCX_PERF_COUNTER_L_5,
  953. GEN8_GMUCX_PERF_COUNTER_H_5,
  954. GEN8_GMUCX_PERF_COUNTER_SELECT_1),
  955. };
  956. static struct adreno_perfcount_register gen8_perfcounters_alwayson[] = {
  957. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN8_CP_ALWAYS_ON_COUNTER_LO,
  958. GEN8_CP_ALWAYS_ON_COUNTER_HI, -1 },
  959. };
  960. /*
  961. * ADRENO_PERFCOUNTER_GROUP_RESTORE flag is enabled by default
  962. * because most of the perfcounter groups need to be restored
  963. * as part of preemption and IFPC. Perfcounter groups that are
  964. * not restored as part of preemption and IFPC should be defined
  965. * using GEN8_PERFCOUNTER_GROUP_FLAGS macro
  966. */
  967. #define GEN8_PERFCOUNTER_GROUP_FLAGS(core, offset, name, flags, \
  968. enable, read) \
  969. [KGSL_PERFCOUNTER_GROUP_##offset] = { core##_perfcounters_##name, \
  970. ARRAY_SIZE(core##_perfcounters_##name), __stringify(name), flags, \
  971. enable, read }
  972. #define GEN8_PERFCOUNTER_GROUP(offset, name, enable, read) \
  973. GEN8_PERFCOUNTER_GROUP_FLAGS(gen8, offset, name, \
  974. ADRENO_PERFCOUNTER_GROUP_RESTORE, enable, read)
  975. #define GEN8_REGULAR_PERFCOUNTER_GROUP(offset, name) \
  976. GEN8_PERFCOUNTER_GROUP(offset, name, \
  977. gen8_counter_enable, gen8_counter_read)
  978. #define GEN8_BV_PERFCOUNTER_GROUP(offset, name, enable, read) \
  979. GEN8_PERFCOUNTER_GROUP_FLAGS(gen8, BV_##offset, bv_##name, \
  980. ADRENO_PERFCOUNTER_GROUP_RESTORE, enable, read)
  981. #define GEN8_BV_REGULAR_PERFCOUNTER_GROUP(offset, name) \
  982. GEN8_BV_PERFCOUNTER_GROUP(offset, name, \
  983. gen8_counter_enable, gen8_counter_read)
  984. static const struct adreno_perfcount_group gen8_perfcounter_groups
  985. [KGSL_PERFCOUNTER_GROUP_MAX] = {
  986. GEN8_REGULAR_PERFCOUNTER_GROUP(CP, cp),
  987. GEN8_PERFCOUNTER_GROUP_FLAGS(gen8, RBBM, rbbm, 0,
  988. gen8_counter_enable, gen8_counter_read),
  989. GEN8_PERFCOUNTER_GROUP(PC, pc, gen8_counter_br_enable, gen8_counter_read),
  990. GEN8_PERFCOUNTER_GROUP(VFD, vfd, gen8_counter_br_enable, gen8_counter_read),
  991. GEN8_PERFCOUNTER_GROUP(HLSQ, hlsq, gen8_counter_br_enable, gen8_counter_read),
  992. GEN8_PERFCOUNTER_GROUP(VPC, vpc, gen8_counter_br_enable, gen8_counter_read),
  993. GEN8_PERFCOUNTER_GROUP(CCU, ccu, gen8_counter_br_enable, gen8_counter_read),
  994. GEN8_PERFCOUNTER_GROUP(CMP, cmp, gen8_counter_br_enable, gen8_counter_read),
  995. GEN8_PERFCOUNTER_GROUP(TSE, tse, gen8_counter_br_enable, gen8_counter_read),
  996. GEN8_PERFCOUNTER_GROUP(RAS, ras, gen8_counter_br_enable, gen8_counter_read),
  997. GEN8_PERFCOUNTER_GROUP(LRZ, lrz, gen8_counter_br_enable, gen8_counter_read),
  998. GEN8_REGULAR_PERFCOUNTER_GROUP(UCHE, uche),
  999. GEN8_REGULAR_PERFCOUNTER_GROUP(TP, tp),
  1000. GEN8_REGULAR_PERFCOUNTER_GROUP(SP, sp),
  1001. GEN8_PERFCOUNTER_GROUP(RB, rb, gen8_counter_br_enable, gen8_counter_read),
  1002. GEN8_REGULAR_PERFCOUNTER_GROUP(VSC, vsc),
  1003. GEN8_PERFCOUNTER_GROUP_FLAGS(gen8, VBIF, gbif, 0,
  1004. gen8_counter_gbif_enable, gen8_counter_read_norestore),
  1005. GEN8_PERFCOUNTER_GROUP_FLAGS(gen8, VBIF_PWR, gbif_pwr,
  1006. ADRENO_PERFCOUNTER_GROUP_FIXED,
  1007. gen8_counter_gbif_pwr_enable, gen8_counter_read_norestore),
  1008. GEN8_PERFCOUNTER_GROUP_FLAGS(gen8, ALWAYSON, alwayson,
  1009. ADRENO_PERFCOUNTER_GROUP_FIXED,
  1010. gen8_counter_alwayson_enable, gen8_counter_alwayson_read),
  1011. GEN8_PERFCOUNTER_GROUP_FLAGS(gen8, GMU_XOCLK, gmu_xoclk, 0,
  1012. gen8_counter_gmu_pwr_enable, gen8_counter_read_norestore),
  1013. GEN8_PERFCOUNTER_GROUP_FLAGS(gen8, GMU_GMUCLK, gmu_gmuclk, 0,
  1014. gen8_counter_gmu_pwr_enable, gen8_counter_read_norestore),
  1015. GEN8_PERFCOUNTER_GROUP_FLAGS(gen8, GMU_PERF, gmu_perf, 0,
  1016. gen8_counter_gmu_perf_enable, gen8_counter_read_norestore),
  1017. GEN8_REGULAR_PERFCOUNTER_GROUP(UFC, ufc),
  1018. GEN8_BV_REGULAR_PERFCOUNTER_GROUP(CP, cp),
  1019. GEN8_BV_PERFCOUNTER_GROUP(PC, pc, gen8_counter_bv_enable, gen8_counter_read),
  1020. GEN8_BV_PERFCOUNTER_GROUP(VFD, vfd, gen8_counter_bv_enable, gen8_counter_read),
  1021. GEN8_BV_PERFCOUNTER_GROUP(VPC, vpc, gen8_counter_bv_enable, gen8_counter_read),
  1022. GEN8_BV_REGULAR_PERFCOUNTER_GROUP(TP, tp),
  1023. GEN8_BV_REGULAR_PERFCOUNTER_GROUP(SP, sp),
  1024. GEN8_BV_REGULAR_PERFCOUNTER_GROUP(UFC, ufc),
  1025. GEN8_BV_PERFCOUNTER_GROUP(TSE, tse, gen8_counter_bv_enable, gen8_counter_read),
  1026. GEN8_BV_PERFCOUNTER_GROUP(RAS, ras, gen8_counter_bv_enable, gen8_counter_read),
  1027. GEN8_BV_PERFCOUNTER_GROUP(LRZ, lrz, gen8_counter_bv_enable, gen8_counter_read),
  1028. GEN8_BV_PERFCOUNTER_GROUP(HLSQ, hlsq, gen8_counter_bv_enable, gen8_counter_read),
  1029. };
  1030. const struct adreno_perfcounters adreno_gen8_perfcounters = {
  1031. gen8_perfcounter_groups,
  1032. ARRAY_SIZE(gen8_perfcounter_groups),
  1033. };