mmcc-msm8996.c 89 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*x
  3. * Copyright (c) 2015, The Linux Foundation. All rights reserved.
  4. */
  5. #include <linux/kernel.h>
  6. #include <linux/bitops.h>
  7. #include <linux/err.h>
  8. #include <linux/platform_device.h>
  9. #include <linux/module.h>
  10. #include <linux/of.h>
  11. #include <linux/clk-provider.h>
  12. #include <linux/regmap.h>
  13. #include <linux/reset-controller.h>
  14. #include <linux/clk.h>
  15. #include <dt-bindings/clock/qcom,mmcc-msm8996.h>
  16. #include "common.h"
  17. #include "clk-regmap.h"
  18. #include "clk-regmap-divider.h"
  19. #include "clk-alpha-pll.h"
  20. #include "clk-rcg.h"
  21. #include "clk-branch.h"
  22. #include "reset.h"
  23. #include "gdsc.h"
  24. enum {
  25. P_XO,
  26. P_MMPLL0,
  27. P_GPLL0,
  28. P_GPLL0_DIV,
  29. P_MMPLL1,
  30. P_MMPLL9,
  31. P_MMPLL2,
  32. P_MMPLL8,
  33. P_MMPLL3,
  34. P_DSI0PLL,
  35. P_DSI1PLL,
  36. P_MMPLL5,
  37. P_HDMIPLL,
  38. P_DSI0PLL_BYTE,
  39. P_DSI1PLL_BYTE,
  40. P_MMPLL4,
  41. };
  42. static struct clk_fixed_factor gpll0_div = {
  43. .mult = 1,
  44. .div = 2,
  45. .hw.init = &(struct clk_init_data){
  46. .name = "gpll0_div",
  47. .parent_data = (const struct clk_parent_data[]){
  48. { .fw_name = "gpll0", .name = "gpll0" },
  49. },
  50. .num_parents = 1,
  51. .ops = &clk_fixed_factor_ops,
  52. },
  53. };
  54. static const struct pll_vco mmpll_p_vco[] = {
  55. { 250000000, 500000000, 3 },
  56. { 500000000, 1000000000, 2 },
  57. { 1000000000, 1500000000, 1 },
  58. { 1500000000, 2000000000, 0 },
  59. };
  60. static const struct pll_vco mmpll_gfx_vco[] = {
  61. { 400000000, 1000000000, 2 },
  62. { 1000000000, 1500000000, 1 },
  63. { 1500000000, 2000000000, 0 },
  64. };
  65. static const struct pll_vco mmpll_t_vco[] = {
  66. { 500000000, 1500000000, 0 },
  67. };
  68. static struct clk_alpha_pll mmpll0_early = {
  69. .offset = 0x0,
  70. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  71. .vco_table = mmpll_p_vco,
  72. .num_vco = ARRAY_SIZE(mmpll_p_vco),
  73. .clkr = {
  74. .enable_reg = 0x100,
  75. .enable_mask = BIT(0),
  76. .hw.init = &(struct clk_init_data){
  77. .name = "mmpll0_early",
  78. .parent_data = (const struct clk_parent_data[]){
  79. { .fw_name = "xo", .name = "xo_board" },
  80. },
  81. .num_parents = 1,
  82. .ops = &clk_alpha_pll_ops,
  83. },
  84. },
  85. };
  86. static struct clk_alpha_pll_postdiv mmpll0 = {
  87. .offset = 0x0,
  88. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  89. .width = 4,
  90. .clkr.hw.init = &(struct clk_init_data){
  91. .name = "mmpll0",
  92. .parent_hws = (const struct clk_hw*[]){
  93. &mmpll0_early.clkr.hw
  94. },
  95. .num_parents = 1,
  96. .ops = &clk_alpha_pll_postdiv_ops,
  97. .flags = CLK_SET_RATE_PARENT,
  98. },
  99. };
  100. static struct clk_alpha_pll mmpll1_early = {
  101. .offset = 0x30,
  102. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  103. .vco_table = mmpll_p_vco,
  104. .num_vco = ARRAY_SIZE(mmpll_p_vco),
  105. .clkr = {
  106. .enable_reg = 0x100,
  107. .enable_mask = BIT(1),
  108. .hw.init = &(struct clk_init_data){
  109. .name = "mmpll1_early",
  110. .parent_data = (const struct clk_parent_data[]){
  111. { .fw_name = "xo", .name = "xo_board" },
  112. },
  113. .num_parents = 1,
  114. .ops = &clk_alpha_pll_ops,
  115. }
  116. },
  117. };
  118. static struct clk_alpha_pll_postdiv mmpll1 = {
  119. .offset = 0x30,
  120. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  121. .width = 4,
  122. .clkr.hw.init = &(struct clk_init_data){
  123. .name = "mmpll1",
  124. .parent_hws = (const struct clk_hw*[]){
  125. &mmpll1_early.clkr.hw
  126. },
  127. .num_parents = 1,
  128. .ops = &clk_alpha_pll_postdiv_ops,
  129. .flags = CLK_SET_RATE_PARENT,
  130. },
  131. };
  132. static struct clk_alpha_pll mmpll2_early = {
  133. .offset = 0x4100,
  134. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  135. .vco_table = mmpll_gfx_vco,
  136. .num_vco = ARRAY_SIZE(mmpll_gfx_vco),
  137. .clkr.hw.init = &(struct clk_init_data){
  138. .name = "mmpll2_early",
  139. .parent_data = (const struct clk_parent_data[]){
  140. { .fw_name = "xo", .name = "xo_board" },
  141. },
  142. .num_parents = 1,
  143. .ops = &clk_alpha_pll_ops,
  144. },
  145. };
  146. static struct clk_alpha_pll_postdiv mmpll2 = {
  147. .offset = 0x4100,
  148. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  149. .width = 4,
  150. .clkr.hw.init = &(struct clk_init_data){
  151. .name = "mmpll2",
  152. .parent_hws = (const struct clk_hw*[]){
  153. &mmpll2_early.clkr.hw
  154. },
  155. .num_parents = 1,
  156. .ops = &clk_alpha_pll_postdiv_ops,
  157. .flags = CLK_SET_RATE_PARENT,
  158. },
  159. };
  160. static struct clk_alpha_pll mmpll3_early = {
  161. .offset = 0x60,
  162. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  163. .vco_table = mmpll_p_vco,
  164. .num_vco = ARRAY_SIZE(mmpll_p_vco),
  165. .clkr.hw.init = &(struct clk_init_data){
  166. .name = "mmpll3_early",
  167. .parent_data = (const struct clk_parent_data[]){
  168. { .fw_name = "xo", .name = "xo_board" },
  169. },
  170. .num_parents = 1,
  171. .ops = &clk_alpha_pll_ops,
  172. },
  173. };
  174. static struct clk_alpha_pll_postdiv mmpll3 = {
  175. .offset = 0x60,
  176. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  177. .width = 4,
  178. .clkr.hw.init = &(struct clk_init_data){
  179. .name = "mmpll3",
  180. .parent_hws = (const struct clk_hw*[]){
  181. &mmpll3_early.clkr.hw
  182. },
  183. .num_parents = 1,
  184. .ops = &clk_alpha_pll_postdiv_ops,
  185. .flags = CLK_SET_RATE_PARENT,
  186. },
  187. };
  188. static struct clk_alpha_pll mmpll4_early = {
  189. .offset = 0x90,
  190. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  191. .vco_table = mmpll_t_vco,
  192. .num_vco = ARRAY_SIZE(mmpll_t_vco),
  193. .clkr.hw.init = &(struct clk_init_data){
  194. .name = "mmpll4_early",
  195. .parent_data = (const struct clk_parent_data[]){
  196. { .fw_name = "xo", .name = "xo_board" },
  197. },
  198. .num_parents = 1,
  199. .ops = &clk_alpha_pll_ops,
  200. },
  201. };
  202. static struct clk_alpha_pll_postdiv mmpll4 = {
  203. .offset = 0x90,
  204. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  205. .width = 2,
  206. .clkr.hw.init = &(struct clk_init_data){
  207. .name = "mmpll4",
  208. .parent_hws = (const struct clk_hw*[]){
  209. &mmpll4_early.clkr.hw
  210. },
  211. .num_parents = 1,
  212. .ops = &clk_alpha_pll_postdiv_ops,
  213. .flags = CLK_SET_RATE_PARENT,
  214. },
  215. };
  216. static struct clk_alpha_pll mmpll5_early = {
  217. .offset = 0xc0,
  218. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  219. .vco_table = mmpll_p_vco,
  220. .num_vco = ARRAY_SIZE(mmpll_p_vco),
  221. .clkr.hw.init = &(struct clk_init_data){
  222. .name = "mmpll5_early",
  223. .parent_data = (const struct clk_parent_data[]){
  224. { .fw_name = "xo", .name = "xo_board" },
  225. },
  226. .num_parents = 1,
  227. .ops = &clk_alpha_pll_ops,
  228. },
  229. };
  230. static struct clk_alpha_pll_postdiv mmpll5 = {
  231. .offset = 0xc0,
  232. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  233. .width = 4,
  234. .clkr.hw.init = &(struct clk_init_data){
  235. .name = "mmpll5",
  236. .parent_hws = (const struct clk_hw*[]){
  237. &mmpll5_early.clkr.hw
  238. },
  239. .num_parents = 1,
  240. .ops = &clk_alpha_pll_postdiv_ops,
  241. .flags = CLK_SET_RATE_PARENT,
  242. },
  243. };
  244. static struct clk_alpha_pll mmpll8_early = {
  245. .offset = 0x4130,
  246. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  247. .vco_table = mmpll_gfx_vco,
  248. .num_vco = ARRAY_SIZE(mmpll_gfx_vco),
  249. .clkr.hw.init = &(struct clk_init_data){
  250. .name = "mmpll8_early",
  251. .parent_data = (const struct clk_parent_data[]){
  252. { .fw_name = "xo", .name = "xo_board" },
  253. },
  254. .num_parents = 1,
  255. .ops = &clk_alpha_pll_ops,
  256. },
  257. };
  258. static struct clk_alpha_pll_postdiv mmpll8 = {
  259. .offset = 0x4130,
  260. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  261. .width = 4,
  262. .clkr.hw.init = &(struct clk_init_data){
  263. .name = "mmpll8",
  264. .parent_hws = (const struct clk_hw*[]){
  265. &mmpll8_early.clkr.hw
  266. },
  267. .num_parents = 1,
  268. .ops = &clk_alpha_pll_postdiv_ops,
  269. .flags = CLK_SET_RATE_PARENT,
  270. },
  271. };
  272. static struct clk_alpha_pll mmpll9_early = {
  273. .offset = 0x4200,
  274. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  275. .vco_table = mmpll_t_vco,
  276. .num_vco = ARRAY_SIZE(mmpll_t_vco),
  277. .clkr.hw.init = &(struct clk_init_data){
  278. .name = "mmpll9_early",
  279. .parent_data = (const struct clk_parent_data[]){
  280. { .fw_name = "xo", .name = "xo_board" },
  281. },
  282. .num_parents = 1,
  283. .ops = &clk_alpha_pll_ops,
  284. },
  285. };
  286. static struct clk_alpha_pll_postdiv mmpll9 = {
  287. .offset = 0x4200,
  288. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  289. .width = 2,
  290. .clkr.hw.init = &(struct clk_init_data){
  291. .name = "mmpll9",
  292. .parent_hws = (const struct clk_hw*[]){
  293. &mmpll9_early.clkr.hw
  294. },
  295. .num_parents = 1,
  296. .ops = &clk_alpha_pll_postdiv_ops,
  297. .flags = CLK_SET_RATE_PARENT,
  298. },
  299. };
  300. static const struct parent_map mmss_xo_hdmi_map[] = {
  301. { P_XO, 0 },
  302. { P_HDMIPLL, 1 }
  303. };
  304. static const struct clk_parent_data mmss_xo_hdmi[] = {
  305. { .fw_name = "xo", .name = "xo_board" },
  306. { .fw_name = "hdmipll", .name = "hdmipll" }
  307. };
  308. static const struct parent_map mmss_xo_dsi0pll_dsi1pll_map[] = {
  309. { P_XO, 0 },
  310. { P_DSI0PLL, 1 },
  311. { P_DSI1PLL, 2 }
  312. };
  313. static const struct clk_parent_data mmss_xo_dsi0pll_dsi1pll[] = {
  314. { .fw_name = "xo", .name = "xo_board" },
  315. { .fw_name = "dsi0pll", .name = "dsi0pll" },
  316. { .fw_name = "dsi1pll", .name = "dsi1pll" }
  317. };
  318. static const struct parent_map mmss_xo_gpll0_gpll0_div_map[] = {
  319. { P_XO, 0 },
  320. { P_GPLL0, 5 },
  321. { P_GPLL0_DIV, 6 }
  322. };
  323. static const struct clk_parent_data mmss_xo_gpll0_gpll0_div[] = {
  324. { .fw_name = "xo", .name = "xo_board" },
  325. { .fw_name = "gpll0", .name = "gpll0" },
  326. { .hw = &gpll0_div.hw }
  327. };
  328. static const struct parent_map mmss_xo_dsibyte_map[] = {
  329. { P_XO, 0 },
  330. { P_DSI0PLL_BYTE, 1 },
  331. { P_DSI1PLL_BYTE, 2 }
  332. };
  333. static const struct clk_parent_data mmss_xo_dsibyte[] = {
  334. { .fw_name = "xo", .name = "xo_board" },
  335. { .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" },
  336. { .fw_name = "dsi1pllbyte", .name = "dsi1pllbyte" }
  337. };
  338. static const struct parent_map mmss_xo_mmpll0_gpll0_gpll0_div_map[] = {
  339. { P_XO, 0 },
  340. { P_MMPLL0, 1 },
  341. { P_GPLL0, 5 },
  342. { P_GPLL0_DIV, 6 }
  343. };
  344. static const struct clk_parent_data mmss_xo_mmpll0_gpll0_gpll0_div[] = {
  345. { .fw_name = "xo", .name = "xo_board" },
  346. { .hw = &mmpll0.clkr.hw },
  347. { .fw_name = "gpll0", .name = "gpll0" },
  348. { .hw = &gpll0_div.hw }
  349. };
  350. static const struct parent_map mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map[] = {
  351. { P_XO, 0 },
  352. { P_MMPLL0, 1 },
  353. { P_MMPLL1, 2 },
  354. { P_GPLL0, 5 },
  355. { P_GPLL0_DIV, 6 }
  356. };
  357. static const struct clk_parent_data mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div[] = {
  358. { .fw_name = "xo", .name = "xo_board" },
  359. { .hw = &mmpll0.clkr.hw },
  360. { .hw = &mmpll1.clkr.hw },
  361. { .fw_name = "gpll0", .name = "gpll0" },
  362. { .hw = &gpll0_div.hw }
  363. };
  364. static const struct parent_map mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map[] = {
  365. { P_XO, 0 },
  366. { P_MMPLL0, 1 },
  367. { P_MMPLL3, 3 },
  368. { P_GPLL0, 5 },
  369. { P_GPLL0_DIV, 6 }
  370. };
  371. static const struct clk_parent_data mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div[] = {
  372. { .fw_name = "xo", .name = "xo_board" },
  373. { .hw = &mmpll0.clkr.hw },
  374. { .hw = &mmpll3.clkr.hw },
  375. { .fw_name = "gpll0", .name = "gpll0" },
  376. { .hw = &gpll0_div.hw }
  377. };
  378. static const struct parent_map mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map[] = {
  379. { P_XO, 0 },
  380. { P_MMPLL0, 1 },
  381. { P_MMPLL5, 2 },
  382. { P_GPLL0, 5 },
  383. { P_GPLL0_DIV, 6 }
  384. };
  385. static const struct clk_parent_data mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div[] = {
  386. { .fw_name = "xo", .name = "xo_board" },
  387. { .hw = &mmpll0.clkr.hw },
  388. { .hw = &mmpll5.clkr.hw },
  389. { .fw_name = "gpll0", .name = "gpll0" },
  390. { .hw = &gpll0_div.hw }
  391. };
  392. static const struct parent_map mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map[] = {
  393. { P_XO, 0 },
  394. { P_MMPLL0, 1 },
  395. { P_MMPLL4, 3 },
  396. { P_GPLL0, 5 },
  397. { P_GPLL0_DIV, 6 }
  398. };
  399. static const struct clk_parent_data mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div[] = {
  400. { .fw_name = "xo", .name = "xo_board" },
  401. { .hw = &mmpll0.clkr.hw },
  402. { .hw = &mmpll4.clkr.hw },
  403. { .fw_name = "gpll0", .name = "gpll0" },
  404. { .hw = &gpll0_div.hw }
  405. };
  406. static const struct parent_map mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_map[] = {
  407. { P_XO, 0 },
  408. { P_MMPLL0, 1 },
  409. { P_MMPLL9, 2 },
  410. { P_MMPLL2, 3 },
  411. { P_MMPLL8, 4 },
  412. { P_GPLL0, 5 }
  413. };
  414. static const struct clk_parent_data mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0[] = {
  415. { .fw_name = "xo", .name = "xo_board" },
  416. { .hw = &mmpll0.clkr.hw },
  417. { .hw = &mmpll9.clkr.hw },
  418. { .hw = &mmpll2.clkr.hw },
  419. { .hw = &mmpll8.clkr.hw },
  420. { .fw_name = "gpll0", .name = "gpll0" },
  421. };
  422. static const struct parent_map mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div_map[] = {
  423. { P_XO, 0 },
  424. { P_MMPLL0, 1 },
  425. { P_MMPLL9, 2 },
  426. { P_MMPLL2, 3 },
  427. { P_MMPLL8, 4 },
  428. { P_GPLL0, 5 },
  429. { P_GPLL0_DIV, 6 }
  430. };
  431. static const struct clk_parent_data mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div[] = {
  432. { .fw_name = "xo", .name = "xo_board" },
  433. { .hw = &mmpll0.clkr.hw },
  434. { .hw = &mmpll9.clkr.hw },
  435. { .hw = &mmpll2.clkr.hw },
  436. { .hw = &mmpll8.clkr.hw },
  437. { .fw_name = "gpll0", .name = "gpll0" },
  438. { .hw = &gpll0_div.hw }
  439. };
  440. static const struct parent_map mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map[] = {
  441. { P_XO, 0 },
  442. { P_MMPLL0, 1 },
  443. { P_MMPLL1, 2 },
  444. { P_MMPLL4, 3 },
  445. { P_MMPLL3, 4 },
  446. { P_GPLL0, 5 },
  447. { P_GPLL0_DIV, 6 }
  448. };
  449. static const struct clk_parent_data mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div[] = {
  450. { .fw_name = "xo", .name = "xo_board" },
  451. { .hw = &mmpll0.clkr.hw },
  452. { .hw = &mmpll1.clkr.hw },
  453. { .hw = &mmpll4.clkr.hw },
  454. { .hw = &mmpll3.clkr.hw },
  455. { .fw_name = "gpll0", .name = "gpll0" },
  456. { .hw = &gpll0_div.hw }
  457. };
  458. static const struct freq_tbl ftbl_ahb_clk_src[] = {
  459. F(19200000, P_XO, 1, 0, 0),
  460. F(40000000, P_GPLL0_DIV, 7.5, 0, 0),
  461. F(80000000, P_MMPLL0, 10, 0, 0),
  462. { }
  463. };
  464. static struct clk_rcg2 ahb_clk_src = {
  465. .cmd_rcgr = 0x5000,
  466. .hid_width = 5,
  467. .parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map,
  468. .freq_tbl = ftbl_ahb_clk_src,
  469. .clkr.hw.init = &(struct clk_init_data){
  470. .name = "ahb_clk_src",
  471. .parent_data = mmss_xo_mmpll0_gpll0_gpll0_div,
  472. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_gpll0_gpll0_div),
  473. .ops = &clk_rcg2_ops,
  474. },
  475. };
  476. static const struct freq_tbl ftbl_axi_clk_src[] = {
  477. F(19200000, P_XO, 1, 0, 0),
  478. F(75000000, P_GPLL0_DIV, 4, 0, 0),
  479. F(100000000, P_GPLL0, 6, 0, 0),
  480. F(171430000, P_GPLL0, 3.5, 0, 0),
  481. F(200000000, P_GPLL0, 3, 0, 0),
  482. F(320000000, P_MMPLL0, 2.5, 0, 0),
  483. F(400000000, P_MMPLL0, 2, 0, 0),
  484. { }
  485. };
  486. static struct clk_rcg2 axi_clk_src = {
  487. .cmd_rcgr = 0x5040,
  488. .hid_width = 5,
  489. .parent_map = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map,
  490. .freq_tbl = ftbl_axi_clk_src,
  491. .clkr.hw.init = &(struct clk_init_data){
  492. .name = "axi_clk_src",
  493. .parent_data = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div,
  494. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div),
  495. .ops = &clk_rcg2_ops,
  496. },
  497. };
  498. static struct clk_rcg2 maxi_clk_src = {
  499. .cmd_rcgr = 0x5090,
  500. .hid_width = 5,
  501. .parent_map = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map,
  502. .freq_tbl = ftbl_axi_clk_src,
  503. .clkr.hw.init = &(struct clk_init_data){
  504. .name = "maxi_clk_src",
  505. .parent_data = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div,
  506. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div),
  507. .ops = &clk_rcg2_ops,
  508. },
  509. };
  510. static struct clk_rcg2_gfx3d gfx3d_clk_src = {
  511. .rcg = {
  512. .cmd_rcgr = 0x4000,
  513. .hid_width = 5,
  514. .parent_map = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_map,
  515. .clkr.hw.init = &(struct clk_init_data){
  516. .name = "gfx3d_clk_src",
  517. .parent_data = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0,
  518. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0),
  519. .ops = &clk_gfx3d_ops,
  520. .flags = CLK_SET_RATE_PARENT,
  521. },
  522. },
  523. .hws = (struct clk_hw*[]) {
  524. &mmpll9.clkr.hw,
  525. &mmpll2.clkr.hw,
  526. &mmpll8.clkr.hw
  527. },
  528. };
  529. static const struct freq_tbl ftbl_rbbmtimer_clk_src[] = {
  530. F(19200000, P_XO, 1, 0, 0),
  531. { }
  532. };
  533. static struct clk_rcg2 rbbmtimer_clk_src = {
  534. .cmd_rcgr = 0x4090,
  535. .hid_width = 5,
  536. .parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map,
  537. .freq_tbl = ftbl_rbbmtimer_clk_src,
  538. .clkr.hw.init = &(struct clk_init_data){
  539. .name = "rbbmtimer_clk_src",
  540. .parent_data = mmss_xo_mmpll0_gpll0_gpll0_div,
  541. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_gpll0_gpll0_div),
  542. .ops = &clk_rcg2_ops,
  543. },
  544. };
  545. static struct clk_rcg2 isense_clk_src = {
  546. .cmd_rcgr = 0x4010,
  547. .hid_width = 5,
  548. .parent_map = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div_map,
  549. .clkr.hw.init = &(struct clk_init_data){
  550. .name = "isense_clk_src",
  551. .parent_data = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div,
  552. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div),
  553. .ops = &clk_rcg2_ops,
  554. },
  555. };
  556. static const struct freq_tbl ftbl_rbcpr_clk_src[] = {
  557. F(19200000, P_XO, 1, 0, 0),
  558. F(50000000, P_GPLL0, 12, 0, 0),
  559. { }
  560. };
  561. static struct clk_rcg2 rbcpr_clk_src = {
  562. .cmd_rcgr = 0x4060,
  563. .hid_width = 5,
  564. .parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map,
  565. .freq_tbl = ftbl_rbcpr_clk_src,
  566. .clkr.hw.init = &(struct clk_init_data){
  567. .name = "rbcpr_clk_src",
  568. .parent_data = mmss_xo_mmpll0_gpll0_gpll0_div,
  569. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_gpll0_gpll0_div),
  570. .ops = &clk_rcg2_ops,
  571. },
  572. };
  573. static const struct freq_tbl ftbl_video_core_clk_src[] = {
  574. F(75000000, P_GPLL0_DIV, 4, 0, 0),
  575. F(150000000, P_GPLL0, 4, 0, 0),
  576. F(346666667, P_MMPLL3, 3, 0, 0),
  577. F(520000000, P_MMPLL3, 2, 0, 0),
  578. { }
  579. };
  580. static struct clk_rcg2 video_core_clk_src = {
  581. .cmd_rcgr = 0x1000,
  582. .mnd_width = 8,
  583. .hid_width = 5,
  584. .parent_map = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map,
  585. .freq_tbl = ftbl_video_core_clk_src,
  586. .clkr.hw.init = &(struct clk_init_data){
  587. .name = "video_core_clk_src",
  588. .parent_data = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div,
  589. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div),
  590. .ops = &clk_rcg2_ops,
  591. },
  592. };
  593. static struct clk_rcg2 video_subcore0_clk_src = {
  594. .cmd_rcgr = 0x1060,
  595. .mnd_width = 8,
  596. .hid_width = 5,
  597. .parent_map = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map,
  598. .freq_tbl = ftbl_video_core_clk_src,
  599. .clkr.hw.init = &(struct clk_init_data){
  600. .name = "video_subcore0_clk_src",
  601. .parent_data = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div,
  602. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div),
  603. .ops = &clk_rcg2_ops,
  604. },
  605. };
  606. static struct clk_rcg2 video_subcore1_clk_src = {
  607. .cmd_rcgr = 0x1080,
  608. .mnd_width = 8,
  609. .hid_width = 5,
  610. .parent_map = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map,
  611. .freq_tbl = ftbl_video_core_clk_src,
  612. .clkr.hw.init = &(struct clk_init_data){
  613. .name = "video_subcore1_clk_src",
  614. .parent_data = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div,
  615. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div),
  616. .ops = &clk_rcg2_ops,
  617. },
  618. };
  619. static struct clk_rcg2 pclk0_clk_src = {
  620. .cmd_rcgr = 0x2000,
  621. .mnd_width = 8,
  622. .hid_width = 5,
  623. .parent_map = mmss_xo_dsi0pll_dsi1pll_map,
  624. .clkr.hw.init = &(struct clk_init_data){
  625. .name = "pclk0_clk_src",
  626. .parent_data = mmss_xo_dsi0pll_dsi1pll,
  627. .num_parents = ARRAY_SIZE(mmss_xo_dsi0pll_dsi1pll),
  628. .ops = &clk_pixel_ops,
  629. .flags = CLK_SET_RATE_PARENT,
  630. },
  631. };
  632. static struct clk_rcg2 pclk1_clk_src = {
  633. .cmd_rcgr = 0x2020,
  634. .mnd_width = 8,
  635. .hid_width = 5,
  636. .parent_map = mmss_xo_dsi0pll_dsi1pll_map,
  637. .clkr.hw.init = &(struct clk_init_data){
  638. .name = "pclk1_clk_src",
  639. .parent_data = mmss_xo_dsi0pll_dsi1pll,
  640. .num_parents = ARRAY_SIZE(mmss_xo_dsi0pll_dsi1pll),
  641. .ops = &clk_pixel_ops,
  642. .flags = CLK_SET_RATE_PARENT,
  643. },
  644. };
  645. static const struct freq_tbl ftbl_mdp_clk_src[] = {
  646. F(85714286, P_GPLL0, 7, 0, 0),
  647. F(100000000, P_GPLL0, 6, 0, 0),
  648. F(150000000, P_GPLL0, 4, 0, 0),
  649. F(171428571, P_GPLL0, 3.5, 0, 0),
  650. F(200000000, P_GPLL0, 3, 0, 0),
  651. F(275000000, P_MMPLL5, 3, 0, 0),
  652. F(300000000, P_GPLL0, 2, 0, 0),
  653. F(330000000, P_MMPLL5, 2.5, 0, 0),
  654. F(412500000, P_MMPLL5, 2, 0, 0),
  655. { }
  656. };
  657. static struct clk_rcg2 mdp_clk_src = {
  658. .cmd_rcgr = 0x2040,
  659. .hid_width = 5,
  660. .parent_map = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map,
  661. .freq_tbl = ftbl_mdp_clk_src,
  662. .clkr.hw.init = &(struct clk_init_data){
  663. .name = "mdp_clk_src",
  664. .parent_data = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div,
  665. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div),
  666. .ops = &clk_rcg2_ops,
  667. },
  668. };
  669. static const struct freq_tbl extpclk_freq_tbl[] = {
  670. { .src = P_HDMIPLL },
  671. { }
  672. };
  673. static struct clk_rcg2 extpclk_clk_src = {
  674. .cmd_rcgr = 0x2060,
  675. .hid_width = 5,
  676. .parent_map = mmss_xo_hdmi_map,
  677. .freq_tbl = extpclk_freq_tbl,
  678. .clkr.hw.init = &(struct clk_init_data){
  679. .name = "extpclk_clk_src",
  680. .parent_data = mmss_xo_hdmi,
  681. .num_parents = ARRAY_SIZE(mmss_xo_hdmi),
  682. .ops = &clk_byte_ops,
  683. .flags = CLK_SET_RATE_PARENT,
  684. },
  685. };
  686. static const struct freq_tbl ftbl_mdss_vsync_clk[] = {
  687. F(19200000, P_XO, 1, 0, 0),
  688. { }
  689. };
  690. static struct clk_rcg2 vsync_clk_src = {
  691. .cmd_rcgr = 0x2080,
  692. .hid_width = 5,
  693. .parent_map = mmss_xo_gpll0_gpll0_div_map,
  694. .freq_tbl = ftbl_mdss_vsync_clk,
  695. .clkr.hw.init = &(struct clk_init_data){
  696. .name = "vsync_clk_src",
  697. .parent_data = mmss_xo_gpll0_gpll0_div,
  698. .num_parents = ARRAY_SIZE(mmss_xo_gpll0_gpll0_div),
  699. .ops = &clk_rcg2_ops,
  700. },
  701. };
  702. static const struct freq_tbl ftbl_mdss_hdmi_clk[] = {
  703. F(19200000, P_XO, 1, 0, 0),
  704. { }
  705. };
  706. static struct clk_rcg2 hdmi_clk_src = {
  707. .cmd_rcgr = 0x2100,
  708. .hid_width = 5,
  709. .parent_map = mmss_xo_gpll0_gpll0_div_map,
  710. .freq_tbl = ftbl_mdss_hdmi_clk,
  711. .clkr.hw.init = &(struct clk_init_data){
  712. .name = "hdmi_clk_src",
  713. .parent_data = mmss_xo_gpll0_gpll0_div,
  714. .num_parents = ARRAY_SIZE(mmss_xo_gpll0_gpll0_div),
  715. .ops = &clk_rcg2_ops,
  716. },
  717. };
  718. static struct clk_rcg2 byte0_clk_src = {
  719. .cmd_rcgr = 0x2120,
  720. .hid_width = 5,
  721. .parent_map = mmss_xo_dsibyte_map,
  722. .clkr.hw.init = &(struct clk_init_data){
  723. .name = "byte0_clk_src",
  724. .parent_data = mmss_xo_dsibyte,
  725. .num_parents = ARRAY_SIZE(mmss_xo_dsibyte),
  726. .ops = &clk_byte2_ops,
  727. .flags = CLK_SET_RATE_PARENT,
  728. },
  729. };
  730. static struct clk_rcg2 byte1_clk_src = {
  731. .cmd_rcgr = 0x2140,
  732. .hid_width = 5,
  733. .parent_map = mmss_xo_dsibyte_map,
  734. .clkr.hw.init = &(struct clk_init_data){
  735. .name = "byte1_clk_src",
  736. .parent_data = mmss_xo_dsibyte,
  737. .num_parents = ARRAY_SIZE(mmss_xo_dsibyte),
  738. .ops = &clk_byte2_ops,
  739. .flags = CLK_SET_RATE_PARENT,
  740. },
  741. };
  742. static const struct freq_tbl ftbl_mdss_esc0_1_clk[] = {
  743. F(19200000, P_XO, 1, 0, 0),
  744. { }
  745. };
  746. static struct clk_rcg2 esc0_clk_src = {
  747. .cmd_rcgr = 0x2160,
  748. .hid_width = 5,
  749. .parent_map = mmss_xo_dsibyte_map,
  750. .freq_tbl = ftbl_mdss_esc0_1_clk,
  751. .clkr.hw.init = &(struct clk_init_data){
  752. .name = "esc0_clk_src",
  753. .parent_data = mmss_xo_dsibyte,
  754. .num_parents = ARRAY_SIZE(mmss_xo_dsibyte),
  755. .ops = &clk_rcg2_ops,
  756. },
  757. };
  758. static struct clk_rcg2 esc1_clk_src = {
  759. .cmd_rcgr = 0x2180,
  760. .hid_width = 5,
  761. .parent_map = mmss_xo_dsibyte_map,
  762. .freq_tbl = ftbl_mdss_esc0_1_clk,
  763. .clkr.hw.init = &(struct clk_init_data){
  764. .name = "esc1_clk_src",
  765. .parent_data = mmss_xo_dsibyte,
  766. .num_parents = ARRAY_SIZE(mmss_xo_dsibyte),
  767. .ops = &clk_rcg2_ops,
  768. },
  769. };
  770. static const struct freq_tbl ftbl_camss_gp0_clk_src[] = {
  771. F(10000, P_XO, 16, 1, 120),
  772. F(24000, P_XO, 16, 1, 50),
  773. F(6000000, P_GPLL0_DIV, 10, 1, 5),
  774. F(12000000, P_GPLL0_DIV, 1, 1, 25),
  775. F(13000000, P_GPLL0_DIV, 2, 13, 150),
  776. F(24000000, P_GPLL0_DIV, 1, 2, 25),
  777. { }
  778. };
  779. static struct clk_rcg2 camss_gp0_clk_src = {
  780. .cmd_rcgr = 0x3420,
  781. .mnd_width = 8,
  782. .hid_width = 5,
  783. .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
  784. .freq_tbl = ftbl_camss_gp0_clk_src,
  785. .clkr.hw.init = &(struct clk_init_data){
  786. .name = "camss_gp0_clk_src",
  787. .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
  788. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div),
  789. .ops = &clk_rcg2_ops,
  790. },
  791. };
  792. static struct clk_rcg2 camss_gp1_clk_src = {
  793. .cmd_rcgr = 0x3450,
  794. .mnd_width = 8,
  795. .hid_width = 5,
  796. .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
  797. .freq_tbl = ftbl_camss_gp0_clk_src,
  798. .clkr.hw.init = &(struct clk_init_data){
  799. .name = "camss_gp1_clk_src",
  800. .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
  801. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div),
  802. .ops = &clk_rcg2_ops,
  803. },
  804. };
  805. static const struct freq_tbl ftbl_mclk0_clk_src[] = {
  806. F(4800000, P_XO, 4, 0, 0),
  807. F(6000000, P_GPLL0_DIV, 10, 1, 5),
  808. F(8000000, P_GPLL0_DIV, 1, 2, 75),
  809. F(9600000, P_XO, 2, 0, 0),
  810. F(16666667, P_GPLL0_DIV, 2, 1, 9),
  811. F(19200000, P_XO, 1, 0, 0),
  812. F(24000000, P_GPLL0_DIV, 1, 2, 25),
  813. F(33333333, P_GPLL0_DIV, 1, 1, 9),
  814. F(48000000, P_GPLL0, 1, 2, 25),
  815. F(66666667, P_GPLL0, 1, 1, 9),
  816. { }
  817. };
  818. static struct clk_rcg2 mclk0_clk_src = {
  819. .cmd_rcgr = 0x3360,
  820. .mnd_width = 8,
  821. .hid_width = 5,
  822. .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
  823. .freq_tbl = ftbl_mclk0_clk_src,
  824. .clkr.hw.init = &(struct clk_init_data){
  825. .name = "mclk0_clk_src",
  826. .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
  827. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div),
  828. .ops = &clk_rcg2_ops,
  829. },
  830. };
  831. static struct clk_rcg2 mclk1_clk_src = {
  832. .cmd_rcgr = 0x3390,
  833. .mnd_width = 8,
  834. .hid_width = 5,
  835. .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
  836. .freq_tbl = ftbl_mclk0_clk_src,
  837. .clkr.hw.init = &(struct clk_init_data){
  838. .name = "mclk1_clk_src",
  839. .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
  840. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div),
  841. .ops = &clk_rcg2_ops,
  842. },
  843. };
  844. static struct clk_rcg2 mclk2_clk_src = {
  845. .cmd_rcgr = 0x33c0,
  846. .mnd_width = 8,
  847. .hid_width = 5,
  848. .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
  849. .freq_tbl = ftbl_mclk0_clk_src,
  850. .clkr.hw.init = &(struct clk_init_data){
  851. .name = "mclk2_clk_src",
  852. .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
  853. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div),
  854. .ops = &clk_rcg2_ops,
  855. },
  856. };
  857. static struct clk_rcg2 mclk3_clk_src = {
  858. .cmd_rcgr = 0x33f0,
  859. .mnd_width = 8,
  860. .hid_width = 5,
  861. .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
  862. .freq_tbl = ftbl_mclk0_clk_src,
  863. .clkr.hw.init = &(struct clk_init_data){
  864. .name = "mclk3_clk_src",
  865. .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
  866. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div),
  867. .ops = &clk_rcg2_ops,
  868. },
  869. };
  870. static const struct freq_tbl ftbl_cci_clk_src[] = {
  871. F(19200000, P_XO, 1, 0, 0),
  872. F(37500000, P_GPLL0, 16, 0, 0),
  873. F(50000000, P_GPLL0, 12, 0, 0),
  874. F(100000000, P_GPLL0, 6, 0, 0),
  875. { }
  876. };
  877. static struct clk_rcg2 cci_clk_src = {
  878. .cmd_rcgr = 0x3300,
  879. .mnd_width = 8,
  880. .hid_width = 5,
  881. .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
  882. .freq_tbl = ftbl_cci_clk_src,
  883. .clkr.hw.init = &(struct clk_init_data){
  884. .name = "cci_clk_src",
  885. .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
  886. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div),
  887. .ops = &clk_rcg2_ops,
  888. },
  889. };
  890. static const struct freq_tbl ftbl_csi0phytimer_clk_src[] = {
  891. F(100000000, P_GPLL0_DIV, 3, 0, 0),
  892. F(200000000, P_GPLL0, 3, 0, 0),
  893. F(266666667, P_MMPLL0, 3, 0, 0),
  894. { }
  895. };
  896. static struct clk_rcg2 csi0phytimer_clk_src = {
  897. .cmd_rcgr = 0x3000,
  898. .hid_width = 5,
  899. .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
  900. .freq_tbl = ftbl_csi0phytimer_clk_src,
  901. .clkr.hw.init = &(struct clk_init_data){
  902. .name = "csi0phytimer_clk_src",
  903. .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
  904. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
  905. .ops = &clk_rcg2_ops,
  906. },
  907. };
  908. static struct clk_rcg2 csi1phytimer_clk_src = {
  909. .cmd_rcgr = 0x3030,
  910. .hid_width = 5,
  911. .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
  912. .freq_tbl = ftbl_csi0phytimer_clk_src,
  913. .clkr.hw.init = &(struct clk_init_data){
  914. .name = "csi1phytimer_clk_src",
  915. .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
  916. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
  917. .ops = &clk_rcg2_ops,
  918. },
  919. };
  920. static struct clk_rcg2 csi2phytimer_clk_src = {
  921. .cmd_rcgr = 0x3060,
  922. .hid_width = 5,
  923. .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
  924. .freq_tbl = ftbl_csi0phytimer_clk_src,
  925. .clkr.hw.init = &(struct clk_init_data){
  926. .name = "csi2phytimer_clk_src",
  927. .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
  928. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
  929. .ops = &clk_rcg2_ops,
  930. },
  931. };
  932. static const struct freq_tbl ftbl_csiphy0_3p_clk_src[] = {
  933. F(100000000, P_GPLL0_DIV, 3, 0, 0),
  934. F(200000000, P_GPLL0, 3, 0, 0),
  935. F(320000000, P_MMPLL4, 3, 0, 0),
  936. F(384000000, P_MMPLL4, 2.5, 0, 0),
  937. { }
  938. };
  939. static struct clk_rcg2 csiphy0_3p_clk_src = {
  940. .cmd_rcgr = 0x3240,
  941. .hid_width = 5,
  942. .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
  943. .freq_tbl = ftbl_csiphy0_3p_clk_src,
  944. .clkr.hw.init = &(struct clk_init_data){
  945. .name = "csiphy0_3p_clk_src",
  946. .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
  947. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
  948. .ops = &clk_rcg2_ops,
  949. },
  950. };
  951. static struct clk_rcg2 csiphy1_3p_clk_src = {
  952. .cmd_rcgr = 0x3260,
  953. .hid_width = 5,
  954. .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
  955. .freq_tbl = ftbl_csiphy0_3p_clk_src,
  956. .clkr.hw.init = &(struct clk_init_data){
  957. .name = "csiphy1_3p_clk_src",
  958. .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
  959. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
  960. .ops = &clk_rcg2_ops,
  961. },
  962. };
  963. static struct clk_rcg2 csiphy2_3p_clk_src = {
  964. .cmd_rcgr = 0x3280,
  965. .hid_width = 5,
  966. .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
  967. .freq_tbl = ftbl_csiphy0_3p_clk_src,
  968. .clkr.hw.init = &(struct clk_init_data){
  969. .name = "csiphy2_3p_clk_src",
  970. .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
  971. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
  972. .ops = &clk_rcg2_ops,
  973. },
  974. };
  975. static const struct freq_tbl ftbl_jpeg0_clk_src[] = {
  976. F(75000000, P_GPLL0_DIV, 4, 0, 0),
  977. F(150000000, P_GPLL0, 4, 0, 0),
  978. F(228571429, P_MMPLL0, 3.5, 0, 0),
  979. F(266666667, P_MMPLL0, 3, 0, 0),
  980. F(320000000, P_MMPLL0, 2.5, 0, 0),
  981. F(480000000, P_MMPLL4, 2, 0, 0),
  982. { }
  983. };
  984. static struct clk_rcg2 jpeg0_clk_src = {
  985. .cmd_rcgr = 0x3500,
  986. .hid_width = 5,
  987. .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
  988. .freq_tbl = ftbl_jpeg0_clk_src,
  989. .clkr.hw.init = &(struct clk_init_data){
  990. .name = "jpeg0_clk_src",
  991. .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
  992. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
  993. .ops = &clk_rcg2_ops,
  994. },
  995. };
  996. static const struct freq_tbl ftbl_jpeg2_clk_src[] = {
  997. F(75000000, P_GPLL0_DIV, 4, 0, 0),
  998. F(150000000, P_GPLL0, 4, 0, 0),
  999. F(228571429, P_MMPLL0, 3.5, 0, 0),
  1000. F(266666667, P_MMPLL0, 3, 0, 0),
  1001. F(320000000, P_MMPLL0, 2.5, 0, 0),
  1002. { }
  1003. };
  1004. static struct clk_rcg2 jpeg2_clk_src = {
  1005. .cmd_rcgr = 0x3540,
  1006. .hid_width = 5,
  1007. .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
  1008. .freq_tbl = ftbl_jpeg2_clk_src,
  1009. .clkr.hw.init = &(struct clk_init_data){
  1010. .name = "jpeg2_clk_src",
  1011. .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
  1012. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
  1013. .ops = &clk_rcg2_ops,
  1014. },
  1015. };
  1016. static struct clk_rcg2 jpeg_dma_clk_src = {
  1017. .cmd_rcgr = 0x3560,
  1018. .hid_width = 5,
  1019. .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
  1020. .freq_tbl = ftbl_jpeg0_clk_src,
  1021. .clkr.hw.init = &(struct clk_init_data){
  1022. .name = "jpeg_dma_clk_src",
  1023. .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
  1024. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
  1025. .ops = &clk_rcg2_ops,
  1026. },
  1027. };
  1028. static const struct freq_tbl ftbl_vfe0_clk_src[] = {
  1029. F(75000000, P_GPLL0_DIV, 4, 0, 0),
  1030. F(100000000, P_GPLL0_DIV, 3, 0, 0),
  1031. F(300000000, P_GPLL0, 2, 0, 0),
  1032. F(320000000, P_MMPLL0, 2.5, 0, 0),
  1033. F(480000000, P_MMPLL4, 2, 0, 0),
  1034. F(600000000, P_GPLL0, 1, 0, 0),
  1035. { }
  1036. };
  1037. static struct clk_rcg2 vfe0_clk_src = {
  1038. .cmd_rcgr = 0x3600,
  1039. .hid_width = 5,
  1040. .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
  1041. .freq_tbl = ftbl_vfe0_clk_src,
  1042. .clkr.hw.init = &(struct clk_init_data){
  1043. .name = "vfe0_clk_src",
  1044. .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
  1045. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
  1046. .ops = &clk_rcg2_ops,
  1047. },
  1048. };
  1049. static struct clk_rcg2 vfe1_clk_src = {
  1050. .cmd_rcgr = 0x3620,
  1051. .hid_width = 5,
  1052. .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
  1053. .freq_tbl = ftbl_vfe0_clk_src,
  1054. .clkr.hw.init = &(struct clk_init_data){
  1055. .name = "vfe1_clk_src",
  1056. .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
  1057. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
  1058. .ops = &clk_rcg2_ops,
  1059. },
  1060. };
  1061. static const struct freq_tbl ftbl_cpp_clk_src[] = {
  1062. F(100000000, P_GPLL0_DIV, 3, 0, 0),
  1063. F(200000000, P_GPLL0, 3, 0, 0),
  1064. F(320000000, P_MMPLL0, 2.5, 0, 0),
  1065. F(480000000, P_MMPLL4, 2, 0, 0),
  1066. F(640000000, P_MMPLL4, 1.5, 0, 0),
  1067. { }
  1068. };
  1069. static struct clk_rcg2 cpp_clk_src = {
  1070. .cmd_rcgr = 0x3640,
  1071. .hid_width = 5,
  1072. .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
  1073. .freq_tbl = ftbl_cpp_clk_src,
  1074. .clkr.hw.init = &(struct clk_init_data){
  1075. .name = "cpp_clk_src",
  1076. .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
  1077. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
  1078. .ops = &clk_rcg2_ops,
  1079. },
  1080. };
  1081. static const struct freq_tbl ftbl_csi0_clk_src[] = {
  1082. F(100000000, P_GPLL0_DIV, 3, 0, 0),
  1083. F(200000000, P_GPLL0, 3, 0, 0),
  1084. F(266666667, P_MMPLL0, 3, 0, 0),
  1085. F(480000000, P_MMPLL4, 2, 0, 0),
  1086. F(600000000, P_GPLL0, 1, 0, 0),
  1087. { }
  1088. };
  1089. static struct clk_rcg2 csi0_clk_src = {
  1090. .cmd_rcgr = 0x3090,
  1091. .hid_width = 5,
  1092. .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
  1093. .freq_tbl = ftbl_csi0_clk_src,
  1094. .clkr.hw.init = &(struct clk_init_data){
  1095. .name = "csi0_clk_src",
  1096. .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
  1097. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
  1098. .ops = &clk_rcg2_ops,
  1099. },
  1100. };
  1101. static struct clk_rcg2 csi1_clk_src = {
  1102. .cmd_rcgr = 0x3100,
  1103. .hid_width = 5,
  1104. .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
  1105. .freq_tbl = ftbl_csi0_clk_src,
  1106. .clkr.hw.init = &(struct clk_init_data){
  1107. .name = "csi1_clk_src",
  1108. .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
  1109. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
  1110. .ops = &clk_rcg2_ops,
  1111. },
  1112. };
  1113. static struct clk_rcg2 csi2_clk_src = {
  1114. .cmd_rcgr = 0x3160,
  1115. .hid_width = 5,
  1116. .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
  1117. .freq_tbl = ftbl_csi0_clk_src,
  1118. .clkr.hw.init = &(struct clk_init_data){
  1119. .name = "csi2_clk_src",
  1120. .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
  1121. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
  1122. .ops = &clk_rcg2_ops,
  1123. },
  1124. };
  1125. static struct clk_rcg2 csi3_clk_src = {
  1126. .cmd_rcgr = 0x31c0,
  1127. .hid_width = 5,
  1128. .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
  1129. .freq_tbl = ftbl_csi0_clk_src,
  1130. .clkr.hw.init = &(struct clk_init_data){
  1131. .name = "csi3_clk_src",
  1132. .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
  1133. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
  1134. .ops = &clk_rcg2_ops,
  1135. },
  1136. };
  1137. static const struct freq_tbl ftbl_fd_core_clk_src[] = {
  1138. F(100000000, P_GPLL0_DIV, 3, 0, 0),
  1139. F(200000000, P_GPLL0, 3, 0, 0),
  1140. F(400000000, P_MMPLL0, 2, 0, 0),
  1141. { }
  1142. };
  1143. static struct clk_rcg2 fd_core_clk_src = {
  1144. .cmd_rcgr = 0x3b00,
  1145. .hid_width = 5,
  1146. .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
  1147. .freq_tbl = ftbl_fd_core_clk_src,
  1148. .clkr.hw.init = &(struct clk_init_data){
  1149. .name = "fd_core_clk_src",
  1150. .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
  1151. .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div),
  1152. .ops = &clk_rcg2_ops,
  1153. },
  1154. };
  1155. static struct clk_branch mmss_mmagic_ahb_clk = {
  1156. .halt_reg = 0x5024,
  1157. .clkr = {
  1158. .enable_reg = 0x5024,
  1159. .enable_mask = BIT(0),
  1160. .hw.init = &(struct clk_init_data){
  1161. .name = "mmss_mmagic_ahb_clk",
  1162. .parent_hws = (const struct clk_hw*[]){
  1163. &ahb_clk_src.clkr.hw
  1164. },
  1165. .num_parents = 1,
  1166. .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
  1167. .ops = &clk_branch2_ops,
  1168. },
  1169. },
  1170. };
  1171. static struct clk_branch mmss_mmagic_cfg_ahb_clk = {
  1172. .halt_reg = 0x5054,
  1173. .clkr = {
  1174. .enable_reg = 0x5054,
  1175. .enable_mask = BIT(0),
  1176. .hw.init = &(struct clk_init_data){
  1177. .name = "mmss_mmagic_cfg_ahb_clk",
  1178. .parent_hws = (const struct clk_hw*[]){
  1179. &ahb_clk_src.clkr.hw
  1180. },
  1181. .num_parents = 1,
  1182. .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
  1183. .ops = &clk_branch2_ops,
  1184. },
  1185. },
  1186. };
  1187. static struct clk_branch mmss_misc_ahb_clk = {
  1188. .halt_reg = 0x5018,
  1189. .clkr = {
  1190. .enable_reg = 0x5018,
  1191. .enable_mask = BIT(0),
  1192. .hw.init = &(struct clk_init_data){
  1193. .name = "mmss_misc_ahb_clk",
  1194. .parent_hws = (const struct clk_hw*[]){
  1195. &ahb_clk_src.clkr.hw
  1196. },
  1197. .num_parents = 1,
  1198. .flags = CLK_SET_RATE_PARENT,
  1199. .ops = &clk_branch2_ops,
  1200. },
  1201. },
  1202. };
  1203. static struct clk_branch mmss_misc_cxo_clk = {
  1204. .halt_reg = 0x5014,
  1205. .clkr = {
  1206. .enable_reg = 0x5014,
  1207. .enable_mask = BIT(0),
  1208. .hw.init = &(struct clk_init_data){
  1209. .name = "mmss_misc_cxo_clk",
  1210. .parent_data = (const struct clk_parent_data[]){
  1211. { .fw_name = "xo", .name = "xo_board" },
  1212. },
  1213. .num_parents = 1,
  1214. .ops = &clk_branch2_ops,
  1215. },
  1216. },
  1217. };
  1218. static struct clk_branch mmss_mmagic_maxi_clk = {
  1219. .halt_reg = 0x5074,
  1220. .clkr = {
  1221. .enable_reg = 0x5074,
  1222. .enable_mask = BIT(0),
  1223. .hw.init = &(struct clk_init_data){
  1224. .name = "mmss_mmagic_maxi_clk",
  1225. .parent_hws = (const struct clk_hw*[]){
  1226. &maxi_clk_src.clkr.hw
  1227. },
  1228. .num_parents = 1,
  1229. .flags = CLK_SET_RATE_PARENT,
  1230. .ops = &clk_branch2_ops,
  1231. },
  1232. },
  1233. };
  1234. static struct clk_branch mmagic_camss_axi_clk = {
  1235. .halt_reg = 0x3c44,
  1236. .clkr = {
  1237. .enable_reg = 0x3c44,
  1238. .enable_mask = BIT(0),
  1239. .hw.init = &(struct clk_init_data){
  1240. .name = "mmagic_camss_axi_clk",
  1241. .parent_hws = (const struct clk_hw*[]){
  1242. &axi_clk_src.clkr.hw
  1243. },
  1244. .num_parents = 1,
  1245. .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
  1246. .ops = &clk_branch2_ops,
  1247. },
  1248. },
  1249. };
  1250. static struct clk_branch mmagic_camss_noc_cfg_ahb_clk = {
  1251. .halt_reg = 0x3c48,
  1252. .clkr = {
  1253. .enable_reg = 0x3c48,
  1254. .enable_mask = BIT(0),
  1255. .hw.init = &(struct clk_init_data){
  1256. .name = "mmagic_camss_noc_cfg_ahb_clk",
  1257. .parent_data = (const struct clk_parent_data[]){
  1258. { .fw_name = "gcc_mmss_noc_cfg_ahb_clk", .name = "gcc_mmss_noc_cfg_ahb_clk" },
  1259. },
  1260. .num_parents = 1,
  1261. .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
  1262. .ops = &clk_branch2_ops,
  1263. },
  1264. },
  1265. };
  1266. static struct clk_branch smmu_vfe_ahb_clk = {
  1267. .halt_reg = 0x3c04,
  1268. .clkr = {
  1269. .enable_reg = 0x3c04,
  1270. .enable_mask = BIT(0),
  1271. .hw.init = &(struct clk_init_data){
  1272. .name = "smmu_vfe_ahb_clk",
  1273. .parent_hws = (const struct clk_hw*[]){
  1274. &ahb_clk_src.clkr.hw
  1275. },
  1276. .num_parents = 1,
  1277. .flags = CLK_SET_RATE_PARENT,
  1278. .ops = &clk_branch2_ops,
  1279. },
  1280. },
  1281. };
  1282. static struct clk_branch smmu_vfe_axi_clk = {
  1283. .halt_reg = 0x3c08,
  1284. .clkr = {
  1285. .enable_reg = 0x3c08,
  1286. .enable_mask = BIT(0),
  1287. .hw.init = &(struct clk_init_data){
  1288. .name = "smmu_vfe_axi_clk",
  1289. .parent_hws = (const struct clk_hw*[]){
  1290. &axi_clk_src.clkr.hw
  1291. },
  1292. .num_parents = 1,
  1293. .flags = CLK_SET_RATE_PARENT,
  1294. .ops = &clk_branch2_ops,
  1295. },
  1296. },
  1297. };
  1298. static struct clk_branch smmu_cpp_ahb_clk = {
  1299. .halt_reg = 0x3c14,
  1300. .clkr = {
  1301. .enable_reg = 0x3c14,
  1302. .enable_mask = BIT(0),
  1303. .hw.init = &(struct clk_init_data){
  1304. .name = "smmu_cpp_ahb_clk",
  1305. .parent_hws = (const struct clk_hw*[]){
  1306. &ahb_clk_src.clkr.hw
  1307. },
  1308. .num_parents = 1,
  1309. .flags = CLK_SET_RATE_PARENT,
  1310. .ops = &clk_branch2_ops,
  1311. },
  1312. },
  1313. };
  1314. static struct clk_branch smmu_cpp_axi_clk = {
  1315. .halt_reg = 0x3c18,
  1316. .clkr = {
  1317. .enable_reg = 0x3c18,
  1318. .enable_mask = BIT(0),
  1319. .hw.init = &(struct clk_init_data){
  1320. .name = "smmu_cpp_axi_clk",
  1321. .parent_hws = (const struct clk_hw*[]){
  1322. &axi_clk_src.clkr.hw
  1323. },
  1324. .num_parents = 1,
  1325. .flags = CLK_SET_RATE_PARENT,
  1326. .ops = &clk_branch2_ops,
  1327. },
  1328. },
  1329. };
  1330. static struct clk_branch smmu_jpeg_ahb_clk = {
  1331. .halt_reg = 0x3c24,
  1332. .clkr = {
  1333. .enable_reg = 0x3c24,
  1334. .enable_mask = BIT(0),
  1335. .hw.init = &(struct clk_init_data){
  1336. .name = "smmu_jpeg_ahb_clk",
  1337. .parent_hws = (const struct clk_hw*[]){
  1338. &ahb_clk_src.clkr.hw
  1339. },
  1340. .num_parents = 1,
  1341. .flags = CLK_SET_RATE_PARENT,
  1342. .ops = &clk_branch2_ops,
  1343. },
  1344. },
  1345. };
  1346. static struct clk_branch smmu_jpeg_axi_clk = {
  1347. .halt_reg = 0x3c28,
  1348. .clkr = {
  1349. .enable_reg = 0x3c28,
  1350. .enable_mask = BIT(0),
  1351. .hw.init = &(struct clk_init_data){
  1352. .name = "smmu_jpeg_axi_clk",
  1353. .parent_hws = (const struct clk_hw*[]){
  1354. &axi_clk_src.clkr.hw
  1355. },
  1356. .num_parents = 1,
  1357. .flags = CLK_SET_RATE_PARENT,
  1358. .ops = &clk_branch2_ops,
  1359. },
  1360. },
  1361. };
  1362. static struct clk_branch mmagic_mdss_axi_clk = {
  1363. .halt_reg = 0x2474,
  1364. .clkr = {
  1365. .enable_reg = 0x2474,
  1366. .enable_mask = BIT(0),
  1367. .hw.init = &(struct clk_init_data){
  1368. .name = "mmagic_mdss_axi_clk",
  1369. .parent_hws = (const struct clk_hw*[]){
  1370. &axi_clk_src.clkr.hw
  1371. },
  1372. .num_parents = 1,
  1373. .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
  1374. .ops = &clk_branch2_ops,
  1375. },
  1376. },
  1377. };
  1378. static struct clk_branch mmagic_mdss_noc_cfg_ahb_clk = {
  1379. .halt_reg = 0x2478,
  1380. .clkr = {
  1381. .enable_reg = 0x2478,
  1382. .enable_mask = BIT(0),
  1383. .hw.init = &(struct clk_init_data){
  1384. .name = "mmagic_mdss_noc_cfg_ahb_clk",
  1385. .parent_data = (const struct clk_parent_data[]){
  1386. { .fw_name = "gcc_mmss_noc_cfg_ahb_clk", .name = "gcc_mmss_noc_cfg_ahb_clk" },
  1387. },
  1388. .num_parents = 1,
  1389. .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
  1390. .ops = &clk_branch2_ops,
  1391. },
  1392. },
  1393. };
  1394. static struct clk_branch smmu_rot_ahb_clk = {
  1395. .halt_reg = 0x2444,
  1396. .clkr = {
  1397. .enable_reg = 0x2444,
  1398. .enable_mask = BIT(0),
  1399. .hw.init = &(struct clk_init_data){
  1400. .name = "smmu_rot_ahb_clk",
  1401. .parent_hws = (const struct clk_hw*[]){
  1402. &ahb_clk_src.clkr.hw
  1403. },
  1404. .num_parents = 1,
  1405. .flags = CLK_SET_RATE_PARENT,
  1406. .ops = &clk_branch2_ops,
  1407. },
  1408. },
  1409. };
  1410. static struct clk_branch smmu_rot_axi_clk = {
  1411. .halt_reg = 0x2448,
  1412. .clkr = {
  1413. .enable_reg = 0x2448,
  1414. .enable_mask = BIT(0),
  1415. .hw.init = &(struct clk_init_data){
  1416. .name = "smmu_rot_axi_clk",
  1417. .parent_hws = (const struct clk_hw*[]){
  1418. &axi_clk_src.clkr.hw
  1419. },
  1420. .num_parents = 1,
  1421. .flags = CLK_SET_RATE_PARENT,
  1422. .ops = &clk_branch2_ops,
  1423. },
  1424. },
  1425. };
  1426. static struct clk_branch smmu_mdp_ahb_clk = {
  1427. .halt_reg = 0x2454,
  1428. .clkr = {
  1429. .enable_reg = 0x2454,
  1430. .enable_mask = BIT(0),
  1431. .hw.init = &(struct clk_init_data){
  1432. .name = "smmu_mdp_ahb_clk",
  1433. .parent_hws = (const struct clk_hw*[]){
  1434. &ahb_clk_src.clkr.hw
  1435. },
  1436. .num_parents = 1,
  1437. .flags = CLK_SET_RATE_PARENT,
  1438. .ops = &clk_branch2_ops,
  1439. },
  1440. },
  1441. };
  1442. static struct clk_branch smmu_mdp_axi_clk = {
  1443. .halt_reg = 0x2458,
  1444. .clkr = {
  1445. .enable_reg = 0x2458,
  1446. .enable_mask = BIT(0),
  1447. .hw.init = &(struct clk_init_data){
  1448. .name = "smmu_mdp_axi_clk",
  1449. .parent_hws = (const struct clk_hw*[]){
  1450. &axi_clk_src.clkr.hw
  1451. },
  1452. .num_parents = 1,
  1453. .flags = CLK_SET_RATE_PARENT,
  1454. .ops = &clk_branch2_ops,
  1455. },
  1456. },
  1457. };
  1458. static struct clk_branch mmagic_video_axi_clk = {
  1459. .halt_reg = 0x1194,
  1460. .clkr = {
  1461. .enable_reg = 0x1194,
  1462. .enable_mask = BIT(0),
  1463. .hw.init = &(struct clk_init_data){
  1464. .name = "mmagic_video_axi_clk",
  1465. .parent_hws = (const struct clk_hw*[]){
  1466. &axi_clk_src.clkr.hw
  1467. },
  1468. .num_parents = 1,
  1469. .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
  1470. .ops = &clk_branch2_ops,
  1471. },
  1472. },
  1473. };
  1474. static struct clk_branch mmagic_video_noc_cfg_ahb_clk = {
  1475. .halt_reg = 0x1198,
  1476. .clkr = {
  1477. .enable_reg = 0x1198,
  1478. .enable_mask = BIT(0),
  1479. .hw.init = &(struct clk_init_data){
  1480. .name = "mmagic_video_noc_cfg_ahb_clk",
  1481. .parent_data = (const struct clk_parent_data[]){
  1482. { .fw_name = "gcc_mmss_noc_cfg_ahb_clk", .name = "gcc_mmss_noc_cfg_ahb_clk" },
  1483. },
  1484. .num_parents = 1,
  1485. .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
  1486. .ops = &clk_branch2_ops,
  1487. },
  1488. },
  1489. };
  1490. static struct clk_branch smmu_video_ahb_clk = {
  1491. .halt_reg = 0x1174,
  1492. .clkr = {
  1493. .enable_reg = 0x1174,
  1494. .enable_mask = BIT(0),
  1495. .hw.init = &(struct clk_init_data){
  1496. .name = "smmu_video_ahb_clk",
  1497. .parent_hws = (const struct clk_hw*[]){
  1498. &ahb_clk_src.clkr.hw
  1499. },
  1500. .num_parents = 1,
  1501. .flags = CLK_SET_RATE_PARENT,
  1502. .ops = &clk_branch2_ops,
  1503. },
  1504. },
  1505. };
  1506. static struct clk_branch smmu_video_axi_clk = {
  1507. .halt_reg = 0x1178,
  1508. .clkr = {
  1509. .enable_reg = 0x1178,
  1510. .enable_mask = BIT(0),
  1511. .hw.init = &(struct clk_init_data){
  1512. .name = "smmu_video_axi_clk",
  1513. .parent_hws = (const struct clk_hw*[]){
  1514. &axi_clk_src.clkr.hw
  1515. },
  1516. .num_parents = 1,
  1517. .flags = CLK_SET_RATE_PARENT,
  1518. .ops = &clk_branch2_ops,
  1519. },
  1520. },
  1521. };
  1522. static struct clk_branch mmagic_bimc_noc_cfg_ahb_clk = {
  1523. .halt_reg = 0x5298,
  1524. .clkr = {
  1525. .enable_reg = 0x5298,
  1526. .enable_mask = BIT(0),
  1527. .hw.init = &(struct clk_init_data){
  1528. .name = "mmagic_bimc_noc_cfg_ahb_clk",
  1529. .parent_data = (const struct clk_parent_data[]){
  1530. { .fw_name = "gcc_mmss_noc_cfg_ahb_clk", .name = "gcc_mmss_noc_cfg_ahb_clk" },
  1531. },
  1532. .num_parents = 1,
  1533. .flags = CLK_SET_RATE_PARENT,
  1534. .ops = &clk_branch2_ops,
  1535. },
  1536. },
  1537. };
  1538. static struct clk_branch gpu_gx_gfx3d_clk = {
  1539. .halt_reg = 0x4028,
  1540. .clkr = {
  1541. .enable_reg = 0x4028,
  1542. .enable_mask = BIT(0),
  1543. .hw.init = &(struct clk_init_data){
  1544. .name = "gpu_gx_gfx3d_clk",
  1545. .parent_hws = (const struct clk_hw*[]){
  1546. &gfx3d_clk_src.rcg.clkr.hw
  1547. },
  1548. .num_parents = 1,
  1549. .flags = CLK_SET_RATE_PARENT,
  1550. .ops = &clk_branch2_ops,
  1551. },
  1552. },
  1553. };
  1554. static struct clk_branch gpu_gx_rbbmtimer_clk = {
  1555. .halt_reg = 0x40b0,
  1556. .clkr = {
  1557. .enable_reg = 0x40b0,
  1558. .enable_mask = BIT(0),
  1559. .hw.init = &(struct clk_init_data){
  1560. .name = "gpu_gx_rbbmtimer_clk",
  1561. .parent_hws = (const struct clk_hw*[]){
  1562. &rbbmtimer_clk_src.clkr.hw
  1563. },
  1564. .num_parents = 1,
  1565. .flags = CLK_SET_RATE_PARENT,
  1566. .ops = &clk_branch2_ops,
  1567. },
  1568. },
  1569. };
  1570. static struct clk_branch gpu_ahb_clk = {
  1571. .halt_reg = 0x403c,
  1572. .clkr = {
  1573. .enable_reg = 0x403c,
  1574. .enable_mask = BIT(0),
  1575. .hw.init = &(struct clk_init_data){
  1576. .name = "gpu_ahb_clk",
  1577. .parent_hws = (const struct clk_hw*[]){
  1578. &ahb_clk_src.clkr.hw
  1579. },
  1580. .num_parents = 1,
  1581. .flags = CLK_SET_RATE_PARENT,
  1582. .ops = &clk_branch2_ops,
  1583. },
  1584. },
  1585. };
  1586. static struct clk_branch gpu_aon_isense_clk = {
  1587. .halt_reg = 0x4044,
  1588. .clkr = {
  1589. .enable_reg = 0x4044,
  1590. .enable_mask = BIT(0),
  1591. .hw.init = &(struct clk_init_data){
  1592. .name = "gpu_aon_isense_clk",
  1593. .parent_hws = (const struct clk_hw*[]){
  1594. &isense_clk_src.clkr.hw
  1595. },
  1596. .num_parents = 1,
  1597. .flags = CLK_SET_RATE_PARENT,
  1598. .ops = &clk_branch2_ops,
  1599. },
  1600. },
  1601. };
  1602. static struct clk_branch vmem_maxi_clk = {
  1603. .halt_reg = 0x1204,
  1604. .clkr = {
  1605. .enable_reg = 0x1204,
  1606. .enable_mask = BIT(0),
  1607. .hw.init = &(struct clk_init_data){
  1608. .name = "vmem_maxi_clk",
  1609. .parent_hws = (const struct clk_hw*[]){
  1610. &maxi_clk_src.clkr.hw
  1611. },
  1612. .num_parents = 1,
  1613. .flags = CLK_SET_RATE_PARENT,
  1614. .ops = &clk_branch2_ops,
  1615. },
  1616. },
  1617. };
  1618. static struct clk_branch vmem_ahb_clk = {
  1619. .halt_reg = 0x1208,
  1620. .clkr = {
  1621. .enable_reg = 0x1208,
  1622. .enable_mask = BIT(0),
  1623. .hw.init = &(struct clk_init_data){
  1624. .name = "vmem_ahb_clk",
  1625. .parent_hws = (const struct clk_hw*[]){
  1626. &ahb_clk_src.clkr.hw
  1627. },
  1628. .num_parents = 1,
  1629. .flags = CLK_SET_RATE_PARENT,
  1630. .ops = &clk_branch2_ops,
  1631. },
  1632. },
  1633. };
  1634. static struct clk_branch mmss_rbcpr_clk = {
  1635. .halt_reg = 0x4084,
  1636. .clkr = {
  1637. .enable_reg = 0x4084,
  1638. .enable_mask = BIT(0),
  1639. .hw.init = &(struct clk_init_data){
  1640. .name = "mmss_rbcpr_clk",
  1641. .parent_hws = (const struct clk_hw*[]){
  1642. &rbcpr_clk_src.clkr.hw
  1643. },
  1644. .num_parents = 1,
  1645. .flags = CLK_SET_RATE_PARENT,
  1646. .ops = &clk_branch2_ops,
  1647. },
  1648. },
  1649. };
  1650. static struct clk_branch mmss_rbcpr_ahb_clk = {
  1651. .halt_reg = 0x4088,
  1652. .clkr = {
  1653. .enable_reg = 0x4088,
  1654. .enable_mask = BIT(0),
  1655. .hw.init = &(struct clk_init_data){
  1656. .name = "mmss_rbcpr_ahb_clk",
  1657. .parent_hws = (const struct clk_hw*[]){
  1658. &ahb_clk_src.clkr.hw
  1659. },
  1660. .num_parents = 1,
  1661. .flags = CLK_SET_RATE_PARENT,
  1662. .ops = &clk_branch2_ops,
  1663. },
  1664. },
  1665. };
  1666. static struct clk_branch video_core_clk = {
  1667. .halt_reg = 0x1028,
  1668. .clkr = {
  1669. .enable_reg = 0x1028,
  1670. .enable_mask = BIT(0),
  1671. .hw.init = &(struct clk_init_data){
  1672. .name = "video_core_clk",
  1673. .parent_hws = (const struct clk_hw*[]){
  1674. &video_core_clk_src.clkr.hw
  1675. },
  1676. .num_parents = 1,
  1677. .flags = CLK_SET_RATE_PARENT,
  1678. .ops = &clk_branch2_ops,
  1679. },
  1680. },
  1681. };
  1682. static struct clk_branch video_axi_clk = {
  1683. .halt_reg = 0x1034,
  1684. .clkr = {
  1685. .enable_reg = 0x1034,
  1686. .enable_mask = BIT(0),
  1687. .hw.init = &(struct clk_init_data){
  1688. .name = "video_axi_clk",
  1689. .parent_hws = (const struct clk_hw*[]){
  1690. &axi_clk_src.clkr.hw
  1691. },
  1692. .num_parents = 1,
  1693. .flags = CLK_SET_RATE_PARENT,
  1694. .ops = &clk_branch2_ops,
  1695. },
  1696. },
  1697. };
  1698. static struct clk_branch video_maxi_clk = {
  1699. .halt_reg = 0x1038,
  1700. .clkr = {
  1701. .enable_reg = 0x1038,
  1702. .enable_mask = BIT(0),
  1703. .hw.init = &(struct clk_init_data){
  1704. .name = "video_maxi_clk",
  1705. .parent_hws = (const struct clk_hw*[]){
  1706. &maxi_clk_src.clkr.hw
  1707. },
  1708. .num_parents = 1,
  1709. .flags = CLK_SET_RATE_PARENT,
  1710. .ops = &clk_branch2_ops,
  1711. },
  1712. },
  1713. };
  1714. static struct clk_branch video_ahb_clk = {
  1715. .halt_reg = 0x1030,
  1716. .clkr = {
  1717. .enable_reg = 0x1030,
  1718. .enable_mask = BIT(0),
  1719. .hw.init = &(struct clk_init_data){
  1720. .name = "video_ahb_clk",
  1721. .parent_hws = (const struct clk_hw*[]){
  1722. &ahb_clk_src.clkr.hw
  1723. },
  1724. .num_parents = 1,
  1725. .flags = CLK_SET_RATE_PARENT,
  1726. .ops = &clk_branch2_ops,
  1727. },
  1728. },
  1729. };
  1730. static struct clk_branch video_subcore0_clk = {
  1731. .halt_reg = 0x1048,
  1732. .clkr = {
  1733. .enable_reg = 0x1048,
  1734. .enable_mask = BIT(0),
  1735. .hw.init = &(struct clk_init_data){
  1736. .name = "video_subcore0_clk",
  1737. .parent_hws = (const struct clk_hw*[]){
  1738. &video_subcore0_clk_src.clkr.hw
  1739. },
  1740. .num_parents = 1,
  1741. .flags = CLK_SET_RATE_PARENT,
  1742. .ops = &clk_branch2_ops,
  1743. },
  1744. },
  1745. };
  1746. static struct clk_branch video_subcore1_clk = {
  1747. .halt_reg = 0x104c,
  1748. .clkr = {
  1749. .enable_reg = 0x104c,
  1750. .enable_mask = BIT(0),
  1751. .hw.init = &(struct clk_init_data){
  1752. .name = "video_subcore1_clk",
  1753. .parent_hws = (const struct clk_hw*[]){
  1754. &video_subcore1_clk_src.clkr.hw
  1755. },
  1756. .num_parents = 1,
  1757. .flags = CLK_SET_RATE_PARENT,
  1758. .ops = &clk_branch2_ops,
  1759. },
  1760. },
  1761. };
  1762. static struct clk_branch mdss_ahb_clk = {
  1763. .halt_reg = 0x2308,
  1764. .clkr = {
  1765. .enable_reg = 0x2308,
  1766. .enable_mask = BIT(0),
  1767. .hw.init = &(struct clk_init_data){
  1768. .name = "mdss_ahb_clk",
  1769. .parent_hws = (const struct clk_hw*[]){
  1770. &ahb_clk_src.clkr.hw
  1771. },
  1772. .num_parents = 1,
  1773. .flags = CLK_SET_RATE_PARENT,
  1774. .ops = &clk_branch2_ops,
  1775. },
  1776. },
  1777. };
  1778. static struct clk_branch mdss_hdmi_ahb_clk = {
  1779. .halt_reg = 0x230c,
  1780. .clkr = {
  1781. .enable_reg = 0x230c,
  1782. .enable_mask = BIT(0),
  1783. .hw.init = &(struct clk_init_data){
  1784. .name = "mdss_hdmi_ahb_clk",
  1785. .parent_hws = (const struct clk_hw*[]){
  1786. &ahb_clk_src.clkr.hw
  1787. },
  1788. .num_parents = 1,
  1789. .flags = CLK_SET_RATE_PARENT,
  1790. .ops = &clk_branch2_ops,
  1791. },
  1792. },
  1793. };
  1794. static struct clk_branch mdss_axi_clk = {
  1795. .halt_reg = 0x2310,
  1796. .clkr = {
  1797. .enable_reg = 0x2310,
  1798. .enable_mask = BIT(0),
  1799. .hw.init = &(struct clk_init_data){
  1800. .name = "mdss_axi_clk",
  1801. .parent_hws = (const struct clk_hw*[]){
  1802. &axi_clk_src.clkr.hw
  1803. },
  1804. .num_parents = 1,
  1805. .flags = CLK_SET_RATE_PARENT,
  1806. .ops = &clk_branch2_ops,
  1807. },
  1808. },
  1809. };
  1810. static struct clk_branch mdss_pclk0_clk = {
  1811. .halt_reg = 0x2314,
  1812. .clkr = {
  1813. .enable_reg = 0x2314,
  1814. .enable_mask = BIT(0),
  1815. .hw.init = &(struct clk_init_data){
  1816. .name = "mdss_pclk0_clk",
  1817. .parent_hws = (const struct clk_hw*[]){
  1818. &pclk0_clk_src.clkr.hw
  1819. },
  1820. .num_parents = 1,
  1821. .flags = CLK_SET_RATE_PARENT,
  1822. .ops = &clk_branch2_ops,
  1823. },
  1824. },
  1825. };
  1826. static struct clk_branch mdss_pclk1_clk = {
  1827. .halt_reg = 0x2318,
  1828. .clkr = {
  1829. .enable_reg = 0x2318,
  1830. .enable_mask = BIT(0),
  1831. .hw.init = &(struct clk_init_data){
  1832. .name = "mdss_pclk1_clk",
  1833. .parent_hws = (const struct clk_hw*[]){
  1834. &pclk1_clk_src.clkr.hw
  1835. },
  1836. .num_parents = 1,
  1837. .flags = CLK_SET_RATE_PARENT,
  1838. .ops = &clk_branch2_ops,
  1839. },
  1840. },
  1841. };
  1842. static struct clk_branch mdss_mdp_clk = {
  1843. .halt_reg = 0x231c,
  1844. .clkr = {
  1845. .enable_reg = 0x231c,
  1846. .enable_mask = BIT(0),
  1847. .hw.init = &(struct clk_init_data){
  1848. .name = "mdss_mdp_clk",
  1849. .parent_hws = (const struct clk_hw*[]){
  1850. &mdp_clk_src.clkr.hw
  1851. },
  1852. .num_parents = 1,
  1853. .flags = CLK_SET_RATE_PARENT,
  1854. .ops = &clk_branch2_ops,
  1855. },
  1856. },
  1857. };
  1858. static struct clk_branch mdss_extpclk_clk = {
  1859. .halt_reg = 0x2324,
  1860. .clkr = {
  1861. .enable_reg = 0x2324,
  1862. .enable_mask = BIT(0),
  1863. .hw.init = &(struct clk_init_data){
  1864. .name = "mdss_extpclk_clk",
  1865. .parent_hws = (const struct clk_hw*[]){
  1866. &extpclk_clk_src.clkr.hw
  1867. },
  1868. .num_parents = 1,
  1869. .flags = CLK_SET_RATE_PARENT,
  1870. .ops = &clk_branch2_ops,
  1871. },
  1872. },
  1873. };
  1874. static struct clk_branch mdss_vsync_clk = {
  1875. .halt_reg = 0x2328,
  1876. .clkr = {
  1877. .enable_reg = 0x2328,
  1878. .enable_mask = BIT(0),
  1879. .hw.init = &(struct clk_init_data){
  1880. .name = "mdss_vsync_clk",
  1881. .parent_hws = (const struct clk_hw*[]){
  1882. &vsync_clk_src.clkr.hw
  1883. },
  1884. .num_parents = 1,
  1885. .flags = CLK_SET_RATE_PARENT,
  1886. .ops = &clk_branch2_ops,
  1887. },
  1888. },
  1889. };
  1890. static struct clk_branch mdss_hdmi_clk = {
  1891. .halt_reg = 0x2338,
  1892. .clkr = {
  1893. .enable_reg = 0x2338,
  1894. .enable_mask = BIT(0),
  1895. .hw.init = &(struct clk_init_data){
  1896. .name = "mdss_hdmi_clk",
  1897. .parent_hws = (const struct clk_hw*[]){
  1898. &hdmi_clk_src.clkr.hw
  1899. },
  1900. .num_parents = 1,
  1901. .flags = CLK_SET_RATE_PARENT,
  1902. .ops = &clk_branch2_ops,
  1903. },
  1904. },
  1905. };
  1906. static struct clk_branch mdss_byte0_clk = {
  1907. .halt_reg = 0x233c,
  1908. .clkr = {
  1909. .enable_reg = 0x233c,
  1910. .enable_mask = BIT(0),
  1911. .hw.init = &(struct clk_init_data){
  1912. .name = "mdss_byte0_clk",
  1913. .parent_hws = (const struct clk_hw*[]){
  1914. &byte0_clk_src.clkr.hw
  1915. },
  1916. .num_parents = 1,
  1917. .flags = CLK_SET_RATE_PARENT,
  1918. .ops = &clk_branch2_ops,
  1919. },
  1920. },
  1921. };
  1922. static struct clk_branch mdss_byte1_clk = {
  1923. .halt_reg = 0x2340,
  1924. .clkr = {
  1925. .enable_reg = 0x2340,
  1926. .enable_mask = BIT(0),
  1927. .hw.init = &(struct clk_init_data){
  1928. .name = "mdss_byte1_clk",
  1929. .parent_hws = (const struct clk_hw*[]){
  1930. &byte1_clk_src.clkr.hw
  1931. },
  1932. .num_parents = 1,
  1933. .flags = CLK_SET_RATE_PARENT,
  1934. .ops = &clk_branch2_ops,
  1935. },
  1936. },
  1937. };
  1938. static struct clk_branch mdss_esc0_clk = {
  1939. .halt_reg = 0x2344,
  1940. .clkr = {
  1941. .enable_reg = 0x2344,
  1942. .enable_mask = BIT(0),
  1943. .hw.init = &(struct clk_init_data){
  1944. .name = "mdss_esc0_clk",
  1945. .parent_hws = (const struct clk_hw*[]){
  1946. &esc0_clk_src.clkr.hw
  1947. },
  1948. .num_parents = 1,
  1949. .flags = CLK_SET_RATE_PARENT,
  1950. .ops = &clk_branch2_ops,
  1951. },
  1952. },
  1953. };
  1954. static struct clk_branch mdss_esc1_clk = {
  1955. .halt_reg = 0x2348,
  1956. .clkr = {
  1957. .enable_reg = 0x2348,
  1958. .enable_mask = BIT(0),
  1959. .hw.init = &(struct clk_init_data){
  1960. .name = "mdss_esc1_clk",
  1961. .parent_hws = (const struct clk_hw*[]){
  1962. &esc1_clk_src.clkr.hw
  1963. },
  1964. .num_parents = 1,
  1965. .flags = CLK_SET_RATE_PARENT,
  1966. .ops = &clk_branch2_ops,
  1967. },
  1968. },
  1969. };
  1970. static struct clk_branch camss_top_ahb_clk = {
  1971. .halt_reg = 0x3484,
  1972. .clkr = {
  1973. .enable_reg = 0x3484,
  1974. .enable_mask = BIT(0),
  1975. .hw.init = &(struct clk_init_data){
  1976. .name = "camss_top_ahb_clk",
  1977. .parent_hws = (const struct clk_hw*[]){
  1978. &ahb_clk_src.clkr.hw
  1979. },
  1980. .num_parents = 1,
  1981. .flags = CLK_SET_RATE_PARENT,
  1982. .ops = &clk_branch2_ops,
  1983. },
  1984. },
  1985. };
  1986. static struct clk_branch camss_ahb_clk = {
  1987. .halt_reg = 0x348c,
  1988. .clkr = {
  1989. .enable_reg = 0x348c,
  1990. .enable_mask = BIT(0),
  1991. .hw.init = &(struct clk_init_data){
  1992. .name = "camss_ahb_clk",
  1993. .parent_hws = (const struct clk_hw*[]){
  1994. &ahb_clk_src.clkr.hw
  1995. },
  1996. .num_parents = 1,
  1997. .flags = CLK_SET_RATE_PARENT,
  1998. .ops = &clk_branch2_ops,
  1999. },
  2000. },
  2001. };
  2002. static struct clk_branch camss_micro_ahb_clk = {
  2003. .halt_reg = 0x3494,
  2004. .clkr = {
  2005. .enable_reg = 0x3494,
  2006. .enable_mask = BIT(0),
  2007. .hw.init = &(struct clk_init_data){
  2008. .name = "camss_micro_ahb_clk",
  2009. .parent_hws = (const struct clk_hw*[]){
  2010. &ahb_clk_src.clkr.hw
  2011. },
  2012. .num_parents = 1,
  2013. .flags = CLK_SET_RATE_PARENT,
  2014. .ops = &clk_branch2_ops,
  2015. },
  2016. },
  2017. };
  2018. static struct clk_branch camss_gp0_clk = {
  2019. .halt_reg = 0x3444,
  2020. .clkr = {
  2021. .enable_reg = 0x3444,
  2022. .enable_mask = BIT(0),
  2023. .hw.init = &(struct clk_init_data){
  2024. .name = "camss_gp0_clk",
  2025. .parent_hws = (const struct clk_hw*[]){
  2026. &camss_gp0_clk_src.clkr.hw
  2027. },
  2028. .num_parents = 1,
  2029. .flags = CLK_SET_RATE_PARENT,
  2030. .ops = &clk_branch2_ops,
  2031. },
  2032. },
  2033. };
  2034. static struct clk_branch camss_gp1_clk = {
  2035. .halt_reg = 0x3474,
  2036. .clkr = {
  2037. .enable_reg = 0x3474,
  2038. .enable_mask = BIT(0),
  2039. .hw.init = &(struct clk_init_data){
  2040. .name = "camss_gp1_clk",
  2041. .parent_hws = (const struct clk_hw*[]){
  2042. &camss_gp1_clk_src.clkr.hw
  2043. },
  2044. .num_parents = 1,
  2045. .flags = CLK_SET_RATE_PARENT,
  2046. .ops = &clk_branch2_ops,
  2047. },
  2048. },
  2049. };
  2050. static struct clk_branch camss_mclk0_clk = {
  2051. .halt_reg = 0x3384,
  2052. .clkr = {
  2053. .enable_reg = 0x3384,
  2054. .enable_mask = BIT(0),
  2055. .hw.init = &(struct clk_init_data){
  2056. .name = "camss_mclk0_clk",
  2057. .parent_hws = (const struct clk_hw*[]){
  2058. &mclk0_clk_src.clkr.hw
  2059. },
  2060. .num_parents = 1,
  2061. .flags = CLK_SET_RATE_PARENT,
  2062. .ops = &clk_branch2_ops,
  2063. },
  2064. },
  2065. };
  2066. static struct clk_branch camss_mclk1_clk = {
  2067. .halt_reg = 0x33b4,
  2068. .clkr = {
  2069. .enable_reg = 0x33b4,
  2070. .enable_mask = BIT(0),
  2071. .hw.init = &(struct clk_init_data){
  2072. .name = "camss_mclk1_clk",
  2073. .parent_hws = (const struct clk_hw*[]){
  2074. &mclk1_clk_src.clkr.hw
  2075. },
  2076. .num_parents = 1,
  2077. .flags = CLK_SET_RATE_PARENT,
  2078. .ops = &clk_branch2_ops,
  2079. },
  2080. },
  2081. };
  2082. static struct clk_branch camss_mclk2_clk = {
  2083. .halt_reg = 0x33e4,
  2084. .clkr = {
  2085. .enable_reg = 0x33e4,
  2086. .enable_mask = BIT(0),
  2087. .hw.init = &(struct clk_init_data){
  2088. .name = "camss_mclk2_clk",
  2089. .parent_hws = (const struct clk_hw*[]){
  2090. &mclk2_clk_src.clkr.hw
  2091. },
  2092. .num_parents = 1,
  2093. .flags = CLK_SET_RATE_PARENT,
  2094. .ops = &clk_branch2_ops,
  2095. },
  2096. },
  2097. };
  2098. static struct clk_branch camss_mclk3_clk = {
  2099. .halt_reg = 0x3414,
  2100. .clkr = {
  2101. .enable_reg = 0x3414,
  2102. .enable_mask = BIT(0),
  2103. .hw.init = &(struct clk_init_data){
  2104. .name = "camss_mclk3_clk",
  2105. .parent_hws = (const struct clk_hw*[]){
  2106. &mclk3_clk_src.clkr.hw
  2107. },
  2108. .num_parents = 1,
  2109. .flags = CLK_SET_RATE_PARENT,
  2110. .ops = &clk_branch2_ops,
  2111. },
  2112. },
  2113. };
  2114. static struct clk_branch camss_cci_clk = {
  2115. .halt_reg = 0x3344,
  2116. .clkr = {
  2117. .enable_reg = 0x3344,
  2118. .enable_mask = BIT(0),
  2119. .hw.init = &(struct clk_init_data){
  2120. .name = "camss_cci_clk",
  2121. .parent_hws = (const struct clk_hw*[]){
  2122. &cci_clk_src.clkr.hw
  2123. },
  2124. .num_parents = 1,
  2125. .flags = CLK_SET_RATE_PARENT,
  2126. .ops = &clk_branch2_ops,
  2127. },
  2128. },
  2129. };
  2130. static struct clk_branch camss_cci_ahb_clk = {
  2131. .halt_reg = 0x3348,
  2132. .clkr = {
  2133. .enable_reg = 0x3348,
  2134. .enable_mask = BIT(0),
  2135. .hw.init = &(struct clk_init_data){
  2136. .name = "camss_cci_ahb_clk",
  2137. .parent_hws = (const struct clk_hw*[]){
  2138. &ahb_clk_src.clkr.hw
  2139. },
  2140. .num_parents = 1,
  2141. .flags = CLK_SET_RATE_PARENT,
  2142. .ops = &clk_branch2_ops,
  2143. },
  2144. },
  2145. };
  2146. static struct clk_branch camss_csi0phytimer_clk = {
  2147. .halt_reg = 0x3024,
  2148. .clkr = {
  2149. .enable_reg = 0x3024,
  2150. .enable_mask = BIT(0),
  2151. .hw.init = &(struct clk_init_data){
  2152. .name = "camss_csi0phytimer_clk",
  2153. .parent_hws = (const struct clk_hw*[]){
  2154. &csi0phytimer_clk_src.clkr.hw
  2155. },
  2156. .num_parents = 1,
  2157. .flags = CLK_SET_RATE_PARENT,
  2158. .ops = &clk_branch2_ops,
  2159. },
  2160. },
  2161. };
  2162. static struct clk_branch camss_csi1phytimer_clk = {
  2163. .halt_reg = 0x3054,
  2164. .clkr = {
  2165. .enable_reg = 0x3054,
  2166. .enable_mask = BIT(0),
  2167. .hw.init = &(struct clk_init_data){
  2168. .name = "camss_csi1phytimer_clk",
  2169. .parent_hws = (const struct clk_hw*[]){
  2170. &csi1phytimer_clk_src.clkr.hw
  2171. },
  2172. .num_parents = 1,
  2173. .flags = CLK_SET_RATE_PARENT,
  2174. .ops = &clk_branch2_ops,
  2175. },
  2176. },
  2177. };
  2178. static struct clk_branch camss_csi2phytimer_clk = {
  2179. .halt_reg = 0x3084,
  2180. .clkr = {
  2181. .enable_reg = 0x3084,
  2182. .enable_mask = BIT(0),
  2183. .hw.init = &(struct clk_init_data){
  2184. .name = "camss_csi2phytimer_clk",
  2185. .parent_hws = (const struct clk_hw*[]){
  2186. &csi2phytimer_clk_src.clkr.hw
  2187. },
  2188. .num_parents = 1,
  2189. .flags = CLK_SET_RATE_PARENT,
  2190. .ops = &clk_branch2_ops,
  2191. },
  2192. },
  2193. };
  2194. static struct clk_branch camss_csiphy0_3p_clk = {
  2195. .halt_reg = 0x3234,
  2196. .clkr = {
  2197. .enable_reg = 0x3234,
  2198. .enable_mask = BIT(0),
  2199. .hw.init = &(struct clk_init_data){
  2200. .name = "camss_csiphy0_3p_clk",
  2201. .parent_hws = (const struct clk_hw*[]){
  2202. &csiphy0_3p_clk_src.clkr.hw
  2203. },
  2204. .num_parents = 1,
  2205. .flags = CLK_SET_RATE_PARENT,
  2206. .ops = &clk_branch2_ops,
  2207. },
  2208. },
  2209. };
  2210. static struct clk_branch camss_csiphy1_3p_clk = {
  2211. .halt_reg = 0x3254,
  2212. .clkr = {
  2213. .enable_reg = 0x3254,
  2214. .enable_mask = BIT(0),
  2215. .hw.init = &(struct clk_init_data){
  2216. .name = "camss_csiphy1_3p_clk",
  2217. .parent_hws = (const struct clk_hw*[]){
  2218. &csiphy1_3p_clk_src.clkr.hw
  2219. },
  2220. .num_parents = 1,
  2221. .flags = CLK_SET_RATE_PARENT,
  2222. .ops = &clk_branch2_ops,
  2223. },
  2224. },
  2225. };
  2226. static struct clk_branch camss_csiphy2_3p_clk = {
  2227. .halt_reg = 0x3274,
  2228. .clkr = {
  2229. .enable_reg = 0x3274,
  2230. .enable_mask = BIT(0),
  2231. .hw.init = &(struct clk_init_data){
  2232. .name = "camss_csiphy2_3p_clk",
  2233. .parent_hws = (const struct clk_hw*[]){
  2234. &csiphy2_3p_clk_src.clkr.hw
  2235. },
  2236. .num_parents = 1,
  2237. .flags = CLK_SET_RATE_PARENT,
  2238. .ops = &clk_branch2_ops,
  2239. },
  2240. },
  2241. };
  2242. static struct clk_branch camss_jpeg0_clk = {
  2243. .halt_reg = 0x35a8,
  2244. .clkr = {
  2245. .enable_reg = 0x35a8,
  2246. .enable_mask = BIT(0),
  2247. .hw.init = &(struct clk_init_data){
  2248. .name = "camss_jpeg0_clk",
  2249. .parent_hws = (const struct clk_hw*[]){
  2250. &jpeg0_clk_src.clkr.hw
  2251. },
  2252. .num_parents = 1,
  2253. .flags = CLK_SET_RATE_PARENT,
  2254. .ops = &clk_branch2_ops,
  2255. },
  2256. },
  2257. };
  2258. static struct clk_branch camss_jpeg2_clk = {
  2259. .halt_reg = 0x35b0,
  2260. .clkr = {
  2261. .enable_reg = 0x35b0,
  2262. .enable_mask = BIT(0),
  2263. .hw.init = &(struct clk_init_data){
  2264. .name = "camss_jpeg2_clk",
  2265. .parent_hws = (const struct clk_hw*[]){
  2266. &jpeg2_clk_src.clkr.hw
  2267. },
  2268. .num_parents = 1,
  2269. .flags = CLK_SET_RATE_PARENT,
  2270. .ops = &clk_branch2_ops,
  2271. },
  2272. },
  2273. };
  2274. static struct clk_branch camss_jpeg_dma_clk = {
  2275. .halt_reg = 0x35c0,
  2276. .clkr = {
  2277. .enable_reg = 0x35c0,
  2278. .enable_mask = BIT(0),
  2279. .hw.init = &(struct clk_init_data){
  2280. .name = "camss_jpeg_dma_clk",
  2281. .parent_hws = (const struct clk_hw*[]){
  2282. &jpeg_dma_clk_src.clkr.hw
  2283. },
  2284. .num_parents = 1,
  2285. .flags = CLK_SET_RATE_PARENT,
  2286. .ops = &clk_branch2_ops,
  2287. },
  2288. },
  2289. };
  2290. static struct clk_branch camss_jpeg_ahb_clk = {
  2291. .halt_reg = 0x35b4,
  2292. .clkr = {
  2293. .enable_reg = 0x35b4,
  2294. .enable_mask = BIT(0),
  2295. .hw.init = &(struct clk_init_data){
  2296. .name = "camss_jpeg_ahb_clk",
  2297. .parent_hws = (const struct clk_hw*[]){
  2298. &ahb_clk_src.clkr.hw
  2299. },
  2300. .num_parents = 1,
  2301. .flags = CLK_SET_RATE_PARENT,
  2302. .ops = &clk_branch2_ops,
  2303. },
  2304. },
  2305. };
  2306. static struct clk_branch camss_jpeg_axi_clk = {
  2307. .halt_reg = 0x35b8,
  2308. .clkr = {
  2309. .enable_reg = 0x35b8,
  2310. .enable_mask = BIT(0),
  2311. .hw.init = &(struct clk_init_data){
  2312. .name = "camss_jpeg_axi_clk",
  2313. .parent_hws = (const struct clk_hw*[]){
  2314. &axi_clk_src.clkr.hw
  2315. },
  2316. .num_parents = 1,
  2317. .flags = CLK_SET_RATE_PARENT,
  2318. .ops = &clk_branch2_ops,
  2319. },
  2320. },
  2321. };
  2322. static struct clk_branch camss_vfe_ahb_clk = {
  2323. .halt_reg = 0x36b8,
  2324. .clkr = {
  2325. .enable_reg = 0x36b8,
  2326. .enable_mask = BIT(0),
  2327. .hw.init = &(struct clk_init_data){
  2328. .name = "camss_vfe_ahb_clk",
  2329. .parent_hws = (const struct clk_hw*[]){
  2330. &ahb_clk_src.clkr.hw
  2331. },
  2332. .num_parents = 1,
  2333. .flags = CLK_SET_RATE_PARENT,
  2334. .ops = &clk_branch2_ops,
  2335. },
  2336. },
  2337. };
  2338. static struct clk_branch camss_vfe_axi_clk = {
  2339. .halt_reg = 0x36bc,
  2340. .clkr = {
  2341. .enable_reg = 0x36bc,
  2342. .enable_mask = BIT(0),
  2343. .hw.init = &(struct clk_init_data){
  2344. .name = "camss_vfe_axi_clk",
  2345. .parent_hws = (const struct clk_hw*[]){
  2346. &axi_clk_src.clkr.hw
  2347. },
  2348. .num_parents = 1,
  2349. .flags = CLK_SET_RATE_PARENT,
  2350. .ops = &clk_branch2_ops,
  2351. },
  2352. },
  2353. };
  2354. static struct clk_branch camss_vfe0_clk = {
  2355. .halt_reg = 0x36a8,
  2356. .clkr = {
  2357. .enable_reg = 0x36a8,
  2358. .enable_mask = BIT(0),
  2359. .hw.init = &(struct clk_init_data){
  2360. .name = "camss_vfe0_clk",
  2361. .parent_hws = (const struct clk_hw*[]){
  2362. &vfe0_clk_src.clkr.hw
  2363. },
  2364. .num_parents = 1,
  2365. .flags = CLK_SET_RATE_PARENT,
  2366. .ops = &clk_branch2_ops,
  2367. },
  2368. },
  2369. };
  2370. static struct clk_branch camss_vfe0_stream_clk = {
  2371. .halt_reg = 0x3720,
  2372. .clkr = {
  2373. .enable_reg = 0x3720,
  2374. .enable_mask = BIT(0),
  2375. .hw.init = &(struct clk_init_data){
  2376. .name = "camss_vfe0_stream_clk",
  2377. .parent_hws = (const struct clk_hw*[]){
  2378. &vfe0_clk_src.clkr.hw
  2379. },
  2380. .num_parents = 1,
  2381. .flags = CLK_SET_RATE_PARENT,
  2382. .ops = &clk_branch2_ops,
  2383. },
  2384. },
  2385. };
  2386. static struct clk_branch camss_vfe0_ahb_clk = {
  2387. .halt_reg = 0x3668,
  2388. .clkr = {
  2389. .enable_reg = 0x3668,
  2390. .enable_mask = BIT(0),
  2391. .hw.init = &(struct clk_init_data){
  2392. .name = "camss_vfe0_ahb_clk",
  2393. .parent_hws = (const struct clk_hw*[]){
  2394. &ahb_clk_src.clkr.hw
  2395. },
  2396. .num_parents = 1,
  2397. .flags = CLK_SET_RATE_PARENT,
  2398. .ops = &clk_branch2_ops,
  2399. },
  2400. },
  2401. };
  2402. static struct clk_branch camss_vfe1_clk = {
  2403. .halt_reg = 0x36ac,
  2404. .clkr = {
  2405. .enable_reg = 0x36ac,
  2406. .enable_mask = BIT(0),
  2407. .hw.init = &(struct clk_init_data){
  2408. .name = "camss_vfe1_clk",
  2409. .parent_hws = (const struct clk_hw*[]){
  2410. &vfe1_clk_src.clkr.hw
  2411. },
  2412. .num_parents = 1,
  2413. .flags = CLK_SET_RATE_PARENT,
  2414. .ops = &clk_branch2_ops,
  2415. },
  2416. },
  2417. };
  2418. static struct clk_branch camss_vfe1_stream_clk = {
  2419. .halt_reg = 0x3724,
  2420. .clkr = {
  2421. .enable_reg = 0x3724,
  2422. .enable_mask = BIT(0),
  2423. .hw.init = &(struct clk_init_data){
  2424. .name = "camss_vfe1_stream_clk",
  2425. .parent_hws = (const struct clk_hw*[]){
  2426. &vfe1_clk_src.clkr.hw
  2427. },
  2428. .num_parents = 1,
  2429. .flags = CLK_SET_RATE_PARENT,
  2430. .ops = &clk_branch2_ops,
  2431. },
  2432. },
  2433. };
  2434. static struct clk_branch camss_vfe1_ahb_clk = {
  2435. .halt_reg = 0x3678,
  2436. .clkr = {
  2437. .enable_reg = 0x3678,
  2438. .enable_mask = BIT(0),
  2439. .hw.init = &(struct clk_init_data){
  2440. .name = "camss_vfe1_ahb_clk",
  2441. .parent_hws = (const struct clk_hw*[]){
  2442. &ahb_clk_src.clkr.hw
  2443. },
  2444. .num_parents = 1,
  2445. .flags = CLK_SET_RATE_PARENT,
  2446. .ops = &clk_branch2_ops,
  2447. },
  2448. },
  2449. };
  2450. static struct clk_branch camss_csi_vfe0_clk = {
  2451. .halt_reg = 0x3704,
  2452. .clkr = {
  2453. .enable_reg = 0x3704,
  2454. .enable_mask = BIT(0),
  2455. .hw.init = &(struct clk_init_data){
  2456. .name = "camss_csi_vfe0_clk",
  2457. .parent_hws = (const struct clk_hw*[]){
  2458. &vfe0_clk_src.clkr.hw
  2459. },
  2460. .num_parents = 1,
  2461. .flags = CLK_SET_RATE_PARENT,
  2462. .ops = &clk_branch2_ops,
  2463. },
  2464. },
  2465. };
  2466. static struct clk_branch camss_csi_vfe1_clk = {
  2467. .halt_reg = 0x3714,
  2468. .clkr = {
  2469. .enable_reg = 0x3714,
  2470. .enable_mask = BIT(0),
  2471. .hw.init = &(struct clk_init_data){
  2472. .name = "camss_csi_vfe1_clk",
  2473. .parent_hws = (const struct clk_hw*[]){
  2474. &vfe1_clk_src.clkr.hw
  2475. },
  2476. .num_parents = 1,
  2477. .flags = CLK_SET_RATE_PARENT,
  2478. .ops = &clk_branch2_ops,
  2479. },
  2480. },
  2481. };
  2482. static struct clk_branch camss_cpp_vbif_ahb_clk = {
  2483. .halt_reg = 0x36c8,
  2484. .clkr = {
  2485. .enable_reg = 0x36c8,
  2486. .enable_mask = BIT(0),
  2487. .hw.init = &(struct clk_init_data){
  2488. .name = "camss_cpp_vbif_ahb_clk",
  2489. .parent_hws = (const struct clk_hw*[]){
  2490. &ahb_clk_src.clkr.hw
  2491. },
  2492. .num_parents = 1,
  2493. .flags = CLK_SET_RATE_PARENT,
  2494. .ops = &clk_branch2_ops,
  2495. },
  2496. },
  2497. };
  2498. static struct clk_branch camss_cpp_axi_clk = {
  2499. .halt_reg = 0x36c4,
  2500. .clkr = {
  2501. .enable_reg = 0x36c4,
  2502. .enable_mask = BIT(0),
  2503. .hw.init = &(struct clk_init_data){
  2504. .name = "camss_cpp_axi_clk",
  2505. .parent_hws = (const struct clk_hw*[]){
  2506. &axi_clk_src.clkr.hw
  2507. },
  2508. .num_parents = 1,
  2509. .flags = CLK_SET_RATE_PARENT,
  2510. .ops = &clk_branch2_ops,
  2511. },
  2512. },
  2513. };
  2514. static struct clk_branch camss_cpp_clk = {
  2515. .halt_reg = 0x36b0,
  2516. .clkr = {
  2517. .enable_reg = 0x36b0,
  2518. .enable_mask = BIT(0),
  2519. .hw.init = &(struct clk_init_data){
  2520. .name = "camss_cpp_clk",
  2521. .parent_hws = (const struct clk_hw*[]){
  2522. &cpp_clk_src.clkr.hw
  2523. },
  2524. .num_parents = 1,
  2525. .flags = CLK_SET_RATE_PARENT,
  2526. .ops = &clk_branch2_ops,
  2527. },
  2528. },
  2529. };
  2530. static struct clk_branch camss_cpp_ahb_clk = {
  2531. .halt_reg = 0x36b4,
  2532. .clkr = {
  2533. .enable_reg = 0x36b4,
  2534. .enable_mask = BIT(0),
  2535. .hw.init = &(struct clk_init_data){
  2536. .name = "camss_cpp_ahb_clk",
  2537. .parent_hws = (const struct clk_hw*[]){
  2538. &ahb_clk_src.clkr.hw
  2539. },
  2540. .num_parents = 1,
  2541. .flags = CLK_SET_RATE_PARENT,
  2542. .ops = &clk_branch2_ops,
  2543. },
  2544. },
  2545. };
  2546. static struct clk_branch camss_csi0_clk = {
  2547. .halt_reg = 0x30b4,
  2548. .clkr = {
  2549. .enable_reg = 0x30b4,
  2550. .enable_mask = BIT(0),
  2551. .hw.init = &(struct clk_init_data){
  2552. .name = "camss_csi0_clk",
  2553. .parent_hws = (const struct clk_hw*[]){
  2554. &csi0_clk_src.clkr.hw
  2555. },
  2556. .num_parents = 1,
  2557. .flags = CLK_SET_RATE_PARENT,
  2558. .ops = &clk_branch2_ops,
  2559. },
  2560. },
  2561. };
  2562. static struct clk_branch camss_csi0_ahb_clk = {
  2563. .halt_reg = 0x30bc,
  2564. .clkr = {
  2565. .enable_reg = 0x30bc,
  2566. .enable_mask = BIT(0),
  2567. .hw.init = &(struct clk_init_data){
  2568. .name = "camss_csi0_ahb_clk",
  2569. .parent_hws = (const struct clk_hw*[]){
  2570. &ahb_clk_src.clkr.hw
  2571. },
  2572. .num_parents = 1,
  2573. .flags = CLK_SET_RATE_PARENT,
  2574. .ops = &clk_branch2_ops,
  2575. },
  2576. },
  2577. };
  2578. static struct clk_branch camss_csi0phy_clk = {
  2579. .halt_reg = 0x30c4,
  2580. .clkr = {
  2581. .enable_reg = 0x30c4,
  2582. .enable_mask = BIT(0),
  2583. .hw.init = &(struct clk_init_data){
  2584. .name = "camss_csi0phy_clk",
  2585. .parent_hws = (const struct clk_hw*[]){
  2586. &csi0_clk_src.clkr.hw
  2587. },
  2588. .num_parents = 1,
  2589. .flags = CLK_SET_RATE_PARENT,
  2590. .ops = &clk_branch2_ops,
  2591. },
  2592. },
  2593. };
  2594. static struct clk_branch camss_csi0rdi_clk = {
  2595. .halt_reg = 0x30d4,
  2596. .clkr = {
  2597. .enable_reg = 0x30d4,
  2598. .enable_mask = BIT(0),
  2599. .hw.init = &(struct clk_init_data){
  2600. .name = "camss_csi0rdi_clk",
  2601. .parent_hws = (const struct clk_hw*[]){
  2602. &csi0_clk_src.clkr.hw
  2603. },
  2604. .num_parents = 1,
  2605. .flags = CLK_SET_RATE_PARENT,
  2606. .ops = &clk_branch2_ops,
  2607. },
  2608. },
  2609. };
  2610. static struct clk_branch camss_csi0pix_clk = {
  2611. .halt_reg = 0x30e4,
  2612. .clkr = {
  2613. .enable_reg = 0x30e4,
  2614. .enable_mask = BIT(0),
  2615. .hw.init = &(struct clk_init_data){
  2616. .name = "camss_csi0pix_clk",
  2617. .parent_hws = (const struct clk_hw*[]){
  2618. &csi0_clk_src.clkr.hw
  2619. },
  2620. .num_parents = 1,
  2621. .flags = CLK_SET_RATE_PARENT,
  2622. .ops = &clk_branch2_ops,
  2623. },
  2624. },
  2625. };
  2626. static struct clk_branch camss_csi1_clk = {
  2627. .halt_reg = 0x3124,
  2628. .clkr = {
  2629. .enable_reg = 0x3124,
  2630. .enable_mask = BIT(0),
  2631. .hw.init = &(struct clk_init_data){
  2632. .name = "camss_csi1_clk",
  2633. .parent_hws = (const struct clk_hw*[]){
  2634. &csi1_clk_src.clkr.hw
  2635. },
  2636. .num_parents = 1,
  2637. .flags = CLK_SET_RATE_PARENT,
  2638. .ops = &clk_branch2_ops,
  2639. },
  2640. },
  2641. };
  2642. static struct clk_branch camss_csi1_ahb_clk = {
  2643. .halt_reg = 0x3128,
  2644. .clkr = {
  2645. .enable_reg = 0x3128,
  2646. .enable_mask = BIT(0),
  2647. .hw.init = &(struct clk_init_data){
  2648. .name = "camss_csi1_ahb_clk",
  2649. .parent_hws = (const struct clk_hw*[]){
  2650. &ahb_clk_src.clkr.hw
  2651. },
  2652. .num_parents = 1,
  2653. .flags = CLK_SET_RATE_PARENT,
  2654. .ops = &clk_branch2_ops,
  2655. },
  2656. },
  2657. };
  2658. static struct clk_branch camss_csi1phy_clk = {
  2659. .halt_reg = 0x3134,
  2660. .clkr = {
  2661. .enable_reg = 0x3134,
  2662. .enable_mask = BIT(0),
  2663. .hw.init = &(struct clk_init_data){
  2664. .name = "camss_csi1phy_clk",
  2665. .parent_hws = (const struct clk_hw*[]){
  2666. &csi1_clk_src.clkr.hw
  2667. },
  2668. .num_parents = 1,
  2669. .flags = CLK_SET_RATE_PARENT,
  2670. .ops = &clk_branch2_ops,
  2671. },
  2672. },
  2673. };
  2674. static struct clk_branch camss_csi1rdi_clk = {
  2675. .halt_reg = 0x3144,
  2676. .clkr = {
  2677. .enable_reg = 0x3144,
  2678. .enable_mask = BIT(0),
  2679. .hw.init = &(struct clk_init_data){
  2680. .name = "camss_csi1rdi_clk",
  2681. .parent_hws = (const struct clk_hw*[]){
  2682. &csi1_clk_src.clkr.hw
  2683. },
  2684. .num_parents = 1,
  2685. .flags = CLK_SET_RATE_PARENT,
  2686. .ops = &clk_branch2_ops,
  2687. },
  2688. },
  2689. };
  2690. static struct clk_branch camss_csi1pix_clk = {
  2691. .halt_reg = 0x3154,
  2692. .clkr = {
  2693. .enable_reg = 0x3154,
  2694. .enable_mask = BIT(0),
  2695. .hw.init = &(struct clk_init_data){
  2696. .name = "camss_csi1pix_clk",
  2697. .parent_hws = (const struct clk_hw*[]){
  2698. &csi1_clk_src.clkr.hw
  2699. },
  2700. .num_parents = 1,
  2701. .flags = CLK_SET_RATE_PARENT,
  2702. .ops = &clk_branch2_ops,
  2703. },
  2704. },
  2705. };
  2706. static struct clk_branch camss_csi2_clk = {
  2707. .halt_reg = 0x3184,
  2708. .clkr = {
  2709. .enable_reg = 0x3184,
  2710. .enable_mask = BIT(0),
  2711. .hw.init = &(struct clk_init_data){
  2712. .name = "camss_csi2_clk",
  2713. .parent_hws = (const struct clk_hw*[]){
  2714. &csi2_clk_src.clkr.hw
  2715. },
  2716. .num_parents = 1,
  2717. .flags = CLK_SET_RATE_PARENT,
  2718. .ops = &clk_branch2_ops,
  2719. },
  2720. },
  2721. };
  2722. static struct clk_branch camss_csi2_ahb_clk = {
  2723. .halt_reg = 0x3188,
  2724. .clkr = {
  2725. .enable_reg = 0x3188,
  2726. .enable_mask = BIT(0),
  2727. .hw.init = &(struct clk_init_data){
  2728. .name = "camss_csi2_ahb_clk",
  2729. .parent_hws = (const struct clk_hw*[]){
  2730. &ahb_clk_src.clkr.hw
  2731. },
  2732. .num_parents = 1,
  2733. .flags = CLK_SET_RATE_PARENT,
  2734. .ops = &clk_branch2_ops,
  2735. },
  2736. },
  2737. };
  2738. static struct clk_branch camss_csi2phy_clk = {
  2739. .halt_reg = 0x3194,
  2740. .clkr = {
  2741. .enable_reg = 0x3194,
  2742. .enable_mask = BIT(0),
  2743. .hw.init = &(struct clk_init_data){
  2744. .name = "camss_csi2phy_clk",
  2745. .parent_hws = (const struct clk_hw*[]){
  2746. &csi2_clk_src.clkr.hw
  2747. },
  2748. .num_parents = 1,
  2749. .flags = CLK_SET_RATE_PARENT,
  2750. .ops = &clk_branch2_ops,
  2751. },
  2752. },
  2753. };
  2754. static struct clk_branch camss_csi2rdi_clk = {
  2755. .halt_reg = 0x31a4,
  2756. .clkr = {
  2757. .enable_reg = 0x31a4,
  2758. .enable_mask = BIT(0),
  2759. .hw.init = &(struct clk_init_data){
  2760. .name = "camss_csi2rdi_clk",
  2761. .parent_hws = (const struct clk_hw*[]){
  2762. &csi2_clk_src.clkr.hw
  2763. },
  2764. .num_parents = 1,
  2765. .flags = CLK_SET_RATE_PARENT,
  2766. .ops = &clk_branch2_ops,
  2767. },
  2768. },
  2769. };
  2770. static struct clk_branch camss_csi2pix_clk = {
  2771. .halt_reg = 0x31b4,
  2772. .clkr = {
  2773. .enable_reg = 0x31b4,
  2774. .enable_mask = BIT(0),
  2775. .hw.init = &(struct clk_init_data){
  2776. .name = "camss_csi2pix_clk",
  2777. .parent_hws = (const struct clk_hw*[]){
  2778. &csi2_clk_src.clkr.hw
  2779. },
  2780. .num_parents = 1,
  2781. .flags = CLK_SET_RATE_PARENT,
  2782. .ops = &clk_branch2_ops,
  2783. },
  2784. },
  2785. };
  2786. static struct clk_branch camss_csi3_clk = {
  2787. .halt_reg = 0x31e4,
  2788. .clkr = {
  2789. .enable_reg = 0x31e4,
  2790. .enable_mask = BIT(0),
  2791. .hw.init = &(struct clk_init_data){
  2792. .name = "camss_csi3_clk",
  2793. .parent_hws = (const struct clk_hw*[]){
  2794. &csi3_clk_src.clkr.hw
  2795. },
  2796. .num_parents = 1,
  2797. .flags = CLK_SET_RATE_PARENT,
  2798. .ops = &clk_branch2_ops,
  2799. },
  2800. },
  2801. };
  2802. static struct clk_branch camss_csi3_ahb_clk = {
  2803. .halt_reg = 0x31e8,
  2804. .clkr = {
  2805. .enable_reg = 0x31e8,
  2806. .enable_mask = BIT(0),
  2807. .hw.init = &(struct clk_init_data){
  2808. .name = "camss_csi3_ahb_clk",
  2809. .parent_hws = (const struct clk_hw*[]){
  2810. &ahb_clk_src.clkr.hw
  2811. },
  2812. .num_parents = 1,
  2813. .flags = CLK_SET_RATE_PARENT,
  2814. .ops = &clk_branch2_ops,
  2815. },
  2816. },
  2817. };
  2818. static struct clk_branch camss_csi3phy_clk = {
  2819. .halt_reg = 0x31f4,
  2820. .clkr = {
  2821. .enable_reg = 0x31f4,
  2822. .enable_mask = BIT(0),
  2823. .hw.init = &(struct clk_init_data){
  2824. .name = "camss_csi3phy_clk",
  2825. .parent_hws = (const struct clk_hw*[]){
  2826. &csi3_clk_src.clkr.hw
  2827. },
  2828. .num_parents = 1,
  2829. .flags = CLK_SET_RATE_PARENT,
  2830. .ops = &clk_branch2_ops,
  2831. },
  2832. },
  2833. };
  2834. static struct clk_branch camss_csi3rdi_clk = {
  2835. .halt_reg = 0x3204,
  2836. .clkr = {
  2837. .enable_reg = 0x3204,
  2838. .enable_mask = BIT(0),
  2839. .hw.init = &(struct clk_init_data){
  2840. .name = "camss_csi3rdi_clk",
  2841. .parent_hws = (const struct clk_hw*[]){
  2842. &csi3_clk_src.clkr.hw
  2843. },
  2844. .num_parents = 1,
  2845. .flags = CLK_SET_RATE_PARENT,
  2846. .ops = &clk_branch2_ops,
  2847. },
  2848. },
  2849. };
  2850. static struct clk_branch camss_csi3pix_clk = {
  2851. .halt_reg = 0x3214,
  2852. .clkr = {
  2853. .enable_reg = 0x3214,
  2854. .enable_mask = BIT(0),
  2855. .hw.init = &(struct clk_init_data){
  2856. .name = "camss_csi3pix_clk",
  2857. .parent_hws = (const struct clk_hw*[]){
  2858. &csi3_clk_src.clkr.hw
  2859. },
  2860. .num_parents = 1,
  2861. .flags = CLK_SET_RATE_PARENT,
  2862. .ops = &clk_branch2_ops,
  2863. },
  2864. },
  2865. };
  2866. static struct clk_branch camss_ispif_ahb_clk = {
  2867. .halt_reg = 0x3224,
  2868. .clkr = {
  2869. .enable_reg = 0x3224,
  2870. .enable_mask = BIT(0),
  2871. .hw.init = &(struct clk_init_data){
  2872. .name = "camss_ispif_ahb_clk",
  2873. .parent_hws = (const struct clk_hw*[]){
  2874. &ahb_clk_src.clkr.hw
  2875. },
  2876. .num_parents = 1,
  2877. .flags = CLK_SET_RATE_PARENT,
  2878. .ops = &clk_branch2_ops,
  2879. },
  2880. },
  2881. };
  2882. static struct clk_branch fd_core_clk = {
  2883. .halt_reg = 0x3b68,
  2884. .clkr = {
  2885. .enable_reg = 0x3b68,
  2886. .enable_mask = BIT(0),
  2887. .hw.init = &(struct clk_init_data){
  2888. .name = "fd_core_clk",
  2889. .parent_hws = (const struct clk_hw*[]){
  2890. &fd_core_clk_src.clkr.hw
  2891. },
  2892. .num_parents = 1,
  2893. .flags = CLK_SET_RATE_PARENT,
  2894. .ops = &clk_branch2_ops,
  2895. },
  2896. },
  2897. };
  2898. static struct clk_branch fd_core_uar_clk = {
  2899. .halt_reg = 0x3b6c,
  2900. .clkr = {
  2901. .enable_reg = 0x3b6c,
  2902. .enable_mask = BIT(0),
  2903. .hw.init = &(struct clk_init_data){
  2904. .name = "fd_core_uar_clk",
  2905. .parent_hws = (const struct clk_hw*[]){
  2906. &fd_core_clk_src.clkr.hw
  2907. },
  2908. .num_parents = 1,
  2909. .flags = CLK_SET_RATE_PARENT,
  2910. .ops = &clk_branch2_ops,
  2911. },
  2912. },
  2913. };
  2914. static struct clk_branch fd_ahb_clk = {
  2915. .halt_reg = 0x3ba74,
  2916. .clkr = {
  2917. .enable_reg = 0x3ba74,
  2918. .enable_mask = BIT(0),
  2919. .hw.init = &(struct clk_init_data){
  2920. .name = "fd_ahb_clk",
  2921. .parent_hws = (const struct clk_hw*[]){
  2922. &ahb_clk_src.clkr.hw
  2923. },
  2924. .num_parents = 1,
  2925. .flags = CLK_SET_RATE_PARENT,
  2926. .ops = &clk_branch2_ops,
  2927. },
  2928. },
  2929. };
  2930. static struct clk_hw *mmcc_msm8996_hws[] = {
  2931. &gpll0_div.hw,
  2932. };
  2933. static struct gdsc mmagic_bimc_gdsc = {
  2934. .gdscr = 0x529c,
  2935. .pd = {
  2936. .name = "mmagic_bimc",
  2937. },
  2938. .pwrsts = PWRSTS_OFF_ON,
  2939. .flags = ALWAYS_ON,
  2940. };
  2941. static struct gdsc mmagic_video_gdsc = {
  2942. .gdscr = 0x119c,
  2943. .gds_hw_ctrl = 0x120c,
  2944. .pd = {
  2945. .name = "mmagic_video",
  2946. },
  2947. .pwrsts = PWRSTS_OFF_ON,
  2948. .flags = VOTABLE | ALWAYS_ON,
  2949. };
  2950. static struct gdsc mmagic_mdss_gdsc = {
  2951. .gdscr = 0x247c,
  2952. .gds_hw_ctrl = 0x2480,
  2953. .pd = {
  2954. .name = "mmagic_mdss",
  2955. },
  2956. .pwrsts = PWRSTS_OFF_ON,
  2957. .flags = VOTABLE | ALWAYS_ON,
  2958. };
  2959. static struct gdsc mmagic_camss_gdsc = {
  2960. .gdscr = 0x3c4c,
  2961. .gds_hw_ctrl = 0x3c50,
  2962. .pd = {
  2963. .name = "mmagic_camss",
  2964. },
  2965. .pwrsts = PWRSTS_OFF_ON,
  2966. .flags = VOTABLE | ALWAYS_ON,
  2967. };
  2968. static struct gdsc venus_gdsc = {
  2969. .gdscr = 0x1024,
  2970. .cxcs = (unsigned int []){ 0x1028, 0x1034, 0x1038 },
  2971. .cxc_count = 3,
  2972. .pd = {
  2973. .name = "venus",
  2974. },
  2975. .parent = &mmagic_video_gdsc.pd,
  2976. .pwrsts = PWRSTS_OFF_ON,
  2977. };
  2978. static struct gdsc venus_core0_gdsc = {
  2979. .gdscr = 0x1040,
  2980. .cxcs = (unsigned int []){ 0x1048 },
  2981. .cxc_count = 1,
  2982. .pd = {
  2983. .name = "venus_core0",
  2984. },
  2985. .parent = &venus_gdsc.pd,
  2986. .pwrsts = PWRSTS_OFF_ON,
  2987. .flags = HW_CTRL,
  2988. };
  2989. static struct gdsc venus_core1_gdsc = {
  2990. .gdscr = 0x1044,
  2991. .cxcs = (unsigned int []){ 0x104c },
  2992. .cxc_count = 1,
  2993. .pd = {
  2994. .name = "venus_core1",
  2995. },
  2996. .parent = &venus_gdsc.pd,
  2997. .pwrsts = PWRSTS_OFF_ON,
  2998. .flags = HW_CTRL,
  2999. };
  3000. static struct gdsc camss_gdsc = {
  3001. .gdscr = 0x34a0,
  3002. .cxcs = (unsigned int []){ 0x36bc, 0x36c4 },
  3003. .cxc_count = 2,
  3004. .pd = {
  3005. .name = "camss",
  3006. },
  3007. .parent = &mmagic_camss_gdsc.pd,
  3008. .pwrsts = PWRSTS_OFF_ON,
  3009. };
  3010. static struct gdsc vfe0_gdsc = {
  3011. .gdscr = 0x3664,
  3012. .cxcs = (unsigned int []){ 0x36a8 },
  3013. .cxc_count = 1,
  3014. .pd = {
  3015. .name = "vfe0",
  3016. },
  3017. .parent = &camss_gdsc.pd,
  3018. .pwrsts = PWRSTS_OFF_ON,
  3019. };
  3020. static struct gdsc vfe1_gdsc = {
  3021. .gdscr = 0x3674,
  3022. .cxcs = (unsigned int []){ 0x36ac },
  3023. .cxc_count = 1,
  3024. .pd = {
  3025. .name = "vfe1",
  3026. },
  3027. .parent = &camss_gdsc.pd,
  3028. .pwrsts = PWRSTS_OFF_ON,
  3029. };
  3030. static struct gdsc jpeg_gdsc = {
  3031. .gdscr = 0x35a4,
  3032. .cxcs = (unsigned int []){ 0x35a8, 0x35b0, 0x35c0, 0x35b8 },
  3033. .cxc_count = 4,
  3034. .pd = {
  3035. .name = "jpeg",
  3036. },
  3037. .parent = &camss_gdsc.pd,
  3038. .pwrsts = PWRSTS_OFF_ON,
  3039. };
  3040. static struct gdsc cpp_gdsc = {
  3041. .gdscr = 0x36d4,
  3042. .cxcs = (unsigned int []){ 0x36b0 },
  3043. .cxc_count = 1,
  3044. .pd = {
  3045. .name = "cpp",
  3046. },
  3047. .parent = &camss_gdsc.pd,
  3048. .pwrsts = PWRSTS_OFF_ON,
  3049. };
  3050. static struct gdsc fd_gdsc = {
  3051. .gdscr = 0x3b64,
  3052. .cxcs = (unsigned int []){ 0x3b68, 0x3b6c },
  3053. .cxc_count = 2,
  3054. .pd = {
  3055. .name = "fd",
  3056. },
  3057. .parent = &camss_gdsc.pd,
  3058. .pwrsts = PWRSTS_OFF_ON,
  3059. };
  3060. static struct gdsc mdss_gdsc = {
  3061. .gdscr = 0x2304,
  3062. .cxcs = (unsigned int []){ 0x2310, 0x231c },
  3063. .cxc_count = 2,
  3064. .pd = {
  3065. .name = "mdss",
  3066. },
  3067. .parent = &mmagic_mdss_gdsc.pd,
  3068. .pwrsts = PWRSTS_OFF_ON,
  3069. };
  3070. static struct gdsc gpu_gdsc = {
  3071. .gdscr = 0x4034,
  3072. .gds_hw_ctrl = 0x4038,
  3073. .pd = {
  3074. .name = "gpu",
  3075. },
  3076. .pwrsts = PWRSTS_OFF_ON,
  3077. .flags = VOTABLE,
  3078. };
  3079. static struct gdsc gpu_gx_gdsc = {
  3080. .gdscr = 0x4024,
  3081. .clamp_io_ctrl = 0x4300,
  3082. .cxcs = (unsigned int []){ 0x4028 },
  3083. .cxc_count = 1,
  3084. .pd = {
  3085. .name = "gpu_gx",
  3086. },
  3087. .pwrsts = PWRSTS_OFF_ON,
  3088. .parent = &gpu_gdsc.pd,
  3089. .flags = CLAMP_IO,
  3090. .supply = "vdd-gfx",
  3091. };
  3092. static struct clk_regmap *mmcc_msm8996_clocks[] = {
  3093. [MMPLL0_EARLY] = &mmpll0_early.clkr,
  3094. [MMPLL0_PLL] = &mmpll0.clkr,
  3095. [MMPLL1_EARLY] = &mmpll1_early.clkr,
  3096. [MMPLL1_PLL] = &mmpll1.clkr,
  3097. [MMPLL2_EARLY] = &mmpll2_early.clkr,
  3098. [MMPLL2_PLL] = &mmpll2.clkr,
  3099. [MMPLL3_EARLY] = &mmpll3_early.clkr,
  3100. [MMPLL3_PLL] = &mmpll3.clkr,
  3101. [MMPLL4_EARLY] = &mmpll4_early.clkr,
  3102. [MMPLL4_PLL] = &mmpll4.clkr,
  3103. [MMPLL5_EARLY] = &mmpll5_early.clkr,
  3104. [MMPLL5_PLL] = &mmpll5.clkr,
  3105. [MMPLL8_EARLY] = &mmpll8_early.clkr,
  3106. [MMPLL8_PLL] = &mmpll8.clkr,
  3107. [MMPLL9_EARLY] = &mmpll9_early.clkr,
  3108. [MMPLL9_PLL] = &mmpll9.clkr,
  3109. [AHB_CLK_SRC] = &ahb_clk_src.clkr,
  3110. [AXI_CLK_SRC] = &axi_clk_src.clkr,
  3111. [MAXI_CLK_SRC] = &maxi_clk_src.clkr,
  3112. [GFX3D_CLK_SRC] = &gfx3d_clk_src.rcg.clkr,
  3113. [RBBMTIMER_CLK_SRC] = &rbbmtimer_clk_src.clkr,
  3114. [ISENSE_CLK_SRC] = &isense_clk_src.clkr,
  3115. [RBCPR_CLK_SRC] = &rbcpr_clk_src.clkr,
  3116. [VIDEO_CORE_CLK_SRC] = &video_core_clk_src.clkr,
  3117. [VIDEO_SUBCORE0_CLK_SRC] = &video_subcore0_clk_src.clkr,
  3118. [VIDEO_SUBCORE1_CLK_SRC] = &video_subcore1_clk_src.clkr,
  3119. [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
  3120. [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
  3121. [MDP_CLK_SRC] = &mdp_clk_src.clkr,
  3122. [EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr,
  3123. [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
  3124. [HDMI_CLK_SRC] = &hdmi_clk_src.clkr,
  3125. [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
  3126. [BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
  3127. [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
  3128. [ESC1_CLK_SRC] = &esc1_clk_src.clkr,
  3129. [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
  3130. [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
  3131. [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
  3132. [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
  3133. [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
  3134. [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,
  3135. [CCI_CLK_SRC] = &cci_clk_src.clkr,
  3136. [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
  3137. [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
  3138. [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,
  3139. [CSIPHY0_3P_CLK_SRC] = &csiphy0_3p_clk_src.clkr,
  3140. [CSIPHY1_3P_CLK_SRC] = &csiphy1_3p_clk_src.clkr,
  3141. [CSIPHY2_3P_CLK_SRC] = &csiphy2_3p_clk_src.clkr,
  3142. [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
  3143. [JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr,
  3144. [JPEG_DMA_CLK_SRC] = &jpeg_dma_clk_src.clkr,
  3145. [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
  3146. [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
  3147. [CPP_CLK_SRC] = &cpp_clk_src.clkr,
  3148. [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
  3149. [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
  3150. [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
  3151. [CSI3_CLK_SRC] = &csi3_clk_src.clkr,
  3152. [FD_CORE_CLK_SRC] = &fd_core_clk_src.clkr,
  3153. [MMSS_MMAGIC_AHB_CLK] = &mmss_mmagic_ahb_clk.clkr,
  3154. [MMSS_MMAGIC_CFG_AHB_CLK] = &mmss_mmagic_cfg_ahb_clk.clkr,
  3155. [MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr,
  3156. [MMSS_MISC_CXO_CLK] = &mmss_misc_cxo_clk.clkr,
  3157. [MMSS_MMAGIC_MAXI_CLK] = &mmss_mmagic_maxi_clk.clkr,
  3158. [MMAGIC_CAMSS_AXI_CLK] = &mmagic_camss_axi_clk.clkr,
  3159. [MMAGIC_CAMSS_NOC_CFG_AHB_CLK] = &mmagic_camss_noc_cfg_ahb_clk.clkr,
  3160. [SMMU_VFE_AHB_CLK] = &smmu_vfe_ahb_clk.clkr,
  3161. [SMMU_VFE_AXI_CLK] = &smmu_vfe_axi_clk.clkr,
  3162. [SMMU_CPP_AHB_CLK] = &smmu_cpp_ahb_clk.clkr,
  3163. [SMMU_CPP_AXI_CLK] = &smmu_cpp_axi_clk.clkr,
  3164. [SMMU_JPEG_AHB_CLK] = &smmu_jpeg_ahb_clk.clkr,
  3165. [SMMU_JPEG_AXI_CLK] = &smmu_jpeg_axi_clk.clkr,
  3166. [MMAGIC_MDSS_AXI_CLK] = &mmagic_mdss_axi_clk.clkr,
  3167. [MMAGIC_MDSS_NOC_CFG_AHB_CLK] = &mmagic_mdss_noc_cfg_ahb_clk.clkr,
  3168. [SMMU_ROT_AHB_CLK] = &smmu_rot_ahb_clk.clkr,
  3169. [SMMU_ROT_AXI_CLK] = &smmu_rot_axi_clk.clkr,
  3170. [SMMU_MDP_AHB_CLK] = &smmu_mdp_ahb_clk.clkr,
  3171. [SMMU_MDP_AXI_CLK] = &smmu_mdp_axi_clk.clkr,
  3172. [MMAGIC_VIDEO_AXI_CLK] = &mmagic_video_axi_clk.clkr,
  3173. [MMAGIC_VIDEO_NOC_CFG_AHB_CLK] = &mmagic_video_noc_cfg_ahb_clk.clkr,
  3174. [SMMU_VIDEO_AHB_CLK] = &smmu_video_ahb_clk.clkr,
  3175. [SMMU_VIDEO_AXI_CLK] = &smmu_video_axi_clk.clkr,
  3176. [MMAGIC_BIMC_NOC_CFG_AHB_CLK] = &mmagic_bimc_noc_cfg_ahb_clk.clkr,
  3177. [GPU_GX_GFX3D_CLK] = &gpu_gx_gfx3d_clk.clkr,
  3178. [GPU_GX_RBBMTIMER_CLK] = &gpu_gx_rbbmtimer_clk.clkr,
  3179. [GPU_AHB_CLK] = &gpu_ahb_clk.clkr,
  3180. [GPU_AON_ISENSE_CLK] = &gpu_aon_isense_clk.clkr,
  3181. [VMEM_MAXI_CLK] = &vmem_maxi_clk.clkr,
  3182. [VMEM_AHB_CLK] = &vmem_ahb_clk.clkr,
  3183. [MMSS_RBCPR_CLK] = &mmss_rbcpr_clk.clkr,
  3184. [MMSS_RBCPR_AHB_CLK] = &mmss_rbcpr_ahb_clk.clkr,
  3185. [VIDEO_CORE_CLK] = &video_core_clk.clkr,
  3186. [VIDEO_AXI_CLK] = &video_axi_clk.clkr,
  3187. [VIDEO_MAXI_CLK] = &video_maxi_clk.clkr,
  3188. [VIDEO_AHB_CLK] = &video_ahb_clk.clkr,
  3189. [VIDEO_SUBCORE0_CLK] = &video_subcore0_clk.clkr,
  3190. [VIDEO_SUBCORE1_CLK] = &video_subcore1_clk.clkr,
  3191. [MDSS_AHB_CLK] = &mdss_ahb_clk.clkr,
  3192. [MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr,
  3193. [MDSS_AXI_CLK] = &mdss_axi_clk.clkr,
  3194. [MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr,
  3195. [MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr,
  3196. [MDSS_MDP_CLK] = &mdss_mdp_clk.clkr,
  3197. [MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr,
  3198. [MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr,
  3199. [MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr,
  3200. [MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr,
  3201. [MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr,
  3202. [MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr,
  3203. [MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr,
  3204. [CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr,
  3205. [CAMSS_AHB_CLK] = &camss_ahb_clk.clkr,
  3206. [CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr,
  3207. [CAMSS_GP0_CLK] = &camss_gp0_clk.clkr,
  3208. [CAMSS_GP1_CLK] = &camss_gp1_clk.clkr,
  3209. [CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr,
  3210. [CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr,
  3211. [CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr,
  3212. [CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr,
  3213. [CAMSS_CCI_CLK] = &camss_cci_clk.clkr,
  3214. [CAMSS_CCI_AHB_CLK] = &camss_cci_ahb_clk.clkr,
  3215. [CAMSS_CSI0PHYTIMER_CLK] = &camss_csi0phytimer_clk.clkr,
  3216. [CAMSS_CSI1PHYTIMER_CLK] = &camss_csi1phytimer_clk.clkr,
  3217. [CAMSS_CSI2PHYTIMER_CLK] = &camss_csi2phytimer_clk.clkr,
  3218. [CAMSS_CSIPHY0_3P_CLK] = &camss_csiphy0_3p_clk.clkr,
  3219. [CAMSS_CSIPHY1_3P_CLK] = &camss_csiphy1_3p_clk.clkr,
  3220. [CAMSS_CSIPHY2_3P_CLK] = &camss_csiphy2_3p_clk.clkr,
  3221. [CAMSS_JPEG0_CLK] = &camss_jpeg0_clk.clkr,
  3222. [CAMSS_JPEG2_CLK] = &camss_jpeg2_clk.clkr,
  3223. [CAMSS_JPEG_DMA_CLK] = &camss_jpeg_dma_clk.clkr,
  3224. [CAMSS_JPEG_AHB_CLK] = &camss_jpeg_ahb_clk.clkr,
  3225. [CAMSS_JPEG_AXI_CLK] = &camss_jpeg_axi_clk.clkr,
  3226. [CAMSS_VFE_AHB_CLK] = &camss_vfe_ahb_clk.clkr,
  3227. [CAMSS_VFE_AXI_CLK] = &camss_vfe_axi_clk.clkr,
  3228. [CAMSS_VFE0_CLK] = &camss_vfe0_clk.clkr,
  3229. [CAMSS_VFE0_STREAM_CLK] = &camss_vfe0_stream_clk.clkr,
  3230. [CAMSS_VFE0_AHB_CLK] = &camss_vfe0_ahb_clk.clkr,
  3231. [CAMSS_VFE1_CLK] = &camss_vfe1_clk.clkr,
  3232. [CAMSS_VFE1_STREAM_CLK] = &camss_vfe1_stream_clk.clkr,
  3233. [CAMSS_VFE1_AHB_CLK] = &camss_vfe1_ahb_clk.clkr,
  3234. [CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr,
  3235. [CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr,
  3236. [CAMSS_CPP_VBIF_AHB_CLK] = &camss_cpp_vbif_ahb_clk.clkr,
  3237. [CAMSS_CPP_AXI_CLK] = &camss_cpp_axi_clk.clkr,
  3238. [CAMSS_CPP_CLK] = &camss_cpp_clk.clkr,
  3239. [CAMSS_CPP_AHB_CLK] = &camss_cpp_ahb_clk.clkr,
  3240. [CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr,
  3241. [CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr,
  3242. [CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr,
  3243. [CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr,
  3244. [CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr,
  3245. [CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr,
  3246. [CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr,
  3247. [CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr,
  3248. [CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr,
  3249. [CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr,
  3250. [CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr,
  3251. [CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr,
  3252. [CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr,
  3253. [CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr,
  3254. [CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr,
  3255. [CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr,
  3256. [CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr,
  3257. [CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr,
  3258. [CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr,
  3259. [CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr,
  3260. [CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr,
  3261. [FD_CORE_CLK] = &fd_core_clk.clkr,
  3262. [FD_CORE_UAR_CLK] = &fd_core_uar_clk.clkr,
  3263. [FD_AHB_CLK] = &fd_ahb_clk.clkr,
  3264. };
  3265. static struct gdsc *mmcc_msm8996_gdscs[] = {
  3266. [MMAGIC_BIMC_GDSC] = &mmagic_bimc_gdsc,
  3267. [MMAGIC_VIDEO_GDSC] = &mmagic_video_gdsc,
  3268. [MMAGIC_MDSS_GDSC] = &mmagic_mdss_gdsc,
  3269. [MMAGIC_CAMSS_GDSC] = &mmagic_camss_gdsc,
  3270. [VENUS_GDSC] = &venus_gdsc,
  3271. [VENUS_CORE0_GDSC] = &venus_core0_gdsc,
  3272. [VENUS_CORE1_GDSC] = &venus_core1_gdsc,
  3273. [CAMSS_GDSC] = &camss_gdsc,
  3274. [VFE0_GDSC] = &vfe0_gdsc,
  3275. [VFE1_GDSC] = &vfe1_gdsc,
  3276. [JPEG_GDSC] = &jpeg_gdsc,
  3277. [CPP_GDSC] = &cpp_gdsc,
  3278. [FD_GDSC] = &fd_gdsc,
  3279. [MDSS_GDSC] = &mdss_gdsc,
  3280. [GPU_GDSC] = &gpu_gdsc,
  3281. [GPU_GX_GDSC] = &gpu_gx_gdsc,
  3282. };
  3283. static const struct qcom_reset_map mmcc_msm8996_resets[] = {
  3284. [MMAGICAHB_BCR] = { 0x5020 },
  3285. [MMAGIC_CFG_BCR] = { 0x5050 },
  3286. [MISC_BCR] = { 0x5010 },
  3287. [BTO_BCR] = { 0x5030 },
  3288. [MMAGICAXI_BCR] = { 0x5060 },
  3289. [MMAGICMAXI_BCR] = { 0x5070 },
  3290. [DSA_BCR] = { 0x50a0 },
  3291. [MMAGIC_CAMSS_BCR] = { 0x3c40 },
  3292. [THROTTLE_CAMSS_BCR] = { 0x3c30 },
  3293. [SMMU_VFE_BCR] = { 0x3c00 },
  3294. [SMMU_CPP_BCR] = { 0x3c10 },
  3295. [SMMU_JPEG_BCR] = { 0x3c20 },
  3296. [MMAGIC_MDSS_BCR] = { 0x2470 },
  3297. [THROTTLE_MDSS_BCR] = { 0x2460 },
  3298. [SMMU_ROT_BCR] = { 0x2440 },
  3299. [SMMU_MDP_BCR] = { 0x2450 },
  3300. [MMAGIC_VIDEO_BCR] = { 0x1190 },
  3301. [THROTTLE_VIDEO_BCR] = { 0x1180 },
  3302. [SMMU_VIDEO_BCR] = { 0x1170 },
  3303. [MMAGIC_BIMC_BCR] = { 0x5290 },
  3304. [GPU_GX_BCR] = { 0x4020 },
  3305. [GPU_BCR] = { 0x4030 },
  3306. [GPU_AON_BCR] = { 0x4040 },
  3307. [VMEM_BCR] = { 0x1200 },
  3308. [MMSS_RBCPR_BCR] = { 0x4080 },
  3309. [VIDEO_BCR] = { 0x1020 },
  3310. [MDSS_BCR] = { 0x2300 },
  3311. [CAMSS_TOP_BCR] = { 0x3480 },
  3312. [CAMSS_AHB_BCR] = { 0x3488 },
  3313. [CAMSS_MICRO_BCR] = { 0x3490 },
  3314. [CAMSS_CCI_BCR] = { 0x3340 },
  3315. [CAMSS_PHY0_BCR] = { 0x3020 },
  3316. [CAMSS_PHY1_BCR] = { 0x3050 },
  3317. [CAMSS_PHY2_BCR] = { 0x3080 },
  3318. [CAMSS_CSIPHY0_3P_BCR] = { 0x3230 },
  3319. [CAMSS_CSIPHY1_3P_BCR] = { 0x3250 },
  3320. [CAMSS_CSIPHY2_3P_BCR] = { 0x3270 },
  3321. [CAMSS_JPEG_BCR] = { 0x35a0 },
  3322. [CAMSS_VFE_BCR] = { 0x36a0 },
  3323. [CAMSS_VFE0_BCR] = { 0x3660 },
  3324. [CAMSS_VFE1_BCR] = { 0x3670 },
  3325. [CAMSS_CSI_VFE0_BCR] = { 0x3700 },
  3326. [CAMSS_CSI_VFE1_BCR] = { 0x3710 },
  3327. [CAMSS_CPP_TOP_BCR] = { 0x36c0 },
  3328. [CAMSS_CPP_BCR] = { 0x36d0 },
  3329. [CAMSS_CSI0_BCR] = { 0x30b0 },
  3330. [CAMSS_CSI0RDI_BCR] = { 0x30d0 },
  3331. [CAMSS_CSI0PIX_BCR] = { 0x30e0 },
  3332. [CAMSS_CSI1_BCR] = { 0x3120 },
  3333. [CAMSS_CSI1RDI_BCR] = { 0x3140 },
  3334. [CAMSS_CSI1PIX_BCR] = { 0x3150 },
  3335. [CAMSS_CSI2_BCR] = { 0x3180 },
  3336. [CAMSS_CSI2RDI_BCR] = { 0x31a0 },
  3337. [CAMSS_CSI2PIX_BCR] = { 0x31b0 },
  3338. [CAMSS_CSI3_BCR] = { 0x31e0 },
  3339. [CAMSS_CSI3RDI_BCR] = { 0x3200 },
  3340. [CAMSS_CSI3PIX_BCR] = { 0x3210 },
  3341. [CAMSS_ISPIF_BCR] = { 0x3220 },
  3342. [FD_BCR] = { 0x3b60 },
  3343. [MMSS_SPDM_RM_BCR] = { 0x300 },
  3344. };
  3345. static const struct regmap_config mmcc_msm8996_regmap_config = {
  3346. .reg_bits = 32,
  3347. .reg_stride = 4,
  3348. .val_bits = 32,
  3349. .max_register = 0xb008,
  3350. .fast_io = true,
  3351. };
  3352. static const struct qcom_cc_desc mmcc_msm8996_desc = {
  3353. .config = &mmcc_msm8996_regmap_config,
  3354. .clks = mmcc_msm8996_clocks,
  3355. .num_clks = ARRAY_SIZE(mmcc_msm8996_clocks),
  3356. .resets = mmcc_msm8996_resets,
  3357. .num_resets = ARRAY_SIZE(mmcc_msm8996_resets),
  3358. .gdscs = mmcc_msm8996_gdscs,
  3359. .num_gdscs = ARRAY_SIZE(mmcc_msm8996_gdscs),
  3360. .clk_hws = mmcc_msm8996_hws,
  3361. .num_clk_hws = ARRAY_SIZE(mmcc_msm8996_hws),
  3362. };
  3363. static const struct of_device_id mmcc_msm8996_match_table[] = {
  3364. { .compatible = "qcom,mmcc-msm8996" },
  3365. { }
  3366. };
  3367. MODULE_DEVICE_TABLE(of, mmcc_msm8996_match_table);
  3368. static int mmcc_msm8996_probe(struct platform_device *pdev)
  3369. {
  3370. struct regmap *regmap;
  3371. regmap = qcom_cc_map(pdev, &mmcc_msm8996_desc);
  3372. if (IS_ERR(regmap))
  3373. return PTR_ERR(regmap);
  3374. /* Disable the AHB DCD */
  3375. regmap_update_bits(regmap, 0x50d8, BIT(31), 0);
  3376. /* Disable the NoC FSM for mmss_mmagic_cfg_ahb_clk */
  3377. regmap_update_bits(regmap, 0x5054, BIT(15), 0);
  3378. return qcom_cc_really_probe(&pdev->dev, &mmcc_msm8996_desc, regmap);
  3379. }
  3380. static struct platform_driver mmcc_msm8996_driver = {
  3381. .probe = mmcc_msm8996_probe,
  3382. .driver = {
  3383. .name = "mmcc-msm8996",
  3384. .of_match_table = mmcc_msm8996_match_table,
  3385. },
  3386. };
  3387. module_platform_driver(mmcc_msm8996_driver);
  3388. MODULE_DESCRIPTION("QCOM MMCC MSM8996 Driver");
  3389. MODULE_LICENSE("GPL v2");
  3390. MODULE_ALIAS("platform:mmcc-msm8996");