adreno-gpulist.h 105 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2002,2007-2021, The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2022-2024, Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #define ANY_ID (~0)
  7. #define DEFINE_ADRENO_REV(_rev, _core, _major, _minor, _patchid) \
  8. .gpurev = _rev, .core = _core, .major = _major, .minor = _minor, \
  9. .patchid = _patchid
  10. #define DEFINE_DEPRECATED_CORE(_name, _rev, _core, _major, _minor, _patchid) \
  11. static const struct adreno_gpu_core adreno_gpu_core_##_name = { \
  12. DEFINE_ADRENO_REV(_rev, _core, _major, _minor, _patchid), \
  13. .features = ADRENO_DEPRECATED, \
  14. }
  15. #define MHZ_TO_KBPS(mhz, w) ((u64)(mhz * 1000000ULL * w) / (1024))
  16. static const struct kgsl_regmap_list a306_vbif_regs[] = {
  17. { A3XX_VBIF_ROUND_ROBIN_QOS_ARB, 0x0003 },
  18. { A3XX_VBIF_OUT_RD_LIM_CONF0, 0x0000000A },
  19. { A3XX_VBIF_OUT_WR_LIM_CONF0, 0x0000000A },
  20. };
  21. static const struct adreno_a3xx_core adreno_gpu_core_a306 = {
  22. .base = {
  23. DEFINE_ADRENO_REV(ADRENO_REV_A306, 3, 0, 6, 0),
  24. .features = ADRENO_SOFT_FAULT_DETECT,
  25. .gpudev = &adreno_a3xx_gpudev,
  26. .perfcounters = &adreno_a3xx_perfcounters,
  27. .uche_gmem_alignment = 0,
  28. .gmem_size = SZ_128K,
  29. .bus_width = 0,
  30. .snapshot_size = 600 * SZ_1K,
  31. },
  32. .pm4fw_name = "a300_pm4.fw",
  33. .pfpfw_name = "a300_pfp.fw",
  34. .vbif = a306_vbif_regs,
  35. .vbif_count = ARRAY_SIZE(a306_vbif_regs),
  36. };
  37. static const struct kgsl_regmap_list a306a_vbif_regs[] = {
  38. { A3XX_VBIF_ROUND_ROBIN_QOS_ARB, 0x0003 },
  39. { A3XX_VBIF_OUT_RD_LIM_CONF0, 0x00000010 },
  40. { A3XX_VBIF_OUT_WR_LIM_CONF0, 0x00000010 },
  41. };
  42. static const struct adreno_a3xx_core adreno_gpu_core_a306a = {
  43. .base = {
  44. DEFINE_ADRENO_REV(ADRENO_REV_A306A, 3, 0, 6, 0x20),
  45. .features = ADRENO_SOFT_FAULT_DETECT,
  46. .gpudev = &adreno_a3xx_gpudev,
  47. .perfcounters = &adreno_a3xx_perfcounters,
  48. .uche_gmem_alignment = 0,
  49. .gmem_size = SZ_128K,
  50. .bus_width = 16,
  51. .snapshot_size = 600 * SZ_1K,
  52. },
  53. .pm4fw_name = "a300_pm4.fw",
  54. .pfpfw_name = "a300_pfp.fw",
  55. .vbif = a306a_vbif_regs,
  56. .vbif_count = ARRAY_SIZE(a306a_vbif_regs),
  57. };
  58. static const struct kgsl_regmap_list a304_vbif_regs[] = {
  59. { A3XX_VBIF_ROUND_ROBIN_QOS_ARB, 0x0003 },
  60. };
  61. static const struct adreno_a3xx_core adreno_gpu_core_a304 = {
  62. .base = {
  63. DEFINE_ADRENO_REV(ADRENO_REV_A304, 3, 0, 4, 0),
  64. .features = ADRENO_SOFT_FAULT_DETECT,
  65. .gpudev = &adreno_a3xx_gpudev,
  66. .perfcounters = &adreno_a3xx_perfcounters,
  67. .uche_gmem_alignment = 0,
  68. .gmem_size = (SZ_64K + SZ_32K),
  69. .bus_width = 0,
  70. .snapshot_size = 600 * SZ_1K,
  71. },
  72. .pm4fw_name = "a300_pm4.fw",
  73. .pfpfw_name = "a300_pfp.fw",
  74. .vbif = a304_vbif_regs,
  75. .vbif_count = ARRAY_SIZE(a304_vbif_regs),
  76. };
  77. DEFINE_DEPRECATED_CORE(a405, ADRENO_REV_A405, 4, 0, 5, ANY_ID);
  78. DEFINE_DEPRECATED_CORE(a418, ADRENO_REV_A418, 4, 1, 8, ANY_ID);
  79. DEFINE_DEPRECATED_CORE(a420, ADRENO_REV_A420, 4, 2, 0, ANY_ID);
  80. DEFINE_DEPRECATED_CORE(a430, ADRENO_REV_A430, 4, 3, 0, ANY_ID);
  81. DEFINE_DEPRECATED_CORE(a530v1, ADRENO_REV_A530, 5, 3, 0, 0);
  82. static const struct kgsl_regmap_list a530_hwcg_regs[] = {
  83. {A5XX_RBBM_CLOCK_CNTL_SP0, 0x02222222},
  84. {A5XX_RBBM_CLOCK_CNTL_SP1, 0x02222222},
  85. {A5XX_RBBM_CLOCK_CNTL_SP2, 0x02222222},
  86. {A5XX_RBBM_CLOCK_CNTL_SP3, 0x02222222},
  87. {A5XX_RBBM_CLOCK_CNTL2_SP0, 0x02222220},
  88. {A5XX_RBBM_CLOCK_CNTL2_SP1, 0x02222220},
  89. {A5XX_RBBM_CLOCK_CNTL2_SP2, 0x02222220},
  90. {A5XX_RBBM_CLOCK_CNTL2_SP3, 0x02222220},
  91. {A5XX_RBBM_CLOCK_HYST_SP0, 0x0000F3CF},
  92. {A5XX_RBBM_CLOCK_HYST_SP1, 0x0000F3CF},
  93. {A5XX_RBBM_CLOCK_HYST_SP2, 0x0000F3CF},
  94. {A5XX_RBBM_CLOCK_HYST_SP3, 0x0000F3CF},
  95. {A5XX_RBBM_CLOCK_DELAY_SP0, 0x00000080},
  96. {A5XX_RBBM_CLOCK_DELAY_SP1, 0x00000080},
  97. {A5XX_RBBM_CLOCK_DELAY_SP2, 0x00000080},
  98. {A5XX_RBBM_CLOCK_DELAY_SP3, 0x00000080},
  99. {A5XX_RBBM_CLOCK_CNTL_TP0, 0x22222222},
  100. {A5XX_RBBM_CLOCK_CNTL_TP1, 0x22222222},
  101. {A5XX_RBBM_CLOCK_CNTL_TP2, 0x22222222},
  102. {A5XX_RBBM_CLOCK_CNTL_TP3, 0x22222222},
  103. {A5XX_RBBM_CLOCK_CNTL2_TP0, 0x22222222},
  104. {A5XX_RBBM_CLOCK_CNTL2_TP1, 0x22222222},
  105. {A5XX_RBBM_CLOCK_CNTL2_TP2, 0x22222222},
  106. {A5XX_RBBM_CLOCK_CNTL2_TP3, 0x22222222},
  107. {A5XX_RBBM_CLOCK_CNTL3_TP0, 0x00002222},
  108. {A5XX_RBBM_CLOCK_CNTL3_TP1, 0x00002222},
  109. {A5XX_RBBM_CLOCK_CNTL3_TP2, 0x00002222},
  110. {A5XX_RBBM_CLOCK_CNTL3_TP3, 0x00002222},
  111. {A5XX_RBBM_CLOCK_HYST_TP0, 0x77777777},
  112. {A5XX_RBBM_CLOCK_HYST_TP1, 0x77777777},
  113. {A5XX_RBBM_CLOCK_HYST_TP2, 0x77777777},
  114. {A5XX_RBBM_CLOCK_HYST_TP3, 0x77777777},
  115. {A5XX_RBBM_CLOCK_HYST2_TP0, 0x77777777},
  116. {A5XX_RBBM_CLOCK_HYST2_TP1, 0x77777777},
  117. {A5XX_RBBM_CLOCK_HYST2_TP2, 0x77777777},
  118. {A5XX_RBBM_CLOCK_HYST2_TP3, 0x77777777},
  119. {A5XX_RBBM_CLOCK_HYST3_TP0, 0x00007777},
  120. {A5XX_RBBM_CLOCK_HYST3_TP1, 0x00007777},
  121. {A5XX_RBBM_CLOCK_HYST3_TP2, 0x00007777},
  122. {A5XX_RBBM_CLOCK_HYST3_TP3, 0x00007777},
  123. {A5XX_RBBM_CLOCK_DELAY_TP0, 0x11111111},
  124. {A5XX_RBBM_CLOCK_DELAY_TP1, 0x11111111},
  125. {A5XX_RBBM_CLOCK_DELAY_TP2, 0x11111111},
  126. {A5XX_RBBM_CLOCK_DELAY_TP3, 0x11111111},
  127. {A5XX_RBBM_CLOCK_DELAY2_TP0, 0x11111111},
  128. {A5XX_RBBM_CLOCK_DELAY2_TP1, 0x11111111},
  129. {A5XX_RBBM_CLOCK_DELAY2_TP2, 0x11111111},
  130. {A5XX_RBBM_CLOCK_DELAY2_TP3, 0x11111111},
  131. {A5XX_RBBM_CLOCK_DELAY3_TP0, 0x00001111},
  132. {A5XX_RBBM_CLOCK_DELAY3_TP1, 0x00001111},
  133. {A5XX_RBBM_CLOCK_DELAY3_TP2, 0x00001111},
  134. {A5XX_RBBM_CLOCK_DELAY3_TP3, 0x00001111},
  135. {A5XX_RBBM_CLOCK_CNTL_UCHE, 0x22222222},
  136. {A5XX_RBBM_CLOCK_CNTL2_UCHE, 0x22222222},
  137. {A5XX_RBBM_CLOCK_CNTL3_UCHE, 0x22222222},
  138. {A5XX_RBBM_CLOCK_CNTL4_UCHE, 0x00222222},
  139. {A5XX_RBBM_CLOCK_HYST_UCHE, 0x00444444},
  140. {A5XX_RBBM_CLOCK_DELAY_UCHE, 0x00000002},
  141. {A5XX_RBBM_CLOCK_CNTL_RB0, 0x22222222},
  142. {A5XX_RBBM_CLOCK_CNTL_RB1, 0x22222222},
  143. {A5XX_RBBM_CLOCK_CNTL_RB2, 0x22222222},
  144. {A5XX_RBBM_CLOCK_CNTL_RB3, 0x22222222},
  145. {A5XX_RBBM_CLOCK_CNTL2_RB0, 0x00222222},
  146. {A5XX_RBBM_CLOCK_CNTL2_RB1, 0x00222222},
  147. {A5XX_RBBM_CLOCK_CNTL2_RB2, 0x00222222},
  148. {A5XX_RBBM_CLOCK_CNTL2_RB3, 0x00222222},
  149. {A5XX_RBBM_CLOCK_CNTL_CCU0, 0x00022220},
  150. {A5XX_RBBM_CLOCK_CNTL_CCU1, 0x00022220},
  151. {A5XX_RBBM_CLOCK_CNTL_CCU2, 0x00022220},
  152. {A5XX_RBBM_CLOCK_CNTL_CCU3, 0x00022220},
  153. {A5XX_RBBM_CLOCK_CNTL_RAC, 0x05522222},
  154. {A5XX_RBBM_CLOCK_CNTL2_RAC, 0x00505555},
  155. {A5XX_RBBM_CLOCK_HYST_RB_CCU0, 0x04040404},
  156. {A5XX_RBBM_CLOCK_HYST_RB_CCU1, 0x04040404},
  157. {A5XX_RBBM_CLOCK_HYST_RB_CCU2, 0x04040404},
  158. {A5XX_RBBM_CLOCK_HYST_RB_CCU3, 0x04040404},
  159. {A5XX_RBBM_CLOCK_HYST_RAC, 0x07444044},
  160. {A5XX_RBBM_CLOCK_DELAY_RB_CCU_L1_0, 0x00000002},
  161. {A5XX_RBBM_CLOCK_DELAY_RB_CCU_L1_1, 0x00000002},
  162. {A5XX_RBBM_CLOCK_DELAY_RB_CCU_L1_2, 0x00000002},
  163. {A5XX_RBBM_CLOCK_DELAY_RB_CCU_L1_3, 0x00000002},
  164. {A5XX_RBBM_CLOCK_DELAY_RAC, 0x00010011},
  165. {A5XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM, 0x04222222},
  166. {A5XX_RBBM_CLOCK_MODE_GPC, 0x02222222},
  167. {A5XX_RBBM_CLOCK_MODE_VFD, 0x00002222},
  168. {A5XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM, 0x00000000},
  169. {A5XX_RBBM_CLOCK_HYST_GPC, 0x04104004},
  170. {A5XX_RBBM_CLOCK_HYST_VFD, 0x00000000},
  171. {A5XX_RBBM_CLOCK_DELAY_HLSQ, 0x00000000},
  172. {A5XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM, 0x00004000},
  173. {A5XX_RBBM_CLOCK_DELAY_GPC, 0x00000200},
  174. {A5XX_RBBM_CLOCK_DELAY_VFD, 0x00002222},
  175. };
  176. /* VBIF control registers for a530, a510, a508, a505 and a506 */
  177. static const struct kgsl_regmap_list a530_vbif_regs[] = {
  178. {A5XX_VBIF_ROUND_ROBIN_QOS_ARB, 0x00000003},
  179. };
  180. static const struct adreno_a5xx_core adreno_gpu_core_a530v2 = {
  181. .base = {
  182. DEFINE_ADRENO_REV(ADRENO_REV_A530, 5, 3, 0, 1),
  183. .features = ADRENO_SPTP_PC | ADRENO_LM |
  184. ADRENO_PREEMPTION |
  185. ADRENO_CONTENT_PROTECTION,
  186. .gpudev = &adreno_a5xx_gpudev,
  187. .perfcounters = &adreno_a5xx_perfcounters,
  188. .uche_gmem_alignment = SZ_1M,
  189. .gmem_size = SZ_1M,
  190. .bus_width = 32,
  191. .snapshot_size = SZ_1M,
  192. },
  193. .gpmu_tsens = 0x00060007,
  194. .max_power = 5448,
  195. .pm4fw_name = "a530_pm4.fw",
  196. .pfpfw_name = "a530_pfp.fw",
  197. .gpmufw_name = "a530_gpmu.fw2",
  198. .regfw_name = "a530v2_seq.fw2",
  199. .zap_name = "a530_zap.mdt",
  200. .hwcg = a530_hwcg_regs,
  201. .hwcg_count = ARRAY_SIZE(a530_hwcg_regs),
  202. .vbif = a530_vbif_regs,
  203. .vbif_count = ARRAY_SIZE(a530_vbif_regs),
  204. .highest_bank_bit = 15,
  205. };
  206. static const struct adreno_a5xx_core adreno_gpu_core_a530v3 = {
  207. .base = {
  208. DEFINE_ADRENO_REV(ADRENO_REV_A530, 5, 3, 0, ANY_ID),
  209. .features = ADRENO_SPTP_PC | ADRENO_LM |
  210. ADRENO_PREEMPTION |
  211. ADRENO_CONTENT_PROTECTION,
  212. .gpudev = &adreno_a5xx_gpudev,
  213. .perfcounters = &adreno_a5xx_perfcounters,
  214. .uche_gmem_alignment = SZ_1M,
  215. .gmem_size = SZ_1M,
  216. .bus_width = 32,
  217. .snapshot_size = SZ_1M,
  218. },
  219. .gpmu_tsens = 0x00060007,
  220. .max_power = 5448,
  221. .pm4fw_name = "a530_pm4.fw",
  222. .pfpfw_name = "a530_pfp.fw",
  223. .gpmufw_name = "a530v3_gpmu.fw2",
  224. .regfw_name = "a530v3_seq.fw2",
  225. .zap_name = "a530_zap.mdt",
  226. .hwcg = a530_hwcg_regs,
  227. .hwcg_count = ARRAY_SIZE(a530_hwcg_regs),
  228. .vbif = a530_vbif_regs,
  229. .vbif_count = ARRAY_SIZE(a530_vbif_regs),
  230. .highest_bank_bit = 15,
  231. };
  232. /* For a505, a506 and a508 */
  233. static const struct kgsl_regmap_list a50x_hwcg_regs[] = {
  234. {A5XX_RBBM_CLOCK_CNTL_SP0, 0x02222222},
  235. {A5XX_RBBM_CLOCK_CNTL2_SP0, 0x02222220},
  236. {A5XX_RBBM_CLOCK_HYST_SP0, 0x0000F3CF},
  237. {A5XX_RBBM_CLOCK_DELAY_SP0, 0x00000080},
  238. {A5XX_RBBM_CLOCK_CNTL_TP0, 0x22222222},
  239. {A5XX_RBBM_CLOCK_CNTL2_TP0, 0x22222222},
  240. {A5XX_RBBM_CLOCK_CNTL3_TP0, 0x00002222},
  241. {A5XX_RBBM_CLOCK_HYST_TP0, 0x77777777},
  242. {A5XX_RBBM_CLOCK_HYST2_TP0, 0x77777777},
  243. {A5XX_RBBM_CLOCK_HYST3_TP0, 0x00007777},
  244. {A5XX_RBBM_CLOCK_DELAY_TP0, 0x11111111},
  245. {A5XX_RBBM_CLOCK_DELAY2_TP0, 0x11111111},
  246. {A5XX_RBBM_CLOCK_DELAY3_TP0, 0x00001111},
  247. {A5XX_RBBM_CLOCK_CNTL2_UCHE, 0x22222222},
  248. {A5XX_RBBM_CLOCK_CNTL3_UCHE, 0x22222222},
  249. {A5XX_RBBM_CLOCK_CNTL4_UCHE, 0x00222222},
  250. {A5XX_RBBM_CLOCK_CNTL_UCHE, 0x22222222},
  251. {A5XX_RBBM_CLOCK_HYST_UCHE, 0x00FFFFF4},
  252. {A5XX_RBBM_CLOCK_DELAY_UCHE, 0x00000002},
  253. {A5XX_RBBM_CLOCK_CNTL_RB0, 0x22222222},
  254. {A5XX_RBBM_CLOCK_CNTL2_RB0, 0x00222222},
  255. {A5XX_RBBM_CLOCK_CNTL_CCU0, 0x00022220},
  256. {A5XX_RBBM_CLOCK_CNTL_RAC, 0x05522222},
  257. {A5XX_RBBM_CLOCK_CNTL2_RAC, 0x00505555},
  258. {A5XX_RBBM_CLOCK_HYST_RB_CCU0, 0x04040404},
  259. {A5XX_RBBM_CLOCK_HYST_RAC, 0x07444044},
  260. {A5XX_RBBM_CLOCK_DELAY_RB_CCU_L1_0, 0x00000002},
  261. {A5XX_RBBM_CLOCK_DELAY_RAC, 0x00010011},
  262. {A5XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM, 0x04222222},
  263. {A5XX_RBBM_CLOCK_MODE_GPC, 0x02222222},
  264. {A5XX_RBBM_CLOCK_MODE_VFD, 0x00002222},
  265. {A5XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM, 0x00000000},
  266. {A5XX_RBBM_CLOCK_HYST_GPC, 0x04104004},
  267. {A5XX_RBBM_CLOCK_HYST_VFD, 0x00000000},
  268. {A5XX_RBBM_CLOCK_DELAY_HLSQ, 0x00000000},
  269. {A5XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM, 0x00004000},
  270. {A5XX_RBBM_CLOCK_DELAY_GPC, 0x00000200},
  271. {A5XX_RBBM_CLOCK_DELAY_VFD, 0x00002222}
  272. };
  273. static const struct adreno_a5xx_core adreno_gpu_core_a505 = {
  274. .base = {
  275. DEFINE_ADRENO_REV(ADRENO_REV_A505, 5, 0, 5, ANY_ID),
  276. .features = ADRENO_PREEMPTION,
  277. .gpudev = &adreno_a5xx_gpudev,
  278. .perfcounters = &adreno_a5xx_perfcounters,
  279. .uche_gmem_alignment = SZ_1M,
  280. .gmem_size = (SZ_128K + SZ_8K),
  281. .bus_width = 16,
  282. .snapshot_size = SZ_1M,
  283. },
  284. .pm4fw_name = "a530_pm4.fw",
  285. .pfpfw_name = "a530_pfp.fw",
  286. .hwcg = a50x_hwcg_regs,
  287. .hwcg_count = ARRAY_SIZE(a50x_hwcg_regs),
  288. .vbif = a530_vbif_regs,
  289. .vbif_count = ARRAY_SIZE(a530_vbif_regs),
  290. };
  291. static const struct adreno_a5xx_core adreno_gpu_core_a506 = {
  292. .base = {
  293. DEFINE_ADRENO_REV(ADRENO_REV_A506, 5, 0, 6, ANY_ID),
  294. .features = ADRENO_PREEMPTION |
  295. ADRENO_CONTENT_PROTECTION | ADRENO_CPZ_RETENTION,
  296. .gpudev = &adreno_a5xx_gpudev,
  297. .perfcounters = &adreno_a5xx_perfcounters,
  298. .uche_gmem_alignment = SZ_1M,
  299. .gmem_size = (SZ_128K + SZ_8K),
  300. .bus_width = 16,
  301. .snapshot_size = SZ_1M,
  302. },
  303. .pm4fw_name = "a530_pm4.fw",
  304. .pfpfw_name = "a530_pfp.fw",
  305. .zap_name = "a506_zap.mdt",
  306. .hwcg = a50x_hwcg_regs,
  307. .hwcg_count = ARRAY_SIZE(a50x_hwcg_regs),
  308. .vbif = a530_vbif_regs,
  309. .vbif_count = ARRAY_SIZE(a530_vbif_regs),
  310. .highest_bank_bit = 14,
  311. };
  312. static const struct kgsl_regmap_list a510_hwcg_regs[] = {
  313. {A5XX_RBBM_CLOCK_CNTL_SP0, 0x02222222},
  314. {A5XX_RBBM_CLOCK_CNTL_SP1, 0x02222222},
  315. {A5XX_RBBM_CLOCK_CNTL2_SP0, 0x02222220},
  316. {A5XX_RBBM_CLOCK_CNTL2_SP1, 0x02222220},
  317. {A5XX_RBBM_CLOCK_HYST_SP0, 0x0000F3CF},
  318. {A5XX_RBBM_CLOCK_HYST_SP1, 0x0000F3CF},
  319. {A5XX_RBBM_CLOCK_DELAY_SP0, 0x00000080},
  320. {A5XX_RBBM_CLOCK_DELAY_SP1, 0x00000080},
  321. {A5XX_RBBM_CLOCK_CNTL_TP0, 0x22222222},
  322. {A5XX_RBBM_CLOCK_CNTL_TP1, 0x22222222},
  323. {A5XX_RBBM_CLOCK_CNTL2_TP0, 0x22222222},
  324. {A5XX_RBBM_CLOCK_CNTL2_TP1, 0x22222222},
  325. {A5XX_RBBM_CLOCK_CNTL3_TP0, 0x00002222},
  326. {A5XX_RBBM_CLOCK_CNTL3_TP1, 0x00002222},
  327. {A5XX_RBBM_CLOCK_HYST_TP0, 0x77777777},
  328. {A5XX_RBBM_CLOCK_HYST_TP1, 0x77777777},
  329. {A5XX_RBBM_CLOCK_HYST2_TP0, 0x77777777},
  330. {A5XX_RBBM_CLOCK_HYST2_TP1, 0x77777777},
  331. {A5XX_RBBM_CLOCK_HYST3_TP0, 0x00007777},
  332. {A5XX_RBBM_CLOCK_HYST3_TP1, 0x00007777},
  333. {A5XX_RBBM_CLOCK_DELAY_TP0, 0x11111111},
  334. {A5XX_RBBM_CLOCK_DELAY_TP1, 0x11111111},
  335. {A5XX_RBBM_CLOCK_DELAY2_TP0, 0x11111111},
  336. {A5XX_RBBM_CLOCK_DELAY2_TP1, 0x11111111},
  337. {A5XX_RBBM_CLOCK_DELAY3_TP0, 0x00001111},
  338. {A5XX_RBBM_CLOCK_DELAY3_TP1, 0x00001111},
  339. {A5XX_RBBM_CLOCK_CNTL_UCHE, 0x22222222},
  340. {A5XX_RBBM_CLOCK_CNTL2_UCHE, 0x22222222},
  341. {A5XX_RBBM_CLOCK_CNTL3_UCHE, 0x22222222},
  342. {A5XX_RBBM_CLOCK_CNTL4_UCHE, 0x00222222},
  343. {A5XX_RBBM_CLOCK_HYST_UCHE, 0x00444444},
  344. {A5XX_RBBM_CLOCK_DELAY_UCHE, 0x00000002},
  345. {A5XX_RBBM_CLOCK_CNTL_RB0, 0x22222222},
  346. {A5XX_RBBM_CLOCK_CNTL_RB1, 0x22222222},
  347. {A5XX_RBBM_CLOCK_CNTL2_RB0, 0x00222222},
  348. {A5XX_RBBM_CLOCK_CNTL2_RB1, 0x00222222},
  349. {A5XX_RBBM_CLOCK_CNTL_CCU0, 0x00022220},
  350. {A5XX_RBBM_CLOCK_CNTL_CCU1, 0x00022220},
  351. {A5XX_RBBM_CLOCK_CNTL_RAC, 0x05522222},
  352. {A5XX_RBBM_CLOCK_CNTL2_RAC, 0x00505555},
  353. {A5XX_RBBM_CLOCK_HYST_RB_CCU0, 0x04040404},
  354. {A5XX_RBBM_CLOCK_HYST_RB_CCU1, 0x04040404},
  355. {A5XX_RBBM_CLOCK_HYST_RAC, 0x07444044},
  356. {A5XX_RBBM_CLOCK_DELAY_RB_CCU_L1_0, 0x00000002},
  357. {A5XX_RBBM_CLOCK_DELAY_RB_CCU_L1_1, 0x00000002},
  358. {A5XX_RBBM_CLOCK_DELAY_RAC, 0x00010011},
  359. {A5XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM, 0x04222222},
  360. {A5XX_RBBM_CLOCK_MODE_GPC, 0x02222222},
  361. {A5XX_RBBM_CLOCK_MODE_VFD, 0x00002222},
  362. {A5XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM, 0x00000000},
  363. {A5XX_RBBM_CLOCK_HYST_GPC, 0x04104004},
  364. {A5XX_RBBM_CLOCK_HYST_VFD, 0x00000000},
  365. {A5XX_RBBM_CLOCK_DELAY_HLSQ, 0x00000000},
  366. {A5XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM, 0x00004000},
  367. {A5XX_RBBM_CLOCK_DELAY_GPC, 0x00000200},
  368. {A5XX_RBBM_CLOCK_DELAY_VFD, 0x00002222},
  369. };
  370. static const struct adreno_a5xx_core adreno_gpu_core_a510 = {
  371. .base = {
  372. DEFINE_ADRENO_REV(ADRENO_REV_A510, 5, 1, 0, ANY_ID),
  373. .gpudev = &adreno_a5xx_gpudev,
  374. .perfcounters = &adreno_a5xx_perfcounters,
  375. .uche_gmem_alignment = SZ_1M,
  376. .gmem_size = SZ_256K,
  377. .bus_width = 16,
  378. .snapshot_size = SZ_1M,
  379. },
  380. .pm4fw_name = "a530_pm4.fw",
  381. .pfpfw_name = "a530_pfp.fw",
  382. .hwcg = a510_hwcg_regs,
  383. .hwcg_count = ARRAY_SIZE(a510_hwcg_regs),
  384. .vbif = a530_vbif_regs,
  385. .vbif_count = ARRAY_SIZE(a530_vbif_regs),
  386. };
  387. DEFINE_DEPRECATED_CORE(a540v1, ADRENO_REV_A540, 5, 4, 0, 0);
  388. static const struct kgsl_regmap_list a540_hwcg_regs[] = {
  389. {A5XX_RBBM_CLOCK_CNTL_SP0, 0x02222222},
  390. {A5XX_RBBM_CLOCK_CNTL_SP1, 0x02222222},
  391. {A5XX_RBBM_CLOCK_CNTL_SP2, 0x02222222},
  392. {A5XX_RBBM_CLOCK_CNTL_SP3, 0x02222222},
  393. {A5XX_RBBM_CLOCK_CNTL2_SP0, 0x02222220},
  394. {A5XX_RBBM_CLOCK_CNTL2_SP1, 0x02222220},
  395. {A5XX_RBBM_CLOCK_CNTL2_SP2, 0x02222220},
  396. {A5XX_RBBM_CLOCK_CNTL2_SP3, 0x02222220},
  397. {A5XX_RBBM_CLOCK_HYST_SP0, 0x0000F3CF},
  398. {A5XX_RBBM_CLOCK_HYST_SP1, 0x0000F3CF},
  399. {A5XX_RBBM_CLOCK_HYST_SP2, 0x0000F3CF},
  400. {A5XX_RBBM_CLOCK_HYST_SP3, 0x0000F3CF},
  401. {A5XX_RBBM_CLOCK_DELAY_SP0, 0x00000080},
  402. {A5XX_RBBM_CLOCK_DELAY_SP1, 0x00000080},
  403. {A5XX_RBBM_CLOCK_DELAY_SP2, 0x00000080},
  404. {A5XX_RBBM_CLOCK_DELAY_SP3, 0x00000080},
  405. {A5XX_RBBM_CLOCK_CNTL_TP0, 0x22222222},
  406. {A5XX_RBBM_CLOCK_CNTL_TP1, 0x22222222},
  407. {A5XX_RBBM_CLOCK_CNTL_TP2, 0x22222222},
  408. {A5XX_RBBM_CLOCK_CNTL_TP3, 0x22222222},
  409. {A5XX_RBBM_CLOCK_CNTL2_TP0, 0x22222222},
  410. {A5XX_RBBM_CLOCK_CNTL2_TP1, 0x22222222},
  411. {A5XX_RBBM_CLOCK_CNTL2_TP2, 0x22222222},
  412. {A5XX_RBBM_CLOCK_CNTL2_TP3, 0x22222222},
  413. {A5XX_RBBM_CLOCK_CNTL3_TP0, 0x00002222},
  414. {A5XX_RBBM_CLOCK_CNTL3_TP1, 0x00002222},
  415. {A5XX_RBBM_CLOCK_CNTL3_TP2, 0x00002222},
  416. {A5XX_RBBM_CLOCK_CNTL3_TP3, 0x00002222},
  417. {A5XX_RBBM_CLOCK_HYST_TP0, 0x77777777},
  418. {A5XX_RBBM_CLOCK_HYST_TP1, 0x77777777},
  419. {A5XX_RBBM_CLOCK_HYST_TP2, 0x77777777},
  420. {A5XX_RBBM_CLOCK_HYST_TP3, 0x77777777},
  421. {A5XX_RBBM_CLOCK_HYST2_TP0, 0x77777777},
  422. {A5XX_RBBM_CLOCK_HYST2_TP1, 0x77777777},
  423. {A5XX_RBBM_CLOCK_HYST2_TP2, 0x77777777},
  424. {A5XX_RBBM_CLOCK_HYST2_TP3, 0x77777777},
  425. {A5XX_RBBM_CLOCK_HYST3_TP0, 0x00007777},
  426. {A5XX_RBBM_CLOCK_HYST3_TP1, 0x00007777},
  427. {A5XX_RBBM_CLOCK_HYST3_TP2, 0x00007777},
  428. {A5XX_RBBM_CLOCK_HYST3_TP3, 0x00007777},
  429. {A5XX_RBBM_CLOCK_DELAY_TP0, 0x11111111},
  430. {A5XX_RBBM_CLOCK_DELAY_TP1, 0x11111111},
  431. {A5XX_RBBM_CLOCK_DELAY_TP2, 0x11111111},
  432. {A5XX_RBBM_CLOCK_DELAY_TP3, 0x11111111},
  433. {A5XX_RBBM_CLOCK_DELAY2_TP0, 0x11111111},
  434. {A5XX_RBBM_CLOCK_DELAY2_TP1, 0x11111111},
  435. {A5XX_RBBM_CLOCK_DELAY2_TP2, 0x11111111},
  436. {A5XX_RBBM_CLOCK_DELAY2_TP3, 0x11111111},
  437. {A5XX_RBBM_CLOCK_DELAY3_TP0, 0x00001111},
  438. {A5XX_RBBM_CLOCK_DELAY3_TP1, 0x00001111},
  439. {A5XX_RBBM_CLOCK_DELAY3_TP2, 0x00001111},
  440. {A5XX_RBBM_CLOCK_DELAY3_TP3, 0x00001111},
  441. {A5XX_RBBM_CLOCK_CNTL_UCHE, 0x22222222},
  442. {A5XX_RBBM_CLOCK_CNTL2_UCHE, 0x22222222},
  443. {A5XX_RBBM_CLOCK_CNTL3_UCHE, 0x22222222},
  444. {A5XX_RBBM_CLOCK_CNTL4_UCHE, 0x00222222},
  445. {A5XX_RBBM_CLOCK_HYST_UCHE, 0x00444444},
  446. {A5XX_RBBM_CLOCK_DELAY_UCHE, 0x00000002},
  447. {A5XX_RBBM_CLOCK_CNTL_RB0, 0x22222222},
  448. {A5XX_RBBM_CLOCK_CNTL_RB1, 0x22222222},
  449. {A5XX_RBBM_CLOCK_CNTL_RB2, 0x22222222},
  450. {A5XX_RBBM_CLOCK_CNTL_RB3, 0x22222222},
  451. {A5XX_RBBM_CLOCK_CNTL2_RB0, 0x00222222},
  452. {A5XX_RBBM_CLOCK_CNTL2_RB1, 0x00222222},
  453. {A5XX_RBBM_CLOCK_CNTL2_RB2, 0x00222222},
  454. {A5XX_RBBM_CLOCK_CNTL2_RB3, 0x00222222},
  455. {A5XX_RBBM_CLOCK_CNTL_CCU0, 0x00022220},
  456. {A5XX_RBBM_CLOCK_CNTL_CCU1, 0x00022220},
  457. {A5XX_RBBM_CLOCK_CNTL_CCU2, 0x00022220},
  458. {A5XX_RBBM_CLOCK_CNTL_CCU3, 0x00022220},
  459. {A5XX_RBBM_CLOCK_CNTL_RAC, 0x05522222},
  460. {A5XX_RBBM_CLOCK_CNTL2_RAC, 0x00505555},
  461. {A5XX_RBBM_CLOCK_HYST_RB_CCU0, 0x04040404},
  462. {A5XX_RBBM_CLOCK_HYST_RB_CCU1, 0x04040404},
  463. {A5XX_RBBM_CLOCK_HYST_RB_CCU2, 0x04040404},
  464. {A5XX_RBBM_CLOCK_HYST_RB_CCU3, 0x04040404},
  465. {A5XX_RBBM_CLOCK_HYST_RAC, 0x07444044},
  466. {A5XX_RBBM_CLOCK_DELAY_RB_CCU_L1_0, 0x00000002},
  467. {A5XX_RBBM_CLOCK_DELAY_RB_CCU_L1_1, 0x00000002},
  468. {A5XX_RBBM_CLOCK_DELAY_RB_CCU_L1_2, 0x00000002},
  469. {A5XX_RBBM_CLOCK_DELAY_RB_CCU_L1_3, 0x00000002},
  470. {A5XX_RBBM_CLOCK_DELAY_RAC, 0x00010011},
  471. {A5XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM, 0x04222222},
  472. {A5XX_RBBM_CLOCK_MODE_GPC, 0x02222222},
  473. {A5XX_RBBM_CLOCK_MODE_VFD, 0x00002222},
  474. {A5XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM, 0x00000000},
  475. {A5XX_RBBM_CLOCK_HYST_GPC, 0x04104004},
  476. {A5XX_RBBM_CLOCK_HYST_VFD, 0x00000000},
  477. {A5XX_RBBM_CLOCK_DELAY_HLSQ, 0x00000000},
  478. {A5XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM, 0x00004000},
  479. {A5XX_RBBM_CLOCK_DELAY_GPC, 0x00000200},
  480. {A5XX_RBBM_CLOCK_DELAY_VFD, 0x00002222},
  481. {A5XX_RBBM_CLOCK_HYST_GPMU, 0x00000222},
  482. {A5XX_RBBM_CLOCK_DELAY_GPMU, 0x00000770},
  483. {A5XX_RBBM_CLOCK_HYST_GPMU, 0x00000004},
  484. };
  485. static const struct kgsl_regmap_list a540_vbif_regs[] = {
  486. {A5XX_VBIF_ROUND_ROBIN_QOS_ARB, 0x00000003},
  487. {A5XX_VBIF_GATE_OFF_WRREQ_EN, 0x00000009},
  488. };
  489. static const struct adreno_a5xx_core adreno_gpu_core_a540v2 = {
  490. .base = {
  491. DEFINE_ADRENO_REV(ADRENO_REV_A540, 5, 4, 0, ANY_ID),
  492. .features = ADRENO_PREEMPTION |
  493. ADRENO_CONTENT_PROTECTION |
  494. ADRENO_SPTP_PC,
  495. .gpudev = &adreno_a5xx_gpudev,
  496. .perfcounters = &adreno_a5xx_perfcounters,
  497. .uche_gmem_alignment = SZ_1M,
  498. .gmem_size = SZ_1M,
  499. .bus_width = 32,
  500. .snapshot_size = SZ_1M,
  501. },
  502. .gpmu_tsens = 0x000c000d,
  503. .max_power = 5448,
  504. .pm4fw_name = "a530_pm4.fw",
  505. .pfpfw_name = "a530_pfp.fw",
  506. .gpmufw_name = "a540_gpmu.fw2",
  507. .zap_name = "a540_zap.mdt",
  508. .hwcg = a540_hwcg_regs,
  509. .hwcg_count = ARRAY_SIZE(a540_hwcg_regs),
  510. .vbif = a540_vbif_regs,
  511. .vbif_count = ARRAY_SIZE(a540_vbif_regs),
  512. .highest_bank_bit = 15,
  513. };
  514. static const struct kgsl_regmap_list a512_hwcg_regs[] = {
  515. {A5XX_RBBM_CLOCK_CNTL_SP0, 0x02222222},
  516. {A5XX_RBBM_CLOCK_CNTL_SP1, 0x02222222},
  517. {A5XX_RBBM_CLOCK_CNTL2_SP0, 0x02222220},
  518. {A5XX_RBBM_CLOCK_CNTL2_SP1, 0x02222220},
  519. {A5XX_RBBM_CLOCK_HYST_SP0, 0x0000F3CF},
  520. {A5XX_RBBM_CLOCK_HYST_SP1, 0x0000F3CF},
  521. {A5XX_RBBM_CLOCK_DELAY_SP0, 0x00000080},
  522. {A5XX_RBBM_CLOCK_DELAY_SP1, 0x00000080},
  523. {A5XX_RBBM_CLOCK_CNTL_TP0, 0x22222222},
  524. {A5XX_RBBM_CLOCK_CNTL_TP1, 0x22222222},
  525. {A5XX_RBBM_CLOCK_CNTL2_TP0, 0x22222222},
  526. {A5XX_RBBM_CLOCK_CNTL2_TP1, 0x22222222},
  527. {A5XX_RBBM_CLOCK_CNTL3_TP0, 0x00002222},
  528. {A5XX_RBBM_CLOCK_CNTL3_TP1, 0x00002222},
  529. {A5XX_RBBM_CLOCK_HYST_TP0, 0x77777777},
  530. {A5XX_RBBM_CLOCK_HYST_TP1, 0x77777777},
  531. {A5XX_RBBM_CLOCK_HYST2_TP0, 0x77777777},
  532. {A5XX_RBBM_CLOCK_HYST2_TP1, 0x77777777},
  533. {A5XX_RBBM_CLOCK_HYST3_TP0, 0x00007777},
  534. {A5XX_RBBM_CLOCK_HYST3_TP1, 0x00007777},
  535. {A5XX_RBBM_CLOCK_DELAY_TP0, 0x11111111},
  536. {A5XX_RBBM_CLOCK_DELAY_TP1, 0x11111111},
  537. {A5XX_RBBM_CLOCK_DELAY2_TP0, 0x11111111},
  538. {A5XX_RBBM_CLOCK_DELAY2_TP1, 0x11111111},
  539. {A5XX_RBBM_CLOCK_DELAY3_TP0, 0x00001111},
  540. {A5XX_RBBM_CLOCK_DELAY3_TP1, 0x00001111},
  541. {A5XX_RBBM_CLOCK_CNTL_UCHE, 0x22222222},
  542. {A5XX_RBBM_CLOCK_CNTL2_UCHE, 0x22222222},
  543. {A5XX_RBBM_CLOCK_CNTL3_UCHE, 0x22222222},
  544. {A5XX_RBBM_CLOCK_CNTL4_UCHE, 0x00222222},
  545. {A5XX_RBBM_CLOCK_HYST_UCHE, 0x00444444},
  546. {A5XX_RBBM_CLOCK_DELAY_UCHE, 0x00000002},
  547. {A5XX_RBBM_CLOCK_CNTL_RB0, 0x22222222},
  548. {A5XX_RBBM_CLOCK_CNTL_RB1, 0x22222222},
  549. {A5XX_RBBM_CLOCK_CNTL2_RB0, 0x00222222},
  550. {A5XX_RBBM_CLOCK_CNTL2_RB1, 0x00222222},
  551. {A5XX_RBBM_CLOCK_CNTL_CCU0, 0x00022220},
  552. {A5XX_RBBM_CLOCK_CNTL_CCU1, 0x00022220},
  553. {A5XX_RBBM_CLOCK_CNTL_RAC, 0x05522222},
  554. {A5XX_RBBM_CLOCK_CNTL2_RAC, 0x00505555},
  555. {A5XX_RBBM_CLOCK_HYST_RB_CCU0, 0x04040404},
  556. {A5XX_RBBM_CLOCK_HYST_RB_CCU1, 0x04040404},
  557. {A5XX_RBBM_CLOCK_HYST_RAC, 0x07444044},
  558. {A5XX_RBBM_CLOCK_DELAY_RB_CCU_L1_0, 0x00000002},
  559. {A5XX_RBBM_CLOCK_DELAY_RB_CCU_L1_1, 0x00000002},
  560. {A5XX_RBBM_CLOCK_DELAY_RAC, 0x00010011},
  561. {A5XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM, 0x04222222},
  562. {A5XX_RBBM_CLOCK_MODE_GPC, 0x02222222},
  563. {A5XX_RBBM_CLOCK_MODE_VFD, 0x00002222},
  564. {A5XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM, 0x00000000},
  565. {A5XX_RBBM_CLOCK_HYST_GPC, 0x04104004},
  566. {A5XX_RBBM_CLOCK_HYST_VFD, 0x00000000},
  567. {A5XX_RBBM_CLOCK_DELAY_HLSQ, 0x00000000},
  568. {A5XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM, 0x00004000},
  569. {A5XX_RBBM_CLOCK_DELAY_GPC, 0x00000200},
  570. {A5XX_RBBM_CLOCK_DELAY_VFD, 0x00002222},
  571. };
  572. static const struct adreno_a5xx_core adreno_gpu_core_a512 = {
  573. .base = {
  574. DEFINE_ADRENO_REV(ADRENO_REV_A512, 5, 1, 2, ANY_ID),
  575. .features = ADRENO_PREEMPTION |
  576. ADRENO_CONTENT_PROTECTION | ADRENO_CPZ_RETENTION,
  577. .gpudev = &adreno_a5xx_gpudev,
  578. .perfcounters = &adreno_a5xx_perfcounters,
  579. .uche_gmem_alignment = SZ_1M,
  580. .gmem_size = (SZ_256K + SZ_16K),
  581. .bus_width = 32,
  582. .snapshot_size = SZ_1M,
  583. },
  584. .pm4fw_name = "a530_pm4.fw",
  585. .pfpfw_name = "a530_pfp.fw",
  586. .zap_name = "a512_zap.mdt",
  587. .hwcg = a512_hwcg_regs,
  588. .hwcg_count = ARRAY_SIZE(a512_hwcg_regs),
  589. .highest_bank_bit = 14,
  590. };
  591. static const struct adreno_a5xx_core adreno_gpu_core_a508 = {
  592. .base = {
  593. DEFINE_ADRENO_REV(ADRENO_REV_A508, 5, 0, 8, ANY_ID),
  594. .features = ADRENO_PREEMPTION |
  595. ADRENO_CONTENT_PROTECTION | ADRENO_CPZ_RETENTION,
  596. .gpudev = &adreno_a5xx_gpudev,
  597. .perfcounters = &adreno_a5xx_perfcounters,
  598. .uche_gmem_alignment = SZ_1M,
  599. .gmem_size = (SZ_128K + SZ_8K),
  600. .bus_width = 32,
  601. .snapshot_size = SZ_1M,
  602. },
  603. .pm4fw_name = "a530_pm4.fw",
  604. .pfpfw_name = "a530_pfp.fw",
  605. .zap_name = "a508_zap.mdt",
  606. .hwcg = a50x_hwcg_regs,
  607. .hwcg_count = ARRAY_SIZE(a50x_hwcg_regs),
  608. .vbif = a530_vbif_regs,
  609. .vbif_count = ARRAY_SIZE(a530_vbif_regs),
  610. .highest_bank_bit = 14,
  611. };
  612. DEFINE_DEPRECATED_CORE(a630v1, ADRENO_REV_A630, 6, 3, 0, 0);
  613. static const struct kgsl_regmap_list a630_hwcg_regs[] = {
  614. {A6XX_RBBM_CLOCK_CNTL_SP0, 0x02222222},
  615. {A6XX_RBBM_CLOCK_CNTL_SP1, 0x02222222},
  616. {A6XX_RBBM_CLOCK_CNTL_SP2, 0x02222222},
  617. {A6XX_RBBM_CLOCK_CNTL_SP3, 0x02222222},
  618. {A6XX_RBBM_CLOCK_CNTL2_SP0, 0x02022220},
  619. {A6XX_RBBM_CLOCK_CNTL2_SP1, 0x02022220},
  620. {A6XX_RBBM_CLOCK_CNTL2_SP2, 0x02022220},
  621. {A6XX_RBBM_CLOCK_CNTL2_SP3, 0x02022220},
  622. {A6XX_RBBM_CLOCK_DELAY_SP0, 0x00000080},
  623. {A6XX_RBBM_CLOCK_DELAY_SP1, 0x00000080},
  624. {A6XX_RBBM_CLOCK_DELAY_SP2, 0x00000080},
  625. {A6XX_RBBM_CLOCK_DELAY_SP3, 0x00000080},
  626. {A6XX_RBBM_CLOCK_HYST_SP0, 0x0000F3CF},
  627. {A6XX_RBBM_CLOCK_HYST_SP1, 0x0000F3CF},
  628. {A6XX_RBBM_CLOCK_HYST_SP2, 0x0000F3CF},
  629. {A6XX_RBBM_CLOCK_HYST_SP3, 0x0000F3CF},
  630. {A6XX_RBBM_CLOCK_CNTL_TP0, 0x02222222},
  631. {A6XX_RBBM_CLOCK_CNTL_TP1, 0x02222222},
  632. {A6XX_RBBM_CLOCK_CNTL_TP2, 0x02222222},
  633. {A6XX_RBBM_CLOCK_CNTL_TP3, 0x02222222},
  634. {A6XX_RBBM_CLOCK_CNTL2_TP0, 0x22222222},
  635. {A6XX_RBBM_CLOCK_CNTL2_TP1, 0x22222222},
  636. {A6XX_RBBM_CLOCK_CNTL2_TP2, 0x22222222},
  637. {A6XX_RBBM_CLOCK_CNTL2_TP3, 0x22222222},
  638. {A6XX_RBBM_CLOCK_CNTL3_TP0, 0x22222222},
  639. {A6XX_RBBM_CLOCK_CNTL3_TP1, 0x22222222},
  640. {A6XX_RBBM_CLOCK_CNTL3_TP2, 0x22222222},
  641. {A6XX_RBBM_CLOCK_CNTL3_TP3, 0x22222222},
  642. {A6XX_RBBM_CLOCK_CNTL4_TP0, 0x00022222},
  643. {A6XX_RBBM_CLOCK_CNTL4_TP1, 0x00022222},
  644. {A6XX_RBBM_CLOCK_CNTL4_TP2, 0x00022222},
  645. {A6XX_RBBM_CLOCK_CNTL4_TP3, 0x00022222},
  646. {A6XX_RBBM_CLOCK_HYST_TP0, 0x77777777},
  647. {A6XX_RBBM_CLOCK_HYST_TP1, 0x77777777},
  648. {A6XX_RBBM_CLOCK_HYST_TP2, 0x77777777},
  649. {A6XX_RBBM_CLOCK_HYST_TP3, 0x77777777},
  650. {A6XX_RBBM_CLOCK_HYST2_TP0, 0x77777777},
  651. {A6XX_RBBM_CLOCK_HYST2_TP1, 0x77777777},
  652. {A6XX_RBBM_CLOCK_HYST2_TP2, 0x77777777},
  653. {A6XX_RBBM_CLOCK_HYST2_TP3, 0x77777777},
  654. {A6XX_RBBM_CLOCK_HYST3_TP0, 0x77777777},
  655. {A6XX_RBBM_CLOCK_HYST3_TP1, 0x77777777},
  656. {A6XX_RBBM_CLOCK_HYST3_TP2, 0x77777777},
  657. {A6XX_RBBM_CLOCK_HYST3_TP3, 0x77777777},
  658. {A6XX_RBBM_CLOCK_HYST4_TP0, 0x00077777},
  659. {A6XX_RBBM_CLOCK_HYST4_TP1, 0x00077777},
  660. {A6XX_RBBM_CLOCK_HYST4_TP2, 0x00077777},
  661. {A6XX_RBBM_CLOCK_HYST4_TP3, 0x00077777},
  662. {A6XX_RBBM_CLOCK_DELAY_TP0, 0x11111111},
  663. {A6XX_RBBM_CLOCK_DELAY_TP1, 0x11111111},
  664. {A6XX_RBBM_CLOCK_DELAY_TP2, 0x11111111},
  665. {A6XX_RBBM_CLOCK_DELAY_TP3, 0x11111111},
  666. {A6XX_RBBM_CLOCK_DELAY2_TP0, 0x11111111},
  667. {A6XX_RBBM_CLOCK_DELAY2_TP1, 0x11111111},
  668. {A6XX_RBBM_CLOCK_DELAY2_TP2, 0x11111111},
  669. {A6XX_RBBM_CLOCK_DELAY2_TP3, 0x11111111},
  670. {A6XX_RBBM_CLOCK_DELAY3_TP0, 0x11111111},
  671. {A6XX_RBBM_CLOCK_DELAY3_TP1, 0x11111111},
  672. {A6XX_RBBM_CLOCK_DELAY3_TP2, 0x11111111},
  673. {A6XX_RBBM_CLOCK_DELAY3_TP3, 0x11111111},
  674. {A6XX_RBBM_CLOCK_DELAY4_TP0, 0x00011111},
  675. {A6XX_RBBM_CLOCK_DELAY4_TP1, 0x00011111},
  676. {A6XX_RBBM_CLOCK_DELAY4_TP2, 0x00011111},
  677. {A6XX_RBBM_CLOCK_DELAY4_TP3, 0x00011111},
  678. {A6XX_RBBM_CLOCK_CNTL_UCHE, 0x22222222},
  679. {A6XX_RBBM_CLOCK_CNTL2_UCHE, 0x22222222},
  680. {A6XX_RBBM_CLOCK_CNTL3_UCHE, 0x22222222},
  681. {A6XX_RBBM_CLOCK_CNTL4_UCHE, 0x00222222},
  682. {A6XX_RBBM_CLOCK_HYST_UCHE, 0x00000004},
  683. {A6XX_RBBM_CLOCK_DELAY_UCHE, 0x00000002},
  684. {A6XX_RBBM_CLOCK_CNTL_RB0, 0x22222222},
  685. {A6XX_RBBM_CLOCK_CNTL_RB1, 0x22222222},
  686. {A6XX_RBBM_CLOCK_CNTL_RB2, 0x22222222},
  687. {A6XX_RBBM_CLOCK_CNTL_RB3, 0x22222222},
  688. {A6XX_RBBM_CLOCK_CNTL2_RB0, 0x00002222},
  689. {A6XX_RBBM_CLOCK_CNTL2_RB1, 0x00002222},
  690. {A6XX_RBBM_CLOCK_CNTL2_RB2, 0x00002222},
  691. {A6XX_RBBM_CLOCK_CNTL2_RB3, 0x00002222},
  692. {A6XX_RBBM_CLOCK_CNTL_CCU0, 0x00002220},
  693. {A6XX_RBBM_CLOCK_CNTL_CCU1, 0x00002220},
  694. {A6XX_RBBM_CLOCK_CNTL_CCU2, 0x00002220},
  695. {A6XX_RBBM_CLOCK_CNTL_CCU3, 0x00002220},
  696. {A6XX_RBBM_CLOCK_HYST_RB_CCU0, 0x00040F00},
  697. {A6XX_RBBM_CLOCK_HYST_RB_CCU1, 0x00040F00},
  698. {A6XX_RBBM_CLOCK_HYST_RB_CCU2, 0x00040F00},
  699. {A6XX_RBBM_CLOCK_HYST_RB_CCU3, 0x00040F00},
  700. {A6XX_RBBM_CLOCK_CNTL_RAC, 0x05022022},
  701. {A6XX_RBBM_CLOCK_CNTL2_RAC, 0x00005555},
  702. {A6XX_RBBM_CLOCK_DELAY_RAC, 0x00000011},
  703. {A6XX_RBBM_CLOCK_HYST_RAC, 0x00445044},
  704. {A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM, 0x04222222},
  705. {A6XX_RBBM_CLOCK_MODE_GPC, 0x00222222},
  706. {A6XX_RBBM_CLOCK_MODE_VFD, 0x00002222},
  707. {A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM, 0x00000000},
  708. {A6XX_RBBM_CLOCK_HYST_GPC, 0x04104004},
  709. {A6XX_RBBM_CLOCK_HYST_VFD, 0x00000000},
  710. {A6XX_RBBM_CLOCK_DELAY_HLSQ, 0x00000000},
  711. {A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM, 0x00004000},
  712. {A6XX_RBBM_CLOCK_DELAY_GPC, 0x00000200},
  713. {A6XX_RBBM_CLOCK_DELAY_VFD, 0x00002222},
  714. {A6XX_RBBM_CLOCK_DELAY_HLSQ_2, 0x00000002},
  715. {A6XX_RBBM_CLOCK_MODE_HLSQ, 0x00002222},
  716. {A6XX_RBBM_CLOCK_CNTL_GMU_GX, 0x00000222},
  717. {A6XX_RBBM_CLOCK_DELAY_GMU_GX, 0x00000111},
  718. {A6XX_RBBM_CLOCK_HYST_GMU_GX, 0x00000555},
  719. };
  720. static const struct kgsl_regmap_list a630_vbif_regs[] = {
  721. {A6XX_VBIF_GATE_OFF_WRREQ_EN, 0x00000009},
  722. {A6XX_RBBM_VBIF_CLIENT_QOS_CNTL, 0x3},
  723. };
  724. /* For a615, a616, a618, A619, a630, a640 and a680 */
  725. static const struct adreno_protected_regs a630_protected_regs[] = {
  726. { A6XX_CP_PROTECT_REG + 0, 0x00000, 0x004ff, 0 },
  727. { A6XX_CP_PROTECT_REG + 1, 0x00501, 0x00506, 0 },
  728. { A6XX_CP_PROTECT_REG + 2, 0x0050b, 0x007ff, 0 },
  729. { A6XX_CP_PROTECT_REG + 3, 0x0050e, 0x0050e, 1 },
  730. { A6XX_CP_PROTECT_REG + 4, 0x00510, 0x00510, 1 },
  731. { A6XX_CP_PROTECT_REG + 5, 0x00534, 0x00534, 1 },
  732. { A6XX_CP_PROTECT_REG + 6, 0x00800, 0x00882, 1 },
  733. { A6XX_CP_PROTECT_REG + 7, 0x008a0, 0x008a8, 1 },
  734. { A6XX_CP_PROTECT_REG + 8, 0x008ab, 0x008cf, 1 },
  735. { A6XX_CP_PROTECT_REG + 9, 0x008d0, 0x0098c, 0 },
  736. { A6XX_CP_PROTECT_REG + 10, 0x00900, 0x0094d, 1 },
  737. { A6XX_CP_PROTECT_REG + 11, 0x0098d, 0x00bff, 1 },
  738. { A6XX_CP_PROTECT_REG + 12, 0x00e00, 0x00e01, 1 },
  739. { A6XX_CP_PROTECT_REG + 13, 0x00e03, 0x00e0f, 1 },
  740. { A6XX_CP_PROTECT_REG + 14, 0x03c00, 0x03cc3, 1 },
  741. { A6XX_CP_PROTECT_REG + 15, 0x03cc4, 0x05cc3, 0 },
  742. { A6XX_CP_PROTECT_REG + 16, 0x08630, 0x087ff, 1 },
  743. { A6XX_CP_PROTECT_REG + 17, 0x08e00, 0x08e00, 1 },
  744. { A6XX_CP_PROTECT_REG + 18, 0x08e08, 0x08e08, 1 },
  745. { A6XX_CP_PROTECT_REG + 19, 0x08e50, 0x08e6f, 1 },
  746. { A6XX_CP_PROTECT_REG + 20, 0x09624, 0x097ff, 1 },
  747. { A6XX_CP_PROTECT_REG + 21, 0x09e70, 0x09e71, 1 },
  748. { A6XX_CP_PROTECT_REG + 22, 0x09e78, 0x09fff, 1 },
  749. { A6XX_CP_PROTECT_REG + 23, 0x0a630, 0x0a7ff, 1 },
  750. { A6XX_CP_PROTECT_REG + 24, 0x0ae02, 0x0ae02, 1 },
  751. { A6XX_CP_PROTECT_REG + 25, 0x0ae50, 0x0b17f, 1 },
  752. { A6XX_CP_PROTECT_REG + 26, 0x0b604, 0x0b604, 1 },
  753. { A6XX_CP_PROTECT_REG + 27, 0x0be02, 0x0be03, 1 },
  754. { A6XX_CP_PROTECT_REG + 28, 0x0be20, 0x0d5ff, 1 },
  755. { A6XX_CP_PROTECT_REG + 29, 0x0f000, 0x0fbff, 1 },
  756. { A6XX_CP_PROTECT_REG + 30, 0x0fc00, 0x11bff, 0 },
  757. { A6XX_CP_PROTECT_REG + 31, 0x11c00, 0x11c00, 1 },
  758. { 0 },
  759. };
  760. static const struct adreno_a6xx_core adreno_gpu_core_a630v2 = {
  761. .base = {
  762. DEFINE_ADRENO_REV(ADRENO_REV_A630, 6, 3, 0, ANY_ID),
  763. .features = ADRENO_IFPC | ADRENO_CONTENT_PROTECTION |
  764. ADRENO_IOCOHERENT | ADRENO_PREEMPTION,
  765. .gpudev = &adreno_a630_gpudev.base,
  766. .perfcounters = &adreno_a630_perfcounters,
  767. .uche_gmem_alignment = SZ_1M,
  768. .gmem_size = SZ_1M,
  769. .bus_width = 32,
  770. .snapshot_size = SZ_1M,
  771. },
  772. .prim_fifo_threshold = 0x0018000,
  773. .gmu_major = 1,
  774. .gmu_minor = 3,
  775. .sqefw_name = "a630_sqe.fw",
  776. .gmufw_name = "a630_gmu.bin",
  777. .zap_name = "a630_zap.mdt",
  778. .hwcg = a630_hwcg_regs,
  779. .hwcg_count = ARRAY_SIZE(a630_hwcg_regs),
  780. .vbif = a630_vbif_regs,
  781. .vbif_count = ARRAY_SIZE(a630_vbif_regs),
  782. .hang_detect_cycles = 0xcfffff,
  783. .protected_regs = a630_protected_regs,
  784. .highest_bank_bit = 15,
  785. };
  786. /* For a615, a616, a618 and a619 */
  787. static const struct kgsl_regmap_list a615_hwcg_regs[] = {
  788. {A6XX_RBBM_CLOCK_CNTL_SP0, 0x02222222},
  789. {A6XX_RBBM_CLOCK_CNTL2_SP0, 0x02222220},
  790. {A6XX_RBBM_CLOCK_DELAY_SP0, 0x00000080},
  791. {A6XX_RBBM_CLOCK_HYST_SP0, 0x0000F3CF},
  792. {A6XX_RBBM_CLOCK_CNTL_TP0, 0x02222222},
  793. {A6XX_RBBM_CLOCK_CNTL_TP1, 0x02222222},
  794. {A6XX_RBBM_CLOCK_CNTL2_TP0, 0x22222222},
  795. {A6XX_RBBM_CLOCK_CNTL2_TP1, 0x22222222},
  796. {A6XX_RBBM_CLOCK_CNTL3_TP0, 0x22222222},
  797. {A6XX_RBBM_CLOCK_CNTL3_TP1, 0x22222222},
  798. {A6XX_RBBM_CLOCK_CNTL4_TP0, 0x00022222},
  799. {A6XX_RBBM_CLOCK_CNTL4_TP1, 0x00022222},
  800. {A6XX_RBBM_CLOCK_HYST_TP0, 0x77777777},
  801. {A6XX_RBBM_CLOCK_HYST_TP1, 0x77777777},
  802. {A6XX_RBBM_CLOCK_HYST2_TP0, 0x77777777},
  803. {A6XX_RBBM_CLOCK_HYST2_TP1, 0x77777777},
  804. {A6XX_RBBM_CLOCK_HYST3_TP0, 0x77777777},
  805. {A6XX_RBBM_CLOCK_HYST3_TP1, 0x77777777},
  806. {A6XX_RBBM_CLOCK_HYST4_TP0, 0x00077777},
  807. {A6XX_RBBM_CLOCK_HYST4_TP1, 0x00077777},
  808. {A6XX_RBBM_CLOCK_DELAY_TP0, 0x11111111},
  809. {A6XX_RBBM_CLOCK_DELAY_TP1, 0x11111111},
  810. {A6XX_RBBM_CLOCK_DELAY2_TP0, 0x11111111},
  811. {A6XX_RBBM_CLOCK_DELAY2_TP1, 0x11111111},
  812. {A6XX_RBBM_CLOCK_DELAY3_TP0, 0x11111111},
  813. {A6XX_RBBM_CLOCK_DELAY3_TP1, 0x11111111},
  814. {A6XX_RBBM_CLOCK_DELAY4_TP0, 0x00011111},
  815. {A6XX_RBBM_CLOCK_DELAY4_TP1, 0x00011111},
  816. {A6XX_RBBM_CLOCK_CNTL_UCHE, 0x22222222},
  817. {A6XX_RBBM_CLOCK_CNTL2_UCHE, 0x22222222},
  818. {A6XX_RBBM_CLOCK_CNTL3_UCHE, 0x22222222},
  819. {A6XX_RBBM_CLOCK_CNTL4_UCHE, 0x00222222},
  820. {A6XX_RBBM_CLOCK_HYST_UCHE, 0x00000004},
  821. {A6XX_RBBM_CLOCK_DELAY_UCHE, 0x00000002},
  822. {A6XX_RBBM_CLOCK_CNTL_RB0, 0x22222222},
  823. {A6XX_RBBM_CLOCK_CNTL2_RB0, 0x00002222},
  824. {A6XX_RBBM_CLOCK_CNTL_CCU0, 0x00002220},
  825. {A6XX_RBBM_CLOCK_CNTL_CCU1, 0x00002220},
  826. {A6XX_RBBM_CLOCK_CNTL_CCU2, 0x00002220},
  827. {A6XX_RBBM_CLOCK_CNTL_CCU3, 0x00002220},
  828. {A6XX_RBBM_CLOCK_HYST_RB_CCU0, 0x00040F00},
  829. {A6XX_RBBM_CLOCK_HYST_RB_CCU1, 0x00040F00},
  830. {A6XX_RBBM_CLOCK_HYST_RB_CCU2, 0x00040F00},
  831. {A6XX_RBBM_CLOCK_HYST_RB_CCU3, 0x00040F00},
  832. {A6XX_RBBM_CLOCK_CNTL_RAC, 0x05022022},
  833. {A6XX_RBBM_CLOCK_CNTL2_RAC, 0x00005555},
  834. {A6XX_RBBM_CLOCK_DELAY_RAC, 0x00000011},
  835. {A6XX_RBBM_CLOCK_HYST_RAC, 0x00445044},
  836. {A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM, 0x04222222},
  837. {A6XX_RBBM_CLOCK_MODE_GPC, 0x00222222},
  838. {A6XX_RBBM_CLOCK_MODE_VFD, 0x00002222},
  839. {A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM, 0x00000000},
  840. {A6XX_RBBM_CLOCK_HYST_GPC, 0x04104004},
  841. {A6XX_RBBM_CLOCK_HYST_VFD, 0x00000000},
  842. {A6XX_RBBM_CLOCK_DELAY_HLSQ, 0x00000000},
  843. {A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM, 0x00004000},
  844. {A6XX_RBBM_CLOCK_DELAY_GPC, 0x00000200},
  845. {A6XX_RBBM_CLOCK_DELAY_VFD, 0x00002222},
  846. {A6XX_RBBM_CLOCK_DELAY_HLSQ_2, 0x00000002},
  847. {A6XX_RBBM_CLOCK_MODE_HLSQ, 0x00002222},
  848. {A6XX_RBBM_CLOCK_CNTL_GMU_GX, 0x00000222},
  849. {A6XX_RBBM_CLOCK_DELAY_GMU_GX, 0x00000111},
  850. {A6XX_RBBM_CLOCK_HYST_GMU_GX, 0x00000555}
  851. };
  852. /* For a615, a616, a618 and a619 */
  853. static const struct kgsl_regmap_list a615_gbif_regs[] = {
  854. {A6XX_RBBM_VBIF_CLIENT_QOS_CNTL, 0x3},
  855. };
  856. static const struct adreno_a6xx_core adreno_gpu_core_a615 = {
  857. .base = {
  858. DEFINE_ADRENO_REV(ADRENO_REV_A615, 6, 1, 5, ANY_ID),
  859. .features = ADRENO_PREEMPTION |
  860. ADRENO_CONTENT_PROTECTION | ADRENO_IFPC |
  861. ADRENO_IOCOHERENT,
  862. .gpudev = &adreno_a630_gpudev.base,
  863. .perfcounters = &adreno_a6xx_legacy_perfcounters,
  864. .uche_gmem_alignment = SZ_1M,
  865. .gmem_size = SZ_512K,
  866. .bus_width = 32,
  867. .snapshot_size = 600 * SZ_1K,
  868. },
  869. .prim_fifo_threshold = 0x0018000,
  870. .gmu_major = 1,
  871. .gmu_minor = 3,
  872. .sqefw_name = "a630_sqe.fw",
  873. .gmufw_name = "a630_gmu.bin",
  874. .zap_name = "a615_zap.mdt",
  875. .hwcg = a615_hwcg_regs,
  876. .hwcg_count = ARRAY_SIZE(a615_hwcg_regs),
  877. .vbif = a615_gbif_regs,
  878. .vbif_count = ARRAY_SIZE(a615_gbif_regs),
  879. .hang_detect_cycles = 0xcfffff,
  880. .protected_regs = a630_protected_regs,
  881. .highest_bank_bit = 14,
  882. };
  883. static const struct adreno_a6xx_core adreno_gpu_core_a618 = {
  884. .base = {
  885. DEFINE_ADRENO_REV(ADRENO_REV_A618, 6, 1, 8, ANY_ID),
  886. .features = ADRENO_PREEMPTION |
  887. ADRENO_CONTENT_PROTECTION | ADRENO_IFPC |
  888. ADRENO_IOCOHERENT,
  889. .gpudev = &adreno_a630_gpudev.base,
  890. .perfcounters = &adreno_a6xx_legacy_perfcounters,
  891. .uche_gmem_alignment = SZ_1M,
  892. .gmem_size = SZ_512K,
  893. .bus_width = 32,
  894. .snapshot_size = SZ_1M,
  895. },
  896. .prim_fifo_threshold = 0x0018000,
  897. .gmu_major = 1,
  898. .gmu_minor = 7,
  899. .sqefw_name = "a630_sqe.fw",
  900. .gmufw_name = "a630_gmu.bin",
  901. .zap_name = "a615_zap.mdt",
  902. .hwcg = a615_hwcg_regs,
  903. .hwcg_count = ARRAY_SIZE(a615_hwcg_regs),
  904. .vbif = a615_gbif_regs,
  905. .vbif_count = ARRAY_SIZE(a615_gbif_regs),
  906. .hang_detect_cycles = 0x3fffff,
  907. .protected_regs = a630_protected_regs,
  908. .highest_bank_bit = 14,
  909. };
  910. static const struct adreno_a6xx_core adreno_gpu_core_a619 = {
  911. .base = {
  912. DEFINE_ADRENO_REV(ADRENO_REV_A619, 6, 1, 9, ANY_ID),
  913. .features = ADRENO_PREEMPTION |
  914. ADRENO_CONTENT_PROTECTION | ADRENO_IFPC |
  915. ADRENO_IOCOHERENT,
  916. .gpudev = &adreno_a630_gpudev.base,
  917. .perfcounters = &adreno_a6xx_legacy_perfcounters,
  918. .uche_gmem_alignment = SZ_1M,
  919. .gmem_size = SZ_512K,
  920. .bus_width = 32,
  921. .snapshot_size = SZ_2M,
  922. },
  923. .prim_fifo_threshold = 0x0018000,
  924. .gmu_major = 1,
  925. .gmu_minor = 9,
  926. .sqefw_name = "a630_sqe.fw",
  927. .gmufw_name = "a619_gmu.bin",
  928. .zap_name = "a615_zap.mdt",
  929. .hwcg = a615_hwcg_regs,
  930. .hwcg_count = ARRAY_SIZE(a615_hwcg_regs),
  931. .vbif = a615_gbif_regs,
  932. .vbif_count = ARRAY_SIZE(a615_gbif_regs),
  933. .hang_detect_cycles = 0x3fffff,
  934. .protected_regs = a630_protected_regs,
  935. .highest_bank_bit = 14,
  936. };
  937. static const struct adreno_a6xx_core adreno_gpu_core_a619_variant = {
  938. .base = {
  939. DEFINE_ADRENO_REV(ADRENO_REV_A619, 6, 1, 9, ANY_ID),
  940. .compatible = "qcom,adreno-gpu-a619-holi",
  941. .features = ADRENO_PREEMPTION | ADRENO_CONTENT_PROTECTION,
  942. .gpudev = &adreno_a619_holi_gpudev,
  943. .perfcounters = &adreno_a6xx_legacy_perfcounters,
  944. .uche_gmem_alignment = SZ_1M,
  945. .gmem_size = SZ_512K,
  946. .bus_width = 32,
  947. .snapshot_size = SZ_2M,
  948. },
  949. .prim_fifo_threshold = 0x0018000,
  950. .sqefw_name = "a630_sqe.fw",
  951. .zap_name = "gen6_3_25_0_zap.mdt",
  952. .hwcg = a615_hwcg_regs,
  953. .hwcg_count = ARRAY_SIZE(a615_hwcg_regs),
  954. .vbif = a615_gbif_regs,
  955. .vbif_count = ARRAY_SIZE(a615_gbif_regs),
  956. .hang_detect_cycles = 0x3fffff,
  957. .protected_regs = a630_protected_regs,
  958. .gx_cpr_toggle = true,
  959. .highest_bank_bit = 14,
  960. };
  961. static const struct kgsl_regmap_list a620_hwcg_regs[] = {
  962. {A6XX_RBBM_CLOCK_CNTL_SP0, 0x02222222},
  963. {A6XX_RBBM_CLOCK_CNTL2_SP0, 0x02222220},
  964. {A6XX_RBBM_CLOCK_DELAY_SP0, 0x00000080},
  965. {A6XX_RBBM_CLOCK_HYST_SP0, 0x0000F3CF},
  966. {A6XX_RBBM_CLOCK_CNTL_TP0, 0x02222222},
  967. {A6XX_RBBM_CLOCK_CNTL2_TP0, 0x22222222},
  968. {A6XX_RBBM_CLOCK_CNTL3_TP0, 0x22222222},
  969. {A6XX_RBBM_CLOCK_CNTL4_TP0, 0x00022222},
  970. {A6XX_RBBM_CLOCK_DELAY_TP0, 0x11111111},
  971. {A6XX_RBBM_CLOCK_DELAY2_TP0, 0x11111111},
  972. {A6XX_RBBM_CLOCK_DELAY3_TP0, 0x11111111},
  973. {A6XX_RBBM_CLOCK_DELAY4_TP0, 0x00011111},
  974. {A6XX_RBBM_CLOCK_HYST_TP0, 0x77777777},
  975. {A6XX_RBBM_CLOCK_HYST2_TP0, 0x77777777},
  976. {A6XX_RBBM_CLOCK_HYST3_TP0, 0x77777777},
  977. {A6XX_RBBM_CLOCK_HYST4_TP0, 0x00077777},
  978. {A6XX_RBBM_CLOCK_CNTL_RB0, 0x22222222},
  979. {A6XX_RBBM_CLOCK_CNTL2_RB0, 0x01002222},
  980. {A6XX_RBBM_CLOCK_CNTL_CCU0, 0x00002220},
  981. {A6XX_RBBM_CLOCK_HYST_RB_CCU0, 0x00040F00},
  982. {A6XX_RBBM_CLOCK_CNTL_RAC, 0x25222022},
  983. {A6XX_RBBM_CLOCK_CNTL2_RAC, 0x00005555},
  984. {A6XX_RBBM_CLOCK_DELAY_RAC, 0x00000011},
  985. {A6XX_RBBM_CLOCK_HYST_RAC, 0x00445044},
  986. {A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM, 0x04222222},
  987. {A6XX_RBBM_CLOCK_MODE_VFD, 0x00002222},
  988. {A6XX_RBBM_CLOCK_MODE_GPC, 0x00222222},
  989. {A6XX_RBBM_CLOCK_DELAY_HLSQ_2, 0x00000002},
  990. {A6XX_RBBM_CLOCK_MODE_HLSQ, 0x00002222},
  991. {A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM, 0x00004000},
  992. {A6XX_RBBM_CLOCK_DELAY_VFD, 0x00002222},
  993. {A6XX_RBBM_CLOCK_DELAY_GPC, 0x00000200},
  994. {A6XX_RBBM_CLOCK_DELAY_HLSQ, 0x00000000},
  995. {A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM, 0x00000000},
  996. {A6XX_RBBM_CLOCK_HYST_VFD, 0x00000000},
  997. {A6XX_RBBM_CLOCK_HYST_GPC, 0x04104004},
  998. {A6XX_RBBM_CLOCK_HYST_HLSQ, 0x00000000},
  999. {A6XX_RBBM_CLOCK_CNTL_TEX_FCHE, 0x00000222},
  1000. {A6XX_RBBM_CLOCK_DELAY_TEX_FCHE, 0x00000111},
  1001. {A6XX_RBBM_CLOCK_HYST_TEX_FCHE, 0x00000777},
  1002. {A6XX_RBBM_CLOCK_CNTL_UCHE, 0x22222222},
  1003. {A6XX_RBBM_CLOCK_HYST_UCHE, 0x00000004},
  1004. {A6XX_RBBM_CLOCK_DELAY_UCHE, 0x00000002},
  1005. {A6XX_RBBM_ISDB_CNT, 0x00000182},
  1006. {A6XX_RBBM_RAC_THRESHOLD_CNT, 0x00000000},
  1007. {A6XX_RBBM_SP_HYST_CNT, 0x00000000},
  1008. {A6XX_RBBM_CLOCK_CNTL_GMU_GX, 0x00000222},
  1009. {A6XX_RBBM_CLOCK_DELAY_GMU_GX, 0x00000111},
  1010. {A6XX_RBBM_CLOCK_HYST_GMU_GX, 0x00000555},
  1011. };
  1012. /* a620, a621 and a650 */
  1013. static const struct kgsl_regmap_list a650_gbif_regs[] = {
  1014. {A6XX_GBIF_QSB_SIDE0, 0x00071620},
  1015. {A6XX_GBIF_QSB_SIDE1, 0x00071620},
  1016. {A6XX_GBIF_QSB_SIDE2, 0x00071620},
  1017. {A6XX_GBIF_QSB_SIDE3, 0x00071620},
  1018. {A6XX_RBBM_GBIF_CLIENT_QOS_CNTL, 0x3},
  1019. };
  1020. /* These are for a620, a621 and a650 */
  1021. static const struct adreno_protected_regs a620_protected_regs[] = {
  1022. { A6XX_CP_PROTECT_REG + 0, 0x00000, 0x004ff, 0 },
  1023. { A6XX_CP_PROTECT_REG + 1, 0x00501, 0x00506, 0 },
  1024. { A6XX_CP_PROTECT_REG + 2, 0x0050b, 0x007ff, 0 },
  1025. { A6XX_CP_PROTECT_REG + 3, 0x0050e, 0x0050e, 1 },
  1026. { A6XX_CP_PROTECT_REG + 4, 0x00510, 0x00510, 1 },
  1027. { A6XX_CP_PROTECT_REG + 5, 0x00534, 0x00534, 1 },
  1028. { A6XX_CP_PROTECT_REG + 6, 0x00800, 0x00882, 1 },
  1029. { A6XX_CP_PROTECT_REG + 7, 0x008a0, 0x008a8, 1 },
  1030. { A6XX_CP_PROTECT_REG + 8, 0x008ab, 0x008cf, 1 },
  1031. { A6XX_CP_PROTECT_REG + 9, 0x008d0, 0x0098c, 0 },
  1032. { A6XX_CP_PROTECT_REG + 10, 0x00900, 0x0094d, 1 },
  1033. { A6XX_CP_PROTECT_REG + 11, 0x0098d, 0x00bff, 1 },
  1034. { A6XX_CP_PROTECT_REG + 12, 0x00e00, 0x00e01, 1 },
  1035. { A6XX_CP_PROTECT_REG + 13, 0x00e03, 0x00e0f, 1 },
  1036. { A6XX_CP_PROTECT_REG + 14, 0x03c00, 0x03cc3, 1 },
  1037. { A6XX_CP_PROTECT_REG + 15, 0x03cc4, 0x05cc3, 0 },
  1038. { A6XX_CP_PROTECT_REG + 16, 0x08630, 0x087ff, 1 },
  1039. { A6XX_CP_PROTECT_REG + 17, 0x08e00, 0x08e00, 1 },
  1040. { A6XX_CP_PROTECT_REG + 18, 0x08e08, 0x08e08, 1 },
  1041. { A6XX_CP_PROTECT_REG + 19, 0x08e50, 0x08e6f, 1 },
  1042. { A6XX_CP_PROTECT_REG + 20, 0x08e80, 0x090ff, 1 },
  1043. { A6XX_CP_PROTECT_REG + 21, 0x09624, 0x097ff, 1 },
  1044. { A6XX_CP_PROTECT_REG + 22, 0x09e60, 0x09e71, 1 },
  1045. { A6XX_CP_PROTECT_REG + 23, 0x09e78, 0x09fff, 1 },
  1046. { A6XX_CP_PROTECT_REG + 24, 0x0a630, 0x0a7ff, 1 },
  1047. { A6XX_CP_PROTECT_REG + 25, 0x0ae02, 0x0ae02, 1 },
  1048. { A6XX_CP_PROTECT_REG + 26, 0x0ae50, 0x0b17f, 1 },
  1049. { A6XX_CP_PROTECT_REG + 27, 0x0b604, 0x0b604, 1 },
  1050. { A6XX_CP_PROTECT_REG + 28, 0x0b608, 0x0b60f, 1 },
  1051. { A6XX_CP_PROTECT_REG + 29, 0x0be02, 0x0be03, 1 },
  1052. { A6XX_CP_PROTECT_REG + 30, 0x0be20, 0x0d5ff, 1 },
  1053. { A6XX_CP_PROTECT_REG + 31, 0x0f000, 0x0fbff, 1 },
  1054. { A6XX_CP_PROTECT_REG + 32, 0x0fc00, 0x11bff, 0 },
  1055. { A6XX_CP_PROTECT_REG + 33, 0x18400, 0x1a3ff, 1 },
  1056. { A6XX_CP_PROTECT_REG + 34, 0x1a800, 0x1c7ff, 1 },
  1057. { A6XX_CP_PROTECT_REG + 35, 0x1c800, 0x1e7ff, 1 },
  1058. { A6XX_CP_PROTECT_REG + 36, 0x1f400, 0x1f843, 1 },
  1059. { A6XX_CP_PROTECT_REG + 37, 0x1f844, 0x1f8bf, 0 },
  1060. { A6XX_CP_PROTECT_REG + 38, 0x1f887, 0x1f8a2, 1 },
  1061. { A6XX_CP_PROTECT_REG + 47, 0x1f8c0, 0x1f8c0, 1 },
  1062. { 0 },
  1063. };
  1064. static const struct adreno_a6xx_core adreno_gpu_core_a620 = {
  1065. .base = {
  1066. DEFINE_ADRENO_REV(ADRENO_REV_A620, 6, 2, 0, ANY_ID),
  1067. .features = ADRENO_CONTENT_PROTECTION | ADRENO_IOCOHERENT |
  1068. ADRENO_IFPC | ADRENO_PREEMPTION | ADRENO_ACD |
  1069. ADRENO_APRIV,
  1070. .gpudev = &adreno_a630_gpudev.base,
  1071. .perfcounters = &adreno_a6xx_perfcounters,
  1072. .uche_gmem_alignment = 0,
  1073. .gmem_size = SZ_512K,
  1074. .bus_width = 32,
  1075. .snapshot_size = 2 * SZ_1M,
  1076. },
  1077. .prim_fifo_threshold = 0x0010000,
  1078. .gmu_major = 2,
  1079. .gmu_minor = 0,
  1080. .sqefw_name = "a650_sqe.fw",
  1081. .gmufw_name = "a650_gmu.bin",
  1082. .zap_name = "a620_zap.mdt",
  1083. .hwcg = a620_hwcg_regs,
  1084. .hwcg_count = ARRAY_SIZE(a620_hwcg_regs),
  1085. .vbif = a650_gbif_regs,
  1086. .vbif_count = ARRAY_SIZE(a650_gbif_regs),
  1087. .veto_fal10 = true,
  1088. .hang_detect_cycles = 0x3ffff,
  1089. .protected_regs = a620_protected_regs,
  1090. .disable_tseskip = true,
  1091. .highest_bank_bit = 14,
  1092. };
  1093. static const struct adreno_a6xx_core adreno_gpu_core_a621 = {
  1094. .base = {
  1095. DEFINE_ADRENO_REV(ADRENO_REV_A621, 6, 2, 1, ANY_ID),
  1096. .compatible = "qcom,adreno-gpu-a621",
  1097. .features = ADRENO_CONTENT_PROTECTION | ADRENO_IOCOHERENT |
  1098. ADRENO_APRIV | ADRENO_LSR | ADRENO_PREEMPTION |
  1099. ADRENO_IFPC,
  1100. .gpudev = &adreno_a6xx_hwsched_gpudev.base,
  1101. .perfcounters = &adreno_a6xx_hwsched_perfcounters,
  1102. .uche_gmem_alignment = 0,
  1103. .gmem_size = SZ_512K,
  1104. .bus_width = 32,
  1105. .snapshot_size = 2 * SZ_1M,
  1106. },
  1107. .prim_fifo_threshold = 0x0010000,
  1108. .gmu_major = 2,
  1109. .gmu_minor = 0,
  1110. .sqefw_name = "a650_sqe.fw",
  1111. .gmufw_name = "a621_gmu.bin",
  1112. .zap_name = "a620_zap.mdt",
  1113. .hwcg = a620_hwcg_regs,
  1114. .hwcg_count = ARRAY_SIZE(a620_hwcg_regs),
  1115. .vbif = a650_gbif_regs,
  1116. .vbif_count = ARRAY_SIZE(a650_gbif_regs),
  1117. .veto_fal10 = true,
  1118. .pdc_in_aop = true,
  1119. .hang_detect_cycles = 0x3ffff,
  1120. .protected_regs = a620_protected_regs,
  1121. .disable_tseskip = true,
  1122. .highest_bank_bit = 13,
  1123. };
  1124. static const struct kgsl_regmap_list a640_hwcg_regs[] = {
  1125. {A6XX_RBBM_CLOCK_CNTL_SP0, 0x02222222},
  1126. {A6XX_RBBM_CLOCK_CNTL2_SP0, 0x02222220},
  1127. {A6XX_RBBM_CLOCK_DELAY_SP0, 0x00000080},
  1128. {A6XX_RBBM_CLOCK_HYST_SP0, 0x0000F3CF},
  1129. {A6XX_RBBM_CLOCK_CNTL_TP0, 0x02222222},
  1130. {A6XX_RBBM_CLOCK_CNTL2_TP0, 0x22222222},
  1131. {A6XX_RBBM_CLOCK_CNTL3_TP0, 0x22222222},
  1132. {A6XX_RBBM_CLOCK_CNTL4_TP0, 0x00022222},
  1133. {A6XX_RBBM_CLOCK_DELAY_TP0, 0x11111111},
  1134. {A6XX_RBBM_CLOCK_DELAY2_TP0, 0x11111111},
  1135. {A6XX_RBBM_CLOCK_DELAY3_TP0, 0x11111111},
  1136. {A6XX_RBBM_CLOCK_DELAY4_TP0, 0x00011111},
  1137. {A6XX_RBBM_CLOCK_HYST_TP0, 0x77777777},
  1138. {A6XX_RBBM_CLOCK_HYST2_TP0, 0x77777777},
  1139. {A6XX_RBBM_CLOCK_HYST3_TP0, 0x77777777},
  1140. {A6XX_RBBM_CLOCK_HYST4_TP0, 0x00077777},
  1141. {A6XX_RBBM_CLOCK_CNTL_RB0, 0x22222222},
  1142. {A6XX_RBBM_CLOCK_CNTL2_RB0, 0x01002222},
  1143. {A6XX_RBBM_CLOCK_CNTL_CCU0, 0x00002220},
  1144. {A6XX_RBBM_CLOCK_HYST_RB_CCU0, 0x00040F00},
  1145. {A6XX_RBBM_CLOCK_CNTL_RAC, 0x05222022},
  1146. {A6XX_RBBM_CLOCK_CNTL2_RAC, 0x00005555},
  1147. {A6XX_RBBM_CLOCK_DELAY_RAC, 0x00000011},
  1148. {A6XX_RBBM_CLOCK_HYST_RAC, 0x00445044},
  1149. {A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM, 0x04222222},
  1150. {A6XX_RBBM_CLOCK_MODE_VFD, 0x00002222},
  1151. {A6XX_RBBM_CLOCK_MODE_GPC, 0x00222222},
  1152. {A6XX_RBBM_CLOCK_DELAY_HLSQ_2, 0x00000002},
  1153. {A6XX_RBBM_CLOCK_MODE_HLSQ, 0x00002222},
  1154. {A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM, 0x00004000},
  1155. {A6XX_RBBM_CLOCK_DELAY_VFD, 0x00002222},
  1156. {A6XX_RBBM_CLOCK_DELAY_GPC, 0x00000200},
  1157. {A6XX_RBBM_CLOCK_DELAY_HLSQ, 0x00000000},
  1158. {A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM, 0x00000000},
  1159. {A6XX_RBBM_CLOCK_HYST_VFD, 0x00000000},
  1160. {A6XX_RBBM_CLOCK_HYST_GPC, 0x04104004},
  1161. {A6XX_RBBM_CLOCK_HYST_HLSQ, 0x00000000},
  1162. {A6XX_RBBM_CLOCK_CNTL_TEX_FCHE, 0x00000222},
  1163. {A6XX_RBBM_CLOCK_DELAY_TEX_FCHE, 0x00000111},
  1164. {A6XX_RBBM_CLOCK_HYST_TEX_FCHE, 0x00000000},
  1165. {A6XX_RBBM_CLOCK_CNTL_UCHE, 0x22222222},
  1166. {A6XX_RBBM_CLOCK_HYST_UCHE, 0x00000004},
  1167. {A6XX_RBBM_CLOCK_DELAY_UCHE, 0x00000002},
  1168. {A6XX_RBBM_ISDB_CNT, 0x00000182},
  1169. {A6XX_RBBM_RAC_THRESHOLD_CNT, 0x00000000},
  1170. {A6XX_RBBM_SP_HYST_CNT, 0x00000000},
  1171. {A6XX_RBBM_CLOCK_CNTL_GMU_GX, 0x00000222},
  1172. {A6XX_RBBM_CLOCK_DELAY_GMU_GX, 0x00000111},
  1173. {A6XX_RBBM_CLOCK_HYST_GMU_GX, 0x00000555},
  1174. };
  1175. static const struct kgsl_regmap_list a680_hwcg_regs[] = {
  1176. {A6XX_RBBM_CLOCK_CNTL_SP0, 0x02222222},
  1177. {A6XX_RBBM_CLOCK_CNTL2_SP0, 0x02222220},
  1178. {A6XX_RBBM_CLOCK_DELAY_SP0, 0x00000080},
  1179. {A6XX_RBBM_CLOCK_HYST_SP0, 0x0000F3CF},
  1180. {A6XX_RBBM_CLOCK_CNTL_TP0, 0x22222222},
  1181. {A6XX_RBBM_CLOCK_CNTL2_TP0, 0x22222222},
  1182. {A6XX_RBBM_CLOCK_CNTL3_TP0, 0x22222222},
  1183. {A6XX_RBBM_CLOCK_CNTL4_TP0, 0x00022222},
  1184. {A6XX_RBBM_CLOCK_DELAY_TP0, 0x11111111},
  1185. {A6XX_RBBM_CLOCK_DELAY2_TP0, 0x11111111},
  1186. {A6XX_RBBM_CLOCK_DELAY3_TP0, 0x11111111},
  1187. {A6XX_RBBM_CLOCK_DELAY4_TP0, 0x00011111},
  1188. {A6XX_RBBM_CLOCK_HYST_TP0, 0x00000000},
  1189. {A6XX_RBBM_CLOCK_HYST2_TP0, 0x00000000},
  1190. {A6XX_RBBM_CLOCK_HYST3_TP0, 0x00000000},
  1191. {A6XX_RBBM_CLOCK_HYST4_TP0, 0x00000000},
  1192. {A6XX_RBBM_CLOCK_CNTL_RB0, 0x22222222},
  1193. {A6XX_RBBM_CLOCK_CNTL2_RB0, 0x01002222},
  1194. {A6XX_RBBM_CLOCK_CNTL_CCU0, 0x00002220},
  1195. {A6XX_RBBM_CLOCK_HYST_RB_CCU0, 0x00040F00},
  1196. {A6XX_RBBM_CLOCK_CNTL_RAC, 0x05222022},
  1197. {A6XX_RBBM_CLOCK_CNTL2_RAC, 0x00005555},
  1198. {A6XX_RBBM_CLOCK_DELAY_RAC, 0x00000011},
  1199. {A6XX_RBBM_CLOCK_HYST_RAC, 0x00445044},
  1200. {A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM, 0x04222222},
  1201. {A6XX_RBBM_CLOCK_MODE_VFD, 0x00002222},
  1202. {A6XX_RBBM_CLOCK_MODE_GPC, 0x00222222},
  1203. {A6XX_RBBM_CLOCK_DELAY_HLSQ_2, 0x00000002},
  1204. {A6XX_RBBM_CLOCK_MODE_HLSQ, 0x00002222},
  1205. {A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM, 0x00004000},
  1206. {A6XX_RBBM_CLOCK_DELAY_VFD, 0x00002222},
  1207. {A6XX_RBBM_CLOCK_DELAY_GPC, 0x00000200},
  1208. {A6XX_RBBM_CLOCK_DELAY_HLSQ, 0x00000000},
  1209. {A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM, 0x00000000},
  1210. {A6XX_RBBM_CLOCK_HYST_VFD, 0x00000000},
  1211. {A6XX_RBBM_CLOCK_HYST_GPC, 0x04104004},
  1212. {A6XX_RBBM_CLOCK_HYST_HLSQ, 0x00000000},
  1213. {A6XX_RBBM_CLOCK_CNTL_UCHE, 0x22222222},
  1214. {A6XX_RBBM_CLOCK_HYST_UCHE, 0x00000004},
  1215. {A6XX_RBBM_CLOCK_DELAY_UCHE, 0x00000002},
  1216. {A6XX_RBBM_CLOCK_CNTL, 0x8AA8AA82},
  1217. {A6XX_RBBM_ISDB_CNT, 0x00000182},
  1218. {A6XX_RBBM_RAC_THRESHOLD_CNT, 0x00000000},
  1219. {A6XX_RBBM_SP_HYST_CNT, 0x00000000},
  1220. {A6XX_RBBM_CLOCK_CNTL_GMU_GX, 0x00000222},
  1221. {A6XX_RBBM_CLOCK_DELAY_GMU_GX, 0x00000111},
  1222. {A6XX_RBBM_CLOCK_HYST_GMU_GX, 0x00000555},
  1223. {A6XX_GMUGX_GMU_SP_RF_CONTROL_0, 0x00000001},
  1224. {A6XX_GMUGX_GMU_SP_RF_CONTROL_1, 0x00000001},
  1225. };
  1226. /* These apply to a640, a680, a612, a610 and a702 */
  1227. static const struct kgsl_regmap_list a640_vbif_regs[] = {
  1228. {A6XX_GBIF_QSB_SIDE0, 0x00071620},
  1229. {A6XX_GBIF_QSB_SIDE1, 0x00071620},
  1230. {A6XX_GBIF_QSB_SIDE2, 0x00071620},
  1231. {A6XX_GBIF_QSB_SIDE3, 0x00071620},
  1232. {A6XX_RBBM_GBIF_CLIENT_QOS_CNTL, 0x3},
  1233. };
  1234. static const struct adreno_a6xx_core adreno_gpu_core_a640 = {
  1235. .base = {
  1236. DEFINE_ADRENO_REV(ADRENO_REV_A640, 6, 4, 0, ANY_ID),
  1237. .features = ADRENO_CONTENT_PROTECTION | ADRENO_IOCOHERENT |
  1238. ADRENO_IFPC | ADRENO_PREEMPTION | ADRENO_L3_VOTE,
  1239. .gpudev = &adreno_a6xx_gmu_gpudev.base,
  1240. .perfcounters = &adreno_a6xx_legacy_perfcounters,
  1241. .uche_gmem_alignment = SZ_1M,
  1242. .gmem_size = SZ_1M, //Verified 1MB
  1243. .bus_width = 32,
  1244. .snapshot_size = 2 * SZ_1M,
  1245. },
  1246. .prim_fifo_threshold = 0x00200000,
  1247. .gmu_major = 2,
  1248. .gmu_minor = 0,
  1249. .sqefw_name = "a630_sqe.fw",
  1250. .gmufw_name = "a640_gmu.bin",
  1251. .zap_name = "a640_zap.mdt",
  1252. .hwcg = a640_hwcg_regs,
  1253. .hwcg_count = ARRAY_SIZE(a640_hwcg_regs),
  1254. .vbif = a640_vbif_regs,
  1255. .vbif_count = ARRAY_SIZE(a640_vbif_regs),
  1256. .hang_detect_cycles = 0xcfffff,
  1257. .protected_regs = a630_protected_regs,
  1258. .disable_tseskip = true,
  1259. .highest_bank_bit = 15,
  1260. };
  1261. static const struct kgsl_regmap_list a650_hwcg_regs[] = {
  1262. {A6XX_RBBM_CLOCK_CNTL_SP0, 0x02222222},
  1263. {A6XX_RBBM_CLOCK_CNTL2_SP0, 0x02222220},
  1264. {A6XX_RBBM_CLOCK_DELAY_SP0, 0x00000080},
  1265. {A6XX_RBBM_CLOCK_HYST_SP0, 0x0000F3CF},
  1266. {A6XX_RBBM_CLOCK_CNTL_TP0, 0x02222222},
  1267. {A6XX_RBBM_CLOCK_CNTL2_TP0, 0x22222222},
  1268. {A6XX_RBBM_CLOCK_CNTL3_TP0, 0x22222222},
  1269. {A6XX_RBBM_CLOCK_CNTL4_TP0, 0x00022222},
  1270. {A6XX_RBBM_CLOCK_DELAY_TP0, 0x11111111},
  1271. {A6XX_RBBM_CLOCK_DELAY2_TP0, 0x11111111},
  1272. {A6XX_RBBM_CLOCK_DELAY3_TP0, 0x11111111},
  1273. {A6XX_RBBM_CLOCK_DELAY4_TP0, 0x00011111},
  1274. {A6XX_RBBM_CLOCK_HYST_TP0, 0x77777777},
  1275. {A6XX_RBBM_CLOCK_HYST2_TP0, 0x77777777},
  1276. {A6XX_RBBM_CLOCK_HYST3_TP0, 0x77777777},
  1277. {A6XX_RBBM_CLOCK_HYST4_TP0, 0x00077777},
  1278. {A6XX_RBBM_CLOCK_CNTL_RB0, 0x22222222},
  1279. {A6XX_RBBM_CLOCK_CNTL2_RB0, 0x01002222},
  1280. {A6XX_RBBM_CLOCK_CNTL_CCU0, 0x00002220},
  1281. {A6XX_RBBM_CLOCK_HYST_RB_CCU0, 0x00040F00},
  1282. {A6XX_RBBM_CLOCK_CNTL_RAC, 0x25222022},
  1283. {A6XX_RBBM_CLOCK_CNTL2_RAC, 0x00005555},
  1284. {A6XX_RBBM_CLOCK_DELAY_RAC, 0x00000011},
  1285. {A6XX_RBBM_CLOCK_HYST_RAC, 0x00445044},
  1286. {A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM, 0x04222222},
  1287. {A6XX_RBBM_CLOCK_MODE_VFD, 0x00002222},
  1288. {A6XX_RBBM_CLOCK_MODE_GPC, 0x00222222},
  1289. {A6XX_RBBM_CLOCK_DELAY_HLSQ_2, 0x00000002},
  1290. {A6XX_RBBM_CLOCK_MODE_HLSQ, 0x00002222},
  1291. {A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM, 0x00004000},
  1292. {A6XX_RBBM_CLOCK_DELAY_VFD, 0x00002222},
  1293. {A6XX_RBBM_CLOCK_DELAY_GPC, 0x00000200},
  1294. {A6XX_RBBM_CLOCK_DELAY_HLSQ, 0x00000000},
  1295. {A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM, 0x00000000},
  1296. {A6XX_RBBM_CLOCK_HYST_VFD, 0x00000000},
  1297. {A6XX_RBBM_CLOCK_HYST_GPC, 0x04104004},
  1298. {A6XX_RBBM_CLOCK_HYST_HLSQ, 0x00000000},
  1299. {A6XX_RBBM_CLOCK_CNTL_TEX_FCHE, 0x00000222},
  1300. {A6XX_RBBM_CLOCK_DELAY_TEX_FCHE, 0x00000111},
  1301. {A6XX_RBBM_CLOCK_HYST_TEX_FCHE, 0x00000777},
  1302. {A6XX_RBBM_CLOCK_CNTL_UCHE, 0x22222222},
  1303. {A6XX_RBBM_CLOCK_HYST_UCHE, 0x00000004},
  1304. {A6XX_RBBM_CLOCK_DELAY_UCHE, 0x00000002},
  1305. {A6XX_RBBM_ISDB_CNT, 0x00000182},
  1306. {A6XX_RBBM_RAC_THRESHOLD_CNT, 0x00000000},
  1307. {A6XX_RBBM_SP_HYST_CNT, 0x00000000},
  1308. {A6XX_RBBM_CLOCK_CNTL_GMU_GX, 0x00000222},
  1309. {A6XX_RBBM_CLOCK_DELAY_GMU_GX, 0x00000111},
  1310. {A6XX_RBBM_CLOCK_HYST_GMU_GX, 0x00000555},
  1311. };
  1312. static const struct adreno_a6xx_core adreno_gpu_core_a650 = {
  1313. .base = {
  1314. DEFINE_ADRENO_REV(ADRENO_REV_A650, 6, 5, 0, 0),
  1315. .features = ADRENO_IOCOHERENT | ADRENO_CONTENT_PROTECTION |
  1316. ADRENO_IFPC | ADRENO_APRIV | ADRENO_L3_VOTE,
  1317. .gpudev = &adreno_a6xx_gmu_gpudev.base,
  1318. .perfcounters = &adreno_a6xx_perfcounters,
  1319. .uche_gmem_alignment = 0,
  1320. .gmem_size = SZ_1M + SZ_128K, /* verified 1152kB */
  1321. .bus_width = 32,
  1322. .snapshot_size = 2 * SZ_1M,
  1323. },
  1324. .prim_fifo_threshold = 0x00300000,
  1325. .gmu_major = 2,
  1326. .gmu_minor = 0,
  1327. .sqefw_name = "a650_sqe.fw",
  1328. .gmufw_name = "a650_gmu.bin",
  1329. .zap_name = "a650_zap.mdt",
  1330. .hwcg = a650_hwcg_regs,
  1331. .hwcg_count = ARRAY_SIZE(a650_hwcg_regs),
  1332. .vbif = a650_gbif_regs,
  1333. .vbif_count = ARRAY_SIZE(a650_gbif_regs),
  1334. .veto_fal10 = true,
  1335. .pdc_in_aop = true,
  1336. .hang_detect_cycles = 0xcfffff,
  1337. .protected_regs = a620_protected_regs,
  1338. .disable_tseskip = true,
  1339. .highest_bank_bit = 16,
  1340. };
  1341. static const struct adreno_a6xx_core adreno_gpu_core_a650v2 = {
  1342. .base = {
  1343. DEFINE_ADRENO_REV(ADRENO_REV_A650, 6, 5, 0, ANY_ID),
  1344. .features = ADRENO_IOCOHERENT | ADRENO_CONTENT_PROTECTION |
  1345. ADRENO_IFPC | ADRENO_PREEMPTION | ADRENO_ACD |
  1346. ADRENO_LM | ADRENO_APRIV | ADRENO_L3_VOTE,
  1347. .gpudev = &adreno_a6xx_gmu_gpudev.base,
  1348. .perfcounters = &adreno_a6xx_perfcounters,
  1349. .uche_gmem_alignment = 0,
  1350. .gmem_size = SZ_1M + SZ_128K, /* verified 1152kB */
  1351. .bus_width = 32,
  1352. .snapshot_size = 2 * SZ_1M,
  1353. },
  1354. .prim_fifo_threshold = 0x00300000,
  1355. .gmu_major = 2,
  1356. .gmu_minor = 0,
  1357. .sqefw_name = "a650_sqe.fw",
  1358. .gmufw_name = "a650_gmu.bin",
  1359. .zap_name = "a650_zap.mdt",
  1360. .hwcg = a650_hwcg_regs,
  1361. .hwcg_count = ARRAY_SIZE(a650_hwcg_regs),
  1362. .vbif = a650_gbif_regs,
  1363. .vbif_count = ARRAY_SIZE(a650_gbif_regs),
  1364. .veto_fal10 = true,
  1365. .pdc_in_aop = true,
  1366. .hang_detect_cycles = 0x3ffff,
  1367. .protected_regs = a620_protected_regs,
  1368. .disable_tseskip = true,
  1369. .highest_bank_bit = 16,
  1370. };
  1371. static const struct adreno_a6xx_core adreno_gpu_core_a680 = {
  1372. .base = {
  1373. DEFINE_ADRENO_REV(ADRENO_REV_A680, 6, 8, 0, ANY_ID),
  1374. .features = ADRENO_IOCOHERENT | ADRENO_CONTENT_PROTECTION |
  1375. ADRENO_IFPC | ADRENO_PREEMPTION,
  1376. .gpudev = &adreno_a6xx_gmu_gpudev.base,
  1377. .perfcounters = &adreno_a6xx_legacy_perfcounters,
  1378. .uche_gmem_alignment = SZ_1M,
  1379. .gmem_size = SZ_2M,
  1380. .bus_width = 32,
  1381. .snapshot_size = SZ_2M,
  1382. },
  1383. .prim_fifo_threshold = 0x00400000,
  1384. .gmu_major = 2,
  1385. .gmu_minor = 0,
  1386. .sqefw_name = "a630_sqe.fw",
  1387. .gmufw_name = "a640_gmu.bin",
  1388. .zap_name = "a640_zap.mdt",
  1389. .hwcg = a680_hwcg_regs,
  1390. .hwcg_count = ARRAY_SIZE(a680_hwcg_regs),
  1391. .vbif = a640_vbif_regs,
  1392. .vbif_count = ARRAY_SIZE(a640_vbif_regs),
  1393. .hang_detect_cycles = 0xcfffff,
  1394. .protected_regs = a630_protected_regs,
  1395. .disable_tseskip = true,
  1396. .highest_bank_bit = 16,
  1397. };
  1398. static const struct kgsl_regmap_list a612_hwcg_regs[] = {
  1399. {A6XX_RBBM_CLOCK_CNTL_SP0, 0x22222222},
  1400. {A6XX_RBBM_CLOCK_CNTL2_SP0, 0x02222220},
  1401. {A6XX_RBBM_CLOCK_DELAY_SP0, 0x00000081},
  1402. {A6XX_RBBM_CLOCK_HYST_SP0, 0x0000F3CF},
  1403. {A6XX_RBBM_CLOCK_CNTL_TP0, 0x22222222},
  1404. {A6XX_RBBM_CLOCK_CNTL2_TP0, 0x22222222},
  1405. {A6XX_RBBM_CLOCK_CNTL3_TP0, 0x22222222},
  1406. {A6XX_RBBM_CLOCK_CNTL4_TP0, 0x00022222},
  1407. {A6XX_RBBM_CLOCK_DELAY_TP0, 0x11111111},
  1408. {A6XX_RBBM_CLOCK_DELAY2_TP0, 0x11111111},
  1409. {A6XX_RBBM_CLOCK_DELAY3_TP0, 0x11111111},
  1410. {A6XX_RBBM_CLOCK_DELAY4_TP0, 0x00011111},
  1411. {A6XX_RBBM_CLOCK_HYST_TP0, 0x77777777},
  1412. {A6XX_RBBM_CLOCK_HYST2_TP0, 0x77777777},
  1413. {A6XX_RBBM_CLOCK_HYST3_TP0, 0x77777777},
  1414. {A6XX_RBBM_CLOCK_HYST4_TP0, 0x00077777},
  1415. {A6XX_RBBM_CLOCK_CNTL_RB0, 0x22222222},
  1416. {A6XX_RBBM_CLOCK_CNTL2_RB0, 0x01202222},
  1417. {A6XX_RBBM_CLOCK_CNTL_CCU0, 0x00002220},
  1418. {A6XX_RBBM_CLOCK_HYST_RB_CCU0, 0x00040F00},
  1419. {A6XX_RBBM_CLOCK_CNTL_RAC, 0x05522022},
  1420. {A6XX_RBBM_CLOCK_CNTL2_RAC, 0x00005555},
  1421. {A6XX_RBBM_CLOCK_DELAY_RAC, 0x00000011},
  1422. {A6XX_RBBM_CLOCK_HYST_RAC, 0x00445044},
  1423. {A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM, 0x04222222},
  1424. {A6XX_RBBM_CLOCK_MODE_VFD, 0x00002222},
  1425. {A6XX_RBBM_CLOCK_MODE_GPC, 0x02222222},
  1426. {A6XX_RBBM_CLOCK_DELAY_HLSQ_2, 0x00000002},
  1427. {A6XX_RBBM_CLOCK_MODE_HLSQ, 0x00002222},
  1428. {A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM, 0x00004000},
  1429. {A6XX_RBBM_CLOCK_DELAY_VFD, 0x00002222},
  1430. {A6XX_RBBM_CLOCK_DELAY_GPC, 0x00000200},
  1431. {A6XX_RBBM_CLOCK_DELAY_HLSQ, 0x00000000},
  1432. {A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM, 0x00000000},
  1433. {A6XX_RBBM_CLOCK_HYST_VFD, 0x00000000},
  1434. {A6XX_RBBM_CLOCK_HYST_GPC, 0x04104004},
  1435. {A6XX_RBBM_CLOCK_HYST_HLSQ, 0x00000000},
  1436. {A6XX_RBBM_CLOCK_CNTL_UCHE, 0x22222222},
  1437. {A6XX_RBBM_CLOCK_HYST_UCHE, 0x00000004},
  1438. {A6XX_RBBM_CLOCK_DELAY_UCHE, 0x00000002},
  1439. {A6XX_RBBM_ISDB_CNT, 0x00000182},
  1440. {A6XX_RBBM_RAC_THRESHOLD_CNT, 0x00000000},
  1441. {A6XX_RBBM_SP_HYST_CNT, 0x00000000},
  1442. {A6XX_RBBM_CLOCK_CNTL_GMU_GX, 0x00000222},
  1443. {A6XX_RBBM_CLOCK_DELAY_GMU_GX, 0x00000111},
  1444. {A6XX_RBBM_CLOCK_HYST_GMU_GX, 0x00000555},
  1445. };
  1446. static const struct adreno_a6xx_core adreno_gpu_core_a612 = {
  1447. .base = {
  1448. DEFINE_ADRENO_REV(ADRENO_REV_A612, 6, 1, 2, ANY_ID),
  1449. .features = ADRENO_CONTENT_PROTECTION |
  1450. ADRENO_IOCOHERENT | ADRENO_PREEMPTION | ADRENO_IFPC,
  1451. .gpudev = &adreno_a6xx_rgmu_gpudev,
  1452. .perfcounters = &adreno_a6xx_legacy_perfcounters,
  1453. .uche_gmem_alignment = SZ_1M,
  1454. .gmem_size = (SZ_128K + SZ_4K),
  1455. .bus_width = 32,
  1456. .snapshot_size = SZ_1M,
  1457. },
  1458. .prim_fifo_threshold = 0x00080000,
  1459. .sqefw_name = "a630_sqe.fw",
  1460. .gmufw_name = "a612_rgmu.bin",
  1461. .zap_name = "a612_zap.mdt",
  1462. .hwcg = a612_hwcg_regs,
  1463. .hwcg_count = ARRAY_SIZE(a612_hwcg_regs),
  1464. .vbif = a640_vbif_regs,
  1465. .vbif_count = ARRAY_SIZE(a640_vbif_regs),
  1466. .hang_detect_cycles = 0x3fffff,
  1467. .protected_regs = a630_protected_regs,
  1468. .highest_bank_bit = 14,
  1469. };
  1470. static const struct adreno_a6xx_core adreno_gpu_core_a616 = {
  1471. .base = {
  1472. DEFINE_ADRENO_REV(ADRENO_REV_A616, 6, 1, 6, ANY_ID),
  1473. .features = ADRENO_PREEMPTION |
  1474. ADRENO_CONTENT_PROTECTION | ADRENO_IFPC |
  1475. ADRENO_IOCOHERENT,
  1476. .gpudev = &adreno_a630_gpudev.base,
  1477. .perfcounters = &adreno_a6xx_legacy_perfcounters,
  1478. .uche_gmem_alignment = SZ_1M,
  1479. .gmem_size = SZ_512K,
  1480. .bus_width = 32,
  1481. .snapshot_size = SZ_1M,
  1482. },
  1483. .prim_fifo_threshold = 0x0018000,
  1484. .gmu_major = 1,
  1485. .gmu_minor = 3,
  1486. .sqefw_name = "a630_sqe.fw",
  1487. .gmufw_name = "a630_gmu.bin",
  1488. .zap_name = "a615_zap.mdt",
  1489. .hwcg = a615_hwcg_regs,
  1490. .hwcg_count = ARRAY_SIZE(a615_hwcg_regs),
  1491. .vbif = a615_gbif_regs,
  1492. .vbif_count = ARRAY_SIZE(a615_gbif_regs),
  1493. .hang_detect_cycles = 0xcfffff,
  1494. .protected_regs = a630_protected_regs,
  1495. .highest_bank_bit = 14,
  1496. };
  1497. static const struct adreno_a6xx_core adreno_gpu_core_a610 = {
  1498. .base = {
  1499. DEFINE_ADRENO_REV(ADRENO_REV_A610, 6, 1, 0, ANY_ID),
  1500. .compatible = "qcom,adreno-gpu-a610",
  1501. .features = ADRENO_CONTENT_PROTECTION |
  1502. ADRENO_PREEMPTION,
  1503. .gpudev = &adreno_a6xx_gpudev,
  1504. .perfcounters = &adreno_a6xx_legacy_perfcounters,
  1505. .uche_gmem_alignment = SZ_1M,
  1506. .gmem_size = (SZ_128K + SZ_4K),
  1507. .bus_width = 32,
  1508. .snapshot_size = SZ_1M,
  1509. },
  1510. .prim_fifo_threshold = 0x00080000,
  1511. .sqefw_name = "a630_sqe.fw",
  1512. .zap_name = "a610_zap.mdt",
  1513. .hwcg = a612_hwcg_regs,
  1514. .hwcg_count = ARRAY_SIZE(a612_hwcg_regs),
  1515. .vbif = a640_vbif_regs,
  1516. .vbif_count = ARRAY_SIZE(a640_vbif_regs),
  1517. .hang_detect_cycles = 0x3ffff,
  1518. .protected_regs = a630_protected_regs,
  1519. .highest_bank_bit = 14,
  1520. };
  1521. static const struct adreno_a6xx_core adreno_gpu_core_a611 = {
  1522. .base = {
  1523. DEFINE_ADRENO_REV(ADRENO_REV_A611, 6, 1, 1, ANY_ID),
  1524. .compatible = "qcom,adreno-gpu-a611",
  1525. .features = ADRENO_CONTENT_PROTECTION |
  1526. ADRENO_PREEMPTION,
  1527. .gpudev = &adreno_a6xx_gpudev,
  1528. .perfcounters = &adreno_a6xx_legacy_perfcounters,
  1529. .uche_gmem_alignment = SZ_1M,
  1530. .gmem_size = (SZ_128K + SZ_4K),
  1531. .bus_width = 32,
  1532. .snapshot_size = SZ_1M,
  1533. },
  1534. .prim_fifo_threshold = 0x00080000,
  1535. .sqefw_name = "a630_sqe.fw",
  1536. .zap_name = "a610_zap.mbn",
  1537. .hwcg = a612_hwcg_regs,
  1538. .hwcg_count = ARRAY_SIZE(a612_hwcg_regs),
  1539. .vbif = a640_vbif_regs,
  1540. .vbif_count = ARRAY_SIZE(a640_vbif_regs),
  1541. .hang_detect_cycles = 0x3ffff,
  1542. .protected_regs = a630_protected_regs,
  1543. .highest_bank_bit = 14,
  1544. };
  1545. static const struct kgsl_regmap_list a660_hwcg_regs[] = {
  1546. {A6XX_RBBM_CLOCK_CNTL_SP0, 0x02222222},
  1547. {A6XX_RBBM_CLOCK_CNTL2_SP0, 0x02222220},
  1548. {A6XX_RBBM_CLOCK_DELAY_SP0, 0x00000080},
  1549. {A6XX_RBBM_CLOCK_HYST_SP0, 0x0000F3CF},
  1550. {A6XX_RBBM_CLOCK_CNTL_TP0, 0x22222222},
  1551. {A6XX_RBBM_CLOCK_CNTL2_TP0, 0x22222222},
  1552. {A6XX_RBBM_CLOCK_CNTL3_TP0, 0x22222222},
  1553. {A6XX_RBBM_CLOCK_CNTL4_TP0, 0x00022222},
  1554. {A6XX_RBBM_CLOCK_DELAY_TP0, 0x11111111},
  1555. {A6XX_RBBM_CLOCK_DELAY2_TP0, 0x11111111},
  1556. {A6XX_RBBM_CLOCK_DELAY3_TP0, 0x11111111},
  1557. {A6XX_RBBM_CLOCK_DELAY4_TP0, 0x00011111},
  1558. {A6XX_RBBM_CLOCK_HYST_TP0, 0x77777777},
  1559. {A6XX_RBBM_CLOCK_HYST2_TP0, 0x77777777},
  1560. {A6XX_RBBM_CLOCK_HYST3_TP0, 0x77777777},
  1561. {A6XX_RBBM_CLOCK_HYST4_TP0, 0x00077777},
  1562. {A6XX_RBBM_CLOCK_CNTL_RB0, 0x22222222},
  1563. {A6XX_RBBM_CLOCK_CNTL2_RB0, 0x01002222},
  1564. {A6XX_RBBM_CLOCK_CNTL_CCU0, 0x00002220},
  1565. {A6XX_RBBM_CLOCK_HYST_RB_CCU0, 0x00040F00},
  1566. {A6XX_RBBM_CLOCK_CNTL_RAC, 0x25222022},
  1567. {A6XX_RBBM_CLOCK_CNTL2_RAC, 0x00005555},
  1568. {A6XX_RBBM_CLOCK_DELAY_RAC, 0x00000011},
  1569. {A6XX_RBBM_CLOCK_HYST_RAC, 0x00445044},
  1570. {A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM, 0x04222222},
  1571. {A6XX_RBBM_CLOCK_MODE_VFD, 0x00002222},
  1572. {A6XX_RBBM_CLOCK_MODE_GPC, 0x00222222},
  1573. {A6XX_RBBM_CLOCK_DELAY_HLSQ_2, 0x00000002},
  1574. {A6XX_RBBM_CLOCK_MODE_HLSQ, 0x00002222},
  1575. {A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM, 0x00004000},
  1576. {A6XX_RBBM_CLOCK_DELAY_VFD, 0x00002222},
  1577. {A6XX_RBBM_CLOCK_DELAY_GPC, 0x00000200},
  1578. {A6XX_RBBM_CLOCK_DELAY_HLSQ, 0x00000000},
  1579. {A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM, 0x00000000},
  1580. {A6XX_RBBM_CLOCK_HYST_VFD, 0x00000000},
  1581. {A6XX_RBBM_CLOCK_HYST_GPC, 0x04104004},
  1582. {A6XX_RBBM_CLOCK_HYST_HLSQ, 0x00000000},
  1583. {A6XX_RBBM_CLOCK_CNTL_TEX_FCHE, 0x00000222},
  1584. {A6XX_RBBM_CLOCK_DELAY_TEX_FCHE, 0x00000111},
  1585. {A6XX_RBBM_CLOCK_HYST_TEX_FCHE, 0x00000000},
  1586. {A6XX_RBBM_CLOCK_CNTL_UCHE, 0x22222222},
  1587. {A6XX_RBBM_CLOCK_HYST_UCHE, 0x00000004},
  1588. {A6XX_RBBM_CLOCK_DELAY_UCHE, 0x00000002},
  1589. {A6XX_RBBM_ISDB_CNT, 0x00000182},
  1590. {A6XX_RBBM_RAC_THRESHOLD_CNT, 0x00000000},
  1591. {A6XX_RBBM_SP_HYST_CNT, 0x00000000},
  1592. {A6XX_RBBM_CLOCK_CNTL_GMU_GX, 0x00000222},
  1593. {A6XX_RBBM_CLOCK_DELAY_GMU_GX, 0x00000111},
  1594. {A6XX_RBBM_CLOCK_HYST_GMU_GX, 0x00000555},
  1595. };
  1596. /* A660 protected register list */
  1597. static const struct adreno_protected_regs a660_protected_regs[] = {
  1598. { A6XX_CP_PROTECT_REG + 0, 0x00000, 0x004ff, 0 },
  1599. { A6XX_CP_PROTECT_REG + 1, 0x00501, 0x00506, 0 },
  1600. { A6XX_CP_PROTECT_REG + 2, 0x0050b, 0x007ff, 0 },
  1601. { A6XX_CP_PROTECT_REG + 3, 0x0050e, 0x0050e, 1 },
  1602. { A6XX_CP_PROTECT_REG + 4, 0x00510, 0x00510, 1 },
  1603. { A6XX_CP_PROTECT_REG + 5, 0x00534, 0x00534, 1 },
  1604. { A6XX_CP_PROTECT_REG + 6, 0x00800, 0x00882, 1 },
  1605. { A6XX_CP_PROTECT_REG + 7, 0x008a0, 0x008a8, 1 },
  1606. { A6XX_CP_PROTECT_REG + 8, 0x008ab, 0x008cf, 1 },
  1607. { A6XX_CP_PROTECT_REG + 9, 0x008d0, 0x0098c, 0 },
  1608. { A6XX_CP_PROTECT_REG + 10, 0x00900, 0x0094d, 1 },
  1609. { A6XX_CP_PROTECT_REG + 11, 0x0098d, 0x00bff, 1 },
  1610. { A6XX_CP_PROTECT_REG + 12, 0x00e00, 0x00e01, 1 },
  1611. { A6XX_CP_PROTECT_REG + 13, 0x00e03, 0x00e0f, 1 },
  1612. { A6XX_CP_PROTECT_REG + 14, 0x03c00, 0x03cc3, 1 },
  1613. { A6XX_CP_PROTECT_REG + 15, 0x03cc4, 0x05cc3, 0 },
  1614. { A6XX_CP_PROTECT_REG + 16, 0x08630, 0x087ff, 1 },
  1615. { A6XX_CP_PROTECT_REG + 17, 0x08e00, 0x08e00, 1 },
  1616. { A6XX_CP_PROTECT_REG + 18, 0x08e08, 0x08e08, 1 },
  1617. { A6XX_CP_PROTECT_REG + 19, 0x08e50, 0x08e6f, 1 },
  1618. { A6XX_CP_PROTECT_REG + 20, 0x08e80, 0x090ff, 1 },
  1619. { A6XX_CP_PROTECT_REG + 21, 0x09624, 0x097ff, 1 },
  1620. { A6XX_CP_PROTECT_REG + 22, 0x09e60, 0x09e71, 1 },
  1621. { A6XX_CP_PROTECT_REG + 23, 0x09e78, 0x09fff, 1 },
  1622. { A6XX_CP_PROTECT_REG + 24, 0x0a630, 0x0a7ff, 1 },
  1623. { A6XX_CP_PROTECT_REG + 25, 0x0ae02, 0x0ae02, 1 },
  1624. { A6XX_CP_PROTECT_REG + 26, 0x0ae50, 0x0af7f, 1 },
  1625. { A6XX_CP_PROTECT_REG + 27, 0x0b604, 0x0b604, 1 },
  1626. { A6XX_CP_PROTECT_REG + 28, 0x0b608, 0x0b60e, 1 },
  1627. { A6XX_CP_PROTECT_REG + 29, 0x0be02, 0x0be03, 1 },
  1628. { A6XX_CP_PROTECT_REG + 30, 0x0be20, 0x0bf7f, 1 },
  1629. { A6XX_CP_PROTECT_REG + 31, 0x0d000, 0x0d5ff, 1 },
  1630. { A6XX_CP_PROTECT_REG + 32, 0x0f000, 0x0fbff, 1 },
  1631. { A6XX_CP_PROTECT_REG + 33, 0x0fc00, 0x11bff, 0 },
  1632. { A6XX_CP_PROTECT_REG + 34, 0x18400, 0x1a3ff, 1 },
  1633. { A6XX_CP_PROTECT_REG + 35, 0x1a400, 0x1c3ff, 1 },
  1634. { A6XX_CP_PROTECT_REG + 36, 0x1c400, 0x1e3ff, 1 },
  1635. { A6XX_CP_PROTECT_REG + 37, 0x1f400, 0x1f843, 1 },
  1636. { A6XX_CP_PROTECT_REG + 38, 0x1f844, 0x1f8bf, 0 },
  1637. { A6XX_CP_PROTECT_REG + 39, 0x1f860, 0x1f860, 1 },
  1638. { A6XX_CP_PROTECT_REG + 40, 0x1f887, 0x1f8a2, 1 },
  1639. { A6XX_CP_PROTECT_REG + 47, 0x1f8c0, 0x1f8c0, 1 },
  1640. { 0 },
  1641. };
  1642. static const struct adreno_a6xx_core adreno_gpu_core_a660 = {
  1643. .base = {
  1644. DEFINE_ADRENO_REV(ADRENO_REV_A660, 6, 6, 0, 0),
  1645. .features = ADRENO_APRIV |
  1646. ADRENO_IOCOHERENT | ADRENO_CONTENT_PROTECTION |
  1647. ADRENO_IFPC | ADRENO_PREEMPTION | ADRENO_L3_VOTE,
  1648. .gpudev = &adreno_a6xx_gmu_gpudev.base,
  1649. .perfcounters = &adreno_a6xx_perfcounters,
  1650. .uche_gmem_alignment = 0,
  1651. .gmem_size = SZ_1M + SZ_512K,
  1652. .bus_width = 32,
  1653. .snapshot_size = SZ_2M,
  1654. },
  1655. .prim_fifo_threshold = 0x00300000,
  1656. .gmu_major = 2,
  1657. .gmu_minor = 0,
  1658. .sqefw_name = "a660_sqe.fw",
  1659. .gmufw_name = "a660_gmu.bin",
  1660. .zap_name = "a660_zap.mdt",
  1661. .hwcg = a660_hwcg_regs,
  1662. .hwcg_count = ARRAY_SIZE(a660_hwcg_regs),
  1663. .vbif = a650_gbif_regs,
  1664. .vbif_count = ARRAY_SIZE(a650_gbif_regs),
  1665. .hang_detect_cycles = 0xcfffff,
  1666. .veto_fal10 = true,
  1667. .protected_regs = a660_protected_regs,
  1668. .disable_tseskip = true,
  1669. .highest_bank_bit = 16,
  1670. .pdc_in_aop = true,
  1671. .ctxt_record_size = 2496 * 1024,
  1672. };
  1673. static const struct adreno_a6xx_core adreno_gpu_core_a660v2 = {
  1674. .base = {
  1675. DEFINE_ADRENO_REV(ADRENO_REV_A660, 6, 6, 0, ANY_ID),
  1676. .features = ADRENO_APRIV |
  1677. ADRENO_IOCOHERENT | ADRENO_CONTENT_PROTECTION |
  1678. ADRENO_IFPC | ADRENO_PREEMPTION | ADRENO_ACD |
  1679. ADRENO_L3_VOTE,
  1680. .gpudev = &adreno_a6xx_gmu_gpudev.base,
  1681. .perfcounters = &adreno_a6xx_perfcounters,
  1682. .uche_gmem_alignment = 0,
  1683. .gmem_size = SZ_1M + SZ_512K,
  1684. .bus_width = 32,
  1685. .snapshot_size = SZ_2M,
  1686. },
  1687. .prim_fifo_threshold = 0x00300000,
  1688. .gmu_major = 2,
  1689. .gmu_minor = 0,
  1690. .sqefw_name = "a660_sqe.fw",
  1691. .gmufw_name = "a660_gmu.bin",
  1692. .zap_name = "a660_zap.mdt",
  1693. .hwcg = a660_hwcg_regs,
  1694. .hwcg_count = ARRAY_SIZE(a660_hwcg_regs),
  1695. .vbif = a650_gbif_regs,
  1696. .vbif_count = ARRAY_SIZE(a650_gbif_regs),
  1697. .hang_detect_cycles = 0xcfffff,
  1698. .veto_fal10 = true,
  1699. .protected_regs = a660_protected_regs,
  1700. .disable_tseskip = true,
  1701. .highest_bank_bit = 16,
  1702. .pdc_in_aop = true,
  1703. .ctxt_record_size = 2496 * 1024,
  1704. };
  1705. static const struct adreno_a6xx_core adreno_gpu_core_a660_shima = {
  1706. .base = {
  1707. DEFINE_ADRENO_REV(ADRENO_REV_A660, 6, 6, 0, ANY_ID),
  1708. .compatible = "qcom,adreno-gpu-a660-shima",
  1709. .features = ADRENO_APRIV |
  1710. ADRENO_IOCOHERENT | ADRENO_CONTENT_PROTECTION |
  1711. ADRENO_IFPC | ADRENO_PREEMPTION | ADRENO_ACD,
  1712. .gpudev = &adreno_a6xx_gmu_gpudev.base,
  1713. .perfcounters = &adreno_a6xx_perfcounters,
  1714. .uche_gmem_alignment = 0,
  1715. .gmem_size = SZ_1M + SZ_512K,
  1716. .bus_width = 32,
  1717. .snapshot_size = SZ_2M,
  1718. },
  1719. .prim_fifo_threshold = 0x00300000,
  1720. .gmu_major = 2,
  1721. .gmu_minor = 0,
  1722. .sqefw_name = "a660_sqe.fw",
  1723. .gmufw_name = "a660_gmu.bin",
  1724. .zap_name = "a660_zap.mdt",
  1725. .hwcg = a660_hwcg_regs,
  1726. .hwcg_count = ARRAY_SIZE(a660_hwcg_regs),
  1727. .vbif = a650_gbif_regs,
  1728. .vbif_count = ARRAY_SIZE(a650_gbif_regs),
  1729. .hang_detect_cycles = 0x3ffff,
  1730. .veto_fal10 = true,
  1731. .protected_regs = a660_protected_regs,
  1732. .disable_tseskip = true,
  1733. .highest_bank_bit = 15,
  1734. .pdc_in_aop = true,
  1735. .ctxt_record_size = 2496 * 1024,
  1736. };
  1737. static const struct adreno_a6xx_core adreno_gpu_core_a635 = {
  1738. .base = {
  1739. DEFINE_ADRENO_REV(ADRENO_REV_A635, 6, 3, 5, ANY_ID),
  1740. .features = ADRENO_APRIV | ADRENO_IOCOHERENT |
  1741. ADRENO_CONTENT_PROTECTION,
  1742. .gpudev = &adreno_a6xx_gmu_gpudev.base,
  1743. .perfcounters = &adreno_a6xx_perfcounters,
  1744. .uche_gmem_alignment = 0,
  1745. .gmem_size = SZ_512K,
  1746. .bus_width = 32,
  1747. .snapshot_size = SZ_2M,
  1748. },
  1749. .prim_fifo_threshold = 0x00200000,
  1750. .gmu_major = 2,
  1751. .gmu_minor = 0,
  1752. .sqefw_name = "a660_sqe.fw",
  1753. .gmufw_name = "a660_gmu.bin",
  1754. .zap_name = "a660_zap.mdt",
  1755. .hwcg = a660_hwcg_regs,
  1756. .hwcg_count = ARRAY_SIZE(a660_hwcg_regs),
  1757. .vbif = a650_gbif_regs,
  1758. .vbif_count = ARRAY_SIZE(a650_gbif_regs),
  1759. .hang_detect_cycles = 0x3ffff,
  1760. .veto_fal10 = true,
  1761. .protected_regs = a660_protected_regs,
  1762. .disable_tseskip = true,
  1763. .highest_bank_bit = 15,
  1764. .pdc_in_aop = true,
  1765. .ctxt_record_size = 2496 * 1024,
  1766. };
  1767. static const struct adreno_a6xx_core adreno_gpu_core_a662 = {
  1768. .base = {
  1769. DEFINE_ADRENO_REV(ADRENO_REV_A662, ANY_ID, ANY_ID, ANY_ID, ANY_ID),
  1770. .compatible = "qcom,adreno-gpu-a662",
  1771. .features = ADRENO_APRIV | ADRENO_IOCOHERENT |
  1772. ADRENO_CONTENT_PROTECTION | ADRENO_PREEMPTION |
  1773. ADRENO_IFPC | ADRENO_BCL | ADRENO_ACD,
  1774. .gpudev = &adreno_a6xx_gmu_gpudev.base,
  1775. .perfcounters = &adreno_a6xx_perfcounters,
  1776. .uche_gmem_alignment = 0,
  1777. .gmem_size = SZ_1M + SZ_512K,
  1778. .bus_width = 32,
  1779. .snapshot_size = SZ_2M,
  1780. },
  1781. .prim_fifo_threshold = 0x00300000,
  1782. .gmu_major = 2,
  1783. .gmu_minor = 0,
  1784. .sqefw_name = "a660_sqe.fw",
  1785. .gmufw_name = "a662_gmu.bin",
  1786. .zap_name = "a662_zap.mdt",
  1787. .hwcg = a660_hwcg_regs,
  1788. .hwcg_count = ARRAY_SIZE(a660_hwcg_regs),
  1789. .vbif = a650_gbif_regs,
  1790. .vbif_count = ARRAY_SIZE(a650_gbif_regs),
  1791. .hang_detect_cycles = 0x3ffff,
  1792. .veto_fal10 = true,
  1793. .protected_regs = a660_protected_regs,
  1794. .disable_tseskip = true,
  1795. .highest_bank_bit = 15,
  1796. .pdc_in_aop = true,
  1797. .ctxt_record_size = 2496 * 1024,
  1798. };
  1799. extern const struct gen7_snapshot_block_list gen7_0_0_snapshot_block_list;
  1800. static const struct kgsl_regmap_list gen7_0_0_gbif_regs[] = {
  1801. { GEN7_GBIF_QSB_SIDE0, 0x00071620 },
  1802. { GEN7_GBIF_QSB_SIDE1, 0x00071620 },
  1803. { GEN7_GBIF_QSB_SIDE2, 0x00071620 },
  1804. { GEN7_GBIF_QSB_SIDE3, 0x00071620 },
  1805. { GEN7_RBBM_GBIF_CLIENT_QOS_CNTL, 0x2120212 },
  1806. };
  1807. static const struct kgsl_regmap_list a702_hwcg_regs[] = {
  1808. {A6XX_RBBM_CLOCK_CNTL_SP0, 0x22222222},
  1809. {A6XX_RBBM_CLOCK_CNTL2_SP0, 0x02222220},
  1810. {A6XX_RBBM_CLOCK_DELAY_SP0, 0x00000081},
  1811. {A6XX_RBBM_CLOCK_HYST_SP0, 0x0000f3cf},
  1812. {A6XX_RBBM_CLOCK_CNTL_TP0, 0x22222222},
  1813. {A6XX_RBBM_CLOCK_CNTL2_TP0, 0x22222222},
  1814. {A6XX_RBBM_CLOCK_CNTL3_TP0, 0x22222222},
  1815. {A6XX_RBBM_CLOCK_CNTL4_TP0, 0x00022222},
  1816. {A6XX_RBBM_CLOCK_DELAY_TP0, 0x11111111},
  1817. {A6XX_RBBM_CLOCK_DELAY2_TP0, 0x11111111},
  1818. {A6XX_RBBM_CLOCK_DELAY3_TP0, 0x11111111},
  1819. {A6XX_RBBM_CLOCK_DELAY4_TP0, 0x00011111},
  1820. {A6XX_RBBM_CLOCK_HYST_TP0, 0x77777777},
  1821. {A6XX_RBBM_CLOCK_HYST2_TP0, 0x77777777},
  1822. {A6XX_RBBM_CLOCK_HYST3_TP0, 0x77777777},
  1823. {A6XX_RBBM_CLOCK_HYST4_TP0, 0x00077777},
  1824. {A6XX_RBBM_CLOCK_CNTL_RB0, 0x22222222},
  1825. {A6XX_RBBM_CLOCK_CNTL2_RB0, 0x01202222},
  1826. {A6XX_RBBM_CLOCK_CNTL_CCU0, 0x00002220},
  1827. {A6XX_RBBM_CLOCK_HYST_RB_CCU0, 0x00040f00},
  1828. {A6XX_RBBM_CLOCK_CNTL_RAC, 0x05522022},
  1829. {A6XX_RBBM_CLOCK_CNTL2_RAC, 0x00005555},
  1830. {A6XX_RBBM_CLOCK_DELAY_RAC, 0x00000011},
  1831. {A6XX_RBBM_CLOCK_HYST_RAC, 0x00445044},
  1832. {A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM, 0x04222222},
  1833. {A6XX_RBBM_CLOCK_MODE_VFD, 0x00002222},
  1834. {A6XX_RBBM_CLOCK_MODE_GPC, 0x02222222},
  1835. {A6XX_RBBM_CLOCK_DELAY_HLSQ_2, 0x00000002},
  1836. {A6XX_RBBM_CLOCK_MODE_HLSQ, 0x00002222},
  1837. {A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM, 0x00004000},
  1838. {A6XX_RBBM_CLOCK_DELAY_VFD, 0x00002222},
  1839. {A6XX_RBBM_CLOCK_DELAY_GPC, 0x00000200},
  1840. {A6XX_RBBM_CLOCK_DELAY_HLSQ, 0x00000000},
  1841. {A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM, 0x00000000},
  1842. {A6XX_RBBM_CLOCK_HYST_VFD, 0x00000000},
  1843. {A6XX_RBBM_CLOCK_HYST_GPC, 0x04104004},
  1844. {A6XX_RBBM_CLOCK_HYST_HLSQ, 0x00000000},
  1845. {A6XX_RBBM_CLOCK_CNTL_UCHE, 0x22222222},
  1846. {A6XX_RBBM_CLOCK_HYST_UCHE, 0x00000004},
  1847. {A6XX_RBBM_CLOCK_DELAY_UCHE, 0x00000002},
  1848. {A6XX_RBBM_ISDB_CNT, 0x00000182},
  1849. {A6XX_RBBM_RAC_THRESHOLD_CNT, 0x00000000},
  1850. {A6XX_RBBM_SP_HYST_CNT, 0x00000000},
  1851. {A6XX_RBBM_CLOCK_CNTL_GMU_GX, 0x00000222},
  1852. {A6XX_RBBM_CLOCK_DELAY_GMU_GX, 0x00000111},
  1853. {A6XX_RBBM_CLOCK_HYST_GMU_GX, 0x00000555},
  1854. {A6XX_RBBM_CLOCK_CNTL_FCHE, 0x00000222},
  1855. {A6XX_RBBM_CLOCK_DELAY_FCHE, 0x00000000},
  1856. {A6XX_RBBM_CLOCK_HYST_FCHE, 0x00000000},
  1857. {A6XX_RBBM_CLOCK_CNTL_GLC, 0x00222222},
  1858. {A6XX_RBBM_CLOCK_DELAY_GLC, 0x00000000},
  1859. {A6XX_RBBM_CLOCK_HYST_GLC, 0x00000000},
  1860. {A6XX_RBBM_CLOCK_CNTL_MHUB, 0x00000002},
  1861. {A6XX_RBBM_CLOCK_DELAY_MHUB, 0x00000000},
  1862. {A6XX_RBBM_CLOCK_HYST_MHUB, 0x00000000},
  1863. };
  1864. static const struct adreno_a6xx_core adreno_gpu_core_a702 = {
  1865. .base = {
  1866. DEFINE_ADRENO_REV(ADRENO_REV_A702, 7, 0, 2, ANY_ID),
  1867. .features = ADRENO_CONTENT_PROTECTION |
  1868. ADRENO_APRIV | ADRENO_PREEMPTION,
  1869. .gpudev = &adreno_a6xx_gpudev,
  1870. .perfcounters = &adreno_a6xx_legacy_perfcounters,
  1871. .gmem_size = SZ_128K,
  1872. .bus_width = 16,
  1873. .snapshot_size = SZ_1M,
  1874. },
  1875. .prim_fifo_threshold = 0x0000c000,
  1876. .sqefw_name = "a702_sqe.fw",
  1877. .zap_name = "a702_zap.mdt",
  1878. .hwcg = a702_hwcg_regs,
  1879. .hwcg_count = ARRAY_SIZE(a702_hwcg_regs),
  1880. .vbif = a640_vbif_regs,
  1881. .vbif_count = ARRAY_SIZE(a640_vbif_regs),
  1882. .hang_detect_cycles = 0x3ffff,
  1883. .protected_regs = a620_protected_regs,
  1884. .highest_bank_bit = 14,
  1885. };
  1886. static const struct kgsl_regmap_list gen7_0_0_hwcg_regs[] = {
  1887. { GEN7_RBBM_CLOCK_CNTL_SP0, 0x02222222 },
  1888. { GEN7_RBBM_CLOCK_CNTL2_SP0, 0x02022222 },
  1889. { GEN7_RBBM_CLOCK_HYST_SP0, 0x0000f3cf },
  1890. { GEN7_RBBM_CLOCK_DELAY_SP0, 0x00000080 },
  1891. { GEN7_RBBM_CLOCK_CNTL_TP0, 0x22222220 },
  1892. { GEN7_RBBM_CLOCK_CNTL2_TP0, 0x22222222 },
  1893. { GEN7_RBBM_CLOCK_CNTL3_TP0, 0x22222222 },
  1894. { GEN7_RBBM_CLOCK_CNTL4_TP0, 0x00222222 },
  1895. { GEN7_RBBM_CLOCK_HYST_TP0, 0x77777777 },
  1896. { GEN7_RBBM_CLOCK_HYST2_TP0, 0x77777777 },
  1897. { GEN7_RBBM_CLOCK_HYST3_TP0, 0x77777777 },
  1898. { GEN7_RBBM_CLOCK_HYST4_TP0, 0x00077777 },
  1899. { GEN7_RBBM_CLOCK_DELAY_TP0, 0x11111111 },
  1900. { GEN7_RBBM_CLOCK_DELAY2_TP0, 0x11111111 },
  1901. { GEN7_RBBM_CLOCK_DELAY3_TP0, 0x11111111 },
  1902. { GEN7_RBBM_CLOCK_DELAY4_TP0, 0x00011111 },
  1903. { GEN7_RBBM_CLOCK_CNTL_UCHE, 0x22222222 },
  1904. { GEN7_RBBM_CLOCK_HYST_UCHE, 0x00000004 },
  1905. { GEN7_RBBM_CLOCK_DELAY_UCHE, 0x00000002 },
  1906. { GEN7_RBBM_CLOCK_CNTL_RB0, 0x22222222 },
  1907. { GEN7_RBBM_CLOCK_CNTL2_RB0, 0x01002222 },
  1908. { GEN7_RBBM_CLOCK_CNTL_CCU0, 0x00002220 },
  1909. { GEN7_RBBM_CLOCK_HYST_RB_CCU0, 0x44000f00 },
  1910. { GEN7_RBBM_CLOCK_CNTL_RAC, 0x25222022 },
  1911. { GEN7_RBBM_CLOCK_CNTL2_RAC, 0x00555555 },
  1912. { GEN7_RBBM_CLOCK_DELAY_RAC, 0x00000011 },
  1913. { GEN7_RBBM_CLOCK_HYST_RAC, 0x00440044 },
  1914. { GEN7_RBBM_CLOCK_CNTL_TSE_RAS_RBBM, 0x04222222 },
  1915. { GEN7_RBBM_CLOCK_MODE2_GRAS, 0x00000222 },
  1916. { GEN7_RBBM_CLOCK_MODE_BV_GRAS, 0x00222222 },
  1917. { GEN7_RBBM_CLOCK_MODE_GPC, 0x02222223 },
  1918. { GEN7_RBBM_CLOCK_MODE_VFD, 0x00002222 },
  1919. { GEN7_RBBM_CLOCK_MODE_BV_GPC, 0x00222222 },
  1920. { GEN7_RBBM_CLOCK_MODE_BV_VFD, 0x00002222 },
  1921. { GEN7_RBBM_CLOCK_HYST_TSE_RAS_RBBM, 0x00000000 },
  1922. { GEN7_RBBM_CLOCK_HYST_GPC, 0x04104004 },
  1923. { GEN7_RBBM_CLOCK_HYST_VFD, 0x00000000 },
  1924. { GEN7_RBBM_CLOCK_DELAY_TSE_RAS_RBBM, 0x00004000 },
  1925. { GEN7_RBBM_CLOCK_DELAY_GPC, 0x00000200 },
  1926. { GEN7_RBBM_CLOCK_DELAY_VFD, 0x00002222 },
  1927. { GEN7_RBBM_CLOCK_MODE_HLSQ, 0x00002222 },
  1928. { GEN7_RBBM_CLOCK_DELAY_HLSQ, 0x00000000 },
  1929. { GEN7_RBBM_CLOCK_HYST_HLSQ, 0x00000000 },
  1930. { GEN7_RBBM_CLOCK_DELAY_HLSQ_2, 0x00000002 },
  1931. { GEN7_RBBM_CLOCK_MODE_BV_LRZ, 0x55555552 },
  1932. { GEN7_RBBM_CLOCK_MODE_CP, 0x00000223 },
  1933. { GEN7_RBBM_CLOCK_CNTL, 0x8aa8aa82 },
  1934. { GEN7_RBBM_ISDB_CNT, 0x00000182 },
  1935. { GEN7_RBBM_RAC_THRESHOLD_CNT, 0x00000000 },
  1936. { GEN7_RBBM_SP_HYST_CNT, 0x00000000 },
  1937. { GEN7_RBBM_CLOCK_CNTL_GMU_GX, 0x00000222 },
  1938. { GEN7_RBBM_CLOCK_DELAY_GMU_GX, 0x00000111 },
  1939. { GEN7_RBBM_CLOCK_HYST_GMU_GX, 0x00000555 },
  1940. };
  1941. static const struct kgsl_regmap_list gen7_0_0_ao_hwcg_regs[] = {
  1942. { GEN7_GPU_GMU_AO_GMU_CGC_MODE_CNTL, 0x00020000 },
  1943. { GEN7_GPU_GMU_AO_GMU_CGC_DELAY_CNTL, 0x00010111 },
  1944. { GEN7_GPU_GMU_AO_GMU_CGC_HYST_CNTL, 0x00005555 },
  1945. };
  1946. /* GEN7_0_0 protected register list */
  1947. static const struct gen7_protected_regs gen7_0_0_protected_regs[] = {
  1948. { GEN7_CP_PROTECT_REG + 0, 0x00000, 0x004ff, 0 },
  1949. { GEN7_CP_PROTECT_REG + 1, 0x0050b, 0x00563, 0 },
  1950. { GEN7_CP_PROTECT_REG + 2, 0x0050e, 0x0050e, 1 },
  1951. { GEN7_CP_PROTECT_REG + 3, 0x00510, 0x00510, 1 },
  1952. { GEN7_CP_PROTECT_REG + 4, 0x00534, 0x00534, 1 },
  1953. { GEN7_CP_PROTECT_REG + 5, 0x005fb, 0x00698, 0 },
  1954. { GEN7_CP_PROTECT_REG + 6, 0x00699, 0x00882, 1 },
  1955. { GEN7_CP_PROTECT_REG + 7, 0x008a0, 0x008a8, 1 },
  1956. { GEN7_CP_PROTECT_REG + 8, 0x008ab, 0x008cf, 1 },
  1957. { GEN7_CP_PROTECT_REG + 9, 0x008d0, 0x00a40, 0 },
  1958. { GEN7_CP_PROTECT_REG + 10, 0x00900, 0x0094d, 1 },
  1959. { GEN7_CP_PROTECT_REG + 11, 0x0098d, 0x00a3f, 1 },
  1960. { GEN7_CP_PROTECT_REG + 12, 0x00a41, 0x00bff, 1 },
  1961. { GEN7_CP_PROTECT_REG + 13, 0x00df0, 0x00df1, 1 },
  1962. { GEN7_CP_PROTECT_REG + 14, 0x00e01, 0x00e01, 1 },
  1963. { GEN7_CP_PROTECT_REG + 15, 0x00e07, 0x00e0f, 1 },
  1964. { GEN7_CP_PROTECT_REG + 16, 0x03c00, 0x03cc3, 1 },
  1965. { GEN7_CP_PROTECT_REG + 17, 0x03cc4, 0x05cc3, 0 },
  1966. { GEN7_CP_PROTECT_REG + 18, 0x08630, 0x087ff, 1 },
  1967. { GEN7_CP_PROTECT_REG + 19, 0x08e00, 0x08e00, 1 },
  1968. { GEN7_CP_PROTECT_REG + 20, 0x08e08, 0x08e08, 1 },
  1969. { GEN7_CP_PROTECT_REG + 21, 0x08e50, 0x08e6f, 1 },
  1970. { GEN7_CP_PROTECT_REG + 22, 0x08e80, 0x09100, 1 },
  1971. { GEN7_CP_PROTECT_REG + 23, 0x09624, 0x097ff, 1 },
  1972. { GEN7_CP_PROTECT_REG + 24, 0x09e40, 0x09e40, 1 },
  1973. { GEN7_CP_PROTECT_REG + 25, 0x09e64, 0x09e71, 1 },
  1974. { GEN7_CP_PROTECT_REG + 26, 0x09e78, 0x09fff, 1 },
  1975. { GEN7_CP_PROTECT_REG + 27, 0x0a630, 0x0a7ff, 1 },
  1976. { GEN7_CP_PROTECT_REG + 28, 0x0ae02, 0x0ae02, 1 },
  1977. { GEN7_CP_PROTECT_REG + 29, 0x0ae50, 0x0ae5f, 1 },
  1978. { GEN7_CP_PROTECT_REG + 30, 0x0ae66, 0x0ae69, 1 },
  1979. { GEN7_CP_PROTECT_REG + 31, 0x0ae6f, 0x0ae72, 1 },
  1980. { GEN7_CP_PROTECT_REG + 32, 0x0b604, 0x0b607, 1 },
  1981. { GEN7_CP_PROTECT_REG + 33, 0x0ec00, 0x0fbff, 1 },
  1982. { GEN7_CP_PROTECT_REG + 34, 0x0fc00, 0x11bff, 0 },
  1983. { GEN7_CP_PROTECT_REG + 35, 0x18400, 0x1844a, 1 },
  1984. { GEN7_CP_PROTECT_REG + 36, 0x1844b, 0x1857f, 0 },
  1985. { GEN7_CP_PROTECT_REG + 37, 0x1844c, 0x18453, 1 },
  1986. { GEN7_CP_PROTECT_REG + 38, 0x18580, 0x1a57f, 1 },
  1987. { GEN7_CP_PROTECT_REG + 39, 0x1a580, 0x1c57f, 1 },
  1988. { GEN7_CP_PROTECT_REG + 40, 0x1c580, 0x1e57f, 1 },
  1989. { GEN7_CP_PROTECT_REG + 41, 0x1f400, 0x1f843, 1 },
  1990. { GEN7_CP_PROTECT_REG + 42, 0x1f844, 0x1f8bf, 0 },
  1991. { GEN7_CP_PROTECT_REG + 43, 0x1f860, 0x1f860, 1 },
  1992. { GEN7_CP_PROTECT_REG + 44, 0x1f87f, 0x1f8a2, 1 },
  1993. { GEN7_CP_PROTECT_REG + 47, 0x1f8c0, 0x1f8c0, 1 },
  1994. { 0 },
  1995. };
  1996. static const struct adreno_gen7_core adreno_gpu_core_gen7_0_0 = {
  1997. .base = {
  1998. DEFINE_ADRENO_REV(ADRENO_REV_GEN7_0_0,
  1999. UINT_MAX, UINT_MAX, UINT_MAX, 0),
  2000. .compatible = "qcom,adreno-gpu-gen7-0-0",
  2001. .features = ADRENO_APRIV | ADRENO_IOCOHERENT |
  2002. ADRENO_CONTENT_PROTECTION | ADRENO_IFPC |
  2003. ADRENO_ACD | ADRENO_L3_VOTE | ADRENO_BCL |
  2004. ADRENO_PREEMPTION,
  2005. .gpudev = &adreno_gen7_gmu_gpudev.base,
  2006. .perfcounters = &adreno_gen7_perfcounters,
  2007. .uche_gmem_alignment = 0,
  2008. .gmem_size = SZ_2M,
  2009. .bus_width = 32,
  2010. .snapshot_size = SZ_4M,
  2011. },
  2012. .gmu_fw_version = GMU_VERSION(4, 0, 0),
  2013. .sqefw_name = "a730_sqe.fw",
  2014. .gmufw_name = "gmu_gen70000.bin",
  2015. .gmufw_bak_name = "c500_gmu.bin",
  2016. .zap_name = "a730_zap.mdt",
  2017. .hwcg = gen7_0_0_hwcg_regs,
  2018. .hwcg_count = ARRAY_SIZE(gen7_0_0_hwcg_regs),
  2019. .ao_hwcg = gen7_0_0_ao_hwcg_regs,
  2020. .ao_hwcg_count = ARRAY_SIZE(gen7_0_0_ao_hwcg_regs),
  2021. .gbif = gen7_0_0_gbif_regs,
  2022. .gbif_count = ARRAY_SIZE(gen7_0_0_gbif_regs),
  2023. .hang_detect_cycles = 0xcfffff,
  2024. .protected_regs = gen7_0_0_protected_regs,
  2025. .highest_bank_bit = 16,
  2026. .gen7_snapshot_block_list = &gen7_0_0_snapshot_block_list,
  2027. .preempt_level = 1,
  2028. .ctxt_record_size = (2860 * SZ_1K),
  2029. .fast_bus_hint = true,
  2030. };
  2031. static const struct adreno_gen7_core adreno_gpu_core_gen7_0_1 = {
  2032. .base = {
  2033. DEFINE_ADRENO_REV(ADRENO_REV_GEN7_0_1,
  2034. UINT_MAX, UINT_MAX, UINT_MAX, ANY_ID),
  2035. .compatible = "qcom,adreno-gpu-gen7-0-1",
  2036. .features = ADRENO_APRIV | ADRENO_IOCOHERENT |
  2037. ADRENO_CONTENT_PROTECTION | ADRENO_IFPC |
  2038. ADRENO_ACD | ADRENO_L3_VOTE | ADRENO_BCL |
  2039. ADRENO_PREEMPTION,
  2040. .gpudev = &adreno_gen7_gmu_gpudev.base,
  2041. .perfcounters = &adreno_gen7_perfcounters,
  2042. .uche_gmem_alignment = 0,
  2043. .gmem_size = SZ_2M,
  2044. .bus_width = 32,
  2045. .snapshot_size = SZ_4M,
  2046. },
  2047. .gmu_fw_version = GMU_VERSION(4, 0, 0),
  2048. .sqefw_name = "a730_sqe.fw",
  2049. .gmufw_name = "gmu_gen70000.bin",
  2050. .gmufw_bak_name = "c500_gmu.bin",
  2051. .zap_name = "a730_zap.mdt",
  2052. .hwcg = gen7_0_0_hwcg_regs,
  2053. .hwcg_count = ARRAY_SIZE(gen7_0_0_hwcg_regs),
  2054. .ao_hwcg = gen7_0_0_ao_hwcg_regs,
  2055. .ao_hwcg_count = ARRAY_SIZE(gen7_0_0_ao_hwcg_regs),
  2056. .gbif = gen7_0_0_gbif_regs,
  2057. .gbif_count = ARRAY_SIZE(gen7_0_0_gbif_regs),
  2058. .hang_detect_cycles = 0xcfffff,
  2059. .protected_regs = gen7_0_0_protected_regs,
  2060. .highest_bank_bit = 16,
  2061. .gen7_snapshot_block_list = &gen7_0_0_snapshot_block_list,
  2062. .preempt_level = 1,
  2063. .ctxt_record_size = (2860 * SZ_1K),
  2064. .fast_bus_hint = true,
  2065. };
  2066. extern const struct gen7_snapshot_block_list gen7_2_0_snapshot_block_list;
  2067. static const struct kgsl_regmap_list gen7_2_0_gbif_regs[] = {
  2068. { GEN7_GBIF_QSB_SIDE0, 0x00071620 },
  2069. { GEN7_GBIF_QSB_SIDE1, 0x00071620 },
  2070. { GEN7_GBIF_QSB_SIDE2, 0x00071620 },
  2071. { GEN7_GBIF_QSB_SIDE3, 0x00071620 },
  2072. { GEN7_RBBM_GBIF_CLIENT_QOS_CNTL, 0x2120212 },
  2073. { GEN7_GMU_CX_MRC_GBIF_QOS_CTRL, 0x33 },
  2074. };
  2075. static const struct kgsl_regmap_list gen7_2_0_hwcg_regs[] = {
  2076. { GEN7_RBBM_CLOCK_CNTL_SP0, 0x02222222 },
  2077. { GEN7_RBBM_CLOCK_CNTL2_SP0, 0x22022222 },
  2078. { GEN7_RBBM_CLOCK_HYST_SP0, 0x003cf3cf },
  2079. { GEN7_RBBM_CLOCK_DELAY_SP0, 0x00000080 },
  2080. { GEN7_RBBM_CLOCK_CNTL_TP0, 0x22222220 },
  2081. { GEN7_RBBM_CLOCK_CNTL2_TP0, 0x22222222 },
  2082. { GEN7_RBBM_CLOCK_CNTL3_TP0, 0x22222222 },
  2083. { GEN7_RBBM_CLOCK_CNTL4_TP0, 0x00222222 },
  2084. { GEN7_RBBM_CLOCK_HYST_TP0, 0x77777777 },
  2085. { GEN7_RBBM_CLOCK_HYST2_TP0, 0x77777777 },
  2086. { GEN7_RBBM_CLOCK_HYST3_TP0, 0x77777777 },
  2087. { GEN7_RBBM_CLOCK_HYST4_TP0, 0x00077777 },
  2088. { GEN7_RBBM_CLOCK_DELAY_TP0, 0x11111111 },
  2089. { GEN7_RBBM_CLOCK_DELAY2_TP0, 0x11111111 },
  2090. { GEN7_RBBM_CLOCK_DELAY3_TP0, 0x11111111 },
  2091. { GEN7_RBBM_CLOCK_DELAY4_TP0, 0x00011111 },
  2092. { GEN7_RBBM_CLOCK_CNTL_UCHE, 0x22222222 },
  2093. { GEN7_RBBM_CLOCK_CNTL2_UCHE, 0x00222222 },
  2094. { GEN7_RBBM_CLOCK_HYST_UCHE, 0x00000444 },
  2095. { GEN7_RBBM_CLOCK_DELAY_UCHE, 0x00000222 },
  2096. { GEN7_RBBM_CLOCK_CNTL_RB0, 0x22222222 },
  2097. { GEN7_RBBM_CLOCK_CNTL2_RB0, 0x01002222 },
  2098. { GEN7_RBBM_CLOCK_CNTL_CCU0, 0x00002220 },
  2099. { GEN7_RBBM_CLOCK_HYST_RB_CCU0, 0x44000f00 },
  2100. { GEN7_RBBM_CLOCK_CNTL_RAC, 0x25222022 },
  2101. { GEN7_RBBM_CLOCK_CNTL2_RAC, 0x00555555 },
  2102. { GEN7_RBBM_CLOCK_DELAY_RAC, 0x00000011 },
  2103. { GEN7_RBBM_CLOCK_HYST_RAC, 0x00440044 },
  2104. { GEN7_RBBM_CLOCK_CNTL_TSE_RAS_RBBM, 0x04222222 },
  2105. { GEN7_RBBM_CLOCK_MODE2_GRAS, 0x00000222 },
  2106. { GEN7_RBBM_CLOCK_MODE_BV_GRAS, 0x00222222 },
  2107. { GEN7_RBBM_CLOCK_MODE_GPC, 0x02222223 },
  2108. { GEN7_RBBM_CLOCK_MODE_VFD, 0x00222222 },
  2109. { GEN7_RBBM_CLOCK_MODE_BV_GPC, 0x00222222 },
  2110. { GEN7_RBBM_CLOCK_MODE_BV_VFD, 0x00002222 },
  2111. { GEN7_RBBM_CLOCK_HYST_TSE_RAS_RBBM, 0x00000000 },
  2112. { GEN7_RBBM_CLOCK_HYST_GPC, 0x04104004 },
  2113. { GEN7_RBBM_CLOCK_HYST_VFD, 0x00000000 },
  2114. { GEN7_RBBM_CLOCK_DELAY_TSE_RAS_RBBM, 0x00000000 },
  2115. { GEN7_RBBM_CLOCK_DELAY_GPC, 0x00000200 },
  2116. { GEN7_RBBM_CLOCK_DELAY_VFD, 0x00000000 },
  2117. { GEN7_RBBM_CLOCK_MODE_HLSQ, 0x00002222 },
  2118. { GEN7_RBBM_CLOCK_DELAY_HLSQ, 0x00000000 },
  2119. { GEN7_RBBM_CLOCK_HYST_HLSQ, 0x00000000 },
  2120. { GEN7_RBBM_CLOCK_MODE_BV_LRZ, 0x55555552 },
  2121. { GEN7_RBBM_CLOCK_HYST2_VFD, 0x00000000 },
  2122. { GEN7_RBBM_CLOCK_MODE_CP, 0x00000222 },
  2123. { GEN7_RBBM_CLOCK_CNTL, 0x8aa8aa82 },
  2124. { GEN7_RBBM_ISDB_CNT, 0x00000182 },
  2125. { GEN7_RBBM_RAC_THRESHOLD_CNT, 0x00000000 },
  2126. { GEN7_RBBM_SP_HYST_CNT, 0x00000000 },
  2127. { GEN7_RBBM_CLOCK_CNTL_GMU_GX, 0x00000222 },
  2128. { GEN7_RBBM_CLOCK_DELAY_GMU_GX, 0x00000111 },
  2129. { GEN7_RBBM_CLOCK_HYST_GMU_GX, 0x00000555 },
  2130. };
  2131. static const struct kgsl_regmap_list gen7_2_0_ao_hwcg_regs[] = {
  2132. { GEN7_GPU_GMU_AO_GMU_CGC_MODE_CNTL, 0x00020202 },
  2133. { GEN7_GPU_GMU_AO_GMU_CGC_DELAY_CNTL, 0x00010111 },
  2134. { GEN7_GPU_GMU_AO_GMU_CGC_HYST_CNTL, 0x00005555 },
  2135. };
  2136. static const struct adreno_gen7_core adreno_gpu_core_gen7_2_0 = {
  2137. .base = {
  2138. DEFINE_ADRENO_REV(ADRENO_REV_GEN7_2_0,
  2139. UINT_MAX, UINT_MAX, UINT_MAX, ANY_ID),
  2140. .compatible = "qcom,adreno-gpu-gen7-2-0",
  2141. .features = ADRENO_APRIV | ADRENO_IOCOHERENT | ADRENO_IFPC |
  2142. ADRENO_CONTENT_PROTECTION | ADRENO_ACD |
  2143. ADRENO_LPAC | ADRENO_BCL | ADRENO_L3_VOTE |
  2144. ADRENO_PREEMPTION | ADRENO_DMS,
  2145. .gpudev = &adreno_gen7_hwsched_gpudev.base,
  2146. .perfcounters = &adreno_gen7_hwsched_perfcounters,
  2147. .uche_gmem_alignment = SZ_16M,
  2148. .gmem_size = 3 * SZ_1M,
  2149. .bus_width = 32,
  2150. .snapshot_size = SZ_8M,
  2151. },
  2152. .gmu_fw_version = GMU_VERSION(4, 1, 0),
  2153. .sqefw_name = "a740_sqe.fw",
  2154. .gmufw_name = "gmu_gen70200.bin",
  2155. .zap_name = "a740_zap.mbn",
  2156. .hwcg = gen7_2_0_hwcg_regs,
  2157. .hwcg_count = ARRAY_SIZE(gen7_2_0_hwcg_regs),
  2158. .ao_hwcg = gen7_2_0_ao_hwcg_regs,
  2159. .ao_hwcg_count = ARRAY_SIZE(gen7_2_0_ao_hwcg_regs),
  2160. .gbif = gen7_2_0_gbif_regs,
  2161. .gbif_count = ARRAY_SIZE(gen7_2_0_gbif_regs),
  2162. .hang_detect_cycles = 0xcfffff,
  2163. .protected_regs = gen7_0_0_protected_regs,
  2164. .highest_bank_bit = 16,
  2165. .gmu_hub_clk_freq = 200000000,
  2166. .gen7_snapshot_block_list = &gen7_2_0_snapshot_block_list,
  2167. .bcl_data = 1,
  2168. .preempt_level = 1,
  2169. .ctxt_record_size = (4192 * SZ_1K),
  2170. .fast_bus_hint = true,
  2171. };
  2172. static const struct adreno_gen7_core adreno_gpu_core_gen7_2_1 = {
  2173. .base = {
  2174. DEFINE_ADRENO_REV(ADRENO_REV_GEN7_2_1,
  2175. UINT_MAX, UINT_MAX, UINT_MAX, ANY_ID),
  2176. .compatible = "qcom,adreno-gpu-gen7-2-1",
  2177. .features = ADRENO_APRIV | ADRENO_IOCOHERENT | ADRENO_IFPC |
  2178. ADRENO_CONTENT_PROTECTION | ADRENO_LPAC |
  2179. ADRENO_BCL | ADRENO_L3_VOTE | ADRENO_ACD |
  2180. ADRENO_PREEMPTION | ADRENO_DMS,
  2181. .gpudev = &adreno_gen7_hwsched_gpudev.base,
  2182. .perfcounters = &adreno_gen7_hwsched_perfcounters,
  2183. .uche_gmem_alignment = SZ_16M,
  2184. .gmem_size = 3 * SZ_1M,
  2185. .bus_width = 32,
  2186. .snapshot_size = SZ_8M,
  2187. },
  2188. .gmu_fw_version = GMU_VERSION(4, 1, 0),
  2189. .sqefw_name = "a740_sqe.fw",
  2190. .gmufw_name = "gmu_gen70200.bin",
  2191. .zap_name = "a740_zap.mbn",
  2192. .hwcg = gen7_2_0_hwcg_regs,
  2193. .hwcg_count = ARRAY_SIZE(gen7_2_0_hwcg_regs),
  2194. .ao_hwcg = gen7_2_0_ao_hwcg_regs,
  2195. .ao_hwcg_count = ARRAY_SIZE(gen7_2_0_ao_hwcg_regs),
  2196. .gbif = gen7_2_0_gbif_regs,
  2197. .gbif_count = ARRAY_SIZE(gen7_2_0_gbif_regs),
  2198. .hang_detect_cycles = 0xcfffff,
  2199. .protected_regs = gen7_0_0_protected_regs,
  2200. .highest_bank_bit = 16,
  2201. .gmu_hub_clk_freq = 200000000,
  2202. .gen7_snapshot_block_list = &gen7_2_0_snapshot_block_list,
  2203. .bcl_data = 1,
  2204. .preempt_level = 1,
  2205. .ctxt_record_size = (4192 * SZ_1K),
  2206. .fast_bus_hint = true,
  2207. };
  2208. static const struct adreno_gen7_core adreno_gpu_core_gen7_4_0 = {
  2209. .base = {
  2210. DEFINE_ADRENO_REV(ADRENO_REV_GEN7_4_0,
  2211. UINT_MAX, UINT_MAX, UINT_MAX, ANY_ID),
  2212. .compatible = "qcom,adreno-gpu-gen7-4-0",
  2213. .features = ADRENO_APRIV | ADRENO_IOCOHERENT |
  2214. ADRENO_CONTENT_PROTECTION | ADRENO_L3_VOTE |
  2215. ADRENO_PREEMPTION | ADRENO_IFPC | ADRENO_ACD |
  2216. ADRENO_BCL,
  2217. .gpudev = &adreno_gen7_gmu_gpudev.base,
  2218. .perfcounters = &adreno_gen7_perfcounters,
  2219. .uche_gmem_alignment = 0,
  2220. .gmem_size = SZ_2M,
  2221. .bus_width = 32,
  2222. .snapshot_size = SZ_4M,
  2223. },
  2224. .gmu_fw_version = GMU_VERSION(4, 0, 7),
  2225. .sqefw_name = "a730_sqe.fw",
  2226. .gmufw_name = "gmu_gen70000.bin",
  2227. .gmufw_bak_name = "c500_gmu.bin",
  2228. .zap_name = "a730_zap.mdt",
  2229. .hwcg = gen7_0_0_hwcg_regs,
  2230. .hwcg_count = ARRAY_SIZE(gen7_0_0_hwcg_regs),
  2231. .ao_hwcg = gen7_0_0_ao_hwcg_regs,
  2232. .ao_hwcg_count = ARRAY_SIZE(gen7_0_0_ao_hwcg_regs),
  2233. .gbif = gen7_0_0_gbif_regs,
  2234. .gbif_count = ARRAY_SIZE(gen7_0_0_gbif_regs),
  2235. .hang_detect_cycles = 0xcfffff,
  2236. .protected_regs = gen7_0_0_protected_regs,
  2237. .highest_bank_bit = 16,
  2238. .gen7_snapshot_block_list = &gen7_0_0_snapshot_block_list,
  2239. .preempt_level = 1,
  2240. .ctxt_record_size = (2860 * SZ_1K),
  2241. .fast_bus_hint = true,
  2242. };
  2243. extern const struct gen7_snapshot_block_list gen7_9_0_snapshot_block_list;
  2244. /* GEN7_9_0 protected register list */
  2245. static const struct gen7_protected_regs gen7_9_0_protected_regs[] = {
  2246. { GEN7_CP_PROTECT_REG + 0, 0x00000, 0x004ff, 0 },
  2247. { GEN7_CP_PROTECT_REG + 1, 0x0050b, 0x00563, 0 },
  2248. { GEN7_CP_PROTECT_REG + 2, 0x00584, 0x006c1, 0 },
  2249. { GEN7_CP_PROTECT_REG + 3, 0x00706, 0x00706, 0 },
  2250. { GEN7_CP_PROTECT_REG + 4, 0x00720, 0x0073f, 0 },
  2251. { GEN7_CP_PROTECT_REG + 5, 0x00760, 0x007ff, 0 },
  2252. { GEN7_CP_PROTECT_REG + 6, 0x00800, 0x00882, 1 },
  2253. { GEN7_CP_PROTECT_REG + 7, 0x008a0, 0x008a8, 1 },
  2254. { GEN7_CP_PROTECT_REG + 8, 0x008ab, 0x00a40, 0 },
  2255. { GEN7_CP_PROTECT_REG + 9, 0x00900, 0x0094d, 1 },
  2256. { GEN7_CP_PROTECT_REG + 10, 0x0098d, 0x00a3f, 1 },
  2257. { GEN7_CP_PROTECT_REG + 11, 0x00a41, 0x00bff, 1 },
  2258. { GEN7_CP_PROTECT_REG + 12, 0x00df0, 0x00df1, 1 },
  2259. { GEN7_CP_PROTECT_REG + 13, 0x00e01, 0x00e01, 1 },
  2260. { GEN7_CP_PROTECT_REG + 14, 0x00e07, 0x00e0f, 1 },
  2261. { GEN7_CP_PROTECT_REG + 15, 0x02840, 0x03cc3, 1 },
  2262. { GEN7_CP_PROTECT_REG + 16, 0x03cc4, 0x05cc3, 0 },
  2263. { GEN7_CP_PROTECT_REG + 17, 0x08630, 0x087ff, 1 },
  2264. { GEN7_CP_PROTECT_REG + 18, 0x08e00, 0x08e00, 1 },
  2265. { GEN7_CP_PROTECT_REG + 19, 0x08e08, 0x08e08, 1 },
  2266. { GEN7_CP_PROTECT_REG + 20, 0x08e50, 0x08e6f, 1 },
  2267. { GEN7_CP_PROTECT_REG + 21, 0x08e79, 0x09100, 1 },
  2268. { GEN7_CP_PROTECT_REG + 22, 0x09624, 0x097ff, 1 },
  2269. { GEN7_CP_PROTECT_REG + 23, 0x09b0b, 0x09dff, 0 },
  2270. { GEN7_CP_PROTECT_REG + 24, 0x09e1a, 0x09e1b, 1 },
  2271. { GEN7_CP_PROTECT_REG + 25, 0x09e40, 0x09e40, 1 },
  2272. { GEN7_CP_PROTECT_REG + 26, 0x09e64, 0x09e64, 1 },
  2273. { GEN7_CP_PROTECT_REG + 27, 0x09e70, 0x09e71, 1 },
  2274. { GEN7_CP_PROTECT_REG + 28, 0x09e78, 0x09fff, 1 },
  2275. { GEN7_CP_PROTECT_REG + 29, 0x0a630, 0x0a7ff, 1 },
  2276. { GEN7_CP_PROTECT_REG + 30, 0x0ae02, 0x0ae02, 1 },
  2277. { GEN7_CP_PROTECT_REG + 31, 0x0ae50, 0x0ae5f, 1 },
  2278. { GEN7_CP_PROTECT_REG + 32, 0x0ae66, 0x0ae69, 1 },
  2279. { GEN7_CP_PROTECT_REG + 33, 0x0ae6f, 0x0ae72, 1 },
  2280. { GEN7_CP_PROTECT_REG + 34, 0x0b602, 0x0b607, 1 },
  2281. { GEN7_CP_PROTECT_REG + 35, 0x0ec00, 0x0fbff, 1 },
  2282. { GEN7_CP_PROTECT_REG + 36, 0x0fc00, 0x11bff, 0 },
  2283. { GEN7_CP_PROTECT_REG + 37, 0x18400, 0x1857f, 0 },
  2284. { GEN7_CP_PROTECT_REG + 38, 0x18580, 0x1a57f, 1 },
  2285. { GEN7_CP_PROTECT_REG + 39, 0x1a580, 0x1c57f, 1 },
  2286. { GEN7_CP_PROTECT_REG + 40, 0x1c580, 0x1e57f, 1 },
  2287. { GEN7_CP_PROTECT_REG + 41, 0x1f400, 0x1f843, 1 },
  2288. { GEN7_CP_PROTECT_REG + 42, 0x1f844, 0x1f8b7, 0 },
  2289. { GEN7_CP_PROTECT_REG + 43, 0x1f87f, 0x1f8a2, 1 },
  2290. { GEN7_CP_PROTECT_REG + 44, 0x1f8b8, 0x218b7, 1 },
  2291. { GEN7_CP_PROTECT_REG + 45, 0x27800, 0x2787f, 1 },
  2292. { GEN7_CP_PROTECT_REG + 46, 0x27880, 0x27c01, 0 },
  2293. { GEN7_CP_PROTECT_REG + 47, 0x27c02, 0x27c02, 1 },
  2294. { 0 },
  2295. };
  2296. static const struct adreno_gen7_core adreno_gpu_core_gen7_9_0 = {
  2297. .base = {
  2298. DEFINE_ADRENO_REV(ADRENO_REV_GEN7_9_0,
  2299. UINT_MAX, UINT_MAX, UINT_MAX, ANY_ID),
  2300. .compatible = "qcom,adreno-gpu-gen7-9-0",
  2301. .features = ADRENO_APRIV | ADRENO_IOCOHERENT | ADRENO_AQE |
  2302. ADRENO_CONTENT_PROTECTION | ADRENO_LPAC | ADRENO_IFPC |
  2303. ADRENO_L3_VOTE | ADRENO_BCL | ADRENO_DMS |
  2304. ADRENO_HW_FENCE | ADRENO_PREEMPTION | ADRENO_ACD |
  2305. ADRENO_GMU_WARMBOOT,
  2306. .gpudev = &adreno_gen7_9_0_hwsched_gpudev.base,
  2307. .perfcounters = &adreno_gen7_9_0_hwsched_perfcounters,
  2308. .uche_gmem_alignment = SZ_16M,
  2309. .gmem_size = 3 * SZ_1M,
  2310. .bus_width = 32,
  2311. .snapshot_size = SZ_8M,
  2312. .num_ddr_channels = 4,
  2313. },
  2314. .aqefw_name = "gen70900_aqe.fw",
  2315. .sqefw_name = "gen70900_sqe.fw",
  2316. .gmufw_name = "gmu_gen70900.bin",
  2317. .zap_name = "gen70900_zap.mbn",
  2318. .ao_hwcg = gen7_2_0_ao_hwcg_regs,
  2319. .ao_hwcg_count = ARRAY_SIZE(gen7_2_0_ao_hwcg_regs),
  2320. .gbif = gen7_2_0_gbif_regs,
  2321. .gbif_count = ARRAY_SIZE(gen7_2_0_gbif_regs),
  2322. .hang_detect_cycles = 0xcfffff,
  2323. .protected_regs = gen7_9_0_protected_regs,
  2324. .highest_bank_bit = 16,
  2325. .gmu_hub_clk_freq = 200000000,
  2326. .gen7_snapshot_block_list = &gen7_9_0_snapshot_block_list,
  2327. .bcl_data = 1,
  2328. .acv_perfmode_vote = BIT(2),
  2329. .acv_perfmode_ddr_freq = MHZ_TO_KBPS(2736, 4),
  2330. .ctxt_record_size = (4208 * SZ_1K),
  2331. .preempt_level = 1,
  2332. .fast_bus_hint = true,
  2333. };
  2334. static const struct adreno_gen7_core adreno_gpu_core_gen7_9_1 = {
  2335. .base = {
  2336. DEFINE_ADRENO_REV(ADRENO_REV_GEN7_9_1,
  2337. UINT_MAX, UINT_MAX, UINT_MAX, ANY_ID),
  2338. .compatible = "qcom,adreno-gpu-gen7-9-1",
  2339. .features = ADRENO_APRIV | ADRENO_IOCOHERENT | ADRENO_AQE |
  2340. ADRENO_CONTENT_PROTECTION | ADRENO_LPAC | ADRENO_IFPC |
  2341. ADRENO_L3_VOTE | ADRENO_BCL | ADRENO_DMS |
  2342. ADRENO_HW_FENCE | ADRENO_PREEMPTION | ADRENO_ACD |
  2343. ADRENO_GMU_WARMBOOT,
  2344. .gpudev = &adreno_gen7_9_0_hwsched_gpudev.base,
  2345. .perfcounters = &adreno_gen7_9_0_hwsched_perfcounters,
  2346. .uche_gmem_alignment = SZ_16M,
  2347. .gmem_size = 3 * SZ_1M,
  2348. .bus_width = 32,
  2349. .snapshot_size = SZ_8M,
  2350. .num_ddr_channels = 4,
  2351. },
  2352. .aqefw_name = "gen70900_aqe.fw",
  2353. .sqefw_name = "gen70900_sqe.fw",
  2354. .gmufw_name = "gmu_gen70900.bin",
  2355. .zap_name = "gen70900_zap.mbn",
  2356. .ao_hwcg = gen7_2_0_ao_hwcg_regs,
  2357. .ao_hwcg_count = ARRAY_SIZE(gen7_2_0_ao_hwcg_regs),
  2358. .gbif = gen7_0_0_gbif_regs,
  2359. .gbif_count = ARRAY_SIZE(gen7_0_0_gbif_regs),
  2360. .hang_detect_cycles = 0xcfffff,
  2361. .protected_regs = gen7_9_0_protected_regs,
  2362. .highest_bank_bit = 16,
  2363. .gmu_hub_clk_freq = 200000000,
  2364. .gen7_snapshot_block_list = &gen7_9_0_snapshot_block_list,
  2365. .bcl_data = 1,
  2366. .acv_perfmode_vote = BIT(2),
  2367. .acv_perfmode_ddr_freq = MHZ_TO_KBPS(2736, 4),
  2368. .ctxt_record_size = (4208 * SZ_1K),
  2369. .preempt_level = 1,
  2370. .fast_bus_hint = true,
  2371. };
  2372. extern const struct gen7_snapshot_block_list gen7_11_0_snapshot_block_list;
  2373. static const struct adreno_gen7_core adreno_gpu_core_gen7_11_0 = {
  2374. .base = {
  2375. DEFINE_ADRENO_REV(ADRENO_REV_GEN7_11_0,
  2376. UINT_MAX, UINT_MAX, UINT_MAX, ANY_ID),
  2377. .compatible = "qcom,adreno-gpu-gen7-11-0",
  2378. .features = ADRENO_APRIV | ADRENO_IOCOHERENT | ADRENO_CONTENT_PROTECTION |
  2379. ADRENO_IFPC | ADRENO_PREEMPTION | ADRENO_L3_VOTE |
  2380. ADRENO_DMS | ADRENO_BCL,
  2381. .gpudev = &adreno_gen7_hwsched_gpudev.base,
  2382. .perfcounters = &adreno_gen7_hwsched_perfcounters,
  2383. .uche_gmem_alignment = SZ_16M,
  2384. .gmem_size = SZ_1M + SZ_512K,
  2385. .bus_width = 32,
  2386. .snapshot_size = SZ_4M,
  2387. .num_ddr_channels = 4,
  2388. },
  2389. .sqefw_name = "gen71100_sqe.fw",
  2390. .gmufw_name = "gen71100_gmu.bin",
  2391. .zap_name = "gen71100_zap.mbn",
  2392. .hwcg = gen7_2_0_hwcg_regs,
  2393. .hwcg_count = ARRAY_SIZE(gen7_2_0_hwcg_regs),
  2394. .ao_hwcg = gen7_2_0_ao_hwcg_regs,
  2395. .ao_hwcg_count = ARRAY_SIZE(gen7_2_0_ao_hwcg_regs),
  2396. .gbif = gen7_2_0_gbif_regs,
  2397. .gbif_count = ARRAY_SIZE(gen7_2_0_gbif_regs),
  2398. .hang_detect_cycles = 0xcfffff,
  2399. .protected_regs = gen7_0_0_protected_regs,
  2400. .highest_bank_bit = 16,
  2401. .gmu_hub_clk_freq = 200000000,
  2402. .gen7_snapshot_block_list = &gen7_11_0_snapshot_block_list,
  2403. .preempt_level = 1,
  2404. .acv_perfmode_vote = BIT(2),
  2405. .bcl_data = 1,
  2406. .fast_bus_hint = true,
  2407. .ctxt_record_size = (2196 * SZ_1K),
  2408. };
  2409. static const struct kgsl_regmap_list a663_hwcg_regs[] = {
  2410. {A6XX_RBBM_CLOCK_CNTL_SP0, 0x02222222},
  2411. {A6XX_RBBM_CLOCK_CNTL2_SP0, 0x02222220},
  2412. {A6XX_RBBM_CLOCK_DELAY_SP0, 0x00000080},
  2413. {A6XX_RBBM_CLOCK_HYST_SP0, 0x0000F3CF},
  2414. {A6XX_RBBM_CLOCK_CNTL_TP0, 0x22222222},
  2415. {A6XX_RBBM_CLOCK_CNTL2_TP0, 0x22222222},
  2416. {A6XX_RBBM_CLOCK_CNTL3_TP0, 0x22222222},
  2417. {A6XX_RBBM_CLOCK_CNTL4_TP0, 0x00022222},
  2418. {A6XX_RBBM_CLOCK_DELAY_TP0, 0x11111111},
  2419. {A6XX_RBBM_CLOCK_DELAY2_TP0, 0x11111111},
  2420. {A6XX_RBBM_CLOCK_DELAY3_TP0, 0x11111111},
  2421. {A6XX_RBBM_CLOCK_DELAY4_TP0, 0x00011111},
  2422. {A6XX_RBBM_CLOCK_HYST_TP0, 0x77777777},
  2423. {A6XX_RBBM_CLOCK_HYST2_TP0, 0x77777777},
  2424. {A6XX_RBBM_CLOCK_HYST3_TP0, 0x77777777},
  2425. {A6XX_RBBM_CLOCK_HYST4_TP0, 0x00077777},
  2426. {A6XX_RBBM_CLOCK_CNTL_RB0, 0x22222222},
  2427. {A6XX_RBBM_CLOCK_CNTL2_RB0, 0x01002222},
  2428. {A6XX_RBBM_CLOCK_CNTL_CCU0, 0x00002220},
  2429. {A6XX_RBBM_CLOCK_HYST_RB_CCU0, 0x00040F00},
  2430. {A6XX_RBBM_CLOCK_CNTL_RAC, 0x25222022},
  2431. {A6XX_RBBM_CLOCK_CNTL2_RAC, 0x00005555},
  2432. {A6XX_RBBM_CLOCK_DELAY_RAC, 0x00000011},
  2433. {A6XX_RBBM_CLOCK_HYST_RAC, 0x00445044},
  2434. {A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM, 0x04222222},
  2435. {A6XX_RBBM_CLOCK_MODE_VFD, 0x00002222},
  2436. {A6XX_RBBM_CLOCK_MODE_GPC, 0x00222222},
  2437. {A6XX_RBBM_CLOCK_DELAY_HLSQ_2, 0x00000002},
  2438. {A6XX_RBBM_CLOCK_MODE_HLSQ, 0x00002222},
  2439. {A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM, 0x00004000},
  2440. {A6XX_RBBM_CLOCK_DELAY_VFD, 0x00002222},
  2441. {A6XX_RBBM_CLOCK_DELAY_GPC, 0x00000200},
  2442. {A6XX_RBBM_CLOCK_DELAY_HLSQ, 0x00000000},
  2443. {A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM, 0x00000000},
  2444. {A6XX_RBBM_CLOCK_HYST_VFD, 0x00000000},
  2445. {A6XX_RBBM_CLOCK_HYST_GPC, 0x04104004},
  2446. {A6XX_RBBM_CLOCK_HYST_HLSQ, 0x00000000},
  2447. {A6XX_RBBM_CLOCK_CNTL_TEX_FCHE, 0x00000222},
  2448. {A6XX_RBBM_CLOCK_DELAY_TEX_FCHE, 0x00000111},
  2449. {A6XX_RBBM_CLOCK_HYST_TEX_FCHE, 0x00000000},
  2450. {A6XX_RBBM_CLOCK_CNTL_UCHE, 0x22222222},
  2451. {A6XX_RBBM_CLOCK_HYST_UCHE, 0x00000004},
  2452. {A6XX_RBBM_CLOCK_DELAY_UCHE, 0x00000002},
  2453. {A6XX_RBBM_CLOCK_CNTL, 0x8AA8AA82},
  2454. {A6XX_RBBM_ISDB_CNT, 0x00000182},
  2455. {A6XX_RBBM_RAC_THRESHOLD_CNT, 0x00000000},
  2456. {A6XX_RBBM_SP_HYST_CNT, 0x00000000},
  2457. {A6XX_RBBM_CLOCK_CNTL_GMU_GX, 0x00000222},
  2458. {A6XX_RBBM_CLOCK_DELAY_GMU_GX, 0x00000111},
  2459. {A6XX_RBBM_CLOCK_HYST_GMU_GX, 0x00000555},
  2460. {A6XX_GMUAO_GMU_CGC_MODE_CNTL, 0x00020200},
  2461. {A6XX_GMUAO_GMU_CGC_DELAY_CNTL, 0x00010111},
  2462. {A6XX_GMUAO_GMU_CGC_HYST_CNTL, 0x00005555},
  2463. {A6XX_GMUCX_GMU_WFI_CONFIG, 0x00000000},
  2464. };
  2465. /* A633 protected register list */
  2466. static const struct adreno_protected_regs a663_protected_regs[] = {
  2467. { A6XX_CP_PROTECT_REG + 0, 0x00000, 0x004ff, 0 },
  2468. { A6XX_CP_PROTECT_REG + 1, 0x00501, 0x00506, 0 },
  2469. { A6XX_CP_PROTECT_REG + 2, 0x0050b, 0x007ff, 0 },
  2470. { A6XX_CP_PROTECT_REG + 3, 0x0050e, 0x0050e, 1 },
  2471. { A6XX_CP_PROTECT_REG + 4, 0x00510, 0x00510, 1 },
  2472. { A6XX_CP_PROTECT_REG + 5, 0x00534, 0x00534, 1 },
  2473. { A6XX_CP_PROTECT_REG + 6, 0x00800, 0x00882, 1 },
  2474. { A6XX_CP_PROTECT_REG + 7, 0x008a0, 0x008a8, 1 },
  2475. { A6XX_CP_PROTECT_REG + 8, 0x008ab, 0x008cf, 1 },
  2476. { A6XX_CP_PROTECT_REG + 9, 0x008d0, 0x0098c, 0 },
  2477. { A6XX_CP_PROTECT_REG + 10, 0x00900, 0x0094d, 1 },
  2478. { A6XX_CP_PROTECT_REG + 11, 0x0098d, 0x00bff, 1 },
  2479. { A6XX_CP_PROTECT_REG + 12, 0x00e00, 0x00e01, 1 },
  2480. { A6XX_CP_PROTECT_REG + 13, 0x00e03, 0x00e0f, 1 },
  2481. { A6XX_CP_PROTECT_REG + 14, 0x03c00, 0x03cc3, 1 },
  2482. { A6XX_CP_PROTECT_REG + 15, 0x03cc4, 0x05cc3, 0 },
  2483. { A6XX_CP_PROTECT_REG + 16, 0x08630, 0x087ff, 1 },
  2484. { A6XX_CP_PROTECT_REG + 17, 0x08e00, 0x08e00, 1 },
  2485. { A6XX_CP_PROTECT_REG + 18, 0x08e08, 0x08e08, 1 },
  2486. { A6XX_CP_PROTECT_REG + 19, 0x08e50, 0x08e6f, 1 },
  2487. { A6XX_CP_PROTECT_REG + 20, 0x08e80, 0x090ff, 1 },
  2488. { A6XX_CP_PROTECT_REG + 21, 0x09624, 0x097ff, 1 },
  2489. { A6XX_CP_PROTECT_REG + 22, 0x09e60, 0x09e71, 1 },
  2490. { A6XX_CP_PROTECT_REG + 23, 0x09e78, 0x09fff, 1 },
  2491. { A6XX_CP_PROTECT_REG + 24, 0x0a630, 0x0a7ff, 1 },
  2492. { A6XX_CP_PROTECT_REG + 25, 0x0ae02, 0x0ae02, 1 },
  2493. { A6XX_CP_PROTECT_REG + 26, 0x0ae50, 0x0af7f, 1 },
  2494. { A6XX_CP_PROTECT_REG + 27, 0x0b604, 0x0b604, 1 },
  2495. { A6XX_CP_PROTECT_REG + 28, 0x0b608, 0x0b60e, 1 },
  2496. { A6XX_CP_PROTECT_REG + 29, 0x0be02, 0x0be03, 1 },
  2497. { A6XX_CP_PROTECT_REG + 30, 0x0be20, 0x0bf7f, 1 },
  2498. { A6XX_CP_PROTECT_REG + 31, 0x0d000, 0x0d5ff, 1 },
  2499. { A6XX_CP_PROTECT_REG + 32, 0x0f000, 0x0fbff, 1 },
  2500. { A6XX_CP_PROTECT_REG + 33, 0x0fc00, 0x11bff, 0 },
  2501. /* Note1: lastspanunbound feature is enabled in
  2502. * CP_PROTECT_CNTL and hence this last
  2503. * protect register(REG_47) has infinite
  2504. * span.
  2505. *
  2506. * Note2: Although we are protecting the SMMU
  2507. * range here the CP register protection
  2508. * interrupt will not fire for this range
  2509. * as GPU RAP can only cover the GPU 18-bit
  2510. * DW address space. So max address offset
  2511. * is 0x3FFFF. Also note that the max number
  2512. * of bits for address in violation in
  2513. * CP_PROT_STATUS is only 18.
  2514. */
  2515. { A6XX_CP_PROTECT_REG + 47, 0x11c00, 0x00000, 1 },
  2516. { 0 },
  2517. };
  2518. static const struct adreno_a6xx_core adreno_gpu_core_a663 = {
  2519. .base = {
  2520. DEFINE_ADRENO_REV(ADRENO_REV_A663, 6, 6, 3, ANY_ID),
  2521. .features = ADRENO_APRIV |
  2522. ADRENO_IOCOHERENT | ADRENO_CONTENT_PROTECTION |
  2523. ADRENO_PREEMPTION | ADRENO_ACD,
  2524. .gpudev = &adreno_a6xx_gmu_gpudev.base,
  2525. .perfcounters = &adreno_a6xx_perfcounters,
  2526. .gmem_size = SZ_1M + SZ_512K,
  2527. .bus_width = 32,
  2528. .snapshot_size = SZ_2M,
  2529. },
  2530. .prim_fifo_threshold = 0x00300000,
  2531. .gmu_major = 2,
  2532. .gmu_minor = 0,
  2533. .sqefw_name = "a660_sqe.fw",
  2534. .gmufw_name = "a663_gmu.bin",
  2535. .zap_name = "a663_zap.mdt",
  2536. .hwcg = a663_hwcg_regs,
  2537. .hwcg_count = ARRAY_SIZE(a663_hwcg_regs),
  2538. .vbif = a650_gbif_regs,
  2539. .vbif_count = ARRAY_SIZE(a650_gbif_regs),
  2540. .hang_detect_cycles = 0xcfffff,
  2541. .veto_fal10 = true,
  2542. .protected_regs = a663_protected_regs,
  2543. .disable_tseskip = true,
  2544. .highest_bank_bit = 13,
  2545. .pdc_in_aop = true,
  2546. .ctxt_record_size = 2496 * 1024,
  2547. };
  2548. extern const struct gen8_snapshot_block_list gen8_3_0_snapshot_block_list;
  2549. static const struct kgsl_regmap_list gen8_3_0_gbif_cx_regs[] = {
  2550. { GEN8_GBIF_QSB_SIDE0, 0x00071e20 },
  2551. { GEN8_GBIF_QSB_SIDE1, 0x00071e20 },
  2552. { GEN8_GBIF_QSB_SIDE2, 0x00071e20 },
  2553. { GEN8_GBIF_QSB_SIDE3, 0x00071e20 },
  2554. { GEN8_GBIF_CX_CONFIG, 0x20023000 },
  2555. };
  2556. /* GEN8_3_0 noncontext register list */
  2557. static const struct gen8_nonctxt_regs gen8_3_0_nonctxt_regs[] = {
  2558. { GEN8_CP_SMMU_STREAM_ID_LPAC, 0x00000101, BIT(PIPE_NONE) },
  2559. { GEN8_GRAS_DBG_ECO_CNTL, 0x00f80800, BIT(PIPE_BV) | BIT(PIPE_BR) },
  2560. { GEN8_PC_AUTO_VERTEX_STRIDE, 0x00000001, BIT(PIPE_BV) | BIT(PIPE_BR) },
  2561. { GEN8_PC_VIS_STREAM_CNTL, 0x10010000, BIT(PIPE_BV) | BIT(PIPE_BR) },
  2562. { GEN8_PC_CONTEXT_SWITCH_STABILIZE_CNTL_1, 0x00000002, BIT(PIPE_BV) | BIT(PIPE_BR) },
  2563. { GEN8_PC_CHICKEN_BITS_1, 0x00000003, BIT(PIPE_BV) | BIT(PIPE_BR) },
  2564. { GEN8_PC_CHICKEN_BITS_2, 0x00000200, BIT(PIPE_BV) | BIT(PIPE_BR) },
  2565. { GEN8_PC_CHICKEN_BITS_3, 0x00500000, BIT(PIPE_BV) | BIT(PIPE_BR) },
  2566. { GEN8_PC_CHICKEN_BITS_4, 0x00500050, BIT(PIPE_BV) | BIT(PIPE_BR) },
  2567. { GEN8_RB_CCU_CNTL, 0x00000068, BIT(PIPE_BR) },
  2568. { GEN8_RB_RESOLVE_PREFETCH_CNTL, 0x00000007, BIT(PIPE_BR) },
  2569. { GEN8_RB_CMP_DBG_ECO_CNTL, 0x00004000, BIT(PIPE_BR) },
  2570. { GEN8_RBBM_NC_MODE_CNTL, 0x00000001, BIT(PIPE_NONE) },
  2571. { GEN8_RBBM_SLICE_NC_MODE_CNTL, 0x00000001, BIT(PIPE_NONE) },
  2572. { GEN8_RBBM_WAIT_IDLE_CLOCKS_CNTL, 0x00000030, BIT(PIPE_NONE) },
  2573. { GEN8_RBBM_WAIT_IDLE_CLOCKS_CNTL2, 0x00000030, BIT(PIPE_NONE) },
  2574. { GEN8_UCHE_GBIF_GX_CONFIG, 0x010240e0, BIT(PIPE_NONE) },
  2575. { GEN8_RBBM_GBIF_CLIENT_QOS_CNTL, 0x22122212, BIT(PIPE_NONE) },
  2576. { GEN8_RBBM_CGC_P2S_CNTL, 0x00000040, BIT(PIPE_NONE) },
  2577. /*
  2578. * BIT(22): Disable PS out of order retire
  2579. * BIT(23): Enable half wave mode and MM instruction src&dst is half precision
  2580. */
  2581. { GEN8_SP_CHICKEN_BITS_2, BIT(22) | BIT(23), BIT(PIPE_NONE) },
  2582. { GEN8_SP_CHICKEN_BITS_3, 0x00300000, BIT(PIPE_NONE) },
  2583. { GEN8_SP_PERFCTR_SHADER_MASK, 0x0000003f, BIT(PIPE_NONE) },
  2584. { GEN8_SP_HLSQ_TIMEOUT_THRESHOLD_DP, 0x00000080, BIT(PIPE_NONE) },
  2585. { GEN8_SP_READ_SEL, 0x0001ff00, BIT(PIPE_NONE) },
  2586. { GEN8_TPL1_DBG_ECO_CNTL, 0x10000000, BIT(PIPE_NONE) },
  2587. { GEN8_TPL1_DBG_ECO_CNTL1, 0x00000724, BIT(PIPE_NONE) },
  2588. { GEN8_UCHE_MODE_CNTL, 0x00020000, BIT(PIPE_NONE) },
  2589. { GEN8_UCHE_CCHE_MODE_CNTL, 0x00001000, BIT(PIPE_NONE) },
  2590. { GEN8_UCHE_CCHE_CACHE_WAYS, 0x00000800, BIT(PIPE_NONE) },
  2591. { GEN8_UCHE_CACHE_WAYS, 0x00080000, BIT(PIPE_NONE) },
  2592. { GEN8_UCHE_VARB_IDLE_TIMEOUT, 0x00000020, BIT(PIPE_NONE) },
  2593. { GEN8_VFD_DBG_ECO_CNTL, 0x00008000, BIT(PIPE_BV) | BIT(PIPE_BR) },
  2594. { GEN8_VFD_CB_BV_THRESHOLD, 0x00500050, BIT(PIPE_BV) | BIT(PIPE_BR) },
  2595. { GEN8_VFD_CB_BR_THRESHOLD, 0x00600060, BIT(PIPE_BV) | BIT(PIPE_BR) },
  2596. { GEN8_VFD_CB_BUSY_REQ_CNT, 0x00200020, BIT(PIPE_BV) | BIT(PIPE_BR) },
  2597. { GEN8_VFD_CB_LP_REQ_CNT, 0x00100020, BIT(PIPE_BV) | BIT(PIPE_BR) },
  2598. { GEN8_VPC_FLATSHADE_MODE_CNTL, 0x00000001, BIT(PIPE_BV) | BIT(PIPE_BR) },
  2599. { GEN8_VSC_BIN_SIZE, 0x00010001, BIT(PIPE_NONE) },
  2600. { GEN8_RB_GC_GMEM_PROTECT, 0x00900000, BIT(PIPE_BR) },
  2601. { 0 },
  2602. };
  2603. static const struct kgsl_regmap_list gen8_ao_hwcg_regs[] = {
  2604. { GEN8_GMUAO_CGC_MODE_CNTL, 0x00020000 },
  2605. { GEN8_GMUAO_CGC_DELAY_CNTL, 0x00010111 },
  2606. { GEN8_GMUAO_CGC_HYST_CNTL, 0x00005555 },
  2607. };
  2608. /* GEN8_3_0 protected register list */
  2609. static const struct gen8_protected_regs gen8_3_0_protected_regs[] = {
  2610. { GEN8_CP_PROTECT_REG_GLOBAL + 0, 0x00000, 0x003a3, 0 },
  2611. { GEN8_CP_PROTECT_REG_GLOBAL + 1, 0x003b4, 0x0043f, 0 },
  2612. { GEN8_CP_PROTECT_REG_GLOBAL + 2, 0x00440, 0x0045f, 1 },
  2613. { GEN8_CP_PROTECT_REG_GLOBAL + 3, 0x00580, 0x005df, 0 },
  2614. { GEN8_CP_PROTECT_REG_GLOBAL + 4, 0x005e0, 0x006ff, 1 },
  2615. { GEN8_CP_PROTECT_REG_GLOBAL + 5, 0x0074a, 0x0074f, 0 },
  2616. { GEN8_CP_PROTECT_REG_GLOBAL + 6, 0x00759, 0x0077f, 0 },
  2617. { GEN8_CP_PROTECT_REG_GLOBAL + 7, 0x00789, 0x00789, 0 },
  2618. { GEN8_CP_PROTECT_REG_GLOBAL + 8, 0x0078c, 0x0079f, 0 },
  2619. { GEN8_CP_PROTECT_REG_GLOBAL + 9, 0x00800, 0x00829, 1 },
  2620. { GEN8_CP_PROTECT_REG_GLOBAL + 10, 0x00837, 0x008e6, 1 },
  2621. { GEN8_CP_PROTECT_REG_GLOBAL + 11, 0x008e7, 0x009b0, 0 },
  2622. { GEN8_CP_PROTECT_REG_GLOBAL + 12, 0x008ec, 0x009af, 1 },
  2623. { GEN8_CP_PROTECT_REG_GLOBAL + 13, 0x009b1, 0x00c01, 1 },
  2624. { GEN8_CP_PROTECT_REG_GLOBAL + 14, 0x00ce0, 0x00ce1, 0 },
  2625. { GEN8_CP_PROTECT_REG_GLOBAL + 15, 0x00df0, 0x00df0, 0 },
  2626. { GEN8_CP_PROTECT_REG_GLOBAL + 16, 0x00df1, 0x00df1, 1 },
  2627. { GEN8_CP_PROTECT_REG_GLOBAL + 17, 0x00e01, 0x00e01, 1 },
  2628. { GEN8_CP_PROTECT_REG_GLOBAL + 18, 0x00e03, 0x02e02, 1 },
  2629. { GEN8_CP_PROTECT_REG_GLOBAL + 19, 0x03c00, 0x03cc5, 1 },
  2630. { GEN8_CP_PROTECT_REG_GLOBAL + 20, 0x03cc6, 0x05cc5, 0 },
  2631. { GEN8_CP_PROTECT_REG_GLOBAL + 21, 0x08600, 0x087ff, 1 },
  2632. { GEN8_CP_PROTECT_REG_GLOBAL + 22, 0x08e00, 0x08eff, 1 },
  2633. { GEN8_CP_PROTECT_REG_GLOBAL + 23, 0x08f00, 0x08f00, 0 },
  2634. { GEN8_CP_PROTECT_REG_GLOBAL + 24, 0x08f01, 0x090bf, 1 },
  2635. { GEN8_CP_PROTECT_REG_GLOBAL + 25, 0x09600, 0x097ff, 1 },
  2636. { GEN8_CP_PROTECT_REG_GLOBAL + 26, 0x0981a, 0x09aff, 0 },
  2637. { GEN8_CP_PROTECT_REG_GLOBAL + 27, 0x09e00, 0x09fff, 1 },
  2638. { GEN8_CP_PROTECT_REG_GLOBAL + 28, 0x0a600, 0x0a7ff, 1 },
  2639. { GEN8_CP_PROTECT_REG_GLOBAL + 29, 0x0ae00, 0x0ae06, 1 },
  2640. { GEN8_CP_PROTECT_REG_GLOBAL + 30, 0x0ae08, 0x0ae0e, 1 },
  2641. { GEN8_CP_PROTECT_REG_GLOBAL + 31, 0x0ae10, 0x0b17f, 1 },
  2642. { GEN8_CP_PROTECT_REG_GLOBAL + 32, 0x0b600, 0x0d5ff, 1 },
  2643. { GEN8_CP_PROTECT_REG_GLOBAL + 33, 0x0dc00, 0x0fbff, 1 },
  2644. { GEN8_CP_PROTECT_REG_GLOBAL + 34, 0x0fc00, 0x11bff, 0 },
  2645. { GEN8_CP_PROTECT_REG_GLOBAL + 35, 0x18400, 0x1843f, 1 },
  2646. { GEN8_CP_PROTECT_REG_GLOBAL + 36, 0x18440, 0x1857f, 0 },
  2647. { GEN8_CP_PROTECT_REG_GLOBAL + 37, 0x18580, 0x1a57f, 1 },
  2648. { GEN8_CP_PROTECT_REG_GLOBAL + 38, 0x1b400, 0x1d3ff, 1 },
  2649. { GEN8_CP_PROTECT_REG_GLOBAL + 39, 0x1f400, 0x1f877, 1 },
  2650. { GEN8_CP_PROTECT_REG_GLOBAL + 40, 0x1f878, 0x1ffff, 0 },
  2651. { GEN8_CP_PROTECT_REG_GLOBAL + 41, 0x1f930, 0x1fc59, 1 },
  2652. { GEN8_CP_PROTECT_REG_GLOBAL + 42, 0x20000, 0x21fff, 1 },
  2653. { GEN8_CP_PROTECT_REG_GLOBAL + 43, 0x27800, 0x2787f, 1 },
  2654. { GEN8_CP_PROTECT_REG_GLOBAL + 44, 0x27880, 0x27c01, 0 },
  2655. { GEN8_CP_PROTECT_REG_GLOBAL + 45, 0x27882, 0x27883, 1 },
  2656. { GEN8_CP_PROTECT_REG_GLOBAL + 63, 0x27c02, 0x27c02, 1 },
  2657. { 0 },
  2658. };
  2659. static const struct adreno_gen8_core adreno_gpu_core_gen8_3_0 = {
  2660. .base = {
  2661. DEFINE_ADRENO_REV(ADRENO_REV_GEN8_3_0,
  2662. UINT_MAX, UINT_MAX, UINT_MAX, ANY_ID),
  2663. .compatible = "qcom,adreno-gpu-gen8-3-0",
  2664. .features = ADRENO_APRIV | ADRENO_IOCOHERENT |
  2665. ADRENO_CONTENT_PROTECTION | ADRENO_IFPC | ADRENO_BCL |
  2666. ADRENO_PREEMPTION | ADRENO_ACD,
  2667. .gpudev = &adreno_gen8_hwsched_gpudev.base,
  2668. .perfcounters = &adreno_gen8_perfcounters,
  2669. .uche_gmem_alignment = SZ_64M,
  2670. .gmem_size = (SZ_512K + SZ_64K),
  2671. .bus_width = 32,
  2672. .snapshot_size = SZ_8M,
  2673. .num_ddr_channels = 2,
  2674. },
  2675. .sqefw_name = "gen80300_sqe.fw",
  2676. .gmufw_name = "gen80300_gmu.bin",
  2677. .zap_name = "gen80300_zap.mbn",
  2678. .ao_hwcg = gen8_ao_hwcg_regs,
  2679. .ao_hwcg_count = ARRAY_SIZE(gen8_ao_hwcg_regs),
  2680. .gbif = gen8_3_0_gbif_cx_regs,
  2681. .gbif_count = ARRAY_SIZE(gen8_3_0_gbif_cx_regs),
  2682. .hang_detect_cycles = 0xcfffff,
  2683. .protected_regs = gen8_3_0_protected_regs,
  2684. .nonctxt_regs = gen8_3_0_nonctxt_regs,
  2685. .highest_bank_bit = 15,
  2686. .gmu_hub_clk_freq = 200000000,
  2687. .gen8_snapshot_block_list = &gen8_3_0_snapshot_block_list,
  2688. .ctxt_record_size = (4558 * SZ_1K),
  2689. .bcl_data = 1,
  2690. .noc_timeout_us = 6800, /* 6.8 msec */
  2691. };
  2692. static const struct adreno_gpu_core *adreno_gpulist[] = {
  2693. &adreno_gpu_core_a306.base,
  2694. &adreno_gpu_core_a306a.base,
  2695. &adreno_gpu_core_a304.base,
  2696. &adreno_gpu_core_a405, /* Deprecated */
  2697. &adreno_gpu_core_a418, /* Deprecated */
  2698. &adreno_gpu_core_a420, /* Deprecated */
  2699. &adreno_gpu_core_a430, /* Deprecated */
  2700. &adreno_gpu_core_a530v1, /* Deprecated */
  2701. &adreno_gpu_core_a530v2.base,
  2702. &adreno_gpu_core_a530v3.base,
  2703. &adreno_gpu_core_a505.base,
  2704. &adreno_gpu_core_a506.base,
  2705. &adreno_gpu_core_a510.base,
  2706. &adreno_gpu_core_a540v1, /* Deprecated */
  2707. &adreno_gpu_core_a540v2.base,
  2708. &adreno_gpu_core_a512.base,
  2709. &adreno_gpu_core_a508.base,
  2710. &adreno_gpu_core_a630v1, /* Deprecated */
  2711. &adreno_gpu_core_a630v2.base,
  2712. &adreno_gpu_core_a615.base,
  2713. &adreno_gpu_core_a618.base,
  2714. &adreno_gpu_core_a619.base,
  2715. &adreno_gpu_core_a619_variant.base,
  2716. &adreno_gpu_core_a620.base,
  2717. &adreno_gpu_core_a621.base,
  2718. &adreno_gpu_core_a635.base,
  2719. &adreno_gpu_core_a640.base,
  2720. &adreno_gpu_core_a650.base,
  2721. &adreno_gpu_core_a650v2.base,
  2722. &adreno_gpu_core_a660.base,
  2723. &adreno_gpu_core_a660v2.base,
  2724. &adreno_gpu_core_a663.base,
  2725. &adreno_gpu_core_a680.base,
  2726. &adreno_gpu_core_a612.base,
  2727. &adreno_gpu_core_a616.base,
  2728. &adreno_gpu_core_a610.base,
  2729. &adreno_gpu_core_a611.base,
  2730. &adreno_gpu_core_a660_shima.base,
  2731. &adreno_gpu_core_a702.base,
  2732. &adreno_gpu_core_gen7_0_0.base,
  2733. &adreno_gpu_core_gen7_0_1.base,
  2734. &adreno_gpu_core_a662.base,
  2735. &adreno_gpu_core_gen7_2_0.base,
  2736. &adreno_gpu_core_gen7_2_1.base,
  2737. &adreno_gpu_core_gen7_4_0.base,
  2738. &adreno_gpu_core_gen7_9_0.base,
  2739. &adreno_gpu_core_gen7_9_1.base,
  2740. &adreno_gpu_core_gen7_11_0.base,
  2741. &adreno_gpu_core_gen8_3_0.base,
  2742. };