gcc-msm8917.c 81 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (C) 2023 Otto Pflüger
  4. *
  5. * Based on gcc-msm8953.c:
  6. * Copyright 2021, The Linux Foundation. All rights reserved.
  7. * with parts taken from gcc-qcs404.c:
  8. * Copyright 2018, The Linux Foundation. All rights reserved.
  9. * and gcc-msm8939.c:
  10. * Copyright 2020 Linaro Limited
  11. * adapted with data from clock-gcc-8952.c in Qualcomm's msm-4.9 release:
  12. * Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
  13. */
  14. #include <linux/bitops.h>
  15. #include <linux/clk-provider.h>
  16. #include <linux/err.h>
  17. #include <linux/kernel.h>
  18. #include <linux/module.h>
  19. #include <linux/of.h>
  20. #include <linux/platform_device.h>
  21. #include <linux/regmap.h>
  22. #include <linux/reset-controller.h>
  23. #include <dt-bindings/clock/qcom,gcc-msm8917.h>
  24. #include "clk-alpha-pll.h"
  25. #include "clk-branch.h"
  26. #include "clk-pll.h"
  27. #include "clk-rcg.h"
  28. #include "common.h"
  29. #include "gdsc.h"
  30. #include "reset.h"
  31. enum {
  32. DT_XO,
  33. DT_SLEEP_CLK,
  34. DT_DSI0PLL,
  35. DT_DSI0PLL_BYTE,
  36. };
  37. enum {
  38. P_XO,
  39. P_SLEEP_CLK,
  40. P_GPLL0,
  41. P_GPLL3,
  42. P_GPLL4,
  43. P_GPLL6,
  44. P_DSI0PLL,
  45. P_DSI0PLL_BYTE,
  46. };
  47. static struct clk_alpha_pll gpll0_sleep_clk_src = {
  48. .offset = 0x21000,
  49. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  50. .clkr = {
  51. .enable_reg = 0x45008,
  52. .enable_mask = BIT(23),
  53. .enable_is_inverted = true,
  54. .hw.init = &(struct clk_init_data){
  55. .name = "gpll0_sleep_clk_src",
  56. .parent_data = &(const struct clk_parent_data) {
  57. .index = DT_XO,
  58. },
  59. .num_parents = 1,
  60. .ops = &clk_branch_simple_ops,
  61. },
  62. },
  63. };
  64. static struct clk_alpha_pll gpll0_early = {
  65. .offset = 0x21000,
  66. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  67. .clkr = {
  68. .enable_reg = 0x45000,
  69. .enable_mask = BIT(0),
  70. .hw.init = &(struct clk_init_data) {
  71. .name = "gpll0_early",
  72. .parent_hws = (const struct clk_hw*[]){
  73. &gpll0_sleep_clk_src.clkr.hw,
  74. },
  75. .num_parents = 1,
  76. .ops = &clk_alpha_pll_fixed_ops,
  77. },
  78. },
  79. };
  80. static struct clk_alpha_pll_postdiv gpll0 = {
  81. .offset = 0x21000,
  82. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  83. .clkr.hw.init = &(struct clk_init_data){
  84. .name = "gpll0",
  85. .parent_hws = (const struct clk_hw*[]){
  86. &gpll0_early.clkr.hw,
  87. },
  88. .num_parents = 1,
  89. .ops = &clk_alpha_pll_postdiv_ro_ops,
  90. },
  91. };
  92. static const struct pll_vco gpll3_p_vco[] = {
  93. { 700000000, 1400000000, 0 },
  94. };
  95. static const struct alpha_pll_config gpll3_early_config = {
  96. .l = 63,
  97. .config_ctl_val = 0x4001055b,
  98. .early_output_mask = 0,
  99. .post_div_mask = GENMASK(11, 8),
  100. .post_div_val = BIT(8),
  101. };
  102. static struct clk_alpha_pll gpll3_early = {
  103. .offset = 0x22000,
  104. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  105. .vco_table = gpll3_p_vco,
  106. .num_vco = ARRAY_SIZE(gpll3_p_vco),
  107. .flags = SUPPORTS_DYNAMIC_UPDATE,
  108. .clkr = {
  109. .hw.init = &(struct clk_init_data){
  110. .name = "gpll3_early",
  111. .parent_data = &(const struct clk_parent_data) {
  112. .index = DT_XO,
  113. },
  114. .num_parents = 1,
  115. .ops = &clk_alpha_pll_ops,
  116. },
  117. },
  118. };
  119. static struct clk_alpha_pll_postdiv gpll3 = {
  120. .offset = 0x22000,
  121. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  122. .clkr.hw.init = &(struct clk_init_data){
  123. .name = "gpll3",
  124. .parent_hws = (const struct clk_hw*[]){
  125. &gpll3_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 gpll4_early = {
  133. .offset = 0x24000,
  134. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  135. .clkr = {
  136. .enable_reg = 0x45000,
  137. .enable_mask = BIT(5),
  138. .hw.init = &(struct clk_init_data){
  139. .name = "gpll4_early",
  140. .parent_data = &(const struct clk_parent_data) {
  141. .index = DT_XO,
  142. },
  143. .num_parents = 1,
  144. .ops = &clk_alpha_pll_fixed_ops,
  145. },
  146. },
  147. };
  148. static struct clk_alpha_pll_postdiv gpll4 = {
  149. .offset = 0x24000,
  150. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  151. .clkr.hw.init = &(struct clk_init_data){
  152. .name = "gpll4",
  153. .parent_hws = (const struct clk_hw*[]){
  154. &gpll4_early.clkr.hw,
  155. },
  156. .num_parents = 1,
  157. .ops = &clk_alpha_pll_postdiv_ro_ops,
  158. },
  159. };
  160. static struct clk_pll gpll6_early = {
  161. .l_reg = 0x37004,
  162. .m_reg = 0x37008,
  163. .n_reg = 0x3700c,
  164. .config_reg = 0x37014,
  165. .mode_reg = 0x37000,
  166. .status_reg = 0x3701c,
  167. .status_bit = 17,
  168. .clkr.hw.init = &(struct clk_init_data){
  169. .name = "gpll6_early",
  170. .parent_data = &(const struct clk_parent_data) {
  171. .index = DT_XO,
  172. },
  173. .num_parents = 1,
  174. .ops = &clk_pll_ops,
  175. },
  176. };
  177. static struct clk_regmap gpll6 = {
  178. .enable_reg = 0x45000,
  179. .enable_mask = BIT(7),
  180. .hw.init = &(struct clk_init_data){
  181. .name = "gpll6",
  182. .parent_hws = (const struct clk_hw*[]){
  183. &gpll6_early.clkr.hw,
  184. },
  185. .num_parents = 1,
  186. .ops = &clk_pll_vote_ops,
  187. },
  188. };
  189. static const struct parent_map gcc_xo_gpll0_map[] = {
  190. { P_XO, 0 },
  191. { P_GPLL0, 1 },
  192. };
  193. static const struct parent_map gcc_xo_gpll0_out_aux_map[] = {
  194. { P_XO, 0 },
  195. { P_GPLL0, 2 },
  196. };
  197. static const struct clk_parent_data gcc_xo_gpll0_data[] = {
  198. { .index = DT_XO },
  199. { .hw = &gpll0.clkr.hw },
  200. };
  201. static const struct parent_map gcc_xo_gpll0_gpll6_sleep_map[] = {
  202. { P_XO, 0 },
  203. { P_GPLL0, 1 },
  204. { P_GPLL6, 2 },
  205. { P_SLEEP_CLK, 6 },
  206. };
  207. static const struct clk_parent_data gcc_xo_gpll0_gpll6_sleep_data[] = {
  208. { .index = DT_XO },
  209. { .hw = &gpll0.clkr.hw },
  210. { .hw = &gpll6.hw },
  211. { .index = DT_SLEEP_CLK },
  212. };
  213. static const struct parent_map gcc_xo_gpll0_gpll6_gpll4_map[] = {
  214. { P_XO, 0 },
  215. { P_GPLL0, 1 },
  216. { P_GPLL6, 2 },
  217. { P_GPLL4, 3 },
  218. };
  219. static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll4_data[] = {
  220. { .index = DT_XO },
  221. { .hw = &gpll0.clkr.hw },
  222. { .hw = &gpll6.hw },
  223. { .hw = &gpll4.clkr.hw },
  224. };
  225. static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
  226. F(19200000, P_XO, 1, 0, 0),
  227. F(50000000, P_GPLL0, 16, 0, 0),
  228. F(100000000, P_GPLL0, 8, 0, 0),
  229. F(133330000, P_GPLL0, 6, 0, 0),
  230. { }
  231. };
  232. static struct clk_rcg2 apss_ahb_clk_src = {
  233. .cmd_rcgr = 0x46000,
  234. .hid_width = 5,
  235. .freq_tbl = ftbl_apss_ahb_clk_src,
  236. .parent_map = gcc_xo_gpll0_map,
  237. .clkr.hw.init = &(struct clk_init_data) {
  238. .name = "apss_ahb_clk_src",
  239. .parent_data = gcc_xo_gpll0_data,
  240. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  241. .ops = &clk_rcg2_ops,
  242. }
  243. };
  244. static const struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
  245. F(19200000, P_XO, 1, 0, 0),
  246. F(50000000, P_GPLL0, 16, 0, 0),
  247. { }
  248. };
  249. static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
  250. .cmd_rcgr = 0x03000,
  251. .hid_width = 5,
  252. .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
  253. .parent_map = gcc_xo_gpll0_map,
  254. .clkr.hw.init = &(struct clk_init_data) {
  255. .name = "blsp1_qup2_i2c_apps_clk_src",
  256. .parent_data = gcc_xo_gpll0_data,
  257. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  258. .ops = &clk_rcg2_ops,
  259. }
  260. };
  261. static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
  262. .cmd_rcgr = 0x04000,
  263. .hid_width = 5,
  264. .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
  265. .parent_map = gcc_xo_gpll0_map,
  266. .clkr.hw.init = &(struct clk_init_data) {
  267. .name = "blsp1_qup3_i2c_apps_clk_src",
  268. .parent_data = gcc_xo_gpll0_data,
  269. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  270. .ops = &clk_rcg2_ops,
  271. }
  272. };
  273. static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
  274. .cmd_rcgr = 0x05000,
  275. .hid_width = 5,
  276. .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
  277. .parent_map = gcc_xo_gpll0_map,
  278. .clkr.hw.init = &(struct clk_init_data) {
  279. .name = "blsp1_qup4_i2c_apps_clk_src",
  280. .parent_data = gcc_xo_gpll0_data,
  281. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  282. .ops = &clk_rcg2_ops,
  283. }
  284. };
  285. static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
  286. .cmd_rcgr = 0x0c00c,
  287. .hid_width = 5,
  288. .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
  289. .parent_map = gcc_xo_gpll0_map,
  290. .clkr.hw.init = &(struct clk_init_data) {
  291. .name = "blsp2_qup1_i2c_apps_clk_src",
  292. .parent_data = gcc_xo_gpll0_data,
  293. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  294. .ops = &clk_rcg2_ops,
  295. }
  296. };
  297. static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
  298. .cmd_rcgr = 0x0d000,
  299. .hid_width = 5,
  300. .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
  301. .parent_map = gcc_xo_gpll0_map,
  302. .clkr.hw.init = &(struct clk_init_data) {
  303. .name = "blsp2_qup2_i2c_apps_clk_src",
  304. .parent_data = gcc_xo_gpll0_data,
  305. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  306. .ops = &clk_rcg2_ops,
  307. }
  308. };
  309. static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
  310. .cmd_rcgr = 0x0f000,
  311. .hid_width = 5,
  312. .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
  313. .parent_map = gcc_xo_gpll0_map,
  314. .clkr.hw.init = &(struct clk_init_data) {
  315. .name = "blsp2_qup3_i2c_apps_clk_src",
  316. .parent_data = gcc_xo_gpll0_data,
  317. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  318. .ops = &clk_rcg2_ops,
  319. }
  320. };
  321. static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = {
  322. F(960000, P_XO, 10, 1, 2),
  323. F(4800000, P_XO, 4, 0, 0),
  324. F(9600000, P_XO, 2, 0, 0),
  325. F(16000000, P_GPLL0, 10, 1, 5),
  326. F(19200000, P_XO, 1, 0, 0),
  327. F(25000000, P_GPLL0, 16, 1, 2),
  328. F(50000000, P_GPLL0, 16, 0, 0),
  329. { }
  330. };
  331. static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
  332. .cmd_rcgr = 0x03014,
  333. .hid_width = 5,
  334. .mnd_width = 8,
  335. .freq_tbl = ftbl_blsp_spi_apps_clk_src,
  336. .parent_map = gcc_xo_gpll0_map,
  337. .clkr.hw.init = &(struct clk_init_data) {
  338. .name = "blsp1_qup2_spi_apps_clk_src",
  339. .parent_data = gcc_xo_gpll0_data,
  340. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  341. .ops = &clk_rcg2_ops,
  342. }
  343. };
  344. static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
  345. .cmd_rcgr = 0x04024,
  346. .hid_width = 5,
  347. .mnd_width = 8,
  348. .freq_tbl = ftbl_blsp_spi_apps_clk_src,
  349. .parent_map = gcc_xo_gpll0_map,
  350. .clkr.hw.init = &(struct clk_init_data) {
  351. .name = "blsp1_qup3_spi_apps_clk_src",
  352. .parent_data = gcc_xo_gpll0_data,
  353. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  354. .ops = &clk_rcg2_ops,
  355. }
  356. };
  357. static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
  358. .cmd_rcgr = 0x05024,
  359. .hid_width = 5,
  360. .mnd_width = 8,
  361. .freq_tbl = ftbl_blsp_spi_apps_clk_src,
  362. .parent_map = gcc_xo_gpll0_map,
  363. .clkr.hw.init = &(struct clk_init_data) {
  364. .name = "blsp1_qup4_spi_apps_clk_src",
  365. .parent_data = gcc_xo_gpll0_data,
  366. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  367. .ops = &clk_rcg2_ops,
  368. }
  369. };
  370. static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
  371. .cmd_rcgr = 0x0c024,
  372. .hid_width = 5,
  373. .mnd_width = 8,
  374. .freq_tbl = ftbl_blsp_spi_apps_clk_src,
  375. .parent_map = gcc_xo_gpll0_map,
  376. .clkr.hw.init = &(struct clk_init_data) {
  377. .name = "blsp2_qup1_spi_apps_clk_src",
  378. .parent_data = gcc_xo_gpll0_data,
  379. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  380. .ops = &clk_rcg2_ops,
  381. }
  382. };
  383. static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
  384. .cmd_rcgr = 0x0d014,
  385. .hid_width = 5,
  386. .mnd_width = 8,
  387. .freq_tbl = ftbl_blsp_spi_apps_clk_src,
  388. .parent_map = gcc_xo_gpll0_map,
  389. .clkr.hw.init = &(struct clk_init_data) {
  390. .name = "blsp2_qup2_spi_apps_clk_src",
  391. .parent_data = gcc_xo_gpll0_data,
  392. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  393. .ops = &clk_rcg2_ops,
  394. }
  395. };
  396. static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
  397. .cmd_rcgr = 0x0f024,
  398. .hid_width = 5,
  399. .mnd_width = 8,
  400. .freq_tbl = ftbl_blsp_spi_apps_clk_src,
  401. .parent_map = gcc_xo_gpll0_map,
  402. .clkr.hw.init = &(struct clk_init_data) {
  403. .name = "blsp2_qup3_spi_apps_clk_src",
  404. .parent_data = gcc_xo_gpll0_data,
  405. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  406. .ops = &clk_rcg2_ops,
  407. }
  408. };
  409. static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
  410. F(3686400, P_GPLL0, 1, 72, 15625),
  411. F(7372800, P_GPLL0, 1, 144, 15625),
  412. F(14745600, P_GPLL0, 1, 288, 15625),
  413. F(16000000, P_GPLL0, 10, 1, 5),
  414. F(19200000, P_XO, 1, 0, 0),
  415. F(24000000, P_GPLL0, 1, 3, 100),
  416. F(25000000, P_GPLL0, 16, 1, 2),
  417. F(32000000, P_GPLL0, 1, 1, 25),
  418. F(40000000, P_GPLL0, 1, 1, 20),
  419. F(46400000, P_GPLL0, 1, 29, 500),
  420. F(48000000, P_GPLL0, 1, 3, 50),
  421. F(51200000, P_GPLL0, 1, 8, 125),
  422. F(56000000, P_GPLL0, 1, 7, 100),
  423. F(58982400, P_GPLL0, 1, 1152, 15625),
  424. F(60000000, P_GPLL0, 1, 3, 40),
  425. F(64000000, P_GPLL0, 1, 2, 25),
  426. { }
  427. };
  428. static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
  429. .cmd_rcgr = 0x02044,
  430. .hid_width = 5,
  431. .mnd_width = 16,
  432. .freq_tbl = ftbl_blsp_uart_apps_clk_src,
  433. .parent_map = gcc_xo_gpll0_map,
  434. .clkr.hw.init = &(struct clk_init_data) {
  435. .name = "blsp1_uart1_apps_clk_src",
  436. .parent_data = gcc_xo_gpll0_data,
  437. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  438. .ops = &clk_rcg2_ops,
  439. }
  440. };
  441. static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
  442. .cmd_rcgr = 0x03034,
  443. .hid_width = 5,
  444. .mnd_width = 16,
  445. .freq_tbl = ftbl_blsp_uart_apps_clk_src,
  446. .parent_map = gcc_xo_gpll0_map,
  447. .clkr.hw.init = &(struct clk_init_data) {
  448. .name = "blsp1_uart2_apps_clk_src",
  449. .parent_data = gcc_xo_gpll0_data,
  450. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  451. .ops = &clk_rcg2_ops,
  452. }
  453. };
  454. static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
  455. .cmd_rcgr = 0x0c044,
  456. .hid_width = 5,
  457. .mnd_width = 16,
  458. .freq_tbl = ftbl_blsp_uart_apps_clk_src,
  459. .parent_map = gcc_xo_gpll0_map,
  460. .clkr.hw.init = &(struct clk_init_data) {
  461. .name = "blsp2_uart1_apps_clk_src",
  462. .parent_data = gcc_xo_gpll0_data,
  463. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  464. .ops = &clk_rcg2_ops,
  465. }
  466. };
  467. static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
  468. .cmd_rcgr = 0x0d034,
  469. .hid_width = 5,
  470. .mnd_width = 16,
  471. .freq_tbl = ftbl_blsp_uart_apps_clk_src,
  472. .parent_map = gcc_xo_gpll0_map,
  473. .clkr.hw.init = &(struct clk_init_data) {
  474. .name = "blsp2_uart2_apps_clk_src",
  475. .parent_data = gcc_xo_gpll0_data,
  476. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  477. .ops = &clk_rcg2_ops,
  478. }
  479. };
  480. static const struct parent_map gcc_byte0_map[] = {
  481. { P_XO, 0 },
  482. { P_DSI0PLL_BYTE, 1 },
  483. };
  484. static const struct clk_parent_data gcc_byte_data[] = {
  485. { .index = DT_XO },
  486. { .index = DT_DSI0PLL_BYTE },
  487. };
  488. static struct clk_rcg2 byte0_clk_src = {
  489. .cmd_rcgr = 0x4d044,
  490. .hid_width = 5,
  491. .parent_map = gcc_byte0_map,
  492. .clkr.hw.init = &(struct clk_init_data) {
  493. .name = "byte0_clk_src",
  494. .parent_data = gcc_byte_data,
  495. .num_parents = ARRAY_SIZE(gcc_byte_data),
  496. .ops = &clk_byte2_ops,
  497. .flags = CLK_SET_RATE_PARENT,
  498. }
  499. };
  500. static const struct freq_tbl ftbl_camss_gp_clk_src[] = {
  501. F(100000000, P_GPLL0, 8, 0, 0),
  502. F(160000000, P_GPLL0, 5, 0, 0),
  503. F(200000000, P_GPLL0, 4, 0, 0),
  504. { }
  505. };
  506. static struct clk_rcg2 camss_gp0_clk_src = {
  507. .cmd_rcgr = 0x54000,
  508. .hid_width = 5,
  509. .mnd_width = 8,
  510. .freq_tbl = ftbl_camss_gp_clk_src,
  511. .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
  512. .clkr.hw.init = &(struct clk_init_data) {
  513. .name = "camss_gp0_clk_src",
  514. .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
  515. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
  516. .ops = &clk_rcg2_ops,
  517. }
  518. };
  519. static struct clk_rcg2 camss_gp1_clk_src = {
  520. .cmd_rcgr = 0x55000,
  521. .hid_width = 5,
  522. .mnd_width = 8,
  523. .freq_tbl = ftbl_camss_gp_clk_src,
  524. .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
  525. .clkr.hw.init = &(struct clk_init_data) {
  526. .name = "camss_gp1_clk_src",
  527. .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
  528. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
  529. .ops = &clk_rcg2_ops,
  530. }
  531. };
  532. static const struct freq_tbl ftbl_camss_top_ahb_clk_src[] = {
  533. F(40000000, P_GPLL0, 10, 1, 2),
  534. F(61540000, P_GPLL0, 13, 0, 0),
  535. F(80000000, P_GPLL0, 10, 0, 0),
  536. { }
  537. };
  538. static struct clk_rcg2 camss_top_ahb_clk_src = {
  539. .cmd_rcgr = 0x5a000,
  540. .hid_width = 5,
  541. .freq_tbl = ftbl_camss_top_ahb_clk_src,
  542. .parent_map = gcc_xo_gpll0_map,
  543. .clkr.hw.init = &(struct clk_init_data) {
  544. .name = "camss_top_ahb_clk_src",
  545. .parent_data = gcc_xo_gpll0_data,
  546. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  547. .ops = &clk_rcg2_ops,
  548. }
  549. };
  550. static const struct freq_tbl ftbl_cci_clk_src[] = {
  551. F(19200000, P_XO, 1, 0, 0),
  552. F(37500000, P_GPLL0, 1, 3, 64),
  553. { }
  554. };
  555. static struct clk_rcg2 cci_clk_src = {
  556. .cmd_rcgr = 0x51000,
  557. .hid_width = 5,
  558. .mnd_width = 8,
  559. .freq_tbl = ftbl_cci_clk_src,
  560. .parent_map = gcc_xo_gpll0_out_aux_map,
  561. .clkr.hw.init = &(struct clk_init_data) {
  562. .name = "cci_clk_src",
  563. .parent_data = gcc_xo_gpll0_data,
  564. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  565. .ops = &clk_rcg2_ops,
  566. }
  567. };
  568. static const struct parent_map gcc_cpp_map[] = {
  569. { P_XO, 0 },
  570. { P_GPLL0, 1 },
  571. { P_GPLL6, 3 },
  572. };
  573. static const struct clk_parent_data gcc_cpp_data[] = {
  574. { .index = DT_XO },
  575. { .hw = &gpll0.clkr.hw },
  576. { .hw = &gpll6.hw },
  577. };
  578. static const struct freq_tbl ftbl_cpp_clk_src[] = {
  579. F(133330000, P_GPLL0, 6, 0, 0),
  580. F(160000000, P_GPLL0, 5, 0, 0),
  581. F(266670000, P_GPLL0, 3, 0, 0),
  582. F(308570000, P_GPLL0, 3.5, 0, 0),
  583. F(320000000, P_GPLL0, 2.5, 0, 0),
  584. F(360000000, P_GPLL6, 3, 0, 0),
  585. { }
  586. };
  587. static struct clk_rcg2 cpp_clk_src = {
  588. .cmd_rcgr = 0x58018,
  589. .hid_width = 5,
  590. .freq_tbl = ftbl_cpp_clk_src,
  591. .parent_map = gcc_cpp_map,
  592. .clkr.hw.init = &(struct clk_init_data) {
  593. .name = "cpp_clk_src",
  594. .parent_data = gcc_cpp_data,
  595. .num_parents = ARRAY_SIZE(gcc_cpp_data),
  596. .ops = &clk_rcg2_ops,
  597. }
  598. };
  599. static const struct freq_tbl ftbl_crypto_clk_src[] = {
  600. F(50000000, P_GPLL0, 16, 0, 0),
  601. F(80000000, P_GPLL0, 10, 0, 0),
  602. F(100000000, P_GPLL0, 8, 0, 0),
  603. F(160000000, P_GPLL0, 5, 0, 0),
  604. { }
  605. };
  606. static struct clk_rcg2 crypto_clk_src = {
  607. .cmd_rcgr = 0x16004,
  608. .hid_width = 5,
  609. .freq_tbl = ftbl_crypto_clk_src,
  610. .parent_map = gcc_xo_gpll0_map,
  611. .clkr.hw.init = &(struct clk_init_data) {
  612. .name = "crypto_clk_src",
  613. .parent_data = gcc_xo_gpll0_data,
  614. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  615. .ops = &clk_rcg2_ops,
  616. }
  617. };
  618. static const struct freq_tbl ftbl_csi_clk_src[] = {
  619. F(100000000, P_GPLL0, 8, 0, 0),
  620. F(160000000, P_GPLL0, 5, 0, 0),
  621. F(200000000, P_GPLL0, 4, 0, 0),
  622. { }
  623. };
  624. static struct clk_rcg2 csi0_clk_src = {
  625. .cmd_rcgr = 0x4e020,
  626. .hid_width = 5,
  627. .freq_tbl = ftbl_csi_clk_src,
  628. .parent_map = gcc_xo_gpll0_map,
  629. .clkr.hw.init = &(struct clk_init_data) {
  630. .name = "csi0_clk_src",
  631. .parent_data = gcc_xo_gpll0_data,
  632. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  633. .ops = &clk_rcg2_ops,
  634. }
  635. };
  636. static struct clk_rcg2 csi1_clk_src = {
  637. .cmd_rcgr = 0x4f020,
  638. .hid_width = 5,
  639. .freq_tbl = ftbl_csi_clk_src,
  640. .parent_map = gcc_xo_gpll0_map,
  641. .clkr.hw.init = &(struct clk_init_data) {
  642. .name = "csi1_clk_src",
  643. .parent_data = gcc_xo_gpll0_data,
  644. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  645. .ops = &clk_rcg2_ops,
  646. }
  647. };
  648. static struct clk_rcg2 csi2_clk_src = {
  649. .cmd_rcgr = 0x3c020,
  650. .hid_width = 5,
  651. .freq_tbl = ftbl_csi_clk_src,
  652. .parent_map = gcc_xo_gpll0_map,
  653. .clkr.hw.init = &(struct clk_init_data) {
  654. .name = "csi2_clk_src",
  655. .parent_data = gcc_xo_gpll0_data,
  656. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  657. .ops = &clk_rcg2_ops,
  658. }
  659. };
  660. static const struct freq_tbl ftbl_csi_phytimer_clk_src[] = {
  661. F(100000000, P_GPLL0, 8, 0, 0),
  662. F(160000000, P_GPLL0, 5, 0, 0),
  663. F(200000000, P_GPLL0, 4, 0, 0),
  664. F(266670000, P_GPLL0, 3, 0, 0),
  665. { }
  666. };
  667. static struct clk_rcg2 csi0phytimer_clk_src = {
  668. .cmd_rcgr = 0x4e000,
  669. .hid_width = 5,
  670. .freq_tbl = ftbl_csi_phytimer_clk_src,
  671. .parent_map = gcc_xo_gpll0_map,
  672. .clkr.hw.init = &(struct clk_init_data) {
  673. .name = "csi0phytimer_clk_src",
  674. .parent_data = gcc_xo_gpll0_data,
  675. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  676. .ops = &clk_rcg2_ops,
  677. }
  678. };
  679. static struct clk_rcg2 csi1phytimer_clk_src = {
  680. .cmd_rcgr = 0x4f000,
  681. .hid_width = 5,
  682. .freq_tbl = ftbl_csi_phytimer_clk_src,
  683. .parent_map = gcc_xo_gpll0_map,
  684. .clkr.hw.init = &(struct clk_init_data) {
  685. .name = "csi1phytimer_clk_src",
  686. .parent_data = gcc_xo_gpll0_data,
  687. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  688. .ops = &clk_rcg2_ops,
  689. }
  690. };
  691. static const struct freq_tbl ftbl_esc0_1_clk_src[] = {
  692. F(19200000, P_XO, 1, 0, 0),
  693. { }
  694. };
  695. static struct clk_rcg2 esc0_clk_src = {
  696. .cmd_rcgr = 0x4d05c,
  697. .hid_width = 5,
  698. .freq_tbl = ftbl_esc0_1_clk_src,
  699. .parent_map = gcc_xo_gpll0_out_aux_map,
  700. .clkr.hw.init = &(struct clk_init_data) {
  701. .name = "esc0_clk_src",
  702. .parent_data = gcc_xo_gpll0_data,
  703. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  704. .ops = &clk_rcg2_ops,
  705. }
  706. };
  707. static const struct parent_map gcc_gfx3d_map[] = {
  708. { P_XO, 0 },
  709. { P_GPLL0, 1 },
  710. { P_GPLL3, 2 },
  711. { P_GPLL6, 3 },
  712. };
  713. static const struct parent_map gcc_gfx3d_map_qm215[] = {
  714. { P_XO, 0 },
  715. { P_GPLL0, 5 },
  716. { P_GPLL3, 2 },
  717. { P_GPLL6, 6 },
  718. };
  719. static const struct clk_parent_data gcc_gfx3d_data[] = {
  720. { .index = DT_XO },
  721. { .hw = &gpll0.clkr.hw },
  722. { .hw = &gpll3.clkr.hw },
  723. { .hw = &gpll6.hw },
  724. };
  725. static const struct freq_tbl ftbl_gfx3d_clk_src[] = {
  726. F(19200000, P_XO, 1, 0, 0),
  727. F(50000000, P_GPLL0, 16, 0, 0),
  728. F(80000000, P_GPLL0, 10, 0, 0),
  729. F(100000000, P_GPLL0, 8, 0, 0),
  730. F(160000000, P_GPLL0, 5, 0, 0),
  731. F(200000000, P_GPLL0, 4, 0, 0),
  732. F(228570000, P_GPLL0, 3.5, 0, 0),
  733. F(240000000, P_GPLL6, 4.5, 0, 0),
  734. F(266670000, P_GPLL0, 3, 0, 0),
  735. F(270000000, P_GPLL6, 4, 0, 0),
  736. F(320000000, P_GPLL0, 2.5, 0, 0),
  737. F(400000000, P_GPLL0, 2, 0, 0),
  738. F(465000000, P_GPLL3, 1, 0, 0),
  739. F(484800000, P_GPLL3, 1, 0, 0),
  740. F(500000000, P_GPLL3, 1, 0, 0),
  741. F(523200000, P_GPLL3, 1, 0, 0),
  742. F(550000000, P_GPLL3, 1, 0, 0),
  743. F(598000000, P_GPLL3, 1, 0, 0),
  744. { }
  745. };
  746. static struct clk_rcg2 gfx3d_clk_src = {
  747. .cmd_rcgr = 0x59000,
  748. .hid_width = 5,
  749. .freq_tbl = ftbl_gfx3d_clk_src,
  750. .parent_map = gcc_gfx3d_map,
  751. .clkr.hw.init = &(struct clk_init_data) {
  752. .name = "gfx3d_clk_src",
  753. .parent_data = gcc_gfx3d_data,
  754. .num_parents = ARRAY_SIZE(gcc_gfx3d_data),
  755. .ops = &clk_rcg2_ops,
  756. .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
  757. }
  758. };
  759. static const struct freq_tbl ftbl_gp_clk_src[] = {
  760. F(19200000, P_XO, 1, 0, 0),
  761. { }
  762. };
  763. static struct clk_rcg2 gp1_clk_src = {
  764. .cmd_rcgr = 0x08004,
  765. .hid_width = 5,
  766. .mnd_width = 8,
  767. .freq_tbl = ftbl_gp_clk_src,
  768. .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
  769. .clkr.hw.init = &(struct clk_init_data) {
  770. .name = "gp1_clk_src",
  771. .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
  772. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
  773. .ops = &clk_rcg2_ops,
  774. }
  775. };
  776. static struct clk_rcg2 gp2_clk_src = {
  777. .cmd_rcgr = 0x09004,
  778. .hid_width = 5,
  779. .mnd_width = 8,
  780. .freq_tbl = ftbl_gp_clk_src,
  781. .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
  782. .clkr.hw.init = &(struct clk_init_data) {
  783. .name = "gp2_clk_src",
  784. .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
  785. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
  786. .ops = &clk_rcg2_ops,
  787. }
  788. };
  789. static struct clk_rcg2 gp3_clk_src = {
  790. .cmd_rcgr = 0x0a004,
  791. .hid_width = 5,
  792. .mnd_width = 8,
  793. .freq_tbl = ftbl_gp_clk_src,
  794. .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
  795. .clkr.hw.init = &(struct clk_init_data) {
  796. .name = "gp3_clk_src",
  797. .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
  798. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
  799. .ops = &clk_rcg2_ops,
  800. }
  801. };
  802. static const struct freq_tbl ftbl_jpeg0_clk_src[] = {
  803. F(133330000, P_GPLL0, 6, 0, 0),
  804. F(266670000, P_GPLL0, 3, 0, 0),
  805. F(320000000, P_GPLL0, 2.5, 0, 0),
  806. { }
  807. };
  808. static struct clk_rcg2 jpeg0_clk_src = {
  809. .cmd_rcgr = 0x57000,
  810. .hid_width = 5,
  811. .freq_tbl = ftbl_jpeg0_clk_src,
  812. .parent_map = gcc_xo_gpll0_map,
  813. .clkr.hw.init = &(struct clk_init_data) {
  814. .name = "jpeg0_clk_src",
  815. .parent_data = gcc_xo_gpll0_data,
  816. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  817. .ops = &clk_rcg2_ops,
  818. }
  819. };
  820. static const struct freq_tbl ftbl_mclk_clk_src[] = {
  821. F(19200000, P_XO, 1, 0, 0),
  822. F(24000000, P_GPLL6, 1, 1, 45),
  823. F(66667000, P_GPLL0, 12, 0, 0),
  824. { }
  825. };
  826. static struct clk_rcg2 mclk0_clk_src = {
  827. .cmd_rcgr = 0x52000,
  828. .hid_width = 5,
  829. .mnd_width = 8,
  830. .freq_tbl = ftbl_mclk_clk_src,
  831. .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
  832. .clkr.hw.init = &(struct clk_init_data) {
  833. .name = "mclk0_clk_src",
  834. .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
  835. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
  836. .ops = &clk_rcg2_ops,
  837. }
  838. };
  839. static struct clk_rcg2 mclk1_clk_src = {
  840. .cmd_rcgr = 0x53000,
  841. .hid_width = 5,
  842. .mnd_width = 8,
  843. .freq_tbl = ftbl_mclk_clk_src,
  844. .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
  845. .clkr.hw.init = &(struct clk_init_data) {
  846. .name = "mclk1_clk_src",
  847. .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
  848. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
  849. .ops = &clk_rcg2_ops,
  850. }
  851. };
  852. static struct clk_rcg2 mclk2_clk_src = {
  853. .cmd_rcgr = 0x5c000,
  854. .hid_width = 5,
  855. .mnd_width = 8,
  856. .freq_tbl = ftbl_mclk_clk_src,
  857. .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
  858. .clkr.hw.init = &(struct clk_init_data) {
  859. .name = "mclk2_clk_src",
  860. .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
  861. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
  862. .ops = &clk_rcg2_ops,
  863. }
  864. };
  865. static const struct freq_tbl ftbl_mdp_clk_src[] = {
  866. F(50000000, P_GPLL0, 16, 0, 0),
  867. F(80000000, P_GPLL0, 10, 0, 0),
  868. F(100000000, P_GPLL0, 8, 0, 0),
  869. F(145450000, P_GPLL0, 5.5, 0, 0),
  870. F(160000000, P_GPLL0, 5, 0, 0),
  871. F(177780000, P_GPLL0, 4.5, 0, 0),
  872. F(200000000, P_GPLL0, 4, 0, 0),
  873. F(266670000, P_GPLL0, 3, 0, 0),
  874. F(320000000, P_GPLL0, 2.5, 0, 0),
  875. { }
  876. };
  877. static struct clk_rcg2 mdp_clk_src = {
  878. .cmd_rcgr = 0x4d014,
  879. .hid_width = 5,
  880. .freq_tbl = ftbl_mdp_clk_src,
  881. .parent_map = gcc_xo_gpll0_map,
  882. .clkr.hw.init = &(struct clk_init_data) {
  883. .name = "mdp_clk_src",
  884. .parent_data = gcc_xo_gpll0_data,
  885. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  886. .ops = &clk_rcg2_ops,
  887. }
  888. };
  889. static const struct parent_map gcc_pclk_map[] = {
  890. { P_XO, 0 },
  891. { P_DSI0PLL, 1 },
  892. };
  893. static const struct clk_parent_data gcc_pclk_data[] = {
  894. { .index = DT_XO },
  895. { .index = DT_DSI0PLL },
  896. };
  897. static struct clk_rcg2 pclk0_clk_src = {
  898. .cmd_rcgr = 0x4d000,
  899. .hid_width = 5,
  900. .mnd_width = 8,
  901. .parent_map = gcc_pclk_map,
  902. .clkr.hw.init = &(struct clk_init_data) {
  903. .name = "pclk0_clk_src",
  904. .parent_data = gcc_pclk_data,
  905. .num_parents = ARRAY_SIZE(gcc_pclk_data),
  906. .ops = &clk_pixel_ops,
  907. .flags = CLK_SET_RATE_PARENT,
  908. }
  909. };
  910. static const struct freq_tbl ftbl_pdm2_clk_src[] = {
  911. F(64000000, P_GPLL0, 12.5, 0, 0),
  912. { }
  913. };
  914. static struct clk_rcg2 pdm2_clk_src = {
  915. .cmd_rcgr = 0x44010,
  916. .hid_width = 5,
  917. .freq_tbl = ftbl_pdm2_clk_src,
  918. .parent_map = gcc_xo_gpll0_map,
  919. .clkr.hw.init = &(struct clk_init_data) {
  920. .name = "pdm2_clk_src",
  921. .parent_data = gcc_xo_gpll0_data,
  922. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  923. .ops = &clk_rcg2_ops,
  924. }
  925. };
  926. static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
  927. F(100000000, P_GPLL0, 8, 0, 0),
  928. F(200000000, P_GPLL0, 4, 0, 0),
  929. { }
  930. };
  931. static struct clk_rcg2 sdcc1_ice_core_clk_src = {
  932. .cmd_rcgr = 0x5d000,
  933. .hid_width = 5,
  934. .freq_tbl = ftbl_sdcc1_ice_core_clk_src,
  935. .parent_map = gcc_xo_gpll0_map,
  936. .clkr.hw.init = &(struct clk_init_data) {
  937. .name = "sdcc1_ice_core_clk_src",
  938. .parent_data = gcc_xo_gpll0_data,
  939. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  940. .ops = &clk_rcg2_ops,
  941. }
  942. };
  943. static const struct parent_map gcc_sdcc1_apps_map[] = {
  944. { P_XO, 0 },
  945. { P_GPLL0, 1 },
  946. { P_GPLL4, 2 },
  947. };
  948. static const struct clk_parent_data gcc_sdcc1_apss_data[] = {
  949. { .index = DT_XO },
  950. { .hw = &gpll0.clkr.hw },
  951. { .hw = &gpll4.clkr.hw },
  952. };
  953. static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
  954. F(144000, P_XO, 16, 3, 25),
  955. F(400000, P_XO, 12, 1, 4),
  956. F(20000000, P_GPLL0, 10, 1, 4),
  957. F(25000000, P_GPLL0, 16, 1, 2),
  958. F(50000000, P_GPLL0, 16, 0, 0),
  959. F(100000000, P_GPLL0, 8, 0, 0),
  960. F(177770000, P_GPLL0, 4.5, 0, 0),
  961. F(192000000, P_GPLL4, 6, 0, 0),
  962. F(200000000, P_GPLL0, 4, 0, 0),
  963. F(384000000, P_GPLL4, 3, 0, 0),
  964. { }
  965. };
  966. static struct clk_rcg2 sdcc1_apps_clk_src = {
  967. .cmd_rcgr = 0x42004,
  968. .hid_width = 5,
  969. .mnd_width = 8,
  970. .freq_tbl = ftbl_sdcc1_apps_clk_src,
  971. .parent_map = gcc_sdcc1_apps_map,
  972. .clkr.hw.init = &(struct clk_init_data) {
  973. .name = "sdcc1_apps_clk_src",
  974. .parent_data = gcc_sdcc1_apss_data,
  975. .num_parents = ARRAY_SIZE(gcc_sdcc1_apss_data),
  976. .ops = &clk_rcg2_floor_ops,
  977. }
  978. };
  979. static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
  980. F(144000, P_XO, 16, 3, 25),
  981. F(400000, P_XO, 12, 1, 4),
  982. F(20000000, P_GPLL0, 10, 1, 4),
  983. F(25000000, P_GPLL0, 16, 1, 2),
  984. F(50000000, P_GPLL0, 16, 0, 0),
  985. F(100000000, P_GPLL0, 8, 0, 0),
  986. F(177770000, P_GPLL0, 4.5, 0, 0),
  987. F(200000000, P_GPLL0, 4, 0, 0),
  988. { }
  989. };
  990. static struct clk_rcg2 sdcc2_apps_clk_src = {
  991. .cmd_rcgr = 0x43004,
  992. .hid_width = 5,
  993. .mnd_width = 8,
  994. .freq_tbl = ftbl_sdcc2_apps_clk_src,
  995. .parent_map = gcc_xo_gpll0_map,
  996. .clkr.hw.init = &(struct clk_init_data) {
  997. .name = "sdcc2_apps_clk_src",
  998. .parent_data = gcc_xo_gpll0_data,
  999. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  1000. .ops = &clk_rcg2_floor_ops,
  1001. }
  1002. };
  1003. static const struct freq_tbl ftbl_usb_hs_system_clk_src[] = {
  1004. F(80000000, P_GPLL0, 10, 0, 0),
  1005. F(100000000, P_GPLL0, 8, 0, 0),
  1006. F(133330000, P_GPLL0, 6, 0, 0),
  1007. F(177780000, P_GPLL0, 4.5, 0, 0),
  1008. { }
  1009. };
  1010. static struct clk_rcg2 usb_hs_system_clk_src = {
  1011. .cmd_rcgr = 0x41010,
  1012. .hid_width = 5,
  1013. .parent_map = gcc_xo_gpll0_map,
  1014. .freq_tbl = ftbl_usb_hs_system_clk_src,
  1015. .clkr.hw.init = &(struct clk_init_data){
  1016. .name = "usb_hs_system_clk_src",
  1017. .parent_data = gcc_xo_gpll0_data,
  1018. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  1019. .ops = &clk_rcg2_ops,
  1020. },
  1021. };
  1022. static const struct freq_tbl ftbl_vcodec0_clk_src[] = {
  1023. F(133330000, P_GPLL0, 6, 0, 0),
  1024. F(180000000, P_GPLL6, 6, 0, 0),
  1025. F(228570000, P_GPLL0, 3.5, 0, 0),
  1026. F(266670000, P_GPLL0, 3, 0, 0),
  1027. F(308570000, P_GPLL6, 3.5, 0, 0),
  1028. F(329140000, P_GPLL4, 3.5, 0, 0),
  1029. F(360000000, P_GPLL6, 3, 0, 0),
  1030. { }
  1031. };
  1032. static struct clk_rcg2 vcodec0_clk_src = {
  1033. .cmd_rcgr = 0x4c000,
  1034. .hid_width = 5,
  1035. .freq_tbl = ftbl_vcodec0_clk_src,
  1036. .parent_map = gcc_xo_gpll0_gpll6_gpll4_map,
  1037. .clkr.hw.init = &(struct clk_init_data) {
  1038. .name = "vcodec0_clk_src",
  1039. .parent_data = gcc_xo_gpll0_gpll6_gpll4_data,
  1040. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll4_data),
  1041. .ops = &clk_rcg2_ops,
  1042. }
  1043. };
  1044. static const struct freq_tbl ftbl_vfe_clk_src[] = {
  1045. F(50000000, P_GPLL0, 16, 0, 0),
  1046. F(80000000, P_GPLL0, 10, 0, 0),
  1047. F(100000000, P_GPLL0, 8, 0, 0),
  1048. F(133330000, P_GPLL0, 6, 0, 0),
  1049. F(160000000, P_GPLL0, 5, 0, 0),
  1050. F(200000000, P_GPLL0, 4, 0, 0),
  1051. F(266670000, P_GPLL0, 3, 0, 0),
  1052. F(308570000, P_GPLL6, 3.5, 0, 0),
  1053. F(320000000, P_GPLL0, 2.5, 0, 0),
  1054. F(329140000, P_GPLL4, 3.5, 0, 0),
  1055. F(360000000, P_GPLL6, 3, 0, 0),
  1056. { }
  1057. };
  1058. static struct clk_rcg2 vfe0_clk_src = {
  1059. .cmd_rcgr = 0x58000,
  1060. .hid_width = 5,
  1061. .freq_tbl = ftbl_vfe_clk_src,
  1062. .parent_map = gcc_xo_gpll0_gpll6_gpll4_map,
  1063. .clkr.hw.init = &(struct clk_init_data) {
  1064. .name = "vfe0_clk_src",
  1065. .parent_data = gcc_xo_gpll0_gpll6_gpll4_data,
  1066. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll4_data),
  1067. .ops = &clk_rcg2_ops,
  1068. }
  1069. };
  1070. static struct clk_rcg2 vfe1_clk_src = {
  1071. .cmd_rcgr = 0x58054,
  1072. .hid_width = 5,
  1073. .freq_tbl = ftbl_vfe_clk_src,
  1074. .parent_map = gcc_xo_gpll0_gpll6_gpll4_map,
  1075. .clkr.hw.init = &(struct clk_init_data) {
  1076. .name = "vfe1_clk_src",
  1077. .parent_data = gcc_xo_gpll0_gpll6_gpll4_data,
  1078. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll4_data),
  1079. .ops = &clk_rcg2_ops,
  1080. }
  1081. };
  1082. static const struct freq_tbl ftbl_vsync_clk_src[] = {
  1083. F(19200000, P_XO, 1, 0, 0),
  1084. { }
  1085. };
  1086. static struct clk_rcg2 vsync_clk_src = {
  1087. .cmd_rcgr = 0x4d02c,
  1088. .hid_width = 5,
  1089. .freq_tbl = ftbl_vsync_clk_src,
  1090. .parent_map = gcc_xo_gpll0_out_aux_map,
  1091. .clkr.hw.init = &(struct clk_init_data) {
  1092. .name = "vsync_clk_src",
  1093. .parent_data = gcc_xo_gpll0_data,
  1094. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  1095. .ops = &clk_rcg2_ops,
  1096. }
  1097. };
  1098. static struct clk_branch gcc_apss_tcu_clk = {
  1099. .halt_reg = 0x12018,
  1100. .halt_check = BRANCH_HALT_VOTED,
  1101. .clkr = {
  1102. .enable_reg = 0x4500c,
  1103. .enable_mask = BIT(1),
  1104. .hw.init = &(struct clk_init_data) {
  1105. .name = "gcc_apss_tcu_clk",
  1106. .ops = &clk_branch2_ops,
  1107. }
  1108. }
  1109. };
  1110. static struct clk_branch gcc_bimc_gfx_clk = {
  1111. .halt_reg = 0x59034,
  1112. .halt_check = BRANCH_HALT,
  1113. .clkr = {
  1114. .enable_reg = 0x59034,
  1115. .enable_mask = BIT(0),
  1116. .hw.init = &(struct clk_init_data) {
  1117. .name = "gcc_bimc_gfx_clk",
  1118. .ops = &clk_branch2_ops,
  1119. }
  1120. }
  1121. };
  1122. static struct clk_branch gcc_bimc_gpu_clk = {
  1123. .halt_reg = 0x59030,
  1124. .halt_check = BRANCH_HALT,
  1125. .clkr = {
  1126. .enable_reg = 0x59030,
  1127. .enable_mask = BIT(0),
  1128. .hw.init = &(struct clk_init_data) {
  1129. .name = "gcc_bimc_gpu_clk",
  1130. .ops = &clk_branch2_ops,
  1131. }
  1132. }
  1133. };
  1134. static struct clk_branch gcc_blsp1_ahb_clk = {
  1135. .halt_reg = 0x01008,
  1136. .halt_check = BRANCH_HALT_VOTED,
  1137. .clkr = {
  1138. .enable_reg = 0x45004,
  1139. .enable_mask = BIT(10),
  1140. .hw.init = &(struct clk_init_data) {
  1141. .name = "gcc_blsp1_ahb_clk",
  1142. .ops = &clk_branch2_ops,
  1143. }
  1144. }
  1145. };
  1146. static struct clk_branch gcc_blsp2_ahb_clk = {
  1147. .halt_reg = 0x0b008,
  1148. .halt_check = BRANCH_HALT_VOTED,
  1149. .clkr = {
  1150. .enable_reg = 0x45004,
  1151. .enable_mask = BIT(20),
  1152. .hw.init = &(struct clk_init_data) {
  1153. .name = "gcc_blsp2_ahb_clk",
  1154. .ops = &clk_branch2_ops,
  1155. }
  1156. }
  1157. };
  1158. static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
  1159. .halt_reg = 0x03010,
  1160. .halt_check = BRANCH_HALT,
  1161. .clkr = {
  1162. .enable_reg = 0x03010,
  1163. .enable_mask = BIT(0),
  1164. .hw.init = &(struct clk_init_data) {
  1165. .name = "gcc_blsp1_qup2_i2c_apps_clk",
  1166. .parent_hws = (const struct clk_hw*[]){
  1167. &blsp1_qup2_i2c_apps_clk_src.clkr.hw,
  1168. },
  1169. .num_parents = 1,
  1170. .ops = &clk_branch2_ops,
  1171. .flags = CLK_SET_RATE_PARENT,
  1172. }
  1173. }
  1174. };
  1175. static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
  1176. .halt_reg = 0x04020,
  1177. .halt_check = BRANCH_HALT,
  1178. .clkr = {
  1179. .enable_reg = 0x04020,
  1180. .enable_mask = BIT(0),
  1181. .hw.init = &(struct clk_init_data) {
  1182. .name = "gcc_blsp1_qup3_i2c_apps_clk",
  1183. .parent_hws = (const struct clk_hw*[]){
  1184. &blsp1_qup3_i2c_apps_clk_src.clkr.hw,
  1185. },
  1186. .num_parents = 1,
  1187. .ops = &clk_branch2_ops,
  1188. .flags = CLK_SET_RATE_PARENT,
  1189. }
  1190. }
  1191. };
  1192. static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
  1193. .halt_reg = 0x05020,
  1194. .halt_check = BRANCH_HALT,
  1195. .clkr = {
  1196. .enable_reg = 0x05020,
  1197. .enable_mask = BIT(0),
  1198. .hw.init = &(struct clk_init_data) {
  1199. .name = "gcc_blsp1_qup4_i2c_apps_clk",
  1200. .parent_hws = (const struct clk_hw*[]){
  1201. &blsp1_qup4_i2c_apps_clk_src.clkr.hw,
  1202. },
  1203. .num_parents = 1,
  1204. .ops = &clk_branch2_ops,
  1205. .flags = CLK_SET_RATE_PARENT,
  1206. }
  1207. }
  1208. };
  1209. static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
  1210. .halt_reg = 0x0c008,
  1211. .halt_check = BRANCH_HALT,
  1212. .clkr = {
  1213. .enable_reg = 0x0c008,
  1214. .enable_mask = BIT(0),
  1215. .hw.init = &(struct clk_init_data) {
  1216. .name = "gcc_blsp2_qup1_i2c_apps_clk",
  1217. .parent_hws = (const struct clk_hw*[]){
  1218. &blsp2_qup1_i2c_apps_clk_src.clkr.hw,
  1219. },
  1220. .num_parents = 1,
  1221. .ops = &clk_branch2_ops,
  1222. .flags = CLK_SET_RATE_PARENT,
  1223. }
  1224. }
  1225. };
  1226. static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
  1227. .halt_reg = 0x0d010,
  1228. .halt_check = BRANCH_HALT,
  1229. .clkr = {
  1230. .enable_reg = 0x0d010,
  1231. .enable_mask = BIT(0),
  1232. .hw.init = &(struct clk_init_data) {
  1233. .name = "gcc_blsp2_qup2_i2c_apps_clk",
  1234. .parent_hws = (const struct clk_hw*[]){
  1235. &blsp2_qup2_i2c_apps_clk_src.clkr.hw,
  1236. },
  1237. .num_parents = 1,
  1238. .ops = &clk_branch2_ops,
  1239. .flags = CLK_SET_RATE_PARENT,
  1240. }
  1241. }
  1242. };
  1243. static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
  1244. .halt_reg = 0x0f020,
  1245. .halt_check = BRANCH_HALT,
  1246. .clkr = {
  1247. .enable_reg = 0x0f020,
  1248. .enable_mask = BIT(0),
  1249. .hw.init = &(struct clk_init_data) {
  1250. .name = "gcc_blsp2_qup3_i2c_apps_clk",
  1251. .parent_hws = (const struct clk_hw*[]){
  1252. &blsp2_qup3_i2c_apps_clk_src.clkr.hw,
  1253. },
  1254. .num_parents = 1,
  1255. .ops = &clk_branch2_ops,
  1256. .flags = CLK_SET_RATE_PARENT,
  1257. }
  1258. }
  1259. };
  1260. static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
  1261. .halt_reg = 0x0300c,
  1262. .halt_check = BRANCH_HALT,
  1263. .clkr = {
  1264. .enable_reg = 0x0300c,
  1265. .enable_mask = BIT(0),
  1266. .hw.init = &(struct clk_init_data) {
  1267. .name = "gcc_blsp1_qup2_spi_apps_clk",
  1268. .parent_hws = (const struct clk_hw*[]){
  1269. &blsp1_qup2_spi_apps_clk_src.clkr.hw,
  1270. },
  1271. .num_parents = 1,
  1272. .ops = &clk_branch2_ops,
  1273. .flags = CLK_SET_RATE_PARENT,
  1274. }
  1275. }
  1276. };
  1277. static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
  1278. .halt_reg = 0x0401c,
  1279. .halt_check = BRANCH_HALT,
  1280. .clkr = {
  1281. .enable_reg = 0x0401c,
  1282. .enable_mask = BIT(0),
  1283. .hw.init = &(struct clk_init_data) {
  1284. .name = "gcc_blsp1_qup3_spi_apps_clk",
  1285. .parent_hws = (const struct clk_hw*[]){
  1286. &blsp1_qup3_spi_apps_clk_src.clkr.hw,
  1287. },
  1288. .num_parents = 1,
  1289. .ops = &clk_branch2_ops,
  1290. .flags = CLK_SET_RATE_PARENT,
  1291. }
  1292. }
  1293. };
  1294. static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
  1295. .halt_reg = 0x0501c,
  1296. .halt_check = BRANCH_HALT,
  1297. .clkr = {
  1298. .enable_reg = 0x0501c,
  1299. .enable_mask = BIT(0),
  1300. .hw.init = &(struct clk_init_data) {
  1301. .name = "gcc_blsp1_qup4_spi_apps_clk",
  1302. .parent_hws = (const struct clk_hw*[]){
  1303. &blsp1_qup4_spi_apps_clk_src.clkr.hw,
  1304. },
  1305. .num_parents = 1,
  1306. .ops = &clk_branch2_ops,
  1307. .flags = CLK_SET_RATE_PARENT,
  1308. }
  1309. }
  1310. };
  1311. static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
  1312. .halt_reg = 0x0c004,
  1313. .halt_check = BRANCH_HALT,
  1314. .clkr = {
  1315. .enable_reg = 0x0c004,
  1316. .enable_mask = BIT(0),
  1317. .hw.init = &(struct clk_init_data) {
  1318. .name = "gcc_blsp2_qup1_spi_apps_clk",
  1319. .parent_hws = (const struct clk_hw*[]){
  1320. &blsp2_qup1_spi_apps_clk_src.clkr.hw,
  1321. },
  1322. .num_parents = 1,
  1323. .ops = &clk_branch2_ops,
  1324. .flags = CLK_SET_RATE_PARENT,
  1325. }
  1326. }
  1327. };
  1328. static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
  1329. .halt_reg = 0x0d00c,
  1330. .halt_check = BRANCH_HALT,
  1331. .clkr = {
  1332. .enable_reg = 0x0d00c,
  1333. .enable_mask = BIT(0),
  1334. .hw.init = &(struct clk_init_data) {
  1335. .name = "gcc_blsp2_qup2_spi_apps_clk",
  1336. .parent_hws = (const struct clk_hw*[]){
  1337. &blsp2_qup2_spi_apps_clk_src.clkr.hw,
  1338. },
  1339. .num_parents = 1,
  1340. .ops = &clk_branch2_ops,
  1341. .flags = CLK_SET_RATE_PARENT,
  1342. }
  1343. }
  1344. };
  1345. static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
  1346. .halt_reg = 0x0f01c,
  1347. .halt_check = BRANCH_HALT,
  1348. .clkr = {
  1349. .enable_reg = 0x0f01c,
  1350. .enable_mask = BIT(0),
  1351. .hw.init = &(struct clk_init_data) {
  1352. .name = "gcc_blsp2_qup3_spi_apps_clk",
  1353. .parent_hws = (const struct clk_hw*[]){
  1354. &blsp2_qup3_spi_apps_clk_src.clkr.hw,
  1355. },
  1356. .num_parents = 1,
  1357. .ops = &clk_branch2_ops,
  1358. .flags = CLK_SET_RATE_PARENT,
  1359. }
  1360. }
  1361. };
  1362. static struct clk_branch gcc_blsp1_uart1_apps_clk = {
  1363. .halt_reg = 0x0203c,
  1364. .halt_check = BRANCH_HALT,
  1365. .clkr = {
  1366. .enable_reg = 0x0203c,
  1367. .enable_mask = BIT(0),
  1368. .hw.init = &(struct clk_init_data) {
  1369. .name = "gcc_blsp1_uart1_apps_clk",
  1370. .parent_hws = (const struct clk_hw*[]){
  1371. &blsp1_uart1_apps_clk_src.clkr.hw,
  1372. },
  1373. .num_parents = 1,
  1374. .ops = &clk_branch2_ops,
  1375. .flags = CLK_SET_RATE_PARENT,
  1376. }
  1377. }
  1378. };
  1379. static struct clk_branch gcc_blsp1_uart2_apps_clk = {
  1380. .halt_reg = 0x0302c,
  1381. .halt_check = BRANCH_HALT,
  1382. .clkr = {
  1383. .enable_reg = 0x0302c,
  1384. .enable_mask = BIT(0),
  1385. .hw.init = &(struct clk_init_data) {
  1386. .name = "gcc_blsp1_uart2_apps_clk",
  1387. .parent_hws = (const struct clk_hw*[]){
  1388. &blsp1_uart2_apps_clk_src.clkr.hw,
  1389. },
  1390. .num_parents = 1,
  1391. .ops = &clk_branch2_ops,
  1392. .flags = CLK_SET_RATE_PARENT,
  1393. }
  1394. }
  1395. };
  1396. static struct clk_branch gcc_blsp2_uart1_apps_clk = {
  1397. .halt_reg = 0x0c03c,
  1398. .halt_check = BRANCH_HALT,
  1399. .clkr = {
  1400. .enable_reg = 0x0c03c,
  1401. .enable_mask = BIT(0),
  1402. .hw.init = &(struct clk_init_data) {
  1403. .name = "gcc_blsp2_uart1_apps_clk",
  1404. .parent_hws = (const struct clk_hw*[]){
  1405. &blsp2_uart1_apps_clk_src.clkr.hw,
  1406. },
  1407. .num_parents = 1,
  1408. .ops = &clk_branch2_ops,
  1409. .flags = CLK_SET_RATE_PARENT,
  1410. }
  1411. }
  1412. };
  1413. static struct clk_branch gcc_blsp2_uart2_apps_clk = {
  1414. .halt_reg = 0x0d02c,
  1415. .halt_check = BRANCH_HALT,
  1416. .clkr = {
  1417. .enable_reg = 0x0d02c,
  1418. .enable_mask = BIT(0),
  1419. .hw.init = &(struct clk_init_data) {
  1420. .name = "gcc_blsp2_uart2_apps_clk",
  1421. .parent_hws = (const struct clk_hw*[]){
  1422. &blsp2_uart2_apps_clk_src.clkr.hw,
  1423. },
  1424. .num_parents = 1,
  1425. .ops = &clk_branch2_ops,
  1426. .flags = CLK_SET_RATE_PARENT,
  1427. }
  1428. }
  1429. };
  1430. static struct clk_branch gcc_boot_rom_ahb_clk = {
  1431. .halt_reg = 0x1300c,
  1432. .halt_check = BRANCH_HALT_VOTED,
  1433. .clkr = {
  1434. .enable_reg = 0x45004,
  1435. .enable_mask = BIT(7),
  1436. .hw.init = &(struct clk_init_data) {
  1437. .name = "gcc_boot_rom_ahb_clk",
  1438. .ops = &clk_branch2_ops,
  1439. }
  1440. }
  1441. };
  1442. static struct clk_branch gcc_camss_ahb_clk = {
  1443. .halt_reg = 0x56004,
  1444. .halt_check = BRANCH_HALT,
  1445. .clkr = {
  1446. .enable_reg = 0x56004,
  1447. .enable_mask = BIT(0),
  1448. .hw.init = &(struct clk_init_data) {
  1449. .name = "gcc_camss_ahb_clk",
  1450. .ops = &clk_branch2_ops,
  1451. }
  1452. }
  1453. };
  1454. static struct clk_branch gcc_camss_cci_ahb_clk = {
  1455. .halt_reg = 0x5101c,
  1456. .halt_check = BRANCH_HALT,
  1457. .clkr = {
  1458. .enable_reg = 0x5101c,
  1459. .enable_mask = BIT(0),
  1460. .hw.init = &(struct clk_init_data) {
  1461. .name = "gcc_camss_cci_ahb_clk",
  1462. .parent_hws = (const struct clk_hw*[]){
  1463. &camss_top_ahb_clk_src.clkr.hw,
  1464. },
  1465. .num_parents = 1,
  1466. .ops = &clk_branch2_ops,
  1467. .flags = CLK_SET_RATE_PARENT,
  1468. }
  1469. }
  1470. };
  1471. static struct clk_branch gcc_camss_cci_clk = {
  1472. .halt_reg = 0x51018,
  1473. .halt_check = BRANCH_HALT,
  1474. .clkr = {
  1475. .enable_reg = 0x51018,
  1476. .enable_mask = BIT(0),
  1477. .hw.init = &(struct clk_init_data) {
  1478. .name = "gcc_camss_cci_clk",
  1479. .parent_hws = (const struct clk_hw*[]){
  1480. &cci_clk_src.clkr.hw,
  1481. },
  1482. .num_parents = 1,
  1483. .ops = &clk_branch2_ops,
  1484. .flags = CLK_SET_RATE_PARENT,
  1485. }
  1486. }
  1487. };
  1488. static struct clk_branch gcc_camss_cpp_ahb_clk = {
  1489. .halt_reg = 0x58040,
  1490. .halt_check = BRANCH_HALT,
  1491. .clkr = {
  1492. .enable_reg = 0x58040,
  1493. .enable_mask = BIT(0),
  1494. .hw.init = &(struct clk_init_data) {
  1495. .name = "gcc_camss_cpp_ahb_clk",
  1496. .parent_hws = (const struct clk_hw*[]){
  1497. &camss_top_ahb_clk_src.clkr.hw,
  1498. },
  1499. .num_parents = 1,
  1500. .ops = &clk_branch2_ops,
  1501. .flags = CLK_SET_RATE_PARENT,
  1502. }
  1503. }
  1504. };
  1505. static struct clk_branch gcc_camss_cpp_clk = {
  1506. .halt_reg = 0x5803c,
  1507. .halt_check = BRANCH_HALT,
  1508. .clkr = {
  1509. .enable_reg = 0x5803c,
  1510. .enable_mask = BIT(0),
  1511. .hw.init = &(struct clk_init_data) {
  1512. .name = "gcc_camss_cpp_clk",
  1513. .parent_hws = (const struct clk_hw*[]){
  1514. &cpp_clk_src.clkr.hw,
  1515. },
  1516. .num_parents = 1,
  1517. .ops = &clk_branch2_ops,
  1518. .flags = CLK_SET_RATE_PARENT,
  1519. }
  1520. }
  1521. };
  1522. static struct clk_branch gcc_camss_csi0_ahb_clk = {
  1523. .halt_reg = 0x4e040,
  1524. .halt_check = BRANCH_HALT,
  1525. .clkr = {
  1526. .enable_reg = 0x4e040,
  1527. .enable_mask = BIT(0),
  1528. .hw.init = &(struct clk_init_data) {
  1529. .name = "gcc_camss_csi0_ahb_clk",
  1530. .parent_hws = (const struct clk_hw*[]){
  1531. &camss_top_ahb_clk_src.clkr.hw,
  1532. },
  1533. .num_parents = 1,
  1534. .ops = &clk_branch2_ops,
  1535. .flags = CLK_SET_RATE_PARENT,
  1536. }
  1537. }
  1538. };
  1539. static struct clk_branch gcc_camss_csi1_ahb_clk = {
  1540. .halt_reg = 0x4f040,
  1541. .halt_check = BRANCH_HALT,
  1542. .clkr = {
  1543. .enable_reg = 0x4f040,
  1544. .enable_mask = BIT(0),
  1545. .hw.init = &(struct clk_init_data) {
  1546. .name = "gcc_camss_csi1_ahb_clk",
  1547. .parent_hws = (const struct clk_hw*[]){
  1548. &camss_top_ahb_clk_src.clkr.hw,
  1549. },
  1550. .num_parents = 1,
  1551. .ops = &clk_branch2_ops,
  1552. .flags = CLK_SET_RATE_PARENT,
  1553. }
  1554. }
  1555. };
  1556. static struct clk_branch gcc_camss_csi2_ahb_clk = {
  1557. .halt_reg = 0x3c040,
  1558. .halt_check = BRANCH_HALT,
  1559. .clkr = {
  1560. .enable_reg = 0x3c040,
  1561. .enable_mask = BIT(0),
  1562. .hw.init = &(struct clk_init_data) {
  1563. .name = "gcc_camss_csi2_ahb_clk",
  1564. .parent_hws = (const struct clk_hw*[]){
  1565. &camss_top_ahb_clk_src.clkr.hw,
  1566. },
  1567. .num_parents = 1,
  1568. .ops = &clk_branch2_ops,
  1569. .flags = CLK_SET_RATE_PARENT,
  1570. }
  1571. }
  1572. };
  1573. static struct clk_branch gcc_camss_csi0_clk = {
  1574. .halt_reg = 0x4e03c,
  1575. .halt_check = BRANCH_HALT,
  1576. .clkr = {
  1577. .enable_reg = 0x4e03c,
  1578. .enable_mask = BIT(0),
  1579. .hw.init = &(struct clk_init_data) {
  1580. .name = "gcc_camss_csi0_clk",
  1581. .parent_hws = (const struct clk_hw*[]){
  1582. &csi0_clk_src.clkr.hw,
  1583. },
  1584. .num_parents = 1,
  1585. .ops = &clk_branch2_ops,
  1586. .flags = CLK_SET_RATE_PARENT,
  1587. }
  1588. }
  1589. };
  1590. static struct clk_branch gcc_camss_csi1_clk = {
  1591. .halt_reg = 0x4f03c,
  1592. .halt_check = BRANCH_HALT,
  1593. .clkr = {
  1594. .enable_reg = 0x4f03c,
  1595. .enable_mask = BIT(0),
  1596. .hw.init = &(struct clk_init_data) {
  1597. .name = "gcc_camss_csi1_clk",
  1598. .parent_hws = (const struct clk_hw*[]){
  1599. &csi1_clk_src.clkr.hw,
  1600. },
  1601. .num_parents = 1,
  1602. .ops = &clk_branch2_ops,
  1603. .flags = CLK_SET_RATE_PARENT,
  1604. }
  1605. }
  1606. };
  1607. static struct clk_branch gcc_camss_csi2_clk = {
  1608. .halt_reg = 0x3c03c,
  1609. .halt_check = BRANCH_HALT,
  1610. .clkr = {
  1611. .enable_reg = 0x3c03c,
  1612. .enable_mask = BIT(0),
  1613. .hw.init = &(struct clk_init_data) {
  1614. .name = "gcc_camss_csi2_clk",
  1615. .parent_hws = (const struct clk_hw*[]){
  1616. &csi2_clk_src.clkr.hw,
  1617. },
  1618. .num_parents = 1,
  1619. .ops = &clk_branch2_ops,
  1620. .flags = CLK_SET_RATE_PARENT,
  1621. }
  1622. }
  1623. };
  1624. static struct clk_branch gcc_camss_csi0phy_clk = {
  1625. .halt_reg = 0x4e048,
  1626. .halt_check = BRANCH_HALT,
  1627. .clkr = {
  1628. .enable_reg = 0x4e048,
  1629. .enable_mask = BIT(0),
  1630. .hw.init = &(struct clk_init_data) {
  1631. .name = "gcc_camss_csi0phy_clk",
  1632. .parent_hws = (const struct clk_hw*[]){
  1633. &csi0_clk_src.clkr.hw,
  1634. },
  1635. .num_parents = 1,
  1636. .ops = &clk_branch2_ops,
  1637. .flags = CLK_SET_RATE_PARENT,
  1638. }
  1639. }
  1640. };
  1641. static struct clk_branch gcc_camss_csi1phy_clk = {
  1642. .halt_reg = 0x4f048,
  1643. .halt_check = BRANCH_HALT,
  1644. .clkr = {
  1645. .enable_reg = 0x4f048,
  1646. .enable_mask = BIT(0),
  1647. .hw.init = &(struct clk_init_data) {
  1648. .name = "gcc_camss_csi1phy_clk",
  1649. .parent_hws = (const struct clk_hw*[]){
  1650. &csi1_clk_src.clkr.hw,
  1651. },
  1652. .num_parents = 1,
  1653. .ops = &clk_branch2_ops,
  1654. .flags = CLK_SET_RATE_PARENT,
  1655. }
  1656. }
  1657. };
  1658. static struct clk_branch gcc_camss_csi2phy_clk = {
  1659. .halt_reg = 0x3c048,
  1660. .halt_check = BRANCH_HALT,
  1661. .clkr = {
  1662. .enable_reg = 0x3c048,
  1663. .enable_mask = BIT(0),
  1664. .hw.init = &(struct clk_init_data) {
  1665. .name = "gcc_camss_csi2phy_clk",
  1666. .parent_hws = (const struct clk_hw*[]){
  1667. &csi2_clk_src.clkr.hw,
  1668. },
  1669. .num_parents = 1,
  1670. .ops = &clk_branch2_ops,
  1671. .flags = CLK_SET_RATE_PARENT,
  1672. }
  1673. }
  1674. };
  1675. static struct clk_branch gcc_camss_csi0phytimer_clk = {
  1676. .halt_reg = 0x4e01c,
  1677. .halt_check = BRANCH_HALT,
  1678. .clkr = {
  1679. .enable_reg = 0x4e01c,
  1680. .enable_mask = BIT(0),
  1681. .hw.init = &(struct clk_init_data) {
  1682. .name = "gcc_camss_csi0phytimer_clk",
  1683. .parent_hws = (const struct clk_hw*[]){
  1684. &csi0phytimer_clk_src.clkr.hw,
  1685. },
  1686. .num_parents = 1,
  1687. .ops = &clk_branch2_ops,
  1688. .flags = CLK_SET_RATE_PARENT,
  1689. }
  1690. }
  1691. };
  1692. static struct clk_branch gcc_camss_csi1phytimer_clk = {
  1693. .halt_reg = 0x4f01c,
  1694. .halt_check = BRANCH_HALT,
  1695. .clkr = {
  1696. .enable_reg = 0x4f01c,
  1697. .enable_mask = BIT(0),
  1698. .hw.init = &(struct clk_init_data) {
  1699. .name = "gcc_camss_csi1phytimer_clk",
  1700. .parent_hws = (const struct clk_hw*[]){
  1701. &csi1phytimer_clk_src.clkr.hw,
  1702. },
  1703. .num_parents = 1,
  1704. .ops = &clk_branch2_ops,
  1705. .flags = CLK_SET_RATE_PARENT,
  1706. }
  1707. }
  1708. };
  1709. static struct clk_branch gcc_camss_csi0pix_clk = {
  1710. .halt_reg = 0x4e058,
  1711. .halt_check = BRANCH_HALT,
  1712. .clkr = {
  1713. .enable_reg = 0x4e058,
  1714. .enable_mask = BIT(0),
  1715. .hw.init = &(struct clk_init_data) {
  1716. .name = "gcc_camss_csi0pix_clk",
  1717. .parent_hws = (const struct clk_hw*[]){
  1718. &csi0_clk_src.clkr.hw,
  1719. },
  1720. .num_parents = 1,
  1721. .ops = &clk_branch2_ops,
  1722. .flags = CLK_SET_RATE_PARENT,
  1723. }
  1724. }
  1725. };
  1726. static struct clk_branch gcc_camss_csi1pix_clk = {
  1727. .halt_reg = 0x4f058,
  1728. .halt_check = BRANCH_HALT,
  1729. .clkr = {
  1730. .enable_reg = 0x4f058,
  1731. .enable_mask = BIT(0),
  1732. .hw.init = &(struct clk_init_data) {
  1733. .name = "gcc_camss_csi1pix_clk",
  1734. .parent_hws = (const struct clk_hw*[]){
  1735. &csi1_clk_src.clkr.hw,
  1736. },
  1737. .num_parents = 1,
  1738. .ops = &clk_branch2_ops,
  1739. .flags = CLK_SET_RATE_PARENT,
  1740. }
  1741. }
  1742. };
  1743. static struct clk_branch gcc_camss_csi2pix_clk = {
  1744. .halt_reg = 0x3c058,
  1745. .halt_check = BRANCH_HALT,
  1746. .clkr = {
  1747. .enable_reg = 0x3c058,
  1748. .enable_mask = BIT(0),
  1749. .hw.init = &(struct clk_init_data) {
  1750. .name = "gcc_camss_csi2pix_clk",
  1751. .parent_hws = (const struct clk_hw*[]){
  1752. &csi2_clk_src.clkr.hw,
  1753. },
  1754. .num_parents = 1,
  1755. .ops = &clk_branch2_ops,
  1756. .flags = CLK_SET_RATE_PARENT,
  1757. }
  1758. }
  1759. };
  1760. static struct clk_branch gcc_camss_csi0rdi_clk = {
  1761. .halt_reg = 0x4e050,
  1762. .halt_check = BRANCH_HALT,
  1763. .clkr = {
  1764. .enable_reg = 0x4e050,
  1765. .enable_mask = BIT(0),
  1766. .hw.init = &(struct clk_init_data) {
  1767. .name = "gcc_camss_csi0rdi_clk",
  1768. .parent_hws = (const struct clk_hw*[]){
  1769. &csi0_clk_src.clkr.hw,
  1770. },
  1771. .num_parents = 1,
  1772. .ops = &clk_branch2_ops,
  1773. .flags = CLK_SET_RATE_PARENT,
  1774. }
  1775. }
  1776. };
  1777. static struct clk_branch gcc_camss_csi1rdi_clk = {
  1778. .halt_reg = 0x4f050,
  1779. .halt_check = BRANCH_HALT,
  1780. .clkr = {
  1781. .enable_reg = 0x4f050,
  1782. .enable_mask = BIT(0),
  1783. .hw.init = &(struct clk_init_data) {
  1784. .name = "gcc_camss_csi1rdi_clk",
  1785. .parent_hws = (const struct clk_hw*[]){
  1786. &csi1_clk_src.clkr.hw,
  1787. },
  1788. .num_parents = 1,
  1789. .ops = &clk_branch2_ops,
  1790. .flags = CLK_SET_RATE_PARENT,
  1791. }
  1792. }
  1793. };
  1794. static struct clk_branch gcc_camss_csi2rdi_clk = {
  1795. .halt_reg = 0x3c050,
  1796. .halt_check = BRANCH_HALT,
  1797. .clkr = {
  1798. .enable_reg = 0x3c050,
  1799. .enable_mask = BIT(0),
  1800. .hw.init = &(struct clk_init_data) {
  1801. .name = "gcc_camss_csi2rdi_clk",
  1802. .parent_hws = (const struct clk_hw*[]){
  1803. &csi2_clk_src.clkr.hw,
  1804. },
  1805. .num_parents = 1,
  1806. .ops = &clk_branch2_ops,
  1807. .flags = CLK_SET_RATE_PARENT,
  1808. }
  1809. }
  1810. };
  1811. static struct clk_branch gcc_camss_csi_vfe0_clk = {
  1812. .halt_reg = 0x58050,
  1813. .halt_check = BRANCH_HALT,
  1814. .clkr = {
  1815. .enable_reg = 0x58050,
  1816. .enable_mask = BIT(0),
  1817. .hw.init = &(struct clk_init_data) {
  1818. .name = "gcc_camss_csi_vfe0_clk",
  1819. .parent_hws = (const struct clk_hw*[]){
  1820. &vfe0_clk_src.clkr.hw,
  1821. },
  1822. .num_parents = 1,
  1823. .ops = &clk_branch2_ops,
  1824. .flags = CLK_SET_RATE_PARENT,
  1825. }
  1826. }
  1827. };
  1828. static struct clk_branch gcc_camss_csi_vfe1_clk = {
  1829. .halt_reg = 0x58074,
  1830. .halt_check = BRANCH_HALT,
  1831. .clkr = {
  1832. .enable_reg = 0x58074,
  1833. .enable_mask = BIT(0),
  1834. .hw.init = &(struct clk_init_data) {
  1835. .name = "gcc_camss_csi_vfe1_clk",
  1836. .parent_hws = (const struct clk_hw*[]){
  1837. &vfe1_clk_src.clkr.hw,
  1838. },
  1839. .num_parents = 1,
  1840. .ops = &clk_branch2_ops,
  1841. .flags = CLK_SET_RATE_PARENT,
  1842. }
  1843. }
  1844. };
  1845. static struct clk_branch gcc_camss_gp0_clk = {
  1846. .halt_reg = 0x54018,
  1847. .halt_check = BRANCH_HALT,
  1848. .clkr = {
  1849. .enable_reg = 0x54018,
  1850. .enable_mask = BIT(0),
  1851. .hw.init = &(struct clk_init_data) {
  1852. .name = "gcc_camss_gp0_clk",
  1853. .parent_hws = (const struct clk_hw*[]){
  1854. &camss_gp0_clk_src.clkr.hw,
  1855. },
  1856. .num_parents = 1,
  1857. .ops = &clk_branch2_ops,
  1858. .flags = CLK_SET_RATE_PARENT,
  1859. }
  1860. }
  1861. };
  1862. static struct clk_branch gcc_camss_gp1_clk = {
  1863. .halt_reg = 0x55018,
  1864. .halt_check = BRANCH_HALT,
  1865. .clkr = {
  1866. .enable_reg = 0x55018,
  1867. .enable_mask = BIT(0),
  1868. .hw.init = &(struct clk_init_data) {
  1869. .name = "gcc_camss_gp1_clk",
  1870. .parent_hws = (const struct clk_hw*[]){
  1871. &camss_gp1_clk_src.clkr.hw,
  1872. },
  1873. .num_parents = 1,
  1874. .ops = &clk_branch2_ops,
  1875. .flags = CLK_SET_RATE_PARENT,
  1876. }
  1877. }
  1878. };
  1879. static struct clk_branch gcc_camss_ispif_ahb_clk = {
  1880. .halt_reg = 0x50004,
  1881. .halt_check = BRANCH_HALT,
  1882. .clkr = {
  1883. .enable_reg = 0x50004,
  1884. .enable_mask = BIT(0),
  1885. .hw.init = &(struct clk_init_data) {
  1886. .name = "gcc_camss_ispif_ahb_clk",
  1887. .parent_hws = (const struct clk_hw*[]){
  1888. &camss_top_ahb_clk_src.clkr.hw,
  1889. },
  1890. .num_parents = 1,
  1891. .ops = &clk_branch2_ops,
  1892. .flags = CLK_SET_RATE_PARENT,
  1893. }
  1894. }
  1895. };
  1896. static struct clk_branch gcc_camss_jpeg0_clk = {
  1897. .halt_reg = 0x57020,
  1898. .halt_check = BRANCH_HALT,
  1899. .clkr = {
  1900. .enable_reg = 0x57020,
  1901. .enable_mask = BIT(0),
  1902. .hw.init = &(struct clk_init_data) {
  1903. .name = "gcc_camss_jpeg0_clk",
  1904. .parent_hws = (const struct clk_hw*[]){
  1905. &jpeg0_clk_src.clkr.hw,
  1906. },
  1907. .num_parents = 1,
  1908. .ops = &clk_branch2_ops,
  1909. .flags = CLK_SET_RATE_PARENT,
  1910. }
  1911. }
  1912. };
  1913. static struct clk_branch gcc_camss_jpeg_ahb_clk = {
  1914. .halt_reg = 0x57024,
  1915. .halt_check = BRANCH_HALT,
  1916. .clkr = {
  1917. .enable_reg = 0x57024,
  1918. .enable_mask = BIT(0),
  1919. .hw.init = &(struct clk_init_data) {
  1920. .name = "gcc_camss_jpeg_ahb_clk",
  1921. .parent_hws = (const struct clk_hw*[]){
  1922. &camss_top_ahb_clk_src.clkr.hw,
  1923. },
  1924. .num_parents = 1,
  1925. .ops = &clk_branch2_ops,
  1926. .flags = CLK_SET_RATE_PARENT,
  1927. }
  1928. }
  1929. };
  1930. static struct clk_branch gcc_camss_jpeg_axi_clk = {
  1931. .halt_reg = 0x57028,
  1932. .halt_check = BRANCH_HALT,
  1933. .clkr = {
  1934. .enable_reg = 0x57028,
  1935. .enable_mask = BIT(0),
  1936. .hw.init = &(struct clk_init_data) {
  1937. .name = "gcc_camss_jpeg_axi_clk",
  1938. .ops = &clk_branch2_ops,
  1939. }
  1940. }
  1941. };
  1942. static struct clk_branch gcc_camss_mclk0_clk = {
  1943. .halt_reg = 0x52018,
  1944. .halt_check = BRANCH_HALT,
  1945. .clkr = {
  1946. .enable_reg = 0x52018,
  1947. .enable_mask = BIT(0),
  1948. .hw.init = &(struct clk_init_data) {
  1949. .name = "gcc_camss_mclk0_clk",
  1950. .parent_hws = (const struct clk_hw*[]){
  1951. &mclk0_clk_src.clkr.hw,
  1952. },
  1953. .num_parents = 1,
  1954. .ops = &clk_branch2_ops,
  1955. .flags = CLK_SET_RATE_PARENT,
  1956. }
  1957. }
  1958. };
  1959. static struct clk_branch gcc_camss_mclk1_clk = {
  1960. .halt_reg = 0x53018,
  1961. .halt_check = BRANCH_HALT,
  1962. .clkr = {
  1963. .enable_reg = 0x53018,
  1964. .enable_mask = BIT(0),
  1965. .hw.init = &(struct clk_init_data) {
  1966. .name = "gcc_camss_mclk1_clk",
  1967. .parent_hws = (const struct clk_hw*[]){
  1968. &mclk1_clk_src.clkr.hw,
  1969. },
  1970. .num_parents = 1,
  1971. .ops = &clk_branch2_ops,
  1972. .flags = CLK_SET_RATE_PARENT,
  1973. }
  1974. }
  1975. };
  1976. static struct clk_branch gcc_camss_mclk2_clk = {
  1977. .halt_reg = 0x5c018,
  1978. .halt_check = BRANCH_HALT,
  1979. .clkr = {
  1980. .enable_reg = 0x5c018,
  1981. .enable_mask = BIT(0),
  1982. .hw.init = &(struct clk_init_data) {
  1983. .name = "gcc_camss_mclk2_clk",
  1984. .parent_hws = (const struct clk_hw*[]){
  1985. &mclk2_clk_src.clkr.hw,
  1986. },
  1987. .num_parents = 1,
  1988. .ops = &clk_branch2_ops,
  1989. .flags = CLK_SET_RATE_PARENT,
  1990. }
  1991. }
  1992. };
  1993. static struct clk_branch gcc_camss_micro_ahb_clk = {
  1994. .halt_reg = 0x5600c,
  1995. .halt_check = BRANCH_HALT,
  1996. .clkr = {
  1997. .enable_reg = 0x5600c,
  1998. .enable_mask = BIT(0),
  1999. .hw.init = &(struct clk_init_data) {
  2000. .name = "gcc_camss_micro_ahb_clk",
  2001. .parent_hws = (const struct clk_hw*[]){
  2002. &camss_top_ahb_clk_src.clkr.hw,
  2003. },
  2004. .num_parents = 1,
  2005. .ops = &clk_branch2_ops,
  2006. .flags = CLK_SET_RATE_PARENT,
  2007. }
  2008. }
  2009. };
  2010. static struct clk_branch gcc_camss_top_ahb_clk = {
  2011. .halt_reg = 0x5a014,
  2012. .halt_check = BRANCH_HALT,
  2013. .clkr = {
  2014. .enable_reg = 0x5a014,
  2015. .enable_mask = BIT(0),
  2016. .hw.init = &(struct clk_init_data) {
  2017. .name = "gcc_camss_top_ahb_clk",
  2018. .parent_hws = (const struct clk_hw*[]){
  2019. &camss_top_ahb_clk_src.clkr.hw,
  2020. },
  2021. .num_parents = 1,
  2022. .ops = &clk_branch2_ops,
  2023. .flags = CLK_SET_RATE_PARENT,
  2024. }
  2025. }
  2026. };
  2027. static struct clk_branch gcc_camss_vfe0_ahb_clk = {
  2028. .halt_reg = 0x58044,
  2029. .halt_check = BRANCH_HALT,
  2030. .clkr = {
  2031. .enable_reg = 0x58044,
  2032. .enable_mask = BIT(0),
  2033. .hw.init = &(struct clk_init_data) {
  2034. .name = "gcc_camss_vfe0_ahb_clk",
  2035. .parent_hws = (const struct clk_hw*[]){
  2036. &camss_top_ahb_clk_src.clkr.hw,
  2037. },
  2038. .num_parents = 1,
  2039. .ops = &clk_branch2_ops,
  2040. .flags = CLK_SET_RATE_PARENT,
  2041. }
  2042. }
  2043. };
  2044. static struct clk_branch gcc_camss_vfe0_axi_clk = {
  2045. .halt_reg = 0x58048,
  2046. .halt_check = BRANCH_HALT,
  2047. .clkr = {
  2048. .enable_reg = 0x58048,
  2049. .enable_mask = BIT(0),
  2050. .hw.init = &(struct clk_init_data) {
  2051. .name = "gcc_camss_vfe0_axi_clk",
  2052. .ops = &clk_branch2_ops,
  2053. }
  2054. }
  2055. };
  2056. static struct clk_branch gcc_camss_vfe0_clk = {
  2057. .halt_reg = 0x58038,
  2058. .halt_check = BRANCH_HALT,
  2059. .clkr = {
  2060. .enable_reg = 0x58038,
  2061. .enable_mask = BIT(0),
  2062. .hw.init = &(struct clk_init_data) {
  2063. .name = "gcc_camss_vfe0_clk",
  2064. .parent_hws = (const struct clk_hw*[]){
  2065. &vfe0_clk_src.clkr.hw,
  2066. },
  2067. .num_parents = 1,
  2068. .ops = &clk_branch2_ops,
  2069. .flags = CLK_SET_RATE_PARENT,
  2070. }
  2071. }
  2072. };
  2073. static struct clk_branch gcc_camss_vfe1_ahb_clk = {
  2074. .halt_reg = 0x58060,
  2075. .halt_check = BRANCH_HALT,
  2076. .clkr = {
  2077. .enable_reg = 0x58060,
  2078. .enable_mask = BIT(0),
  2079. .hw.init = &(struct clk_init_data) {
  2080. .name = "gcc_camss_vfe1_ahb_clk",
  2081. .parent_hws = (const struct clk_hw*[]){
  2082. &camss_top_ahb_clk_src.clkr.hw,
  2083. },
  2084. .num_parents = 1,
  2085. .ops = &clk_branch2_ops,
  2086. .flags = CLK_SET_RATE_PARENT,
  2087. }
  2088. }
  2089. };
  2090. static struct clk_branch gcc_camss_vfe1_axi_clk = {
  2091. .halt_reg = 0x58068,
  2092. .halt_check = BRANCH_HALT,
  2093. .clkr = {
  2094. .enable_reg = 0x58068,
  2095. .enable_mask = BIT(0),
  2096. .hw.init = &(struct clk_init_data) {
  2097. .name = "gcc_camss_vfe1_axi_clk",
  2098. .ops = &clk_branch2_ops,
  2099. }
  2100. }
  2101. };
  2102. static struct clk_branch gcc_camss_vfe1_clk = {
  2103. .halt_reg = 0x5805c,
  2104. .halt_check = BRANCH_HALT,
  2105. .clkr = {
  2106. .enable_reg = 0x5805c,
  2107. .enable_mask = BIT(0),
  2108. .hw.init = &(struct clk_init_data) {
  2109. .name = "gcc_camss_vfe1_clk",
  2110. .parent_hws = (const struct clk_hw*[]){
  2111. &vfe1_clk_src.clkr.hw,
  2112. },
  2113. .num_parents = 1,
  2114. .ops = &clk_branch2_ops,
  2115. .flags = CLK_SET_RATE_PARENT,
  2116. }
  2117. }
  2118. };
  2119. static struct clk_branch gcc_cpp_tbu_clk = {
  2120. .halt_reg = 0x12040,
  2121. .halt_check = BRANCH_HALT_VOTED,
  2122. .clkr = {
  2123. .enable_reg = 0x4500c,
  2124. .enable_mask = BIT(14),
  2125. .hw.init = &(struct clk_init_data) {
  2126. .name = "gcc_cpp_tbu_clk",
  2127. .ops = &clk_branch2_ops,
  2128. }
  2129. }
  2130. };
  2131. static struct clk_branch gcc_crypto_ahb_clk = {
  2132. .halt_reg = 0x16024,
  2133. .halt_check = BRANCH_HALT_VOTED,
  2134. .clkr = {
  2135. .enable_reg = 0x45004,
  2136. .enable_mask = BIT(0),
  2137. .hw.init = &(struct clk_init_data) {
  2138. .name = "gcc_crypto_ahb_clk",
  2139. .ops = &clk_branch2_ops,
  2140. }
  2141. }
  2142. };
  2143. static struct clk_branch gcc_crypto_axi_clk = {
  2144. .halt_reg = 0x16020,
  2145. .halt_check = BRANCH_HALT_VOTED,
  2146. .clkr = {
  2147. .enable_reg = 0x45004,
  2148. .enable_mask = BIT(1),
  2149. .hw.init = &(struct clk_init_data) {
  2150. .name = "gcc_crypto_axi_clk",
  2151. .ops = &clk_branch2_ops,
  2152. }
  2153. }
  2154. };
  2155. static struct clk_branch gcc_crypto_clk = {
  2156. .halt_reg = 0x1601c,
  2157. .halt_check = BRANCH_HALT_VOTED,
  2158. .clkr = {
  2159. .enable_reg = 0x45004,
  2160. .enable_mask = BIT(2),
  2161. .hw.init = &(struct clk_init_data) {
  2162. .name = "gcc_crypto_clk",
  2163. .parent_hws = (const struct clk_hw*[]){
  2164. &crypto_clk_src.clkr.hw,
  2165. },
  2166. .num_parents = 1,
  2167. .ops = &clk_branch2_ops,
  2168. .flags = CLK_SET_RATE_PARENT,
  2169. }
  2170. }
  2171. };
  2172. static struct clk_branch gcc_dcc_clk = {
  2173. .halt_reg = 0x77004,
  2174. .halt_check = BRANCH_HALT,
  2175. .clkr = {
  2176. .enable_reg = 0x77004,
  2177. .enable_mask = BIT(0),
  2178. .hw.init = &(struct clk_init_data) {
  2179. .name = "gcc_dcc_clk",
  2180. .ops = &clk_branch2_ops,
  2181. }
  2182. }
  2183. };
  2184. static struct clk_branch gcc_gfx_tbu_clk = {
  2185. .halt_reg = 0x12010,
  2186. .halt_check = BRANCH_HALT_VOTED,
  2187. .clkr = {
  2188. .enable_reg = 0x4500c,
  2189. .enable_mask = BIT(3),
  2190. .hw.init = &(struct clk_init_data){
  2191. .name = "gcc_gfx_tbu_clk",
  2192. .ops = &clk_branch2_ops,
  2193. },
  2194. },
  2195. };
  2196. static struct clk_branch gcc_gfx_tcu_clk = {
  2197. .halt_reg = 0x12020,
  2198. .halt_check = BRANCH_HALT_VOTED,
  2199. .clkr = {
  2200. .enable_reg = 0x4500c,
  2201. .enable_mask = BIT(2),
  2202. .hw.init = &(struct clk_init_data){
  2203. .name = "gcc_gfx_tcu_clk",
  2204. .ops = &clk_branch2_ops,
  2205. },
  2206. },
  2207. };
  2208. static struct clk_branch gcc_gtcu_ahb_clk = {
  2209. .halt_reg = 0x12044,
  2210. .halt_check = BRANCH_HALT_VOTED,
  2211. .clkr = {
  2212. .enable_reg = 0x4500c,
  2213. .enable_mask = BIT(13),
  2214. .hw.init = &(struct clk_init_data){
  2215. .name = "gcc_gtcu_ahb_clk",
  2216. .ops = &clk_branch2_ops,
  2217. },
  2218. },
  2219. };
  2220. static struct clk_branch gcc_gp1_clk = {
  2221. .halt_reg = 0x08000,
  2222. .halt_check = BRANCH_HALT,
  2223. .clkr = {
  2224. .enable_reg = 0x08000,
  2225. .enable_mask = BIT(0),
  2226. .hw.init = &(struct clk_init_data) {
  2227. .name = "gcc_gp1_clk",
  2228. .parent_hws = (const struct clk_hw*[]){
  2229. &gp1_clk_src.clkr.hw,
  2230. },
  2231. .num_parents = 1,
  2232. .ops = &clk_branch2_ops,
  2233. .flags = CLK_SET_RATE_PARENT,
  2234. }
  2235. }
  2236. };
  2237. static struct clk_branch gcc_gp2_clk = {
  2238. .halt_reg = 0x09000,
  2239. .halt_check = BRANCH_HALT,
  2240. .clkr = {
  2241. .enable_reg = 0x09000,
  2242. .enable_mask = BIT(0),
  2243. .hw.init = &(struct clk_init_data) {
  2244. .name = "gcc_gp2_clk",
  2245. .parent_hws = (const struct clk_hw*[]){
  2246. &gp2_clk_src.clkr.hw,
  2247. },
  2248. .num_parents = 1,
  2249. .ops = &clk_branch2_ops,
  2250. .flags = CLK_SET_RATE_PARENT,
  2251. }
  2252. }
  2253. };
  2254. static struct clk_branch gcc_gp3_clk = {
  2255. .halt_reg = 0x0a000,
  2256. .halt_check = BRANCH_HALT,
  2257. .clkr = {
  2258. .enable_reg = 0x0a000,
  2259. .enable_mask = BIT(0),
  2260. .hw.init = &(struct clk_init_data) {
  2261. .name = "gcc_gp3_clk",
  2262. .parent_hws = (const struct clk_hw*[]){
  2263. &gp3_clk_src.clkr.hw,
  2264. },
  2265. .num_parents = 1,
  2266. .ops = &clk_branch2_ops,
  2267. .flags = CLK_SET_RATE_PARENT,
  2268. }
  2269. }
  2270. };
  2271. static struct clk_branch gcc_jpeg_tbu_clk = {
  2272. .halt_reg = 0x12034,
  2273. .halt_check = BRANCH_HALT_VOTED,
  2274. .clkr = {
  2275. .enable_reg = 0x4500c,
  2276. .enable_mask = BIT(10),
  2277. .hw.init = &(struct clk_init_data) {
  2278. .name = "gcc_jpeg_tbu_clk",
  2279. .ops = &clk_branch2_ops,
  2280. }
  2281. }
  2282. };
  2283. static struct clk_branch gcc_mdp_tbu_clk = {
  2284. .halt_reg = 0x1201c,
  2285. .halt_check = BRANCH_HALT_VOTED,
  2286. .clkr = {
  2287. .enable_reg = 0x4500c,
  2288. .enable_mask = BIT(4),
  2289. .hw.init = &(struct clk_init_data) {
  2290. .name = "gcc_mdp_tbu_clk",
  2291. .ops = &clk_branch2_ops,
  2292. }
  2293. }
  2294. };
  2295. static struct clk_branch gcc_mdss_ahb_clk = {
  2296. .halt_reg = 0x4d07c,
  2297. .halt_check = BRANCH_HALT,
  2298. .clkr = {
  2299. .enable_reg = 0x4d07c,
  2300. .enable_mask = BIT(0),
  2301. .hw.init = &(struct clk_init_data) {
  2302. .name = "gcc_mdss_ahb_clk",
  2303. .ops = &clk_branch2_ops,
  2304. }
  2305. }
  2306. };
  2307. static struct clk_branch gcc_mdss_axi_clk = {
  2308. .halt_reg = 0x4d080,
  2309. .halt_check = BRANCH_HALT,
  2310. .clkr = {
  2311. .enable_reg = 0x4d080,
  2312. .enable_mask = BIT(0),
  2313. .hw.init = &(struct clk_init_data) {
  2314. .name = "gcc_mdss_axi_clk",
  2315. .ops = &clk_branch2_ops,
  2316. }
  2317. }
  2318. };
  2319. static struct clk_branch gcc_mdss_byte0_clk = {
  2320. .halt_reg = 0x4d094,
  2321. .halt_check = BRANCH_HALT,
  2322. .clkr = {
  2323. .enable_reg = 0x4d094,
  2324. .enable_mask = BIT(0),
  2325. .hw.init = &(struct clk_init_data) {
  2326. .name = "gcc_mdss_byte0_clk",
  2327. .parent_hws = (const struct clk_hw*[]){
  2328. &byte0_clk_src.clkr.hw,
  2329. },
  2330. .num_parents = 1,
  2331. .ops = &clk_branch2_ops,
  2332. .flags = CLK_SET_RATE_PARENT,
  2333. }
  2334. }
  2335. };
  2336. static struct clk_branch gcc_mdss_esc0_clk = {
  2337. .halt_reg = 0x4d098,
  2338. .halt_check = BRANCH_HALT,
  2339. .clkr = {
  2340. .enable_reg = 0x4d098,
  2341. .enable_mask = BIT(0),
  2342. .hw.init = &(struct clk_init_data) {
  2343. .name = "gcc_mdss_esc0_clk",
  2344. .parent_hws = (const struct clk_hw*[]){
  2345. &esc0_clk_src.clkr.hw,
  2346. },
  2347. .num_parents = 1,
  2348. .ops = &clk_branch2_ops,
  2349. .flags = CLK_SET_RATE_PARENT,
  2350. }
  2351. }
  2352. };
  2353. static struct clk_branch gcc_mdss_mdp_clk = {
  2354. .halt_reg = 0x4d088,
  2355. .halt_check = BRANCH_HALT,
  2356. .clkr = {
  2357. .enable_reg = 0x4d088,
  2358. .enable_mask = BIT(0),
  2359. .hw.init = &(struct clk_init_data) {
  2360. .name = "gcc_mdss_mdp_clk",
  2361. .parent_hws = (const struct clk_hw*[]){
  2362. &mdp_clk_src.clkr.hw,
  2363. },
  2364. .num_parents = 1,
  2365. .ops = &clk_branch2_ops,
  2366. .flags = CLK_SET_RATE_PARENT,
  2367. }
  2368. }
  2369. };
  2370. static struct clk_branch gcc_mdss_pclk0_clk = {
  2371. .halt_reg = 0x4d084,
  2372. .halt_check = BRANCH_HALT,
  2373. .clkr = {
  2374. .enable_reg = 0x4d084,
  2375. .enable_mask = BIT(0),
  2376. .hw.init = &(struct clk_init_data) {
  2377. .name = "gcc_mdss_pclk0_clk",
  2378. .parent_hws = (const struct clk_hw*[]){
  2379. &pclk0_clk_src.clkr.hw,
  2380. },
  2381. .num_parents = 1,
  2382. .ops = &clk_branch2_ops,
  2383. .flags = CLK_SET_RATE_PARENT,
  2384. }
  2385. }
  2386. };
  2387. static struct clk_branch gcc_mdss_vsync_clk = {
  2388. .halt_reg = 0x4d090,
  2389. .halt_check = BRANCH_HALT,
  2390. .clkr = {
  2391. .enable_reg = 0x4d090,
  2392. .enable_mask = BIT(0),
  2393. .hw.init = &(struct clk_init_data) {
  2394. .name = "gcc_mdss_vsync_clk",
  2395. .parent_hws = (const struct clk_hw*[]){
  2396. &vsync_clk_src.clkr.hw,
  2397. },
  2398. .num_parents = 1,
  2399. .ops = &clk_branch2_ops,
  2400. .flags = CLK_SET_RATE_PARENT,
  2401. }
  2402. }
  2403. };
  2404. static struct clk_branch gcc_mss_cfg_ahb_clk = {
  2405. .halt_reg = 0x49000,
  2406. .halt_check = BRANCH_HALT,
  2407. .clkr = {
  2408. .enable_reg = 0x49000,
  2409. .enable_mask = BIT(0),
  2410. .hw.init = &(struct clk_init_data) {
  2411. .name = "gcc_mss_cfg_ahb_clk",
  2412. .ops = &clk_branch2_ops,
  2413. }
  2414. }
  2415. };
  2416. static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
  2417. .halt_reg = 0x49004,
  2418. .halt_check = BRANCH_HALT,
  2419. .clkr = {
  2420. .enable_reg = 0x49004,
  2421. .enable_mask = BIT(0),
  2422. .hw.init = &(struct clk_init_data) {
  2423. .name = "gcc_mss_q6_bimc_axi_clk",
  2424. .ops = &clk_branch2_ops,
  2425. }
  2426. }
  2427. };
  2428. static struct clk_branch gcc_oxili_ahb_clk = {
  2429. .halt_reg = 0x59028,
  2430. .halt_check = BRANCH_HALT,
  2431. .clkr = {
  2432. .enable_reg = 0x59028,
  2433. .enable_mask = BIT(0),
  2434. .hw.init = &(struct clk_init_data) {
  2435. .name = "gcc_oxili_ahb_clk",
  2436. .ops = &clk_branch2_ops,
  2437. }
  2438. }
  2439. };
  2440. static struct clk_branch gcc_oxili_gfx3d_clk = {
  2441. .halt_reg = 0x59020,
  2442. .halt_check = BRANCH_HALT,
  2443. .clkr = {
  2444. .enable_reg = 0x59020,
  2445. .enable_mask = BIT(0),
  2446. .hw.init = &(struct clk_init_data) {
  2447. .name = "gcc_oxili_gfx3d_clk",
  2448. .parent_hws = (const struct clk_hw*[]){
  2449. &gfx3d_clk_src.clkr.hw,
  2450. },
  2451. .num_parents = 1,
  2452. .ops = &clk_branch2_ops,
  2453. .flags = CLK_SET_RATE_PARENT,
  2454. }
  2455. }
  2456. };
  2457. static struct clk_branch gcc_pdm2_clk = {
  2458. .halt_reg = 0x4400c,
  2459. .halt_check = BRANCH_HALT,
  2460. .clkr = {
  2461. .enable_reg = 0x4400c,
  2462. .enable_mask = BIT(0),
  2463. .hw.init = &(struct clk_init_data) {
  2464. .name = "gcc_pdm2_clk",
  2465. .parent_hws = (const struct clk_hw*[]){
  2466. &pdm2_clk_src.clkr.hw,
  2467. },
  2468. .num_parents = 1,
  2469. .ops = &clk_branch2_ops,
  2470. .flags = CLK_SET_RATE_PARENT,
  2471. }
  2472. }
  2473. };
  2474. static struct clk_branch gcc_pdm_ahb_clk = {
  2475. .halt_reg = 0x44004,
  2476. .halt_check = BRANCH_HALT,
  2477. .clkr = {
  2478. .enable_reg = 0x44004,
  2479. .enable_mask = BIT(0),
  2480. .hw.init = &(struct clk_init_data) {
  2481. .name = "gcc_pdm_ahb_clk",
  2482. .ops = &clk_branch2_ops,
  2483. }
  2484. }
  2485. };
  2486. static struct clk_branch gcc_prng_ahb_clk = {
  2487. .halt_reg = 0x13004,
  2488. .halt_check = BRANCH_HALT_VOTED,
  2489. .clkr = {
  2490. .enable_reg = 0x45004,
  2491. .enable_mask = BIT(8),
  2492. .hw.init = &(struct clk_init_data) {
  2493. .name = "gcc_prng_ahb_clk",
  2494. .ops = &clk_branch2_ops,
  2495. }
  2496. }
  2497. };
  2498. static struct clk_branch gcc_qdss_dap_clk = {
  2499. .halt_reg = 0x29084,
  2500. .halt_check = BRANCH_HALT_VOTED,
  2501. .clkr = {
  2502. .enable_reg = 0x45004,
  2503. .enable_mask = BIT(11),
  2504. .hw.init = &(struct clk_init_data) {
  2505. .name = "gcc_qdss_dap_clk",
  2506. .ops = &clk_branch2_ops,
  2507. }
  2508. }
  2509. };
  2510. static struct clk_branch gcc_sdcc1_ice_core_clk = {
  2511. .halt_reg = 0x5d014,
  2512. .halt_check = BRANCH_HALT,
  2513. .clkr = {
  2514. .enable_reg = 0x5d014,
  2515. .enable_mask = BIT(0),
  2516. .hw.init = &(struct clk_init_data) {
  2517. .name = "gcc_sdcc1_ice_core_clk",
  2518. .parent_hws = (const struct clk_hw*[]){
  2519. &sdcc1_ice_core_clk_src.clkr.hw,
  2520. },
  2521. .num_parents = 1,
  2522. .ops = &clk_branch2_ops,
  2523. .flags = CLK_SET_RATE_PARENT,
  2524. }
  2525. }
  2526. };
  2527. static struct clk_branch gcc_sdcc1_ahb_clk = {
  2528. .halt_reg = 0x4201c,
  2529. .halt_check = BRANCH_HALT,
  2530. .clkr = {
  2531. .enable_reg = 0x4201c,
  2532. .enable_mask = BIT(0),
  2533. .hw.init = &(struct clk_init_data) {
  2534. .name = "gcc_sdcc1_ahb_clk",
  2535. .ops = &clk_branch2_ops,
  2536. }
  2537. }
  2538. };
  2539. static struct clk_branch gcc_sdcc2_ahb_clk = {
  2540. .halt_reg = 0x4301c,
  2541. .halt_check = BRANCH_HALT,
  2542. .clkr = {
  2543. .enable_reg = 0x4301c,
  2544. .enable_mask = BIT(0),
  2545. .hw.init = &(struct clk_init_data) {
  2546. .name = "gcc_sdcc2_ahb_clk",
  2547. .ops = &clk_branch2_ops,
  2548. }
  2549. }
  2550. };
  2551. static struct clk_branch gcc_sdcc1_apps_clk = {
  2552. .halt_reg = 0x42018,
  2553. .halt_check = BRANCH_HALT,
  2554. .clkr = {
  2555. .enable_reg = 0x42018,
  2556. .enable_mask = BIT(0),
  2557. .hw.init = &(struct clk_init_data) {
  2558. .name = "gcc_sdcc1_apps_clk",
  2559. .parent_hws = (const struct clk_hw*[]){
  2560. &sdcc1_apps_clk_src.clkr.hw,
  2561. },
  2562. .num_parents = 1,
  2563. .ops = &clk_branch2_ops,
  2564. .flags = CLK_SET_RATE_PARENT,
  2565. }
  2566. }
  2567. };
  2568. static struct clk_branch gcc_sdcc2_apps_clk = {
  2569. .halt_reg = 0x43018,
  2570. .halt_check = BRANCH_HALT,
  2571. .clkr = {
  2572. .enable_reg = 0x43018,
  2573. .enable_mask = BIT(0),
  2574. .hw.init = &(struct clk_init_data) {
  2575. .name = "gcc_sdcc2_apps_clk",
  2576. .parent_hws = (const struct clk_hw*[]){
  2577. &sdcc2_apps_clk_src.clkr.hw,
  2578. },
  2579. .num_parents = 1,
  2580. .ops = &clk_branch2_ops,
  2581. .flags = CLK_SET_RATE_PARENT,
  2582. }
  2583. }
  2584. };
  2585. static struct clk_branch gcc_smmu_cfg_clk = {
  2586. .halt_reg = 0x12038,
  2587. .halt_check = BRANCH_HALT_VOTED,
  2588. .clkr = {
  2589. .enable_reg = 0x4500c,
  2590. .enable_mask = BIT(12),
  2591. .hw.init = &(struct clk_init_data) {
  2592. .name = "gcc_smmu_cfg_clk",
  2593. .ops = &clk_branch2_ops,
  2594. }
  2595. }
  2596. };
  2597. static struct clk_branch gcc_usb2a_phy_sleep_clk = {
  2598. .halt_reg = 0x4102c,
  2599. .clkr = {
  2600. .enable_reg = 0x4102c,
  2601. .enable_mask = BIT(0),
  2602. .hw.init = &(struct clk_init_data){
  2603. .name = "gcc_usb2a_phy_sleep_clk",
  2604. .ops = &clk_branch2_ops,
  2605. },
  2606. },
  2607. };
  2608. static struct clk_branch gcc_usb_hs_ahb_clk = {
  2609. .halt_reg = 0x41008,
  2610. .clkr = {
  2611. .enable_reg = 0x41008,
  2612. .enable_mask = BIT(0),
  2613. .hw.init = &(struct clk_init_data){
  2614. .name = "gcc_usb_hs_ahb_clk",
  2615. .ops = &clk_branch2_ops,
  2616. },
  2617. },
  2618. };
  2619. static struct clk_branch gcc_usb_hs_phy_cfg_ahb_clk = {
  2620. .halt_reg = 0x41030,
  2621. .clkr = {
  2622. .enable_reg = 0x41030,
  2623. .enable_mask = BIT(0),
  2624. .hw.init = &(struct clk_init_data){
  2625. .name = "gcc_usb_hs_phy_cfg_ahb_clk",
  2626. .ops = &clk_branch2_ops,
  2627. },
  2628. },
  2629. };
  2630. static struct clk_branch gcc_usb_hs_system_clk = {
  2631. .halt_reg = 0x41004,
  2632. .clkr = {
  2633. .enable_reg = 0x41004,
  2634. .enable_mask = BIT(0),
  2635. .hw.init = &(struct clk_init_data){
  2636. .name = "gcc_usb_hs_system_clk",
  2637. .parent_hws = (const struct clk_hw*[]){
  2638. &usb_hs_system_clk_src.clkr.hw,
  2639. },
  2640. .num_parents = 1,
  2641. .flags = CLK_SET_RATE_PARENT,
  2642. .ops = &clk_branch2_ops,
  2643. },
  2644. },
  2645. };
  2646. static struct clk_branch gcc_venus0_ahb_clk = {
  2647. .halt_reg = 0x4c020,
  2648. .halt_check = BRANCH_HALT,
  2649. .clkr = {
  2650. .enable_reg = 0x4c020,
  2651. .enable_mask = BIT(0),
  2652. .hw.init = &(struct clk_init_data) {
  2653. .name = "gcc_venus0_ahb_clk",
  2654. .ops = &clk_branch2_ops,
  2655. }
  2656. }
  2657. };
  2658. static struct clk_branch gcc_venus0_axi_clk = {
  2659. .halt_reg = 0x4c024,
  2660. .halt_check = BRANCH_HALT,
  2661. .clkr = {
  2662. .enable_reg = 0x4c024,
  2663. .enable_mask = BIT(0),
  2664. .hw.init = &(struct clk_init_data) {
  2665. .name = "gcc_venus0_axi_clk",
  2666. .ops = &clk_branch2_ops,
  2667. }
  2668. }
  2669. };
  2670. static struct clk_branch gcc_venus0_core0_vcodec0_clk = {
  2671. .halt_reg = 0x4c02c,
  2672. .halt_check = BRANCH_HALT,
  2673. .clkr = {
  2674. .enable_reg = 0x4c02c,
  2675. .enable_mask = BIT(0),
  2676. .hw.init = &(struct clk_init_data) {
  2677. .name = "gcc_venus0_core0_vcodec0_clk",
  2678. .parent_hws = (const struct clk_hw*[]){
  2679. &vcodec0_clk_src.clkr.hw,
  2680. },
  2681. .num_parents = 1,
  2682. .ops = &clk_branch2_ops,
  2683. .flags = CLK_SET_RATE_PARENT,
  2684. }
  2685. }
  2686. };
  2687. static struct clk_branch gcc_venus0_vcodec0_clk = {
  2688. .halt_reg = 0x4c01c,
  2689. .halt_check = BRANCH_HALT,
  2690. .clkr = {
  2691. .enable_reg = 0x4c01c,
  2692. .enable_mask = BIT(0),
  2693. .hw.init = &(struct clk_init_data) {
  2694. .name = "gcc_venus0_vcodec0_clk",
  2695. .parent_hws = (const struct clk_hw*[]){
  2696. &vcodec0_clk_src.clkr.hw,
  2697. },
  2698. .num_parents = 1,
  2699. .ops = &clk_branch2_ops,
  2700. .flags = CLK_SET_RATE_PARENT,
  2701. }
  2702. }
  2703. };
  2704. static struct clk_branch gcc_venus_tbu_clk = {
  2705. .halt_reg = 0x12014,
  2706. .halt_check = BRANCH_HALT_VOTED,
  2707. .clkr = {
  2708. .enable_reg = 0x4500c,
  2709. .enable_mask = BIT(5),
  2710. .hw.init = &(struct clk_init_data) {
  2711. .name = "gcc_venus_tbu_clk",
  2712. .ops = &clk_branch2_ops,
  2713. }
  2714. }
  2715. };
  2716. static struct clk_branch gcc_vfe1_tbu_clk = {
  2717. .halt_reg = 0x12090,
  2718. .halt_check = BRANCH_HALT_VOTED,
  2719. .clkr = {
  2720. .enable_reg = 0x4500c,
  2721. .enable_mask = BIT(17),
  2722. .hw.init = &(struct clk_init_data) {
  2723. .name = "gcc_vfe1_tbu_clk",
  2724. .ops = &clk_branch2_ops,
  2725. }
  2726. }
  2727. };
  2728. static struct clk_branch gcc_vfe_tbu_clk = {
  2729. .halt_reg = 0x1203c,
  2730. .halt_check = BRANCH_HALT_VOTED,
  2731. .clkr = {
  2732. .enable_reg = 0x4500c,
  2733. .enable_mask = BIT(9),
  2734. .hw.init = &(struct clk_init_data) {
  2735. .name = "gcc_vfe_tbu_clk",
  2736. .ops = &clk_branch2_ops,
  2737. }
  2738. }
  2739. };
  2740. static struct gdsc venus_gdsc = {
  2741. .gdscr = 0x4c018,
  2742. .cxcs = (unsigned int []){ 0x4c024, 0x4c01c },
  2743. .cxc_count = 2,
  2744. .pd = {
  2745. .name = "venus_gdsc",
  2746. },
  2747. .pwrsts = PWRSTS_OFF_ON,
  2748. };
  2749. static struct gdsc venus_core0_gdsc = {
  2750. .gdscr = 0x4c028,
  2751. .cxcs = (unsigned int []){ 0x4c02c },
  2752. .cxc_count = 1,
  2753. .pd = {
  2754. .name = "venus_core0",
  2755. },
  2756. .flags = HW_CTRL,
  2757. .pwrsts = PWRSTS_OFF_ON,
  2758. };
  2759. static struct gdsc mdss_gdsc = {
  2760. .gdscr = 0x4d078,
  2761. .cxcs = (unsigned int []){ 0x4d080, 0x4d088 },
  2762. .cxc_count = 2,
  2763. .pd = {
  2764. .name = "mdss_gdsc",
  2765. },
  2766. .pwrsts = PWRSTS_OFF_ON,
  2767. };
  2768. static struct gdsc jpeg_gdsc = {
  2769. .gdscr = 0x5701c,
  2770. .cxcs = (unsigned int []){ 0x57020, 0x57028 },
  2771. .cxc_count = 2,
  2772. .pd = {
  2773. .name = "jpeg_gdsc",
  2774. },
  2775. .pwrsts = PWRSTS_OFF_ON,
  2776. };
  2777. static struct gdsc vfe0_gdsc = {
  2778. .gdscr = 0x58034,
  2779. .cxcs = (unsigned int []){ 0x58038, 0x58048, 0x5600c, 0x58050 },
  2780. .cxc_count = 4,
  2781. .pd = {
  2782. .name = "vfe0_gdsc",
  2783. },
  2784. .pwrsts = PWRSTS_OFF_ON,
  2785. };
  2786. static struct gdsc vfe1_gdsc = {
  2787. .gdscr = 0x5806c,
  2788. .cxcs = (unsigned int []){ 0x5805c, 0x58068, 0x5600c, 0x58074 },
  2789. .cxc_count = 4,
  2790. .pd = {
  2791. .name = "vfe1_gdsc",
  2792. },
  2793. .pwrsts = PWRSTS_OFF_ON,
  2794. };
  2795. static struct gdsc oxili_gx_gdsc = {
  2796. .gdscr = 0x5901c,
  2797. .clamp_io_ctrl = 0x5b00c,
  2798. .cxcs = (unsigned int []){ 0x59000, 0x59020 },
  2799. .cxc_count = 2,
  2800. .pd = {
  2801. .name = "oxili_gx_gdsc",
  2802. },
  2803. .pwrsts = PWRSTS_OFF_ON,
  2804. .flags = CLAMP_IO,
  2805. };
  2806. static struct gdsc cpp_gdsc = {
  2807. .gdscr = 0x58078,
  2808. .cxcs = (unsigned int []){ 0x5803c, 0x58064 },
  2809. .cxc_count = 2,
  2810. .pd = {
  2811. .name = "cpp_gdsc",
  2812. },
  2813. .flags = ALWAYS_ON,
  2814. .pwrsts = PWRSTS_OFF_ON,
  2815. };
  2816. static struct clk_regmap *gcc_msm8917_clocks[] = {
  2817. [GPLL0] = &gpll0.clkr,
  2818. [GPLL0_EARLY] = &gpll0_early.clkr,
  2819. [GPLL0_SLEEP_CLK_SRC] = &gpll0_sleep_clk_src.clkr,
  2820. [GPLL3] = &gpll3.clkr,
  2821. [GPLL3_EARLY] = &gpll3_early.clkr,
  2822. [GPLL4] = &gpll4.clkr,
  2823. [GPLL4_EARLY] = &gpll4_early.clkr,
  2824. [GPLL6] = &gpll6,
  2825. [GPLL6_EARLY] = &gpll6_early.clkr,
  2826. [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
  2827. [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
  2828. [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
  2829. [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
  2830. [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
  2831. [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
  2832. [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
  2833. [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
  2834. [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
  2835. [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
  2836. [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
  2837. [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
  2838. [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
  2839. [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
  2840. [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
  2841. [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
  2842. [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
  2843. [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
  2844. [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
  2845. [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
  2846. [CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr,
  2847. [CCI_CLK_SRC] = &cci_clk_src.clkr,
  2848. [CPP_CLK_SRC] = &cpp_clk_src.clkr,
  2849. [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
  2850. [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
  2851. [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
  2852. [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
  2853. [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
  2854. [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
  2855. [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
  2856. [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
  2857. [GP1_CLK_SRC] = &gp1_clk_src.clkr,
  2858. [GP2_CLK_SRC] = &gp2_clk_src.clkr,
  2859. [GP3_CLK_SRC] = &gp3_clk_src.clkr,
  2860. [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
  2861. [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
  2862. [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
  2863. [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
  2864. [MDP_CLK_SRC] = &mdp_clk_src.clkr,
  2865. [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
  2866. [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
  2867. [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
  2868. [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
  2869. [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
  2870. [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
  2871. [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
  2872. [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
  2873. [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
  2874. [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
  2875. [GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
  2876. [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
  2877. [GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
  2878. [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
  2879. [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
  2880. [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
  2881. [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
  2882. [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
  2883. [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
  2884. [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
  2885. [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
  2886. [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
  2887. [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
  2888. [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
  2889. [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
  2890. [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
  2891. [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
  2892. [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
  2893. [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
  2894. [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
  2895. [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
  2896. [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
  2897. [GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
  2898. [GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
  2899. [GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
  2900. [GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
  2901. [GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
  2902. [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
  2903. [GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
  2904. [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
  2905. [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
  2906. [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
  2907. [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
  2908. [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
  2909. [GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
  2910. [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
  2911. [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
  2912. [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
  2913. [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
  2914. [GCC_CAMSS_CSI2PHY_CLK] = &gcc_camss_csi2phy_clk.clkr,
  2915. [GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr,
  2916. [GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr,
  2917. [GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr,
  2918. [GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr,
  2919. [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
  2920. [GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr,
  2921. [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
  2922. [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
  2923. [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
  2924. [GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,
  2925. [GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
  2926. [GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
  2927. [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
  2928. [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
  2929. [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
  2930. [GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
  2931. [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
  2932. [GCC_CAMSS_VFE0_AHB_CLK] = &gcc_camss_vfe0_ahb_clk.clkr,
  2933. [GCC_CAMSS_VFE0_AXI_CLK] = &gcc_camss_vfe0_axi_clk.clkr,
  2934. [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
  2935. [GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr,
  2936. [GCC_CAMSS_VFE1_AXI_CLK] = &gcc_camss_vfe1_axi_clk.clkr,
  2937. [GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr,
  2938. [GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr,
  2939. [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
  2940. [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
  2941. [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
  2942. [GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
  2943. [GCC_GFX_TBU_CLK] = &gcc_gfx_tbu_clk.clkr,
  2944. [GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,
  2945. [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
  2946. [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
  2947. [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
  2948. [GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,
  2949. [GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,
  2950. [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
  2951. [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
  2952. [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
  2953. [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
  2954. [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
  2955. [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
  2956. [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
  2957. [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
  2958. [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
  2959. [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
  2960. [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
  2961. [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
  2962. [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
  2963. [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
  2964. [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
  2965. [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
  2966. [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
  2967. [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
  2968. [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
  2969. [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
  2970. [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
  2971. [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
  2972. [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
  2973. [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
  2974. [GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,
  2975. [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
  2976. [GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
  2977. [GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
  2978. [GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,
  2979. [GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
  2980. [GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
  2981. [GCC_VFE1_TBU_CLK] = &gcc_vfe1_tbu_clk.clkr,
  2982. [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
  2983. };
  2984. static const struct qcom_reset_map gcc_msm8917_resets[] = {
  2985. [GCC_CAMSS_MICRO_BCR] = { 0x56008 },
  2986. [GCC_MSS_BCR] = { 0x71000 },
  2987. [GCC_QUSB2_PHY_BCR] = { 0x4103c },
  2988. [GCC_USB_HS_BCR] = { 0x41000 },
  2989. [GCC_USB2_HS_PHY_ONLY_BCR] = { 0x41034 },
  2990. };
  2991. static const struct regmap_config gcc_msm8917_regmap_config = {
  2992. .reg_bits = 32,
  2993. .reg_stride = 4,
  2994. .val_bits = 32,
  2995. .max_register = 0x80000,
  2996. .fast_io = true,
  2997. };
  2998. static struct gdsc *gcc_msm8917_gdscs[] = {
  2999. [CPP_GDSC] = &cpp_gdsc,
  3000. [JPEG_GDSC] = &jpeg_gdsc,
  3001. [MDSS_GDSC] = &mdss_gdsc,
  3002. [OXILI_GX_GDSC] = &oxili_gx_gdsc,
  3003. [VENUS_CORE0_GDSC] = &venus_core0_gdsc,
  3004. [VENUS_GDSC] = &venus_gdsc,
  3005. [VFE0_GDSC] = &vfe0_gdsc,
  3006. [VFE1_GDSC] = &vfe1_gdsc,
  3007. };
  3008. static const struct qcom_cc_desc gcc_msm8917_desc = {
  3009. .config = &gcc_msm8917_regmap_config,
  3010. .clks = gcc_msm8917_clocks,
  3011. .num_clks = ARRAY_SIZE(gcc_msm8917_clocks),
  3012. .resets = gcc_msm8917_resets,
  3013. .num_resets = ARRAY_SIZE(gcc_msm8917_resets),
  3014. .gdscs = gcc_msm8917_gdscs,
  3015. .num_gdscs = ARRAY_SIZE(gcc_msm8917_gdscs),
  3016. };
  3017. static const struct qcom_cc_desc gcc_qm215_desc = {
  3018. .config = &gcc_msm8917_regmap_config,
  3019. .clks = gcc_msm8917_clocks,
  3020. .num_clks = ARRAY_SIZE(gcc_msm8917_clocks),
  3021. .resets = gcc_msm8917_resets,
  3022. .num_resets = ARRAY_SIZE(gcc_msm8917_resets),
  3023. .gdscs = gcc_msm8917_gdscs,
  3024. .num_gdscs = ARRAY_SIZE(gcc_msm8917_gdscs),
  3025. };
  3026. static int gcc_msm8917_probe(struct platform_device *pdev)
  3027. {
  3028. struct regmap *regmap;
  3029. const struct qcom_cc_desc *gcc_desc;
  3030. gcc_desc = of_device_get_match_data(&pdev->dev);
  3031. if (gcc_desc == &gcc_qm215_desc)
  3032. gfx3d_clk_src.parent_map = gcc_gfx3d_map_qm215;
  3033. regmap = qcom_cc_map(pdev, gcc_desc);
  3034. if (IS_ERR(regmap))
  3035. return PTR_ERR(regmap);
  3036. clk_alpha_pll_configure(&gpll3_early, regmap, &gpll3_early_config);
  3037. return qcom_cc_really_probe(&pdev->dev, gcc_desc, regmap);
  3038. }
  3039. static const struct of_device_id gcc_msm8917_match_table[] = {
  3040. { .compatible = "qcom,gcc-msm8917", .data = &gcc_msm8917_desc },
  3041. { .compatible = "qcom,gcc-qm215", .data = &gcc_qm215_desc },
  3042. {},
  3043. };
  3044. MODULE_DEVICE_TABLE(of, gcc_msm8917_match_table);
  3045. static struct platform_driver gcc_msm8917_driver = {
  3046. .probe = gcc_msm8917_probe,
  3047. .driver = {
  3048. .name = "gcc-msm8917",
  3049. .of_match_table = gcc_msm8917_match_table,
  3050. },
  3051. };
  3052. static int __init gcc_msm8917_init(void)
  3053. {
  3054. return platform_driver_register(&gcc_msm8917_driver);
  3055. }
  3056. core_initcall(gcc_msm8917_init);
  3057. static void __exit gcc_msm8917_exit(void)
  3058. {
  3059. platform_driver_unregister(&gcc_msm8917_driver);
  3060. }
  3061. module_exit(gcc_msm8917_exit);
  3062. MODULE_DESCRIPTION("Qualcomm GCC MSM8917 Driver");
  3063. MODULE_LICENSE("GPL");