adreno_gen8_gmu.c 85 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2021, The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2023-2024, Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #include <dt-bindings/regulator/qcom,rpmh-regulator-levels.h>
  7. #include <linux/clk.h>
  8. #include <linux/component.h>
  9. #include <linux/delay.h>
  10. #include <linux/dma-map-ops.h>
  11. #include <linux/firmware.h>
  12. #include <linux/interconnect.h>
  13. #include <linux/io.h>
  14. #include <linux/kobject.h>
  15. #include <linux/of_platform.h>
  16. #include <linux/qcom-iommu-util.h>
  17. #include <linux/regulator/consumer.h>
  18. #include <linux/slab.h>
  19. #include <linux/soc/qcom/llcc-qcom.h>
  20. #include <linux/sysfs.h>
  21. #include <soc/qcom/cmd-db.h>
  22. #include "adreno.h"
  23. #include "adreno_gen8.h"
  24. #include "adreno_trace.h"
  25. #include "kgsl_bus.h"
  26. #include "kgsl_device.h"
  27. #include "kgsl_trace.h"
  28. #include "kgsl_util.h"
  29. static struct gmu_vma_entry gen8_gmu_vma[] = {
  30. [GMU_ITCM] = {
  31. .start = 0x00000000,
  32. .size = SZ_16K,
  33. },
  34. [GMU_CACHE] = {
  35. .start = SZ_16K,
  36. .size = (SZ_16M - SZ_16K),
  37. .next_va = SZ_16K,
  38. },
  39. [GMU_DTCM] = {
  40. .start = SZ_256M + SZ_16K,
  41. .size = SZ_16K,
  42. },
  43. [GMU_DCACHE] = {
  44. .start = 0x0,
  45. .size = 0x0,
  46. },
  47. [GMU_NONCACHED_KERNEL] = {
  48. .start = 0x60000000,
  49. .size = SZ_512M,
  50. .next_va = 0x60000000,
  51. },
  52. [GMU_NONCACHED_KERNEL_EXTENDED] = {
  53. .start = 0xc0000000,
  54. .size = SZ_512M,
  55. .next_va = 0xc0000000,
  56. },
  57. };
  58. static ssize_t log_stream_enable_store(struct kobject *kobj,
  59. struct kobj_attribute *attr, const char *buf, size_t count)
  60. {
  61. struct gen8_gmu_device *gmu = container_of(kobj, struct gen8_gmu_device, log_kobj);
  62. bool val;
  63. int ret;
  64. ret = kstrtobool(buf, &val);
  65. if (ret)
  66. return ret;
  67. gmu->log_stream_enable = val;
  68. adreno_mark_for_coldboot(gen8_gmu_to_adreno(gmu));
  69. return count;
  70. }
  71. static ssize_t log_stream_enable_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
  72. {
  73. struct gen8_gmu_device *gmu = container_of(kobj, struct gen8_gmu_device, log_kobj);
  74. return scnprintf(buf, PAGE_SIZE, "%d\n", gmu->log_stream_enable);
  75. }
  76. static ssize_t log_group_mask_store(struct kobject *kobj,
  77. struct kobj_attribute *attr, const char *buf, size_t count)
  78. {
  79. struct gen8_gmu_device *gmu = container_of(kobj, struct gen8_gmu_device, log_kobj);
  80. u32 val;
  81. int ret;
  82. ret = kstrtou32(buf, 0, &val);
  83. if (ret)
  84. return ret;
  85. gmu->log_group_mask = val;
  86. adreno_mark_for_coldboot(gen8_gmu_to_adreno(gmu));
  87. return count;
  88. }
  89. static ssize_t log_group_mask_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
  90. {
  91. struct gen8_gmu_device *gmu = container_of(kobj, struct gen8_gmu_device, log_kobj);
  92. return scnprintf(buf, PAGE_SIZE, "%x\n", gmu->log_group_mask);
  93. }
  94. static struct kobj_attribute log_stream_enable_attr =
  95. __ATTR(log_stream_enable, 0644, log_stream_enable_show, log_stream_enable_store);
  96. static struct kobj_attribute log_group_mask_attr =
  97. __ATTR(log_group_mask, 0644, log_group_mask_show, log_group_mask_store);
  98. static struct attribute *log_attrs[] = {
  99. &log_stream_enable_attr.attr,
  100. &log_group_mask_attr.attr,
  101. NULL,
  102. };
  103. ATTRIBUTE_GROUPS(log);
  104. static struct kobj_type log_kobj_type = {
  105. .sysfs_ops = &kobj_sysfs_ops,
  106. .default_groups = log_groups,
  107. };
  108. static ssize_t stats_enable_store(struct kobject *kobj,
  109. struct kobj_attribute *attr, const char *buf, size_t count)
  110. {
  111. struct gen8_gmu_device *gmu = container_of(kobj, struct gen8_gmu_device, stats_kobj);
  112. bool val;
  113. int ret;
  114. ret = kstrtobool(buf, &val);
  115. if (ret)
  116. return ret;
  117. gmu->stats_enable = val;
  118. adreno_mark_for_coldboot(gen8_gmu_to_adreno(gmu));
  119. return count;
  120. }
  121. static ssize_t stats_enable_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
  122. {
  123. struct gen8_gmu_device *gmu = container_of(kobj, struct gen8_gmu_device, stats_kobj);
  124. return scnprintf(buf, PAGE_SIZE, "%d\n", gmu->stats_enable);
  125. }
  126. static ssize_t stats_mask_store(struct kobject *kobj,
  127. struct kobj_attribute *attr, const char *buf, size_t count)
  128. {
  129. struct gen8_gmu_device *gmu = container_of(kobj, struct gen8_gmu_device, stats_kobj);
  130. u32 val;
  131. int ret;
  132. ret = kstrtou32(buf, 0, &val);
  133. if (ret)
  134. return ret;
  135. gmu->stats_mask = val;
  136. adreno_mark_for_coldboot(gen8_gmu_to_adreno(gmu));
  137. return count;
  138. }
  139. static ssize_t stats_mask_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
  140. {
  141. struct gen8_gmu_device *gmu = container_of(kobj, struct gen8_gmu_device, stats_kobj);
  142. return scnprintf(buf, PAGE_SIZE, "%x\n", gmu->stats_mask);
  143. }
  144. static ssize_t stats_interval_store(struct kobject *kobj,
  145. struct kobj_attribute *attr, const char *buf, size_t count)
  146. {
  147. struct gen8_gmu_device *gmu = container_of(kobj, struct gen8_gmu_device, stats_kobj);
  148. u32 val;
  149. int ret;
  150. ret = kstrtou32(buf, 0, &val);
  151. if (ret)
  152. return ret;
  153. gmu->stats_interval = val;
  154. adreno_mark_for_coldboot(gen8_gmu_to_adreno(gmu));
  155. return count;
  156. }
  157. static ssize_t stats_interval_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
  158. {
  159. struct gen8_gmu_device *gmu = container_of(kobj, struct gen8_gmu_device, stats_kobj);
  160. return scnprintf(buf, PAGE_SIZE, "%x\n", gmu->stats_interval);
  161. }
  162. static struct kobj_attribute stats_enable_attr =
  163. __ATTR(stats_enable, 0644, stats_enable_show, stats_enable_store);
  164. static struct kobj_attribute stats_mask_attr =
  165. __ATTR(stats_mask, 0644, stats_mask_show, stats_mask_store);
  166. static struct kobj_attribute stats_interval_attr =
  167. __ATTR(stats_interval, 0644, stats_interval_show, stats_interval_store);
  168. static struct attribute *stats_attrs[] = {
  169. &stats_enable_attr.attr,
  170. &stats_mask_attr.attr,
  171. &stats_interval_attr.attr,
  172. NULL,
  173. };
  174. ATTRIBUTE_GROUPS(stats);
  175. static struct kobj_type stats_kobj_type = {
  176. .sysfs_ops = &kobj_sysfs_ops,
  177. .default_groups = stats_groups,
  178. };
  179. static int gen8_timed_poll_check_rscc(struct gen8_gmu_device *gmu,
  180. u32 offset, u32 expected_ret,
  181. u32 timeout, u32 mask)
  182. {
  183. u32 value;
  184. return readl_poll_timeout(gmu->rscc_virt + (offset << 2), value,
  185. (value & mask) == expected_ret, 100, timeout * 1000);
  186. }
  187. struct gen8_gmu_device *to_gen8_gmu(struct adreno_device *adreno_dev)
  188. {
  189. struct gen8_device *gen8_dev = container_of(adreno_dev,
  190. struct gen8_device, adreno_dev);
  191. return &gen8_dev->gmu;
  192. }
  193. struct adreno_device *gen8_gmu_to_adreno(struct gen8_gmu_device *gmu)
  194. {
  195. struct gen8_device *gen8_dev =
  196. container_of(gmu, struct gen8_device, gmu);
  197. return &gen8_dev->adreno_dev;
  198. }
  199. /* Configure and enable GMU low power mode */
  200. static void gen8_gmu_power_config(struct adreno_device *adreno_dev)
  201. {
  202. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  203. /* Disable GMU WB/RB buffer and caches at boot */
  204. gmu_core_regwrite(device, GEN8_GMUCX_SYS_BUS_CONFIG, 0x1);
  205. gmu_core_regwrite(device, GEN8_GMUCX_ICACHE_CONFIG, 0x1);
  206. gmu_core_regwrite(device, GEN8_GMUCX_DCACHE_CONFIG, 0x1);
  207. }
  208. static void gmu_ao_sync_event(struct adreno_device *adreno_dev)
  209. {
  210. const struct adreno_gpudev *gpudev = ADRENO_GPU_DEVICE(adreno_dev);
  211. unsigned long flags;
  212. u64 ticks;
  213. /*
  214. * Get the GMU always on ticks and log it in a trace message. This
  215. * will be used to map GMU ticks to ftrace time. Do this in atomic
  216. * context to ensure nothing happens between reading the always
  217. * on ticks and doing the trace.
  218. */
  219. local_irq_save(flags);
  220. ticks = gpudev->read_alwayson(adreno_dev);
  221. trace_gmu_ao_sync(ticks);
  222. local_irq_restore(flags);
  223. }
  224. int gen8_gmu_device_start(struct adreno_device *adreno_dev)
  225. {
  226. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  227. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  228. gmu_core_reset_trace_header(&gmu->trace);
  229. gmu_ao_sync_event(adreno_dev);
  230. /* Bring GMU out of reset */
  231. gmu_core_regwrite(device, GEN8_GMUCX_CM3_SYSRESET, 0);
  232. /* Make sure the write is posted before moving ahead */
  233. wmb();
  234. if (gmu_core_timed_poll_check(device, GEN8_GMUCX_CM3_FW_INIT_RESULT,
  235. BIT(8), 100, GENMASK(8, 0))) {
  236. dev_err(&gmu->pdev->dev, "GMU failed to come out of reset\n");
  237. gmu_core_fault_snapshot(device);
  238. return -ETIMEDOUT;
  239. }
  240. return 0;
  241. }
  242. /*
  243. * gen8_gmu_hfi_start() - Write registers and start HFI.
  244. * @device: Pointer to KGSL device
  245. */
  246. int gen8_gmu_hfi_start(struct adreno_device *adreno_dev)
  247. {
  248. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  249. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  250. gmu_core_regwrite(device, GEN8_GMUCX_HFI_CTRL_INIT, 1);
  251. if (gmu_core_timed_poll_check(device, GEN8_GMUCX_HFI_CTRL_STATUS,
  252. BIT(0), 100, BIT(0))) {
  253. dev_err(&gmu->pdev->dev, "GMU HFI init failed\n");
  254. gmu_core_fault_snapshot(device);
  255. return -ETIMEDOUT;
  256. }
  257. return 0;
  258. }
  259. int gen8_rscc_wakeup_sequence(struct adreno_device *adreno_dev)
  260. {
  261. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  262. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  263. struct device *dev = &gmu->pdev->dev;
  264. /* Skip wakeup sequence if we didn't do the sleep sequence */
  265. if (!test_bit(GMU_PRIV_RSCC_SLEEP_DONE, &gmu->flags))
  266. return 0;
  267. /* RSC wake sequence */
  268. gmu_core_regwrite(device, GEN8_GMUAO_RSCC_CONTROL_REQ, BIT(1));
  269. /* Write request before polling */
  270. wmb();
  271. if (gmu_core_timed_poll_check(device, GEN8_GMUAO_RSCC_CONTROL_ACK,
  272. BIT(1), 100, BIT(1))) {
  273. dev_err(dev, "Failed to do GPU RSC power on\n");
  274. return -ETIMEDOUT;
  275. }
  276. if (gen8_timed_poll_check_rscc(gmu, GEN8_RSCC_SEQ_BUSY_DRV0,
  277. 0x0, 100, UINT_MAX)) {
  278. dev_err(dev, "GPU RSC sequence stuck in waking up GPU\n");
  279. return -ETIMEDOUT;
  280. }
  281. gmu_core_regwrite(device, GEN8_GMUAO_RSCC_CONTROL_REQ, 0);
  282. clear_bit(GMU_PRIV_RSCC_SLEEP_DONE, &gmu->flags);
  283. return 0;
  284. }
  285. int gen8_rscc_sleep_sequence(struct adreno_device *adreno_dev)
  286. {
  287. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  288. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  289. int ret;
  290. if (!test_bit(GMU_PRIV_FIRST_BOOT_DONE, &gmu->flags))
  291. return 0;
  292. if (test_bit(GMU_PRIV_RSCC_SLEEP_DONE, &gmu->flags))
  293. return 0;
  294. gmu_core_regwrite(device, GEN8_GMUCX_CM3_SYSRESET, 1);
  295. /* Make sure M3 is in reset before going on */
  296. wmb();
  297. gmu_core_regread(device, GEN8_GMUCX_GENERAL_9, &gmu->log_wptr_retention);
  298. gmu_core_regwrite(device, GEN8_GMUAO_RSCC_CONTROL_REQ, BIT(0));
  299. /* Make sure the request completes before continuing */
  300. wmb();
  301. ret = gen8_timed_poll_check_rscc(gmu, GEN8_GPU_RSCC_RSC_STATUS0_DRV0,
  302. BIT(16), 100, BIT(16));
  303. if (ret) {
  304. dev_err(&gmu->pdev->dev, "GPU RSC power off fail\n");
  305. return -ETIMEDOUT;
  306. }
  307. gmu_core_regwrite(device, GEN8_GMUAO_RSCC_CONTROL_REQ, 0);
  308. set_bit(GMU_PRIV_RSCC_SLEEP_DONE, &gmu->flags);
  309. return 0;
  310. }
  311. static struct kgsl_memdesc *find_gmu_memdesc(struct gen8_gmu_device *gmu,
  312. u32 addr, u32 size)
  313. {
  314. int i;
  315. for (i = 0; i < gmu->global_entries; i++) {
  316. struct kgsl_memdesc *md = &gmu->gmu_globals[i];
  317. if ((addr >= md->gmuaddr) &&
  318. (((addr + size) <= (md->gmuaddr + md->size))))
  319. return md;
  320. }
  321. return NULL;
  322. }
  323. static int find_vma_block(struct gen8_gmu_device *gmu, u32 addr, u32 size)
  324. {
  325. int i;
  326. for (i = 0; i < GMU_MEM_TYPE_MAX; i++) {
  327. struct gmu_vma_entry *vma = &gmu->vma[i];
  328. if ((addr >= vma->start) &&
  329. ((addr + size) <= (vma->start + vma->size)))
  330. return i;
  331. }
  332. return -ENOENT;
  333. }
  334. static void load_tcm(struct adreno_device *adreno_dev, const u8 *src,
  335. u32 tcm_start, u32 base, const struct gmu_block_header *blk)
  336. {
  337. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  338. u32 tcm_offset = tcm_start + ((blk->addr - base)/sizeof(u32));
  339. kgsl_regmap_bulk_write(&device->regmap, tcm_offset, src,
  340. blk->size >> 2);
  341. }
  342. int gen8_gmu_load_fw(struct adreno_device *adreno_dev)
  343. {
  344. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  345. const u8 *fw = (const u8 *)gmu->fw_image->data;
  346. while (fw < gmu->fw_image->data + gmu->fw_image->size) {
  347. const struct gmu_block_header *blk =
  348. (const struct gmu_block_header *)fw;
  349. int id;
  350. fw += sizeof(*blk);
  351. /* Don't deal with zero size blocks */
  352. if (blk->size == 0)
  353. continue;
  354. id = find_vma_block(gmu, blk->addr, blk->size);
  355. if (id < 0) {
  356. dev_err(&gmu->pdev->dev,
  357. "Unknown block in GMU FW addr:0x%x size:0x%x\n",
  358. blk->addr, blk->size);
  359. return -EINVAL;
  360. }
  361. if (id == GMU_ITCM) {
  362. load_tcm(adreno_dev, fw,
  363. GEN8_GMU_CM3_ITCM_START,
  364. gmu->vma[GMU_ITCM].start, blk);
  365. } else if (id == GMU_DTCM) {
  366. load_tcm(adreno_dev, fw,
  367. GEN8_GMU_CM3_DTCM_START,
  368. gmu->vma[GMU_DTCM].start, blk);
  369. } else {
  370. struct kgsl_memdesc *md =
  371. find_gmu_memdesc(gmu, blk->addr, blk->size);
  372. if (!md) {
  373. dev_err(&gmu->pdev->dev,
  374. "No backing memory for GMU FW block addr:0x%x size:0x%x\n",
  375. blk->addr, blk->size);
  376. return -EINVAL;
  377. }
  378. memcpy(md->hostptr + (blk->addr - md->gmuaddr), fw,
  379. blk->size);
  380. }
  381. fw += blk->size;
  382. }
  383. /* Proceed only after the FW is written */
  384. wmb();
  385. return 0;
  386. }
  387. static const char *oob_to_str(enum oob_request req)
  388. {
  389. switch (req) {
  390. case oob_gpu:
  391. return "oob_gpu";
  392. case oob_perfcntr:
  393. return "oob_perfcntr";
  394. case oob_boot_slumber:
  395. return "oob_boot_slumber";
  396. case oob_dcvs:
  397. return "oob_dcvs";
  398. default:
  399. return "unknown";
  400. }
  401. }
  402. static void trigger_reset_recovery(struct adreno_device *adreno_dev,
  403. enum oob_request req)
  404. {
  405. /*
  406. * Trigger recovery for perfcounter oob only since only
  407. * perfcounter oob can happen alongside an actively rendering gpu.
  408. */
  409. if (req != oob_perfcntr)
  410. return;
  411. if (adreno_dev->dispatch_ops && adreno_dev->dispatch_ops->fault)
  412. adreno_dev->dispatch_ops->fault(adreno_dev,
  413. ADRENO_GMU_FAULT_SKIP_SNAPSHOT);
  414. }
  415. int gen8_gmu_oob_set(struct kgsl_device *device,
  416. enum oob_request req)
  417. {
  418. struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
  419. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  420. int ret = 0;
  421. int set, check;
  422. if (req == oob_perfcntr && gmu->num_oob_perfcntr++)
  423. return 0;
  424. if (req >= oob_boot_slumber) {
  425. dev_err(&gmu->pdev->dev,
  426. "Unsupported OOB request %s\n",
  427. oob_to_str(req));
  428. return -EINVAL;
  429. }
  430. set = BIT(30 - req * 2);
  431. check = BIT(31 - req);
  432. gmu_core_regwrite(device, GEN8_GMUCX_HOST2GMU_INTR_SET, set);
  433. if (gmu_core_timed_poll_check(device, GEN8_GMUCX_GMU2HOST_INTR_INFO, check,
  434. 100, check)) {
  435. if (req == oob_perfcntr)
  436. gmu->num_oob_perfcntr--;
  437. gmu_core_fault_snapshot(device);
  438. ret = -ETIMEDOUT;
  439. WARN(1, "OOB request %s timed out\n", oob_to_str(req));
  440. trigger_reset_recovery(adreno_dev, req);
  441. }
  442. gmu_core_regwrite(device, GEN8_GMUCX_GMU2HOST_INTR_CLR, check);
  443. trace_kgsl_gmu_oob_set(set);
  444. return ret;
  445. }
  446. void gen8_gmu_oob_clear(struct kgsl_device *device,
  447. enum oob_request req)
  448. {
  449. struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
  450. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  451. int clear = BIT(31 - req * 2);
  452. if (req == oob_perfcntr && --gmu->num_oob_perfcntr)
  453. return;
  454. if (req >= oob_boot_slumber) {
  455. dev_err(&gmu->pdev->dev, "Unsupported OOB clear %s\n",
  456. oob_to_str(req));
  457. return;
  458. }
  459. gmu_core_regwrite(device, GEN8_GMUCX_HOST2GMU_INTR_SET, clear);
  460. trace_kgsl_gmu_oob_clear(clear);
  461. }
  462. void gen8_gmu_irq_enable(struct adreno_device *adreno_dev)
  463. {
  464. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  465. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  466. struct gen8_hfi *hfi = &gmu->hfi;
  467. /* Clear pending IRQs and Unmask needed IRQs */
  468. gmu_core_regwrite(device, GEN8_GMUCX_GMU2HOST_INTR_CLR, UINT_MAX);
  469. gmu_core_regwrite(device, GEN8_GMUAO_AO_HOST_INTERRUPT_CLR, UINT_MAX);
  470. gmu_core_regwrite(device, GEN8_GMUCX_GMU2HOST_INTR_MASK,
  471. (u32)~HFI_IRQ_MASK);
  472. gmu_core_regwrite(device, GEN8_GMUAO_AO_HOST_INTERRUPT_MASK,
  473. (u32)~GMU_AO_INT_MASK);
  474. /* Enable all IRQs on host */
  475. enable_irq(hfi->irq);
  476. enable_irq(gmu->irq);
  477. if (device->cx_host_irq_num <= 0)
  478. return;
  479. /* Clear pending IRQs, unmask needed interrupts and enable CX host IRQ */
  480. adreno_cx_misc_regwrite(adreno_dev, GEN8_GPU_CX_MISC_INT_CLEAR_CMD, UINT_MAX);
  481. adreno_cx_misc_regwrite(adreno_dev, GEN8_GPU_CX_MISC_INT_0_MASK, GEN8_CX_MISC_INT_MASK);
  482. enable_irq(device->cx_host_irq_num);
  483. }
  484. void gen8_gmu_irq_disable(struct adreno_device *adreno_dev)
  485. {
  486. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  487. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  488. struct gen8_hfi *hfi = &gmu->hfi;
  489. /* Disable all IRQs on host */
  490. disable_irq(gmu->irq);
  491. disable_irq(hfi->irq);
  492. /* Mask all IRQs and clear pending IRQs */
  493. gmu_core_regwrite(device, GEN8_GMUCX_GMU2HOST_INTR_MASK, UINT_MAX);
  494. gmu_core_regwrite(device, GEN8_GMUAO_AO_HOST_INTERRUPT_MASK, UINT_MAX);
  495. gmu_core_regwrite(device, GEN8_GMUCX_GMU2HOST_INTR_CLR, UINT_MAX);
  496. gmu_core_regwrite(device, GEN8_GMUAO_AO_HOST_INTERRUPT_CLR, UINT_MAX);
  497. if (device->cx_host_irq_num <= 0)
  498. return;
  499. /* Disable CX host IRQ, mask all interrupts and clear pending IRQs */
  500. disable_irq(device->cx_host_irq_num);
  501. adreno_cx_misc_regwrite(adreno_dev, GEN8_GPU_CX_MISC_INT_0_MASK, UINT_MAX);
  502. adreno_cx_misc_regwrite(adreno_dev, GEN8_GPU_CX_MISC_INT_CLEAR_CMD, UINT_MAX);
  503. }
  504. static int gen8_gmu_hfi_start_msg(struct adreno_device *adreno_dev)
  505. {
  506. struct hfi_start_cmd req;
  507. int ret;
  508. ret = CMD_MSG_HDR(req, H2F_MSG_START);
  509. if (ret)
  510. return ret;
  511. return gen8_hfi_send_generic_req(adreno_dev, &req, sizeof(req));
  512. }
  513. static u32 gen8_rscc_tcsm_drv0_status_reglist[] = {
  514. GEN8_RSCC_TCS0_DRV0_STATUS,
  515. GEN8_RSCC_TCS1_DRV0_STATUS,
  516. GEN8_RSCC_TCS2_DRV0_STATUS,
  517. GEN8_RSCC_TCS3_DRV0_STATUS,
  518. GEN8_RSCC_TCS4_DRV0_STATUS,
  519. GEN8_RSCC_TCS5_DRV0_STATUS,
  520. GEN8_RSCC_TCS6_DRV0_STATUS,
  521. GEN8_RSCC_TCS7_DRV0_STATUS,
  522. GEN8_RSCC_TCS8_DRV0_STATUS,
  523. GEN8_RSCC_TCS9_DRV0_STATUS,
  524. };
  525. static int gen8_complete_rpmh_votes(struct gen8_gmu_device *gmu,
  526. u32 timeout)
  527. {
  528. int i, ret = 0;
  529. for (i = 0; i < ARRAY_SIZE(gen8_rscc_tcsm_drv0_status_reglist); i++)
  530. ret |= gen8_timed_poll_check_rscc(gmu,
  531. gen8_rscc_tcsm_drv0_status_reglist[i], BIT(0), timeout,
  532. BIT(0));
  533. if (ret)
  534. dev_err(&gmu->pdev->dev, "RPMH votes timedout: %d\n", ret);
  535. return ret;
  536. }
  537. #define GX_GDSC_POWER_OFF BIT(0)
  538. #define GX_CLK_OFF BIT(1)
  539. #define is_on(val) (!(val & (GX_GDSC_POWER_OFF | GX_CLK_OFF)))
  540. bool gen8_gmu_gx_is_on(struct adreno_device *adreno_dev)
  541. {
  542. u32 val;
  543. gmu_core_regread(KGSL_DEVICE(adreno_dev),
  544. GEN8_GMUCX_GFX_PWR_CLK_STATUS, &val);
  545. return is_on(val);
  546. }
  547. bool gen8_gmu_rpmh_pwr_state_is_active(struct kgsl_device *device)
  548. {
  549. u32 val;
  550. gmu_core_regread(device, GEN8_GMUCX_RPMH_POWER_STATE, &val);
  551. return (val == GPU_HW_ACTIVE) ? true : false;
  552. }
  553. static const char *idle_level_name(int level)
  554. {
  555. if (level == GPU_HW_ACTIVE)
  556. return "GPU_HW_ACTIVE";
  557. else if (level == GPU_HW_IFPC)
  558. return "GPU_HW_IFPC";
  559. return "(Unknown)";
  560. }
  561. int gen8_gmu_wait_for_lowest_idle(struct adreno_device *adreno_dev)
  562. {
  563. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  564. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  565. const struct adreno_gpudev *gpudev = ADRENO_GPU_DEVICE(adreno_dev);
  566. u32 reg, reg1, reg2, reg3, reg4;
  567. unsigned long t;
  568. u64 ts1, ts2;
  569. ts1 = gpudev->read_alwayson(adreno_dev);
  570. t = jiffies + msecs_to_jiffies(100);
  571. do {
  572. gmu_core_regread(device,
  573. GEN8_GMUCX_RPMH_POWER_STATE, &reg);
  574. gmu_core_regread(device, GEN8_GMUCX_GFX_PWR_CLK_STATUS, &reg1);
  575. /*
  576. * Check that we are at lowest level. If lowest level is IFPC
  577. * double check that GFX clock is off.
  578. */
  579. if (gmu->idle_level == reg)
  580. if (!(gmu->idle_level == GPU_HW_IFPC && is_on(reg1)))
  581. return 0;
  582. /* Wait 100us to reduce unnecessary AHB bus traffic */
  583. usleep_range(10, 100);
  584. } while (!time_after(jiffies, t));
  585. /* Check one last time */
  586. gmu_core_regread(device, GEN8_GMUCX_RPMH_POWER_STATE, &reg);
  587. gmu_core_regread(device, GEN8_GMUCX_GFX_PWR_CLK_STATUS, &reg1);
  588. /*
  589. * Check that we are at lowest level. If lowest level is IFPC
  590. * double check that GFX clock is off.
  591. */
  592. if (gmu->idle_level == reg)
  593. if (!(gmu->idle_level == GPU_HW_IFPC && is_on(reg1)))
  594. return 0;
  595. ts2 = gpudev->read_alwayson(adreno_dev);
  596. /* Collect abort data to help with debugging */
  597. gmu_core_regread(device, GEN8_GMUAO_GPU_CX_BUSY_STATUS, &reg2);
  598. gmu_core_regread(device, GEN8_GMUAO_RBBM_INT_UNMASKED_STATUS_SHADOW, &reg3);
  599. gmu_core_regread(device, GEN8_GMUCX_PWR_COL_KEEPALIVE, &reg4);
  600. dev_err(&gmu->pdev->dev,
  601. "----------------------[ GMU error ]----------------------\n");
  602. dev_err(&gmu->pdev->dev, "Timeout waiting for lowest idle level %s\n",
  603. idle_level_name(gmu->idle_level));
  604. dev_err(&gmu->pdev->dev, "Start: %llx (absolute ticks)\n", ts1);
  605. dev_err(&gmu->pdev->dev, "Poll: %llx (ticks relative to start)\n", ts2-ts1);
  606. dev_err(&gmu->pdev->dev, "RPMH_POWER_STATE=%x GFX_PWR_CLK_STATUS=%x\n", reg, reg1);
  607. dev_err(&gmu->pdev->dev, "CX_BUSY_STATUS=%x\n", reg2);
  608. dev_err(&gmu->pdev->dev, "RBBM_INT_UNMASKED_STATUS=%x PWR_COL_KEEPALIVE=%x\n", reg3, reg4);
  609. /* Access GX registers only when GX is ON */
  610. if (is_on(reg1)) {
  611. gen8_regread_aperture(device, GEN8_CP_PIPE_STATUS_PIPE, &reg, PIPE_BV, 0, 0);
  612. gen8_regread_aperture(device, GEN8_CP_PIPE_STATUS_PIPE, &reg1, PIPE_BR, 0, 0);
  613. /* Clear aperture register */
  614. gen8_host_aperture_set(adreno_dev, 0, 0, 0);
  615. kgsl_regread(device, GEN8_CP_CP2GMU_STATUS, &reg2);
  616. kgsl_regread(device, GEN8_CP_CONTEXT_SWITCH_CNTL, &reg3);
  617. dev_err(&gmu->pdev->dev, "GEN8_CP_PIPE_STATUS_PIPE BV:%x BR:%x\n", reg, reg1);
  618. dev_err(&gmu->pdev->dev, "CP2GMU_STATUS=%x CONTEXT_SWITCH_CNTL=%x\n", reg2, reg3);
  619. }
  620. WARN_ON(1);
  621. gmu_core_fault_snapshot(device);
  622. return -ETIMEDOUT;
  623. }
  624. /* Bitmask for GPU idle status check */
  625. #define CXGXCPUBUSYIGNAHB BIT(30)
  626. int gen8_gmu_wait_for_idle(struct adreno_device *adreno_dev)
  627. {
  628. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  629. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  630. const struct adreno_gpudev *gpudev = ADRENO_GPU_DEVICE(adreno_dev);
  631. u32 status2;
  632. u64 ts1;
  633. ts1 = gpudev->read_alwayson(adreno_dev);
  634. if (gmu_core_timed_poll_check(device, GEN8_GMUAO_GPU_CX_BUSY_STATUS,
  635. 0, 100, CXGXCPUBUSYIGNAHB)) {
  636. gmu_core_regread(device,
  637. GEN8_GMUAO_GPU_CX_BUSY_STATUS2, &status2);
  638. dev_err(&gmu->pdev->dev,
  639. "GMU not idling: status2=0x%x %llx %llx\n",
  640. status2, ts1,
  641. gpudev->read_alwayson(adreno_dev));
  642. gmu_core_fault_snapshot(device);
  643. return -ETIMEDOUT;
  644. }
  645. return 0;
  646. }
  647. int gen8_gmu_version_info(struct adreno_device *adreno_dev)
  648. {
  649. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  650. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  651. const struct adreno_gen8_core *gen8_core = to_gen8_core(adreno_dev);
  652. /* GMU version info is at a fixed offset in the DTCM */
  653. gmu_core_regread(device, GEN8_GMU_CM3_DTCM_START + 0xff8,
  654. &gmu->ver.core);
  655. gmu_core_regread(device, GEN8_GMU_CM3_DTCM_START + 0xff9,
  656. &gmu->ver.core_dev);
  657. gmu_core_regread(device, GEN8_GMU_CM3_DTCM_START + 0xffa,
  658. &gmu->ver.pwr);
  659. gmu_core_regread(device, GEN8_GMU_CM3_DTCM_START + 0xffb,
  660. &gmu->ver.pwr_dev);
  661. gmu_core_regread(device, GEN8_GMU_CM3_DTCM_START + 0xffc,
  662. &gmu->ver.hfi);
  663. /* Check if gmu fw version on device is compatible with kgsl driver */
  664. if (gmu->ver.core < gen8_core->gmu_fw_version) {
  665. dev_err_once(&gmu->pdev->dev,
  666. "GMU FW version 0x%x error (expected 0x%x)\n",
  667. gmu->ver.core, gen8_core->gmu_fw_version);
  668. return -EINVAL;
  669. }
  670. return 0;
  671. }
  672. int gen8_gmu_itcm_shadow(struct adreno_device *adreno_dev)
  673. {
  674. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  675. u32 i, *dest;
  676. if (gmu->itcm_shadow)
  677. return 0;
  678. gmu->itcm_shadow = vzalloc(gmu->vma[GMU_ITCM].size);
  679. if (!gmu->itcm_shadow)
  680. return -ENOMEM;
  681. dest = (u32 *)gmu->itcm_shadow;
  682. for (i = 0; i < (gmu->vma[GMU_ITCM].size >> 2); i++)
  683. gmu_core_regread(KGSL_DEVICE(adreno_dev),
  684. GEN8_GMU_CM3_ITCM_START + i, dest++);
  685. return 0;
  686. }
  687. void gen8_gmu_register_config(struct adreno_device *adreno_dev)
  688. {
  689. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  690. const struct adreno_gen8_core *gen8_core = to_gen8_core(adreno_dev);
  691. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  692. u32 val;
  693. /* Clear any previously set cm3 fault */
  694. atomic_set(&gmu->cm3_fault, 0);
  695. /* Init the power state register before GMU turns on GX */
  696. gmu_core_regwrite(device, GEN8_GMUCX_RPMH_POWER_STATE, 0xF);
  697. /* Vote veto for FAL10 */
  698. gmu_core_regwrite(device, GEN8_GMUCX_CX_FALNEXT_INTF, 0x1);
  699. gmu_core_regwrite(device, GEN8_GMUCX_CX_FAL_INTF, 0x1);
  700. /* Clear init result to make sure we are getting fresh value */
  701. gmu_core_regwrite(device, GEN8_GMUCX_CM3_FW_INIT_RESULT, 0);
  702. gmu_core_regwrite(device, GEN8_GMUCX_CM3_BOOT_CONFIG, 0x2);
  703. gmu_core_regwrite(device, GEN8_GMUCX_HFI_QTBL_ADDR,
  704. gmu->hfi.hfi_mem->gmuaddr);
  705. gmu_core_regwrite(device, GEN8_GMUCX_HFI_QTBL_INFO, 1);
  706. gmu_core_regwrite(device, GEN8_GMUAO_AHB_FENCE_RANGE_0, BIT(31) |
  707. FIELD_PREP(GENMASK(30, 18), 0x32) |
  708. FIELD_PREP(GENMASK(17, 0), 0x8a0));
  709. /*
  710. * Make sure that CM3 state is at reset value. Snapshot is changing
  711. * NMI bit and if we boot up GMU with NMI bit set GMU will boot
  712. * straight in to NMI handler without executing __main code
  713. */
  714. gmu_core_regwrite(device, GEN8_GMUCX_CM3_CFG, 0x4052);
  715. /* Set up GBIF registers from the GPU core definition */
  716. kgsl_regmap_multi_write(&device->regmap, gen8_core->gbif,
  717. gen8_core->gbif_count);
  718. /**
  719. * We may have asserted gbif halt as part of reset sequence which may
  720. * not get cleared if the gdsc was not reset. So clear it before
  721. * attempting GMU boot.
  722. */
  723. kgsl_regwrite(device, GEN8_GBIF_HALT, BIT(3));
  724. /* Set vrb address before starting GMU */
  725. if (!IS_ERR_OR_NULL(gmu->vrb))
  726. gmu_core_regwrite(device, GEN8_GMUCX_GENERAL_11, gmu->vrb->gmuaddr);
  727. /* Set the log wptr index */
  728. gmu_core_regwrite(device, GEN8_GMUCX_GENERAL_9,
  729. gmu->log_wptr_retention);
  730. /* Pass chipid to GMU FW, must happen before starting GMU */
  731. gmu_core_regwrite(device, GEN8_GMUCX_GENERAL_10,
  732. ADRENO_GMU_REV(ADRENO_GPUREV(adreno_dev)));
  733. /* Log size is encoded in (number of 4K units - 1) */
  734. val = (gmu->gmu_log->gmuaddr & GENMASK(31, 12)) |
  735. ((GMU_LOG_SIZE/SZ_4K - 1) & GENMASK(7, 0));
  736. gmu_core_regwrite(device, GEN8_GMUCX_GENERAL_8, val);
  737. /* Configure power control and bring the GMU out of reset */
  738. gen8_gmu_power_config(adreno_dev);
  739. /*
  740. * Enable BCL throttling -
  741. * XOCLK1: countable: 0x13 (25% throttle)
  742. * XOCLK2: countable: 0x17 (58% throttle)
  743. * XOCLK3: countable: 0x19 (75% throttle)
  744. * POWER_CONTROL_SELECT_0 controls counters 0 - 3, each selector
  745. * is 8 bits wide.
  746. */
  747. if (adreno_dev->bcl_enabled)
  748. gmu_core_regrmw(device, GEN8_GMUCX_POWER_COUNTER_SELECT_XOCLK_0,
  749. 0xffffff00, FIELD_PREP(GENMASK(31, 24), 0x19) |
  750. FIELD_PREP(GENMASK(23, 16), 0x17) |
  751. FIELD_PREP(GENMASK(15, 8), 0x13));
  752. }
  753. static struct gmu_vma_node *find_va(struct gmu_vma_entry *vma, u32 addr, u32 size)
  754. {
  755. struct rb_node *node = vma->vma_root.rb_node;
  756. while (node != NULL) {
  757. struct gmu_vma_node *data = rb_entry(node, struct gmu_vma_node, node);
  758. if (addr + size <= data->va)
  759. node = node->rb_left;
  760. else if (addr >= data->va + data->size)
  761. node = node->rb_right;
  762. else
  763. return data;
  764. }
  765. return NULL;
  766. }
  767. /* Return true if VMA supports dynamic allocations */
  768. static bool vma_is_dynamic(int vma_id)
  769. {
  770. /* Dynamic allocations are done in the GMU_NONCACHED_KERNEL space */
  771. return vma_id == GMU_NONCACHED_KERNEL;
  772. }
  773. static int insert_va(struct gmu_vma_entry *vma, u32 addr, u32 size)
  774. {
  775. struct rb_node **node, *parent = NULL;
  776. struct gmu_vma_node *new = kzalloc(sizeof(*new), GFP_NOWAIT);
  777. if (new == NULL)
  778. return -ENOMEM;
  779. new->va = addr;
  780. new->size = size;
  781. node = &vma->vma_root.rb_node;
  782. while (*node != NULL) {
  783. struct gmu_vma_node *this;
  784. parent = *node;
  785. this = rb_entry(parent, struct gmu_vma_node, node);
  786. if (addr + size <= this->va)
  787. node = &parent->rb_left;
  788. else if (addr >= this->va + this->size)
  789. node = &parent->rb_right;
  790. else {
  791. kfree(new);
  792. return -EEXIST;
  793. }
  794. }
  795. /* Add new node and rebalance tree */
  796. rb_link_node(&new->node, parent, node);
  797. rb_insert_color(&new->node, &vma->vma_root);
  798. return 0;
  799. }
  800. static u32 find_unmapped_va(struct gmu_vma_entry *vma, u32 size, u32 va_align)
  801. {
  802. struct rb_node *node = rb_first(&vma->vma_root);
  803. u32 cur = vma->start;
  804. bool found = false;
  805. cur = ALIGN(cur, va_align);
  806. while (node) {
  807. struct gmu_vma_node *data = rb_entry(node, struct gmu_vma_node, node);
  808. if (cur + size <= data->va) {
  809. found = true;
  810. break;
  811. }
  812. cur = ALIGN(data->va + data->size, va_align);
  813. node = rb_next(node);
  814. }
  815. /* Do we have space after the last node? */
  816. if (!found && (cur + size <= vma->start + vma->size))
  817. found = true;
  818. return found ? cur : 0;
  819. }
  820. static int _map_gmu_dynamic(struct gen8_gmu_device *gmu,
  821. struct kgsl_memdesc *md,
  822. u32 addr, u32 vma_id, int attrs, u32 align)
  823. {
  824. int ret;
  825. struct gmu_vma_entry *vma = &gmu->vma[vma_id];
  826. struct gmu_vma_node *vma_node = NULL;
  827. u32 size = ALIGN(md->size, hfi_get_gmu_sz_alignment(align));
  828. spin_lock(&vma->lock);
  829. if (!addr) {
  830. /*
  831. * We will end up with a hole (GMU VA range not backed by physical mapping) if
  832. * the aligned size is greater than the size of the physical mapping
  833. */
  834. addr = find_unmapped_va(vma, size, hfi_get_gmu_va_alignment(align));
  835. if (addr == 0) {
  836. spin_unlock(&vma->lock);
  837. dev_err(&gmu->pdev->dev,
  838. "Insufficient VA space size: %x\n", size);
  839. return -ENOMEM;
  840. }
  841. }
  842. ret = insert_va(vma, addr, size);
  843. spin_unlock(&vma->lock);
  844. if (ret < 0) {
  845. dev_err(&gmu->pdev->dev,
  846. "Could not insert va: %x size %x\n", addr, size);
  847. return ret;
  848. }
  849. ret = gmu_core_map_memdesc(gmu->domain, md, addr, attrs);
  850. if (!ret) {
  851. md->gmuaddr = addr;
  852. return 0;
  853. }
  854. /* Failed to map to GMU */
  855. dev_err(&gmu->pdev->dev,
  856. "Unable to map GMU kernel block: addr:0x%08x size:0x%llx :%d\n",
  857. addr, md->size, ret);
  858. spin_lock(&vma->lock);
  859. vma_node = find_va(vma, md->gmuaddr, size);
  860. if (vma_node)
  861. rb_erase(&vma_node->node, &vma->vma_root);
  862. spin_unlock(&vma->lock);
  863. kfree(vma_node);
  864. return ret;
  865. }
  866. static int _map_gmu_static(struct gen8_gmu_device *gmu,
  867. struct kgsl_memdesc *md,
  868. u32 addr, u32 vma_id, int attrs, u32 align)
  869. {
  870. int ret;
  871. struct gmu_vma_entry *vma = &gmu->vma[vma_id];
  872. u32 size = ALIGN(md->size, hfi_get_gmu_sz_alignment(align));
  873. if (!addr)
  874. addr = ALIGN(vma->next_va, hfi_get_gmu_va_alignment(align));
  875. ret = gmu_core_map_memdesc(gmu->domain, md, addr, attrs);
  876. if (ret) {
  877. dev_err(&gmu->pdev->dev,
  878. "Unable to map GMU kernel block: addr:0x%08x size:0x%llx :%d\n",
  879. addr, md->size, ret);
  880. return ret;
  881. }
  882. md->gmuaddr = addr;
  883. /*
  884. * We will end up with a hole (GMU VA range not backed by physical mapping) if the aligned
  885. * size is greater than the size of the physical mapping
  886. */
  887. vma->next_va = md->gmuaddr + size;
  888. return 0;
  889. }
  890. static int _map_gmu(struct gen8_gmu_device *gmu,
  891. struct kgsl_memdesc *md,
  892. u32 addr, u32 vma_id, int attrs, u32 align)
  893. {
  894. return vma_is_dynamic(vma_id) ?
  895. _map_gmu_dynamic(gmu, md, addr, vma_id, attrs, align) :
  896. _map_gmu_static(gmu, md, addr, vma_id, attrs, align);
  897. }
  898. int gen8_gmu_import_buffer(struct gen8_gmu_device *gmu, u32 vma_id,
  899. struct kgsl_memdesc *md, u32 attrs, u32 align)
  900. {
  901. return _map_gmu(gmu, md, 0, vma_id, attrs, align);
  902. }
  903. struct kgsl_memdesc *gen8_reserve_gmu_kernel_block(struct gen8_gmu_device *gmu,
  904. u32 addr, u32 size, u32 vma_id, u32 align)
  905. {
  906. int ret;
  907. struct kgsl_memdesc *md;
  908. struct kgsl_device *device = KGSL_DEVICE(gen8_gmu_to_adreno(gmu));
  909. int attrs = IOMMU_READ | IOMMU_WRITE | IOMMU_PRIV;
  910. if (gmu->global_entries == ARRAY_SIZE(gmu->gmu_globals))
  911. return ERR_PTR(-ENOMEM);
  912. md = &gmu->gmu_globals[gmu->global_entries];
  913. ret = kgsl_allocate_kernel(device, md, size, 0, KGSL_MEMDESC_SYSMEM);
  914. if (ret) {
  915. memset(md, 0x0, sizeof(*md));
  916. return ERR_PTR(-ENOMEM);
  917. }
  918. ret = _map_gmu(gmu, md, addr, vma_id, attrs, align);
  919. if (ret) {
  920. kgsl_sharedmem_free(md);
  921. memset(md, 0x0, sizeof(*md));
  922. return ERR_PTR(ret);
  923. }
  924. gmu->global_entries++;
  925. return md;
  926. }
  927. struct kgsl_memdesc *gen8_reserve_gmu_kernel_block_fixed(struct gen8_gmu_device *gmu,
  928. u32 addr, u32 size, u32 vma_id, const char *resource, int attrs, u32 align)
  929. {
  930. int ret;
  931. struct kgsl_memdesc *md;
  932. struct kgsl_device *device = KGSL_DEVICE(gen8_gmu_to_adreno(gmu));
  933. if (gmu->global_entries == ARRAY_SIZE(gmu->gmu_globals))
  934. return ERR_PTR(-ENOMEM);
  935. md = &gmu->gmu_globals[gmu->global_entries];
  936. ret = kgsl_memdesc_init_fixed(device, gmu->pdev, resource, md);
  937. if (ret)
  938. return ERR_PTR(ret);
  939. ret = _map_gmu(gmu, md, addr, vma_id, attrs, align);
  940. sg_free_table(md->sgt);
  941. kfree(md->sgt);
  942. md->sgt = NULL;
  943. if (!ret)
  944. gmu->global_entries++;
  945. else {
  946. dev_err(&gmu->pdev->dev,
  947. "Unable to map GMU kernel block: addr:0x%08x size:0x%llx :%d\n",
  948. addr, md->size, ret);
  949. memset(md, 0x0, sizeof(*md));
  950. md = ERR_PTR(ret);
  951. }
  952. return md;
  953. }
  954. int gen8_alloc_gmu_kernel_block(struct gen8_gmu_device *gmu,
  955. struct kgsl_memdesc *md, u32 size, u32 vma_id, int attrs)
  956. {
  957. int ret;
  958. struct kgsl_device *device = KGSL_DEVICE(gen8_gmu_to_adreno(gmu));
  959. ret = kgsl_allocate_kernel(device, md, size, 0, KGSL_MEMDESC_SYSMEM);
  960. if (ret)
  961. return ret;
  962. ret = _map_gmu(gmu, md, 0, vma_id, attrs, 0);
  963. if (ret)
  964. kgsl_sharedmem_free(md);
  965. return ret;
  966. }
  967. void gen8_free_gmu_block(struct gen8_gmu_device *gmu, struct kgsl_memdesc *md)
  968. {
  969. int vma_id = find_vma_block(gmu, md->gmuaddr, md->size);
  970. struct gmu_vma_entry *vma;
  971. struct gmu_vma_node *vma_node;
  972. if ((vma_id < 0) || !vma_is_dynamic(vma_id))
  973. return;
  974. vma = &gmu->vma[vma_id];
  975. /*
  976. * Do not remove the vma node if we failed to unmap the entire buffer. This is because the
  977. * iommu driver considers remapping an already mapped iova as fatal.
  978. */
  979. if (md->size != iommu_unmap(gmu->domain, md->gmuaddr, md->size))
  980. goto free;
  981. spin_lock(&vma->lock);
  982. vma_node = find_va(vma, md->gmuaddr, md->size);
  983. if (vma_node)
  984. rb_erase(&vma_node->node, &vma->vma_root);
  985. spin_unlock(&vma->lock);
  986. kfree(vma_node);
  987. free:
  988. kgsl_sharedmem_free(md);
  989. }
  990. static int gen8_gmu_process_prealloc(struct gen8_gmu_device *gmu,
  991. struct gmu_block_header *blk)
  992. {
  993. struct kgsl_memdesc *md;
  994. int id = find_vma_block(gmu, blk->addr, blk->value);
  995. if (id < 0) {
  996. dev_err(&gmu->pdev->dev,
  997. "Invalid prealloc block addr: 0x%x value:%d\n",
  998. blk->addr, blk->value);
  999. return id;
  1000. }
  1001. /* Nothing to do for TCM blocks or user uncached */
  1002. if (id == GMU_ITCM || id == GMU_DTCM || id == GMU_NONCACHED_USER)
  1003. return 0;
  1004. /* Check if the block is already allocated */
  1005. md = find_gmu_memdesc(gmu, blk->addr, blk->value);
  1006. if (md != NULL)
  1007. return 0;
  1008. md = gen8_reserve_gmu_kernel_block(gmu, blk->addr, blk->value, id, 0);
  1009. return PTR_ERR_OR_ZERO(md);
  1010. }
  1011. int gen8_gmu_parse_fw(struct adreno_device *adreno_dev)
  1012. {
  1013. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1014. const struct adreno_gen8_core *gen8_core = to_gen8_core(adreno_dev);
  1015. struct gmu_block_header *blk;
  1016. int ret, offset = 0;
  1017. const char *gmufw_name = gen8_core->gmufw_name;
  1018. /*
  1019. * If GMU fw already saved and verified, do nothing new.
  1020. * Skip only request_firmware and allow preallocation to
  1021. * ensure in scenario where GMU request firmware succeeded
  1022. * but preallocation fails, we don't return early without
  1023. * successful preallocations on next open call.
  1024. */
  1025. if (!gmu->fw_image) {
  1026. if (gen8_core->gmufw_name == NULL)
  1027. return -EINVAL;
  1028. ret = request_firmware(&gmu->fw_image, gmufw_name,
  1029. &gmu->pdev->dev);
  1030. if (ret) {
  1031. dev_err(&gmu->pdev->dev, "request_firmware (%s) failed: %d\n",
  1032. gmufw_name, ret);
  1033. return ret;
  1034. }
  1035. }
  1036. /*
  1037. * Zero payload fw blocks contain metadata and are
  1038. * guaranteed to precede fw load data. Parse the
  1039. * metadata blocks.
  1040. */
  1041. while (offset < gmu->fw_image->size) {
  1042. blk = (struct gmu_block_header *)&gmu->fw_image->data[offset];
  1043. if (offset + sizeof(*blk) > gmu->fw_image->size) {
  1044. dev_err(&gmu->pdev->dev, "Invalid FW Block\n");
  1045. return -EINVAL;
  1046. }
  1047. /* Done with zero length blocks so return */
  1048. if (blk->size)
  1049. break;
  1050. offset += sizeof(*blk);
  1051. if (blk->type == GMU_BLK_TYPE_PREALLOC_REQ ||
  1052. blk->type == GMU_BLK_TYPE_PREALLOC_PERSIST_REQ) {
  1053. ret = gen8_gmu_process_prealloc(gmu, blk);
  1054. if (ret)
  1055. return ret;
  1056. }
  1057. }
  1058. return 0;
  1059. }
  1060. int gen8_gmu_memory_init(struct adreno_device *adreno_dev)
  1061. {
  1062. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1063. /* GMU master log */
  1064. if (IS_ERR_OR_NULL(gmu->gmu_log))
  1065. gmu->gmu_log = gen8_reserve_gmu_kernel_block(gmu, 0,
  1066. GMU_LOG_SIZE, GMU_NONCACHED_KERNEL, 0);
  1067. return PTR_ERR_OR_ZERO(gmu->gmu_log);
  1068. }
  1069. static int gen8_gmu_init(struct adreno_device *adreno_dev)
  1070. {
  1071. int ret;
  1072. ret = gen8_gmu_parse_fw(adreno_dev);
  1073. if (ret)
  1074. return ret;
  1075. ret = gen8_gmu_memory_init(adreno_dev);
  1076. if (ret)
  1077. return ret;
  1078. return gen8_hfi_init(adreno_dev);
  1079. }
  1080. static void _do_gbif_halt(struct kgsl_device *device, u32 reg, u32 ack_reg,
  1081. u32 mask, const char *client)
  1082. {
  1083. u32 ack;
  1084. unsigned long t;
  1085. kgsl_regwrite(device, reg, mask);
  1086. t = jiffies + msecs_to_jiffies(100);
  1087. do {
  1088. kgsl_regread(device, ack_reg, &ack);
  1089. if ((ack & mask) == mask)
  1090. return;
  1091. /*
  1092. * If we are attempting recovery in case of stall-on-fault
  1093. * then the halt sequence will not complete as long as SMMU
  1094. * is stalled.
  1095. */
  1096. kgsl_mmu_pagefault_resume(&device->mmu, false);
  1097. usleep_range(10, 100);
  1098. } while (!time_after(jiffies, t));
  1099. /* Check one last time */
  1100. kgsl_mmu_pagefault_resume(&device->mmu, false);
  1101. kgsl_regread(device, ack_reg, &ack);
  1102. if ((ack & mask) == mask)
  1103. return;
  1104. dev_err(device->dev, "%s GBIF halt timed out\n", client);
  1105. }
  1106. static void gen8_gmu_pwrctrl_suspend(struct adreno_device *adreno_dev)
  1107. {
  1108. int ret = 0;
  1109. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1110. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  1111. struct kgsl_pwrctrl *pwr = &device->pwrctrl;
  1112. /* Disconnect GPU from BUS is not needed if CX GDSC goes off later */
  1113. /*
  1114. * GEMNOC can enter power collapse state during GPU power down sequence.
  1115. * This could abort CX GDSC collapse. Assert Qactive to avoid this.
  1116. */
  1117. gmu_core_regwrite(device, GEN8_GMUCX_CX_FALNEXT_INTF, 0x1);
  1118. /* Check no outstanding RPMh voting */
  1119. gen8_complete_rpmh_votes(gmu, 1);
  1120. /* Clear the WRITEDROPPED fields and set fence to allow mode */
  1121. gmu_core_regwrite(device, GEN8_GMUAO_AHB_FENCE_STATUS_CLR, 0x7);
  1122. gmu_core_regwrite(device, GEN8_GMUAO_AHB_FENCE_CTRL, 0);
  1123. /* Make sure above writes are committed before we proceed to recovery */
  1124. wmb();
  1125. gmu_core_regwrite(device, GEN8_GMUCX_CM3_SYSRESET, 1);
  1126. /* Halt GX traffic */
  1127. if (gen8_gmu_gx_is_on(adreno_dev))
  1128. _do_gbif_halt(device, GEN8_RBBM_GBIF_HALT,
  1129. GEN8_RBBM_GBIF_HALT_ACK,
  1130. GEN8_GBIF_GX_HALT_MASK,
  1131. "GX");
  1132. /* Halt CX traffic */
  1133. _do_gbif_halt(device, GEN8_GBIF_HALT, GEN8_GBIF_HALT_ACK,
  1134. GEN8_GBIF_ARB_HALT_MASK, "CX");
  1135. if (gen8_gmu_gx_is_on(adreno_dev))
  1136. kgsl_regwrite(device, GEN8_RBBM_SW_RESET_CMD, 0x1);
  1137. /* Allow the software reset to complete */
  1138. udelay(100);
  1139. /*
  1140. * This is based on the assumption that GMU is the only one controlling
  1141. * the GX HS. This code path is the only client voting for GX through
  1142. * the regulator interface.
  1143. */
  1144. if (pwr->gx_gdsc) {
  1145. if (gen8_gmu_gx_is_on(adreno_dev)) {
  1146. /* Switch gx gdsc control from GMU to CPU
  1147. * force non-zero reference count in clk driver
  1148. * so next disable call will turn
  1149. * off the GDSC
  1150. */
  1151. ret = regulator_enable(pwr->gx_gdsc);
  1152. if (ret)
  1153. dev_err(&gmu->pdev->dev,
  1154. "suspend fail: gx enable %d\n", ret);
  1155. ret = regulator_disable(pwr->gx_gdsc);
  1156. if (ret)
  1157. dev_err(&gmu->pdev->dev,
  1158. "suspend fail: gx disable %d\n", ret);
  1159. if (gen8_gmu_gx_is_on(adreno_dev))
  1160. dev_err(&gmu->pdev->dev,
  1161. "gx is stuck on\n");
  1162. }
  1163. }
  1164. }
  1165. /*
  1166. * gen8_gmu_notify_slumber() - initiate request to GMU to prepare to slumber
  1167. * @device: Pointer to KGSL device
  1168. */
  1169. static int gen8_gmu_notify_slumber(struct adreno_device *adreno_dev)
  1170. {
  1171. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  1172. struct kgsl_pwrctrl *pwr = &device->pwrctrl;
  1173. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1174. int bus_level = pwr->pwrlevels[pwr->default_pwrlevel].bus_freq;
  1175. int perf_idx = gmu->dcvs_table.gpu_level_num -
  1176. pwr->default_pwrlevel - 1;
  1177. struct hfi_prep_slumber_cmd req = {
  1178. .freq = perf_idx,
  1179. .bw = bus_level,
  1180. };
  1181. int ret;
  1182. req.bw |= gen8_bus_ab_quantize(adreno_dev, 0);
  1183. /* Disable the power counter so that the GMU is not busy */
  1184. gmu_core_regwrite(device, GEN8_GMUCX_POWER_COUNTER_ENABLE, 0);
  1185. ret = CMD_MSG_HDR(req, H2F_MSG_PREPARE_SLUMBER);
  1186. if (ret)
  1187. return ret;
  1188. ret = gen8_hfi_send_generic_req(adreno_dev, &req, sizeof(req));
  1189. /* Make sure the fence is in ALLOW mode */
  1190. gmu_core_regwrite(device, GEN8_GMUAO_AHB_FENCE_CTRL, 0);
  1191. /*
  1192. * GEMNOC can enter power collapse state during GPU power down sequence.
  1193. * This could abort CX GDSC collapse. Assert Qactive to avoid this.
  1194. */
  1195. gmu_core_regwrite(device, GEN8_GMUCX_CX_FALNEXT_INTF, 0x1);
  1196. return ret;
  1197. }
  1198. void gen8_gmu_suspend(struct adreno_device *adreno_dev)
  1199. {
  1200. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1201. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  1202. gen8_gmu_pwrctrl_suspend(adreno_dev);
  1203. clk_bulk_disable_unprepare(gmu->num_clks, gmu->clks);
  1204. kgsl_pwrctrl_disable_cx_gdsc(device);
  1205. gen8_rdpm_cx_freq_update(gmu, 0);
  1206. dev_err(&gmu->pdev->dev, "Suspended GMU\n");
  1207. kgsl_pwrctrl_set_state(device, KGSL_STATE_NONE);
  1208. }
  1209. static int gen8_gmu_dcvs_set(struct adreno_device *adreno_dev,
  1210. int gpu_pwrlevel, int bus_level, u32 ab)
  1211. {
  1212. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  1213. struct kgsl_pwrctrl *pwr = &device->pwrctrl;
  1214. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1215. struct gen8_dcvs_table *table = &gmu->dcvs_table;
  1216. struct hfi_gx_bw_perf_vote_cmd req = {
  1217. .ack_type = DCVS_ACK_BLOCK,
  1218. .freq = INVALID_DCVS_IDX,
  1219. .bw = INVALID_DCVS_IDX,
  1220. };
  1221. int ret = 0;
  1222. if (!test_bit(GMU_PRIV_HFI_STARTED, &gmu->flags))
  1223. return 0;
  1224. /* Do not set to XO and lower GPU clock vote from GMU */
  1225. if ((gpu_pwrlevel != INVALID_DCVS_IDX) &&
  1226. (gpu_pwrlevel >= table->gpu_level_num - 1))
  1227. return -EINVAL;
  1228. if (gpu_pwrlevel < table->gpu_level_num - 1)
  1229. req.freq = table->gpu_level_num - gpu_pwrlevel - 1;
  1230. if (bus_level < pwr->ddr_table_count && bus_level > 0)
  1231. req.bw = bus_level;
  1232. req.bw |= gen8_bus_ab_quantize(adreno_dev, ab);
  1233. /* GMU will vote for slumber levels through the sleep sequence */
  1234. if ((req.freq == INVALID_DCVS_IDX) && (req.bw == INVALID_BW_VOTE))
  1235. return 0;
  1236. ret = CMD_MSG_HDR(req, H2F_MSG_GX_BW_PERF_VOTE);
  1237. if (ret)
  1238. return ret;
  1239. ret = gen8_hfi_send_generic_req(adreno_dev, &req, sizeof(req));
  1240. if (ret) {
  1241. dev_err_ratelimited(&gmu->pdev->dev,
  1242. "Failed to set GPU perf idx %d, bw idx %d\n",
  1243. req.freq, req.bw);
  1244. /*
  1245. * If this was a dcvs request along side an active gpu, request
  1246. * dispatcher based reset and recovery.
  1247. */
  1248. if (test_bit(GMU_PRIV_GPU_STARTED, &gmu->flags))
  1249. adreno_dispatcher_fault(adreno_dev, ADRENO_GMU_FAULT |
  1250. ADRENO_GMU_FAULT_SKIP_SNAPSHOT);
  1251. }
  1252. if (req.freq != INVALID_DCVS_IDX)
  1253. gen8_rdpm_mx_freq_update(gmu,
  1254. gmu->dcvs_table.gx_votes[req.freq].freq);
  1255. return ret;
  1256. }
  1257. static int gen8_gmu_clock_set(struct adreno_device *adreno_dev, u32 pwrlevel)
  1258. {
  1259. return gen8_gmu_dcvs_set(adreno_dev, pwrlevel, INVALID_DCVS_IDX, INVALID_AB_VALUE);
  1260. }
  1261. static int gen8_gmu_ifpc_store(struct kgsl_device *device,
  1262. u32 val)
  1263. {
  1264. struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
  1265. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1266. u32 requested_idle_level;
  1267. if (!ADRENO_FEATURE(adreno_dev, ADRENO_IFPC))
  1268. return -EINVAL;
  1269. if (val)
  1270. requested_idle_level = GPU_HW_IFPC;
  1271. else
  1272. requested_idle_level = GPU_HW_ACTIVE;
  1273. if (gmu->idle_level == requested_idle_level)
  1274. return 0;
  1275. /* Power down the GPU before changing the idle level */
  1276. return adreno_power_cycle_u32(adreno_dev, &gmu->idle_level,
  1277. requested_idle_level);
  1278. }
  1279. static u32 gen8_gmu_ifpc_isenabled(struct kgsl_device *device)
  1280. {
  1281. struct gen8_gmu_device *gmu = to_gen8_gmu(ADRENO_DEVICE(device));
  1282. return gmu->idle_level == GPU_HW_IFPC;
  1283. }
  1284. /* Send an NMI to the GMU */
  1285. void gen8_gmu_send_nmi(struct kgsl_device *device, bool force)
  1286. {
  1287. struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
  1288. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1289. u32 result;
  1290. /*
  1291. * Do not send NMI if the SMMU is stalled because GMU will not be able
  1292. * to save cm3 state to DDR.
  1293. */
  1294. if (gen8_gmu_gx_is_on(adreno_dev) && adreno_smmu_is_stalled(adreno_dev)) {
  1295. dev_err(&gmu->pdev->dev,
  1296. "Skipping NMI because SMMU is stalled\n");
  1297. return;
  1298. }
  1299. if (force)
  1300. goto nmi;
  1301. /*
  1302. * We should not send NMI if there was a CM3 fault reported because we
  1303. * don't want to overwrite the critical CM3 state captured by gmu before
  1304. * it sent the CM3 fault interrupt. Also don't send NMI if GMU reset is
  1305. * already active. We could have hit a GMU assert and NMI might have
  1306. * already been triggered.
  1307. */
  1308. /* make sure we're reading the latest cm3_fault */
  1309. smp_rmb();
  1310. if (atomic_read(&gmu->cm3_fault))
  1311. return;
  1312. gmu_core_regread(device, GEN8_GMUCX_CM3_FW_INIT_RESULT, &result);
  1313. if (result & 0xE00)
  1314. return;
  1315. nmi:
  1316. /* Mask so there's no interrupt caused by NMI */
  1317. gmu_core_regwrite(device, GEN8_GMUCX_GMU2HOST_INTR_MASK, UINT_MAX);
  1318. /* Make sure the interrupt is masked before causing it */
  1319. wmb();
  1320. /* This will cause the GMU to save it's internal state to ddr */
  1321. gmu_core_regrmw(device, GEN8_GMUCX_CM3_CFG, BIT(9), BIT(9));
  1322. /* Make sure the NMI is invoked before we proceed*/
  1323. wmb();
  1324. /* Wait for the NMI to be handled */
  1325. udelay(200);
  1326. }
  1327. static void gen8_gmu_cooperative_reset(struct kgsl_device *device)
  1328. {
  1329. struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
  1330. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1331. u32 result;
  1332. gmu_core_regwrite(device, GEN8_GMUCX_WDOG_CTRL, 0);
  1333. gmu_core_regwrite(device, GEN8_GMUCX_HOST2GMU_INTR_SET, BIT(17));
  1334. /*
  1335. * After triggering graceful death wait for snapshot ready
  1336. * indication from GMU.
  1337. */
  1338. if (!gmu_core_timed_poll_check(device, GEN8_GMUCX_CM3_FW_INIT_RESULT,
  1339. 0x800, 2, 0x800))
  1340. return;
  1341. gmu_core_regread(device, GEN8_GMUCX_CM3_FW_INIT_RESULT, &result);
  1342. dev_err(&gmu->pdev->dev,
  1343. "GMU cooperative reset timed out 0x%x\n", result);
  1344. /*
  1345. * If we dont get a snapshot ready from GMU, trigger NMI
  1346. * and if we still timeout then we just continue with reset.
  1347. */
  1348. gen8_gmu_send_nmi(device, true);
  1349. gmu_core_regread(device, GEN8_GMUCX_CM3_FW_INIT_RESULT, &result);
  1350. if ((result & 0x800) != 0x800)
  1351. dev_err(&gmu->pdev->dev,
  1352. "GMU cooperative reset NMI timed out 0x%x\n", result);
  1353. }
  1354. static int gen8_gmu_wait_for_active_transition(struct kgsl_device *device)
  1355. {
  1356. u32 reg;
  1357. struct gen8_gmu_device *gmu = to_gen8_gmu(ADRENO_DEVICE(device));
  1358. if (gmu_core_timed_poll_check(device, GEN8_GMUCX_RPMH_POWER_STATE,
  1359. GPU_HW_ACTIVE, 100, GENMASK(3, 0))) {
  1360. gmu_core_regread(device, GEN8_GMUCX_RPMH_POWER_STATE, &reg);
  1361. dev_err(&gmu->pdev->dev,
  1362. "GMU failed to move to ACTIVE state, Current state: 0x%x\n",
  1363. reg);
  1364. return -ETIMEDOUT;
  1365. }
  1366. return 0;
  1367. }
  1368. static bool gen8_gmu_scales_bandwidth(struct kgsl_device *device)
  1369. {
  1370. return true;
  1371. }
  1372. void gen8_gmu_handle_watchdog(struct adreno_device *adreno_dev)
  1373. {
  1374. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1375. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  1376. u32 mask;
  1377. /* Temporarily mask the watchdog interrupt to prevent a storm */
  1378. gmu_core_regread(device, GEN8_GMUAO_AO_HOST_INTERRUPT_MASK, &mask);
  1379. gmu_core_regwrite(device, GEN8_GMUAO_AO_HOST_INTERRUPT_MASK,
  1380. (mask | GMU_INT_WDOG_BITE));
  1381. gen8_gmu_send_nmi(device, false);
  1382. dev_err_ratelimited(&gmu->pdev->dev,
  1383. "GMU watchdog expired interrupt received\n");
  1384. }
  1385. static irqreturn_t gen8_gmu_irq_handler(int irq, void *data)
  1386. {
  1387. struct kgsl_device *device = data;
  1388. struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
  1389. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1390. const struct gen8_gpudev *gen8_gpudev =
  1391. to_gen8_gpudev(ADRENO_GPU_DEVICE(adreno_dev));
  1392. u32 status = 0;
  1393. gmu_core_regread(device, GEN8_GMUAO_AO_HOST_INTERRUPT_STATUS, &status);
  1394. gmu_core_regwrite(device, GEN8_GMUAO_AO_HOST_INTERRUPT_CLR, status);
  1395. if (status & GMU_INT_HOST_AHB_BUS_ERR)
  1396. dev_err_ratelimited(&gmu->pdev->dev,
  1397. "AHB bus error interrupt received\n");
  1398. if (status & GMU_INT_WDOG_BITE)
  1399. gen8_gpudev->handle_watchdog(adreno_dev);
  1400. if (status & GMU_INT_FENCE_ERR) {
  1401. u32 fence_status;
  1402. gmu_core_regread(device, GEN8_GMUAO_AHB_FENCE_STATUS,
  1403. &fence_status);
  1404. dev_err_ratelimited(&gmu->pdev->dev,
  1405. "FENCE error interrupt received %x\n", fence_status);
  1406. }
  1407. if (status & ~GMU_AO_INT_MASK)
  1408. dev_err_ratelimited(&gmu->pdev->dev,
  1409. "Unhandled GMU interrupts 0x%lx\n",
  1410. status & ~GMU_AO_INT_MASK);
  1411. return IRQ_HANDLED;
  1412. }
  1413. void gen8_gmu_aop_send_acd_state(struct gen8_gmu_device *gmu, bool flag)
  1414. {
  1415. char msg_buf[36];
  1416. u32 size;
  1417. int ret;
  1418. if (IS_ERR_OR_NULL(gmu->qmp))
  1419. return;
  1420. size = scnprintf(msg_buf, sizeof(msg_buf),
  1421. "{class: gpu, res: acd, val: %d}", flag);
  1422. ret = qmp_send(gmu->qmp, msg_buf, ALIGN((size + 1), SZ_4));
  1423. if (ret < 0)
  1424. dev_err(&gmu->pdev->dev,
  1425. "AOP qmp send message failed: %d\n", ret);
  1426. }
  1427. int gen8_gmu_enable_clks(struct adreno_device *adreno_dev, u32 level)
  1428. {
  1429. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1430. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  1431. int ret;
  1432. gen8_rdpm_cx_freq_update(gmu, gmu->freqs[level] / 1000);
  1433. ret = kgsl_clk_set_rate(gmu->clks, gmu->num_clks, "gmu_clk",
  1434. gmu->freqs[level]);
  1435. if (ret) {
  1436. dev_err(&gmu->pdev->dev, "GMU clock:%d set failed:%d\n",
  1437. gmu->freqs[level], ret);
  1438. return ret;
  1439. }
  1440. ret = kgsl_clk_set_rate(gmu->clks, gmu->num_clks, "hub_clk",
  1441. adreno_dev->gmu_hub_clk_freq);
  1442. if (ret && ret != -ENODEV) {
  1443. dev_err(&gmu->pdev->dev, "Unable to set the HUB clock\n");
  1444. return ret;
  1445. }
  1446. ret = clk_bulk_prepare_enable(gmu->num_clks, gmu->clks);
  1447. if (ret) {
  1448. dev_err(&gmu->pdev->dev, "Cannot enable GMU clocks\n");
  1449. return ret;
  1450. }
  1451. device->state = KGSL_STATE_AWARE;
  1452. return 0;
  1453. }
  1454. static int gen8_gmu_first_boot(struct adreno_device *adreno_dev)
  1455. {
  1456. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  1457. struct kgsl_pwrctrl *pwr = &device->pwrctrl;
  1458. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1459. int level, ret;
  1460. kgsl_pwrctrl_request_state(device, KGSL_STATE_AWARE);
  1461. gen8_gmu_aop_send_acd_state(gmu, adreno_dev->acd_enabled);
  1462. ret = kgsl_pwrctrl_enable_cx_gdsc(device);
  1463. if (ret)
  1464. return ret;
  1465. ret = gen8_gmu_enable_clks(adreno_dev, 0);
  1466. if (ret)
  1467. goto gdsc_off;
  1468. /*
  1469. * Enable AHB timeout detection to catch any register access taking longer
  1470. * time before NOC timeout gets detected. Enable this logic before any
  1471. * register access which happens to be just after enabling clocks.
  1472. */
  1473. gen8_enable_ahb_timeout_detection(adreno_dev);
  1474. /* Initialize the CX timer */
  1475. gen8_cx_timer_init(adreno_dev);
  1476. ret = gen8_gmu_load_fw(adreno_dev);
  1477. if (ret)
  1478. goto clks_gdsc_off;
  1479. ret = gen8_gmu_version_info(adreno_dev);
  1480. if (ret)
  1481. goto clks_gdsc_off;
  1482. ret = gen8_gmu_itcm_shadow(adreno_dev);
  1483. if (ret)
  1484. goto clks_gdsc_off;
  1485. ret = gen8_scm_gpu_init_cx_regs(adreno_dev);
  1486. if (ret)
  1487. goto clks_gdsc_off;
  1488. gen8_gmu_register_config(adreno_dev);
  1489. gen8_gmu_irq_enable(adreno_dev);
  1490. /* Vote for minimal DDR BW for GMU to init */
  1491. level = pwr->pwrlevels[pwr->default_pwrlevel].bus_min;
  1492. icc_set_bw(pwr->icc_path, 0, kBps_to_icc(pwr->ddr_table[level]));
  1493. /* Clear any GPU faults that might have been left over */
  1494. adreno_clear_gpu_fault(adreno_dev);
  1495. ret = gen8_gmu_device_start(adreno_dev);
  1496. if (ret)
  1497. goto err;
  1498. ret = gen8_gmu_hfi_start(adreno_dev);
  1499. if (ret)
  1500. goto err;
  1501. gen8_get_gpu_feature_info(adreno_dev);
  1502. ret = gen8_hfi_start(adreno_dev);
  1503. if (ret)
  1504. goto err;
  1505. if (gen8_hfi_send_get_value(adreno_dev, HFI_VALUE_GMU_AB_VOTE, 0) == 1 &&
  1506. !WARN_ONCE(!adreno_dev->gpucore->num_ddr_channels,
  1507. "Number of DDR channel is not specified in gpu core")) {
  1508. adreno_dev->gmu_ab = true;
  1509. set_bit(ADRENO_DEVICE_GMU_AB, &adreno_dev->priv);
  1510. }
  1511. icc_set_bw(pwr->icc_path, 0, 0);
  1512. device->gmu_fault = false;
  1513. kgsl_pwrctrl_set_state(device, KGSL_STATE_AWARE);
  1514. return 0;
  1515. err:
  1516. gen8_gmu_irq_disable(adreno_dev);
  1517. if (device->gmu_fault) {
  1518. gen8_gmu_suspend(adreno_dev);
  1519. return ret;
  1520. }
  1521. clks_gdsc_off:
  1522. clk_bulk_disable_unprepare(gmu->num_clks, gmu->clks);
  1523. gdsc_off:
  1524. kgsl_pwrctrl_disable_cx_gdsc(device);
  1525. gen8_rdpm_cx_freq_update(gmu, 0);
  1526. return ret;
  1527. }
  1528. static int gen8_gmu_boot(struct adreno_device *adreno_dev)
  1529. {
  1530. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  1531. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1532. int ret = 0;
  1533. kgsl_pwrctrl_request_state(device, KGSL_STATE_AWARE);
  1534. ret = kgsl_pwrctrl_enable_cx_gdsc(device);
  1535. if (ret)
  1536. return ret;
  1537. ret = gen8_gmu_enable_clks(adreno_dev, 0);
  1538. if (ret)
  1539. goto gdsc_off;
  1540. /*
  1541. * Enable AHB timeout detection to catch any register access taking longer
  1542. * time before NOC timeout gets detected. Enable this logic before any
  1543. * register access which happens to be just after enabling clocks.
  1544. */
  1545. gen8_enable_ahb_timeout_detection(adreno_dev);
  1546. /* Initialize the CX timer */
  1547. gen8_cx_timer_init(adreno_dev);
  1548. ret = gen8_rscc_wakeup_sequence(adreno_dev);
  1549. if (ret)
  1550. goto clks_gdsc_off;
  1551. ret = gen8_gmu_load_fw(adreno_dev);
  1552. if (ret)
  1553. goto clks_gdsc_off;
  1554. gen8_gmu_register_config(adreno_dev);
  1555. gen8_gmu_irq_enable(adreno_dev);
  1556. /* Clear any GPU faults that might have been left over */
  1557. adreno_clear_gpu_fault(adreno_dev);
  1558. ret = gen8_gmu_device_start(adreno_dev);
  1559. if (ret)
  1560. goto err;
  1561. ret = gen8_gmu_hfi_start(adreno_dev);
  1562. if (ret)
  1563. goto err;
  1564. ret = gen8_hfi_start(adreno_dev);
  1565. if (ret)
  1566. goto err;
  1567. device->gmu_fault = false;
  1568. kgsl_pwrctrl_set_state(device, KGSL_STATE_AWARE);
  1569. return 0;
  1570. err:
  1571. gen8_gmu_irq_disable(adreno_dev);
  1572. if (device->gmu_fault) {
  1573. gen8_gmu_suspend(adreno_dev);
  1574. return ret;
  1575. }
  1576. clks_gdsc_off:
  1577. clk_bulk_disable_unprepare(gmu->num_clks, gmu->clks);
  1578. gdsc_off:
  1579. kgsl_pwrctrl_disable_cx_gdsc(device);
  1580. gen8_rdpm_cx_freq_update(gmu, 0);
  1581. return ret;
  1582. }
  1583. static void set_acd(struct adreno_device *adreno_dev, void *priv)
  1584. {
  1585. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1586. adreno_dev->acd_enabled = *((bool *)priv);
  1587. gen8_gmu_aop_send_acd_state(gmu, adreno_dev->acd_enabled);
  1588. }
  1589. static int gen8_gmu_acd_set(struct kgsl_device *device, bool val)
  1590. {
  1591. struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
  1592. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1593. if (IS_ERR_OR_NULL(gmu->qmp))
  1594. return -EINVAL;
  1595. /* Don't do any unneeded work if ACD is already in the correct state */
  1596. if (adreno_dev->acd_enabled == val)
  1597. return 0;
  1598. /* Power cycle the GPU for changes to take effect */
  1599. return adreno_power_cycle(adreno_dev, set_acd, &val);
  1600. }
  1601. #define BCL_RESP_TYPE_MASK BIT(0)
  1602. #define BCL_SID0_MASK GENMASK(7, 1)
  1603. #define BCL_SID1_MASK GENMASK(14, 8)
  1604. #define BCL_SID2_MASK GENMASK(21, 15)
  1605. static int gen8_bcl_sid_set(struct kgsl_device *device, u32 sid_id, u64 sid_val)
  1606. {
  1607. struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
  1608. u32 bcl_data, val = (u32) sid_val;
  1609. if (!ADRENO_FEATURE(adreno_dev, ADRENO_BCL) ||
  1610. !FIELD_GET(BCL_RESP_TYPE_MASK, adreno_dev->bcl_data))
  1611. return -EINVAL;
  1612. switch (sid_id) {
  1613. case 0:
  1614. adreno_dev->bcl_data &= ~BCL_SID0_MASK;
  1615. bcl_data = adreno_dev->bcl_data | FIELD_PREP(BCL_SID0_MASK, val);
  1616. break;
  1617. case 1:
  1618. adreno_dev->bcl_data &= ~BCL_SID1_MASK;
  1619. bcl_data = adreno_dev->bcl_data | FIELD_PREP(BCL_SID1_MASK, val);
  1620. break;
  1621. case 2:
  1622. adreno_dev->bcl_data &= ~BCL_SID2_MASK;
  1623. bcl_data = adreno_dev->bcl_data | FIELD_PREP(BCL_SID2_MASK, val);
  1624. break;
  1625. default:
  1626. return -EINVAL;
  1627. }
  1628. return adreno_power_cycle_u32(adreno_dev, &adreno_dev->bcl_data, bcl_data);
  1629. }
  1630. static u64 gen8_bcl_sid_get(struct kgsl_device *device, u32 sid_id)
  1631. {
  1632. struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
  1633. if (!ADRENO_FEATURE(adreno_dev, ADRENO_BCL) ||
  1634. !FIELD_GET(BCL_RESP_TYPE_MASK, adreno_dev->bcl_data))
  1635. return 0;
  1636. switch (sid_id) {
  1637. case 0:
  1638. return ((u64) FIELD_GET(BCL_SID0_MASK, adreno_dev->bcl_data));
  1639. case 1:
  1640. return ((u64) FIELD_GET(BCL_SID1_MASK, adreno_dev->bcl_data));
  1641. case 2:
  1642. return ((u64) FIELD_GET(BCL_SID2_MASK, adreno_dev->bcl_data));
  1643. default:
  1644. return 0;
  1645. }
  1646. }
  1647. static void gen8_send_tlb_hint(struct kgsl_device *device, bool val)
  1648. {
  1649. struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
  1650. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1651. if (!gmu->domain)
  1652. return;
  1653. #if (KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE)
  1654. qcom_skip_tlb_management(&gmu->pdev->dev, val);
  1655. #endif
  1656. if (!val)
  1657. iommu_flush_iotlb_all(gmu->domain);
  1658. }
  1659. static const struct gmu_dev_ops gen8_gmudev = {
  1660. .oob_set = gen8_gmu_oob_set,
  1661. .oob_clear = gen8_gmu_oob_clear,
  1662. .ifpc_store = gen8_gmu_ifpc_store,
  1663. .ifpc_isenabled = gen8_gmu_ifpc_isenabled,
  1664. .cooperative_reset = gen8_gmu_cooperative_reset,
  1665. .wait_for_active_transition = gen8_gmu_wait_for_active_transition,
  1666. .scales_bandwidth = gen8_gmu_scales_bandwidth,
  1667. .acd_set = gen8_gmu_acd_set,
  1668. .bcl_sid_set = gen8_bcl_sid_set,
  1669. .bcl_sid_get = gen8_bcl_sid_get,
  1670. .send_nmi = gen8_gmu_send_nmi,
  1671. .send_tlb_hint = gen8_send_tlb_hint,
  1672. };
  1673. static int gen8_gmu_bus_set(struct adreno_device *adreno_dev, int buslevel,
  1674. u32 ab)
  1675. {
  1676. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  1677. struct kgsl_pwrctrl *pwr = &device->pwrctrl;
  1678. int ret = 0;
  1679. if (buslevel == pwr->cur_buslevel)
  1680. buslevel = INVALID_DCVS_IDX;
  1681. if ((ab == pwr->cur_ab) || (ab == 0))
  1682. ab = INVALID_AB_VALUE;
  1683. if ((ab == INVALID_AB_VALUE) && (buslevel == INVALID_DCVS_IDX))
  1684. return 0;
  1685. ret = gen8_gmu_dcvs_set(adreno_dev, INVALID_DCVS_IDX,
  1686. buslevel, ab);
  1687. if (ret)
  1688. return ret;
  1689. if (buslevel != INVALID_DCVS_IDX)
  1690. pwr->cur_buslevel = buslevel;
  1691. if (ab != INVALID_AB_VALUE) {
  1692. if (!adreno_dev->gmu_ab)
  1693. icc_set_bw(pwr->icc_path, MBps_to_icc(ab), 0);
  1694. pwr->cur_ab = ab;
  1695. }
  1696. trace_kgsl_buslevel(device, pwr->active_pwrlevel, pwr->cur_buslevel, pwr->cur_ab);
  1697. return ret;
  1698. }
  1699. u32 gen8_bus_ab_quantize(struct adreno_device *adreno_dev, u32 ab)
  1700. {
  1701. u16 vote = 0;
  1702. u32 max_bw, max_ab;
  1703. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  1704. struct kgsl_pwrctrl *pwr = &device->pwrctrl;
  1705. if (!adreno_dev->gmu_ab || (ab == INVALID_AB_VALUE))
  1706. return (FIELD_PREP(GENMASK(31, 16), INVALID_AB_VALUE));
  1707. /*
  1708. * max ddr bandwidth (kbps) = (Max bw in kbps per channel * number of channel)
  1709. * max ab (Mbps) = max ddr bandwidth (kbps) / 1000
  1710. */
  1711. max_bw = pwr->ddr_table[pwr->ddr_table_count - 1] * adreno_dev->gpucore->num_ddr_channels;
  1712. max_ab = max_bw / 1000;
  1713. /*
  1714. * If requested AB is higher than theoretical max bandwidth, set AB vote as max
  1715. * allowable quantized AB value.
  1716. *
  1717. * Power FW supports a 16 bit AB BW level. We can quantize the entire vote-able BW
  1718. * range to a 16 bit space and the quantized value can be used to vote for AB though
  1719. * GMU. Quantization can be performed as below.
  1720. *
  1721. * quantized_vote = (ab vote (kbps) * 2^16) / max ddr bandwidth (kbps)
  1722. */
  1723. if (ab >= max_ab)
  1724. vote = MAX_AB_VALUE;
  1725. else
  1726. vote = (u16)(((u64)ab * 1000 * (1 << 16)) / max_bw);
  1727. /*
  1728. * Vote will be calculated as 0 for smaller AB values.
  1729. * Set a minimum non-zero vote in such cases.
  1730. */
  1731. if (ab && !vote)
  1732. vote = 0x1;
  1733. /*
  1734. * Set ab enable mask and valid AB vote. req.bw is 32 bit value 0xABABENIB
  1735. * and with this return we want to set the upper 16 bits and EN field specifies
  1736. * if the AB vote is valid or not.
  1737. */
  1738. return (FIELD_PREP(GENMASK(31, 16), vote) | FIELD_PREP(GENMASK(15, 8), 1));
  1739. }
  1740. static void gen8_free_gmu_globals(struct gen8_gmu_device *gmu)
  1741. {
  1742. int i;
  1743. for (i = 0; i < gmu->global_entries && i < ARRAY_SIZE(gmu->gmu_globals); i++) {
  1744. struct kgsl_memdesc *md = &gmu->gmu_globals[i];
  1745. if (!md->gmuaddr)
  1746. continue;
  1747. iommu_unmap(gmu->domain, md->gmuaddr, md->size);
  1748. if (md->priv & KGSL_MEMDESC_SYSMEM)
  1749. kgsl_sharedmem_free(md);
  1750. memset(md, 0, sizeof(*md));
  1751. }
  1752. if (gmu->domain) {
  1753. iommu_detach_device(gmu->domain, &gmu->pdev->dev);
  1754. iommu_domain_free(gmu->domain);
  1755. gmu->domain = NULL;
  1756. }
  1757. gmu->global_entries = 0;
  1758. }
  1759. static int gen8_gmu_qmp_aoss_init(struct adreno_device *adreno_dev,
  1760. struct gen8_gmu_device *gmu)
  1761. {
  1762. gmu->qmp = qmp_get(&gmu->pdev->dev);
  1763. if (IS_ERR(gmu->qmp))
  1764. return PTR_ERR(gmu->qmp);
  1765. adreno_dev->acd_enabled = true;
  1766. return 0;
  1767. }
  1768. static void gen8_gmu_acd_probe(struct kgsl_device *device,
  1769. struct gen8_gmu_device *gmu, struct device_node *node)
  1770. {
  1771. struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
  1772. struct kgsl_pwrctrl *pwr = &device->pwrctrl;
  1773. struct kgsl_pwrlevel *pwrlevel =
  1774. &pwr->pwrlevels[pwr->num_pwrlevels - 1];
  1775. struct hfi_acd_table_cmd *cmd = &gmu->hfi.acd_table;
  1776. int ret, i, cmd_idx = 0;
  1777. if (!ADRENO_FEATURE(adreno_dev, ADRENO_ACD))
  1778. return;
  1779. cmd->hdr = CREATE_MSG_HDR(H2F_MSG_ACD_TBL, HFI_MSG_CMD);
  1780. cmd->version = 1;
  1781. cmd->stride = 1;
  1782. cmd->enable_by_level = 0;
  1783. /*
  1784. * Iterate through each gpu power level and generate a mask for GMU
  1785. * firmware for ACD enabled levels and store the corresponding control
  1786. * register configurations to the acd_table structure.
  1787. */
  1788. for (i = 0; i < pwr->num_pwrlevels; i++) {
  1789. if (pwrlevel->acd_level) {
  1790. cmd->enable_by_level |= (1 << (i + 1));
  1791. cmd->data[cmd_idx++] = pwrlevel->acd_level;
  1792. }
  1793. pwrlevel--;
  1794. }
  1795. if (!cmd->enable_by_level)
  1796. return;
  1797. cmd->num_levels = cmd_idx;
  1798. ret = gen8_gmu_qmp_aoss_init(adreno_dev, gmu);
  1799. if (ret)
  1800. dev_err(&gmu->pdev->dev,
  1801. "AOP qmp init failed: %d\n", ret);
  1802. }
  1803. static int gen8_gmu_reg_probe(struct adreno_device *adreno_dev)
  1804. {
  1805. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  1806. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1807. int ret;
  1808. ret = kgsl_regmap_add_region(&device->regmap, gmu->pdev, "gmu", NULL, NULL);
  1809. if (ret)
  1810. dev_err(&gmu->pdev->dev, "Unable to map the GMU registers\n");
  1811. /*
  1812. * gmu_ao_blk_dec1 and gmu_ao_blk_dec2 are contiguous and contained within the gmu region
  1813. * mapped above. gmu_ao_blk_dec0 is not within the gmu region and is mapped separately.
  1814. */
  1815. kgsl_regmap_add_region(&device->regmap, gmu->pdev, "gmu_ao_blk_dec0", NULL, NULL);
  1816. return ret;
  1817. }
  1818. static int gen8_gmu_clk_probe(struct adreno_device *adreno_dev)
  1819. {
  1820. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1821. int ret, i;
  1822. int tbl_size;
  1823. int num_freqs;
  1824. int offset;
  1825. ret = devm_clk_bulk_get_all(&gmu->pdev->dev, &gmu->clks);
  1826. if (ret < 0)
  1827. return ret;
  1828. /*
  1829. * Voting for apb_pclk will enable power and clocks required for
  1830. * QDSS path to function. However, if QCOM_KGSL_QDSS_STM is not enabled,
  1831. * QDSS is essentially unusable. Hence, if QDSS cannot be used,
  1832. * don't vote for this clock.
  1833. */
  1834. if (!IS_ENABLED(CONFIG_QCOM_KGSL_QDSS_STM)) {
  1835. for (i = 0; i < ret; i++) {
  1836. if (!strcmp(gmu->clks[i].id, "apb_pclk")) {
  1837. gmu->clks[i].clk = NULL;
  1838. break;
  1839. }
  1840. }
  1841. }
  1842. gmu->num_clks = ret;
  1843. /* Read the optional list of GMU frequencies */
  1844. if (of_get_property(gmu->pdev->dev.of_node,
  1845. "qcom,gmu-freq-table", &tbl_size) == NULL)
  1846. goto default_gmu_freq;
  1847. num_freqs = (tbl_size / sizeof(u32)) / 2;
  1848. if (num_freqs != ARRAY_SIZE(gmu->freqs))
  1849. goto default_gmu_freq;
  1850. for (i = 0; i < num_freqs; i++) {
  1851. offset = i * 2;
  1852. ret = of_property_read_u32_index(gmu->pdev->dev.of_node,
  1853. "qcom,gmu-freq-table", offset, &gmu->freqs[i]);
  1854. if (ret)
  1855. goto default_gmu_freq;
  1856. ret = of_property_read_u32_index(gmu->pdev->dev.of_node,
  1857. "qcom,gmu-freq-table", offset + 1, &gmu->vlvls[i]);
  1858. if (ret)
  1859. goto default_gmu_freq;
  1860. }
  1861. return 0;
  1862. default_gmu_freq:
  1863. /* The GMU frequency table is missing or invalid. Go with a default */
  1864. gmu->freqs[0] = GMU_FREQ_MIN;
  1865. gmu->vlvls[0] = RPMH_REGULATOR_LEVEL_LOW_SVS;
  1866. gmu->freqs[1] = GMU_FREQ_MAX;
  1867. gmu->vlvls[1] = RPMH_REGULATOR_LEVEL_SVS;
  1868. return 0;
  1869. }
  1870. static void gen8_gmu_rdpm_probe(struct gen8_gmu_device *gmu,
  1871. struct kgsl_device *device)
  1872. {
  1873. struct resource *res;
  1874. res = platform_get_resource_byname(device->pdev, IORESOURCE_MEM, "rdpm_cx");
  1875. if (res)
  1876. gmu->rdpm_cx_virt = devm_ioremap(&device->pdev->dev,
  1877. res->start, resource_size(res));
  1878. res = platform_get_resource_byname(device->pdev, IORESOURCE_MEM, "rdpm_mx");
  1879. if (res)
  1880. gmu->rdpm_mx_virt = devm_ioremap(&device->pdev->dev,
  1881. res->start, resource_size(res));
  1882. }
  1883. void gen8_gmu_remove(struct kgsl_device *device)
  1884. {
  1885. struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
  1886. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1887. if (!IS_ERR_OR_NULL(gmu->qmp))
  1888. qmp_put(gmu->qmp);
  1889. adreno_dev->acd_enabled = false;
  1890. if (gmu->fw_image)
  1891. release_firmware(gmu->fw_image);
  1892. gen8_free_gmu_globals(gmu);
  1893. vfree(gmu->itcm_shadow);
  1894. kobject_put(&gmu->log_kobj);
  1895. kobject_put(&gmu->stats_kobj);
  1896. }
  1897. static int gen8_gmu_iommu_fault_handler(struct iommu_domain *domain,
  1898. struct device *dev, unsigned long addr, int flags, void *token)
  1899. {
  1900. char *fault_type = "unknown";
  1901. if (flags & IOMMU_FAULT_TRANSLATION)
  1902. fault_type = "translation";
  1903. else if (flags & IOMMU_FAULT_PERMISSION)
  1904. fault_type = "permission";
  1905. else if (flags & IOMMU_FAULT_EXTERNAL)
  1906. fault_type = "external";
  1907. else if (flags & IOMMU_FAULT_TRANSACTION_STALLED)
  1908. fault_type = "transaction stalled";
  1909. dev_err(dev, "GMU fault addr = %lX, context=kernel (%s %s fault)\n",
  1910. addr,
  1911. (flags & IOMMU_FAULT_WRITE) ? "write" : "read",
  1912. fault_type);
  1913. return 0;
  1914. }
  1915. static int gen8_gmu_iommu_init(struct gen8_gmu_device *gmu)
  1916. {
  1917. int ret;
  1918. gmu->domain = iommu_domain_alloc(&platform_bus_type);
  1919. if (gmu->domain == NULL) {
  1920. dev_err(&gmu->pdev->dev, "Unable to allocate GMU IOMMU domain\n");
  1921. return -ENODEV;
  1922. }
  1923. /*
  1924. * Disable stall on fault for the GMU context bank.
  1925. * This sets SCTLR.CFCFG = 0.
  1926. * Also note that, the smmu driver sets SCTLR.HUPCF = 0 by default.
  1927. */
  1928. qcom_iommu_set_fault_model(gmu->domain, QCOM_IOMMU_FAULT_MODEL_NO_STALL);
  1929. ret = iommu_attach_device(gmu->domain, &gmu->pdev->dev);
  1930. if (!ret) {
  1931. iommu_set_fault_handler(gmu->domain,
  1932. gen8_gmu_iommu_fault_handler, gmu);
  1933. return 0;
  1934. }
  1935. dev_err(&gmu->pdev->dev,
  1936. "Unable to attach GMU IOMMU domain: %d\n", ret);
  1937. iommu_domain_free(gmu->domain);
  1938. gmu->domain = NULL;
  1939. return ret;
  1940. }
  1941. /* Default IFPC timer (300usec) value */
  1942. #define GEN8_GMU_LONG_IFPC_HYST FIELD_PREP(GENMASK(15, 0), 0x1680)
  1943. /* Minimum IFPC timer (200usec) allowed to override default value */
  1944. #define GEN8_GMU_LONG_IFPC_HYST_FLOOR FIELD_PREP(GENMASK(15, 0), 0x0F00)
  1945. int gen8_gmu_probe(struct kgsl_device *device,
  1946. struct platform_device *pdev)
  1947. {
  1948. struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
  1949. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  1950. struct device *dev = &pdev->dev;
  1951. struct resource *res;
  1952. int ret, i;
  1953. gmu->pdev = pdev;
  1954. dma_set_coherent_mask(&gmu->pdev->dev, DMA_BIT_MASK(64));
  1955. gmu->pdev->dev.dma_mask = &gmu->pdev->dev.coherent_dma_mask;
  1956. set_dma_ops(&gmu->pdev->dev, NULL);
  1957. res = platform_get_resource_byname(device->pdev, IORESOURCE_MEM,
  1958. "rscc");
  1959. if (res) {
  1960. gmu->rscc_virt = devm_ioremap(&device->pdev->dev, res->start,
  1961. resource_size(res));
  1962. if (!gmu->rscc_virt) {
  1963. dev_err(&gmu->pdev->dev, "rscc ioremap failed\n");
  1964. return -ENOMEM;
  1965. }
  1966. }
  1967. /* Setup any rdpm register ranges */
  1968. gen8_gmu_rdpm_probe(gmu, device);
  1969. /* Set up GMU regulators */
  1970. ret = kgsl_pwrctrl_probe_regulators(device, pdev);
  1971. if (ret)
  1972. return ret;
  1973. ret = gen8_gmu_clk_probe(adreno_dev);
  1974. if (ret)
  1975. return ret;
  1976. /* Set up GMU IOMMU and shared memory with GMU */
  1977. ret = gen8_gmu_iommu_init(gmu);
  1978. if (ret)
  1979. goto error;
  1980. gmu->vma = gen8_gmu_vma;
  1981. for (i = 0; i < ARRAY_SIZE(gen8_gmu_vma); i++) {
  1982. struct gmu_vma_entry *vma = &gen8_gmu_vma[i];
  1983. vma->vma_root = RB_ROOT;
  1984. spin_lock_init(&vma->lock);
  1985. }
  1986. /* Map and reserve GMU CSRs registers */
  1987. ret = gen8_gmu_reg_probe(adreno_dev);
  1988. if (ret)
  1989. goto error;
  1990. /* Populates RPMh configurations */
  1991. ret = gen8_build_rpmh_tables(adreno_dev);
  1992. if (ret)
  1993. goto error;
  1994. /* Set up GMU idle state */
  1995. if (ADRENO_FEATURE(adreno_dev, ADRENO_IFPC)) {
  1996. gmu->idle_level = GPU_HW_IFPC;
  1997. adreno_dev->ifpc_hyst = GEN8_GMU_LONG_IFPC_HYST;
  1998. adreno_dev->ifpc_hyst_floor = GEN8_GMU_LONG_IFPC_HYST_FLOOR;
  1999. } else {
  2000. gmu->idle_level = GPU_HW_ACTIVE;
  2001. }
  2002. gen8_gmu_acd_probe(device, gmu, pdev->dev.of_node);
  2003. set_bit(GMU_ENABLED, &device->gmu_core.flags);
  2004. device->gmu_core.dev_ops = &gen8_gmudev;
  2005. /* Set default GMU attributes */
  2006. gmu->log_stream_enable = false;
  2007. gmu->log_group_mask = 0x3;
  2008. /* Initialize to zero to detect trace packet loss */
  2009. gmu->trace.seq_num = 0;
  2010. /* Disabled by default */
  2011. gmu->stats_enable = false;
  2012. /* Set default to CM3 busy cycles countable */
  2013. gmu->stats_mask = BIT(GEN8_GMU_CM3_BUSY_CYCLES);
  2014. /* Interval is in 50 us units. Set default sampling frequency to 4x50 us */
  2015. gmu->stats_interval = HFI_FEATURE_GMU_STATS_INTERVAL;
  2016. /* GMU sysfs nodes setup */
  2017. (void) kobject_init_and_add(&gmu->log_kobj, &log_kobj_type, &dev->kobj, "log");
  2018. (void) kobject_init_and_add(&gmu->stats_kobj, &stats_kobj_type, &dev->kobj, "stats");
  2019. of_property_read_u32(gmu->pdev->dev.of_node, "qcom,gmu-perf-ddr-bw",
  2020. &gmu->perf_ddr_bw);
  2021. spin_lock_init(&gmu->hfi.cmdq_lock);
  2022. gmu->irq = kgsl_request_irq(gmu->pdev, "gmu",
  2023. gen8_gmu_irq_handler, device);
  2024. if (gmu->irq >= 0)
  2025. return 0;
  2026. ret = gmu->irq;
  2027. error:
  2028. gen8_gmu_remove(device);
  2029. return ret;
  2030. }
  2031. static void gen8_gmu_active_count_put(struct adreno_device *adreno_dev)
  2032. {
  2033. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  2034. if (WARN_ON(!mutex_is_locked(&device->mutex)))
  2035. return;
  2036. if (WARN(atomic_read(&device->active_cnt) == 0,
  2037. "Unbalanced get/put calls to KGSL active count\n"))
  2038. return;
  2039. if (atomic_dec_and_test(&device->active_cnt)) {
  2040. kgsl_pwrscale_update_stats(device);
  2041. kgsl_pwrscale_update(device);
  2042. kgsl_start_idle_timer(device);
  2043. }
  2044. trace_kgsl_active_count(device,
  2045. (unsigned long) __builtin_return_address(0));
  2046. wake_up(&device->active_cnt_wq);
  2047. }
  2048. int gen8_halt_gbif(struct adreno_device *adreno_dev)
  2049. {
  2050. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  2051. int ret;
  2052. /* Halt new client requests */
  2053. kgsl_regwrite(device, GEN8_GBIF_HALT, GEN8_GBIF_CLIENT_HALT_MASK);
  2054. ret = adreno_wait_for_halt_ack(device,
  2055. GEN8_GBIF_HALT_ACK, GEN8_GBIF_CLIENT_HALT_MASK);
  2056. /* Halt all AXI requests */
  2057. kgsl_regwrite(device, GEN8_GBIF_HALT, GEN8_GBIF_ARB_HALT_MASK);
  2058. ret = adreno_wait_for_halt_ack(device,
  2059. GEN8_GBIF_HALT_ACK, GEN8_GBIF_ARB_HALT_MASK);
  2060. /* De-assert the halts */
  2061. kgsl_regwrite(device, GEN8_GBIF_HALT, 0x0);
  2062. return ret;
  2063. }
  2064. static int gen8_gmu_power_off(struct adreno_device *adreno_dev)
  2065. {
  2066. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  2067. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  2068. int ret = 0;
  2069. if (device->gmu_fault)
  2070. goto error;
  2071. /* Wait for the lowest idle level we requested */
  2072. ret = gen8_gmu_wait_for_lowest_idle(adreno_dev);
  2073. if (ret)
  2074. goto error;
  2075. ret = gen8_complete_rpmh_votes(gmu, 2);
  2076. if (ret)
  2077. goto error;
  2078. ret = gen8_gmu_notify_slumber(adreno_dev);
  2079. if (ret)
  2080. goto error;
  2081. ret = gen8_gmu_wait_for_idle(adreno_dev);
  2082. if (ret)
  2083. goto error;
  2084. ret = gen8_rscc_sleep_sequence(adreno_dev);
  2085. if (ret)
  2086. goto error;
  2087. gen8_rdpm_mx_freq_update(gmu, 0);
  2088. /* Now that we are done with GMU and GPU, Clear the GBIF */
  2089. ret = gen8_halt_gbif(adreno_dev);
  2090. if (ret)
  2091. goto error;
  2092. gen8_gmu_irq_disable(adreno_dev);
  2093. gen8_hfi_stop(adreno_dev);
  2094. clk_bulk_disable_unprepare(gmu->num_clks, gmu->clks);
  2095. kgsl_pwrctrl_disable_cx_gdsc(device);
  2096. gen8_rdpm_cx_freq_update(gmu, 0);
  2097. kgsl_pwrctrl_set_state(device, KGSL_STATE_NONE);
  2098. return 0;
  2099. error:
  2100. gen8_gmu_irq_disable(adreno_dev);
  2101. gen8_hfi_stop(adreno_dev);
  2102. gen8_gmu_suspend(adreno_dev);
  2103. return ret;
  2104. }
  2105. void gen8_enable_gpu_irq(struct adreno_device *adreno_dev)
  2106. {
  2107. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  2108. kgsl_pwrctrl_irq(device, true);
  2109. adreno_irqctrl(adreno_dev, 1);
  2110. }
  2111. void gen8_disable_gpu_irq(struct adreno_device *adreno_dev)
  2112. {
  2113. kgsl_pwrctrl_irq(KGSL_DEVICE(adreno_dev), false);
  2114. if (gen8_gmu_gx_is_on(adreno_dev))
  2115. adreno_irqctrl(adreno_dev, 0);
  2116. }
  2117. static int gen8_gpu_boot(struct adreno_device *adreno_dev)
  2118. {
  2119. const struct adreno_gen8_core *gen8_core = to_gen8_core(adreno_dev);
  2120. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  2121. int ret;
  2122. adreno_set_active_ctxs_null(adreno_dev);
  2123. ret = kgsl_mmu_start(device);
  2124. if (ret)
  2125. goto err;
  2126. ret = gen8_gmu_oob_set(device, oob_gpu);
  2127. if (ret)
  2128. goto oob_clear;
  2129. ret = gen8_gmu_hfi_start_msg(adreno_dev);
  2130. if (ret)
  2131. goto oob_clear;
  2132. /* Clear the busy_data stats - we're starting over from scratch */
  2133. memset(&adreno_dev->busy_data, 0, sizeof(adreno_dev->busy_data));
  2134. gen8_start(adreno_dev);
  2135. if (gen8_core->qos_value && adreno_is_preemption_enabled(adreno_dev))
  2136. kgsl_regwrite(device, GEN8_RBBM_GBIF_CLIENT_QOS_CNTL,
  2137. gen8_core->qos_value[adreno_dev->cur_rb->id]);
  2138. /* Re-initialize the coresight registers if applicable */
  2139. adreno_coresight_start(adreno_dev);
  2140. adreno_perfcounter_start(adreno_dev);
  2141. /* Clear FSR here in case it is set from a previous pagefault */
  2142. kgsl_mmu_clear_fsr(&device->mmu);
  2143. gen8_enable_gpu_irq(adreno_dev);
  2144. ret = gen8_rb_start(adreno_dev);
  2145. if (ret) {
  2146. gen8_disable_gpu_irq(adreno_dev);
  2147. goto oob_clear;
  2148. }
  2149. /*
  2150. * At this point it is safe to assume that we recovered. Setting
  2151. * this field allows us to take a new snapshot for the next failure
  2152. * if we are prioritizing the first unrecoverable snapshot.
  2153. */
  2154. if (device->snapshot)
  2155. device->snapshot->recovered = true;
  2156. /* Start the dispatcher */
  2157. adreno_dispatcher_start(device);
  2158. device->reset_counter++;
  2159. gen8_gmu_oob_clear(device, oob_gpu);
  2160. return 0;
  2161. oob_clear:
  2162. gen8_gmu_oob_clear(device, oob_gpu);
  2163. err:
  2164. gen8_gmu_power_off(adreno_dev);
  2165. return ret;
  2166. }
  2167. static void gmu_idle_timer(struct timer_list *t)
  2168. {
  2169. struct kgsl_device *device = container_of(t, struct kgsl_device,
  2170. idle_timer);
  2171. kgsl_schedule_work(&device->idle_check_ws);
  2172. }
  2173. static int gen8_boot(struct adreno_device *adreno_dev)
  2174. {
  2175. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  2176. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  2177. int ret;
  2178. if (WARN_ON(test_bit(GMU_PRIV_GPU_STARTED, &gmu->flags)))
  2179. return 0;
  2180. kgsl_pwrctrl_request_state(device, KGSL_STATE_ACTIVE);
  2181. ret = gen8_gmu_boot(adreno_dev);
  2182. if (ret)
  2183. return ret;
  2184. ret = gen8_gpu_boot(adreno_dev);
  2185. if (ret)
  2186. return ret;
  2187. kgsl_start_idle_timer(device);
  2188. kgsl_pwrscale_wake(device);
  2189. set_bit(GMU_PRIV_GPU_STARTED, &gmu->flags);
  2190. device->pwrctrl.last_stat_updated = ktime_get();
  2191. kgsl_pwrctrl_set_state(device, KGSL_STATE_ACTIVE);
  2192. return ret;
  2193. }
  2194. static int gen8_first_boot(struct adreno_device *adreno_dev)
  2195. {
  2196. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  2197. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  2198. int ret;
  2199. if (test_bit(GMU_PRIV_FIRST_BOOT_DONE, &gmu->flags)) {
  2200. if (!test_bit(GMU_PRIV_GPU_STARTED, &gmu->flags))
  2201. return gen8_boot(adreno_dev);
  2202. return 0;
  2203. }
  2204. ret = gen8_ringbuffer_init(adreno_dev);
  2205. if (ret)
  2206. return ret;
  2207. ret = gen8_microcode_read(adreno_dev);
  2208. if (ret)
  2209. return ret;
  2210. ret = gen8_init(adreno_dev);
  2211. if (ret)
  2212. return ret;
  2213. ret = gen8_gmu_init(adreno_dev);
  2214. if (ret)
  2215. return ret;
  2216. kgsl_pwrctrl_request_state(device, KGSL_STATE_ACTIVE);
  2217. ret = gen8_gmu_first_boot(adreno_dev);
  2218. if (ret)
  2219. return ret;
  2220. ret = gen8_gpu_boot(adreno_dev);
  2221. if (ret)
  2222. return ret;
  2223. adreno_get_bus_counters(adreno_dev);
  2224. adreno_dev->cooperative_reset = ADRENO_FEATURE(adreno_dev,
  2225. ADRENO_COOP_RESET);
  2226. adreno_create_profile_buffer(adreno_dev);
  2227. set_bit(GMU_PRIV_FIRST_BOOT_DONE, &gmu->flags);
  2228. set_bit(GMU_PRIV_GPU_STARTED, &gmu->flags);
  2229. /*
  2230. * BCL needs respective Central Broadcast register to
  2231. * be programed from TZ. For kernel version prior to 6.1, this
  2232. * programing happens only when zap shader firmware load is successful.
  2233. * Zap firmware load can fail in boot up path hence enable BCL only
  2234. * after we successfully complete first boot to ensure that Central
  2235. * Broadcast register was programed before enabling BCL.
  2236. */
  2237. if (ADRENO_FEATURE(adreno_dev, ADRENO_BCL))
  2238. adreno_dev->bcl_enabled = true;
  2239. /*
  2240. * There is a possible deadlock scenario during kgsl firmware reading
  2241. * (request_firmware) and devfreq update calls. During first boot, kgsl
  2242. * device mutex is held and then request_firmware is called for reading
  2243. * firmware. request_firmware internally takes dev_pm_qos_mtx lock.
  2244. * Whereas in case of devfreq update calls triggered by thermal/bcl or
  2245. * devfreq sysfs, it first takes the same dev_pm_qos_mtx lock and then
  2246. * tries to take kgsl device mutex as part of get_dev_status/target
  2247. * calls. This results in deadlock when both thread are unable to acquire
  2248. * the mutex held by other thread. Enable devfreq updates now as we are
  2249. * done reading all firmware files.
  2250. */
  2251. device->pwrscale.devfreq_enabled = true;
  2252. device->pwrctrl.last_stat_updated = ktime_get();
  2253. kgsl_pwrctrl_set_state(device, KGSL_STATE_ACTIVE);
  2254. return 0;
  2255. }
  2256. static bool gen8_irq_pending(struct adreno_device *adreno_dev)
  2257. {
  2258. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  2259. u32 status;
  2260. kgsl_regread(device, GEN8_RBBM_INT_0_STATUS, &status);
  2261. /* Return busy if a interrupt is pending */
  2262. return ((status & adreno_dev->irq_mask) ||
  2263. atomic_read(&adreno_dev->pending_irq_refcnt));
  2264. }
  2265. static int gen8_power_off(struct adreno_device *adreno_dev)
  2266. {
  2267. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  2268. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  2269. int ret;
  2270. WARN_ON(!test_bit(GMU_PRIV_GPU_STARTED, &gmu->flags));
  2271. adreno_suspend_context(device);
  2272. /*
  2273. * adreno_suspend_context() unlocks the device mutex, which
  2274. * could allow a concurrent thread to attempt SLUMBER sequence.
  2275. * Hence, check the flags again before proceeding with SLUMBER.
  2276. */
  2277. if (!test_bit(GMU_PRIV_GPU_STARTED, &gmu->flags))
  2278. return 0;
  2279. kgsl_pwrctrl_request_state(device, KGSL_STATE_SLUMBER);
  2280. ret = gen8_gmu_oob_set(device, oob_gpu);
  2281. if (ret)
  2282. goto no_gx_power;
  2283. if (gen8_irq_pending(adreno_dev)) {
  2284. gen8_gmu_oob_clear(device, oob_gpu);
  2285. return -EBUSY;
  2286. }
  2287. kgsl_pwrscale_update_stats(device);
  2288. /* Save active coresight registers if applicable */
  2289. adreno_coresight_stop(adreno_dev);
  2290. adreno_irqctrl(adreno_dev, 0);
  2291. no_gx_power:
  2292. gen8_gmu_oob_clear(device, oob_gpu);
  2293. kgsl_pwrctrl_irq(device, false);
  2294. gen8_gmu_power_off(adreno_dev);
  2295. adreno_set_active_ctxs_null(adreno_dev);
  2296. adreno_dispatcher_stop(adreno_dev);
  2297. adreno_ringbuffer_stop(adreno_dev);
  2298. if (!IS_ERR_OR_NULL(adreno_dev->gpu_llc_slice))
  2299. llcc_slice_deactivate(adreno_dev->gpu_llc_slice);
  2300. if (!IS_ERR_OR_NULL(adreno_dev->gpuhtw_llc_slice))
  2301. llcc_slice_deactivate(adreno_dev->gpuhtw_llc_slice);
  2302. clear_bit(GMU_PRIV_GPU_STARTED, &gmu->flags);
  2303. del_timer_sync(&device->idle_timer);
  2304. kgsl_pwrscale_sleep(device);
  2305. kgsl_pwrctrl_clear_l3_vote(device);
  2306. /*
  2307. * Reset the context records so that CP can start
  2308. * at the correct read pointer for BV thread after
  2309. * coming out of slumber.
  2310. */
  2311. gen8_reset_preempt_records(adreno_dev);
  2312. kgsl_pwrctrl_set_state(device, KGSL_STATE_SLUMBER);
  2313. return ret;
  2314. }
  2315. static void gmu_idle_check(struct work_struct *work)
  2316. {
  2317. struct kgsl_device *device = container_of(work,
  2318. struct kgsl_device, idle_check_ws);
  2319. struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
  2320. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  2321. int ret;
  2322. mutex_lock(&device->mutex);
  2323. if (test_bit(GMU_DISABLE_SLUMBER, &device->gmu_core.flags))
  2324. goto done;
  2325. if (atomic_read(&device->active_cnt) || time_is_after_jiffies(device->idle_jiffies)) {
  2326. kgsl_pwrscale_update(device);
  2327. kgsl_start_idle_timer(device);
  2328. goto done;
  2329. }
  2330. if (!test_bit(GMU_PRIV_GPU_STARTED, &gmu->flags))
  2331. goto done;
  2332. spin_lock(&device->submit_lock);
  2333. if (device->submit_now) {
  2334. spin_unlock(&device->submit_lock);
  2335. kgsl_pwrscale_update(device);
  2336. kgsl_start_idle_timer(device);
  2337. goto done;
  2338. }
  2339. device->skip_inline_submit = true;
  2340. spin_unlock(&device->submit_lock);
  2341. ret = gen8_power_off(adreno_dev);
  2342. if (ret == -EBUSY) {
  2343. kgsl_pwrscale_update(device);
  2344. kgsl_start_idle_timer(device);
  2345. }
  2346. done:
  2347. mutex_unlock(&device->mutex);
  2348. }
  2349. static int gen8_gmu_first_open(struct adreno_device *adreno_dev)
  2350. {
  2351. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  2352. int ret;
  2353. /*
  2354. * Do the one time settings that need to happen when we
  2355. * attempt to boot the gpu the very first time
  2356. */
  2357. ret = gen8_first_boot(adreno_dev);
  2358. if (ret)
  2359. return ret;
  2360. /*
  2361. * A client that does a first_open but never closes the device
  2362. * may prevent us from going back to SLUMBER. So trigger the idle
  2363. * check by incrementing the active count and immediately releasing it.
  2364. */
  2365. atomic_inc(&device->active_cnt);
  2366. gen8_gmu_active_count_put(adreno_dev);
  2367. return 0;
  2368. }
  2369. static int gen8_gmu_last_close(struct adreno_device *adreno_dev)
  2370. {
  2371. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  2372. if (test_bit(GMU_PRIV_GPU_STARTED, &gmu->flags))
  2373. return gen8_power_off(adreno_dev);
  2374. return 0;
  2375. }
  2376. static int gen8_gmu_active_count_get(struct adreno_device *adreno_dev)
  2377. {
  2378. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  2379. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  2380. int ret = 0;
  2381. if (WARN_ON(!mutex_is_locked(&device->mutex)))
  2382. return -EINVAL;
  2383. if (test_bit(GMU_PRIV_PM_SUSPEND, &gmu->flags))
  2384. return -EINVAL;
  2385. if ((atomic_read(&device->active_cnt) == 0) &&
  2386. !test_bit(GMU_PRIV_GPU_STARTED, &gmu->flags))
  2387. ret = gen8_boot(adreno_dev);
  2388. if (ret == 0)
  2389. atomic_inc(&device->active_cnt);
  2390. trace_kgsl_active_count(device,
  2391. (unsigned long) __builtin_return_address(0));
  2392. return ret;
  2393. }
  2394. static int gen8_gmu_pm_suspend(struct adreno_device *adreno_dev)
  2395. {
  2396. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  2397. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  2398. int ret;
  2399. if (test_bit(GMU_PRIV_PM_SUSPEND, &gmu->flags))
  2400. return 0;
  2401. kgsl_pwrctrl_request_state(device, KGSL_STATE_SUSPEND);
  2402. /* Halt any new submissions */
  2403. reinit_completion(&device->halt_gate);
  2404. /* wait for active count so device can be put in slumber */
  2405. ret = kgsl_active_count_wait(device, 0, HZ);
  2406. if (ret) {
  2407. dev_err(device->dev,
  2408. "Timed out waiting for the active count\n");
  2409. goto err;
  2410. }
  2411. ret = adreno_idle(device);
  2412. if (ret)
  2413. goto err;
  2414. if (test_bit(GMU_PRIV_GPU_STARTED, &gmu->flags))
  2415. gen8_power_off(adreno_dev);
  2416. set_bit(GMU_PRIV_PM_SUSPEND, &gmu->flags);
  2417. adreno_get_gpu_halt(adreno_dev);
  2418. kgsl_pwrctrl_set_state(device, KGSL_STATE_SUSPEND);
  2419. return 0;
  2420. err:
  2421. adreno_dispatcher_start(device);
  2422. return ret;
  2423. }
  2424. static void gen8_gmu_pm_resume(struct adreno_device *adreno_dev)
  2425. {
  2426. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  2427. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  2428. if (WARN(!test_bit(GMU_PRIV_PM_SUSPEND, &gmu->flags),
  2429. "resume invoked without a suspend\n"))
  2430. return;
  2431. adreno_put_gpu_halt(adreno_dev);
  2432. adreno_dispatcher_start(device);
  2433. clear_bit(GMU_PRIV_PM_SUSPEND, &gmu->flags);
  2434. }
  2435. static void gen8_gmu_touch_wakeup(struct adreno_device *adreno_dev)
  2436. {
  2437. struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
  2438. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  2439. int ret;
  2440. /*
  2441. * Do not wake up a suspended device or until the first boot sequence
  2442. * has been completed.
  2443. */
  2444. if (test_bit(GMU_PRIV_PM_SUSPEND, &gmu->flags) ||
  2445. !test_bit(GMU_PRIV_FIRST_BOOT_DONE, &gmu->flags))
  2446. return;
  2447. if (test_bit(GMU_PRIV_GPU_STARTED, &gmu->flags))
  2448. goto done;
  2449. kgsl_pwrctrl_request_state(device, KGSL_STATE_ACTIVE);
  2450. ret = gen8_gmu_boot(adreno_dev);
  2451. if (ret)
  2452. return;
  2453. ret = gen8_gpu_boot(adreno_dev);
  2454. if (ret)
  2455. return;
  2456. kgsl_pwrscale_wake(device);
  2457. set_bit(GMU_PRIV_GPU_STARTED, &gmu->flags);
  2458. device->pwrctrl.last_stat_updated = ktime_get();
  2459. kgsl_pwrctrl_set_state(device, KGSL_STATE_ACTIVE);
  2460. done:
  2461. /*
  2462. * When waking up from a touch event we want to stay active long enough
  2463. * for the user to send a draw command. The default idle timer timeout
  2464. * is shorter than we want so go ahead and push the idle timer out
  2465. * further for this special case
  2466. */
  2467. mod_timer(&device->idle_timer, jiffies +
  2468. msecs_to_jiffies(adreno_wake_timeout));
  2469. }
  2470. const struct adreno_power_ops gen8_gmu_power_ops = {
  2471. .first_open = gen8_gmu_first_open,
  2472. .last_close = gen8_gmu_last_close,
  2473. .active_count_get = gen8_gmu_active_count_get,
  2474. .active_count_put = gen8_gmu_active_count_put,
  2475. .pm_suspend = gen8_gmu_pm_suspend,
  2476. .pm_resume = gen8_gmu_pm_resume,
  2477. .touch_wakeup = gen8_gmu_touch_wakeup,
  2478. .gpu_clock_set = gen8_gmu_clock_set,
  2479. .gpu_bus_set = gen8_gmu_bus_set,
  2480. };
  2481. int gen8_gmu_device_probe(struct platform_device *pdev,
  2482. u32 chipid, const struct adreno_gpu_core *gpucore)
  2483. {
  2484. struct adreno_device *adreno_dev;
  2485. struct kgsl_device *device;
  2486. struct gen8_device *gen8_dev;
  2487. int ret;
  2488. gen8_dev = devm_kzalloc(&pdev->dev, sizeof(*gen8_dev),
  2489. GFP_KERNEL);
  2490. if (!gen8_dev)
  2491. return -ENOMEM;
  2492. adreno_dev = &gen8_dev->adreno_dev;
  2493. adreno_dev->irq_mask = GEN8_INT_MASK;
  2494. ret = gen8_probe_common(pdev, adreno_dev, chipid, gpucore);
  2495. if (ret)
  2496. return ret;
  2497. ret = adreno_dispatcher_init(adreno_dev);
  2498. if (ret)
  2499. return ret;
  2500. device = KGSL_DEVICE(adreno_dev);
  2501. INIT_WORK(&device->idle_check_ws, gmu_idle_check);
  2502. timer_setup(&device->idle_timer, gmu_idle_timer, 0);
  2503. return 0;
  2504. }
  2505. int gen8_gmu_reset(struct adreno_device *adreno_dev)
  2506. {
  2507. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  2508. gen8_disable_gpu_irq(adreno_dev);
  2509. gen8_gmu_irq_disable(adreno_dev);
  2510. gen8_hfi_stop(adreno_dev);
  2511. /* Hard reset the gmu and gpu */
  2512. gen8_gmu_suspend(adreno_dev);
  2513. gen8_reset_preempt_records(adreno_dev);
  2514. clear_bit(GMU_PRIV_GPU_STARTED, &gmu->flags);
  2515. /* Attempt to reboot the gmu and gpu */
  2516. return gen8_boot(adreno_dev);
  2517. }
  2518. int gen8_gmu_hfi_probe(struct adreno_device *adreno_dev)
  2519. {
  2520. struct gen8_gmu_device *gmu = to_gen8_gmu(adreno_dev);
  2521. struct gen8_hfi *hfi = &gmu->hfi;
  2522. hfi->irq = kgsl_request_irq(gmu->pdev, "hfi",
  2523. gen8_hfi_irq_handler, KGSL_DEVICE(adreno_dev));
  2524. return hfi->irq < 0 ? hfi->irq : 0;
  2525. }
  2526. int gen8_gmu_add_to_minidump(struct adreno_device *adreno_dev)
  2527. {
  2528. struct gen8_device *gen8_dev = container_of(adreno_dev,
  2529. struct gen8_device, adreno_dev);
  2530. int ret;
  2531. ret = kgsl_add_va_to_minidump(adreno_dev->dev.dev, KGSL_GEN8_DEVICE,
  2532. (void *)(gen8_dev), sizeof(struct gen8_device));
  2533. if (ret)
  2534. return ret;
  2535. ret = kgsl_add_va_to_minidump(adreno_dev->dev.dev, KGSL_GMU_LOG_ENTRY,
  2536. gen8_dev->gmu.gmu_log->hostptr, gen8_dev->gmu.gmu_log->size);
  2537. if (ret)
  2538. return ret;
  2539. ret = kgsl_add_va_to_minidump(adreno_dev->dev.dev, KGSL_HFIMEM_ENTRY,
  2540. gen8_dev->gmu.hfi.hfi_mem->hostptr, gen8_dev->gmu.hfi.hfi_mem->size);
  2541. return ret;
  2542. }
  2543. static int gen8_gmu_bind(struct device *dev, struct device *master, void *data)
  2544. {
  2545. struct kgsl_device *device = dev_get_drvdata(master);
  2546. struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
  2547. const struct adreno_gpudev *gpudev = ADRENO_GPU_DEVICE(adreno_dev);
  2548. const struct gen8_gpudev *gen8_gpudev = to_gen8_gpudev(gpudev);
  2549. int ret;
  2550. ret = gen8_gmu_probe(device, to_platform_device(dev));
  2551. if (ret)
  2552. return ret;
  2553. if (gen8_gpudev->hfi_probe) {
  2554. ret = gen8_gpudev->hfi_probe(adreno_dev);
  2555. if (ret) {
  2556. gen8_gmu_remove(device);
  2557. return ret;
  2558. }
  2559. }
  2560. return 0;
  2561. }
  2562. static void gen8_gmu_unbind(struct device *dev, struct device *master,
  2563. void *data)
  2564. {
  2565. struct kgsl_device *device = dev_get_drvdata(master);
  2566. struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
  2567. const struct adreno_gpudev *gpudev = ADRENO_GPU_DEVICE(adreno_dev);
  2568. const struct gen8_gpudev *gen8_gpudev = to_gen8_gpudev(gpudev);
  2569. if (gen8_gpudev->hfi_remove)
  2570. gen8_gpudev->hfi_remove(adreno_dev);
  2571. gen8_gmu_remove(device);
  2572. }
  2573. static const struct component_ops gen8_gmu_component_ops = {
  2574. .bind = gen8_gmu_bind,
  2575. .unbind = gen8_gmu_unbind,
  2576. };
  2577. static int gen8_gmu_probe_dev(struct platform_device *pdev)
  2578. {
  2579. return component_add(&pdev->dev, &gen8_gmu_component_ops);
  2580. }
  2581. static int gen8_gmu_remove_dev(struct platform_device *pdev)
  2582. {
  2583. component_del(&pdev->dev, &gen8_gmu_component_ops);
  2584. return 0;
  2585. }
  2586. static const struct of_device_id gen8_gmu_match_table[] = {
  2587. { .compatible = "qcom,gen8-gmu" },
  2588. { },
  2589. };
  2590. struct platform_driver gen8_gmu_driver = {
  2591. .probe = gen8_gmu_probe_dev,
  2592. .remove = gen8_gmu_remove_dev,
  2593. .driver = {
  2594. .name = "adreno-gen8-gmu",
  2595. .of_match_table = gen8_gmu_match_table,
  2596. },
  2597. };