adreno_gen7_perfcounter.c 57 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2021, The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #include "adreno.h"
  7. #include "adreno_gen7.h"
  8. #include "adreno_gen7_hwsched_hfi.h"
  9. #include "adreno_perfcounter.h"
  10. #include "adreno_pm4types.h"
  11. #include "kgsl_device.h"
  12. /*
  13. * For registers that do not get restored on power cycle, read the value and add
  14. * the stored shadow value
  15. */
  16. static u64 gen7_counter_read_norestore(struct adreno_device *adreno_dev,
  17. const struct adreno_perfcount_group *group,
  18. unsigned int counter)
  19. {
  20. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  21. struct adreno_perfcount_register *reg = &group->regs[counter];
  22. u32 hi, lo;
  23. kgsl_regread(device, reg->offset, &lo);
  24. kgsl_regread(device, reg->offset_hi, &hi);
  25. return ((((u64) hi) << 32) | lo) + reg->value;
  26. }
  27. static int gen7_counter_br_enable(struct adreno_device *adreno_dev,
  28. const struct adreno_perfcount_group *group,
  29. unsigned int counter, unsigned int countable)
  30. {
  31. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  32. struct adreno_perfcount_register *reg = &group->regs[counter];
  33. int ret = 0;
  34. u32 val = 0;
  35. kgsl_regread(device, GEN7_CP_APERTURE_CNTL_HOST, &val);
  36. kgsl_regwrite(device, GEN7_CP_APERTURE_CNTL_HOST, FIELD_PREP(GENMASK(13, 12), PIPE_BR));
  37. ret = gen7_perfcounter_update(adreno_dev, reg, true,
  38. FIELD_PREP(GENMASK(13, 12), PIPE_BR), group->flags);
  39. kgsl_regwrite(device, GEN7_CP_APERTURE_CNTL_HOST, val);
  40. /* Ensure all writes are posted before accessing the piped register */
  41. mb();
  42. if (!ret)
  43. reg->value = 0;
  44. return ret;
  45. }
  46. static int gen7_counter_bv_enable(struct adreno_device *adreno_dev,
  47. const struct adreno_perfcount_group *group,
  48. unsigned int counter, unsigned int countable)
  49. {
  50. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  51. struct adreno_perfcount_register *reg = &group->regs[counter];
  52. int ret = 0;
  53. u32 val = 0;
  54. kgsl_regread(device, GEN7_CP_APERTURE_CNTL_HOST, &val);
  55. kgsl_regwrite(device, GEN7_CP_APERTURE_CNTL_HOST, FIELD_PREP(GENMASK(13, 12), PIPE_BV));
  56. ret = gen7_perfcounter_update(adreno_dev, reg, true,
  57. FIELD_PREP(GENMASK(13, 12), PIPE_BV), group->flags);
  58. kgsl_regwrite(device, GEN7_CP_APERTURE_CNTL_HOST, val);
  59. /* Ensure all writes are posted before accessing the piped register */
  60. mb();
  61. if (!ret)
  62. reg->value = 0;
  63. return ret;
  64. }
  65. static int gen7_counter_enable(struct adreno_device *adreno_dev,
  66. const struct adreno_perfcount_group *group,
  67. unsigned int counter, unsigned int countable)
  68. {
  69. struct adreno_perfcount_register *reg = &group->regs[counter];
  70. int ret = 0;
  71. ret = gen7_perfcounter_update(adreno_dev, reg, true,
  72. FIELD_PREP(GENMASK(13, 12), PIPE_NONE), group->flags);
  73. if (!ret)
  74. reg->value = 0;
  75. return ret;
  76. }
  77. static int gen7_hwsched_counter_enable(struct adreno_device *adreno_dev,
  78. const struct adreno_perfcount_group *group,
  79. u32 counter, u32 countable)
  80. {
  81. if (!(KGSL_DEVICE(adreno_dev)->state == KGSL_STATE_ACTIVE))
  82. return gen7_counter_enable(adreno_dev, group, counter, countable);
  83. return gen7_hwsched_counter_inline_enable(adreno_dev, group, counter, countable);
  84. }
  85. /* This function is specific to sw-scheduler and not applicable for hw-scheduler */
  86. static int gen7_counter_inline_enable(struct adreno_device *adreno_dev,
  87. const struct adreno_perfcount_group *group,
  88. unsigned int counter, unsigned int countable)
  89. {
  90. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  91. struct adreno_perfcount_register *reg = &group->regs[counter];
  92. struct adreno_ringbuffer *rb = &adreno_dev->ringbuffers[0];
  93. u32 cmds[3];
  94. int ret;
  95. /* Fallback when we reach here from GPU initialization sequence */
  96. if (!(device->state == KGSL_STATE_ACTIVE))
  97. return gen7_counter_enable(adreno_dev, group, counter,
  98. countable);
  99. gen7_perfcounter_update(adreno_dev, reg, false,
  100. FIELD_PREP(GENMASK(13, 12), PIPE_NONE), group->flags);
  101. cmds[0] = cp_type7_packet(CP_WAIT_FOR_IDLE, 0);
  102. cmds[1] = cp_type4_packet(reg->select, 1);
  103. cmds[2] = countable;
  104. /* submit to highest priority RB always */
  105. ret = gen7_ringbuffer_addcmds(adreno_dev, rb, NULL,
  106. F_NOTPROTECTED, cmds, 3, 0, NULL);
  107. if (ret)
  108. return ret;
  109. /*
  110. * schedule dispatcher to make sure rb[0] is run, because
  111. * if the current RB is not rb[0] and gpu is idle then
  112. * rb[0] will not get scheduled to run
  113. */
  114. if (adreno_dev->cur_rb != rb)
  115. adreno_dispatcher_schedule(device);
  116. /* wait for the above commands submitted to complete */
  117. ret = adreno_ringbuffer_waittimestamp(rb, rb->timestamp,
  118. ADRENO_IDLE_TIMEOUT);
  119. if (ret) {
  120. /*
  121. * If we were woken up because of cancelling rb events
  122. * either due to soft reset or adreno_stop, ignore the
  123. * error and return 0 here. The perfcounter is already
  124. * set up in software and it will be programmed in
  125. * hardware when we wake up or come up after soft reset,
  126. * by adreno_perfcounter_restore.
  127. */
  128. if (ret == -EAGAIN)
  129. ret = 0;
  130. else
  131. dev_err_ratelimited(device->dev,
  132. "Perfcounter %s/%u/%u start via commands failed %d\n",
  133. group->name, counter, countable, ret);
  134. }
  135. if (!ret)
  136. reg->value = 0;
  137. return ret;
  138. }
  139. static u64 gen7_counter_read(struct adreno_device *adreno_dev,
  140. const struct adreno_perfcount_group *group,
  141. unsigned int counter)
  142. {
  143. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  144. struct adreno_perfcount_register *reg = &group->regs[counter];
  145. u32 hi, lo;
  146. kgsl_regread(device, reg->offset, &lo);
  147. kgsl_regread(device, reg->offset_hi, &hi);
  148. /* These registers are restored on power resume */
  149. return (((u64) hi) << 32) | lo;
  150. }
  151. static int gen7_counter_gbif_enable(struct adreno_device *adreno_dev,
  152. const struct adreno_perfcount_group *group,
  153. unsigned int counter, unsigned int countable)
  154. {
  155. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  156. struct adreno_perfcount_register *reg = &group->regs[counter];
  157. unsigned int shift = counter << 3;
  158. unsigned int select = BIT(counter);
  159. if (countable > 0xff)
  160. return -EINVAL;
  161. /*
  162. * Write 1, followed by 0 to CLR register for
  163. * clearing the counter
  164. */
  165. kgsl_regrmw(device, GEN7_GBIF_PERF_PWR_CNT_CLR, select, select);
  166. kgsl_regrmw(device, GEN7_GBIF_PERF_PWR_CNT_CLR, select, 0);
  167. /* select the desired countable */
  168. kgsl_regrmw(device, reg->select, 0xff << shift, countable << shift);
  169. /* enable counter */
  170. kgsl_regrmw(device, GEN7_GBIF_PERF_PWR_CNT_EN, select, select);
  171. reg->value = 0;
  172. return 0;
  173. }
  174. static int gen7_counter_gbif_pwr_enable(struct adreno_device *adreno_dev,
  175. const struct adreno_perfcount_group *group,
  176. unsigned int counter, unsigned int countable)
  177. {
  178. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  179. struct adreno_perfcount_register *reg = &group->regs[counter];
  180. unsigned int shift = counter << 3;
  181. unsigned int select = BIT(16 + counter);
  182. if (countable > 0xff)
  183. return -EINVAL;
  184. /*
  185. * Write 1, followed by 0 to CLR register for
  186. * clearing the counter
  187. */
  188. kgsl_regrmw(device, GEN7_GBIF_PERF_PWR_CNT_CLR, select, select);
  189. kgsl_regrmw(device, GEN7_GBIF_PERF_PWR_CNT_CLR, select, 0);
  190. /* select the desired countable */
  191. kgsl_regrmw(device, reg->select, 0xff << shift, countable << shift);
  192. /* Enable the counter */
  193. kgsl_regrmw(device, GEN7_GBIF_PERF_PWR_CNT_EN, select, select);
  194. reg->value = 0;
  195. return 0;
  196. }
  197. static int gen7_counter_alwayson_enable(struct adreno_device *adreno_dev,
  198. const struct adreno_perfcount_group *group,
  199. unsigned int counter, unsigned int countable)
  200. {
  201. return 0;
  202. }
  203. static u64 gen7_counter_alwayson_read(struct adreno_device *adreno_dev,
  204. const struct adreno_perfcount_group *group,
  205. unsigned int counter)
  206. {
  207. struct adreno_perfcount_register *reg = &group->regs[counter];
  208. const struct adreno_gpudev *gpudev = ADRENO_GPU_DEVICE(adreno_dev);
  209. return gpudev->read_alwayson(adreno_dev) + reg->value;
  210. }
  211. static void gen7_write_gmu_counter_enable(struct kgsl_device *device,
  212. struct adreno_perfcount_register *reg, u32 bit, u32 countable)
  213. {
  214. kgsl_regrmw(device, reg->select, 0xff << bit, countable << bit);
  215. }
  216. static int gen7_counter_gmu_xoclk_enable(struct adreno_device *adreno_dev,
  217. const struct adreno_perfcount_group *group,
  218. unsigned int counter, unsigned int countable)
  219. {
  220. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  221. struct adreno_perfcount_register *reg = &group->regs[counter];
  222. if (countable > 0xff)
  223. return -EINVAL;
  224. /*
  225. * Counters [0:3] are in select 0 bit offsets 0, 8, 16 and 24
  226. * Counters [4:5] are in select 1 bit offset 0, 8
  227. * Counters [6:9] are in select 2 bit offset 0, 8, 16 and 24
  228. * Counters [10] is in select 3 bit offset 0
  229. */
  230. if (counter == 4 || counter == 5)
  231. counter -= 4;
  232. else if (counter >= 6 && counter <= 9)
  233. counter -= 6;
  234. else if (counter == 10)
  235. counter = 0;
  236. gen7_write_gmu_counter_enable(device, reg, counter * 8, countable);
  237. reg->value = 0;
  238. kgsl_regwrite(device, GEN7_GMU_CX_GMU_POWER_COUNTER_ENABLE, 1);
  239. return 0;
  240. }
  241. static int gen7_counter_gmu_gmuclk_enable(struct adreno_device *adreno_dev,
  242. const struct adreno_perfcount_group *group,
  243. unsigned int counter, unsigned int countable)
  244. {
  245. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  246. struct adreno_perfcount_register *reg = &group->regs[counter];
  247. if (countable > 0xff)
  248. return -EINVAL;
  249. /*
  250. * The two counters are stuck into GMU_CX_GMU_POWER_COUNTER_SELECT_1
  251. * at bit offset 16 and 24
  252. */
  253. gen7_write_gmu_counter_enable(device, reg,
  254. 16 + (counter * 8), countable);
  255. kgsl_regwrite(device, GEN7_GMU_CX_GMU_POWER_COUNTER_ENABLE, 1);
  256. reg->value = 0;
  257. return 0;
  258. }
  259. static int gen7_counter_gmu_perf_enable(struct adreno_device *adreno_dev,
  260. const struct adreno_perfcount_group *group,
  261. unsigned int counter, unsigned int countable)
  262. {
  263. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  264. struct adreno_perfcount_register *reg = &group->regs[counter];
  265. if (countable > 0xff)
  266. return -EINVAL;
  267. /*
  268. * Counters [0:3] are in select 1 bit offsets 0, 8, 16 and 24
  269. * Counters [4:5] are in select 2 bit offset 0, 8
  270. */
  271. if (counter >= 4)
  272. counter -= 4;
  273. gen7_write_gmu_counter_enable(device, reg, counter * 8, countable);
  274. kgsl_regwrite(device, GEN7_GMU_CX_GMU_PERF_COUNTER_ENABLE, 1);
  275. reg->value = 0;
  276. return 0;
  277. }
  278. static struct adreno_perfcount_register gen7_perfcounters_cp[] = {
  279. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CP_0_LO,
  280. GEN7_RBBM_PERFCTR_CP_0_HI, -1, GEN7_CP_PERFCTR_CP_SEL_0 },
  281. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CP_1_LO,
  282. GEN7_RBBM_PERFCTR_CP_1_HI, -1, GEN7_CP_PERFCTR_CP_SEL_1 },
  283. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CP_2_LO,
  284. GEN7_RBBM_PERFCTR_CP_2_HI, -1, GEN7_CP_PERFCTR_CP_SEL_2 },
  285. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CP_3_LO,
  286. GEN7_RBBM_PERFCTR_CP_3_HI, -1, GEN7_CP_PERFCTR_CP_SEL_3 },
  287. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CP_4_LO,
  288. GEN7_RBBM_PERFCTR_CP_4_HI, -1, GEN7_CP_PERFCTR_CP_SEL_4 },
  289. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CP_5_LO,
  290. GEN7_RBBM_PERFCTR_CP_5_HI, -1, GEN7_CP_PERFCTR_CP_SEL_5 },
  291. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CP_6_LO,
  292. GEN7_RBBM_PERFCTR_CP_6_HI, -1, GEN7_CP_PERFCTR_CP_SEL_6 },
  293. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CP_7_LO,
  294. GEN7_RBBM_PERFCTR_CP_7_HI, -1, GEN7_CP_PERFCTR_CP_SEL_7 },
  295. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CP_8_LO,
  296. GEN7_RBBM_PERFCTR_CP_8_HI, -1, GEN7_CP_PERFCTR_CP_SEL_8 },
  297. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CP_9_LO,
  298. GEN7_RBBM_PERFCTR_CP_9_HI, -1, GEN7_CP_PERFCTR_CP_SEL_9 },
  299. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CP_10_LO,
  300. GEN7_RBBM_PERFCTR_CP_10_HI, -1, GEN7_CP_PERFCTR_CP_SEL_10 },
  301. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CP_11_LO,
  302. GEN7_RBBM_PERFCTR_CP_11_HI, -1, GEN7_CP_PERFCTR_CP_SEL_11 },
  303. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CP_12_LO,
  304. GEN7_RBBM_PERFCTR_CP_12_HI, -1, GEN7_CP_PERFCTR_CP_SEL_12 },
  305. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CP_13_LO,
  306. GEN7_RBBM_PERFCTR_CP_13_HI, -1, GEN7_CP_PERFCTR_CP_SEL_13 },
  307. };
  308. static struct adreno_perfcount_register gen7_perfcounters_bv_cp[] = {
  309. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_CP_0_LO,
  310. GEN7_RBBM_PERFCTR2_CP_0_HI, -1, GEN7_CP_BV_PERFCTR_CP_SEL_0 },
  311. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_CP_1_LO,
  312. GEN7_RBBM_PERFCTR2_CP_1_HI, -1, GEN7_CP_BV_PERFCTR_CP_SEL_1 },
  313. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_CP_2_LO,
  314. GEN7_RBBM_PERFCTR2_CP_2_HI, -1, GEN7_CP_BV_PERFCTR_CP_SEL_2 },
  315. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_CP_3_LO,
  316. GEN7_RBBM_PERFCTR2_CP_3_HI, -1, GEN7_CP_BV_PERFCTR_CP_SEL_3 },
  317. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_CP_4_LO,
  318. GEN7_RBBM_PERFCTR2_CP_4_HI, -1, GEN7_CP_BV_PERFCTR_CP_SEL_4 },
  319. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_CP_5_LO,
  320. GEN7_RBBM_PERFCTR2_CP_5_HI, -1, GEN7_CP_BV_PERFCTR_CP_SEL_5 },
  321. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_CP_6_LO,
  322. GEN7_RBBM_PERFCTR2_CP_6_HI, -1, GEN7_CP_BV_PERFCTR_CP_SEL_6 },
  323. };
  324. static struct adreno_perfcount_register gen7_perfcounters_rbbm[] = {
  325. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_RBBM_0_LO,
  326. GEN7_RBBM_PERFCTR_RBBM_0_HI, -1, GEN7_RBBM_PERFCTR_RBBM_SEL_0 },
  327. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_RBBM_1_LO,
  328. GEN7_RBBM_PERFCTR_RBBM_1_HI, -1, GEN7_RBBM_PERFCTR_RBBM_SEL_1 },
  329. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_RBBM_2_LO,
  330. GEN7_RBBM_PERFCTR_RBBM_2_HI, -1, GEN7_RBBM_PERFCTR_RBBM_SEL_2 },
  331. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_RBBM_3_LO,
  332. GEN7_RBBM_PERFCTR_RBBM_3_HI, -1, GEN7_RBBM_PERFCTR_RBBM_SEL_3 },
  333. };
  334. static struct adreno_perfcount_register gen7_perfcounters_pc[] = {
  335. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_PC_0_LO,
  336. GEN7_RBBM_PERFCTR_PC_0_HI, -1, GEN7_PC_PERFCTR_PC_SEL_0 },
  337. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_PC_1_LO,
  338. GEN7_RBBM_PERFCTR_PC_1_HI, -1, GEN7_PC_PERFCTR_PC_SEL_1 },
  339. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_PC_2_LO,
  340. GEN7_RBBM_PERFCTR_PC_2_HI, -1, GEN7_PC_PERFCTR_PC_SEL_2 },
  341. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_PC_3_LO,
  342. GEN7_RBBM_PERFCTR_PC_3_HI, -1, GEN7_PC_PERFCTR_PC_SEL_3 },
  343. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_PC_4_LO,
  344. GEN7_RBBM_PERFCTR_PC_4_HI, -1, GEN7_PC_PERFCTR_PC_SEL_4 },
  345. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_PC_5_LO,
  346. GEN7_RBBM_PERFCTR_PC_5_HI, -1, GEN7_PC_PERFCTR_PC_SEL_5 },
  347. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_PC_6_LO,
  348. GEN7_RBBM_PERFCTR_PC_6_HI, -1, GEN7_PC_PERFCTR_PC_SEL_6 },
  349. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_PC_7_LO,
  350. GEN7_RBBM_PERFCTR_PC_7_HI, -1, GEN7_PC_PERFCTR_PC_SEL_7 },
  351. };
  352. static struct adreno_perfcount_register gen7_perfcounters_bv_pc[] = {
  353. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_PC_0_LO,
  354. GEN7_RBBM_PERFCTR_BV_PC_0_HI, -1, GEN7_PC_PERFCTR_PC_SEL_8 },
  355. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_PC_1_LO,
  356. GEN7_RBBM_PERFCTR_BV_PC_1_HI, -1, GEN7_PC_PERFCTR_PC_SEL_9 },
  357. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_PC_2_LO,
  358. GEN7_RBBM_PERFCTR_BV_PC_2_HI, -1, GEN7_PC_PERFCTR_PC_SEL_10 },
  359. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_PC_3_LO,
  360. GEN7_RBBM_PERFCTR_BV_PC_3_HI, -1, GEN7_PC_PERFCTR_PC_SEL_11 },
  361. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_PC_4_LO,
  362. GEN7_RBBM_PERFCTR_BV_PC_4_HI, -1, GEN7_PC_PERFCTR_PC_SEL_12 },
  363. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_PC_5_LO,
  364. GEN7_RBBM_PERFCTR_BV_PC_5_HI, -1, GEN7_PC_PERFCTR_PC_SEL_13 },
  365. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_PC_6_LO,
  366. GEN7_RBBM_PERFCTR_BV_PC_6_HI, -1, GEN7_PC_PERFCTR_PC_SEL_14 },
  367. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_PC_7_LO,
  368. GEN7_RBBM_PERFCTR_BV_PC_7_HI, -1, GEN7_PC_PERFCTR_PC_SEL_15 },
  369. };
  370. static struct adreno_perfcount_register gen7_perfcounters_vfd[] = {
  371. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_VFD_0_LO,
  372. GEN7_RBBM_PERFCTR_VFD_0_HI, -1, GEN7_VFD_PERFCTR_VFD_SEL_0 },
  373. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_VFD_1_LO,
  374. GEN7_RBBM_PERFCTR_VFD_1_HI, -1, GEN7_VFD_PERFCTR_VFD_SEL_1 },
  375. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_VFD_2_LO,
  376. GEN7_RBBM_PERFCTR_VFD_2_HI, -1, GEN7_VFD_PERFCTR_VFD_SEL_2 },
  377. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_VFD_3_LO,
  378. GEN7_RBBM_PERFCTR_VFD_3_HI, -1, GEN7_VFD_PERFCTR_VFD_SEL_3 },
  379. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_VFD_4_LO,
  380. GEN7_RBBM_PERFCTR_VFD_4_HI, -1, GEN7_VFD_PERFCTR_VFD_SEL_4 },
  381. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_VFD_5_LO,
  382. GEN7_RBBM_PERFCTR_VFD_5_HI, -1, GEN7_VFD_PERFCTR_VFD_SEL_5 },
  383. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_VFD_6_LO,
  384. GEN7_RBBM_PERFCTR_VFD_6_HI, -1, GEN7_VFD_PERFCTR_VFD_SEL_6 },
  385. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_VFD_7_LO,
  386. GEN7_RBBM_PERFCTR_VFD_7_HI, -1, GEN7_VFD_PERFCTR_VFD_SEL_7 },
  387. };
  388. static struct adreno_perfcount_register gen7_perfcounters_bv_vfd[] = {
  389. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_VFD_0_LO,
  390. GEN7_RBBM_PERFCTR_BV_VFD_0_HI, -1, GEN7_VFD_PERFCTR_VFD_SEL_8 },
  391. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_VFD_1_LO,
  392. GEN7_RBBM_PERFCTR_BV_VFD_1_HI, -1, GEN7_VFD_PERFCTR_VFD_SEL_9 },
  393. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_VFD_2_LO,
  394. GEN7_RBBM_PERFCTR_BV_VFD_2_HI, -1, GEN7_VFD_PERFCTR_VFD_SEL_10 },
  395. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_VFD_3_LO,
  396. GEN7_RBBM_PERFCTR_BV_VFD_3_HI, -1, GEN7_VFD_PERFCTR_VFD_SEL_11 },
  397. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_VFD_4_LO,
  398. GEN7_RBBM_PERFCTR_BV_VFD_4_HI, -1, GEN7_VFD_PERFCTR_VFD_SEL_12 },
  399. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_VFD_5_LO,
  400. GEN7_RBBM_PERFCTR_BV_VFD_5_HI, -1, GEN7_VFD_PERFCTR_VFD_SEL_13 },
  401. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_VFD_6_LO,
  402. GEN7_RBBM_PERFCTR_BV_VFD_6_HI, -1, GEN7_VFD_PERFCTR_VFD_SEL_14 },
  403. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_VFD_7_LO,
  404. GEN7_RBBM_PERFCTR_BV_VFD_7_HI, -1, GEN7_VFD_PERFCTR_VFD_SEL_15 },
  405. };
  406. static struct adreno_perfcount_register gen7_perfcounters_hlsq[] = {
  407. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_HLSQ_0_LO,
  408. GEN7_RBBM_PERFCTR_HLSQ_0_HI, -1, GEN7_SP_PERFCTR_HLSQ_SEL_0 },
  409. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_HLSQ_1_LO,
  410. GEN7_RBBM_PERFCTR_HLSQ_1_HI, -1, GEN7_SP_PERFCTR_HLSQ_SEL_1 },
  411. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_HLSQ_2_LO,
  412. GEN7_RBBM_PERFCTR_HLSQ_2_HI, -1, GEN7_SP_PERFCTR_HLSQ_SEL_2 },
  413. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_HLSQ_3_LO,
  414. GEN7_RBBM_PERFCTR_HLSQ_3_HI, -1, GEN7_SP_PERFCTR_HLSQ_SEL_3 },
  415. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_HLSQ_4_LO,
  416. GEN7_RBBM_PERFCTR_HLSQ_4_HI, -1, GEN7_SP_PERFCTR_HLSQ_SEL_4 },
  417. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_HLSQ_5_LO,
  418. GEN7_RBBM_PERFCTR_HLSQ_5_HI, -1, GEN7_SP_PERFCTR_HLSQ_SEL_5 },
  419. };
  420. static struct adreno_perfcount_register gen7_perfcounters_bv_hlsq[] = {
  421. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_HLSQ_0_LO,
  422. GEN7_RBBM_PERFCTR2_HLSQ_0_HI, -1, GEN7_SP_PERFCTR_HLSQ_SEL_0 },
  423. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_HLSQ_1_LO,
  424. GEN7_RBBM_PERFCTR2_HLSQ_1_HI, -1, GEN7_SP_PERFCTR_HLSQ_SEL_1 },
  425. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_HLSQ_2_LO,
  426. GEN7_RBBM_PERFCTR2_HLSQ_2_HI, -1, GEN7_SP_PERFCTR_HLSQ_SEL_2 },
  427. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_HLSQ_3_LO,
  428. GEN7_RBBM_PERFCTR2_HLSQ_3_HI, -1, GEN7_SP_PERFCTR_HLSQ_SEL_3 },
  429. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_HLSQ_4_LO,
  430. GEN7_RBBM_PERFCTR2_HLSQ_4_HI, -1, GEN7_SP_PERFCTR_HLSQ_SEL_4 },
  431. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_HLSQ_5_LO,
  432. GEN7_RBBM_PERFCTR2_HLSQ_5_HI, -1, GEN7_SP_PERFCTR_HLSQ_SEL_5 },
  433. };
  434. static struct adreno_perfcount_register gen7_perfcounters_vpc[] = {
  435. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_VPC_0_LO,
  436. GEN7_RBBM_PERFCTR_VPC_0_HI, -1, GEN7_VPC_PERFCTR_VPC_SEL_0 },
  437. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_VPC_1_LO,
  438. GEN7_RBBM_PERFCTR_VPC_1_HI, -1, GEN7_VPC_PERFCTR_VPC_SEL_1 },
  439. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_VPC_2_LO,
  440. GEN7_RBBM_PERFCTR_VPC_2_HI, -1, GEN7_VPC_PERFCTR_VPC_SEL_2 },
  441. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_VPC_3_LO,
  442. GEN7_RBBM_PERFCTR_VPC_3_HI, -1, GEN7_VPC_PERFCTR_VPC_SEL_3 },
  443. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_VPC_4_LO,
  444. GEN7_RBBM_PERFCTR_VPC_4_HI, -1, GEN7_VPC_PERFCTR_VPC_SEL_4 },
  445. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_VPC_5_LO,
  446. GEN7_RBBM_PERFCTR_VPC_5_HI, -1, GEN7_VPC_PERFCTR_VPC_SEL_5 },
  447. };
  448. static struct adreno_perfcount_register gen7_perfcounters_bv_vpc[] = {
  449. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_VPC_0_LO,
  450. GEN7_RBBM_PERFCTR_BV_VPC_0_HI, -1, GEN7_VPC_PERFCTR_VPC_SEL_6 },
  451. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_VPC_1_LO,
  452. GEN7_RBBM_PERFCTR_BV_VPC_1_HI, -1, GEN7_VPC_PERFCTR_VPC_SEL_7 },
  453. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_VPC_2_LO,
  454. GEN7_RBBM_PERFCTR_BV_VPC_2_HI, -1, GEN7_VPC_PERFCTR_VPC_SEL_8 },
  455. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_VPC_3_LO,
  456. GEN7_RBBM_PERFCTR_BV_VPC_3_HI, -1, GEN7_VPC_PERFCTR_VPC_SEL_9 },
  457. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_VPC_4_LO,
  458. GEN7_RBBM_PERFCTR_BV_VPC_4_HI, -1, GEN7_VPC_PERFCTR_VPC_SEL_10 },
  459. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_VPC_5_LO,
  460. GEN7_RBBM_PERFCTR_BV_VPC_5_HI, -1, GEN7_VPC_PERFCTR_VPC_SEL_11 },
  461. };
  462. static struct adreno_perfcount_register gen7_perfcounters_ccu[] = {
  463. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CCU_0_LO,
  464. GEN7_RBBM_PERFCTR_CCU_0_HI, -1, GEN7_RB_PERFCTR_CCU_SEL_0 },
  465. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CCU_1_LO,
  466. GEN7_RBBM_PERFCTR_CCU_1_HI, -1, GEN7_RB_PERFCTR_CCU_SEL_1 },
  467. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CCU_2_LO,
  468. GEN7_RBBM_PERFCTR_CCU_2_HI, -1, GEN7_RB_PERFCTR_CCU_SEL_2 },
  469. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CCU_3_LO,
  470. GEN7_RBBM_PERFCTR_CCU_3_HI, -1, GEN7_RB_PERFCTR_CCU_SEL_3 },
  471. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CCU_4_LO,
  472. GEN7_RBBM_PERFCTR_CCU_4_HI, -1, GEN7_RB_PERFCTR_CCU_SEL_4 },
  473. };
  474. static struct adreno_perfcount_register gen7_perfcounters_tse[] = {
  475. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_TSE_0_LO,
  476. GEN7_RBBM_PERFCTR_TSE_0_HI, -1, GEN7_GRAS_PERFCTR_TSE_SEL_0 },
  477. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_TSE_1_LO,
  478. GEN7_RBBM_PERFCTR_TSE_1_HI, -1, GEN7_GRAS_PERFCTR_TSE_SEL_1 },
  479. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_TSE_2_LO,
  480. GEN7_RBBM_PERFCTR_TSE_2_HI, -1, GEN7_GRAS_PERFCTR_TSE_SEL_2 },
  481. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_TSE_3_LO,
  482. GEN7_RBBM_PERFCTR_TSE_3_HI, -1, GEN7_GRAS_PERFCTR_TSE_SEL_3 },
  483. };
  484. static struct adreno_perfcount_register gen7_perfcounters_bv_tse[] = {
  485. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_TSE_0_LO,
  486. GEN7_RBBM_PERFCTR_BV_TSE_0_HI, -1, GEN7_GRAS_PERFCTR_TSE_SEL_0 },
  487. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_TSE_1_LO,
  488. GEN7_RBBM_PERFCTR_BV_TSE_1_HI, -1, GEN7_GRAS_PERFCTR_TSE_SEL_1 },
  489. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_TSE_2_LO,
  490. GEN7_RBBM_PERFCTR_BV_TSE_2_HI, -1, GEN7_GRAS_PERFCTR_TSE_SEL_2 },
  491. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_TSE_3_LO,
  492. GEN7_RBBM_PERFCTR_BV_TSE_3_HI, -1, GEN7_GRAS_PERFCTR_TSE_SEL_3 },
  493. };
  494. static struct adreno_perfcount_register gen7_perfcounters_ras[] = {
  495. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_RAS_0_LO,
  496. GEN7_RBBM_PERFCTR_RAS_0_HI, -1, GEN7_GRAS_PERFCTR_RAS_SEL_0 },
  497. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_RAS_1_LO,
  498. GEN7_RBBM_PERFCTR_RAS_1_HI, -1, GEN7_GRAS_PERFCTR_RAS_SEL_1 },
  499. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_RAS_2_LO,
  500. GEN7_RBBM_PERFCTR_RAS_2_HI, -1, GEN7_GRAS_PERFCTR_RAS_SEL_2 },
  501. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_RAS_3_LO,
  502. GEN7_RBBM_PERFCTR_RAS_3_HI, -1, GEN7_GRAS_PERFCTR_RAS_SEL_3 },
  503. };
  504. static struct adreno_perfcount_register gen7_perfcounters_bv_ras[] = {
  505. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_RAS_0_LO,
  506. GEN7_RBBM_PERFCTR_BV_RAS_0_HI, -1, GEN7_GRAS_PERFCTR_RAS_SEL_0 },
  507. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_RAS_1_LO,
  508. GEN7_RBBM_PERFCTR_BV_RAS_1_HI, -1, GEN7_GRAS_PERFCTR_RAS_SEL_1 },
  509. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_RAS_2_LO,
  510. GEN7_RBBM_PERFCTR_BV_RAS_2_HI, -1, GEN7_GRAS_PERFCTR_RAS_SEL_2 },
  511. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_RAS_3_LO,
  512. GEN7_RBBM_PERFCTR_BV_RAS_3_HI, -1, GEN7_GRAS_PERFCTR_RAS_SEL_3 },
  513. };
  514. static struct adreno_perfcount_register gen7_perfcounters_uche[] = {
  515. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_0_LO,
  516. GEN7_RBBM_PERFCTR_UCHE_0_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_0 },
  517. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_1_LO,
  518. GEN7_RBBM_PERFCTR_UCHE_1_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_1 },
  519. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_2_LO,
  520. GEN7_RBBM_PERFCTR_UCHE_2_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_2 },
  521. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_3_LO,
  522. GEN7_RBBM_PERFCTR_UCHE_3_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_3 },
  523. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_4_LO,
  524. GEN7_RBBM_PERFCTR_UCHE_4_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_4 },
  525. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_5_LO,
  526. GEN7_RBBM_PERFCTR_UCHE_5_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_5 },
  527. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_6_LO,
  528. GEN7_RBBM_PERFCTR_UCHE_6_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_6 },
  529. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_7_LO,
  530. GEN7_RBBM_PERFCTR_UCHE_7_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_7 },
  531. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_8_LO,
  532. GEN7_RBBM_PERFCTR_UCHE_8_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_8 },
  533. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_9_LO,
  534. GEN7_RBBM_PERFCTR_UCHE_9_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_9 },
  535. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_10_LO,
  536. GEN7_RBBM_PERFCTR_UCHE_10_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_10 },
  537. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_11_LO,
  538. GEN7_RBBM_PERFCTR_UCHE_11_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_11 },
  539. };
  540. static struct adreno_perfcount_register gen7_perfcounters_gen7_2_0_uche[] = {
  541. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_0_LO,
  542. GEN7_RBBM_PERFCTR_UCHE_0_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_0 },
  543. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_1_LO,
  544. GEN7_RBBM_PERFCTR_UCHE_1_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_1 },
  545. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_2_LO,
  546. GEN7_RBBM_PERFCTR_UCHE_2_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_2 },
  547. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_3_LO,
  548. GEN7_RBBM_PERFCTR_UCHE_3_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_3 },
  549. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_4_LO,
  550. GEN7_RBBM_PERFCTR_UCHE_4_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_4 },
  551. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_5_LO,
  552. GEN7_RBBM_PERFCTR_UCHE_5_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_5 },
  553. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_6_LO,
  554. GEN7_RBBM_PERFCTR_UCHE_6_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_6 },
  555. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_7_LO,
  556. GEN7_RBBM_PERFCTR_UCHE_7_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_7 },
  557. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_8_LO,
  558. GEN7_RBBM_PERFCTR_UCHE_8_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_8 },
  559. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_9_LO,
  560. GEN7_RBBM_PERFCTR_UCHE_9_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_9 },
  561. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_10_LO,
  562. GEN7_RBBM_PERFCTR_UCHE_10_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_10 },
  563. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_11_LO,
  564. GEN7_RBBM_PERFCTR_UCHE_11_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_11 },
  565. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_12_LO,
  566. GEN7_RBBM_PERFCTR_UCHE_12_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_12 },
  567. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_13_LO,
  568. GEN7_RBBM_PERFCTR_UCHE_13_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_13 },
  569. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_14_LO,
  570. GEN7_RBBM_PERFCTR_UCHE_14_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_14 },
  571. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_15_LO,
  572. GEN7_RBBM_PERFCTR_UCHE_15_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_15 },
  573. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_16_LO,
  574. GEN7_RBBM_PERFCTR_UCHE_16_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_16 },
  575. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_17_LO,
  576. GEN7_RBBM_PERFCTR_UCHE_17_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_17 },
  577. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_18_LO,
  578. GEN7_RBBM_PERFCTR_UCHE_18_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_18 },
  579. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_19_LO,
  580. GEN7_RBBM_PERFCTR_UCHE_19_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_19 },
  581. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_20_LO,
  582. GEN7_RBBM_PERFCTR_UCHE_20_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_20 },
  583. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_21_LO,
  584. GEN7_RBBM_PERFCTR_UCHE_21_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_21 },
  585. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_22_LO,
  586. GEN7_RBBM_PERFCTR_UCHE_22_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_22 },
  587. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_23_LO,
  588. GEN7_RBBM_PERFCTR_UCHE_23_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_23 },
  589. };
  590. static struct adreno_perfcount_register gen7_perfcounters_gen7_9_0_uche[] = {
  591. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_0_LO,
  592. GEN7_RBBM_PERFCTR_UCHE_0_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_0 },
  593. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_1_LO,
  594. GEN7_RBBM_PERFCTR_UCHE_1_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_1 },
  595. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_2_LO,
  596. GEN7_RBBM_PERFCTR_UCHE_2_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_2 },
  597. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_3_LO,
  598. GEN7_RBBM_PERFCTR_UCHE_3_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_3 },
  599. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_4_LO,
  600. GEN7_RBBM_PERFCTR_UCHE_4_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_4 },
  601. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_5_LO,
  602. GEN7_RBBM_PERFCTR_UCHE_5_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_5 },
  603. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_6_LO,
  604. GEN7_RBBM_PERFCTR_UCHE_6_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_6 },
  605. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_7_LO,
  606. GEN7_RBBM_PERFCTR_UCHE_7_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_7 },
  607. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_8_LO,
  608. GEN7_RBBM_PERFCTR_UCHE_8_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_8 },
  609. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_9_LO,
  610. GEN7_RBBM_PERFCTR_UCHE_9_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_9 },
  611. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_10_LO,
  612. GEN7_RBBM_PERFCTR_UCHE_10_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_10 },
  613. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_11_LO,
  614. GEN7_RBBM_PERFCTR_UCHE_11_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_11 },
  615. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_12_LO,
  616. GEN7_RBBM_PERFCTR_UCHE_12_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_2_0 },
  617. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_13_LO,
  618. GEN7_RBBM_PERFCTR_UCHE_13_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_2_1 },
  619. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_14_LO,
  620. GEN7_RBBM_PERFCTR_UCHE_14_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_2_2 },
  621. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_15_LO,
  622. GEN7_RBBM_PERFCTR_UCHE_15_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_2_3 },
  623. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_16_LO,
  624. GEN7_RBBM_PERFCTR_UCHE_16_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_2_4 },
  625. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_17_LO,
  626. GEN7_RBBM_PERFCTR_UCHE_17_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_2_5 },
  627. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_18_LO,
  628. GEN7_RBBM_PERFCTR_UCHE_18_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_2_6 },
  629. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_19_LO,
  630. GEN7_RBBM_PERFCTR_UCHE_19_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_2_7 },
  631. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_20_LO,
  632. GEN7_RBBM_PERFCTR_UCHE_20_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_2_8 },
  633. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_21_LO,
  634. GEN7_RBBM_PERFCTR_UCHE_21_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_2_9 },
  635. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_22_LO,
  636. GEN7_RBBM_PERFCTR_UCHE_22_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_2_10 },
  637. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UCHE_23_LO,
  638. GEN7_RBBM_PERFCTR_UCHE_23_HI, -1, GEN7_UCHE_PERFCTR_UCHE_SEL_2_11 },
  639. };
  640. static struct adreno_perfcount_register gen7_perfcounters_tp[] = {
  641. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_TP_0_LO,
  642. GEN7_RBBM_PERFCTR_TP_0_HI, -1, GEN7_TPL1_PERFCTR_TP_SEL_0 },
  643. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_TP_1_LO,
  644. GEN7_RBBM_PERFCTR_TP_1_HI, -1, GEN7_TPL1_PERFCTR_TP_SEL_1 },
  645. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_TP_2_LO,
  646. GEN7_RBBM_PERFCTR_TP_2_HI, -1, GEN7_TPL1_PERFCTR_TP_SEL_2 },
  647. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_TP_3_LO,
  648. GEN7_RBBM_PERFCTR_TP_3_HI, -1, GEN7_TPL1_PERFCTR_TP_SEL_3 },
  649. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_TP_4_LO,
  650. GEN7_RBBM_PERFCTR_TP_4_HI, -1, GEN7_TPL1_PERFCTR_TP_SEL_4 },
  651. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_TP_5_LO,
  652. GEN7_RBBM_PERFCTR_TP_5_HI, -1, GEN7_TPL1_PERFCTR_TP_SEL_5 },
  653. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_TP_6_LO,
  654. GEN7_RBBM_PERFCTR_TP_6_HI, -1, GEN7_TPL1_PERFCTR_TP_SEL_6 },
  655. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_TP_7_LO,
  656. GEN7_RBBM_PERFCTR_TP_7_HI, -1, GEN7_TPL1_PERFCTR_TP_SEL_7 },
  657. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_TP_8_LO,
  658. GEN7_RBBM_PERFCTR_TP_8_HI, -1, GEN7_TPL1_PERFCTR_TP_SEL_8 },
  659. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_TP_9_LO,
  660. GEN7_RBBM_PERFCTR_TP_9_HI, -1, GEN7_TPL1_PERFCTR_TP_SEL_9 },
  661. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_TP_10_LO,
  662. GEN7_RBBM_PERFCTR_TP_10_HI, -1, GEN7_TPL1_PERFCTR_TP_SEL_10 },
  663. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_TP_11_LO,
  664. GEN7_RBBM_PERFCTR_TP_11_HI, -1, GEN7_TPL1_PERFCTR_TP_SEL_11 },
  665. };
  666. static struct adreno_perfcount_register gen7_perfcounters_bv_tp[] = {
  667. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_TP_0_LO,
  668. GEN7_RBBM_PERFCTR2_TP_0_HI, -1, GEN7_TPL1_PERFCTR_TP_SEL_12 },
  669. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_TP_1_LO,
  670. GEN7_RBBM_PERFCTR2_TP_1_HI, -1, GEN7_TPL1_PERFCTR_TP_SEL_13 },
  671. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_TP_2_LO,
  672. GEN7_RBBM_PERFCTR2_TP_2_HI, -1, GEN7_TPL1_PERFCTR_TP_SEL_14 },
  673. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_TP_3_LO,
  674. GEN7_RBBM_PERFCTR2_TP_3_HI, -1, GEN7_TPL1_PERFCTR_TP_SEL_15 },
  675. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_TP_4_LO,
  676. GEN7_RBBM_PERFCTR2_TP_4_HI, -1, GEN7_TPL1_PERFCTR_TP_SEL_16 },
  677. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_TP_5_LO,
  678. GEN7_RBBM_PERFCTR2_TP_5_HI, -1, GEN7_TPL1_PERFCTR_TP_SEL_17 },
  679. };
  680. static struct adreno_perfcount_register gen7_perfcounters_sp[] = {
  681. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_0_LO,
  682. GEN7_RBBM_PERFCTR_SP_0_HI, -1, GEN7_SP_PERFCTR_SP_SEL_0 },
  683. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_1_LO,
  684. GEN7_RBBM_PERFCTR_SP_1_HI, -1, GEN7_SP_PERFCTR_SP_SEL_1 },
  685. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_2_LO,
  686. GEN7_RBBM_PERFCTR_SP_2_HI, -1, GEN7_SP_PERFCTR_SP_SEL_2 },
  687. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_3_LO,
  688. GEN7_RBBM_PERFCTR_SP_3_HI, -1, GEN7_SP_PERFCTR_SP_SEL_3 },
  689. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_4_LO,
  690. GEN7_RBBM_PERFCTR_SP_4_HI, -1, GEN7_SP_PERFCTR_SP_SEL_4 },
  691. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_5_LO,
  692. GEN7_RBBM_PERFCTR_SP_5_HI, -1, GEN7_SP_PERFCTR_SP_SEL_5 },
  693. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_6_LO,
  694. GEN7_RBBM_PERFCTR_SP_6_HI, -1, GEN7_SP_PERFCTR_SP_SEL_6 },
  695. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_7_LO,
  696. GEN7_RBBM_PERFCTR_SP_7_HI, -1, GEN7_SP_PERFCTR_SP_SEL_7 },
  697. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_8_LO,
  698. GEN7_RBBM_PERFCTR_SP_8_HI, -1, GEN7_SP_PERFCTR_SP_SEL_8 },
  699. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_9_LO,
  700. GEN7_RBBM_PERFCTR_SP_9_HI, -1, GEN7_SP_PERFCTR_SP_SEL_9 },
  701. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_10_LO,
  702. GEN7_RBBM_PERFCTR_SP_10_HI, -1, GEN7_SP_PERFCTR_SP_SEL_10 },
  703. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_11_LO,
  704. GEN7_RBBM_PERFCTR_SP_11_HI, -1, GEN7_SP_PERFCTR_SP_SEL_11 },
  705. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_12_LO,
  706. GEN7_RBBM_PERFCTR_SP_12_HI, -1, GEN7_SP_PERFCTR_SP_SEL_12 },
  707. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_13_LO,
  708. GEN7_RBBM_PERFCTR_SP_13_HI, -1, GEN7_SP_PERFCTR_SP_SEL_13 },
  709. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_14_LO,
  710. GEN7_RBBM_PERFCTR_SP_14_HI, -1, GEN7_SP_PERFCTR_SP_SEL_14 },
  711. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_15_LO,
  712. GEN7_RBBM_PERFCTR_SP_15_HI, -1, GEN7_SP_PERFCTR_SP_SEL_15 },
  713. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_16_LO,
  714. GEN7_RBBM_PERFCTR_SP_16_HI, -1, GEN7_SP_PERFCTR_SP_SEL_16 },
  715. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_17_LO,
  716. GEN7_RBBM_PERFCTR_SP_17_HI, -1, GEN7_SP_PERFCTR_SP_SEL_17 },
  717. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_18_LO,
  718. GEN7_RBBM_PERFCTR_SP_18_HI, -1, GEN7_SP_PERFCTR_SP_SEL_18 },
  719. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_19_LO,
  720. GEN7_RBBM_PERFCTR_SP_19_HI, -1, GEN7_SP_PERFCTR_SP_SEL_19 },
  721. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_20_LO,
  722. GEN7_RBBM_PERFCTR_SP_20_HI, -1, GEN7_SP_PERFCTR_SP_SEL_20 },
  723. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_21_LO,
  724. GEN7_RBBM_PERFCTR_SP_21_HI, -1, GEN7_SP_PERFCTR_SP_SEL_21 },
  725. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_22_LO,
  726. GEN7_RBBM_PERFCTR_SP_22_HI, -1, GEN7_SP_PERFCTR_SP_SEL_22 },
  727. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_SP_23_LO,
  728. GEN7_RBBM_PERFCTR_SP_23_HI, -1, GEN7_SP_PERFCTR_SP_SEL_23 },
  729. };
  730. static struct adreno_perfcount_register gen7_perfcounters_bv_sp[] = {
  731. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_SP_0_LO,
  732. GEN7_RBBM_PERFCTR2_SP_0_HI, -1, GEN7_SP_PERFCTR_SP_SEL_24 },
  733. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_SP_1_LO,
  734. GEN7_RBBM_PERFCTR2_SP_1_HI, -1, GEN7_SP_PERFCTR_SP_SEL_25 },
  735. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_SP_2_LO,
  736. GEN7_RBBM_PERFCTR2_SP_2_HI, -1, GEN7_SP_PERFCTR_SP_SEL_26 },
  737. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_SP_3_LO,
  738. GEN7_RBBM_PERFCTR2_SP_3_HI, -1, GEN7_SP_PERFCTR_SP_SEL_27 },
  739. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_SP_4_LO,
  740. GEN7_RBBM_PERFCTR2_SP_4_HI, -1, GEN7_SP_PERFCTR_SP_SEL_28 },
  741. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_SP_5_LO,
  742. GEN7_RBBM_PERFCTR2_SP_5_HI, -1, GEN7_SP_PERFCTR_SP_SEL_29 },
  743. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_SP_6_LO,
  744. GEN7_RBBM_PERFCTR2_SP_6_HI, -1, GEN7_SP_PERFCTR_SP_SEL_30 },
  745. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_SP_7_LO,
  746. GEN7_RBBM_PERFCTR2_SP_7_HI, -1, GEN7_SP_PERFCTR_SP_SEL_31 },
  747. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_SP_8_LO,
  748. GEN7_RBBM_PERFCTR2_SP_8_HI, -1, GEN7_SP_PERFCTR_SP_SEL_32 },
  749. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_SP_9_LO,
  750. GEN7_RBBM_PERFCTR2_SP_9_HI, -1, GEN7_SP_PERFCTR_SP_SEL_33 },
  751. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_SP_10_LO,
  752. GEN7_RBBM_PERFCTR2_SP_10_HI, -1, GEN7_SP_PERFCTR_SP_SEL_34 },
  753. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_SP_11_LO,
  754. GEN7_RBBM_PERFCTR2_SP_11_HI, -1, GEN7_SP_PERFCTR_SP_SEL_35 },
  755. };
  756. static struct adreno_perfcount_register gen7_perfcounters_rb[] = {
  757. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_RB_0_LO,
  758. GEN7_RBBM_PERFCTR_RB_0_HI, -1, GEN7_RB_PERFCTR_RB_SEL_0 },
  759. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_RB_1_LO,
  760. GEN7_RBBM_PERFCTR_RB_1_HI, -1, GEN7_RB_PERFCTR_RB_SEL_1 },
  761. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_RB_2_LO,
  762. GEN7_RBBM_PERFCTR_RB_2_HI, -1, GEN7_RB_PERFCTR_RB_SEL_2 },
  763. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_RB_3_LO,
  764. GEN7_RBBM_PERFCTR_RB_3_HI, -1, GEN7_RB_PERFCTR_RB_SEL_3 },
  765. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_RB_4_LO,
  766. GEN7_RBBM_PERFCTR_RB_4_HI, -1, GEN7_RB_PERFCTR_RB_SEL_4 },
  767. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_RB_5_LO,
  768. GEN7_RBBM_PERFCTR_RB_5_HI, -1, GEN7_RB_PERFCTR_RB_SEL_5 },
  769. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_RB_6_LO,
  770. GEN7_RBBM_PERFCTR_RB_6_HI, -1, GEN7_RB_PERFCTR_RB_SEL_6 },
  771. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_RB_7_LO,
  772. GEN7_RBBM_PERFCTR_RB_7_HI, -1, GEN7_RB_PERFCTR_RB_SEL_7 },
  773. };
  774. static struct adreno_perfcount_register gen7_perfcounters_vsc[] = {
  775. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_VSC_0_LO,
  776. GEN7_RBBM_PERFCTR_VSC_0_HI, -1, GEN7_VSC_PERFCTR_VSC_SEL_0 },
  777. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_VSC_1_LO,
  778. GEN7_RBBM_PERFCTR_VSC_1_HI, -1, GEN7_VSC_PERFCTR_VSC_SEL_1 },
  779. };
  780. static struct adreno_perfcount_register gen7_perfcounters_lrz[] = {
  781. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_LRZ_0_LO,
  782. GEN7_RBBM_PERFCTR_LRZ_0_HI, -1, GEN7_GRAS_PERFCTR_LRZ_SEL_0 },
  783. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_LRZ_1_LO,
  784. GEN7_RBBM_PERFCTR_LRZ_1_HI, -1, GEN7_GRAS_PERFCTR_LRZ_SEL_1 },
  785. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_LRZ_2_LO,
  786. GEN7_RBBM_PERFCTR_LRZ_2_HI, -1, GEN7_GRAS_PERFCTR_LRZ_SEL_2 },
  787. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_LRZ_3_LO,
  788. GEN7_RBBM_PERFCTR_LRZ_3_HI, -1, GEN7_GRAS_PERFCTR_LRZ_SEL_3 },
  789. };
  790. static struct adreno_perfcount_register gen7_perfcounters_bv_lrz[] = {
  791. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_LRZ_0_LO,
  792. GEN7_RBBM_PERFCTR_BV_LRZ_0_HI, -1, GEN7_GRAS_PERFCTR_LRZ_SEL_0 },
  793. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_LRZ_1_LO,
  794. GEN7_RBBM_PERFCTR_BV_LRZ_1_HI, -1, GEN7_GRAS_PERFCTR_LRZ_SEL_1 },
  795. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_LRZ_2_LO,
  796. GEN7_RBBM_PERFCTR_BV_LRZ_2_HI, -1, GEN7_GRAS_PERFCTR_LRZ_SEL_2 },
  797. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_BV_LRZ_3_LO,
  798. GEN7_RBBM_PERFCTR_BV_LRZ_3_HI, -1, GEN7_GRAS_PERFCTR_LRZ_SEL_3 },
  799. };
  800. static struct adreno_perfcount_register gen7_perfcounters_cmp[] = {
  801. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CMP_0_LO,
  802. GEN7_RBBM_PERFCTR_CMP_0_HI, -1, GEN7_RB_PERFCTR_CMP_SEL_0 },
  803. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CMP_1_LO,
  804. GEN7_RBBM_PERFCTR_CMP_1_HI, -1, GEN7_RB_PERFCTR_CMP_SEL_1 },
  805. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CMP_2_LO,
  806. GEN7_RBBM_PERFCTR_CMP_2_HI, -1, GEN7_RB_PERFCTR_CMP_SEL_2 },
  807. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_CMP_3_LO,
  808. GEN7_RBBM_PERFCTR_CMP_3_HI, -1, GEN7_RB_PERFCTR_CMP_SEL_3 },
  809. };
  810. static struct adreno_perfcount_register gen7_perfcounters_ufc[] = {
  811. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UFC_0_LO,
  812. GEN7_RBBM_PERFCTR_UFC_0_HI, -1, GEN7_RB_PERFCTR_UFC_SEL_0 },
  813. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UFC_1_LO,
  814. GEN7_RBBM_PERFCTR_UFC_1_HI, -1, GEN7_RB_PERFCTR_UFC_SEL_1 },
  815. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UFC_2_LO,
  816. GEN7_RBBM_PERFCTR_UFC_2_HI, -1, GEN7_RB_PERFCTR_UFC_SEL_2 },
  817. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR_UFC_3_LO,
  818. GEN7_RBBM_PERFCTR_UFC_3_HI, -1, GEN7_RB_PERFCTR_UFC_SEL_3 },
  819. };
  820. static struct adreno_perfcount_register gen7_perfcounters_bv_ufc[] = {
  821. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_UFC_0_LO,
  822. GEN7_RBBM_PERFCTR2_UFC_0_HI, -1, GEN7_RB_PERFCTR_UFC_SEL_4 },
  823. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_RBBM_PERFCTR2_UFC_1_LO,
  824. GEN7_RBBM_PERFCTR2_UFC_1_HI, -1, GEN7_RB_PERFCTR_UFC_SEL_5 },
  825. };
  826. static struct adreno_perfcount_register gen7_perfcounters_gbif[] = {
  827. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_GBIF_PERF_CNT_LOW0,
  828. GEN7_GBIF_PERF_CNT_HIGH0, -1, GEN7_GBIF_PERF_CNT_SEL },
  829. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_GBIF_PERF_CNT_LOW1,
  830. GEN7_GBIF_PERF_CNT_HIGH1, -1, GEN7_GBIF_PERF_CNT_SEL },
  831. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_GBIF_PERF_CNT_LOW2,
  832. GEN7_GBIF_PERF_CNT_HIGH2, -1, GEN7_GBIF_PERF_CNT_SEL },
  833. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_GBIF_PERF_CNT_LOW3,
  834. GEN7_GBIF_PERF_CNT_HIGH3, -1, GEN7_GBIF_PERF_CNT_SEL },
  835. };
  836. static struct adreno_perfcount_register gen7_perfcounters_gbif_pwr[] = {
  837. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_GBIF_PWR_CNT_LOW0,
  838. GEN7_GBIF_PWR_CNT_HIGH0, -1, GEN7_GBIF_PERF_PWR_CNT_SEL },
  839. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_GBIF_PWR_CNT_LOW1,
  840. GEN7_GBIF_PWR_CNT_HIGH1, -1, GEN7_GBIF_PERF_PWR_CNT_SEL },
  841. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_GBIF_PWR_CNT_LOW2,
  842. GEN7_GBIF_PWR_CNT_HIGH2, -1, GEN7_GBIF_PERF_PWR_CNT_SEL },
  843. };
  844. #define GMU_COUNTER(lo, hi, sel) \
  845. { .countable = KGSL_PERFCOUNTER_NOT_USED, \
  846. .offset = lo, .offset_hi = hi, .select = sel }
  847. #define GMU_COUNTER_RESERVED(lo, hi, sel) \
  848. { .countable = KGSL_PERFCOUNTER_BROKEN, \
  849. .offset = lo, .offset_hi = hi, .select = sel }
  850. static struct adreno_perfcount_register gen7_perfcounters_gmu_xoclk[] = {
  851. /*
  852. * COUNTER_XOCLK_0 and COUNTER_XOCLK_4 are used for the GPU
  853. * busy and ifpc count. Mark them as reserved to ensure they
  854. * are not re-used.
  855. */
  856. GMU_COUNTER_RESERVED(GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_0_L,
  857. GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_0_H,
  858. GEN7_GMU_CX_GMU_POWER_COUNTER_SELECT_0),
  859. GMU_COUNTER(GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_1_L,
  860. GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_1_H,
  861. GEN7_GMU_CX_GMU_POWER_COUNTER_SELECT_0),
  862. GMU_COUNTER(GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_2_L,
  863. GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_2_H,
  864. GEN7_GMU_CX_GMU_POWER_COUNTER_SELECT_0),
  865. GMU_COUNTER(GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_3_L,
  866. GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_3_H,
  867. GEN7_GMU_CX_GMU_POWER_COUNTER_SELECT_0),
  868. GMU_COUNTER_RESERVED(GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_4_L,
  869. GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_4_H,
  870. GEN7_GMU_CX_GMU_POWER_COUNTER_SELECT_1),
  871. GMU_COUNTER(GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_5_L,
  872. GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_5_H,
  873. GEN7_GMU_CX_GMU_POWER_COUNTER_SELECT_1),
  874. GMU_COUNTER(GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_6_L,
  875. GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_6_H,
  876. GEN7_GMU_CX_GMU_POWER_COUNTER_SELECT_2),
  877. GMU_COUNTER(GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_7_L,
  878. GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_7_H,
  879. GEN7_GMU_CX_GMU_POWER_COUNTER_SELECT_2),
  880. GMU_COUNTER(GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_8_L,
  881. GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_8_H,
  882. GEN7_GMU_CX_GMU_POWER_COUNTER_SELECT_2),
  883. GMU_COUNTER(GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_9_L,
  884. GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_9_H,
  885. GEN7_GMU_CX_GMU_POWER_COUNTER_SELECT_2),
  886. GMU_COUNTER(GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_10_L,
  887. GEN7_GMU_CX_GMU_POWER_COUNTER_XOCLK_10_H,
  888. GEN7_GMU_CX_GMU_POWER_COUNTER_SELECT_3),
  889. };
  890. static struct adreno_perfcount_register gen7_perfcounters_gmu_gmuclk[] = {
  891. GMU_COUNTER(GEN7_GMU_CX_GMU_POWER_COUNTER_GMUCLK_0_L,
  892. GEN7_GMU_CX_GMU_POWER_COUNTER_GMUCLK_0_H,
  893. GEN7_GMU_CX_GMU_POWER_COUNTER_SELECT_1),
  894. GMU_COUNTER(GEN7_GMU_CX_GMU_POWER_COUNTER_GMUCLK_1_L,
  895. GEN7_GMU_CX_GMU_POWER_COUNTER_GMUCLK_1_H,
  896. GEN7_GMU_CX_GMU_POWER_COUNTER_SELECT_1),
  897. };
  898. static struct adreno_perfcount_register gen7_perfcounters_gmu_perf[] = {
  899. GMU_COUNTER(GEN7_GMU_CX_GMU_PERF_COUNTER_0_L,
  900. GEN7_GMU_CX_GMU_PERF_COUNTER_0_H,
  901. GEN7_GMU_CX_GMU_PERF_COUNTER_SELECT_0),
  902. GMU_COUNTER(GEN7_GMU_CX_GMU_PERF_COUNTER_1_L,
  903. GEN7_GMU_CX_GMU_PERF_COUNTER_1_H,
  904. GEN7_GMU_CX_GMU_PERF_COUNTER_SELECT_0),
  905. GMU_COUNTER(GEN7_GMU_CX_GMU_PERF_COUNTER_2_L,
  906. GEN7_GMU_CX_GMU_PERF_COUNTER_2_H,
  907. GEN7_GMU_CX_GMU_PERF_COUNTER_SELECT_0),
  908. GMU_COUNTER(GEN7_GMU_CX_GMU_PERF_COUNTER_3_L,
  909. GEN7_GMU_CX_GMU_PERF_COUNTER_3_H,
  910. GEN7_GMU_CX_GMU_PERF_COUNTER_SELECT_0),
  911. GMU_COUNTER(GEN7_GMU_CX_GMU_PERF_COUNTER_4_L,
  912. GEN7_GMU_CX_GMU_PERF_COUNTER_4_H,
  913. GEN7_GMU_CX_GMU_PERF_COUNTER_SELECT_1),
  914. GMU_COUNTER(GEN7_GMU_CX_GMU_PERF_COUNTER_5_L,
  915. GEN7_GMU_CX_GMU_PERF_COUNTER_5_H,
  916. GEN7_GMU_CX_GMU_PERF_COUNTER_SELECT_1),
  917. };
  918. static struct adreno_perfcount_register gen7_perfcounters_alwayson[] = {
  919. { KGSL_PERFCOUNTER_NOT_USED, 0, 0, GEN7_CP_ALWAYS_ON_COUNTER_LO,
  920. GEN7_CP_ALWAYS_ON_COUNTER_HI, -1 },
  921. };
  922. /*
  923. * ADRENO_PERFCOUNTER_GROUP_RESTORE flag is enabled by default
  924. * because most of the perfcounter groups need to be restored
  925. * as part of preemption and IFPC. Perfcounter groups that are
  926. * not restored as part of preemption and IFPC should be defined
  927. * using GEN7_PERFCOUNTER_GROUP_FLAGS macro
  928. */
  929. #define GEN7_PERFCOUNTER_GROUP_FLAGS(core, offset, name, flags, \
  930. enable, read) \
  931. [KGSL_PERFCOUNTER_GROUP_##offset] = { core##_perfcounters_##name, \
  932. ARRAY_SIZE(core##_perfcounters_##name), __stringify(name), flags, \
  933. enable, read }
  934. #define GEN7_PERFCOUNTER_GROUP(offset, name, enable, read) \
  935. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, offset, name, \
  936. ADRENO_PERFCOUNTER_GROUP_RESTORE, enable, read)
  937. #define GEN7_REGULAR_PERFCOUNTER_GROUP(offset, name) \
  938. GEN7_PERFCOUNTER_GROUP(offset, name, \
  939. gen7_counter_enable, gen7_counter_read)
  940. #define GEN7_BV_PERFCOUNTER_GROUP(offset, name, enable, read) \
  941. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, BV_##offset, bv_##name, \
  942. ADRENO_PERFCOUNTER_GROUP_RESTORE, enable, read)
  943. #define GEN7_BV_REGULAR_PERFCOUNTER_GROUP(offset, name) \
  944. GEN7_BV_PERFCOUNTER_GROUP(offset, name, \
  945. gen7_counter_enable, gen7_counter_read)
  946. static const struct adreno_perfcount_group gen7_hwsched_perfcounter_groups
  947. [KGSL_PERFCOUNTER_GROUP_MAX] = {
  948. GEN7_REGULAR_PERFCOUNTER_GROUP(CP, cp),
  949. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, RBBM, rbbm, 0,
  950. gen7_counter_enable, gen7_counter_read),
  951. GEN7_PERFCOUNTER_GROUP(PC, pc, gen7_counter_br_enable, gen7_counter_read),
  952. GEN7_PERFCOUNTER_GROUP(VFD, vfd, gen7_hwsched_counter_enable, gen7_counter_read),
  953. GEN7_PERFCOUNTER_GROUP(HLSQ, hlsq, gen7_counter_br_enable, gen7_counter_read),
  954. GEN7_PERFCOUNTER_GROUP(VPC, vpc, gen7_counter_br_enable, gen7_counter_read),
  955. GEN7_REGULAR_PERFCOUNTER_GROUP(CCU, ccu),
  956. GEN7_REGULAR_PERFCOUNTER_GROUP(CMP, cmp),
  957. GEN7_PERFCOUNTER_GROUP(TSE, tse, gen7_counter_br_enable, gen7_counter_read),
  958. GEN7_PERFCOUNTER_GROUP(RAS, ras, gen7_counter_br_enable, gen7_counter_read),
  959. GEN7_PERFCOUNTER_GROUP(LRZ, lrz, gen7_counter_br_enable, gen7_counter_read),
  960. GEN7_REGULAR_PERFCOUNTER_GROUP(UCHE, gen7_2_0_uche),
  961. GEN7_PERFCOUNTER_GROUP(TP, tp, gen7_hwsched_counter_enable, gen7_counter_read),
  962. GEN7_PERFCOUNTER_GROUP(SP, sp, gen7_hwsched_counter_enable, gen7_counter_read),
  963. GEN7_REGULAR_PERFCOUNTER_GROUP(RB, rb),
  964. GEN7_REGULAR_PERFCOUNTER_GROUP(VSC, vsc),
  965. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, VBIF, gbif, 0,
  966. gen7_counter_gbif_enable, gen7_counter_read_norestore),
  967. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, VBIF_PWR, gbif_pwr,
  968. ADRENO_PERFCOUNTER_GROUP_FIXED,
  969. gen7_counter_gbif_pwr_enable, gen7_counter_read_norestore),
  970. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, ALWAYSON, alwayson,
  971. ADRENO_PERFCOUNTER_GROUP_FIXED,
  972. gen7_counter_alwayson_enable, gen7_counter_alwayson_read),
  973. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, GMU_XOCLK, gmu_xoclk, 0,
  974. gen7_counter_gmu_xoclk_enable, gen7_counter_read_norestore),
  975. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, GMU_GMUCLK, gmu_gmuclk, 0,
  976. gen7_counter_gmu_gmuclk_enable, gen7_counter_read_norestore),
  977. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, GMU_PERF, gmu_perf, 0,
  978. gen7_counter_gmu_perf_enable, gen7_counter_read_norestore),
  979. GEN7_REGULAR_PERFCOUNTER_GROUP(UFC, ufc),
  980. GEN7_BV_REGULAR_PERFCOUNTER_GROUP(CP, cp),
  981. GEN7_BV_PERFCOUNTER_GROUP(PC, pc, gen7_counter_bv_enable, gen7_counter_read),
  982. GEN7_BV_REGULAR_PERFCOUNTER_GROUP(VFD, vfd),
  983. GEN7_BV_PERFCOUNTER_GROUP(VPC, vpc, gen7_counter_bv_enable, gen7_counter_read),
  984. GEN7_BV_REGULAR_PERFCOUNTER_GROUP(TP, tp),
  985. GEN7_BV_REGULAR_PERFCOUNTER_GROUP(SP, sp),
  986. GEN7_BV_REGULAR_PERFCOUNTER_GROUP(UFC, ufc),
  987. GEN7_BV_PERFCOUNTER_GROUP(TSE, tse, gen7_counter_bv_enable, gen7_counter_read),
  988. GEN7_BV_PERFCOUNTER_GROUP(RAS, ras, gen7_counter_bv_enable, gen7_counter_read),
  989. GEN7_BV_PERFCOUNTER_GROUP(LRZ, lrz, gen7_counter_bv_enable, gen7_counter_read),
  990. GEN7_BV_PERFCOUNTER_GROUP(HLSQ, hlsq, gen7_counter_bv_enable, gen7_counter_read),
  991. };
  992. static const struct adreno_perfcount_group gen7_9_0_hwsched_perfcounter_groups
  993. [KGSL_PERFCOUNTER_GROUP_MAX] = {
  994. GEN7_REGULAR_PERFCOUNTER_GROUP(CP, cp),
  995. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, RBBM, rbbm, 0,
  996. gen7_counter_enable, gen7_counter_read),
  997. GEN7_PERFCOUNTER_GROUP(PC, pc, gen7_counter_br_enable, gen7_counter_read),
  998. GEN7_PERFCOUNTER_GROUP(VFD, vfd, gen7_hwsched_counter_enable, gen7_counter_read),
  999. GEN7_PERFCOUNTER_GROUP(HLSQ, hlsq, gen7_counter_br_enable, gen7_counter_read),
  1000. GEN7_PERFCOUNTER_GROUP(VPC, vpc, gen7_counter_br_enable, gen7_counter_read),
  1001. GEN7_REGULAR_PERFCOUNTER_GROUP(CCU, ccu),
  1002. GEN7_REGULAR_PERFCOUNTER_GROUP(CMP, cmp),
  1003. GEN7_PERFCOUNTER_GROUP(TSE, tse, gen7_counter_br_enable, gen7_counter_read),
  1004. GEN7_PERFCOUNTER_GROUP(RAS, ras, gen7_counter_br_enable, gen7_counter_read),
  1005. GEN7_PERFCOUNTER_GROUP(LRZ, lrz, gen7_counter_br_enable, gen7_counter_read),
  1006. GEN7_REGULAR_PERFCOUNTER_GROUP(UCHE, gen7_9_0_uche),
  1007. GEN7_PERFCOUNTER_GROUP(TP, tp, gen7_hwsched_counter_enable, gen7_counter_read),
  1008. GEN7_PERFCOUNTER_GROUP(SP, sp, gen7_hwsched_counter_enable, gen7_counter_read),
  1009. GEN7_REGULAR_PERFCOUNTER_GROUP(RB, rb),
  1010. GEN7_REGULAR_PERFCOUNTER_GROUP(VSC, vsc),
  1011. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, VBIF, gbif, 0,
  1012. gen7_counter_gbif_enable, gen7_counter_read_norestore),
  1013. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, VBIF_PWR, gbif_pwr,
  1014. ADRENO_PERFCOUNTER_GROUP_FIXED,
  1015. gen7_counter_gbif_pwr_enable, gen7_counter_read_norestore),
  1016. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, ALWAYSON, alwayson,
  1017. ADRENO_PERFCOUNTER_GROUP_FIXED,
  1018. gen7_counter_alwayson_enable, gen7_counter_alwayson_read),
  1019. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, GMU_XOCLK, gmu_xoclk, 0,
  1020. gen7_counter_gmu_xoclk_enable, gen7_counter_read_norestore),
  1021. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, GMU_GMUCLK, gmu_gmuclk, 0,
  1022. gen7_counter_gmu_gmuclk_enable, gen7_counter_read_norestore),
  1023. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, GMU_PERF, gmu_perf, 0,
  1024. gen7_counter_gmu_perf_enable, gen7_counter_read_norestore),
  1025. GEN7_REGULAR_PERFCOUNTER_GROUP(UFC, ufc),
  1026. GEN7_BV_REGULAR_PERFCOUNTER_GROUP(CP, cp),
  1027. GEN7_BV_REGULAR_PERFCOUNTER_GROUP(PC, pc),
  1028. GEN7_BV_PERFCOUNTER_GROUP(PC, pc, gen7_counter_bv_enable, gen7_counter_read),
  1029. GEN7_BV_REGULAR_PERFCOUNTER_GROUP(VFD, vfd),
  1030. GEN7_BV_PERFCOUNTER_GROUP(VPC, vpc, gen7_counter_bv_enable, gen7_counter_read),
  1031. GEN7_BV_REGULAR_PERFCOUNTER_GROUP(TP, tp),
  1032. GEN7_BV_REGULAR_PERFCOUNTER_GROUP(SP, sp),
  1033. GEN7_BV_REGULAR_PERFCOUNTER_GROUP(UFC, ufc),
  1034. GEN7_BV_PERFCOUNTER_GROUP(TSE, tse, gen7_counter_bv_enable, gen7_counter_read),
  1035. GEN7_BV_PERFCOUNTER_GROUP(RAS, ras, gen7_counter_bv_enable, gen7_counter_read),
  1036. GEN7_BV_PERFCOUNTER_GROUP(LRZ, lrz, gen7_counter_bv_enable, gen7_counter_read),
  1037. GEN7_BV_PERFCOUNTER_GROUP(HLSQ, hlsq, gen7_counter_bv_enable, gen7_counter_read),
  1038. };
  1039. static const struct adreno_perfcount_group gen7_perfcounter_groups
  1040. [KGSL_PERFCOUNTER_GROUP_MAX] = {
  1041. GEN7_REGULAR_PERFCOUNTER_GROUP(CP, cp),
  1042. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, RBBM, rbbm, 0,
  1043. gen7_counter_enable, gen7_counter_read),
  1044. GEN7_PERFCOUNTER_GROUP(PC, pc, gen7_counter_br_enable, gen7_counter_read),
  1045. GEN7_PERFCOUNTER_GROUP(VFD, vfd, gen7_counter_inline_enable, gen7_counter_read),
  1046. GEN7_PERFCOUNTER_GROUP(HLSQ, hlsq, gen7_counter_br_enable, gen7_counter_read),
  1047. GEN7_PERFCOUNTER_GROUP(VPC, vpc, gen7_counter_br_enable, gen7_counter_read),
  1048. GEN7_REGULAR_PERFCOUNTER_GROUP(CCU, ccu),
  1049. GEN7_REGULAR_PERFCOUNTER_GROUP(CMP, cmp),
  1050. GEN7_PERFCOUNTER_GROUP(TSE, tse, gen7_counter_br_enable, gen7_counter_read),
  1051. GEN7_PERFCOUNTER_GROUP(RAS, ras, gen7_counter_br_enable, gen7_counter_read),
  1052. GEN7_PERFCOUNTER_GROUP(LRZ, lrz, gen7_counter_br_enable, gen7_counter_read),
  1053. GEN7_REGULAR_PERFCOUNTER_GROUP(UCHE, uche),
  1054. GEN7_PERFCOUNTER_GROUP(TP, tp, gen7_counter_inline_enable, gen7_counter_read),
  1055. GEN7_PERFCOUNTER_GROUP(SP, sp, gen7_counter_inline_enable, gen7_counter_read),
  1056. GEN7_REGULAR_PERFCOUNTER_GROUP(RB, rb),
  1057. GEN7_REGULAR_PERFCOUNTER_GROUP(VSC, vsc),
  1058. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, VBIF, gbif, 0,
  1059. gen7_counter_gbif_enable, gen7_counter_read_norestore),
  1060. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, VBIF_PWR, gbif_pwr,
  1061. ADRENO_PERFCOUNTER_GROUP_FIXED,
  1062. gen7_counter_gbif_pwr_enable, gen7_counter_read_norestore),
  1063. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, ALWAYSON, alwayson,
  1064. ADRENO_PERFCOUNTER_GROUP_FIXED,
  1065. gen7_counter_alwayson_enable, gen7_counter_alwayson_read),
  1066. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, GMU_XOCLK, gmu_xoclk, 0,
  1067. gen7_counter_gmu_xoclk_enable, gen7_counter_read_norestore),
  1068. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, GMU_GMUCLK, gmu_gmuclk, 0,
  1069. gen7_counter_gmu_gmuclk_enable, gen7_counter_read_norestore),
  1070. GEN7_PERFCOUNTER_GROUP_FLAGS(gen7, GMU_PERF, gmu_perf, 0,
  1071. gen7_counter_gmu_perf_enable, gen7_counter_read_norestore),
  1072. GEN7_REGULAR_PERFCOUNTER_GROUP(UFC, ufc),
  1073. GEN7_BV_REGULAR_PERFCOUNTER_GROUP(CP, cp),
  1074. GEN7_BV_PERFCOUNTER_GROUP(PC, pc, gen7_counter_bv_enable, gen7_counter_read),
  1075. GEN7_BV_REGULAR_PERFCOUNTER_GROUP(VFD, vfd),
  1076. GEN7_BV_PERFCOUNTER_GROUP(VPC, vpc, gen7_counter_bv_enable, gen7_counter_read),
  1077. GEN7_BV_REGULAR_PERFCOUNTER_GROUP(TP, tp),
  1078. GEN7_BV_REGULAR_PERFCOUNTER_GROUP(SP, sp),
  1079. GEN7_BV_REGULAR_PERFCOUNTER_GROUP(UFC, ufc),
  1080. GEN7_BV_PERFCOUNTER_GROUP(TSE, tse, gen7_counter_bv_enable, gen7_counter_read),
  1081. GEN7_BV_PERFCOUNTER_GROUP(RAS, ras, gen7_counter_bv_enable, gen7_counter_read),
  1082. GEN7_BV_PERFCOUNTER_GROUP(LRZ, lrz, gen7_counter_bv_enable, gen7_counter_read),
  1083. GEN7_BV_PERFCOUNTER_GROUP(HLSQ, hlsq, gen7_counter_bv_enable, gen7_counter_read),
  1084. };
  1085. const struct adreno_perfcounters adreno_gen7_perfcounters = {
  1086. gen7_perfcounter_groups,
  1087. ARRAY_SIZE(gen7_perfcounter_groups),
  1088. };
  1089. const struct adreno_perfcounters adreno_gen7_hwsched_perfcounters = {
  1090. gen7_hwsched_perfcounter_groups,
  1091. ARRAY_SIZE(gen7_hwsched_perfcounter_groups),
  1092. };
  1093. const struct adreno_perfcounters adreno_gen7_9_0_hwsched_perfcounters = {
  1094. gen7_9_0_hwsched_perfcounter_groups,
  1095. ARRAY_SIZE(gen7_9_0_hwsched_perfcounter_groups),
  1096. };