gcc-ipq5018.c 94 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726
  1. // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
  2. /*
  3. * Copyright (c) 2023, The Linux Foundation. All rights reserved.
  4. */
  5. #include <linux/clk-provider.h>
  6. #include <linux/mod_devicetable.h>
  7. #include <linux/module.h>
  8. #include <linux/platform_device.h>
  9. #include <linux/regmap.h>
  10. #include <dt-bindings/clock/qcom,gcc-ipq5018.h>
  11. #include <dt-bindings/reset/qcom,gcc-ipq5018.h>
  12. #include "clk-alpha-pll.h"
  13. #include "clk-branch.h"
  14. #include "clk-rcg.h"
  15. #include "clk-regmap.h"
  16. #include "clk-regmap-divider.h"
  17. #include "clk-regmap-mux.h"
  18. #include "clk-regmap-phy-mux.h"
  19. #include "reset.h"
  20. /* Need to match the order of clocks in DT binding */
  21. enum {
  22. DT_XO,
  23. DT_SLEEP_CLK,
  24. DT_PCIE20_PHY0_PIPE_CLK,
  25. DT_PCIE20_PHY1_PIPE_CLK,
  26. DT_USB3_PHY0_CC_PIPE_CLK,
  27. DT_GEPHY_RX_CLK,
  28. DT_GEPHY_TX_CLK,
  29. DT_UNIPHY_RX_CLK,
  30. DT_UNIPHY_TX_CLK,
  31. };
  32. enum {
  33. P_XO,
  34. P_CORE_PI_SLEEP_CLK,
  35. P_PCIE20_PHY0_PIPE,
  36. P_PCIE20_PHY1_PIPE,
  37. P_USB3PHY_0_PIPE,
  38. P_GEPHY_RX,
  39. P_GEPHY_TX,
  40. P_UNIPHY_RX,
  41. P_UNIPHY_TX,
  42. P_GPLL0,
  43. P_GPLL0_DIV2,
  44. P_GPLL2,
  45. P_GPLL4,
  46. P_UBI32_PLL,
  47. };
  48. static const struct clk_parent_data gcc_xo_data[] = {
  49. { .index = DT_XO },
  50. };
  51. static const struct clk_parent_data gcc_sleep_clk_data[] = {
  52. { .index = DT_SLEEP_CLK },
  53. };
  54. static struct clk_alpha_pll gpll0_main = {
  55. .offset = 0x21000,
  56. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  57. .clkr = {
  58. .enable_reg = 0x0b000,
  59. .enable_mask = BIT(0),
  60. .hw.init = &(struct clk_init_data) {
  61. .name = "gpll0_main",
  62. .parent_data = gcc_xo_data,
  63. .num_parents = ARRAY_SIZE(gcc_xo_data),
  64. .ops = &clk_alpha_pll_stromer_ops,
  65. },
  66. },
  67. };
  68. static struct clk_alpha_pll gpll2_main = {
  69. .offset = 0x4a000,
  70. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  71. .clkr = {
  72. .enable_reg = 0x0b000,
  73. .enable_mask = BIT(2),
  74. .hw.init = &(struct clk_init_data) {
  75. .name = "gpll2_main",
  76. .parent_data = gcc_xo_data,
  77. .num_parents = ARRAY_SIZE(gcc_xo_data),
  78. .ops = &clk_alpha_pll_stromer_ops,
  79. },
  80. },
  81. };
  82. static struct clk_alpha_pll gpll4_main = {
  83. .offset = 0x24000,
  84. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  85. .clkr = {
  86. .enable_reg = 0x0b000,
  87. .enable_mask = BIT(5),
  88. .hw.init = &(struct clk_init_data) {
  89. .name = "gpll4_main",
  90. .parent_data = gcc_xo_data,
  91. .num_parents = ARRAY_SIZE(gcc_xo_data),
  92. .ops = &clk_alpha_pll_stromer_ops,
  93. },
  94. },
  95. };
  96. static struct clk_alpha_pll ubi32_pll_main = {
  97. .offset = 0x25000,
  98. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  99. .clkr = {
  100. .enable_reg = 0x0b000,
  101. .enable_mask = BIT(6),
  102. .hw.init = &(struct clk_init_data) {
  103. .name = "ubi32_pll_main",
  104. .parent_data = gcc_xo_data,
  105. .num_parents = ARRAY_SIZE(gcc_xo_data),
  106. .ops = &clk_alpha_pll_stromer_ops,
  107. },
  108. },
  109. };
  110. static struct clk_alpha_pll_postdiv gpll0 = {
  111. .offset = 0x21000,
  112. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  113. .width = 4,
  114. .clkr.hw.init = &(struct clk_init_data) {
  115. .name = "gpll0",
  116. .parent_hws = (const struct clk_hw *[]) {
  117. &gpll0_main.clkr.hw,
  118. },
  119. .num_parents = 1,
  120. .ops = &clk_alpha_pll_postdiv_ro_ops,
  121. },
  122. };
  123. static struct clk_alpha_pll_postdiv gpll2 = {
  124. .offset = 0x4a000,
  125. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  126. .width = 4,
  127. .clkr.hw.init = &(struct clk_init_data) {
  128. .name = "gpll2",
  129. .parent_hws = (const struct clk_hw *[]) {
  130. &gpll2_main.clkr.hw,
  131. },
  132. .num_parents = 1,
  133. .ops = &clk_alpha_pll_postdiv_ro_ops,
  134. },
  135. };
  136. static struct clk_alpha_pll_postdiv gpll4 = {
  137. .offset = 0x24000,
  138. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  139. .width = 4,
  140. .clkr.hw.init = &(struct clk_init_data) {
  141. .name = "gpll4",
  142. .parent_hws = (const struct clk_hw *[]) {
  143. &gpll4_main.clkr.hw,
  144. },
  145. .num_parents = 1,
  146. .ops = &clk_alpha_pll_postdiv_ro_ops,
  147. },
  148. };
  149. static struct clk_alpha_pll_postdiv ubi32_pll = {
  150. .offset = 0x25000,
  151. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  152. .width = 4,
  153. .clkr.hw.init = &(struct clk_init_data) {
  154. .name = "ubi32_pll",
  155. .parent_hws = (const struct clk_hw *[]) {
  156. &ubi32_pll_main.clkr.hw,
  157. },
  158. .num_parents = 1,
  159. .ops = &clk_alpha_pll_postdiv_ro_ops,
  160. .flags = CLK_SET_RATE_PARENT,
  161. },
  162. };
  163. static struct clk_fixed_factor gpll0_out_main_div2 = {
  164. .mult = 1,
  165. .div = 2,
  166. .hw.init = &(struct clk_init_data) {
  167. .name = "gpll0_out_main_div2",
  168. .parent_hws = (const struct clk_hw *[]) {
  169. &gpll0_main.clkr.hw,
  170. },
  171. .num_parents = 1,
  172. .ops = &clk_fixed_factor_ops,
  173. .flags = CLK_SET_RATE_PARENT,
  174. },
  175. };
  176. static const struct clk_parent_data gcc_xo_gpll0_gpll0_out_main_div2[] = {
  177. { .index = DT_XO },
  178. { .hw = &gpll0.clkr.hw },
  179. { .hw = &gpll0_out_main_div2.hw },
  180. };
  181. static const struct parent_map gcc_xo_gpll0_gpll0_out_main_div2_map[] = {
  182. { P_XO, 0 },
  183. { P_GPLL0, 1 },
  184. { P_GPLL0_DIV2, 4 },
  185. };
  186. static const struct clk_parent_data gcc_xo_gpll0[] = {
  187. { .index = DT_XO },
  188. { .hw = &gpll0.clkr.hw },
  189. };
  190. static const struct parent_map gcc_xo_gpll0_map[] = {
  191. { P_XO, 0 },
  192. { P_GPLL0, 1 },
  193. };
  194. static const struct clk_parent_data gcc_xo_gpll0_out_main_div2_gpll0[] = {
  195. { .index = DT_XO },
  196. { .hw = &gpll0_out_main_div2.hw },
  197. { .hw = &gpll0.clkr.hw },
  198. };
  199. static const struct parent_map gcc_xo_gpll0_out_main_div2_gpll0_map[] = {
  200. { P_XO, 0 },
  201. { P_GPLL0_DIV2, 2 },
  202. { P_GPLL0, 1 },
  203. };
  204. static const struct clk_parent_data gcc_xo_ubi32_gpll0[] = {
  205. { .index = DT_XO },
  206. { .hw = &ubi32_pll.clkr.hw },
  207. { .hw = &gpll0.clkr.hw },
  208. };
  209. static const struct parent_map gcc_xo_ubi32_gpll0_map[] = {
  210. { P_XO, 0 },
  211. { P_UBI32_PLL, 1 },
  212. { P_GPLL0, 2 },
  213. };
  214. static const struct clk_parent_data gcc_xo_gpll0_gpll2[] = {
  215. { .index = DT_XO },
  216. { .hw = &gpll0.clkr.hw },
  217. { .hw = &gpll2.clkr.hw },
  218. };
  219. static const struct parent_map gcc_xo_gpll0_gpll2_map[] = {
  220. { P_XO, 0 },
  221. { P_GPLL0, 1 },
  222. { P_GPLL2, 2 },
  223. };
  224. static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll4[] = {
  225. { .index = DT_XO },
  226. { .hw = &gpll0.clkr.hw },
  227. { .hw = &gpll2.clkr.hw },
  228. { .hw = &gpll4.clkr.hw },
  229. };
  230. static const struct parent_map gcc_xo_gpll0_gpll2_gpll4_map[] = {
  231. { P_XO, 0 },
  232. { P_GPLL0, 1 },
  233. { P_GPLL2, 2 },
  234. { P_GPLL4, 3 },
  235. };
  236. static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = {
  237. { .index = DT_XO },
  238. { .hw = &gpll0.clkr.hw },
  239. { .hw = &gpll4.clkr.hw },
  240. };
  241. static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
  242. { P_XO, 0 },
  243. { P_GPLL0, 1 },
  244. { P_GPLL4, 2 },
  245. };
  246. static const struct clk_parent_data gcc_xo_gpll0_core_pi_sleep_clk[] = {
  247. { .index = DT_XO },
  248. { .hw = &gpll0.clkr.hw },
  249. { .index = DT_SLEEP_CLK },
  250. };
  251. static const struct parent_map gcc_xo_gpll0_core_pi_sleep_clk_map[] = {
  252. { P_XO, 0 },
  253. { P_GPLL0, 2 },
  254. { P_CORE_PI_SLEEP_CLK, 6 },
  255. };
  256. static const struct clk_parent_data gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk[] = {
  257. { .index = DT_XO },
  258. { .hw = &gpll0.clkr.hw },
  259. { .hw = &gpll0_out_main_div2.hw },
  260. { .index = DT_SLEEP_CLK },
  261. };
  262. static const struct parent_map gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk_map[] = {
  263. { P_XO, 0 },
  264. { P_GPLL0, 1 },
  265. { P_GPLL0_DIV2, 4 },
  266. { P_CORE_PI_SLEEP_CLK, 6 },
  267. };
  268. static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll0_out_main_div2[] = {
  269. { .index = DT_XO },
  270. { .hw = &gpll0.clkr.hw },
  271. { .hw = &gpll2.clkr.hw },
  272. { .hw = &gpll0_out_main_div2.hw },
  273. };
  274. static const struct parent_map gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map[] = {
  275. { P_XO, 0 },
  276. { P_GPLL0, 1 },
  277. { P_GPLL2, 2 },
  278. { P_GPLL0_DIV2, 4 },
  279. };
  280. static const struct clk_parent_data gcc_xo_gpll4_gpll0_gpll0_out_main_div2[] = {
  281. { .index = DT_XO },
  282. { .hw = &gpll4.clkr.hw },
  283. { .hw = &gpll0.clkr.hw },
  284. { .hw = &gpll0_out_main_div2.hw },
  285. };
  286. static const struct parent_map gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map1[] = {
  287. { P_XO, 0 },
  288. { P_GPLL4, 1 },
  289. { P_GPLL0, 2 },
  290. { P_GPLL0_DIV2, 4 },
  291. };
  292. static const struct parent_map gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map2[] = {
  293. { P_XO, 0 },
  294. { P_GPLL4, 1 },
  295. { P_GPLL0, 3 },
  296. { P_GPLL0_DIV2, 4 },
  297. };
  298. static const struct clk_parent_data gcc_xo_gephy_gcc_rx_gephy_gcc_tx_ubi32_pll_gpll0[] = {
  299. { .index = DT_XO },
  300. { .index = DT_GEPHY_RX_CLK },
  301. { .index = DT_GEPHY_TX_CLK },
  302. { .hw = &ubi32_pll.clkr.hw },
  303. { .hw = &gpll0.clkr.hw },
  304. };
  305. static const struct parent_map gcc_xo_gephy_gcc_rx_gephy_gcc_tx_ubi32_pll_gpll0_map[] = {
  306. { P_XO, 0 },
  307. { P_GEPHY_RX, 1 },
  308. { P_GEPHY_TX, 2 },
  309. { P_UBI32_PLL, 3 },
  310. { P_GPLL0, 4 },
  311. };
  312. static const struct clk_parent_data gcc_xo_gephy_gcc_tx_gephy_gcc_rx_ubi32_pll_gpll0[] = {
  313. { .index = DT_XO },
  314. { .index = DT_GEPHY_TX_CLK },
  315. { .index = DT_GEPHY_RX_CLK },
  316. { .hw = &ubi32_pll.clkr.hw },
  317. { .hw = &gpll0.clkr.hw },
  318. };
  319. static const struct parent_map gcc_xo_gephy_gcc_tx_gephy_gcc_rx_ubi32_pll_gpll0_map[] = {
  320. { P_XO, 0 },
  321. { P_GEPHY_TX, 1 },
  322. { P_GEPHY_RX, 2 },
  323. { P_UBI32_PLL, 3 },
  324. { P_GPLL0, 4 },
  325. };
  326. static const struct clk_parent_data gcc_xo_uniphy_gcc_rx_uniphy_gcc_tx_ubi32_pll_gpll0[] = {
  327. { .index = DT_XO },
  328. { .index = DT_UNIPHY_RX_CLK },
  329. { .index = DT_UNIPHY_TX_CLK },
  330. { .hw = &ubi32_pll.clkr.hw },
  331. { .hw = &gpll0.clkr.hw },
  332. };
  333. static const struct parent_map gcc_xo_uniphy_gcc_rx_uniphy_gcc_tx_ubi32_pll_gpll0_map[] = {
  334. { P_XO, 0 },
  335. { P_UNIPHY_RX, 1 },
  336. { P_UNIPHY_TX, 2 },
  337. { P_UBI32_PLL, 3 },
  338. { P_GPLL0, 4 },
  339. };
  340. static const struct clk_parent_data gcc_xo_uniphy_gcc_tx_uniphy_gcc_rx_ubi32_pll_gpll0[] = {
  341. { .index = DT_XO },
  342. { .index = DT_UNIPHY_TX_CLK },
  343. { .index = DT_UNIPHY_RX_CLK },
  344. { .hw = &ubi32_pll.clkr.hw },
  345. { .hw = &gpll0.clkr.hw },
  346. };
  347. static const struct parent_map gcc_xo_uniphy_gcc_tx_uniphy_gcc_rx_ubi32_pll_gpll0_map[] = {
  348. { P_XO, 0 },
  349. { P_UNIPHY_TX, 1 },
  350. { P_UNIPHY_RX, 2 },
  351. { P_UBI32_PLL, 3 },
  352. { P_GPLL0, 4 },
  353. };
  354. static const struct clk_parent_data gcc_pcie20_phy0_pipe_clk_xo[] = {
  355. { .index = DT_PCIE20_PHY0_PIPE_CLK },
  356. { .index = DT_XO },
  357. };
  358. static const struct parent_map gcc_pcie20_phy0_pipe_clk_xo_map[] = {
  359. { P_PCIE20_PHY0_PIPE, 0 },
  360. { P_XO, 2 },
  361. };
  362. static const struct clk_parent_data gcc_pcie20_phy1_pipe_clk_xo[] = {
  363. { .index = DT_PCIE20_PHY1_PIPE_CLK },
  364. { .index = DT_XO },
  365. };
  366. static const struct parent_map gcc_pcie20_phy1_pipe_clk_xo_map[] = {
  367. { P_PCIE20_PHY1_PIPE, 0 },
  368. { P_XO, 2 },
  369. };
  370. static const struct clk_parent_data gcc_usb3phy_0_cc_pipe_clk_xo[] = {
  371. { .index = DT_USB3_PHY0_CC_PIPE_CLK },
  372. { .index = DT_XO },
  373. };
  374. static const struct parent_map gcc_usb3phy_0_cc_pipe_clk_xo_map[] = {
  375. { P_USB3PHY_0_PIPE, 0 },
  376. { P_XO, 2 },
  377. };
  378. static const struct freq_tbl ftbl_adss_pwm_clk_src[] = {
  379. F(24000000, P_XO, 1, 0, 0),
  380. F(100000000, P_GPLL0, 8, 0, 0),
  381. { }
  382. };
  383. static struct clk_rcg2 adss_pwm_clk_src = {
  384. .cmd_rcgr = 0x1f008,
  385. .freq_tbl = ftbl_adss_pwm_clk_src,
  386. .hid_width = 5,
  387. .parent_map = gcc_xo_gpll0_map,
  388. .clkr.hw.init = &(struct clk_init_data) {
  389. .name = "adss_pwm_clk_src",
  390. .parent_data = gcc_xo_gpll0,
  391. .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
  392. .ops = &clk_rcg2_ops,
  393. },
  394. };
  395. static const struct freq_tbl ftbl_blsp1_qup_i2c_apps_clk_src[] = {
  396. F(50000000, P_GPLL0, 16, 0, 0),
  397. { }
  398. };
  399. static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
  400. .cmd_rcgr = 0x0200c,
  401. .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
  402. .hid_width = 5,
  403. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  404. .clkr.hw.init = &(struct clk_init_data) {
  405. .name = "blsp1_qup1_i2c_apps_clk_src",
  406. .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  407. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  408. .ops = &clk_rcg2_ops,
  409. },
  410. };
  411. static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
  412. .cmd_rcgr = 0x03000,
  413. .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
  414. .hid_width = 5,
  415. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  416. .clkr.hw.init = &(struct clk_init_data) {
  417. .name = "blsp1_qup2_i2c_apps_clk_src",
  418. .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  419. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  420. .ops = &clk_rcg2_ops,
  421. },
  422. };
  423. static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
  424. .cmd_rcgr = 0x04000,
  425. .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
  426. .hid_width = 5,
  427. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  428. .clkr.hw.init = &(struct clk_init_data) {
  429. .name = "blsp1_qup3_i2c_apps_clk_src",
  430. .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  431. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  432. .ops = &clk_rcg2_ops,
  433. },
  434. };
  435. static const struct freq_tbl ftbl_blsp1_qup_spi_apps_clk_src[] = {
  436. F(960000, P_XO, 10, 2, 5),
  437. F(4800000, P_XO, 5, 0, 0),
  438. F(9600000, P_XO, 2, 4, 5),
  439. F(16000000, P_GPLL0, 10, 1, 5),
  440. F(24000000, P_XO, 1, 0, 0),
  441. F(50000000, P_GPLL0, 16, 0, 0),
  442. { }
  443. };
  444. static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
  445. .cmd_rcgr = 0x02024,
  446. .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
  447. .mnd_width = 8,
  448. .hid_width = 5,
  449. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  450. .clkr.hw.init = &(struct clk_init_data) {
  451. .name = "blsp1_qup1_spi_apps_clk_src",
  452. .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  453. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  454. .ops = &clk_rcg2_ops,
  455. },
  456. };
  457. static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
  458. .cmd_rcgr = 0x03014,
  459. .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
  460. .mnd_width = 8,
  461. .hid_width = 5,
  462. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  463. .clkr.hw.init = &(struct clk_init_data) {
  464. .name = "blsp1_qup2_spi_apps_clk_src",
  465. .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  466. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  467. .ops = &clk_rcg2_ops,
  468. },
  469. };
  470. static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
  471. .cmd_rcgr = 0x04014,
  472. .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
  473. .mnd_width = 8,
  474. .hid_width = 5,
  475. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  476. .clkr.hw.init = &(struct clk_init_data) {
  477. .name = "blsp1_qup3_spi_apps_clk_src",
  478. .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  479. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  480. .ops = &clk_rcg2_ops,
  481. },
  482. };
  483. static const struct freq_tbl ftbl_blsp1_uart_apps_clk_src[] = {
  484. F(3686400, P_GPLL0_DIV2, 1, 144, 15625),
  485. F(7372800, P_GPLL0_DIV2, 1, 288, 15625),
  486. F(14745600, P_GPLL0_DIV2, 1, 576, 15625),
  487. F(24000000, P_XO, 1, 0, 0),
  488. F(25000000, P_GPLL0, 16, 1, 2),
  489. F(40000000, P_GPLL0, 1, 1, 20),
  490. F(46400000, P_GPLL0, 1, 29, 500),
  491. F(48000000, P_GPLL0, 1, 3, 50),
  492. F(51200000, P_GPLL0, 1, 8, 125),
  493. F(56000000, P_GPLL0, 1, 7, 100),
  494. F(58982400, P_GPLL0, 1, 1152, 15625),
  495. F(60000000, P_GPLL0, 1, 3, 40),
  496. F(64000000, P_GPLL0, 10, 4, 5),
  497. { }
  498. };
  499. static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
  500. .cmd_rcgr = 0x02044,
  501. .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
  502. .mnd_width = 16,
  503. .hid_width = 5,
  504. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  505. .clkr.hw.init = &(struct clk_init_data) {
  506. .name = "blsp1_uart1_apps_clk_src",
  507. .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  508. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  509. .ops = &clk_rcg2_ops,
  510. },
  511. };
  512. static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
  513. .cmd_rcgr = 0x03034,
  514. .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
  515. .mnd_width = 16,
  516. .hid_width = 5,
  517. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  518. .clkr.hw.init = &(struct clk_init_data) {
  519. .name = "blsp1_uart2_apps_clk_src",
  520. .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  521. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  522. .ops = &clk_rcg2_ops,
  523. },
  524. };
  525. static const struct freq_tbl ftbl_crypto_clk_src[] = {
  526. F(160000000, P_GPLL0, 5, 0, 0),
  527. { }
  528. };
  529. static struct clk_rcg2 crypto_clk_src = {
  530. .cmd_rcgr = 0x16004,
  531. .freq_tbl = ftbl_crypto_clk_src,
  532. .hid_width = 5,
  533. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  534. .clkr.hw.init = &(struct clk_init_data) {
  535. .name = "crypto_clk_src",
  536. .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  537. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  538. .ops = &clk_rcg2_ops,
  539. },
  540. };
  541. static const struct freq_tbl ftbl_gmac0_tx_clk_src[] = {
  542. F(2500000, P_GEPHY_TX, 5, 0, 0),
  543. F(24000000, P_XO, 1, 0, 0),
  544. F(25000000, P_GEPHY_TX, 5, 0, 0),
  545. F(125000000, P_GEPHY_TX, 1, 0, 0),
  546. { }
  547. };
  548. static struct clk_rcg2 gmac0_rx_clk_src = {
  549. .cmd_rcgr = 0x68020,
  550. .parent_map = gcc_xo_gephy_gcc_rx_gephy_gcc_tx_ubi32_pll_gpll0_map,
  551. .hid_width = 5,
  552. .freq_tbl = ftbl_gmac0_tx_clk_src,
  553. .clkr.hw.init = &(struct clk_init_data) {
  554. .name = "gmac0_rx_clk_src",
  555. .parent_data = gcc_xo_gephy_gcc_rx_gephy_gcc_tx_ubi32_pll_gpll0,
  556. .num_parents = ARRAY_SIZE(gcc_xo_gephy_gcc_rx_gephy_gcc_tx_ubi32_pll_gpll0),
  557. .ops = &clk_rcg2_ops,
  558. },
  559. };
  560. static struct clk_regmap_div gmac0_rx_div_clk_src = {
  561. .reg = 0x68420,
  562. .shift = 0,
  563. .width = 4,
  564. .clkr = {
  565. .hw.init = &(struct clk_init_data) {
  566. .name = "gmac0_rx_div_clk_src",
  567. .parent_hws = (const struct clk_hw *[]) {
  568. &gmac0_rx_clk_src.clkr.hw,
  569. },
  570. .num_parents = 1,
  571. .ops = &clk_regmap_div_ops,
  572. .flags = CLK_SET_RATE_PARENT,
  573. },
  574. },
  575. };
  576. static struct clk_rcg2 gmac0_tx_clk_src = {
  577. .cmd_rcgr = 0x68028,
  578. .parent_map = gcc_xo_gephy_gcc_tx_gephy_gcc_rx_ubi32_pll_gpll0_map,
  579. .hid_width = 5,
  580. .freq_tbl = ftbl_gmac0_tx_clk_src,
  581. .clkr.hw.init = &(struct clk_init_data) {
  582. .name = "gmac0_tx_clk_src",
  583. .parent_data = gcc_xo_gephy_gcc_tx_gephy_gcc_rx_ubi32_pll_gpll0,
  584. .num_parents = ARRAY_SIZE(gcc_xo_gephy_gcc_tx_gephy_gcc_rx_ubi32_pll_gpll0),
  585. .ops = &clk_rcg2_ops,
  586. },
  587. };
  588. static struct clk_regmap_div gmac0_tx_div_clk_src = {
  589. .reg = 0x68424,
  590. .shift = 0,
  591. .width = 4,
  592. .clkr = {
  593. .hw.init = &(struct clk_init_data) {
  594. .name = "gmac0_tx_div_clk_src",
  595. .parent_hws = (const struct clk_hw *[]) {
  596. &gmac0_tx_clk_src.clkr.hw,
  597. },
  598. .num_parents = 1,
  599. .ops = &clk_regmap_div_ops,
  600. .flags = CLK_SET_RATE_PARENT,
  601. },
  602. },
  603. };
  604. static const struct freq_tbl ftbl_gmac1_rx_clk_src[] = {
  605. F(2500000, P_UNIPHY_RX, 12.5, 0, 0),
  606. F(24000000, P_XO, 1, 0, 0),
  607. F(25000000, P_UNIPHY_RX, 2.5, 0, 0),
  608. F(125000000, P_UNIPHY_RX, 2.5, 0, 0),
  609. F(125000000, P_UNIPHY_RX, 1, 0, 0),
  610. F(312500000, P_UNIPHY_RX, 1, 0, 0),
  611. { }
  612. };
  613. static struct clk_rcg2 gmac1_rx_clk_src = {
  614. .cmd_rcgr = 0x68030,
  615. .parent_map = gcc_xo_uniphy_gcc_rx_uniphy_gcc_tx_ubi32_pll_gpll0_map,
  616. .hid_width = 5,
  617. .freq_tbl = ftbl_gmac1_rx_clk_src,
  618. .clkr.hw.init = &(struct clk_init_data) {
  619. .name = "gmac1_rx_clk_src",
  620. .parent_data = gcc_xo_uniphy_gcc_rx_uniphy_gcc_tx_ubi32_pll_gpll0,
  621. .num_parents = ARRAY_SIZE(gcc_xo_uniphy_gcc_rx_uniphy_gcc_tx_ubi32_pll_gpll0),
  622. .ops = &clk_rcg2_ops,
  623. },
  624. };
  625. static struct clk_regmap_div gmac1_rx_div_clk_src = {
  626. .reg = 0x68430,
  627. .shift = 0,
  628. .width = 4,
  629. .clkr = {
  630. .hw.init = &(struct clk_init_data) {
  631. .name = "gmac1_rx_div_clk_src",
  632. .parent_hws = (const struct clk_hw *[]) {
  633. &gmac1_rx_clk_src.clkr.hw,
  634. },
  635. .num_parents = 1,
  636. .ops = &clk_regmap_div_ops,
  637. .flags = CLK_SET_RATE_PARENT,
  638. },
  639. },
  640. };
  641. static const struct freq_tbl ftbl_gmac1_tx_clk_src[] = {
  642. F(2500000, P_UNIPHY_TX, 12.5, 0, 0),
  643. F(24000000, P_XO, 1, 0, 0),
  644. F(25000000, P_UNIPHY_TX, 2.5, 0, 0),
  645. F(125000000, P_UNIPHY_TX, 2.5, 0, 0),
  646. F(125000000, P_UNIPHY_TX, 1, 0, 0),
  647. F(312500000, P_UNIPHY_TX, 1, 0, 0),
  648. { }
  649. };
  650. static struct clk_rcg2 gmac1_tx_clk_src = {
  651. .cmd_rcgr = 0x68038,
  652. .parent_map = gcc_xo_uniphy_gcc_tx_uniphy_gcc_rx_ubi32_pll_gpll0_map,
  653. .hid_width = 5,
  654. .freq_tbl = ftbl_gmac1_tx_clk_src,
  655. .clkr.hw.init = &(struct clk_init_data) {
  656. .name = "gmac1_tx_clk_src",
  657. .parent_data = gcc_xo_uniphy_gcc_tx_uniphy_gcc_rx_ubi32_pll_gpll0,
  658. .num_parents = ARRAY_SIZE(gcc_xo_uniphy_gcc_tx_uniphy_gcc_rx_ubi32_pll_gpll0),
  659. .ops = &clk_rcg2_ops,
  660. },
  661. };
  662. static struct clk_regmap_div gmac1_tx_div_clk_src = {
  663. .reg = 0x68434,
  664. .shift = 0,
  665. .width = 4,
  666. .clkr = {
  667. .hw.init = &(struct clk_init_data) {
  668. .name = "gmac1_tx_div_clk_src",
  669. .parent_hws = (const struct clk_hw *[]) {
  670. &gmac1_tx_clk_src.clkr.hw,
  671. },
  672. .num_parents = 1,
  673. .ops = &clk_regmap_div_ops,
  674. .flags = CLK_SET_RATE_PARENT,
  675. },
  676. },
  677. };
  678. static const struct freq_tbl ftbl_gmac_clk_src[] = {
  679. F(240000000, P_GPLL4, 5, 0, 0),
  680. { }
  681. };
  682. static struct clk_rcg2 gmac_clk_src = {
  683. .cmd_rcgr = 0x68080,
  684. .parent_map = gcc_xo_gpll0_gpll4_map,
  685. .hid_width = 5,
  686. .freq_tbl = ftbl_gmac_clk_src,
  687. .clkr.hw.init = &(struct clk_init_data) {
  688. .name = "gmac_clk_src",
  689. .parent_data = gcc_xo_gpll0_gpll4,
  690. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),
  691. .ops = &clk_rcg2_ops,
  692. },
  693. };
  694. static const struct freq_tbl ftbl_gp_clk_src[] = {
  695. F(200000000, P_GPLL0, 4, 0, 0),
  696. { }
  697. };
  698. static struct clk_rcg2 gp1_clk_src = {
  699. .cmd_rcgr = 0x08004,
  700. .freq_tbl = ftbl_gp_clk_src,
  701. .mnd_width = 8,
  702. .hid_width = 5,
  703. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk_map,
  704. .clkr.hw.init = &(struct clk_init_data) {
  705. .name = "gp1_clk_src",
  706. .parent_data = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk,
  707. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk),
  708. .ops = &clk_rcg2_ops,
  709. },
  710. };
  711. static struct clk_rcg2 gp2_clk_src = {
  712. .cmd_rcgr = 0x09004,
  713. .freq_tbl = ftbl_gp_clk_src,
  714. .mnd_width = 8,
  715. .hid_width = 5,
  716. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk_map,
  717. .clkr.hw.init = &(struct clk_init_data) {
  718. .name = "gp2_clk_src",
  719. .parent_data = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk,
  720. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk),
  721. .ops = &clk_rcg2_ops,
  722. },
  723. };
  724. static struct clk_rcg2 gp3_clk_src = {
  725. .cmd_rcgr = 0x0a004,
  726. .freq_tbl = ftbl_gp_clk_src,
  727. .mnd_width = 8,
  728. .hid_width = 5,
  729. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk_map,
  730. .clkr.hw.init = &(struct clk_init_data) {
  731. .name = "gp3_clk_src",
  732. .parent_data = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk,
  733. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk),
  734. .ops = &clk_rcg2_ops,
  735. },
  736. };
  737. static const struct freq_tbl ftbl_lpass_axim_clk_src[] = {
  738. F(133333334, P_GPLL0, 6, 0, 0),
  739. { }
  740. };
  741. static struct clk_rcg2 lpass_axim_clk_src = {
  742. .cmd_rcgr = 0x2e028,
  743. .freq_tbl = ftbl_lpass_axim_clk_src,
  744. .hid_width = 5,
  745. .parent_map = gcc_xo_gpll0_map,
  746. .clkr.hw.init = &(struct clk_init_data) {
  747. .name = "lpass_axim_clk_src",
  748. .parent_data = gcc_xo_gpll0,
  749. .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
  750. .ops = &clk_rcg2_ops,
  751. },
  752. };
  753. static const struct freq_tbl ftbl_lpass_sway_clk_src[] = {
  754. F(66666667, P_GPLL0, 12, 0, 0),
  755. { }
  756. };
  757. static struct clk_rcg2 lpass_sway_clk_src = {
  758. .cmd_rcgr = 0x2e040,
  759. .freq_tbl = ftbl_lpass_sway_clk_src,
  760. .hid_width = 5,
  761. .parent_map = gcc_xo_gpll0_map,
  762. .clkr.hw.init = &(struct clk_init_data) {
  763. .name = "lpass_sway_clk_src",
  764. .parent_data = gcc_xo_gpll0,
  765. .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
  766. .ops = &clk_rcg2_ops,
  767. },
  768. };
  769. static const struct freq_tbl ftbl_pcie0_aux_clk_src[] = {
  770. F(2000000, P_XO, 12, 0, 0),
  771. { }
  772. };
  773. static struct clk_rcg2 pcie0_aux_clk_src = {
  774. .cmd_rcgr = 0x75020,
  775. .freq_tbl = ftbl_pcie0_aux_clk_src,
  776. .mnd_width = 16,
  777. .hid_width = 5,
  778. .parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map,
  779. .clkr.hw.init = &(struct clk_init_data) {
  780. .name = "pcie0_aux_clk_src",
  781. .parent_data = gcc_xo_gpll0_core_pi_sleep_clk,
  782. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_core_pi_sleep_clk),
  783. .ops = &clk_rcg2_ops,
  784. },
  785. };
  786. static const struct freq_tbl ftbl_pcie0_axi_clk_src[] = {
  787. F(240000000, P_GPLL4, 5, 0, 0),
  788. { }
  789. };
  790. static struct clk_rcg2 pcie0_axi_clk_src = {
  791. .cmd_rcgr = 0x75050,
  792. .freq_tbl = ftbl_pcie0_axi_clk_src,
  793. .hid_width = 5,
  794. .parent_map = gcc_xo_gpll0_gpll4_map,
  795. .clkr.hw.init = &(struct clk_init_data) {
  796. .name = "pcie0_axi_clk_src",
  797. .parent_data = gcc_xo_gpll0_gpll4,
  798. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),
  799. .ops = &clk_rcg2_ops,
  800. },
  801. };
  802. static struct clk_rcg2 pcie1_aux_clk_src = {
  803. .cmd_rcgr = 0x76020,
  804. .freq_tbl = ftbl_pcie0_aux_clk_src,
  805. .mnd_width = 16,
  806. .hid_width = 5,
  807. .parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map,
  808. .clkr.hw.init = &(struct clk_init_data) {
  809. .name = "pcie1_aux_clk_src",
  810. .parent_data = gcc_xo_gpll0_core_pi_sleep_clk,
  811. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_core_pi_sleep_clk),
  812. .ops = &clk_rcg2_ops,
  813. },
  814. };
  815. static struct clk_rcg2 pcie1_axi_clk_src = {
  816. .cmd_rcgr = 0x76050,
  817. .freq_tbl = ftbl_gp_clk_src,
  818. .hid_width = 5,
  819. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  820. .clkr.hw.init = &(struct clk_init_data) {
  821. .name = "pcie1_axi_clk_src",
  822. .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  823. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  824. .ops = &clk_rcg2_ops,
  825. },
  826. };
  827. static struct clk_regmap_mux pcie0_pipe_clk_src = {
  828. .reg = 0x7501c,
  829. .shift = 8,
  830. .width = 2,
  831. .parent_map = gcc_pcie20_phy0_pipe_clk_xo_map,
  832. .clkr = {
  833. .hw.init = &(struct clk_init_data) {
  834. .name = "pcie0_pipe_clk_src",
  835. .parent_data = gcc_pcie20_phy0_pipe_clk_xo,
  836. .num_parents = ARRAY_SIZE(gcc_pcie20_phy0_pipe_clk_xo),
  837. .ops = &clk_regmap_mux_closest_ops,
  838. .flags = CLK_SET_RATE_PARENT,
  839. },
  840. },
  841. };
  842. static struct clk_regmap_mux pcie1_pipe_clk_src = {
  843. .reg = 0x7601c,
  844. .shift = 8,
  845. .width = 2,
  846. .parent_map = gcc_pcie20_phy1_pipe_clk_xo_map, .clkr = {
  847. .hw.init = &(struct clk_init_data) {
  848. .name = "pcie1_pipe_clk_src",
  849. .parent_data = gcc_pcie20_phy1_pipe_clk_xo,
  850. .num_parents = ARRAY_SIZE(gcc_pcie20_phy1_pipe_clk_xo),
  851. .ops = &clk_regmap_mux_closest_ops,
  852. .flags = CLK_SET_RATE_PARENT,
  853. },
  854. },
  855. };
  856. static const struct freq_tbl ftbl_pcnoc_bfdcd_clk_src[] = {
  857. F(100000000, P_GPLL0, 8, 0, 0),
  858. { }
  859. };
  860. static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
  861. .cmd_rcgr = 0x27000,
  862. .freq_tbl = ftbl_pcnoc_bfdcd_clk_src,
  863. .hid_width = 5,
  864. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  865. .clkr.hw.init = &(struct clk_init_data) {
  866. .name = "pcnoc_bfdcd_clk_src",
  867. .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  868. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  869. .ops = &clk_rcg2_ops,
  870. },
  871. };
  872. static struct clk_fixed_factor pcnoc_clk_src = {
  873. .mult = 1,
  874. .div = 1,
  875. .hw.init = &(struct clk_init_data) {
  876. .name = "pcnoc_clk_src",
  877. .parent_hws = (const struct clk_hw *[]) {
  878. &pcnoc_bfdcd_clk_src.clkr.hw,
  879. },
  880. .num_parents = 1,
  881. .ops = &clk_fixed_factor_ops,
  882. .flags = CLK_SET_RATE_PARENT,
  883. },
  884. };
  885. static const struct freq_tbl ftbl_qdss_at_clk_src[] = {
  886. F(240000000, P_GPLL4, 5, 0, 0),
  887. { }
  888. };
  889. static struct clk_rcg2 qdss_at_clk_src = {
  890. .cmd_rcgr = 0x2900c,
  891. .freq_tbl = ftbl_qdss_at_clk_src,
  892. .hid_width = 5,
  893. .parent_map = gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map1,
  894. .clkr.hw.init = &(struct clk_init_data) {
  895. .name = "qdss_at_clk_src",
  896. .parent_data = gcc_xo_gpll4_gpll0_gpll0_out_main_div2,
  897. .num_parents = ARRAY_SIZE(gcc_xo_gpll4_gpll0_gpll0_out_main_div2),
  898. .ops = &clk_rcg2_ops,
  899. },
  900. };
  901. static const struct freq_tbl ftbl_qdss_stm_clk_src[] = {
  902. F(200000000, P_GPLL0, 4, 0, 0),
  903. { }
  904. };
  905. static struct clk_rcg2 qdss_stm_clk_src = {
  906. .cmd_rcgr = 0x2902c,
  907. .freq_tbl = ftbl_qdss_stm_clk_src,
  908. .hid_width = 5,
  909. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  910. .clkr.hw.init = &(struct clk_init_data) {
  911. .name = "qdss_stm_clk_src",
  912. .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  913. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  914. .ops = &clk_rcg2_ops,
  915. },
  916. };
  917. static const struct freq_tbl ftbl_qdss_traceclkin_clk_src[] = {
  918. F(266666667, P_GPLL0, 3, 0, 0),
  919. { }
  920. };
  921. static struct clk_rcg2 qdss_traceclkin_clk_src = {
  922. .cmd_rcgr = 0x29048,
  923. .freq_tbl = ftbl_qdss_traceclkin_clk_src,
  924. .hid_width = 5,
  925. .parent_map = gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map1,
  926. .clkr.hw.init = &(struct clk_init_data) {
  927. .name = "qdss_traceclkin_clk_src",
  928. .parent_data = gcc_xo_gpll4_gpll0_gpll0_out_main_div2,
  929. .num_parents = ARRAY_SIZE(gcc_xo_gpll4_gpll0_gpll0_out_main_div2),
  930. .ops = &clk_rcg2_ops,
  931. },
  932. };
  933. static const struct freq_tbl ftbl_qdss_tsctr_clk_src[] = {
  934. F(600000000, P_GPLL4, 2, 0, 0),
  935. { }
  936. };
  937. static struct clk_rcg2 qdss_tsctr_clk_src = {
  938. .cmd_rcgr = 0x29064,
  939. .freq_tbl = ftbl_qdss_tsctr_clk_src,
  940. .hid_width = 5,
  941. .parent_map = gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map1,
  942. .clkr.hw.init = &(struct clk_init_data) {
  943. .name = "qdss_tsctr_clk_src",
  944. .parent_data = gcc_xo_gpll4_gpll0_gpll0_out_main_div2,
  945. .num_parents = ARRAY_SIZE(gcc_xo_gpll4_gpll0_gpll0_out_main_div2),
  946. .ops = &clk_rcg2_ops,
  947. },
  948. };
  949. static struct clk_fixed_factor qdss_tsctr_div2_clk_src = {
  950. .mult = 1,
  951. .div = 2,
  952. .hw.init = &(struct clk_init_data) {
  953. .name = "qdss_tsctr_div2_clk_src",
  954. .parent_hws = (const struct clk_hw *[]) {
  955. &qdss_tsctr_clk_src.clkr.hw,
  956. },
  957. .num_parents = 1,
  958. .flags = CLK_SET_RATE_PARENT,
  959. .ops = &clk_fixed_factor_ops,
  960. },
  961. };
  962. static struct clk_fixed_factor qdss_dap_sync_clk_src = {
  963. .mult = 1,
  964. .div = 4,
  965. .hw.init = &(struct clk_init_data) {
  966. .name = "qdss_dap_sync_clk_src",
  967. .parent_hws = (const struct clk_hw *[]) {
  968. &qdss_tsctr_clk_src.clkr.hw,
  969. },
  970. .num_parents = 1,
  971. .ops = &clk_fixed_factor_ops,
  972. },
  973. };
  974. static struct clk_fixed_factor eud_at_clk_src = {
  975. .mult = 1,
  976. .div = 6,
  977. .hw.init = &(struct clk_init_data) {
  978. .name = "eud_at_clk_src",
  979. .parent_hws = (const struct clk_hw *[]) {
  980. &qdss_at_clk_src.clkr.hw,
  981. },
  982. .num_parents = 1,
  983. .ops = &clk_fixed_factor_ops,
  984. .flags = CLK_SET_RATE_PARENT,
  985. },
  986. };
  987. static const struct freq_tbl ftbl_qpic_io_macro_clk_src[] = {
  988. F(24000000, P_XO, 1, 0, 0),
  989. F(100000000, P_GPLL0, 8, 0, 0),
  990. F(200000000, P_GPLL0, 4, 0, 0),
  991. F(320000000, P_GPLL0, 2.5, 0, 0),
  992. { }
  993. };
  994. static struct clk_rcg2 qpic_io_macro_clk_src = {
  995. .cmd_rcgr = 0x57010,
  996. .freq_tbl = ftbl_qpic_io_macro_clk_src,
  997. .hid_width = 5,
  998. .parent_map = gcc_xo_gpll0_gpll2_map,
  999. .clkr.hw.init = &(struct clk_init_data) {
  1000. .name = "qpic_io_macro_clk_src",
  1001. .parent_data = gcc_xo_gpll0_gpll2,
  1002. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2),
  1003. .ops = &clk_rcg2_ops,
  1004. },
  1005. };
  1006. static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
  1007. F(143713, P_XO, 1, 1, 167),
  1008. F(400000, P_XO, 1, 1, 60),
  1009. F(24000000, P_XO, 1, 0, 0),
  1010. F(48000000, P_GPLL2, 12, 1, 2),
  1011. F(96000000, P_GPLL2, 12, 0, 0),
  1012. F(177777778, P_GPLL0, 1, 2, 9),
  1013. F(192000000, P_GPLL2, 6, 0, 0),
  1014. F(200000000, P_GPLL0, 4, 0, 0),
  1015. { }
  1016. };
  1017. static struct clk_rcg2 sdcc1_apps_clk_src = {
  1018. .cmd_rcgr = 0x42004,
  1019. .freq_tbl = ftbl_sdcc1_apps_clk_src,
  1020. .mnd_width = 8,
  1021. .hid_width = 5,
  1022. .parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map,
  1023. .clkr.hw.init = &(struct clk_init_data) {
  1024. .name = "sdcc1_apps_clk_src",
  1025. .parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
  1026. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll0_out_main_div2),
  1027. .ops = &clk_rcg2_floor_ops,
  1028. },
  1029. };
  1030. static const struct freq_tbl ftbl_system_noc_bfdcd_clk_src[] = {
  1031. F(266666667, P_GPLL0, 3, 0, 0),
  1032. { }
  1033. };
  1034. static struct clk_rcg2 system_noc_bfdcd_clk_src = {
  1035. .cmd_rcgr = 0x26004,
  1036. .freq_tbl = ftbl_system_noc_bfdcd_clk_src,
  1037. .hid_width = 5,
  1038. .parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map,
  1039. .clkr.hw.init = &(struct clk_init_data) {
  1040. .name = "system_noc_bfdcd_clk_src",
  1041. .parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
  1042. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll0_out_main_div2),
  1043. .ops = &clk_rcg2_ops,
  1044. },
  1045. };
  1046. static struct clk_fixed_factor system_noc_clk_src = {
  1047. .mult = 1,
  1048. .div = 1,
  1049. .hw.init = &(struct clk_init_data) {
  1050. .name = "system_noc_clk_src",
  1051. .parent_hws = (const struct clk_hw *[]) {
  1052. &system_noc_bfdcd_clk_src.clkr.hw,
  1053. },
  1054. .num_parents = 1,
  1055. .ops = &clk_fixed_factor_ops,
  1056. .flags = CLK_SET_RATE_PARENT,
  1057. },
  1058. };
  1059. static const struct freq_tbl ftbl_apss_axi_clk_src[] = {
  1060. F(400000000, P_GPLL0, 2, 0, 0),
  1061. { }
  1062. };
  1063. static struct clk_rcg2 ubi0_axi_clk_src = {
  1064. .cmd_rcgr = 0x68088,
  1065. .freq_tbl = ftbl_apss_axi_clk_src,
  1066. .hid_width = 5,
  1067. .parent_map = gcc_xo_gpll0_gpll2_map,
  1068. .clkr.hw.init = &(struct clk_init_data) {
  1069. .name = "ubi0_axi_clk_src",
  1070. .parent_data = gcc_xo_gpll0_gpll2,
  1071. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2),
  1072. .ops = &clk_rcg2_ops,
  1073. .flags = CLK_SET_RATE_PARENT,
  1074. },
  1075. };
  1076. static const struct freq_tbl ftbl_ubi0_core_clk_src[] = {
  1077. F(850000000, P_UBI32_PLL, 1, 0, 0),
  1078. F(1000000000, P_UBI32_PLL, 1, 0, 0),
  1079. { }
  1080. };
  1081. static struct clk_rcg2 ubi0_core_clk_src = {
  1082. .cmd_rcgr = 0x68100,
  1083. .freq_tbl = ftbl_ubi0_core_clk_src,
  1084. .hid_width = 5,
  1085. .parent_map = gcc_xo_ubi32_gpll0_map,
  1086. .clkr.hw.init = &(struct clk_init_data) {
  1087. .name = "ubi0_core_clk_src",
  1088. .parent_data = gcc_xo_ubi32_gpll0,
  1089. .num_parents = ARRAY_SIZE(gcc_xo_ubi32_gpll0),
  1090. .ops = &clk_rcg2_ops,
  1091. .flags = CLK_SET_RATE_PARENT,
  1092. },
  1093. };
  1094. static struct clk_rcg2 usb0_aux_clk_src = {
  1095. .cmd_rcgr = 0x3e05c,
  1096. .freq_tbl = ftbl_pcie0_aux_clk_src,
  1097. .mnd_width = 16,
  1098. .hid_width = 5,
  1099. .parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map,
  1100. .clkr.hw.init = &(struct clk_init_data) {
  1101. .name = "usb0_aux_clk_src",
  1102. .parent_data = gcc_xo_gpll0_core_pi_sleep_clk,
  1103. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_core_pi_sleep_clk),
  1104. .ops = &clk_rcg2_ops,
  1105. },
  1106. };
  1107. static const struct freq_tbl ftbl_usb0_lfps_clk_src[] = {
  1108. F(25000000, P_GPLL0, 16, 1, 2),
  1109. { }
  1110. };
  1111. static struct clk_rcg2 usb0_lfps_clk_src = {
  1112. .cmd_rcgr = 0x3e090,
  1113. .freq_tbl = ftbl_usb0_lfps_clk_src,
  1114. .mnd_width = 8,
  1115. .hid_width = 5,
  1116. .parent_map = gcc_xo_gpll0_map,
  1117. .clkr.hw.init = &(struct clk_init_data) {
  1118. .name = "usb0_lfps_clk_src",
  1119. .parent_data = gcc_xo_gpll0,
  1120. .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
  1121. .ops = &clk_rcg2_ops,
  1122. },
  1123. };
  1124. static struct clk_rcg2 usb0_master_clk_src = {
  1125. .cmd_rcgr = 0x3e00c,
  1126. .freq_tbl = ftbl_gp_clk_src,
  1127. .mnd_width = 8,
  1128. .hid_width = 5,
  1129. .parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,
  1130. .clkr.hw.init = &(struct clk_init_data) {
  1131. .name = "usb0_master_clk_src",
  1132. .parent_data = gcc_xo_gpll0_out_main_div2_gpll0,
  1133. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_out_main_div2_gpll0),
  1134. .ops = &clk_rcg2_ops,
  1135. },
  1136. };
  1137. static const struct freq_tbl ftbl_usb0_mock_utmi_clk_src[] = {
  1138. F(60000000, P_GPLL4, 10, 1, 2),
  1139. { }
  1140. };
  1141. static struct clk_rcg2 usb0_mock_utmi_clk_src = {
  1142. .cmd_rcgr = 0x3e020,
  1143. .freq_tbl = ftbl_usb0_mock_utmi_clk_src,
  1144. .mnd_width = 8,
  1145. .hid_width = 5,
  1146. .parent_map = gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map2,
  1147. .clkr.hw.init = &(struct clk_init_data) {
  1148. .name = "usb0_mock_utmi_clk_src",
  1149. .parent_data = gcc_xo_gpll4_gpll0_gpll0_out_main_div2,
  1150. .num_parents = ARRAY_SIZE(gcc_xo_gpll4_gpll0_gpll0_out_main_div2),
  1151. .ops = &clk_rcg2_ops,
  1152. },
  1153. };
  1154. static struct clk_regmap_mux usb0_pipe_clk_src = {
  1155. .reg = 0x3e048,
  1156. .shift = 8,
  1157. .width = 2,
  1158. .parent_map = gcc_usb3phy_0_cc_pipe_clk_xo_map,
  1159. .clkr = {
  1160. .hw.init = &(struct clk_init_data) {
  1161. .name = "usb0_pipe_clk_src",
  1162. .parent_data = gcc_usb3phy_0_cc_pipe_clk_xo,
  1163. .num_parents = ARRAY_SIZE(gcc_usb3phy_0_cc_pipe_clk_xo),
  1164. .ops = &clk_regmap_mux_closest_ops,
  1165. .flags = CLK_SET_RATE_PARENT,
  1166. },
  1167. },
  1168. };
  1169. static const struct freq_tbl ftbl_q6_axi_clk_src[] = {
  1170. F(400000000, P_GPLL0, 2, 0, 0),
  1171. { }
  1172. };
  1173. static struct clk_rcg2 q6_axi_clk_src = {
  1174. .cmd_rcgr = 0x59120,
  1175. .freq_tbl = ftbl_q6_axi_clk_src,
  1176. .hid_width = 5,
  1177. .parent_map = gcc_xo_gpll0_gpll2_gpll4_map,
  1178. .clkr.hw.init = &(struct clk_init_data) {
  1179. .name = "q6_axi_clk_src",
  1180. .parent_data = gcc_xo_gpll0_gpll2_gpll4,
  1181. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll4),
  1182. .ops = &clk_rcg2_ops,
  1183. },
  1184. };
  1185. static const struct freq_tbl ftbl_wcss_ahb_clk_src[] = {
  1186. F(133333333, P_GPLL0, 6, 0, 0),
  1187. { }
  1188. };
  1189. static struct clk_rcg2 wcss_ahb_clk_src = {
  1190. .cmd_rcgr = 0x59020,
  1191. .freq_tbl = ftbl_wcss_ahb_clk_src,
  1192. .hid_width = 5,
  1193. .parent_map = gcc_xo_gpll0_map,
  1194. .clkr.hw.init = &(struct clk_init_data) {
  1195. .name = "wcss_ahb_clk_src",
  1196. .parent_data = gcc_xo_gpll0,
  1197. .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
  1198. .ops = &clk_rcg2_ops,
  1199. },
  1200. };
  1201. static struct clk_branch gcc_sleep_clk_src = {
  1202. .halt_reg = 0x30000,
  1203. .clkr = {
  1204. .enable_reg = 0x30000,
  1205. .enable_mask = BIT(1),
  1206. .hw.init = &(struct clk_init_data) {
  1207. .name = "gcc_sleep_clk_src",
  1208. .parent_data = gcc_sleep_clk_data,
  1209. .num_parents = ARRAY_SIZE(gcc_sleep_clk_data),
  1210. .flags = CLK_IS_CRITICAL,
  1211. .ops = &clk_branch2_ops,
  1212. },
  1213. },
  1214. };
  1215. static struct clk_branch gcc_xo_clk_src = {
  1216. .halt_reg = 0x30018,
  1217. .clkr = {
  1218. .enable_reg = 0x30018,
  1219. .enable_mask = BIT(1),
  1220. .hw.init = &(struct clk_init_data) {
  1221. .name = "gcc_xo_clk_src",
  1222. .parent_data = gcc_xo_data,
  1223. .num_parents = ARRAY_SIZE(gcc_xo_data),
  1224. .flags = CLK_SET_RATE_PARENT,
  1225. .ops = &clk_branch2_ops,
  1226. },
  1227. },
  1228. };
  1229. static struct clk_branch gcc_xo_clk = {
  1230. .halt_reg = 0x30030,
  1231. .clkr = {
  1232. .enable_reg = 0x30030,
  1233. .enable_mask = BIT(0),
  1234. .hw.init = &(struct clk_init_data) {
  1235. .name = "gcc_xo_clk",
  1236. .parent_hws = (const struct clk_hw *[]) {
  1237. &gcc_xo_clk_src.clkr.hw,
  1238. },
  1239. .num_parents = 1,
  1240. .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
  1241. .ops = &clk_branch2_ops,
  1242. },
  1243. },
  1244. };
  1245. static struct clk_branch gcc_adss_pwm_clk = {
  1246. .halt_reg = 0x1f020,
  1247. .clkr = {
  1248. .enable_reg = 0x1f020,
  1249. .enable_mask = BIT(0),
  1250. .hw.init = &(struct clk_init_data) {
  1251. .name = "gcc_adss_pwm_clk",
  1252. .parent_hws = (const struct clk_hw *[]) {
  1253. &adss_pwm_clk_src.clkr.hw,
  1254. },
  1255. .num_parents = 1,
  1256. .flags = CLK_SET_RATE_PARENT,
  1257. .ops = &clk_branch2_ops,
  1258. },
  1259. },
  1260. };
  1261. static struct clk_branch gcc_blsp1_ahb_clk = {
  1262. .halt_reg = 0x01008,
  1263. .halt_check = BRANCH_HALT_VOTED,
  1264. .clkr = {
  1265. .enable_reg = 0x0b004,
  1266. .enable_mask = BIT(10),
  1267. .hw.init = &(struct clk_init_data) {
  1268. .name = "gcc_blsp1_ahb_clk",
  1269. .parent_hws = (const struct clk_hw *[]) {
  1270. &pcnoc_clk_src.hw,
  1271. },
  1272. .num_parents = 1,
  1273. .flags = CLK_SET_RATE_PARENT,
  1274. .ops = &clk_branch2_ops,
  1275. },
  1276. },
  1277. };
  1278. static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
  1279. .halt_reg = 0x02008,
  1280. .clkr = {
  1281. .enable_reg = 0x02008,
  1282. .enable_mask = BIT(0),
  1283. .hw.init = &(struct clk_init_data) {
  1284. .name = "gcc_blsp1_qup1_i2c_apps_clk",
  1285. .parent_hws = (const struct clk_hw *[]) {
  1286. &blsp1_qup1_i2c_apps_clk_src.clkr.hw,
  1287. },
  1288. .num_parents = 1,
  1289. .flags = CLK_SET_RATE_PARENT,
  1290. .ops = &clk_branch2_ops,
  1291. },
  1292. },
  1293. };
  1294. static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
  1295. .halt_reg = 0x02004,
  1296. .clkr = {
  1297. .enable_reg = 0x02004,
  1298. .enable_mask = BIT(0),
  1299. .hw.init = &(struct clk_init_data) {
  1300. .name = "gcc_blsp1_qup1_spi_apps_clk",
  1301. .parent_hws = (const struct clk_hw *[]) {
  1302. &blsp1_qup1_spi_apps_clk_src.clkr.hw,
  1303. },
  1304. .num_parents = 1,
  1305. .flags = CLK_SET_RATE_PARENT,
  1306. .ops = &clk_branch2_ops,
  1307. },
  1308. },
  1309. };
  1310. static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
  1311. .halt_reg = 0x03010,
  1312. .clkr = {
  1313. .enable_reg = 0x03010,
  1314. .enable_mask = BIT(0),
  1315. .hw.init = &(struct clk_init_data) {
  1316. .name = "gcc_blsp1_qup2_i2c_apps_clk",
  1317. .parent_hws = (const struct clk_hw *[]) {
  1318. &blsp1_qup2_i2c_apps_clk_src.clkr.hw,
  1319. },
  1320. .num_parents = 1,
  1321. .flags = CLK_SET_RATE_PARENT,
  1322. .ops = &clk_branch2_ops,
  1323. },
  1324. },
  1325. };
  1326. static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
  1327. .halt_reg = 0x0300c,
  1328. .clkr = {
  1329. .enable_reg = 0x0300c,
  1330. .enable_mask = BIT(0),
  1331. .hw.init = &(struct clk_init_data) {
  1332. .name = "gcc_blsp1_qup2_spi_apps_clk",
  1333. .parent_hws = (const struct clk_hw *[]) {
  1334. &blsp1_qup2_spi_apps_clk_src.clkr.hw,
  1335. },
  1336. .num_parents = 1,
  1337. .flags = CLK_SET_RATE_PARENT,
  1338. .ops = &clk_branch2_ops,
  1339. },
  1340. },
  1341. };
  1342. static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
  1343. .halt_reg = 0x04010,
  1344. .clkr = {
  1345. .enable_reg = 0x04010,
  1346. .enable_mask = BIT(0),
  1347. .hw.init = &(struct clk_init_data) {
  1348. .name = "gcc_blsp1_qup3_i2c_apps_clk",
  1349. .parent_hws = (const struct clk_hw *[]) {
  1350. &blsp1_qup3_i2c_apps_clk_src.clkr.hw,
  1351. },
  1352. .num_parents = 1,
  1353. .flags = CLK_SET_RATE_PARENT,
  1354. .ops = &clk_branch2_ops,
  1355. },
  1356. },
  1357. };
  1358. static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
  1359. .halt_reg = 0x0400c,
  1360. .clkr = {
  1361. .enable_reg = 0x0400c,
  1362. .enable_mask = BIT(0),
  1363. .hw.init = &(struct clk_init_data) {
  1364. .name = "gcc_blsp1_qup3_spi_apps_clk",
  1365. .parent_hws = (const struct clk_hw *[]) {
  1366. &blsp1_qup3_spi_apps_clk_src.clkr.hw,
  1367. },
  1368. .num_parents = 1,
  1369. .flags = CLK_SET_RATE_PARENT,
  1370. .ops = &clk_branch2_ops,
  1371. },
  1372. },
  1373. };
  1374. static struct clk_branch gcc_blsp1_uart1_apps_clk = {
  1375. .halt_reg = 0x0203c,
  1376. .clkr = {
  1377. .enable_reg = 0x0203c,
  1378. .enable_mask = BIT(0),
  1379. .hw.init = &(struct clk_init_data) {
  1380. .name = "gcc_blsp1_uart1_apps_clk",
  1381. .parent_hws = (const struct clk_hw *[]) {
  1382. &blsp1_uart1_apps_clk_src.clkr.hw,
  1383. },
  1384. .num_parents = 1,
  1385. .flags = CLK_SET_RATE_PARENT,
  1386. .ops = &clk_branch2_ops,
  1387. },
  1388. },
  1389. };
  1390. static struct clk_branch gcc_blsp1_uart2_apps_clk = {
  1391. .halt_reg = 0x0302c,
  1392. .clkr = {
  1393. .enable_reg = 0x0302c,
  1394. .enable_mask = BIT(0),
  1395. .hw.init = &(struct clk_init_data) {
  1396. .name = "gcc_blsp1_uart2_apps_clk",
  1397. .parent_hws = (const struct clk_hw *[]) {
  1398. &blsp1_uart2_apps_clk_src.clkr.hw,
  1399. },
  1400. .num_parents = 1,
  1401. .flags = CLK_SET_RATE_PARENT,
  1402. .ops = &clk_branch2_ops,
  1403. },
  1404. },
  1405. };
  1406. static struct clk_branch gcc_btss_lpo_clk = {
  1407. .halt_reg = 0x1c004,
  1408. .clkr = {
  1409. .enable_reg = 0x1c004,
  1410. .enable_mask = BIT(0),
  1411. .hw.init = &(struct clk_init_data) {
  1412. .name = "gcc_btss_lpo_clk",
  1413. .ops = &clk_branch2_ops,
  1414. },
  1415. },
  1416. };
  1417. static struct clk_branch gcc_cmn_blk_ahb_clk = {
  1418. .halt_reg = 0x56308,
  1419. .clkr = {
  1420. .enable_reg = 0x56308,
  1421. .enable_mask = BIT(0),
  1422. .hw.init = &(struct clk_init_data) {
  1423. .name = "gcc_cmn_blk_ahb_clk",
  1424. .parent_hws = (const struct clk_hw *[]) {
  1425. &pcnoc_clk_src.hw,
  1426. },
  1427. .num_parents = 1,
  1428. .flags = CLK_SET_RATE_PARENT,
  1429. .ops = &clk_branch2_ops,
  1430. },
  1431. },
  1432. };
  1433. static struct clk_branch gcc_cmn_blk_sys_clk = {
  1434. .halt_reg = 0x5630c,
  1435. .clkr = {
  1436. .enable_reg = 0x5630c,
  1437. .enable_mask = BIT(0),
  1438. .hw.init = &(struct clk_init_data) {
  1439. .name = "gcc_cmn_blk_sys_clk",
  1440. .parent_hws = (const struct clk_hw *[]) {
  1441. &gcc_xo_clk_src.clkr.hw,
  1442. },
  1443. .num_parents = 1,
  1444. .flags = CLK_SET_RATE_PARENT,
  1445. .ops = &clk_branch2_ops,
  1446. },
  1447. },
  1448. };
  1449. static struct clk_branch gcc_crypto_ahb_clk = {
  1450. .halt_reg = 0x16024,
  1451. .halt_check = BRANCH_HALT_VOTED,
  1452. .clkr = {
  1453. .enable_reg = 0x0b004,
  1454. .enable_mask = BIT(0),
  1455. .hw.init = &(struct clk_init_data) {
  1456. .name = "gcc_crypto_ahb_clk",
  1457. .parent_hws = (const struct clk_hw *[]) {
  1458. &pcnoc_clk_src.hw,
  1459. },
  1460. .num_parents = 1,
  1461. .flags = CLK_SET_RATE_PARENT,
  1462. .ops = &clk_branch2_ops,
  1463. },
  1464. },
  1465. };
  1466. static struct clk_branch gcc_crypto_axi_clk = {
  1467. .halt_reg = 0x16020,
  1468. .halt_check = BRANCH_HALT_VOTED,
  1469. .clkr = {
  1470. .enable_reg = 0x0b004,
  1471. .enable_mask = BIT(1),
  1472. .hw.init = &(struct clk_init_data) {
  1473. .name = "gcc_crypto_axi_clk",
  1474. .parent_hws = (const struct clk_hw *[]) {
  1475. &pcnoc_clk_src.hw,
  1476. },
  1477. .num_parents = 1,
  1478. .flags = CLK_SET_RATE_PARENT,
  1479. .ops = &clk_branch2_ops,
  1480. },
  1481. },
  1482. };
  1483. static struct clk_branch gcc_crypto_clk = {
  1484. .halt_reg = 0x1601c,
  1485. .halt_check = BRANCH_HALT_VOTED,
  1486. .clkr = {
  1487. .enable_reg = 0x0b004,
  1488. .enable_mask = BIT(2),
  1489. .hw.init = &(struct clk_init_data) {
  1490. .name = "gcc_crypto_clk",
  1491. .parent_hws = (const struct clk_hw *[]) {
  1492. &crypto_clk_src.clkr.hw,
  1493. },
  1494. .num_parents = 1,
  1495. .flags = CLK_SET_RATE_PARENT,
  1496. .ops = &clk_branch2_ops,
  1497. },
  1498. },
  1499. };
  1500. static struct clk_branch gcc_dcc_clk = {
  1501. .halt_reg = 0x77004,
  1502. .clkr = {
  1503. .enable_reg = 0x77004,
  1504. .enable_mask = BIT(0),
  1505. .hw.init = &(struct clk_init_data) {
  1506. .name = "gcc_dcc_clk",
  1507. .parent_hws = (const struct clk_hw *[]) {
  1508. &pcnoc_clk_src.hw,
  1509. },
  1510. .num_parents = 1,
  1511. .flags = CLK_SET_RATE_PARENT,
  1512. .ops = &clk_branch2_ops,
  1513. },
  1514. },
  1515. };
  1516. static struct clk_branch gcc_gephy_rx_clk = {
  1517. .halt_reg = 0x56010,
  1518. .halt_check = BRANCH_HALT_DELAY,
  1519. .clkr = {
  1520. .enable_reg = 0x56010,
  1521. .enable_mask = BIT(0),
  1522. .hw.init = &(struct clk_init_data) {
  1523. .name = "gcc_gephy_rx_clk",
  1524. .parent_hws = (const struct clk_hw *[]) {
  1525. &gmac0_rx_div_clk_src.clkr.hw,
  1526. },
  1527. .num_parents = 1,
  1528. .ops = &clk_branch2_ops,
  1529. .flags = CLK_SET_RATE_PARENT,
  1530. },
  1531. },
  1532. };
  1533. static struct clk_branch gcc_gephy_tx_clk = {
  1534. .halt_reg = 0x56014,
  1535. .halt_check = BRANCH_HALT_DELAY,
  1536. .clkr = {
  1537. .enable_reg = 0x56014,
  1538. .enable_mask = BIT(0),
  1539. .hw.init = &(struct clk_init_data) {
  1540. .name = "gcc_gephy_tx_clk",
  1541. .parent_hws = (const struct clk_hw *[]) {
  1542. &gmac0_tx_div_clk_src.clkr.hw,
  1543. },
  1544. .num_parents = 1,
  1545. .ops = &clk_branch2_ops,
  1546. .flags = CLK_SET_RATE_PARENT,
  1547. },
  1548. },
  1549. };
  1550. static struct clk_branch gcc_gmac0_cfg_clk = {
  1551. .halt_reg = 0x68304,
  1552. .clkr = {
  1553. .enable_reg = 0x68304,
  1554. .enable_mask = BIT(0),
  1555. .hw.init = &(struct clk_init_data) {
  1556. .name = "gcc_gmac0_cfg_clk",
  1557. .parent_hws = (const struct clk_hw *[]) {
  1558. &gmac_clk_src.clkr.hw,
  1559. },
  1560. .num_parents = 1,
  1561. .flags = CLK_SET_RATE_PARENT,
  1562. .ops = &clk_branch2_ops,
  1563. },
  1564. },
  1565. };
  1566. static struct clk_branch gcc_gmac0_ptp_clk = {
  1567. .halt_reg = 0x68300,
  1568. .clkr = {
  1569. .enable_reg = 0x68300,
  1570. .enable_mask = BIT(0),
  1571. .hw.init = &(struct clk_init_data) {
  1572. .name = "gcc_gmac0_ptp_clk",
  1573. .parent_hws = (const struct clk_hw *[]) {
  1574. &gmac_clk_src.clkr.hw,
  1575. },
  1576. .num_parents = 1,
  1577. .flags = CLK_SET_RATE_PARENT,
  1578. .ops = &clk_branch2_ops,
  1579. },
  1580. },
  1581. };
  1582. static struct clk_branch gcc_gmac0_rx_clk = {
  1583. .halt_reg = 0x68240,
  1584. .clkr = {
  1585. .enable_reg = 0x68240,
  1586. .enable_mask = BIT(0),
  1587. .hw.init = &(struct clk_init_data) {
  1588. .name = "gcc_gmac0_rx_clk",
  1589. .parent_hws = (const struct clk_hw *[]) {
  1590. &gmac0_rx_div_clk_src.clkr.hw,
  1591. },
  1592. .num_parents = 1,
  1593. .ops = &clk_branch2_ops,
  1594. .flags = CLK_SET_RATE_PARENT,
  1595. },
  1596. },
  1597. };
  1598. static struct clk_branch gcc_gmac0_sys_clk = {
  1599. .halt_reg = 0x68190,
  1600. .halt_check = BRANCH_HALT_DELAY,
  1601. .halt_bit = 31,
  1602. .clkr = {
  1603. .enable_reg = 0x68190,
  1604. .enable_mask = BIT(0),
  1605. .hw.init = &(struct clk_init_data) {
  1606. .name = "gcc_gmac0_sys_clk",
  1607. .parent_hws = (const struct clk_hw *[]) {
  1608. &gmac_clk_src.clkr.hw,
  1609. },
  1610. .num_parents = 1,
  1611. .flags = CLK_SET_RATE_PARENT,
  1612. .ops = &clk_branch2_ops,
  1613. },
  1614. },
  1615. };
  1616. static struct clk_branch gcc_gmac0_tx_clk = {
  1617. .halt_reg = 0x68244,
  1618. .clkr = {
  1619. .enable_reg = 0x68244,
  1620. .enable_mask = BIT(0),
  1621. .hw.init = &(struct clk_init_data) {
  1622. .name = "gcc_gmac0_tx_clk",
  1623. .parent_hws = (const struct clk_hw *[]) {
  1624. &gmac0_tx_div_clk_src.clkr.hw,
  1625. },
  1626. .num_parents = 1,
  1627. .ops = &clk_branch2_ops,
  1628. .flags = CLK_SET_RATE_PARENT,
  1629. },
  1630. },
  1631. };
  1632. static struct clk_branch gcc_gmac1_cfg_clk = {
  1633. .halt_reg = 0x68324,
  1634. .clkr = {
  1635. .enable_reg = 0x68324,
  1636. .enable_mask = BIT(0),
  1637. .hw.init = &(struct clk_init_data) {
  1638. .name = "gcc_gmac1_cfg_clk",
  1639. .parent_hws = (const struct clk_hw *[]) {
  1640. &gmac_clk_src.clkr.hw,
  1641. },
  1642. .num_parents = 1,
  1643. .flags = CLK_SET_RATE_PARENT,
  1644. .ops = &clk_branch2_ops,
  1645. },
  1646. },
  1647. };
  1648. static struct clk_branch gcc_gmac1_ptp_clk = {
  1649. .halt_reg = 0x68320,
  1650. .clkr = {
  1651. .enable_reg = 0x68320,
  1652. .enable_mask = BIT(0),
  1653. .hw.init = &(struct clk_init_data) {
  1654. .name = "gcc_gmac1_ptp_clk",
  1655. .parent_hws = (const struct clk_hw *[]) {
  1656. &gmac_clk_src.clkr.hw,
  1657. },
  1658. .num_parents = 1,
  1659. .flags = CLK_SET_RATE_PARENT,
  1660. .ops = &clk_branch2_ops,
  1661. },
  1662. },
  1663. };
  1664. static struct clk_branch gcc_gmac1_rx_clk = {
  1665. .halt_reg = 0x68248,
  1666. .clkr = {
  1667. .enable_reg = 0x68248,
  1668. .enable_mask = BIT(0),
  1669. .hw.init = &(struct clk_init_data) {
  1670. .name = "gcc_gmac1_rx_clk",
  1671. .parent_hws = (const struct clk_hw *[]) {
  1672. &gmac1_rx_div_clk_src.clkr.hw,
  1673. },
  1674. .num_parents = 1,
  1675. .ops = &clk_branch2_ops,
  1676. .flags = CLK_SET_RATE_PARENT,
  1677. },
  1678. },
  1679. };
  1680. static struct clk_branch gcc_gmac1_sys_clk = {
  1681. .halt_reg = 0x68310,
  1682. .clkr = {
  1683. .enable_reg = 0x68310,
  1684. .enable_mask = BIT(0),
  1685. .hw.init = &(struct clk_init_data) {
  1686. .name = "gcc_gmac1_sys_clk",
  1687. .parent_hws = (const struct clk_hw *[]) {
  1688. &gmac_clk_src.clkr.hw,
  1689. },
  1690. .num_parents = 1,
  1691. .flags = CLK_SET_RATE_PARENT,
  1692. .ops = &clk_branch2_ops,
  1693. },
  1694. },
  1695. };
  1696. static struct clk_branch gcc_gmac1_tx_clk = {
  1697. .halt_reg = 0x6824c,
  1698. .clkr = {
  1699. .enable_reg = 0x6824c,
  1700. .enable_mask = BIT(0),
  1701. .hw.init = &(struct clk_init_data) {
  1702. .name = "gcc_gmac1_tx_clk",
  1703. .parent_hws = (const struct clk_hw *[]) {
  1704. &gmac1_tx_div_clk_src.clkr.hw,
  1705. },
  1706. .num_parents = 1,
  1707. .ops = &clk_branch2_ops,
  1708. .flags = CLK_SET_RATE_PARENT,
  1709. },
  1710. },
  1711. };
  1712. static struct clk_branch gcc_gp1_clk = {
  1713. .halt_reg = 0x08000,
  1714. .clkr = {
  1715. .enable_reg = 0x08000,
  1716. .enable_mask = BIT(0),
  1717. .hw.init = &(struct clk_init_data) {
  1718. .name = "gcc_gp1_clk",
  1719. .parent_hws = (const struct clk_hw *[]) {
  1720. &gp1_clk_src.clkr.hw,
  1721. },
  1722. .num_parents = 1,
  1723. .flags = CLK_SET_RATE_PARENT,
  1724. .ops = &clk_branch2_ops,
  1725. },
  1726. },
  1727. };
  1728. static struct clk_branch gcc_gp2_clk = {
  1729. .halt_reg = 0x09000,
  1730. .clkr = {
  1731. .enable_reg = 0x09000,
  1732. .enable_mask = BIT(0),
  1733. .hw.init = &(struct clk_init_data) {
  1734. .name = "gcc_gp2_clk",
  1735. .parent_hws = (const struct clk_hw *[]) {
  1736. &gp2_clk_src.clkr.hw,
  1737. },
  1738. .num_parents = 1,
  1739. .flags = CLK_SET_RATE_PARENT,
  1740. .ops = &clk_branch2_ops,
  1741. },
  1742. },
  1743. };
  1744. static struct clk_branch gcc_gp3_clk = {
  1745. .halt_reg = 0x0a000,
  1746. .clkr = {
  1747. .enable_reg = 0x0a000,
  1748. .enable_mask = BIT(0),
  1749. .hw.init = &(struct clk_init_data) {
  1750. .name = "gcc_gp3_clk",
  1751. .parent_hws = (const struct clk_hw *[]) {
  1752. &gp3_clk_src.clkr.hw,
  1753. },
  1754. .num_parents = 1,
  1755. .flags = CLK_SET_RATE_PARENT,
  1756. .ops = &clk_branch2_ops,
  1757. },
  1758. },
  1759. };
  1760. static struct clk_branch gcc_lpass_core_axim_clk = {
  1761. .halt_reg = 0x2e048,
  1762. .halt_check = BRANCH_VOTED,
  1763. .clkr = {
  1764. .enable_reg = 0x2e048,
  1765. .enable_mask = BIT(0),
  1766. .hw.init = &(struct clk_init_data) {
  1767. .name = "gcc_lpass_core_axim_clk",
  1768. .parent_hws = (const struct clk_hw *[]) {
  1769. &lpass_axim_clk_src.clkr.hw,
  1770. },
  1771. .num_parents = 1,
  1772. .flags = CLK_SET_RATE_PARENT,
  1773. .ops = &clk_branch2_ops,
  1774. },
  1775. },
  1776. };
  1777. static struct clk_branch gcc_lpass_sway_clk = {
  1778. .halt_reg = 0x2e04c,
  1779. .clkr = {
  1780. .enable_reg = 0x2e04c,
  1781. .enable_mask = BIT(0),
  1782. .hw.init = &(struct clk_init_data) {
  1783. .name = "gcc_lpass_sway_clk",
  1784. .parent_hws = (const struct clk_hw *[]) {
  1785. &lpass_sway_clk_src.clkr.hw,
  1786. },
  1787. .num_parents = 1,
  1788. .flags = CLK_SET_RATE_PARENT,
  1789. .ops = &clk_branch2_ops,
  1790. },
  1791. },
  1792. };
  1793. static struct clk_branch gcc_mdio0_ahb_clk = {
  1794. .halt_reg = 0x58004,
  1795. .clkr = {
  1796. .enable_reg = 0x58004,
  1797. .enable_mask = BIT(0),
  1798. .hw.init = &(struct clk_init_data) {
  1799. .name = "gcc_mdioi0_ahb_clk",
  1800. .parent_hws = (const struct clk_hw *[]) {
  1801. &pcnoc_clk_src.hw,
  1802. },
  1803. .num_parents = 1,
  1804. .flags = CLK_SET_RATE_PARENT,
  1805. .ops = &clk_branch2_ops,
  1806. },
  1807. },
  1808. };
  1809. static struct clk_branch gcc_mdio1_ahb_clk = {
  1810. .halt_reg = 0x58014,
  1811. .clkr = {
  1812. .enable_reg = 0x58014,
  1813. .enable_mask = BIT(0),
  1814. .hw.init = &(struct clk_init_data) {
  1815. .name = "gcc_mdio1_ahb_clk",
  1816. .parent_hws = (const struct clk_hw *[]) {
  1817. &pcnoc_clk_src.hw,
  1818. },
  1819. .num_parents = 1,
  1820. .flags = CLK_SET_RATE_PARENT,
  1821. .ops = &clk_branch2_ops,
  1822. },
  1823. },
  1824. };
  1825. static struct clk_branch gcc_pcie0_ahb_clk = {
  1826. .halt_reg = 0x75010,
  1827. .clkr = {
  1828. .enable_reg = 0x75010,
  1829. .enable_mask = BIT(0),
  1830. .hw.init = &(struct clk_init_data) {
  1831. .name = "gcc_pcie0_ahb_clk",
  1832. .parent_hws = (const struct clk_hw *[]) {
  1833. &pcnoc_clk_src.hw,
  1834. },
  1835. .num_parents = 1,
  1836. .flags = CLK_SET_RATE_PARENT,
  1837. .ops = &clk_branch2_ops,
  1838. },
  1839. },
  1840. };
  1841. static struct clk_branch gcc_pcie0_aux_clk = {
  1842. .halt_reg = 0x75014,
  1843. .clkr = {
  1844. .enable_reg = 0x75014,
  1845. .enable_mask = BIT(0),
  1846. .hw.init = &(struct clk_init_data) {
  1847. .name = "gcc_pcie0_aux_clk",
  1848. .parent_hws = (const struct clk_hw *[]) {
  1849. &pcie0_aux_clk_src.clkr.hw,
  1850. },
  1851. .num_parents = 1,
  1852. .flags = CLK_SET_RATE_PARENT,
  1853. .ops = &clk_branch2_ops,
  1854. },
  1855. },
  1856. };
  1857. static struct clk_branch gcc_pcie0_axi_m_clk = {
  1858. .halt_reg = 0x75008,
  1859. .clkr = {
  1860. .enable_reg = 0x75008,
  1861. .enable_mask = BIT(0),
  1862. .hw.init = &(struct clk_init_data) {
  1863. .name = "gcc_pcie0_axi_m_clk",
  1864. .parent_hws = (const struct clk_hw *[]) {
  1865. &pcie0_axi_clk_src.clkr.hw,
  1866. },
  1867. .num_parents = 1,
  1868. .flags = CLK_SET_RATE_PARENT,
  1869. .ops = &clk_branch2_ops,
  1870. },
  1871. },
  1872. };
  1873. static struct clk_branch gcc_pcie0_axi_s_bridge_clk = {
  1874. .halt_reg = 0x75048,
  1875. .clkr = {
  1876. .enable_reg = 0x75048,
  1877. .enable_mask = BIT(0),
  1878. .hw.init = &(struct clk_init_data) {
  1879. .name = "gcc_pcie0_axi_s_bridge_clk",
  1880. .parent_hws = (const struct clk_hw *[]) {
  1881. &pcie0_axi_clk_src.clkr.hw,
  1882. },
  1883. .num_parents = 1,
  1884. .flags = CLK_SET_RATE_PARENT,
  1885. .ops = &clk_branch2_ops,
  1886. },
  1887. },
  1888. };
  1889. static struct clk_branch gcc_pcie0_axi_s_clk = {
  1890. .halt_reg = 0x7500c,
  1891. .clkr = {
  1892. .enable_reg = 0x7500c,
  1893. .enable_mask = BIT(0),
  1894. .hw.init = &(struct clk_init_data) {
  1895. .name = "gcc_pcie0_axi_s_clk",
  1896. .parent_hws = (const struct clk_hw *[]) {
  1897. &pcie0_axi_clk_src.clkr.hw,
  1898. },
  1899. .num_parents = 1,
  1900. .flags = CLK_SET_RATE_PARENT,
  1901. .ops = &clk_branch2_ops,
  1902. },
  1903. },
  1904. };
  1905. static struct clk_branch gcc_pcie0_pipe_clk = {
  1906. .halt_reg = 0x75018,
  1907. .halt_check = BRANCH_HALT_DELAY,
  1908. .halt_bit = 31,
  1909. .clkr = {
  1910. .enable_reg = 0x75018,
  1911. .enable_mask = BIT(0),
  1912. .hw.init = &(struct clk_init_data) {
  1913. .name = "gcc_pcie0_pipe_clk",
  1914. .parent_hws = (const struct clk_hw *[]) {
  1915. &pcie0_pipe_clk_src.clkr.hw,
  1916. },
  1917. .num_parents = 1,
  1918. .flags = CLK_SET_RATE_PARENT,
  1919. .ops = &clk_branch2_ops,
  1920. },
  1921. },
  1922. };
  1923. static struct clk_branch gcc_pcie1_ahb_clk = {
  1924. .halt_reg = 0x76010,
  1925. .clkr = {
  1926. .enable_reg = 0x76010,
  1927. .enable_mask = BIT(0),
  1928. .hw.init = &(struct clk_init_data) {
  1929. .name = "gcc_pcie1_ahb_clk",
  1930. .parent_hws = (const struct clk_hw *[]) {
  1931. &pcnoc_clk_src.hw,
  1932. },
  1933. .num_parents = 1,
  1934. .flags = CLK_SET_RATE_PARENT,
  1935. .ops = &clk_branch2_ops,
  1936. },
  1937. },
  1938. };
  1939. static struct clk_branch gcc_pcie1_aux_clk = {
  1940. .halt_reg = 0x76014,
  1941. .clkr = {
  1942. .enable_reg = 0x76014,
  1943. .enable_mask = BIT(0),
  1944. .hw.init = &(struct clk_init_data) {
  1945. .name = "gcc_pcie1_aux_clk",
  1946. .parent_hws = (const struct clk_hw *[]) {
  1947. &pcie1_aux_clk_src.clkr.hw,
  1948. },
  1949. .num_parents = 1,
  1950. .flags = CLK_SET_RATE_PARENT,
  1951. .ops = &clk_branch2_ops,
  1952. },
  1953. },
  1954. };
  1955. static struct clk_branch gcc_pcie1_axi_m_clk = {
  1956. .halt_reg = 0x76008,
  1957. .clkr = {
  1958. .enable_reg = 0x76008,
  1959. .enable_mask = BIT(0),
  1960. .hw.init = &(struct clk_init_data) {
  1961. .name = "gcc_pcie1_axi_m_clk",
  1962. .parent_hws = (const struct clk_hw *[]) {
  1963. &pcie1_axi_clk_src.clkr.hw,
  1964. },
  1965. .num_parents = 1,
  1966. .flags = CLK_SET_RATE_PARENT,
  1967. .ops = &clk_branch2_ops,
  1968. },
  1969. },
  1970. };
  1971. static struct clk_branch gcc_pcie1_axi_s_bridge_clk = {
  1972. .halt_reg = 0x76048,
  1973. .clkr = {
  1974. .enable_reg = 0x76048,
  1975. .enable_mask = BIT(0),
  1976. .hw.init = &(struct clk_init_data) {
  1977. .name = "gcc_pcie1_axi_s_bridge_clk",
  1978. .parent_hws = (const struct clk_hw *[]) {
  1979. &pcie1_axi_clk_src.clkr.hw,
  1980. },
  1981. .num_parents = 1,
  1982. .flags = CLK_SET_RATE_PARENT,
  1983. .ops = &clk_branch2_ops,
  1984. },
  1985. },
  1986. };
  1987. static struct clk_branch gcc_pcie1_axi_s_clk = {
  1988. .halt_reg = 0x7600c,
  1989. .clkr = {
  1990. .enable_reg = 0x7600c,
  1991. .enable_mask = BIT(0),
  1992. .hw.init = &(struct clk_init_data) {
  1993. .name = "gcc_pcie1_axi_s_clk",
  1994. .parent_hws = (const struct clk_hw *[]) {
  1995. &pcie1_axi_clk_src.clkr.hw,
  1996. },
  1997. .num_parents = 1,
  1998. .flags = CLK_SET_RATE_PARENT,
  1999. .ops = &clk_branch2_ops,
  2000. },
  2001. },
  2002. };
  2003. static struct clk_branch gcc_pcie1_pipe_clk = {
  2004. .halt_reg = 0x76018,
  2005. .halt_check = BRANCH_HALT_DELAY,
  2006. .halt_bit = 31,
  2007. .clkr = {
  2008. .enable_reg = 0x76018,
  2009. .enable_mask = BIT(0),
  2010. .hw.init = &(struct clk_init_data) {
  2011. .name = "gcc_pcie1_pipe_clk",
  2012. .parent_hws = (const struct clk_hw *[]) {
  2013. &pcie1_pipe_clk_src.clkr.hw,
  2014. },
  2015. .num_parents = 1,
  2016. .flags = CLK_SET_RATE_PARENT,
  2017. .ops = &clk_branch2_ops,
  2018. },
  2019. },
  2020. };
  2021. static struct clk_branch gcc_prng_ahb_clk = {
  2022. .halt_reg = 0x13004,
  2023. .halt_check = BRANCH_HALT_VOTED,
  2024. .clkr = {
  2025. .enable_reg = 0x0b004,
  2026. .enable_mask = BIT(8),
  2027. .hw.init = &(struct clk_init_data) {
  2028. .name = "gcc_prng_ahb_clk",
  2029. .parent_hws = (const struct clk_hw *[]) {
  2030. &pcnoc_clk_src.hw,
  2031. },
  2032. .num_parents = 1,
  2033. .flags = CLK_SET_RATE_PARENT,
  2034. .ops = &clk_branch2_ops,
  2035. },
  2036. },
  2037. };
  2038. static struct clk_branch gcc_q6_ahb_clk = {
  2039. .halt_reg = 0x59138,
  2040. .clkr = {
  2041. .enable_reg = 0x59138,
  2042. .enable_mask = BIT(0),
  2043. .hw.init = &(struct clk_init_data) {
  2044. .name = "gcc_q6_ahb_clk",
  2045. .parent_hws = (const struct clk_hw *[]) {
  2046. &wcss_ahb_clk_src.clkr.hw,
  2047. },
  2048. .num_parents = 1,
  2049. .flags = CLK_SET_RATE_PARENT,
  2050. .ops = &clk_branch2_ops,
  2051. },
  2052. },
  2053. };
  2054. static struct clk_branch gcc_q6_ahb_s_clk = {
  2055. .halt_reg = 0x5914c,
  2056. .clkr = {
  2057. .enable_reg = 0x5914c,
  2058. .enable_mask = BIT(0),
  2059. .hw.init = &(struct clk_init_data) {
  2060. .name = "gcc_q6_ahb_s_clk",
  2061. .parent_hws = (const struct clk_hw *[]) {
  2062. &wcss_ahb_clk_src.clkr.hw,
  2063. },
  2064. .num_parents = 1,
  2065. .flags = CLK_SET_RATE_PARENT,
  2066. .ops = &clk_branch2_ops,
  2067. },
  2068. },
  2069. };
  2070. static struct clk_branch gcc_q6_axim_clk = {
  2071. .halt_reg = 0x5913c,
  2072. .clkr = {
  2073. .enable_reg = 0x5913c,
  2074. .enable_mask = BIT(0),
  2075. .hw.init = &(struct clk_init_data) {
  2076. .name = "gcc_q6_axim_clk",
  2077. .parent_hws = (const struct clk_hw *[]) {
  2078. &q6_axi_clk_src.clkr.hw,
  2079. },
  2080. .num_parents = 1,
  2081. .flags = CLK_SET_RATE_PARENT,
  2082. .ops = &clk_branch2_ops,
  2083. },
  2084. },
  2085. };
  2086. static struct clk_branch gcc_q6_axim2_clk = {
  2087. .halt_reg = 0x59150,
  2088. .clkr = {
  2089. .enable_reg = 0x59150,
  2090. .enable_mask = BIT(0),
  2091. .hw.init = &(struct clk_init_data) {
  2092. .name = "gcc_q6_axim2_clk",
  2093. .parent_hws = (const struct clk_hw *[]) {
  2094. &q6_axi_clk_src.clkr.hw,
  2095. },
  2096. .num_parents = 1,
  2097. .flags = CLK_SET_RATE_PARENT,
  2098. .ops = &clk_branch2_ops,
  2099. },
  2100. },
  2101. };
  2102. static struct clk_branch gcc_q6_axis_clk = {
  2103. .halt_reg = 0x59154,
  2104. .clkr = {
  2105. .enable_reg = 0x59154,
  2106. .enable_mask = BIT(0),
  2107. .hw.init = &(struct clk_init_data) {
  2108. .name = "gcc_q6_axis_clk",
  2109. .parent_hws = (const struct clk_hw *[]) {
  2110. &system_noc_clk_src.hw,
  2111. },
  2112. .num_parents = 1,
  2113. .flags = CLK_SET_RATE_PARENT,
  2114. .ops = &clk_branch2_ops,
  2115. },
  2116. },
  2117. };
  2118. static struct clk_branch gcc_q6_tsctr_1to2_clk = {
  2119. .halt_reg = 0x59148,
  2120. .clkr = {
  2121. .enable_reg = 0x59148,
  2122. .enable_mask = BIT(0),
  2123. .hw.init = &(struct clk_init_data) {
  2124. .name = "gcc_q6_tsctr_1to2_clk",
  2125. .parent_hws = (const struct clk_hw *[]) {
  2126. &qdss_tsctr_div2_clk_src.hw,
  2127. },
  2128. .num_parents = 1,
  2129. .flags = CLK_SET_RATE_PARENT,
  2130. .ops = &clk_branch2_ops,
  2131. },
  2132. },
  2133. };
  2134. static struct clk_branch gcc_q6ss_atbm_clk = {
  2135. .halt_reg = 0x59144,
  2136. .clkr = {
  2137. .enable_reg = 0x59144,
  2138. .enable_mask = BIT(0),
  2139. .hw.init = &(struct clk_init_data) {
  2140. .name = "gcc_q6ss_atbm_clk",
  2141. .parent_hws = (const struct clk_hw *[]) {
  2142. &qdss_at_clk_src.clkr.hw,
  2143. },
  2144. .num_parents = 1,
  2145. .flags = CLK_SET_RATE_PARENT,
  2146. .ops = &clk_branch2_ops,
  2147. },
  2148. },
  2149. };
  2150. static struct clk_branch gcc_q6ss_pclkdbg_clk = {
  2151. .halt_reg = 0x59140,
  2152. .clkr = {
  2153. .enable_reg = 0x59140,
  2154. .enable_mask = BIT(0),
  2155. .hw.init = &(struct clk_init_data) {
  2156. .name = "gcc_q6ss_pclkdbg_clk",
  2157. .parent_hws = (const struct clk_hw *[]) {
  2158. &qdss_dap_sync_clk_src.hw,
  2159. },
  2160. .num_parents = 1,
  2161. .flags = CLK_SET_RATE_PARENT,
  2162. .ops = &clk_branch2_ops,
  2163. },
  2164. },
  2165. };
  2166. static struct clk_branch gcc_q6ss_trig_clk = {
  2167. .halt_reg = 0x59128,
  2168. .clkr = {
  2169. .enable_reg = 0x59128,
  2170. .enable_mask = BIT(0),
  2171. .hw.init = &(struct clk_init_data) {
  2172. .name = "gcc_q6ss_trig_clk",
  2173. .parent_hws = (const struct clk_hw *[]) {
  2174. &qdss_dap_sync_clk_src.hw,
  2175. },
  2176. .num_parents = 1,
  2177. .flags = CLK_SET_RATE_PARENT,
  2178. .ops = &clk_branch2_ops,
  2179. },
  2180. },
  2181. };
  2182. static struct clk_branch gcc_qdss_at_clk = {
  2183. .halt_reg = 0x29024,
  2184. .clkr = {
  2185. .enable_reg = 0x29024,
  2186. .enable_mask = BIT(0),
  2187. .hw.init = &(struct clk_init_data) {
  2188. .name = "gcc_qdss_at_clk",
  2189. .parent_hws = (const struct clk_hw *[]) {
  2190. &qdss_at_clk_src.clkr.hw,
  2191. },
  2192. .num_parents = 1,
  2193. .flags = CLK_SET_RATE_PARENT,
  2194. .ops = &clk_branch2_ops,
  2195. },
  2196. },
  2197. };
  2198. static struct clk_branch gcc_qdss_dap_clk = {
  2199. .halt_reg = 0x29084,
  2200. .clkr = {
  2201. .enable_reg = 0x29084,
  2202. .enable_mask = BIT(0),
  2203. .hw.init = &(struct clk_init_data) {
  2204. .name = "gcc_qdss_dap_clk",
  2205. .parent_hws = (const struct clk_hw *[]) {
  2206. &qdss_tsctr_clk_src.clkr.hw,
  2207. },
  2208. .num_parents = 1,
  2209. .flags = CLK_SET_RATE_PARENT,
  2210. .ops = &clk_branch2_ops,
  2211. },
  2212. },
  2213. };
  2214. static struct clk_branch gcc_qdss_cfg_ahb_clk = {
  2215. .halt_reg = 0x29008,
  2216. .clkr = {
  2217. .enable_reg = 0x29008,
  2218. .enable_mask = BIT(0),
  2219. .hw.init = &(struct clk_init_data) {
  2220. .name = "gcc_qdss_cfg_ahb_clk",
  2221. .parent_hws = (const struct clk_hw *[]) {
  2222. &pcnoc_clk_src.hw,
  2223. },
  2224. .num_parents = 1,
  2225. .flags = CLK_SET_RATE_PARENT,
  2226. .ops = &clk_branch2_ops,
  2227. },
  2228. },
  2229. };
  2230. static struct clk_branch gcc_qdss_dap_ahb_clk = {
  2231. .halt_reg = 0x29004,
  2232. .clkr = {
  2233. .enable_reg = 0x29004,
  2234. .enable_mask = BIT(0),
  2235. .hw.init = &(struct clk_init_data) {
  2236. .name = "gcc_qdss_dap_ahb_clk",
  2237. .parent_hws = (const struct clk_hw *[]) {
  2238. &pcnoc_clk_src.hw,
  2239. },
  2240. .num_parents = 1,
  2241. .flags = CLK_SET_RATE_PARENT,
  2242. .ops = &clk_branch2_ops,
  2243. },
  2244. },
  2245. };
  2246. static struct clk_branch gcc_qdss_etr_usb_clk = {
  2247. .halt_reg = 0x29028,
  2248. .clkr = {
  2249. .enable_reg = 0x29028,
  2250. .enable_mask = BIT(0),
  2251. .hw.init = &(struct clk_init_data) {
  2252. .name = "gcc_qdss_etr_usb_clk",
  2253. .parent_hws = (const struct clk_hw *[]) {
  2254. &system_noc_clk_src.hw,
  2255. },
  2256. .num_parents = 1,
  2257. .flags = CLK_SET_RATE_PARENT,
  2258. .ops = &clk_branch2_ops,
  2259. },
  2260. },
  2261. };
  2262. static struct clk_branch gcc_qdss_eud_at_clk = {
  2263. .halt_reg = 0x29020,
  2264. .clkr = {
  2265. .enable_reg = 0x29020,
  2266. .enable_mask = BIT(0),
  2267. .hw.init = &(struct clk_init_data) {
  2268. .name = "gcc_qdss_eud_at_clk",
  2269. .parent_hws = (const struct clk_hw *[]) {
  2270. &eud_at_clk_src.hw,
  2271. },
  2272. .num_parents = 1,
  2273. .flags = CLK_SET_RATE_PARENT,
  2274. .ops = &clk_branch2_ops,
  2275. },
  2276. },
  2277. };
  2278. static struct clk_branch gcc_qdss_stm_clk = {
  2279. .halt_reg = 0x29044,
  2280. .clkr = {
  2281. .enable_reg = 0x29044,
  2282. .enable_mask = BIT(0),
  2283. .hw.init = &(struct clk_init_data) {
  2284. .name = "gcc_qdss_stm_clk",
  2285. .parent_hws = (const struct clk_hw *[]) {
  2286. &qdss_stm_clk_src.clkr.hw,
  2287. },
  2288. .num_parents = 1,
  2289. .flags = CLK_SET_RATE_PARENT,
  2290. .ops = &clk_branch2_ops,
  2291. },
  2292. },
  2293. };
  2294. static struct clk_branch gcc_qdss_traceclkin_clk = {
  2295. .halt_reg = 0x29060,
  2296. .clkr = {
  2297. .enable_reg = 0x29060,
  2298. .enable_mask = BIT(0),
  2299. .hw.init = &(struct clk_init_data) {
  2300. .name = "gcc_qdss_traceclkin_clk",
  2301. .parent_hws = (const struct clk_hw *[]) {
  2302. &qdss_traceclkin_clk_src.clkr.hw,
  2303. },
  2304. .num_parents = 1,
  2305. .flags = CLK_SET_RATE_PARENT,
  2306. .ops = &clk_branch2_ops,
  2307. },
  2308. },
  2309. };
  2310. static struct clk_branch gcc_qdss_tsctr_div8_clk = {
  2311. .halt_reg = 0x2908c,
  2312. .clkr = {
  2313. .enable_reg = 0x2908c,
  2314. .enable_mask = BIT(0),
  2315. .hw.init = &(struct clk_init_data) {
  2316. .name = "gcc_qdss_tsctr_div8_clk",
  2317. .parent_hws = (const struct clk_hw *[]) {
  2318. &qdss_tsctr_clk_src.clkr.hw,
  2319. },
  2320. .num_parents = 1,
  2321. .flags = CLK_SET_RATE_PARENT,
  2322. .ops = &clk_branch2_ops,
  2323. },
  2324. },
  2325. };
  2326. static struct clk_branch gcc_qpic_ahb_clk = {
  2327. .halt_reg = 0x57024,
  2328. .clkr = {
  2329. .enable_reg = 0x57024,
  2330. .enable_mask = BIT(0),
  2331. .hw.init = &(struct clk_init_data) {
  2332. .name = "gcc_qpic_ahb_clk",
  2333. .parent_hws = (const struct clk_hw *[]) {
  2334. &pcnoc_clk_src.hw,
  2335. },
  2336. .num_parents = 1,
  2337. .flags = CLK_SET_RATE_PARENT,
  2338. .ops = &clk_branch2_ops,
  2339. },
  2340. },
  2341. };
  2342. static struct clk_branch gcc_qpic_clk = {
  2343. .halt_reg = 0x57020,
  2344. .clkr = {
  2345. .enable_reg = 0x57020,
  2346. .enable_mask = BIT(0),
  2347. .hw.init = &(struct clk_init_data) {
  2348. .name = "gcc_qpic_clk",
  2349. .parent_hws = (const struct clk_hw *[]) {
  2350. &pcnoc_clk_src.hw,
  2351. },
  2352. .num_parents = 1,
  2353. .flags = CLK_SET_RATE_PARENT,
  2354. .ops = &clk_branch2_ops,
  2355. },
  2356. },
  2357. };
  2358. static struct clk_branch gcc_qpic_io_macro_clk = {
  2359. .halt_reg = 0x5701c,
  2360. .clkr = {
  2361. .enable_reg = 0x5701c,
  2362. .enable_mask = BIT(0),
  2363. .hw.init = &(struct clk_init_data) {
  2364. .name = "gcc_qpic_io_macro_clk",
  2365. .parent_hws = (const struct clk_hw *[]) {
  2366. &qpic_io_macro_clk_src.clkr.hw,
  2367. },
  2368. .num_parents = 1,
  2369. .flags = CLK_SET_RATE_PARENT,
  2370. .ops = &clk_branch2_ops,
  2371. },
  2372. },
  2373. };
  2374. static struct clk_branch gcc_sdcc1_ahb_clk = {
  2375. .halt_reg = 0x4201c,
  2376. .clkr = {
  2377. .enable_reg = 0x4201c,
  2378. .enable_mask = BIT(0),
  2379. .hw.init = &(struct clk_init_data) {
  2380. .name = "gcc_sdcc1_ahb_clk",
  2381. .parent_hws = (const struct clk_hw *[]) {
  2382. &pcnoc_clk_src.hw,
  2383. },
  2384. .num_parents = 1,
  2385. .flags = CLK_SET_RATE_PARENT,
  2386. .ops = &clk_branch2_ops,
  2387. },
  2388. },
  2389. };
  2390. static struct clk_branch gcc_sdcc1_apps_clk = {
  2391. .halt_reg = 0x42018,
  2392. .clkr = {
  2393. .enable_reg = 0x42018,
  2394. .enable_mask = BIT(0),
  2395. .hw.init = &(struct clk_init_data) {
  2396. .name = "gcc_sdcc1_apps_clk",
  2397. .parent_hws = (const struct clk_hw *[]) {
  2398. &sdcc1_apps_clk_src.clkr.hw,
  2399. },
  2400. .num_parents = 1,
  2401. .flags = CLK_SET_RATE_PARENT,
  2402. .ops = &clk_branch2_ops,
  2403. },
  2404. },
  2405. };
  2406. static struct clk_branch gcc_snoc_gmac0_ahb_clk = {
  2407. .halt_reg = 0x260a0,
  2408. .clkr = {
  2409. .enable_reg = 0x260a0,
  2410. .enable_mask = BIT(0),
  2411. .hw.init = &(struct clk_init_data) {
  2412. .name = "gcc_snoc_gmac0_ahb_clk",
  2413. .parent_hws = (const struct clk_hw *[]) {
  2414. &gmac_clk_src.clkr.hw,
  2415. },
  2416. .num_parents = 1,
  2417. .flags = CLK_SET_RATE_PARENT,
  2418. .ops = &clk_branch2_ops,
  2419. },
  2420. },
  2421. };
  2422. static struct clk_branch gcc_snoc_gmac0_axi_clk = {
  2423. .halt_reg = 0x26084,
  2424. .clkr = {
  2425. .enable_reg = 0x26084,
  2426. .enable_mask = BIT(0),
  2427. .hw.init = &(struct clk_init_data) {
  2428. .name = "gcc_snoc_gmac0_axi_clk",
  2429. .parent_hws = (const struct clk_hw *[]) {
  2430. &gmac_clk_src.clkr.hw,
  2431. },
  2432. .num_parents = 1,
  2433. .flags = CLK_SET_RATE_PARENT,
  2434. .ops = &clk_branch2_ops,
  2435. },
  2436. },
  2437. };
  2438. static struct clk_branch gcc_snoc_gmac1_ahb_clk = {
  2439. .halt_reg = 0x260a4,
  2440. .clkr = {
  2441. .enable_reg = 0x260a4,
  2442. .enable_mask = BIT(0),
  2443. .hw.init = &(struct clk_init_data) {
  2444. .name = "gcc_snoc_gmac1_ahb_clk",
  2445. .parent_hws = (const struct clk_hw *[]) {
  2446. &gmac_clk_src.clkr.hw,
  2447. },
  2448. .num_parents = 1,
  2449. .flags = CLK_SET_RATE_PARENT,
  2450. .ops = &clk_branch2_ops,
  2451. },
  2452. },
  2453. };
  2454. static struct clk_branch gcc_snoc_gmac1_axi_clk = {
  2455. .halt_reg = 0x26088,
  2456. .clkr = {
  2457. .enable_reg = 0x26088,
  2458. .enable_mask = BIT(0),
  2459. .hw.init = &(struct clk_init_data) {
  2460. .name = "gcc_snoc_gmac1_axi_clk",
  2461. .parent_hws = (const struct clk_hw *[]) {
  2462. &gmac_clk_src.clkr.hw,
  2463. },
  2464. .num_parents = 1,
  2465. .flags = CLK_SET_RATE_PARENT,
  2466. .ops = &clk_branch2_ops,
  2467. },
  2468. },
  2469. };
  2470. static struct clk_branch gcc_snoc_lpass_axim_clk = {
  2471. .halt_reg = 0x26074,
  2472. .clkr = {
  2473. .enable_reg = 0x26074,
  2474. .enable_mask = BIT(0),
  2475. .hw.init = &(struct clk_init_data) {
  2476. .name = "gcc_snoc_lpass_axim_clk",
  2477. .parent_hws = (const struct clk_hw *[]) {
  2478. &lpass_axim_clk_src.clkr.hw,
  2479. },
  2480. .num_parents = 1,
  2481. .flags = CLK_SET_RATE_PARENT,
  2482. .ops = &clk_branch2_ops,
  2483. },
  2484. },
  2485. };
  2486. static struct clk_branch gcc_snoc_lpass_sway_clk = {
  2487. .halt_reg = 0x26078,
  2488. .clkr = {
  2489. .enable_reg = 0x26078,
  2490. .enable_mask = BIT(0),
  2491. .hw.init = &(struct clk_init_data) {
  2492. .name = "gcc_snoc_lpass_sway_clk",
  2493. .parent_hws = (const struct clk_hw *[]) {
  2494. &lpass_sway_clk_src.clkr.hw,
  2495. },
  2496. .num_parents = 1,
  2497. .flags = CLK_SET_RATE_PARENT,
  2498. .ops = &clk_branch2_ops,
  2499. },
  2500. },
  2501. };
  2502. static struct clk_branch gcc_snoc_ubi0_axi_clk = {
  2503. .halt_reg = 0x26094,
  2504. .clkr = {
  2505. .enable_reg = 0x26094,
  2506. .enable_mask = BIT(0),
  2507. .hw.init = &(struct clk_init_data) {
  2508. .name = "gcc_snoc_ubi0_axi_clk",
  2509. .parent_hws = (const struct clk_hw *[]) {
  2510. &ubi0_axi_clk_src.clkr.hw,
  2511. },
  2512. .num_parents = 1,
  2513. .flags = CLK_SET_RATE_PARENT,
  2514. .ops = &clk_branch2_ops,
  2515. },
  2516. },
  2517. };
  2518. static struct clk_branch gcc_sys_noc_pcie0_axi_clk = {
  2519. .halt_reg = 0x26048,
  2520. .clkr = {
  2521. .enable_reg = 0x26048,
  2522. .enable_mask = BIT(0),
  2523. .hw.init = &(struct clk_init_data) {
  2524. .name = "gcc_sys_noc_pcie0_axi_clk",
  2525. .parent_hws = (const struct clk_hw *[]) {
  2526. &pcie0_axi_clk_src.clkr.hw,
  2527. },
  2528. .num_parents = 1,
  2529. .flags = CLK_SET_RATE_PARENT,
  2530. .ops = &clk_branch2_ops,
  2531. },
  2532. },
  2533. };
  2534. static struct clk_branch gcc_sys_noc_pcie1_axi_clk = {
  2535. .halt_reg = 0x2604c,
  2536. .clkr = {
  2537. .enable_reg = 0x2604c,
  2538. .enable_mask = BIT(0),
  2539. .hw.init = &(struct clk_init_data) {
  2540. .name = "gcc_sys_noc_pcie1_axi_clk",
  2541. .parent_hws = (const struct clk_hw *[]) {
  2542. &pcie1_axi_clk_src.clkr.hw,
  2543. },
  2544. .num_parents = 1,
  2545. .flags = CLK_SET_RATE_PARENT,
  2546. .ops = &clk_branch2_ops,
  2547. },
  2548. },
  2549. };
  2550. static struct clk_branch gcc_sys_noc_qdss_stm_axi_clk = {
  2551. .halt_reg = 0x26024,
  2552. .clkr = {
  2553. .enable_reg = 0x26024,
  2554. .enable_mask = BIT(0),
  2555. .hw.init = &(struct clk_init_data) {
  2556. .name = "gcc_sys_noc_qdss_stm_axi_clk",
  2557. .parent_hws = (const struct clk_hw *[]) {
  2558. &qdss_stm_clk_src.clkr.hw,
  2559. },
  2560. .num_parents = 1,
  2561. .flags = CLK_SET_RATE_PARENT,
  2562. .ops = &clk_branch2_ops,
  2563. },
  2564. },
  2565. };
  2566. static struct clk_branch gcc_sys_noc_usb0_axi_clk = {
  2567. .halt_reg = 0x26040,
  2568. .clkr = {
  2569. .enable_reg = 0x26040,
  2570. .enable_mask = BIT(0),
  2571. .hw.init = &(struct clk_init_data) {
  2572. .name = "gcc_sys_noc_usb0_axi_clk",
  2573. .parent_hws = (const struct clk_hw *[]) {
  2574. &usb0_master_clk_src.clkr.hw,
  2575. },
  2576. .num_parents = 1,
  2577. .flags = CLK_SET_RATE_PARENT,
  2578. .ops = &clk_branch2_ops,
  2579. },
  2580. },
  2581. };
  2582. static struct clk_branch gcc_sys_noc_wcss_ahb_clk = {
  2583. .halt_reg = 0x26034,
  2584. .clkr = {
  2585. .enable_reg = 0x26034,
  2586. .enable_mask = BIT(0),
  2587. .hw.init = &(struct clk_init_data) {
  2588. .name = "gcc_sys_noc_wcss_ahb_clk",
  2589. .parent_hws = (const struct clk_hw *[]) {
  2590. &wcss_ahb_clk_src.clkr.hw,
  2591. },
  2592. .num_parents = 1,
  2593. .flags = CLK_SET_RATE_PARENT,
  2594. .ops = &clk_branch2_ops,
  2595. },
  2596. },
  2597. };
  2598. static struct clk_branch gcc_ubi0_axi_clk = {
  2599. .halt_reg = 0x68200,
  2600. .halt_check = BRANCH_HALT_DELAY,
  2601. .clkr = {
  2602. .enable_reg = 0x68200,
  2603. .enable_mask = BIT(0),
  2604. .hw.init = &(struct clk_init_data) {
  2605. .name = "gcc_ubi0_axi_clk",
  2606. .parent_hws = (const struct clk_hw *[]) {
  2607. &ubi0_axi_clk_src.clkr.hw,
  2608. },
  2609. .num_parents = 1,
  2610. .flags = CLK_SET_RATE_PARENT,
  2611. .ops = &clk_branch2_ops,
  2612. },
  2613. },
  2614. };
  2615. static struct clk_branch gcc_ubi0_cfg_clk = {
  2616. .halt_reg = 0x68160,
  2617. .halt_check = BRANCH_HALT_DELAY,
  2618. .clkr = {
  2619. .enable_reg = 0x68160,
  2620. .enable_mask = BIT(0),
  2621. .hw.init = &(struct clk_init_data) {
  2622. .name = "gcc_ubi0_cfg_clk",
  2623. .parent_hws = (const struct clk_hw *[]) {
  2624. &pcnoc_clk_src.hw,
  2625. },
  2626. .num_parents = 1,
  2627. .flags = CLK_SET_RATE_PARENT,
  2628. .ops = &clk_branch2_ops,
  2629. },
  2630. },
  2631. };
  2632. static struct clk_branch gcc_ubi0_dbg_clk = {
  2633. .halt_reg = 0x68214,
  2634. .halt_check = BRANCH_HALT_DELAY,
  2635. .clkr = {
  2636. .enable_reg = 0x68214,
  2637. .enable_mask = BIT(0),
  2638. .hw.init = &(struct clk_init_data) {
  2639. .name = "gcc_ubi0_dbg_clk",
  2640. .parent_hws = (const struct clk_hw *[]) {
  2641. &qdss_tsctr_clk_src.clkr.hw,
  2642. },
  2643. .num_parents = 1,
  2644. .flags = CLK_SET_RATE_PARENT,
  2645. .ops = &clk_branch2_ops,
  2646. },
  2647. },
  2648. };
  2649. static struct clk_branch gcc_ubi0_core_clk = {
  2650. .halt_reg = 0x68210,
  2651. .halt_check = BRANCH_HALT_DELAY,
  2652. .clkr = {
  2653. .enable_reg = 0x68210,
  2654. .enable_mask = BIT(0),
  2655. .hw.init = &(struct clk_init_data) {
  2656. .name = "gcc_ubi0_core_clk",
  2657. .parent_hws = (const struct clk_hw *[]) {
  2658. &ubi0_core_clk_src.clkr.hw,
  2659. },
  2660. .num_parents = 1,
  2661. .flags = CLK_SET_RATE_PARENT,
  2662. .ops = &clk_branch2_ops,
  2663. },
  2664. },
  2665. };
  2666. static struct clk_branch gcc_ubi0_nc_axi_clk = {
  2667. .halt_reg = 0x68204,
  2668. .halt_check = BRANCH_HALT_DELAY,
  2669. .clkr = {
  2670. .enable_reg = 0x68204,
  2671. .enable_mask = BIT(0),
  2672. .hw.init = &(struct clk_init_data) {
  2673. .name = "gcc_ubi0_nc_axi_clk",
  2674. .parent_hws = (const struct clk_hw *[]) {
  2675. &system_noc_clk_src.hw,
  2676. },
  2677. .num_parents = 1,
  2678. .flags = CLK_SET_RATE_PARENT,
  2679. .ops = &clk_branch2_ops,
  2680. },
  2681. },
  2682. };
  2683. static struct clk_branch gcc_ubi0_utcm_clk = {
  2684. .halt_reg = 0x68208,
  2685. .halt_check = BRANCH_HALT_DELAY,
  2686. .clkr = {
  2687. .enable_reg = 0x68208,
  2688. .enable_mask = BIT(0),
  2689. .hw.init = &(struct clk_init_data) {
  2690. .name = "gcc_ubi0_utcm_clk",
  2691. .parent_hws = (const struct clk_hw *[]) {
  2692. &system_noc_clk_src.hw,
  2693. },
  2694. .num_parents = 1,
  2695. .flags = CLK_SET_RATE_PARENT,
  2696. .ops = &clk_branch2_ops,
  2697. },
  2698. },
  2699. };
  2700. static struct clk_branch gcc_uniphy_ahb_clk = {
  2701. .halt_reg = 0x56108,
  2702. .clkr = {
  2703. .enable_reg = 0x56108,
  2704. .enable_mask = BIT(0),
  2705. .hw.init = &(struct clk_init_data) {
  2706. .name = "gcc_uniphy_ahb_clk",
  2707. .parent_hws = (const struct clk_hw *[]) {
  2708. &pcnoc_clk_src.hw,
  2709. },
  2710. .num_parents = 1,
  2711. .flags = CLK_SET_RATE_PARENT,
  2712. .ops = &clk_branch2_ops,
  2713. },
  2714. },
  2715. };
  2716. static struct clk_branch gcc_uniphy_rx_clk = {
  2717. .halt_reg = 0x56110,
  2718. .clkr = {
  2719. .enable_reg = 0x56110,
  2720. .enable_mask = BIT(0),
  2721. .hw.init = &(struct clk_init_data) {
  2722. .name = "gcc_uniphy_rx_clk",
  2723. .parent_hws = (const struct clk_hw *[]) {
  2724. &gmac1_rx_div_clk_src.clkr.hw,
  2725. },
  2726. .num_parents = 1,
  2727. .ops = &clk_branch2_ops,
  2728. .flags = CLK_SET_RATE_PARENT,
  2729. },
  2730. },
  2731. };
  2732. static struct clk_branch gcc_uniphy_tx_clk = {
  2733. .halt_reg = 0x56114,
  2734. .clkr = {
  2735. .enable_reg = 0x56114,
  2736. .enable_mask = BIT(0),
  2737. .hw.init = &(struct clk_init_data) {
  2738. .name = "gcc_uniphy_tx_clk",
  2739. .parent_hws = (const struct clk_hw *[]) {
  2740. &gmac1_tx_div_clk_src.clkr.hw,
  2741. },
  2742. .num_parents = 1,
  2743. .ops = &clk_branch2_ops,
  2744. .flags = CLK_SET_RATE_PARENT,
  2745. },
  2746. },
  2747. };
  2748. static struct clk_branch gcc_uniphy_sys_clk = {
  2749. .halt_reg = 0x5610c,
  2750. .clkr = {
  2751. .enable_reg = 0x5610c,
  2752. .enable_mask = BIT(0),
  2753. .hw.init = &(struct clk_init_data) {
  2754. .name = "gcc_uniphy_sys_clk",
  2755. .parent_hws = (const struct clk_hw *[]) {
  2756. &gcc_xo_clk_src.clkr.hw,
  2757. },
  2758. .num_parents = 1,
  2759. .flags = CLK_SET_RATE_PARENT,
  2760. .ops = &clk_branch2_ops,
  2761. },
  2762. },
  2763. };
  2764. static struct clk_branch gcc_usb0_aux_clk = {
  2765. .halt_reg = 0x3e044,
  2766. .clkr = {
  2767. .enable_reg = 0x3e044,
  2768. .enable_mask = BIT(0),
  2769. .hw.init = &(struct clk_init_data) {
  2770. .name = "gcc_usb0_aux_clk",
  2771. .parent_hws = (const struct clk_hw *[]) {
  2772. &usb0_aux_clk_src.clkr.hw,
  2773. },
  2774. .num_parents = 1,
  2775. .flags = CLK_SET_RATE_PARENT,
  2776. .ops = &clk_branch2_ops,
  2777. },
  2778. },
  2779. };
  2780. static struct clk_branch gcc_usb0_eud_at_clk = {
  2781. .halt_reg = 0x3e04c,
  2782. .halt_check = BRANCH_HALT_VOTED,
  2783. .clkr = {
  2784. .enable_reg = 0x3e04c,
  2785. .enable_mask = BIT(0),
  2786. .hw.init = &(struct clk_init_data) {
  2787. .name = "gcc_usb0_eud_at_clk",
  2788. .parent_hws = (const struct clk_hw *[]) {
  2789. &eud_at_clk_src.hw,
  2790. },
  2791. .num_parents = 1,
  2792. .flags = CLK_SET_RATE_PARENT,
  2793. .ops = &clk_branch2_ops,
  2794. },
  2795. },
  2796. };
  2797. static struct clk_branch gcc_usb0_lfps_clk = {
  2798. .halt_reg = 0x3e050,
  2799. .clkr = {
  2800. .enable_reg = 0x3e050,
  2801. .enable_mask = BIT(0),
  2802. .hw.init = &(struct clk_init_data) {
  2803. .name = "gcc_usb0_lfps_clk",
  2804. .parent_hws = (const struct clk_hw *[]) {
  2805. &usb0_lfps_clk_src.clkr.hw,
  2806. },
  2807. .num_parents = 1,
  2808. .flags = CLK_SET_RATE_PARENT,
  2809. .ops = &clk_branch2_ops,
  2810. },
  2811. },
  2812. };
  2813. static struct clk_branch gcc_usb0_master_clk = {
  2814. .halt_reg = 0x3e000,
  2815. .clkr = {
  2816. .enable_reg = 0x3e000,
  2817. .enable_mask = BIT(0),
  2818. .hw.init = &(struct clk_init_data) {
  2819. .name = "gcc_usb0_master_clk",
  2820. .parent_hws = (const struct clk_hw *[]) {
  2821. &usb0_master_clk_src.clkr.hw,
  2822. },
  2823. .num_parents = 1,
  2824. .flags = CLK_SET_RATE_PARENT,
  2825. .ops = &clk_branch2_ops,
  2826. },
  2827. },
  2828. };
  2829. static struct clk_branch gcc_usb0_mock_utmi_clk = {
  2830. .halt_reg = 0x3e008,
  2831. .clkr = {
  2832. .enable_reg = 0x3e008,
  2833. .enable_mask = BIT(0),
  2834. .hw.init = &(struct clk_init_data) {
  2835. .name = "gcc_usb0_mock_utmi_clk",
  2836. .parent_hws = (const struct clk_hw *[]) {
  2837. &usb0_mock_utmi_clk_src.clkr.hw,
  2838. },
  2839. .num_parents = 1,
  2840. .flags = CLK_SET_RATE_PARENT,
  2841. .ops = &clk_branch2_ops,
  2842. },
  2843. },
  2844. };
  2845. static struct clk_branch gcc_usb0_phy_cfg_ahb_clk = {
  2846. .halt_reg = 0x3e080,
  2847. .clkr = {
  2848. .enable_reg = 0x3e080,
  2849. .enable_mask = BIT(0),
  2850. .hw.init = &(struct clk_init_data) {
  2851. .name = "gcc_usb0_phy_cfg_ahb_clk",
  2852. .parent_hws = (const struct clk_hw *[]) {
  2853. &pcnoc_clk_src.hw,
  2854. },
  2855. .num_parents = 1,
  2856. .flags = CLK_SET_RATE_PARENT,
  2857. .ops = &clk_branch2_ops,
  2858. },
  2859. },
  2860. };
  2861. static struct clk_branch gcc_usb0_sleep_clk = {
  2862. .halt_reg = 0x3e004,
  2863. .clkr = {
  2864. .enable_reg = 0x3e004,
  2865. .enable_mask = BIT(0),
  2866. .hw.init = &(struct clk_init_data) {
  2867. .name = "gcc_usb0_sleep_clk",
  2868. .parent_hws = (const struct clk_hw *[]) {
  2869. &gcc_sleep_clk_src.clkr.hw,
  2870. },
  2871. .num_parents = 1,
  2872. .flags = CLK_SET_RATE_PARENT,
  2873. .ops = &clk_branch2_ops,
  2874. },
  2875. },
  2876. };
  2877. static struct clk_branch gcc_usb0_pipe_clk = {
  2878. .halt_reg = 0x3e040,
  2879. .halt_check = BRANCH_HALT_DELAY,
  2880. .clkr = {
  2881. .enable_reg = 0x3e040,
  2882. .enable_mask = BIT(0),
  2883. .hw.init = &(struct clk_init_data) {
  2884. .name = "gcc_usb0_pipe_clk",
  2885. .parent_hws = (const struct clk_hw *[]) {
  2886. &usb0_pipe_clk_src.clkr.hw,
  2887. },
  2888. .num_parents = 1,
  2889. .flags = CLK_SET_RATE_PARENT,
  2890. .ops = &clk_branch2_ops,
  2891. },
  2892. },
  2893. };
  2894. static struct clk_branch gcc_wcss_acmt_clk = {
  2895. .halt_reg = 0x59064,
  2896. .clkr = {
  2897. .enable_reg = 0x59064,
  2898. .enable_mask = BIT(0),
  2899. .hw.init = &(struct clk_init_data) {
  2900. .name = "gcc_wcss_acmt_clk",
  2901. .parent_hws = (const struct clk_hw *[]) {
  2902. &wcss_ahb_clk_src.clkr.hw,
  2903. },
  2904. .num_parents = 1,
  2905. .flags = CLK_SET_RATE_PARENT,
  2906. .ops = &clk_branch2_ops,
  2907. },
  2908. },
  2909. };
  2910. static struct clk_branch gcc_wcss_ahb_s_clk = {
  2911. .halt_reg = 0x59034,
  2912. .clkr = {
  2913. .enable_reg = 0x59034,
  2914. .enable_mask = BIT(0),
  2915. .hw.init = &(struct clk_init_data) {
  2916. .name = "gcc_wcss_ahb_s_clk",
  2917. .parent_hws = (const struct clk_hw *[]) {
  2918. &wcss_ahb_clk_src.clkr.hw,
  2919. },
  2920. .num_parents = 1,
  2921. .flags = CLK_SET_RATE_PARENT,
  2922. .ops = &clk_branch2_ops,
  2923. },
  2924. },
  2925. };
  2926. static struct clk_branch gcc_wcss_axi_m_clk = {
  2927. .halt_reg = 0x5903c,
  2928. .clkr = {
  2929. .enable_reg = 0x5903c,
  2930. .enable_mask = BIT(0),
  2931. .hw.init = &(struct clk_init_data) {
  2932. .name = "gcc_wcss_axi_m_clk",
  2933. .parent_hws = (const struct clk_hw *[]) {
  2934. &system_noc_clk_src.hw,
  2935. },
  2936. .num_parents = 1,
  2937. .flags = CLK_SET_RATE_PARENT,
  2938. .ops = &clk_branch2_ops,
  2939. },
  2940. },
  2941. };
  2942. static struct clk_branch gcc_wcss_axi_s_clk = {
  2943. .halt_reg = 0x59068,
  2944. .clkr = {
  2945. .enable_reg = 0x59068,
  2946. .enable_mask = BIT(0),
  2947. .hw.init = &(struct clk_init_data) {
  2948. .name = "gcc_wi_s_clk",
  2949. .parent_hws = (const struct clk_hw *[]) {
  2950. &system_noc_clk_src.hw,
  2951. },
  2952. .num_parents = 1,
  2953. .flags = CLK_SET_RATE_PARENT,
  2954. .ops = &clk_branch2_ops,
  2955. },
  2956. },
  2957. };
  2958. static struct clk_branch gcc_wcss_dbg_ifc_apb_bdg_clk = {
  2959. .halt_reg = 0x59050,
  2960. .clkr = {
  2961. .enable_reg = 0x59050,
  2962. .enable_mask = BIT(0),
  2963. .hw.init = &(struct clk_init_data) {
  2964. .name = "gcc_wcss_dbg_ifc_apb_bdg_clk",
  2965. .parent_hws = (const struct clk_hw *[]) {
  2966. &qdss_dap_sync_clk_src.hw,
  2967. },
  2968. .num_parents = 1,
  2969. .flags = CLK_SET_RATE_PARENT,
  2970. .ops = &clk_branch2_ops,
  2971. },
  2972. },
  2973. };
  2974. static struct clk_branch gcc_wcss_dbg_ifc_apb_clk = {
  2975. .halt_reg = 0x59040,
  2976. .clkr = {
  2977. .enable_reg = 0x59040,
  2978. .enable_mask = BIT(0),
  2979. .hw.init = &(struct clk_init_data) {
  2980. .name = "gcc_wcss_dbg_ifc_apb_clk",
  2981. .parent_hws = (const struct clk_hw *[]) {
  2982. &qdss_dap_sync_clk_src.hw,
  2983. },
  2984. .num_parents = 1,
  2985. .flags = CLK_SET_RATE_PARENT,
  2986. .ops = &clk_branch2_ops,
  2987. },
  2988. },
  2989. };
  2990. static struct clk_branch gcc_wcss_dbg_ifc_atb_bdg_clk = {
  2991. .halt_reg = 0x59054,
  2992. .clkr = {
  2993. .enable_reg = 0x59054,
  2994. .enable_mask = BIT(0),
  2995. .hw.init = &(struct clk_init_data) {
  2996. .name = "gcc_wcss_dbg_ifc_atb_bdg_clk",
  2997. .parent_hws = (const struct clk_hw *[]) {
  2998. &qdss_at_clk_src.clkr.hw,
  2999. },
  3000. .num_parents = 1,
  3001. .flags = CLK_SET_RATE_PARENT,
  3002. .ops = &clk_branch2_ops,
  3003. },
  3004. },
  3005. };
  3006. static struct clk_branch gcc_wcss_dbg_ifc_atb_clk = {
  3007. .halt_reg = 0x59044,
  3008. .clkr = {
  3009. .enable_reg = 0x59044,
  3010. .enable_mask = BIT(0),
  3011. .hw.init = &(struct clk_init_data) {
  3012. .name = "gcc_wcss_dbg_ifc_atb_clk",
  3013. .parent_hws = (const struct clk_hw *[]) {
  3014. &qdss_at_clk_src.clkr.hw,
  3015. },
  3016. .num_parents = 1,
  3017. .flags = CLK_SET_RATE_PARENT,
  3018. .ops = &clk_branch2_ops,
  3019. },
  3020. },
  3021. };
  3022. static struct clk_branch gcc_wcss_dbg_ifc_dapbus_bdg_clk = {
  3023. .halt_reg = 0x59060,
  3024. .clkr = {
  3025. .enable_reg = 0x59060,
  3026. .enable_mask = BIT(0),
  3027. .hw.init = &(struct clk_init_data) {
  3028. .name = "gcc_wcss_dbg_ifc_dapbus_bdg_clk",
  3029. .parent_hws = (const struct clk_hw *[]) {
  3030. &qdss_dap_sync_clk_src.hw,
  3031. },
  3032. .num_parents = 1,
  3033. .flags = CLK_SET_RATE_PARENT,
  3034. .ops = &clk_branch2_ops,
  3035. },
  3036. },
  3037. };
  3038. static struct clk_branch gcc_wcss_dbg_ifc_dapbus_clk = {
  3039. .halt_reg = 0x5905c,
  3040. .clkr = {
  3041. .enable_reg = 0x5905c,
  3042. .enable_mask = BIT(0),
  3043. .hw.init = &(struct clk_init_data) {
  3044. .name = "gcc_wcss_dbg_ifc_dapbus_clk",
  3045. .parent_hws = (const struct clk_hw *[]) {
  3046. &qdss_dap_sync_clk_src.hw,
  3047. },
  3048. .num_parents = 1,
  3049. .flags = CLK_SET_RATE_PARENT,
  3050. .ops = &clk_branch2_ops,
  3051. },
  3052. },
  3053. };
  3054. static struct clk_branch gcc_wcss_dbg_ifc_nts_bdg_clk = {
  3055. .halt_reg = 0x59058,
  3056. .clkr = {
  3057. .enable_reg = 0x59058,
  3058. .enable_mask = BIT(0),
  3059. .hw.init = &(struct clk_init_data) {
  3060. .name = "gcc_wcss_dbg_ifc_nts_bdg_clk",
  3061. .parent_hws = (const struct clk_hw *[]) {
  3062. &qdss_tsctr_div2_clk_src.hw,
  3063. },
  3064. .num_parents = 1,
  3065. .flags = CLK_SET_RATE_PARENT,
  3066. .ops = &clk_branch2_ops,
  3067. },
  3068. },
  3069. };
  3070. static struct clk_branch gcc_wcss_dbg_ifc_nts_clk = {
  3071. .halt_reg = 0x59048,
  3072. .clkr = {
  3073. .enable_reg = 0x59048,
  3074. .enable_mask = BIT(0),
  3075. .hw.init = &(struct clk_init_data) {
  3076. .name = "gcc_wcss_dbg_ifc_nts_clk",
  3077. .parent_hws = (const struct clk_hw *[]) {
  3078. &qdss_tsctr_div2_clk_src.hw,
  3079. },
  3080. .num_parents = 1,
  3081. .flags = CLK_SET_RATE_PARENT,
  3082. .ops = &clk_branch2_ops,
  3083. },
  3084. },
  3085. };
  3086. static struct clk_branch gcc_wcss_ecahb_clk = {
  3087. .halt_reg = 0x59038,
  3088. .clkr = {
  3089. .enable_reg = 0x59038,
  3090. .enable_mask = BIT(0),
  3091. .hw.init = &(struct clk_init_data) {
  3092. .name = "gcc_wcss_ecahb_clk",
  3093. .parent_hws = (const struct clk_hw *[]) {
  3094. &wcss_ahb_clk_src.clkr.hw,
  3095. },
  3096. .num_parents = 1,
  3097. .flags = CLK_SET_RATE_PARENT,
  3098. .ops = &clk_branch2_ops,
  3099. },
  3100. },
  3101. };
  3102. static struct clk_hw *gcc_ipq5018_hws[] = {
  3103. &gpll0_out_main_div2.hw,
  3104. &pcnoc_clk_src.hw,
  3105. &system_noc_clk_src.hw,
  3106. &qdss_dap_sync_clk_src.hw,
  3107. &qdss_tsctr_div2_clk_src.hw,
  3108. &eud_at_clk_src.hw,
  3109. };
  3110. static const struct alpha_pll_config ubi32_pll_config = {
  3111. .l = 0x29,
  3112. .alpha = 0xaaaaaaaa,
  3113. .alpha_hi = 0xaa,
  3114. .config_ctl_val = 0x4001075b,
  3115. .main_output_mask = BIT(0),
  3116. .aux_output_mask = BIT(1),
  3117. .alpha_en_mask = BIT(24),
  3118. .vco_val = 0x1,
  3119. .vco_mask = GENMASK(21, 20),
  3120. .test_ctl_val = 0x0,
  3121. .test_ctl_hi_val = 0x0,
  3122. };
  3123. static struct clk_regmap *gcc_ipq5018_clks[] = {
  3124. [GPLL0_MAIN] = &gpll0_main.clkr,
  3125. [GPLL0] = &gpll0.clkr,
  3126. [GPLL2_MAIN] = &gpll2_main.clkr,
  3127. [GPLL2] = &gpll2.clkr,
  3128. [GPLL4_MAIN] = &gpll4_main.clkr,
  3129. [GPLL4] = &gpll4.clkr,
  3130. [UBI32_PLL_MAIN] = &ubi32_pll_main.clkr,
  3131. [UBI32_PLL] = &ubi32_pll.clkr,
  3132. [ADSS_PWM_CLK_SRC] = &adss_pwm_clk_src.clkr,
  3133. [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
  3134. [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
  3135. [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
  3136. [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
  3137. [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
  3138. [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
  3139. [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
  3140. [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
  3141. [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
  3142. [GCC_ADSS_PWM_CLK] = &gcc_adss_pwm_clk.clkr,
  3143. [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
  3144. [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
  3145. [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
  3146. [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
  3147. [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
  3148. [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
  3149. [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
  3150. [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
  3151. [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
  3152. [GCC_BTSS_LPO_CLK] = &gcc_btss_lpo_clk.clkr,
  3153. [GCC_CMN_BLK_AHB_CLK] = &gcc_cmn_blk_ahb_clk.clkr,
  3154. [GCC_CMN_BLK_SYS_CLK] = &gcc_cmn_blk_sys_clk.clkr,
  3155. [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
  3156. [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
  3157. [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
  3158. [GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
  3159. [GCC_GEPHY_RX_CLK] = &gcc_gephy_rx_clk.clkr,
  3160. [GCC_GEPHY_TX_CLK] = &gcc_gephy_tx_clk.clkr,
  3161. [GCC_GMAC0_CFG_CLK] = &gcc_gmac0_cfg_clk.clkr,
  3162. [GCC_GMAC0_PTP_CLK] = &gcc_gmac0_ptp_clk.clkr,
  3163. [GCC_GMAC0_RX_CLK] = &gcc_gmac0_rx_clk.clkr,
  3164. [GCC_GMAC0_SYS_CLK] = &gcc_gmac0_sys_clk.clkr,
  3165. [GCC_GMAC0_TX_CLK] = &gcc_gmac0_tx_clk.clkr,
  3166. [GCC_GMAC1_CFG_CLK] = &gcc_gmac1_cfg_clk.clkr,
  3167. [GCC_GMAC1_PTP_CLK] = &gcc_gmac1_ptp_clk.clkr,
  3168. [GCC_GMAC1_RX_CLK] = &gcc_gmac1_rx_clk.clkr,
  3169. [GCC_GMAC1_SYS_CLK] = &gcc_gmac1_sys_clk.clkr,
  3170. [GCC_GMAC1_TX_CLK] = &gcc_gmac1_tx_clk.clkr,
  3171. [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
  3172. [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
  3173. [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
  3174. [GCC_LPASS_CORE_AXIM_CLK] = &gcc_lpass_core_axim_clk.clkr,
  3175. [GCC_LPASS_SWAY_CLK] = &gcc_lpass_sway_clk.clkr,
  3176. [GCC_MDIO0_AHB_CLK] = &gcc_mdio0_ahb_clk.clkr,
  3177. [GCC_MDIO1_AHB_CLK] = &gcc_mdio1_ahb_clk.clkr,
  3178. [GCC_PCIE0_AHB_CLK] = &gcc_pcie0_ahb_clk.clkr,
  3179. [GCC_PCIE0_AUX_CLK] = &gcc_pcie0_aux_clk.clkr,
  3180. [GCC_PCIE0_AXI_M_CLK] = &gcc_pcie0_axi_m_clk.clkr,
  3181. [GCC_PCIE0_AXI_S_BRIDGE_CLK] = &gcc_pcie0_axi_s_bridge_clk.clkr,
  3182. [GCC_PCIE0_AXI_S_CLK] = &gcc_pcie0_axi_s_clk.clkr,
  3183. [GCC_PCIE1_AHB_CLK] = &gcc_pcie1_ahb_clk.clkr,
  3184. [GCC_PCIE1_AUX_CLK] = &gcc_pcie1_aux_clk.clkr,
  3185. [GCC_PCIE1_AXI_M_CLK] = &gcc_pcie1_axi_m_clk.clkr,
  3186. [GCC_PCIE1_AXI_S_BRIDGE_CLK] = &gcc_pcie1_axi_s_bridge_clk.clkr,
  3187. [GCC_PCIE1_AXI_S_CLK] = &gcc_pcie1_axi_s_clk.clkr,
  3188. [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
  3189. [GCC_Q6_AXIM_CLK] = &gcc_q6_axim_clk.clkr,
  3190. [GCC_Q6_AXIM2_CLK] = &gcc_q6_axim2_clk.clkr,
  3191. [GCC_Q6_AXIS_CLK] = &gcc_q6_axis_clk.clkr,
  3192. [GCC_Q6_AHB_CLK] = &gcc_q6_ahb_clk.clkr,
  3193. [GCC_Q6_AHB_S_CLK] = &gcc_q6_ahb_s_clk.clkr,
  3194. [GCC_Q6_TSCTR_1TO2_CLK] = &gcc_q6_tsctr_1to2_clk.clkr,
  3195. [GCC_Q6SS_ATBM_CLK] = &gcc_q6ss_atbm_clk.clkr,
  3196. [GCC_Q6SS_PCLKDBG_CLK] = &gcc_q6ss_pclkdbg_clk.clkr,
  3197. [GCC_Q6SS_TRIG_CLK] = &gcc_q6ss_trig_clk.clkr,
  3198. [GCC_QDSS_AT_CLK] = &gcc_qdss_at_clk.clkr,
  3199. [GCC_QDSS_CFG_AHB_CLK] = &gcc_qdss_cfg_ahb_clk.clkr,
  3200. [GCC_QDSS_DAP_AHB_CLK] = &gcc_qdss_dap_ahb_clk.clkr,
  3201. [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
  3202. [GCC_QDSS_ETR_USB_CLK] = &gcc_qdss_etr_usb_clk.clkr,
  3203. [GCC_QDSS_EUD_AT_CLK] = &gcc_qdss_eud_at_clk.clkr,
  3204. [GCC_QDSS_STM_CLK] = &gcc_qdss_stm_clk.clkr,
  3205. [GCC_QDSS_TRACECLKIN_CLK] = &gcc_qdss_traceclkin_clk.clkr,
  3206. [GCC_QDSS_TSCTR_DIV8_CLK] = &gcc_qdss_tsctr_div8_clk.clkr,
  3207. [GCC_QPIC_AHB_CLK] = &gcc_qpic_ahb_clk.clkr,
  3208. [GCC_QPIC_CLK] = &gcc_qpic_clk.clkr,
  3209. [GCC_QPIC_IO_MACRO_CLK] = &gcc_qpic_io_macro_clk.clkr,
  3210. [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
  3211. [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
  3212. [GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr,
  3213. [GCC_SNOC_GMAC0_AHB_CLK] = &gcc_snoc_gmac0_ahb_clk.clkr,
  3214. [GCC_SNOC_GMAC0_AXI_CLK] = &gcc_snoc_gmac0_axi_clk.clkr,
  3215. [GCC_SNOC_GMAC1_AHB_CLK] = &gcc_snoc_gmac1_ahb_clk.clkr,
  3216. [GCC_SNOC_GMAC1_AXI_CLK] = &gcc_snoc_gmac1_axi_clk.clkr,
  3217. [GCC_SNOC_LPASS_AXIM_CLK] = &gcc_snoc_lpass_axim_clk.clkr,
  3218. [GCC_SNOC_LPASS_SWAY_CLK] = &gcc_snoc_lpass_sway_clk.clkr,
  3219. [GCC_SNOC_UBI0_AXI_CLK] = &gcc_snoc_ubi0_axi_clk.clkr,
  3220. [GCC_SYS_NOC_PCIE0_AXI_CLK] = &gcc_sys_noc_pcie0_axi_clk.clkr,
  3221. [GCC_SYS_NOC_PCIE1_AXI_CLK] = &gcc_sys_noc_pcie1_axi_clk.clkr,
  3222. [GCC_SYS_NOC_QDSS_STM_AXI_CLK] = &gcc_sys_noc_qdss_stm_axi_clk.clkr,
  3223. [GCC_SYS_NOC_USB0_AXI_CLK] = &gcc_sys_noc_usb0_axi_clk.clkr,
  3224. [GCC_SYS_NOC_WCSS_AHB_CLK] = &gcc_sys_noc_wcss_ahb_clk.clkr,
  3225. [GCC_UBI0_AXI_CLK] = &gcc_ubi0_axi_clk.clkr,
  3226. [GCC_UBI0_CFG_CLK] = &gcc_ubi0_cfg_clk.clkr,
  3227. [GCC_UBI0_CORE_CLK] = &gcc_ubi0_core_clk.clkr,
  3228. [GCC_UBI0_DBG_CLK] = &gcc_ubi0_dbg_clk.clkr,
  3229. [GCC_UBI0_NC_AXI_CLK] = &gcc_ubi0_nc_axi_clk.clkr,
  3230. [GCC_UBI0_UTCM_CLK] = &gcc_ubi0_utcm_clk.clkr,
  3231. [GCC_UNIPHY_AHB_CLK] = &gcc_uniphy_ahb_clk.clkr,
  3232. [GCC_UNIPHY_RX_CLK] = &gcc_uniphy_rx_clk.clkr,
  3233. [GCC_UNIPHY_SYS_CLK] = &gcc_uniphy_sys_clk.clkr,
  3234. [GCC_UNIPHY_TX_CLK] = &gcc_uniphy_tx_clk.clkr,
  3235. [GCC_USB0_AUX_CLK] = &gcc_usb0_aux_clk.clkr,
  3236. [GCC_USB0_EUD_AT_CLK] = &gcc_usb0_eud_at_clk.clkr,
  3237. [GCC_USB0_LFPS_CLK] = &gcc_usb0_lfps_clk.clkr,
  3238. [GCC_USB0_MASTER_CLK] = &gcc_usb0_master_clk.clkr,
  3239. [GCC_USB0_MOCK_UTMI_CLK] = &gcc_usb0_mock_utmi_clk.clkr,
  3240. [GCC_USB0_PHY_CFG_AHB_CLK] = &gcc_usb0_phy_cfg_ahb_clk.clkr,
  3241. [GCC_USB0_SLEEP_CLK] = &gcc_usb0_sleep_clk.clkr,
  3242. [GCC_WCSS_ACMT_CLK] = &gcc_wcss_acmt_clk.clkr,
  3243. [GCC_WCSS_AHB_S_CLK] = &gcc_wcss_ahb_s_clk.clkr,
  3244. [GCC_WCSS_AXI_M_CLK] = &gcc_wcss_axi_m_clk.clkr,
  3245. [GCC_WCSS_AXI_S_CLK] = &gcc_wcss_axi_s_clk.clkr,
  3246. [GCC_WCSS_DBG_IFC_APB_BDG_CLK] = &gcc_wcss_dbg_ifc_apb_bdg_clk.clkr,
  3247. [GCC_WCSS_DBG_IFC_APB_CLK] = &gcc_wcss_dbg_ifc_apb_clk.clkr,
  3248. [GCC_WCSS_DBG_IFC_ATB_BDG_CLK] = &gcc_wcss_dbg_ifc_atb_bdg_clk.clkr,
  3249. [GCC_WCSS_DBG_IFC_ATB_CLK] = &gcc_wcss_dbg_ifc_atb_clk.clkr,
  3250. [GCC_WCSS_DBG_IFC_DAPBUS_BDG_CLK] = &gcc_wcss_dbg_ifc_dapbus_bdg_clk.clkr,
  3251. [GCC_WCSS_DBG_IFC_DAPBUS_CLK] = &gcc_wcss_dbg_ifc_dapbus_clk.clkr,
  3252. [GCC_WCSS_DBG_IFC_NTS_BDG_CLK] = &gcc_wcss_dbg_ifc_nts_bdg_clk.clkr,
  3253. [GCC_WCSS_DBG_IFC_NTS_CLK] = &gcc_wcss_dbg_ifc_nts_clk.clkr,
  3254. [GCC_WCSS_ECAHB_CLK] = &gcc_wcss_ecahb_clk.clkr,
  3255. [GCC_XO_CLK] = &gcc_xo_clk.clkr,
  3256. [GCC_XO_CLK_SRC] = &gcc_xo_clk_src.clkr,
  3257. [GMAC0_RX_CLK_SRC] = &gmac0_rx_clk_src.clkr,
  3258. [GMAC0_RX_DIV_CLK_SRC] = &gmac0_rx_div_clk_src.clkr,
  3259. [GMAC0_TX_CLK_SRC] = &gmac0_tx_clk_src.clkr,
  3260. [GMAC0_TX_DIV_CLK_SRC] = &gmac0_tx_div_clk_src.clkr,
  3261. [GMAC1_RX_CLK_SRC] = &gmac1_rx_clk_src.clkr,
  3262. [GMAC1_RX_DIV_CLK_SRC] = &gmac1_rx_div_clk_src.clkr,
  3263. [GMAC1_TX_CLK_SRC] = &gmac1_tx_clk_src.clkr,
  3264. [GMAC1_TX_DIV_CLK_SRC] = &gmac1_tx_div_clk_src.clkr,
  3265. [GMAC_CLK_SRC] = &gmac_clk_src.clkr,
  3266. [GP1_CLK_SRC] = &gp1_clk_src.clkr,
  3267. [GP2_CLK_SRC] = &gp2_clk_src.clkr,
  3268. [GP3_CLK_SRC] = &gp3_clk_src.clkr,
  3269. [LPASS_AXIM_CLK_SRC] = &lpass_axim_clk_src.clkr,
  3270. [LPASS_SWAY_CLK_SRC] = &lpass_sway_clk_src.clkr,
  3271. [PCIE0_AUX_CLK_SRC] = &pcie0_aux_clk_src.clkr,
  3272. [PCIE0_AXI_CLK_SRC] = &pcie0_axi_clk_src.clkr,
  3273. [PCIE1_AUX_CLK_SRC] = &pcie1_aux_clk_src.clkr,
  3274. [PCIE1_AXI_CLK_SRC] = &pcie1_axi_clk_src.clkr,
  3275. [PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
  3276. [Q6_AXI_CLK_SRC] = &q6_axi_clk_src.clkr,
  3277. [QDSS_AT_CLK_SRC] = &qdss_at_clk_src.clkr,
  3278. [QDSS_STM_CLK_SRC] = &qdss_stm_clk_src.clkr,
  3279. [QDSS_TSCTR_CLK_SRC] = &qdss_tsctr_clk_src.clkr,
  3280. [QDSS_TRACECLKIN_CLK_SRC] = &qdss_traceclkin_clk_src.clkr,
  3281. [QPIC_IO_MACRO_CLK_SRC] = &qpic_io_macro_clk_src.clkr,
  3282. [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
  3283. [SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
  3284. [UBI0_AXI_CLK_SRC] = &ubi0_axi_clk_src.clkr,
  3285. [UBI0_CORE_CLK_SRC] = &ubi0_core_clk_src.clkr,
  3286. [USB0_AUX_CLK_SRC] = &usb0_aux_clk_src.clkr,
  3287. [USB0_LFPS_CLK_SRC] = &usb0_lfps_clk_src.clkr,
  3288. [USB0_MASTER_CLK_SRC] = &usb0_master_clk_src.clkr,
  3289. [USB0_MOCK_UTMI_CLK_SRC] = &usb0_mock_utmi_clk_src.clkr,
  3290. [WCSS_AHB_CLK_SRC] = &wcss_ahb_clk_src.clkr,
  3291. [PCIE0_PIPE_CLK_SRC] = &pcie0_pipe_clk_src.clkr,
  3292. [PCIE1_PIPE_CLK_SRC] = &pcie1_pipe_clk_src.clkr,
  3293. [GCC_PCIE0_PIPE_CLK] = &gcc_pcie0_pipe_clk.clkr,
  3294. [GCC_PCIE1_PIPE_CLK] = &gcc_pcie1_pipe_clk.clkr,
  3295. [USB0_PIPE_CLK_SRC] = &usb0_pipe_clk_src.clkr,
  3296. [GCC_USB0_PIPE_CLK] = &gcc_usb0_pipe_clk.clkr,
  3297. };
  3298. static const struct qcom_reset_map gcc_ipq5018_resets[] = {
  3299. [GCC_APC0_VOLTAGE_DROOP_DETECTOR_BCR] = { 0x78000, 0 },
  3300. [GCC_BLSP1_BCR] = { 0x01000, 0 },
  3301. [GCC_BLSP1_QUP1_BCR] = { 0x02000, 0 },
  3302. [GCC_BLSP1_QUP2_BCR] = { 0x03008, 0 },
  3303. [GCC_BLSP1_QUP3_BCR] = { 0x04008, 0 },
  3304. [GCC_BLSP1_UART1_BCR] = { 0x02038, 0 },
  3305. [GCC_BLSP1_UART2_BCR] = { 0x03028, 0 },
  3306. [GCC_BOOT_ROM_BCR] = { 0x13008, 0 },
  3307. [GCC_BTSS_BCR] = { 0x1c000, 0 },
  3308. [GCC_CMN_BLK_BCR] = { 0x56300, 0 },
  3309. [GCC_CMN_LDO_BCR] = { 0x33000, 0 },
  3310. [GCC_CE_BCR] = { 0x33014, 0 },
  3311. [GCC_CRYPTO_BCR] = { 0x16000, 0 },
  3312. [GCC_DCC_BCR] = { 0x77000, 0 },
  3313. [GCC_DCD_BCR] = { 0x2a000, 0 },
  3314. [GCC_DDRSS_BCR] = { 0x1e000, 0 },
  3315. [GCC_EDPD_BCR] = { 0x3a000, 0 },
  3316. [GCC_GEPHY_BCR] = { 0x56000, 0 },
  3317. [GCC_GEPHY_MDC_SW_ARES] = { 0x56004, 0 },
  3318. [GCC_GEPHY_DSP_HW_ARES] = { 0x56004, 1 },
  3319. [GCC_GEPHY_RX_ARES] = { 0x56004, 2 },
  3320. [GCC_GEPHY_TX_ARES] = { 0x56004, 3 },
  3321. [GCC_GMAC0_BCR] = { 0x19000, 0 },
  3322. [GCC_GMAC0_CFG_ARES] = { 0x68428, 0 },
  3323. [GCC_GMAC0_SYS_ARES] = { 0x68428, 1 },
  3324. [GCC_GMAC1_BCR] = { 0x19100, 0 },
  3325. [GCC_GMAC1_CFG_ARES] = { 0x68438, 0 },
  3326. [GCC_GMAC1_SYS_ARES] = { 0x68438, 1 },
  3327. [GCC_IMEM_BCR] = { 0x0e000, 0 },
  3328. [GCC_LPASS_BCR] = { 0x2e000, 0 },
  3329. [GCC_MDIO0_BCR] = { 0x58000, 0 },
  3330. [GCC_MDIO1_BCR] = { 0x58010, 0 },
  3331. [GCC_MPM_BCR] = { 0x2c000, 0 },
  3332. [GCC_PCIE0_BCR] = { 0x75004, 0 },
  3333. [GCC_PCIE0_LINK_DOWN_BCR] = { 0x750a8, 0 },
  3334. [GCC_PCIE0_PHY_BCR] = { 0x75038, 0 },
  3335. [GCC_PCIE0PHY_PHY_BCR] = { 0x7503c, 0 },
  3336. [GCC_PCIE0_PIPE_ARES] = { 0x75040, 0 },
  3337. [GCC_PCIE0_SLEEP_ARES] = { 0x75040, 1 },
  3338. [GCC_PCIE0_CORE_STICKY_ARES] = { 0x75040, 2 },
  3339. [GCC_PCIE0_AXI_MASTER_ARES] = { 0x75040, 3 },
  3340. [GCC_PCIE0_AXI_SLAVE_ARES] = { 0x75040, 4 },
  3341. [GCC_PCIE0_AHB_ARES] = { 0x75040, 5 },
  3342. [GCC_PCIE0_AXI_MASTER_STICKY_ARES] = { 0x75040, 6 },
  3343. [GCC_PCIE0_AXI_SLAVE_STICKY_ARES] = { 0x75040, 7 },
  3344. [GCC_PCIE1_BCR] = { 0x76004, 0 },
  3345. [GCC_PCIE1_LINK_DOWN_BCR] = { 0x76044, 0 },
  3346. [GCC_PCIE1_PHY_BCR] = { 0x76038, 0 },
  3347. [GCC_PCIE1PHY_PHY_BCR] = { 0x7603c, 0 },
  3348. [GCC_PCIE1_PIPE_ARES] = { 0x76040, 0 },
  3349. [GCC_PCIE1_SLEEP_ARES] = { 0x76040, 1 },
  3350. [GCC_PCIE1_CORE_STICKY_ARES] = { 0x76040, 2 },
  3351. [GCC_PCIE1_AXI_MASTER_ARES] = { 0x76040, 3 },
  3352. [GCC_PCIE1_AXI_SLAVE_ARES] = { 0x76040, 4 },
  3353. [GCC_PCIE1_AHB_ARES] = { 0x76040, 5 },
  3354. [GCC_PCIE1_AXI_MASTER_STICKY_ARES] = { 0x76040, 6 },
  3355. [GCC_PCIE1_AXI_SLAVE_STICKY_ARES] = { 0x76040, 7 },
  3356. [GCC_PCNOC_BCR] = { 0x27018, 0 },
  3357. [GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000, 0 },
  3358. [GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008, 0 },
  3359. [GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010, 0 },
  3360. [GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018, 0 },
  3361. [GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020, 0 },
  3362. [GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028, 0 },
  3363. [GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030, 0 },
  3364. [GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038, 0 },
  3365. [GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040, 0 },
  3366. [GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048, 0 },
  3367. [GCC_PCNOC_BUS_TIMEOUT10_BCR] = { 0x48050, 0 },
  3368. [GCC_PCNOC_BUS_TIMEOUT11_BCR] = { 0x48058, 0 },
  3369. [GCC_PRNG_BCR] = { 0x13000, 0 },
  3370. [GCC_Q6SS_DBG_ARES] = { 0x59110, 0 },
  3371. [GCC_Q6_AHB_S_ARES] = { 0x59110, 1 },
  3372. [GCC_Q6_AHB_ARES] = { 0x59110, 2 },
  3373. [GCC_Q6_AXIM2_ARES] = { 0x59110, 3 },
  3374. [GCC_Q6_AXIM_ARES] = { 0x59110, 4 },
  3375. [GCC_Q6_AXIS_ARES] = { 0x59158, 0 },
  3376. [GCC_QDSS_BCR] = { 0x29000, 0 },
  3377. [GCC_QPIC_BCR] = { 0x57018, 0 },
  3378. [GCC_QUSB2_0_PHY_BCR] = { 0x41030, 0 },
  3379. [GCC_SDCC1_BCR] = { 0x42000, 0 },
  3380. [GCC_SEC_CTRL_BCR] = { 0x1a000, 0 },
  3381. [GCC_SPDM_BCR] = { 0x2f000, 0 },
  3382. [GCC_SYSTEM_NOC_BCR] = { 0x26000, 0 },
  3383. [GCC_TCSR_BCR] = { 0x28000, 0 },
  3384. [GCC_TLMM_BCR] = { 0x34000, 0 },
  3385. [GCC_UBI0_AXI_ARES] = { 0x68010, 0 },
  3386. [GCC_UBI0_AHB_ARES] = { 0x68010, 1 },
  3387. [GCC_UBI0_NC_AXI_ARES] = { 0x68010, 2 },
  3388. [GCC_UBI0_DBG_ARES] = { 0x68010, 3 },
  3389. [GCC_UBI0_UTCM_ARES] = { 0x68010, 6 },
  3390. [GCC_UBI0_CORE_ARES] = { 0x68010, 7 },
  3391. [GCC_UBI32_BCR] = { 0x19064, 0 },
  3392. [GCC_UNIPHY_BCR] = { 0x56100, 0 },
  3393. [GCC_UNIPHY_AHB_ARES] = { 0x56104, 0 },
  3394. [GCC_UNIPHY_SYS_ARES] = { 0x56104, 1 },
  3395. [GCC_UNIPHY_RX_ARES] = { 0x56104, 4 },
  3396. [GCC_UNIPHY_TX_ARES] = { 0x56104, 5 },
  3397. [GCC_UNIPHY_SOFT_RESET] = {0x56104, 0 },
  3398. [GCC_USB0_BCR] = { 0x3e070, 0 },
  3399. [GCC_USB0_PHY_BCR] = { 0x3e034, 0 },
  3400. [GCC_WCSS_BCR] = { 0x18000, 0 },
  3401. [GCC_WCSS_DBG_ARES] = { 0x59008, 0 },
  3402. [GCC_WCSS_ECAHB_ARES] = { 0x59008, 1 },
  3403. [GCC_WCSS_ACMT_ARES] = { 0x59008, 2 },
  3404. [GCC_WCSS_DBG_BDG_ARES] = { 0x59008, 3 },
  3405. [GCC_WCSS_AHB_S_ARES] = { 0x59008, 4 },
  3406. [GCC_WCSS_AXI_M_ARES] = { 0x59008, 5 },
  3407. [GCC_WCSS_AXI_S_ARES] = { 0x59008, 6 },
  3408. [GCC_WCSS_Q6_BCR] = { 0x18004, 0 },
  3409. [GCC_WCSSAON_RESET] = { 0x59010, 0},
  3410. [GCC_GEPHY_MISC_ARES] = { 0x56004, .bitmask = GENMASK(3, 0) },
  3411. };
  3412. static const struct of_device_id gcc_ipq5018_match_table[] = {
  3413. { .compatible = "qcom,gcc-ipq5018" },
  3414. { }
  3415. };
  3416. MODULE_DEVICE_TABLE(of, gcc_ipq5018_match_table);
  3417. static const struct regmap_config gcc_ipq5018_regmap_config = {
  3418. .reg_bits = 32,
  3419. .reg_stride = 4,
  3420. .val_bits = 32,
  3421. .max_register = 0x7fffc,
  3422. .fast_io = true,
  3423. };
  3424. static const struct qcom_cc_desc gcc_ipq5018_desc = {
  3425. .config = &gcc_ipq5018_regmap_config,
  3426. .clks = gcc_ipq5018_clks,
  3427. .num_clks = ARRAY_SIZE(gcc_ipq5018_clks),
  3428. .resets = gcc_ipq5018_resets,
  3429. .num_resets = ARRAY_SIZE(gcc_ipq5018_resets),
  3430. .clk_hws = gcc_ipq5018_hws,
  3431. .num_clk_hws = ARRAY_SIZE(gcc_ipq5018_hws),
  3432. };
  3433. static int gcc_ipq5018_probe(struct platform_device *pdev)
  3434. {
  3435. struct regmap *regmap;
  3436. struct qcom_cc_desc ipq5018_desc = gcc_ipq5018_desc;
  3437. regmap = qcom_cc_map(pdev, &ipq5018_desc);
  3438. if (IS_ERR(regmap))
  3439. return PTR_ERR(regmap);
  3440. clk_alpha_pll_configure(&ubi32_pll_main, regmap, &ubi32_pll_config);
  3441. return qcom_cc_really_probe(&pdev->dev, &ipq5018_desc, regmap);
  3442. }
  3443. static struct platform_driver gcc_ipq5018_driver = {
  3444. .probe = gcc_ipq5018_probe,
  3445. .driver = {
  3446. .name = "qcom,gcc-ipq5018",
  3447. .of_match_table = gcc_ipq5018_match_table,
  3448. },
  3449. };
  3450. static int __init gcc_ipq5018_init(void)
  3451. {
  3452. return platform_driver_register(&gcc_ipq5018_driver);
  3453. }
  3454. core_initcall(gcc_ipq5018_init);
  3455. static void __exit gcc_ipq5018_exit(void)
  3456. {
  3457. platform_driver_unregister(&gcc_ipq5018_driver);
  3458. }
  3459. module_exit(gcc_ipq5018_exit);
  3460. MODULE_DESCRIPTION("Qualcomm Technologies, Inc. GCC IPQ5018 Driver");
  3461. MODULE_LICENSE("GPL");