gcc-pineapple.c 118 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
  4. */
  5. #include <linux/clk.h>
  6. #include <linux/clk-provider.h>
  7. #include <linux/err.h>
  8. #include <linux/kernel.h>
  9. #include <linux/module.h>
  10. #include <linux/of_device.h>
  11. #include <linux/of.h>
  12. #include <linux/regmap.h>
  13. #include <dt-bindings/clock/qcom,gcc-pineapple.h>
  14. #include "clk-alpha-pll.h"
  15. #include "clk-branch.h"
  16. #include "clk-pll.h"
  17. #include "clk-rcg.h"
  18. #include "clk-regmap.h"
  19. #include "clk-regmap-divider.h"
  20. #include "clk-regmap-mux.h"
  21. #include "common.h"
  22. #include "reset.h"
  23. #include "vdd-level.h"
  24. static DEFINE_VDD_REGULATORS(vdd_cx, VDD_HIGH + 1, 1, vdd_corner);
  25. static DEFINE_VDD_REGULATORS(vdd_cx_ao, VDD_HIGH + 1, 1, vdd_corner);
  26. static DEFINE_VDD_REGULATORS(vdd_mxa, VDD_HIGH + 1, 1, vdd_corner);
  27. static struct clk_vdd_class *gcc_pineapple_regulators[] = {
  28. &vdd_cx,
  29. &vdd_mxa,
  30. };
  31. static struct clk_vdd_class *gcc_pineapple_regulators_all[] = {
  32. &vdd_cx,
  33. &vdd_cx_ao,
  34. &vdd_mxa,
  35. };
  36. enum {
  37. P_BI_TCXO,
  38. P_GCC_GPLL0_OUT_EVEN,
  39. P_GCC_GPLL0_OUT_MAIN,
  40. P_GCC_GPLL1_OUT_MAIN,
  41. P_GCC_GPLL3_OUT_MAIN,
  42. P_GCC_GPLL4_OUT_MAIN,
  43. P_GCC_GPLL6_OUT_MAIN,
  44. P_GCC_GPLL7_OUT_MAIN,
  45. P_GCC_GPLL9_OUT_MAIN,
  46. P_PCIE_0_PIPE_CLK,
  47. P_PCIE_1_PHY_AUX_CLK,
  48. P_PCIE_1_PIPE_CLK,
  49. P_SLEEP_CLK,
  50. P_UFS_PHY_RX_SYMBOL_0_CLK,
  51. P_UFS_PHY_RX_SYMBOL_1_CLK,
  52. P_UFS_PHY_TX_SYMBOL_0_CLK,
  53. P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
  54. };
  55. static struct clk_alpha_pll gcc_gpll0 = {
  56. .offset = 0x0,
  57. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  58. .clkr = {
  59. .enable_reg = 0x52020,
  60. .enable_mask = BIT(0),
  61. .hw.init = &(const struct clk_init_data){
  62. .name = "gcc_gpll0",
  63. .parent_data = &(const struct clk_parent_data){
  64. .fw_name = "bi_tcxo",
  65. },
  66. .num_parents = 1,
  67. .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
  68. },
  69. .vdd_data = {
  70. .vdd_class = &vdd_cx,
  71. .num_rate_max = VDD_NUM,
  72. .rate_max = (unsigned long[VDD_NUM]) {
  73. [VDD_LOWER_D1] = 615000000,
  74. [VDD_LOW] = 1100000000,
  75. [VDD_LOW_L1] = 1600000000,
  76. [VDD_NOMINAL] = 2000000000,
  77. [VDD_HIGH_L1] = 2100000000},
  78. },
  79. },
  80. };
  81. static struct clk_alpha_pll gcc_gpll0_ao = {
  82. .offset = 0x0,
  83. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  84. .clkr = {
  85. .enable_reg = 0x57020,
  86. .enable_mask = BIT(0),
  87. .hw.init = &(const struct clk_init_data){
  88. .name = "gcc_gpll0_ao",
  89. .parent_data = &(const struct clk_parent_data){
  90. .fw_name = "bi_tcxo_ao",
  91. },
  92. .num_parents = 1,
  93. .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
  94. },
  95. .vdd_data = {
  96. .vdd_class = &vdd_cx_ao,
  97. .num_rate_max = VDD_NUM,
  98. .rate_max = (unsigned long[VDD_NUM]) {
  99. [VDD_LOWER_D1] = 615000000,
  100. [VDD_LOW] = 1100000000,
  101. [VDD_LOW_L1] = 1600000000,
  102. [VDD_NOMINAL] = 2000000000,
  103. [VDD_HIGH_L1] = 2100000000},
  104. },
  105. },
  106. };
  107. static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {
  108. { 0x1, 2 },
  109. { }
  110. };
  111. static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {
  112. .offset = 0x0,
  113. .post_div_shift = 10,
  114. .post_div_table = post_div_table_gcc_gpll0_out_even,
  115. .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
  116. .width = 4,
  117. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  118. .clkr.hw.init = &(const struct clk_init_data){
  119. .name = "gcc_gpll0_out_even",
  120. .parent_hws = (const struct clk_hw*[]){
  121. &gcc_gpll0.clkr.hw,
  122. },
  123. .num_parents = 1,
  124. .ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
  125. },
  126. };
  127. static struct clk_alpha_pll_postdiv gcc_gpll0_out_even_ao = {
  128. .offset = 0x0,
  129. .post_div_shift = 10,
  130. .post_div_table = post_div_table_gcc_gpll0_out_even,
  131. .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
  132. .width = 4,
  133. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  134. .clkr.hw.init = &(const struct clk_init_data){
  135. .name = "gcc_gpll0_out_even_ao",
  136. .parent_hws = (const struct clk_hw*[]){
  137. &gcc_gpll0_ao.clkr.hw,
  138. },
  139. .num_parents = 1,
  140. .ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
  141. },
  142. };
  143. static struct clk_alpha_pll gcc_gpll1 = {
  144. .offset = 0x1000,
  145. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  146. .clkr = {
  147. .enable_reg = 0x52020,
  148. .enable_mask = BIT(1),
  149. .hw.init = &(const struct clk_init_data){
  150. .name = "gcc_gpll1",
  151. .parent_data = &(const struct clk_parent_data){
  152. .fw_name = "bi_tcxo",
  153. },
  154. .num_parents = 1,
  155. .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
  156. },
  157. .vdd_data = {
  158. .vdd_class = &vdd_cx,
  159. .num_rate_max = VDD_NUM,
  160. .rate_max = (unsigned long[VDD_NUM]) {
  161. [VDD_LOWER_D1] = 615000000,
  162. [VDD_LOW] = 1100000000,
  163. [VDD_LOW_L1] = 1600000000,
  164. [VDD_NOMINAL] = 2000000000,
  165. [VDD_HIGH_L1] = 2100000000},
  166. },
  167. },
  168. };
  169. static struct clk_alpha_pll gcc_gpll1_ao = {
  170. .offset = 0x1000,
  171. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  172. .clkr = {
  173. .enable_reg = 0x57020,
  174. .enable_mask = BIT(1),
  175. .hw.init = &(const struct clk_init_data){
  176. .name = "gcc_gpll1_ao",
  177. .parent_data = &(const struct clk_parent_data){
  178. .fw_name = "bi_tcxo_ao",
  179. },
  180. .num_parents = 1,
  181. .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
  182. },
  183. .vdd_data = {
  184. .vdd_class = &vdd_cx_ao,
  185. .num_rate_max = VDD_NUM,
  186. .rate_max = (unsigned long[VDD_NUM]) {
  187. [VDD_LOWER_D1] = 615000000,
  188. [VDD_LOW] = 1100000000,
  189. [VDD_LOW_L1] = 1600000000,
  190. [VDD_NOMINAL] = 2000000000,
  191. [VDD_HIGH_L1] = 2100000000},
  192. },
  193. },
  194. };
  195. static struct clk_alpha_pll gcc_gpll3 = {
  196. .offset = 0x3000,
  197. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  198. .clkr = {
  199. .enable_reg = 0x52020,
  200. .enable_mask = BIT(3),
  201. .hw.init = &(const struct clk_init_data){
  202. .name = "gcc_gpll3",
  203. .parent_data = &(const struct clk_parent_data){
  204. .fw_name = "bi_tcxo",
  205. },
  206. .num_parents = 1,
  207. .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
  208. },
  209. .vdd_data = {
  210. .vdd_class = &vdd_cx,
  211. .num_rate_max = VDD_NUM,
  212. .rate_max = (unsigned long[VDD_NUM]) {
  213. [VDD_LOWER_D1] = 615000000,
  214. [VDD_LOW] = 1100000000,
  215. [VDD_LOW_L1] = 1600000000,
  216. [VDD_NOMINAL] = 2000000000,
  217. [VDD_HIGH_L1] = 2100000000},
  218. },
  219. },
  220. };
  221. static struct clk_alpha_pll gcc_gpll3_ao = {
  222. .offset = 0x3000,
  223. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  224. .clkr = {
  225. .enable_reg = 0x57020,
  226. .enable_mask = BIT(3),
  227. .hw.init = &(const struct clk_init_data){
  228. .name = "gcc_gpll3_ao",
  229. .parent_data = &(const struct clk_parent_data){
  230. .fw_name = "bi_tcxo_ao",
  231. },
  232. .num_parents = 1,
  233. .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
  234. },
  235. .vdd_data = {
  236. .vdd_class = &vdd_cx_ao,
  237. .num_rate_max = VDD_NUM,
  238. .rate_max = (unsigned long[VDD_NUM]) {
  239. [VDD_LOWER_D1] = 615000000,
  240. [VDD_LOW] = 1100000000,
  241. [VDD_LOW_L1] = 1600000000,
  242. [VDD_NOMINAL] = 2000000000,
  243. [VDD_HIGH_L1] = 2100000000},
  244. },
  245. },
  246. };
  247. static struct clk_alpha_pll gcc_gpll4 = {
  248. .offset = 0x4000,
  249. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  250. .clkr = {
  251. .enable_reg = 0x52020,
  252. .enable_mask = BIT(4),
  253. .hw.init = &(const struct clk_init_data){
  254. .name = "gcc_gpll4",
  255. .parent_data = &(const struct clk_parent_data){
  256. .fw_name = "bi_tcxo",
  257. },
  258. .num_parents = 1,
  259. .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
  260. },
  261. .vdd_data = {
  262. .vdd_class = &vdd_cx,
  263. .num_rate_max = VDD_NUM,
  264. .rate_max = (unsigned long[VDD_NUM]) {
  265. [VDD_LOWER_D1] = 615000000,
  266. [VDD_LOW] = 1100000000,
  267. [VDD_LOW_L1] = 1600000000,
  268. [VDD_NOMINAL] = 2000000000,
  269. [VDD_HIGH_L1] = 2100000000},
  270. },
  271. },
  272. };
  273. static struct clk_alpha_pll gcc_gpll4_ao = {
  274. .offset = 0x4000,
  275. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  276. .clkr = {
  277. .enable_reg = 0x57020,
  278. .enable_mask = BIT(4),
  279. .hw.init = &(const struct clk_init_data){
  280. .name = "gcc_gpll4_ao",
  281. .parent_data = &(const struct clk_parent_data){
  282. .fw_name = "bi_tcxo_ao",
  283. },
  284. .num_parents = 1,
  285. .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
  286. },
  287. .vdd_data = {
  288. .vdd_class = &vdd_cx_ao,
  289. .num_rate_max = VDD_NUM,
  290. .rate_max = (unsigned long[VDD_NUM]) {
  291. [VDD_LOWER_D1] = 615000000,
  292. [VDD_LOW] = 1100000000,
  293. [VDD_LOW_L1] = 1600000000,
  294. [VDD_NOMINAL] = 2000000000,
  295. [VDD_HIGH_L1] = 2100000000},
  296. },
  297. },
  298. };
  299. static struct clk_alpha_pll gcc_gpll6 = {
  300. .offset = 0x6000,
  301. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  302. .clkr = {
  303. .enable_reg = 0x52020,
  304. .enable_mask = BIT(6),
  305. .hw.init = &(const struct clk_init_data){
  306. .name = "gcc_gpll6",
  307. .parent_data = &(const struct clk_parent_data){
  308. .fw_name = "bi_tcxo",
  309. },
  310. .num_parents = 1,
  311. .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
  312. },
  313. .vdd_data = {
  314. .vdd_class = &vdd_cx,
  315. .num_rate_max = VDD_NUM,
  316. .rate_max = (unsigned long[VDD_NUM]) {
  317. [VDD_LOWER_D1] = 615000000,
  318. [VDD_LOW] = 1100000000,
  319. [VDD_LOW_L1] = 1600000000,
  320. [VDD_NOMINAL] = 2000000000,
  321. [VDD_HIGH_L1] = 2100000000},
  322. },
  323. },
  324. };
  325. static struct clk_alpha_pll gcc_gpll6_ao = {
  326. .offset = 0x6000,
  327. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  328. .clkr = {
  329. .enable_reg = 0x57020,
  330. .enable_mask = BIT(6),
  331. .hw.init = &(const struct clk_init_data){
  332. .name = "gcc_gpll6_ao",
  333. .parent_data = &(const struct clk_parent_data){
  334. .fw_name = "bi_tcxo_ao",
  335. },
  336. .num_parents = 1,
  337. .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
  338. },
  339. .vdd_data = {
  340. .vdd_class = &vdd_cx_ao,
  341. .num_rate_max = VDD_NUM,
  342. .rate_max = (unsigned long[VDD_NUM]) {
  343. [VDD_LOWER_D1] = 615000000,
  344. [VDD_LOW] = 1100000000,
  345. [VDD_LOW_L1] = 1600000000,
  346. [VDD_NOMINAL] = 2000000000,
  347. [VDD_HIGH_L1] = 2100000000},
  348. },
  349. },
  350. };
  351. static struct clk_alpha_pll gcc_gpll7 = {
  352. .offset = 0x7000,
  353. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  354. .clkr = {
  355. .enable_reg = 0x52020,
  356. .enable_mask = BIT(7),
  357. .hw.init = &(const struct clk_init_data){
  358. .name = "gcc_gpll7",
  359. .parent_data = &(const struct clk_parent_data){
  360. .fw_name = "bi_tcxo",
  361. },
  362. .num_parents = 1,
  363. .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
  364. },
  365. .vdd_data = {
  366. .vdd_class = &vdd_cx,
  367. .num_rate_max = VDD_NUM,
  368. .rate_max = (unsigned long[VDD_NUM]) {
  369. [VDD_LOWER_D1] = 615000000,
  370. [VDD_LOW] = 1100000000,
  371. [VDD_LOW_L1] = 1600000000,
  372. [VDD_NOMINAL] = 2000000000,
  373. [VDD_HIGH_L1] = 2100000000},
  374. },
  375. },
  376. };
  377. static struct clk_alpha_pll gcc_gpll9 = {
  378. .offset = 0x9000,
  379. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  380. .clkr = {
  381. .enable_reg = 0x52020,
  382. .enable_mask = BIT(9),
  383. .hw.init = &(const struct clk_init_data){
  384. .name = "gcc_gpll9",
  385. .parent_data = &(const struct clk_parent_data){
  386. .fw_name = "bi_tcxo",
  387. },
  388. .num_parents = 1,
  389. .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
  390. },
  391. .vdd_data = {
  392. .vdd_class = &vdd_cx,
  393. .num_rate_max = VDD_NUM,
  394. .rate_max = (unsigned long[VDD_NUM]) {
  395. [VDD_LOWER_D1] = 615000000,
  396. [VDD_LOW] = 1100000000,
  397. [VDD_LOW_L1] = 1600000000,
  398. [VDD_NOMINAL] = 2000000000,
  399. [VDD_HIGH_L1] = 2100000000},
  400. },
  401. },
  402. };
  403. static const struct parent_map gcc_parent_map_0[] = {
  404. { P_BI_TCXO, 0 },
  405. { P_GCC_GPLL0_OUT_MAIN, 1 },
  406. { P_GCC_GPLL0_OUT_EVEN, 6 },
  407. };
  408. static const struct clk_parent_data gcc_parent_data_0[] = {
  409. { .fw_name = "bi_tcxo" },
  410. { .hw = &gcc_gpll0.clkr.hw },
  411. { .hw = &gcc_gpll0_out_even.clkr.hw },
  412. };
  413. static const struct parent_map gcc_parent_map_1[] = {
  414. { P_BI_TCXO, 0 },
  415. { P_GCC_GPLL0_OUT_MAIN, 1 },
  416. { P_SLEEP_CLK, 5 },
  417. { P_GCC_GPLL0_OUT_EVEN, 6 },
  418. };
  419. static const struct clk_parent_data gcc_parent_data_1[] = {
  420. { .fw_name = "bi_tcxo" },
  421. { .hw = &gcc_gpll0.clkr.hw },
  422. { .fw_name = "sleep_clk" },
  423. { .hw = &gcc_gpll0_out_even.clkr.hw },
  424. };
  425. static const struct parent_map gcc_parent_map_2[] = {
  426. { P_BI_TCXO, 0 },
  427. { P_GCC_GPLL0_OUT_MAIN, 1 },
  428. { P_GCC_GPLL1_OUT_MAIN, 4 },
  429. { P_GCC_GPLL4_OUT_MAIN, 5 },
  430. { P_GCC_GPLL0_OUT_EVEN, 6 },
  431. };
  432. static const struct clk_parent_data gcc_parent_data_2[] = {
  433. { .fw_name = "bi_tcxo" },
  434. { .hw = &gcc_gpll0.clkr.hw },
  435. { .hw = &gcc_gpll1.clkr.hw },
  436. { .hw = &gcc_gpll4.clkr.hw },
  437. { .hw = &gcc_gpll0_out_even.clkr.hw },
  438. };
  439. static const struct parent_map gcc_parent_map_3[] = {
  440. { P_BI_TCXO, 0 },
  441. { P_GCC_GPLL0_OUT_MAIN, 1 },
  442. { P_GCC_GPLL4_OUT_MAIN, 5 },
  443. { P_GCC_GPLL0_OUT_EVEN, 6 },
  444. };
  445. static const struct clk_parent_data gcc_parent_data_3[] = {
  446. { .fw_name = "bi_tcxo" },
  447. { .hw = &gcc_gpll0.clkr.hw },
  448. { .hw = &gcc_gpll4.clkr.hw },
  449. { .hw = &gcc_gpll0_out_even.clkr.hw },
  450. };
  451. static const struct parent_map gcc_parent_map_4[] = {
  452. { P_BI_TCXO, 0 },
  453. { P_SLEEP_CLK, 5 },
  454. };
  455. static const struct clk_parent_data gcc_parent_data_4[] = {
  456. { .fw_name = "bi_tcxo" },
  457. { .fw_name = "sleep_clk" },
  458. };
  459. static const struct parent_map gcc_parent_map_5[] = {
  460. { P_BI_TCXO, 0 },
  461. };
  462. static const struct clk_parent_data gcc_parent_data_5[] = {
  463. { .fw_name = "bi_tcxo" },
  464. };
  465. static const struct parent_map gcc_parent_map_6[] = {
  466. { P_BI_TCXO, 0 },
  467. { P_GCC_GPLL0_OUT_MAIN, 1 },
  468. { P_GCC_GPLL6_OUT_MAIN, 2 },
  469. { P_GCC_GPLL3_OUT_MAIN, 3 },
  470. { P_GCC_GPLL1_OUT_MAIN, 4 },
  471. { P_GCC_GPLL4_OUT_MAIN, 5 },
  472. { P_GCC_GPLL0_OUT_EVEN, 6 },
  473. };
  474. static const struct clk_parent_data gcc_parent_data_6_ao[] = {
  475. { .fw_name = "bi_tcxo_ao" },
  476. { .hw = &gcc_gpll0_ao.clkr.hw },
  477. { .hw = &gcc_gpll6_ao.clkr.hw },
  478. { .hw = &gcc_gpll3_ao.clkr.hw },
  479. { .hw = &gcc_gpll1_ao.clkr.hw },
  480. { .hw = &gcc_gpll4_ao.clkr.hw },
  481. { .hw = &gcc_gpll0_out_even_ao.clkr.hw },
  482. };
  483. static const struct parent_map gcc_parent_map_7[] = {
  484. { P_PCIE_0_PIPE_CLK, 0 },
  485. { P_BI_TCXO, 2 },
  486. };
  487. static const struct clk_parent_data gcc_parent_data_7[] = {
  488. { .fw_name = "pcie_0_pipe_clk" },
  489. { .fw_name = "bi_tcxo" },
  490. };
  491. static const struct parent_map gcc_parent_map_8[] = {
  492. { P_PCIE_1_PHY_AUX_CLK, 0 },
  493. { P_BI_TCXO, 2 },
  494. };
  495. static const struct clk_parent_data gcc_parent_data_8[] = {
  496. { .fw_name = "pcie_1_phy_aux_clk" },
  497. { .fw_name = "bi_tcxo" },
  498. };
  499. static const struct parent_map gcc_parent_map_9[] = {
  500. { P_PCIE_1_PIPE_CLK, 0 },
  501. { P_BI_TCXO, 2 },
  502. };
  503. static const struct clk_parent_data gcc_parent_data_9[] = {
  504. { .fw_name = "pcie_1_pipe_clk" },
  505. { .fw_name = "bi_tcxo" },
  506. };
  507. static const struct parent_map gcc_parent_map_10[] = {
  508. { P_BI_TCXO, 0 },
  509. { P_GCC_GPLL0_OUT_MAIN, 1 },
  510. { P_GCC_GPLL7_OUT_MAIN, 2 },
  511. { P_GCC_GPLL0_OUT_EVEN, 6 },
  512. };
  513. static const struct clk_parent_data gcc_parent_data_10[] = {
  514. { .fw_name = "bi_tcxo" },
  515. { .hw = &gcc_gpll0.clkr.hw },
  516. { .hw = &gcc_gpll7.clkr.hw },
  517. { .hw = &gcc_gpll0_out_even.clkr.hw },
  518. };
  519. static const struct parent_map gcc_parent_map_11[] = {
  520. { P_BI_TCXO, 0 },
  521. { P_GCC_GPLL0_OUT_MAIN, 1 },
  522. { P_GCC_GPLL9_OUT_MAIN, 2 },
  523. { P_GCC_GPLL4_OUT_MAIN, 5 },
  524. { P_GCC_GPLL0_OUT_EVEN, 6 },
  525. };
  526. static const struct clk_parent_data gcc_parent_data_11[] = {
  527. { .fw_name = "bi_tcxo" },
  528. { .hw = &gcc_gpll0.clkr.hw },
  529. { .hw = &gcc_gpll9.clkr.hw },
  530. { .hw = &gcc_gpll4.clkr.hw },
  531. { .hw = &gcc_gpll0_out_even.clkr.hw },
  532. };
  533. static const struct parent_map gcc_parent_map_12[] = {
  534. { P_UFS_PHY_RX_SYMBOL_0_CLK, 0 },
  535. { P_BI_TCXO, 2 },
  536. };
  537. static const struct clk_parent_data gcc_parent_data_12[] = {
  538. { .fw_name = "ufs_phy_rx_symbol_0_clk" },
  539. { .fw_name = "bi_tcxo" },
  540. };
  541. static const struct parent_map gcc_parent_map_13[] = {
  542. { P_UFS_PHY_RX_SYMBOL_1_CLK, 0 },
  543. { P_BI_TCXO, 2 },
  544. };
  545. static const struct clk_parent_data gcc_parent_data_13[] = {
  546. { .fw_name = "ufs_phy_rx_symbol_1_clk" },
  547. { .fw_name = "bi_tcxo" },
  548. };
  549. static const struct parent_map gcc_parent_map_14[] = {
  550. { P_UFS_PHY_TX_SYMBOL_0_CLK, 0 },
  551. { P_BI_TCXO, 2 },
  552. };
  553. static const struct clk_parent_data gcc_parent_data_14[] = {
  554. { .fw_name = "ufs_phy_tx_symbol_0_clk" },
  555. { .fw_name = "bi_tcxo" },
  556. };
  557. static const struct parent_map gcc_parent_map_15[] = {
  558. { P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },
  559. { P_BI_TCXO, 2 },
  560. };
  561. static const struct clk_parent_data gcc_parent_data_15[] = {
  562. { .fw_name = "usb3_phy_wrapper_gcc_usb30_pipe_clk" },
  563. { .fw_name = "bi_tcxo" },
  564. };
  565. static struct clk_regmap_mux gcc_pcie_0_pipe_clk_src = {
  566. .reg = 0x6b070,
  567. .shift = 0,
  568. .width = 2,
  569. .parent_map = gcc_parent_map_7,
  570. .clkr = {
  571. .hw.init = &(const struct clk_init_data){
  572. .name = "gcc_pcie_0_pipe_clk_src",
  573. .parent_data = gcc_parent_data_7,
  574. .num_parents = ARRAY_SIZE(gcc_parent_data_7),
  575. .ops = &clk_regmap_mux_closest_ops,
  576. },
  577. },
  578. };
  579. static struct clk_regmap_mux gcc_pcie_1_phy_aux_clk_src = {
  580. .reg = 0x8d094,
  581. .shift = 0,
  582. .width = 2,
  583. .parent_map = gcc_parent_map_8,
  584. .clkr = {
  585. .hw.init = &(const struct clk_init_data){
  586. .name = "gcc_pcie_1_phy_aux_clk_src",
  587. .parent_data = gcc_parent_data_8,
  588. .num_parents = ARRAY_SIZE(gcc_parent_data_8),
  589. .ops = &clk_regmap_mux_closest_ops,
  590. },
  591. },
  592. };
  593. static struct clk_regmap_mux gcc_pcie_1_pipe_clk_src = {
  594. .reg = 0x8d078,
  595. .shift = 0,
  596. .width = 2,
  597. .parent_map = gcc_parent_map_9,
  598. .clkr = {
  599. .hw.init = &(const struct clk_init_data){
  600. .name = "gcc_pcie_1_pipe_clk_src",
  601. .parent_data = gcc_parent_data_9,
  602. .num_parents = ARRAY_SIZE(gcc_parent_data_9),
  603. .ops = &clk_regmap_mux_closest_ops,
  604. },
  605. },
  606. };
  607. static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_0_clk_src = {
  608. .reg = 0x77064,
  609. .shift = 0,
  610. .width = 2,
  611. .parent_map = gcc_parent_map_12,
  612. .clkr = {
  613. .hw.init = &(const struct clk_init_data){
  614. .name = "gcc_ufs_phy_rx_symbol_0_clk_src",
  615. .parent_data = gcc_parent_data_12,
  616. .num_parents = ARRAY_SIZE(gcc_parent_data_12),
  617. .ops = &clk_regmap_mux_closest_ops,
  618. },
  619. },
  620. };
  621. static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_1_clk_src = {
  622. .reg = 0x770e0,
  623. .shift = 0,
  624. .width = 2,
  625. .parent_map = gcc_parent_map_13,
  626. .clkr = {
  627. .hw.init = &(const struct clk_init_data){
  628. .name = "gcc_ufs_phy_rx_symbol_1_clk_src",
  629. .parent_data = gcc_parent_data_13,
  630. .num_parents = ARRAY_SIZE(gcc_parent_data_13),
  631. .ops = &clk_regmap_mux_closest_ops,
  632. },
  633. },
  634. };
  635. static struct clk_regmap_mux gcc_ufs_phy_tx_symbol_0_clk_src = {
  636. .reg = 0x77054,
  637. .shift = 0,
  638. .width = 2,
  639. .parent_map = gcc_parent_map_14,
  640. .clkr = {
  641. .hw.init = &(const struct clk_init_data){
  642. .name = "gcc_ufs_phy_tx_symbol_0_clk_src",
  643. .parent_data = gcc_parent_data_14,
  644. .num_parents = ARRAY_SIZE(gcc_parent_data_14),
  645. .ops = &clk_regmap_mux_closest_ops,
  646. },
  647. },
  648. };
  649. static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = {
  650. .reg = 0x3906c,
  651. .shift = 0,
  652. .width = 2,
  653. .parent_map = gcc_parent_map_15,
  654. .clkr = {
  655. .hw.init = &(const struct clk_init_data){
  656. .name = "gcc_usb3_prim_phy_pipe_clk_src",
  657. .parent_data = gcc_parent_data_15,
  658. .num_parents = ARRAY_SIZE(gcc_parent_data_15),
  659. .ops = &clk_regmap_mux_closest_ops,
  660. },
  661. },
  662. };
  663. static const struct freq_tbl ftbl_gcc_cpuss_ubwcp_clk_src[] = {
  664. F(300000000, P_GCC_GPLL0_OUT_EVEN, 1, 0, 0),
  665. F(403000000, P_GCC_GPLL4_OUT_MAIN, 2, 0, 0),
  666. F(533000000, P_GCC_GPLL1_OUT_MAIN, 2, 0, 0),
  667. F(710666667, P_GCC_GPLL1_OUT_MAIN, 1.5, 0, 0),
  668. { }
  669. };
  670. static struct clk_rcg2 gcc_cpuss_ubwcp_clk_src = {
  671. .cmd_rcgr = 0x63004,
  672. .mnd_width = 0,
  673. .hid_width = 5,
  674. .parent_map = gcc_parent_map_6,
  675. .freq_tbl = ftbl_gcc_cpuss_ubwcp_clk_src,
  676. .enable_safe_config = true,
  677. .flags = HW_CLK_CTRL_MODE,
  678. .clkr.hw.init = &(const struct clk_init_data){
  679. .name = "gcc_cpuss_ubwcp_clk_src",
  680. .parent_data = gcc_parent_data_6_ao,
  681. .num_parents = ARRAY_SIZE(gcc_parent_data_6_ao),
  682. .flags = CLK_SET_RATE_PARENT,
  683. .ops = &clk_rcg2_ops,
  684. },
  685. .clkr.vdd_data = {
  686. .vdd_class = &vdd_cx_ao,
  687. .num_rate_max = VDD_NUM,
  688. .rate_max = (unsigned long[VDD_NUM]) {
  689. [VDD_LOWER] = 300000000,
  690. [VDD_LOW] = 403000000,
  691. [VDD_NOMINAL] = 533000000,
  692. [VDD_HIGH] = 710666667},
  693. },
  694. };
  695. static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
  696. F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
  697. F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
  698. F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
  699. { }
  700. };
  701. static struct clk_rcg2 gcc_gp1_clk_src = {
  702. .cmd_rcgr = 0x64004,
  703. .mnd_width = 16,
  704. .hid_width = 5,
  705. .parent_map = gcc_parent_map_1,
  706. .freq_tbl = ftbl_gcc_gp1_clk_src,
  707. .enable_safe_config = true,
  708. .flags = HW_CLK_CTRL_MODE,
  709. .clkr.hw.init = &(const struct clk_init_data){
  710. .name = "gcc_gp1_clk_src",
  711. .parent_data = gcc_parent_data_1,
  712. .num_parents = ARRAY_SIZE(gcc_parent_data_1),
  713. .flags = CLK_SET_RATE_PARENT,
  714. .ops = &clk_rcg2_ops,
  715. },
  716. .clkr.vdd_data = {
  717. .vdd_class = &vdd_cx,
  718. .num_rate_max = VDD_NUM,
  719. .rate_max = (unsigned long[VDD_NUM]) {
  720. [VDD_LOWER] = 50000000,
  721. [VDD_LOW] = 100000000,
  722. [VDD_NOMINAL] = 200000000},
  723. },
  724. };
  725. static struct clk_rcg2 gcc_gp2_clk_src = {
  726. .cmd_rcgr = 0x65004,
  727. .mnd_width = 16,
  728. .hid_width = 5,
  729. .parent_map = gcc_parent_map_1,
  730. .freq_tbl = ftbl_gcc_gp1_clk_src,
  731. .enable_safe_config = true,
  732. .flags = HW_CLK_CTRL_MODE,
  733. .clkr.hw.init = &(const struct clk_init_data){
  734. .name = "gcc_gp2_clk_src",
  735. .parent_data = gcc_parent_data_1,
  736. .num_parents = ARRAY_SIZE(gcc_parent_data_1),
  737. .flags = CLK_SET_RATE_PARENT,
  738. .ops = &clk_rcg2_ops,
  739. },
  740. .clkr.vdd_data = {
  741. .vdd_class = &vdd_cx,
  742. .num_rate_max = VDD_NUM,
  743. .rate_max = (unsigned long[VDD_NUM]) {
  744. [VDD_LOWER] = 50000000,
  745. [VDD_LOW] = 100000000,
  746. [VDD_NOMINAL] = 200000000},
  747. },
  748. };
  749. static struct clk_rcg2 gcc_gp3_clk_src = {
  750. .cmd_rcgr = 0x66004,
  751. .mnd_width = 16,
  752. .hid_width = 5,
  753. .parent_map = gcc_parent_map_1,
  754. .freq_tbl = ftbl_gcc_gp1_clk_src,
  755. .enable_safe_config = true,
  756. .flags = HW_CLK_CTRL_MODE,
  757. .clkr.hw.init = &(const struct clk_init_data){
  758. .name = "gcc_gp3_clk_src",
  759. .parent_data = gcc_parent_data_1,
  760. .num_parents = ARRAY_SIZE(gcc_parent_data_1),
  761. .flags = CLK_SET_RATE_PARENT,
  762. .ops = &clk_rcg2_ops,
  763. },
  764. .clkr.vdd_data = {
  765. .vdd_class = &vdd_cx,
  766. .num_rate_max = VDD_NUM,
  767. .rate_max = (unsigned long[VDD_NUM]) {
  768. [VDD_LOWER] = 50000000,
  769. [VDD_LOW] = 100000000,
  770. [VDD_NOMINAL] = 200000000},
  771. },
  772. };
  773. static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
  774. F(19200000, P_BI_TCXO, 1, 0, 0),
  775. { }
  776. };
  777. static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
  778. .cmd_rcgr = 0x6b074,
  779. .mnd_width = 16,
  780. .hid_width = 5,
  781. .parent_map = gcc_parent_map_4,
  782. .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
  783. .enable_safe_config = true,
  784. .flags = HW_CLK_CTRL_MODE,
  785. .clkr.hw.init = &(const struct clk_init_data){
  786. .name = "gcc_pcie_0_aux_clk_src",
  787. .parent_data = gcc_parent_data_4,
  788. .num_parents = ARRAY_SIZE(gcc_parent_data_4),
  789. .flags = CLK_SET_RATE_PARENT,
  790. .ops = &clk_rcg2_ops,
  791. },
  792. .clkr.vdd_data = {
  793. .vdd_classes = gcc_pineapple_regulators,
  794. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  795. .num_rate_max = VDD_NUM,
  796. .rate_max = (unsigned long[VDD_NUM]) {
  797. [VDD_LOWER] = 19200000},
  798. },
  799. };
  800. static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {
  801. F(19200000, P_BI_TCXO, 1, 0, 0),
  802. F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
  803. { }
  804. };
  805. static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {
  806. .cmd_rcgr = 0x6b058,
  807. .mnd_width = 0,
  808. .hid_width = 5,
  809. .parent_map = gcc_parent_map_0,
  810. .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
  811. .enable_safe_config = true,
  812. .flags = HW_CLK_CTRL_MODE,
  813. .clkr.hw.init = &(const struct clk_init_data){
  814. .name = "gcc_pcie_0_phy_rchng_clk_src",
  815. .parent_data = gcc_parent_data_0,
  816. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  817. .flags = CLK_SET_RATE_PARENT,
  818. .ops = &clk_rcg2_ops,
  819. },
  820. .clkr.vdd_data = {
  821. .vdd_class = &vdd_cx,
  822. .num_rate_max = VDD_NUM,
  823. .rate_max = (unsigned long[VDD_NUM]) {
  824. [VDD_LOWER] = 100000000},
  825. },
  826. };
  827. static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
  828. .cmd_rcgr = 0x8d07c,
  829. .mnd_width = 16,
  830. .hid_width = 5,
  831. .parent_map = gcc_parent_map_4,
  832. .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
  833. .enable_safe_config = true,
  834. .flags = HW_CLK_CTRL_MODE,
  835. .clkr.hw.init = &(const struct clk_init_data){
  836. .name = "gcc_pcie_1_aux_clk_src",
  837. .parent_data = gcc_parent_data_4,
  838. .num_parents = ARRAY_SIZE(gcc_parent_data_4),
  839. .flags = CLK_SET_RATE_PARENT,
  840. .ops = &clk_rcg2_ops,
  841. },
  842. .clkr.vdd_data = {
  843. .vdd_classes = gcc_pineapple_regulators,
  844. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  845. .num_rate_max = VDD_NUM,
  846. .rate_max = (unsigned long[VDD_NUM]) {
  847. [VDD_LOWER] = 19200000},
  848. },
  849. };
  850. static struct clk_rcg2 gcc_pcie_1_phy_rchng_clk_src = {
  851. .cmd_rcgr = 0x8d060,
  852. .mnd_width = 0,
  853. .hid_width = 5,
  854. .parent_map = gcc_parent_map_0,
  855. .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
  856. .enable_safe_config = true,
  857. .flags = HW_CLK_CTRL_MODE,
  858. .clkr.hw.init = &(const struct clk_init_data){
  859. .name = "gcc_pcie_1_phy_rchng_clk_src",
  860. .parent_data = gcc_parent_data_0,
  861. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  862. .flags = CLK_SET_RATE_PARENT,
  863. .ops = &clk_rcg2_ops,
  864. },
  865. .clkr.vdd_data = {
  866. .vdd_class = &vdd_cx,
  867. .num_rate_max = VDD_NUM,
  868. .rate_max = (unsigned long[VDD_NUM]) {
  869. [VDD_LOWER] = 100000000},
  870. },
  871. };
  872. static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
  873. F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0),
  874. { }
  875. };
  876. static struct clk_rcg2 gcc_pdm2_clk_src = {
  877. .cmd_rcgr = 0x33010,
  878. .mnd_width = 0,
  879. .hid_width = 5,
  880. .parent_map = gcc_parent_map_0,
  881. .freq_tbl = ftbl_gcc_pdm2_clk_src,
  882. .enable_safe_config = true,
  883. .flags = HW_CLK_CTRL_MODE,
  884. .clkr.hw.init = &(const struct clk_init_data){
  885. .name = "gcc_pdm2_clk_src",
  886. .parent_data = gcc_parent_data_0,
  887. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  888. .flags = CLK_SET_RATE_PARENT,
  889. .ops = &clk_rcg2_ops,
  890. },
  891. .clkr.vdd_data = {
  892. .vdd_class = &vdd_cx,
  893. .num_rate_max = VDD_NUM,
  894. .rate_max = (unsigned long[VDD_NUM]) {
  895. [VDD_LOWER] = 60000000},
  896. },
  897. };
  898. static struct clk_rcg2 gcc_qupv3_i2c_s0_clk_src = {
  899. .cmd_rcgr = 0x17008,
  900. .mnd_width = 0,
  901. .hid_width = 5,
  902. .parent_map = gcc_parent_map_0,
  903. .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
  904. .enable_safe_config = true,
  905. .flags = HW_CLK_CTRL_MODE,
  906. .clkr.hw.init = &(const struct clk_init_data){
  907. .name = "gcc_qupv3_i2c_s0_clk_src",
  908. .parent_data = gcc_parent_data_0,
  909. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  910. .flags = CLK_SET_RATE_PARENT,
  911. .ops = &clk_rcg2_ops,
  912. },
  913. .clkr.vdd_data = {
  914. .vdd_class = &vdd_cx,
  915. .num_rate_max = VDD_NUM,
  916. .rate_max = (unsigned long[VDD_NUM]) {
  917. [VDD_LOWER] = 19200000},
  918. },
  919. };
  920. static struct clk_rcg2 gcc_qupv3_i2c_s1_clk_src = {
  921. .cmd_rcgr = 0x17024,
  922. .mnd_width = 0,
  923. .hid_width = 5,
  924. .parent_map = gcc_parent_map_0,
  925. .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
  926. .enable_safe_config = true,
  927. .flags = HW_CLK_CTRL_MODE,
  928. .clkr.hw.init = &(const struct clk_init_data){
  929. .name = "gcc_qupv3_i2c_s1_clk_src",
  930. .parent_data = gcc_parent_data_0,
  931. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  932. .flags = CLK_SET_RATE_PARENT,
  933. .ops = &clk_rcg2_ops,
  934. },
  935. .clkr.vdd_data = {
  936. .vdd_class = &vdd_cx,
  937. .num_rate_max = VDD_NUM,
  938. .rate_max = (unsigned long[VDD_NUM]) {
  939. [VDD_LOWER] = 19200000},
  940. },
  941. };
  942. static struct clk_rcg2 gcc_qupv3_i2c_s2_clk_src = {
  943. .cmd_rcgr = 0x17040,
  944. .mnd_width = 0,
  945. .hid_width = 5,
  946. .parent_map = gcc_parent_map_0,
  947. .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
  948. .enable_safe_config = true,
  949. .flags = HW_CLK_CTRL_MODE,
  950. .clkr.hw.init = &(const struct clk_init_data){
  951. .name = "gcc_qupv3_i2c_s2_clk_src",
  952. .parent_data = gcc_parent_data_0,
  953. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  954. .flags = CLK_SET_RATE_PARENT,
  955. .ops = &clk_rcg2_ops,
  956. },
  957. .clkr.vdd_data = {
  958. .vdd_class = &vdd_cx,
  959. .num_rate_max = VDD_NUM,
  960. .rate_max = (unsigned long[VDD_NUM]) {
  961. [VDD_LOWER] = 19200000},
  962. },
  963. };
  964. static struct clk_rcg2 gcc_qupv3_i2c_s3_clk_src = {
  965. .cmd_rcgr = 0x1705c,
  966. .mnd_width = 0,
  967. .hid_width = 5,
  968. .parent_map = gcc_parent_map_0,
  969. .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
  970. .enable_safe_config = true,
  971. .flags = HW_CLK_CTRL_MODE,
  972. .clkr.hw.init = &(const struct clk_init_data){
  973. .name = "gcc_qupv3_i2c_s3_clk_src",
  974. .parent_data = gcc_parent_data_0,
  975. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  976. .flags = CLK_SET_RATE_PARENT,
  977. .ops = &clk_rcg2_ops,
  978. },
  979. .clkr.vdd_data = {
  980. .vdd_class = &vdd_cx,
  981. .num_rate_max = VDD_NUM,
  982. .rate_max = (unsigned long[VDD_NUM]) {
  983. [VDD_LOWER] = 19200000},
  984. },
  985. };
  986. static struct clk_rcg2 gcc_qupv3_i2c_s4_clk_src = {
  987. .cmd_rcgr = 0x17078,
  988. .mnd_width = 0,
  989. .hid_width = 5,
  990. .parent_map = gcc_parent_map_0,
  991. .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
  992. .enable_safe_config = true,
  993. .flags = HW_CLK_CTRL_MODE,
  994. .clkr.hw.init = &(const struct clk_init_data){
  995. .name = "gcc_qupv3_i2c_s4_clk_src",
  996. .parent_data = gcc_parent_data_0,
  997. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  998. .flags = CLK_SET_RATE_PARENT,
  999. .ops = &clk_rcg2_ops,
  1000. },
  1001. .clkr.vdd_data = {
  1002. .vdd_class = &vdd_cx,
  1003. .num_rate_max = VDD_NUM,
  1004. .rate_max = (unsigned long[VDD_NUM]) {
  1005. [VDD_LOWER] = 19200000},
  1006. },
  1007. };
  1008. static struct clk_rcg2 gcc_qupv3_i2c_s5_clk_src = {
  1009. .cmd_rcgr = 0x17094,
  1010. .mnd_width = 0,
  1011. .hid_width = 5,
  1012. .parent_map = gcc_parent_map_0,
  1013. .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
  1014. .enable_safe_config = true,
  1015. .flags = HW_CLK_CTRL_MODE,
  1016. .clkr.hw.init = &(const struct clk_init_data){
  1017. .name = "gcc_qupv3_i2c_s5_clk_src",
  1018. .parent_data = gcc_parent_data_0,
  1019. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1020. .flags = CLK_SET_RATE_PARENT,
  1021. .ops = &clk_rcg2_ops,
  1022. },
  1023. .clkr.vdd_data = {
  1024. .vdd_class = &vdd_cx,
  1025. .num_rate_max = VDD_NUM,
  1026. .rate_max = (unsigned long[VDD_NUM]) {
  1027. [VDD_LOWER] = 19200000},
  1028. },
  1029. };
  1030. static struct clk_rcg2 gcc_qupv3_i2c_s6_clk_src = {
  1031. .cmd_rcgr = 0x170b0,
  1032. .mnd_width = 0,
  1033. .hid_width = 5,
  1034. .parent_map = gcc_parent_map_0,
  1035. .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
  1036. .enable_safe_config = true,
  1037. .flags = HW_CLK_CTRL_MODE,
  1038. .clkr.hw.init = &(const struct clk_init_data){
  1039. .name = "gcc_qupv3_i2c_s6_clk_src",
  1040. .parent_data = gcc_parent_data_0,
  1041. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1042. .flags = CLK_SET_RATE_PARENT,
  1043. .ops = &clk_rcg2_ops,
  1044. },
  1045. .clkr.vdd_data = {
  1046. .vdd_class = &vdd_cx,
  1047. .num_rate_max = VDD_NUM,
  1048. .rate_max = (unsigned long[VDD_NUM]) {
  1049. [VDD_LOWER] = 19200000},
  1050. },
  1051. };
  1052. static struct clk_rcg2 gcc_qupv3_i2c_s7_clk_src = {
  1053. .cmd_rcgr = 0x170cc,
  1054. .mnd_width = 0,
  1055. .hid_width = 5,
  1056. .parent_map = gcc_parent_map_0,
  1057. .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
  1058. .enable_safe_config = true,
  1059. .flags = HW_CLK_CTRL_MODE,
  1060. .clkr.hw.init = &(const struct clk_init_data){
  1061. .name = "gcc_qupv3_i2c_s7_clk_src",
  1062. .parent_data = gcc_parent_data_0,
  1063. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1064. .flags = CLK_SET_RATE_PARENT,
  1065. .ops = &clk_rcg2_ops,
  1066. },
  1067. .clkr.vdd_data = {
  1068. .vdd_class = &vdd_cx,
  1069. .num_rate_max = VDD_NUM,
  1070. .rate_max = (unsigned long[VDD_NUM]) {
  1071. [VDD_LOWER] = 19200000},
  1072. },
  1073. };
  1074. static struct clk_rcg2 gcc_qupv3_i2c_s8_clk_src = {
  1075. .cmd_rcgr = 0x170e8,
  1076. .mnd_width = 0,
  1077. .hid_width = 5,
  1078. .parent_map = gcc_parent_map_0,
  1079. .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
  1080. .enable_safe_config = true,
  1081. .flags = HW_CLK_CTRL_MODE,
  1082. .clkr.hw.init = &(const struct clk_init_data){
  1083. .name = "gcc_qupv3_i2c_s8_clk_src",
  1084. .parent_data = gcc_parent_data_0,
  1085. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1086. .flags = CLK_SET_RATE_PARENT,
  1087. .ops = &clk_rcg2_ops,
  1088. },
  1089. .clkr.vdd_data = {
  1090. .vdd_class = &vdd_cx,
  1091. .num_rate_max = VDD_NUM,
  1092. .rate_max = (unsigned long[VDD_NUM]) {
  1093. [VDD_LOWER] = 19200000},
  1094. },
  1095. };
  1096. static struct clk_rcg2 gcc_qupv3_i2c_s9_clk_src = {
  1097. .cmd_rcgr = 0x17104,
  1098. .mnd_width = 0,
  1099. .hid_width = 5,
  1100. .parent_map = gcc_parent_map_0,
  1101. .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
  1102. .enable_safe_config = true,
  1103. .flags = HW_CLK_CTRL_MODE,
  1104. .clkr.hw.init = &(const struct clk_init_data){
  1105. .name = "gcc_qupv3_i2c_s9_clk_src",
  1106. .parent_data = gcc_parent_data_0,
  1107. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1108. .flags = CLK_SET_RATE_PARENT,
  1109. .ops = &clk_rcg2_ops,
  1110. },
  1111. .clkr.vdd_data = {
  1112. .vdd_class = &vdd_cx,
  1113. .num_rate_max = VDD_NUM,
  1114. .rate_max = (unsigned long[VDD_NUM]) {
  1115. [VDD_LOWER] = 19200000},
  1116. },
  1117. };
  1118. static const struct freq_tbl ftbl_gcc_qupv3_wrap1_qspi_ref_clk_src[] = {
  1119. F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0),
  1120. F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
  1121. { }
  1122. };
  1123. static struct clk_init_data gcc_qupv3_wrap1_qspi_ref_clk_src_init = {
  1124. .name = "gcc_qupv3_wrap1_qspi_ref_clk_src",
  1125. .parent_data = gcc_parent_data_0,
  1126. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1127. .flags = CLK_SET_RATE_PARENT,
  1128. .ops = &clk_rcg2_ops,
  1129. };
  1130. static struct clk_rcg2 gcc_qupv3_wrap1_qspi_ref_clk_src = {
  1131. .cmd_rcgr = 0x188a0,
  1132. .mnd_width = 16,
  1133. .hid_width = 5,
  1134. .parent_map = gcc_parent_map_0,
  1135. .freq_tbl = ftbl_gcc_qupv3_wrap1_qspi_ref_clk_src,
  1136. .enable_safe_config = true,
  1137. .flags = HW_CLK_CTRL_MODE,
  1138. .clkr.hw.init = &gcc_qupv3_wrap1_qspi_ref_clk_src_init,
  1139. .clkr.vdd_data = {
  1140. .vdd_classes = gcc_pineapple_regulators,
  1141. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1142. .num_rate_max = VDD_NUM,
  1143. .rate_max = (unsigned long[VDD_NUM]) {
  1144. [VDD_LOWER] = 150000000,
  1145. [VDD_LOW] = 240000000},
  1146. },
  1147. };
  1148. static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s0_clk_src[] = {
  1149. F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
  1150. F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
  1151. F(19200000, P_BI_TCXO, 1, 0, 0),
  1152. F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
  1153. F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
  1154. F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
  1155. F(51200000, P_GCC_GPLL0_OUT_EVEN, 1, 64, 375),
  1156. F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
  1157. F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
  1158. F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
  1159. F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
  1160. F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
  1161. F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
  1162. F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
  1163. F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
  1164. F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),
  1165. { }
  1166. };
  1167. static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
  1168. .name = "gcc_qupv3_wrap1_s0_clk_src",
  1169. .parent_data = gcc_parent_data_0,
  1170. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1171. .flags = CLK_SET_RATE_PARENT,
  1172. .ops = &clk_rcg2_ops,
  1173. };
  1174. static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
  1175. .cmd_rcgr = 0x18010,
  1176. .mnd_width = 16,
  1177. .hid_width = 5,
  1178. .parent_map = gcc_parent_map_0,
  1179. .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
  1180. .enable_safe_config = true,
  1181. .flags = HW_CLK_CTRL_MODE,
  1182. .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
  1183. .clkr.vdd_data = {
  1184. .vdd_classes = gcc_pineapple_regulators,
  1185. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1186. .num_rate_max = VDD_NUM,
  1187. .rate_max = (unsigned long[VDD_NUM]) {
  1188. [VDD_LOWER] = 75000000,
  1189. [VDD_LOW] = 120000000},
  1190. },
  1191. };
  1192. static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
  1193. .name = "gcc_qupv3_wrap1_s1_clk_src",
  1194. .parent_data = gcc_parent_data_0,
  1195. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1196. .flags = CLK_SET_RATE_PARENT,
  1197. .ops = &clk_rcg2_ops,
  1198. };
  1199. static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
  1200. .cmd_rcgr = 0x18148,
  1201. .mnd_width = 16,
  1202. .hid_width = 5,
  1203. .parent_map = gcc_parent_map_0,
  1204. .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
  1205. .enable_safe_config = true,
  1206. .flags = HW_CLK_CTRL_MODE,
  1207. .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
  1208. .clkr.vdd_data = {
  1209. .vdd_classes = gcc_pineapple_regulators,
  1210. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1211. .num_rate_max = VDD_NUM,
  1212. .rate_max = (unsigned long[VDD_NUM]) {
  1213. [VDD_LOWER] = 75000000,
  1214. [VDD_LOW] = 120000000},
  1215. },
  1216. };
  1217. static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s3_clk_src[] = {
  1218. F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
  1219. F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
  1220. F(19200000, P_BI_TCXO, 1, 0, 0),
  1221. F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
  1222. F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
  1223. F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
  1224. F(51200000, P_GCC_GPLL0_OUT_EVEN, 1, 64, 375),
  1225. F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
  1226. F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
  1227. F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
  1228. F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
  1229. F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
  1230. { }
  1231. };
  1232. static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
  1233. .name = "gcc_qupv3_wrap1_s3_clk_src",
  1234. .parent_data = gcc_parent_data_0,
  1235. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1236. .flags = CLK_SET_RATE_PARENT,
  1237. .ops = &clk_rcg2_ops,
  1238. };
  1239. static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
  1240. .cmd_rcgr = 0x18290,
  1241. .mnd_width = 16,
  1242. .hid_width = 5,
  1243. .parent_map = gcc_parent_map_0,
  1244. .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src,
  1245. .enable_safe_config = true,
  1246. .flags = HW_CLK_CTRL_MODE,
  1247. .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
  1248. .clkr.vdd_data = {
  1249. .vdd_classes = gcc_pineapple_regulators,
  1250. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1251. .num_rate_max = VDD_NUM,
  1252. .rate_max = (unsigned long[VDD_NUM]) {
  1253. [VDD_LOWER] = 75000000,
  1254. [VDD_LOW] = 100000000},
  1255. },
  1256. };
  1257. static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
  1258. .name = "gcc_qupv3_wrap1_s4_clk_src",
  1259. .parent_data = gcc_parent_data_0,
  1260. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1261. .flags = CLK_SET_RATE_PARENT,
  1262. .ops = &clk_rcg2_ops,
  1263. };
  1264. static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
  1265. .cmd_rcgr = 0x183c8,
  1266. .mnd_width = 16,
  1267. .hid_width = 5,
  1268. .parent_map = gcc_parent_map_0,
  1269. .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
  1270. .enable_safe_config = true,
  1271. .flags = HW_CLK_CTRL_MODE,
  1272. .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
  1273. .clkr.vdd_data = {
  1274. .vdd_classes = gcc_pineapple_regulators,
  1275. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1276. .num_rate_max = VDD_NUM,
  1277. .rate_max = (unsigned long[VDD_NUM]) {
  1278. [VDD_LOWER] = 75000000,
  1279. [VDD_LOW] = 120000000},
  1280. },
  1281. };
  1282. static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
  1283. .name = "gcc_qupv3_wrap1_s5_clk_src",
  1284. .parent_data = gcc_parent_data_0,
  1285. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1286. .flags = CLK_SET_RATE_PARENT,
  1287. .ops = &clk_rcg2_ops,
  1288. };
  1289. static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
  1290. .cmd_rcgr = 0x18500,
  1291. .mnd_width = 16,
  1292. .hid_width = 5,
  1293. .parent_map = gcc_parent_map_0,
  1294. .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src,
  1295. .enable_safe_config = true,
  1296. .flags = HW_CLK_CTRL_MODE,
  1297. .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
  1298. .clkr.vdd_data = {
  1299. .vdd_classes = gcc_pineapple_regulators,
  1300. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1301. .num_rate_max = VDD_NUM,
  1302. .rate_max = (unsigned long[VDD_NUM]) {
  1303. [VDD_LOWER] = 75000000,
  1304. [VDD_LOW] = 100000000},
  1305. },
  1306. };
  1307. static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
  1308. .name = "gcc_qupv3_wrap1_s6_clk_src",
  1309. .parent_data = gcc_parent_data_0,
  1310. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1311. .flags = CLK_SET_RATE_PARENT,
  1312. .ops = &clk_rcg2_ops,
  1313. };
  1314. static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
  1315. .cmd_rcgr = 0x18638,
  1316. .mnd_width = 16,
  1317. .hid_width = 5,
  1318. .parent_map = gcc_parent_map_0,
  1319. .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
  1320. .enable_safe_config = true,
  1321. .flags = HW_CLK_CTRL_MODE,
  1322. .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
  1323. .clkr.vdd_data = {
  1324. .vdd_classes = gcc_pineapple_regulators,
  1325. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1326. .num_rate_max = VDD_NUM,
  1327. .rate_max = (unsigned long[VDD_NUM]) {
  1328. [VDD_LOWER] = 75000000,
  1329. [VDD_LOW] = 120000000},
  1330. },
  1331. };
  1332. static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = {
  1333. .name = "gcc_qupv3_wrap1_s7_clk_src",
  1334. .parent_data = gcc_parent_data_0,
  1335. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1336. .flags = CLK_SET_RATE_PARENT,
  1337. .ops = &clk_rcg2_ops,
  1338. };
  1339. static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = {
  1340. .cmd_rcgr = 0x18770,
  1341. .mnd_width = 16,
  1342. .hid_width = 5,
  1343. .parent_map = gcc_parent_map_0,
  1344. .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src,
  1345. .enable_safe_config = true,
  1346. .flags = HW_CLK_CTRL_MODE,
  1347. .clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init,
  1348. .clkr.vdd_data = {
  1349. .vdd_classes = gcc_pineapple_regulators,
  1350. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1351. .num_rate_max = VDD_NUM,
  1352. .rate_max = (unsigned long[VDD_NUM]) {
  1353. [VDD_LOWER] = 75000000,
  1354. [VDD_LOW] = 100000000},
  1355. },
  1356. };
  1357. static const struct freq_tbl ftbl_gcc_qupv3_wrap2_ibi_ctrl_0_clk_src[] = {
  1358. F(37500000, P_GCC_GPLL0_OUT_EVEN, 8, 0, 0),
  1359. { }
  1360. };
  1361. static struct clk_rcg2 gcc_qupv3_wrap2_ibi_ctrl_0_clk_src = {
  1362. .cmd_rcgr = 0x1e9d4,
  1363. .mnd_width = 0,
  1364. .hid_width = 5,
  1365. .parent_map = gcc_parent_map_2,
  1366. .freq_tbl = ftbl_gcc_qupv3_wrap2_ibi_ctrl_0_clk_src,
  1367. .enable_safe_config = true,
  1368. .flags = HW_CLK_CTRL_MODE,
  1369. .clkr.hw.init = &(const struct clk_init_data){
  1370. .name = "gcc_qupv3_wrap2_ibi_ctrl_0_clk_src",
  1371. .parent_data = gcc_parent_data_2,
  1372. .num_parents = ARRAY_SIZE(gcc_parent_data_2),
  1373. .flags = CLK_SET_RATE_PARENT,
  1374. .ops = &clk_rcg2_ops,
  1375. },
  1376. .clkr.vdd_data = {
  1377. .vdd_classes = gcc_pineapple_regulators,
  1378. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1379. .num_rate_max = VDD_NUM,
  1380. .rate_max = (unsigned long[VDD_NUM]) {
  1381. [VDD_LOWER] = 37500000},
  1382. },
  1383. };
  1384. static struct clk_init_data gcc_qupv3_wrap2_s0_clk_src_init = {
  1385. .name = "gcc_qupv3_wrap2_s0_clk_src",
  1386. .parent_data = gcc_parent_data_0,
  1387. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1388. .flags = CLK_SET_RATE_PARENT,
  1389. .ops = &clk_rcg2_ops,
  1390. };
  1391. static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
  1392. .cmd_rcgr = 0x1e010,
  1393. .mnd_width = 16,
  1394. .hid_width = 5,
  1395. .parent_map = gcc_parent_map_0,
  1396. .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
  1397. .enable_safe_config = true,
  1398. .flags = HW_CLK_CTRL_MODE,
  1399. .clkr.hw.init = &gcc_qupv3_wrap2_s0_clk_src_init,
  1400. .clkr.vdd_data = {
  1401. .vdd_classes = gcc_pineapple_regulators,
  1402. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1403. .num_rate_max = VDD_NUM,
  1404. .rate_max = (unsigned long[VDD_NUM]) {
  1405. [VDD_LOWER] = 75000000,
  1406. [VDD_LOW] = 120000000},
  1407. },
  1408. };
  1409. static struct clk_init_data gcc_qupv3_wrap2_s1_clk_src_init = {
  1410. .name = "gcc_qupv3_wrap2_s1_clk_src",
  1411. .parent_data = gcc_parent_data_0,
  1412. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1413. .flags = CLK_SET_RATE_PARENT,
  1414. .ops = &clk_rcg2_ops,
  1415. };
  1416. static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
  1417. .cmd_rcgr = 0x1e148,
  1418. .mnd_width = 16,
  1419. .hid_width = 5,
  1420. .parent_map = gcc_parent_map_0,
  1421. .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
  1422. .enable_safe_config = true,
  1423. .flags = HW_CLK_CTRL_MODE,
  1424. .clkr.hw.init = &gcc_qupv3_wrap2_s1_clk_src_init,
  1425. .clkr.vdd_data = {
  1426. .vdd_classes = gcc_pineapple_regulators,
  1427. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1428. .num_rate_max = VDD_NUM,
  1429. .rate_max = (unsigned long[VDD_NUM]) {
  1430. [VDD_LOWER] = 75000000,
  1431. [VDD_LOW] = 120000000},
  1432. },
  1433. };
  1434. static struct clk_init_data gcc_qupv3_wrap2_s2_clk_src_init = {
  1435. .name = "gcc_qupv3_wrap2_s2_clk_src",
  1436. .parent_data = gcc_parent_data_0,
  1437. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1438. .flags = CLK_SET_RATE_PARENT,
  1439. .ops = &clk_rcg2_ops,
  1440. };
  1441. static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
  1442. .cmd_rcgr = 0x1e280,
  1443. .mnd_width = 16,
  1444. .hid_width = 5,
  1445. .parent_map = gcc_parent_map_0,
  1446. .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
  1447. .enable_safe_config = true,
  1448. .flags = HW_CLK_CTRL_MODE,
  1449. .clkr.hw.init = &gcc_qupv3_wrap2_s2_clk_src_init,
  1450. .clkr.vdd_data = {
  1451. .vdd_classes = gcc_pineapple_regulators,
  1452. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1453. .num_rate_max = VDD_NUM,
  1454. .rate_max = (unsigned long[VDD_NUM]) {
  1455. [VDD_LOWER] = 75000000,
  1456. [VDD_LOW] = 120000000},
  1457. },
  1458. };
  1459. static struct clk_init_data gcc_qupv3_wrap2_s3_clk_src_init = {
  1460. .name = "gcc_qupv3_wrap2_s3_clk_src",
  1461. .parent_data = gcc_parent_data_0,
  1462. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1463. .flags = CLK_SET_RATE_PARENT,
  1464. .ops = &clk_rcg2_ops,
  1465. };
  1466. static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
  1467. .cmd_rcgr = 0x1e3b8,
  1468. .mnd_width = 16,
  1469. .hid_width = 5,
  1470. .parent_map = gcc_parent_map_0,
  1471. .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
  1472. .enable_safe_config = true,
  1473. .flags = HW_CLK_CTRL_MODE,
  1474. .clkr.hw.init = &gcc_qupv3_wrap2_s3_clk_src_init,
  1475. .clkr.vdd_data = {
  1476. .vdd_classes = gcc_pineapple_regulators,
  1477. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1478. .num_rate_max = VDD_NUM,
  1479. .rate_max = (unsigned long[VDD_NUM]) {
  1480. [VDD_LOWER] = 75000000,
  1481. [VDD_LOW] = 120000000},
  1482. },
  1483. };
  1484. static struct clk_init_data gcc_qupv3_wrap2_s4_clk_src_init = {
  1485. .name = "gcc_qupv3_wrap2_s4_clk_src",
  1486. .parent_data = gcc_parent_data_0,
  1487. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1488. .flags = CLK_SET_RATE_PARENT,
  1489. .ops = &clk_rcg2_ops,
  1490. };
  1491. static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
  1492. .cmd_rcgr = 0x1e4f0,
  1493. .mnd_width = 16,
  1494. .hid_width = 5,
  1495. .parent_map = gcc_parent_map_0,
  1496. .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src,
  1497. .enable_safe_config = true,
  1498. .flags = HW_CLK_CTRL_MODE,
  1499. .clkr.hw.init = &gcc_qupv3_wrap2_s4_clk_src_init,
  1500. .clkr.vdd_data = {
  1501. .vdd_classes = gcc_pineapple_regulators,
  1502. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1503. .num_rate_max = VDD_NUM,
  1504. .rate_max = (unsigned long[VDD_NUM]) {
  1505. [VDD_LOWER] = 75000000,
  1506. [VDD_LOW] = 100000000},
  1507. },
  1508. };
  1509. static struct clk_init_data gcc_qupv3_wrap2_s5_clk_src_init = {
  1510. .name = "gcc_qupv3_wrap2_s5_clk_src",
  1511. .parent_data = gcc_parent_data_0,
  1512. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1513. .flags = CLK_SET_RATE_PARENT,
  1514. .ops = &clk_rcg2_ops,
  1515. };
  1516. static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
  1517. .cmd_rcgr = 0x1e628,
  1518. .mnd_width = 16,
  1519. .hid_width = 5,
  1520. .parent_map = gcc_parent_map_0,
  1521. .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src,
  1522. .enable_safe_config = true,
  1523. .flags = HW_CLK_CTRL_MODE,
  1524. .clkr.hw.init = &gcc_qupv3_wrap2_s5_clk_src_init,
  1525. .clkr.vdd_data = {
  1526. .vdd_classes = gcc_pineapple_regulators,
  1527. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1528. .num_rate_max = VDD_NUM,
  1529. .rate_max = (unsigned long[VDD_NUM]) {
  1530. [VDD_LOWER] = 75000000,
  1531. [VDD_LOW] = 100000000},
  1532. },
  1533. };
  1534. static const struct freq_tbl ftbl_gcc_qupv3_wrap2_s6_clk_src[] = {
  1535. F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
  1536. F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
  1537. F(19200000, P_BI_TCXO, 1, 0, 0),
  1538. F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
  1539. F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
  1540. F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
  1541. F(51200000, P_GCC_GPLL0_OUT_EVEN, 1, 64, 375),
  1542. F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
  1543. F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
  1544. F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
  1545. F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
  1546. F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
  1547. F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
  1548. F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
  1549. F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
  1550. F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),
  1551. F(128000000, P_GCC_GPLL0_OUT_MAIN, 1, 16, 75),
  1552. { }
  1553. };
  1554. static struct clk_init_data gcc_qupv3_wrap2_s6_clk_src_init = {
  1555. .name = "gcc_qupv3_wrap2_s6_clk_src",
  1556. .parent_data = gcc_parent_data_10,
  1557. .num_parents = ARRAY_SIZE(gcc_parent_data_10),
  1558. .flags = CLK_SET_RATE_PARENT,
  1559. .ops = &clk_rcg2_ops,
  1560. };
  1561. static struct clk_rcg2 gcc_qupv3_wrap2_s6_clk_src = {
  1562. .cmd_rcgr = 0x1e760,
  1563. .mnd_width = 16,
  1564. .hid_width = 5,
  1565. .parent_map = gcc_parent_map_10,
  1566. .freq_tbl = ftbl_gcc_qupv3_wrap2_s6_clk_src,
  1567. .enable_safe_config = true,
  1568. .flags = HW_CLK_CTRL_MODE,
  1569. .clkr.hw.init = &gcc_qupv3_wrap2_s6_clk_src_init,
  1570. .clkr.vdd_data = {
  1571. .vdd_classes = gcc_pineapple_regulators,
  1572. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1573. .num_rate_max = VDD_NUM,
  1574. .rate_max = (unsigned long[VDD_NUM]) {
  1575. [VDD_LOWER] = 75000000,
  1576. [VDD_LOW] = 128000000},
  1577. },
  1578. };
  1579. static struct clk_init_data gcc_qupv3_wrap2_s7_clk_src_init = {
  1580. .name = "gcc_qupv3_wrap2_s7_clk_src",
  1581. .parent_data = gcc_parent_data_0,
  1582. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1583. .flags = CLK_SET_RATE_PARENT,
  1584. .ops = &clk_rcg2_ops,
  1585. };
  1586. static struct clk_rcg2 gcc_qupv3_wrap2_s7_clk_src = {
  1587. .cmd_rcgr = 0x1e898,
  1588. .mnd_width = 16,
  1589. .hid_width = 5,
  1590. .parent_map = gcc_parent_map_0,
  1591. .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src,
  1592. .enable_safe_config = true,
  1593. .flags = HW_CLK_CTRL_MODE,
  1594. .clkr.hw.init = &gcc_qupv3_wrap2_s7_clk_src_init,
  1595. .clkr.vdd_data = {
  1596. .vdd_classes = gcc_pineapple_regulators,
  1597. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1598. .num_rate_max = VDD_NUM,
  1599. .rate_max = (unsigned long[VDD_NUM]) {
  1600. [VDD_LOWER] = 75000000,
  1601. [VDD_LOW] = 100000000},
  1602. },
  1603. };
  1604. static const struct freq_tbl ftbl_gcc_qupv3_wrap3_qspi_ref_clk_src[] = {
  1605. F(300000000, P_GCC_GPLL0_OUT_EVEN, 1, 0, 0),
  1606. F(400000000, P_GCC_GPLL0_OUT_MAIN, 1.5, 0, 0),
  1607. { }
  1608. };
  1609. static struct clk_init_data gcc_qupv3_wrap3_qspi_ref_clk_src_init = {
  1610. .name = "gcc_qupv3_wrap3_qspi_ref_clk_src",
  1611. .parent_data = gcc_parent_data_0,
  1612. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1613. .flags = CLK_SET_RATE_PARENT,
  1614. .ops = &clk_rcg2_ops,
  1615. };
  1616. static struct clk_rcg2 gcc_qupv3_wrap3_qspi_ref_clk_src = {
  1617. .cmd_rcgr = 0x19018,
  1618. .mnd_width = 16,
  1619. .hid_width = 5,
  1620. .parent_map = gcc_parent_map_0,
  1621. .freq_tbl = ftbl_gcc_qupv3_wrap3_qspi_ref_clk_src,
  1622. .enable_safe_config = true,
  1623. .flags = HW_CLK_CTRL_MODE,
  1624. .clkr.hw.init = &gcc_qupv3_wrap3_qspi_ref_clk_src_init,
  1625. .clkr.vdd_data = {
  1626. .vdd_classes = gcc_pineapple_regulators,
  1627. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1628. .num_rate_max = VDD_NUM,
  1629. .rate_max = (unsigned long[VDD_NUM]) {
  1630. [VDD_LOWER] = 300000000,
  1631. [VDD_LOW] = 400000000},
  1632. },
  1633. };
  1634. static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
  1635. F(300000, P_BI_TCXO, 32, 1, 2),
  1636. F(400000, P_BI_TCXO, 12, 1, 4),
  1637. F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
  1638. F(37500000, P_GCC_GPLL0_OUT_EVEN, 8, 0, 0),
  1639. F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
  1640. F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
  1641. F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
  1642. { }
  1643. };
  1644. static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
  1645. .cmd_rcgr = 0x14018,
  1646. .mnd_width = 8,
  1647. .hid_width = 5,
  1648. .parent_map = gcc_parent_map_11,
  1649. .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
  1650. .enable_safe_config = true,
  1651. .flags = HW_CLK_CTRL_MODE,
  1652. .clkr.hw.init = &(const struct clk_init_data){
  1653. .name = "gcc_sdcc2_apps_clk_src",
  1654. .parent_data = gcc_parent_data_11,
  1655. .num_parents = ARRAY_SIZE(gcc_parent_data_11),
  1656. .flags = CLK_SET_RATE_PARENT,
  1657. .ops = &clk_rcg2_ops,
  1658. },
  1659. .clkr.vdd_data = {
  1660. .vdd_classes = gcc_pineapple_regulators,
  1661. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1662. .num_rate_max = VDD_NUM,
  1663. .rate_max = (unsigned long[VDD_NUM]) {
  1664. [VDD_LOWER] = 100000000,
  1665. [VDD_LOW_L1] = 202000000},
  1666. },
  1667. };
  1668. static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
  1669. F(400000, P_BI_TCXO, 12, 1, 4),
  1670. F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
  1671. F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
  1672. { }
  1673. };
  1674. static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
  1675. .cmd_rcgr = 0x16018,
  1676. .mnd_width = 8,
  1677. .hid_width = 5,
  1678. .parent_map = gcc_parent_map_0,
  1679. .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
  1680. .enable_safe_config = true,
  1681. .flags = HW_CLK_CTRL_MODE,
  1682. .clkr.hw.init = &(const struct clk_init_data){
  1683. .name = "gcc_sdcc4_apps_clk_src",
  1684. .parent_data = gcc_parent_data_0,
  1685. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1686. .flags = CLK_SET_RATE_PARENT,
  1687. .ops = &clk_rcg2_ops,
  1688. },
  1689. .clkr.vdd_data = {
  1690. .vdd_classes = gcc_pineapple_regulators,
  1691. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1692. .num_rate_max = VDD_NUM,
  1693. .rate_max = (unsigned long[VDD_NUM]) {
  1694. [VDD_LOWER] = 75000000},
  1695. },
  1696. };
  1697. static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
  1698. F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
  1699. F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
  1700. F(201500000, P_GCC_GPLL4_OUT_MAIN, 4, 0, 0),
  1701. F(403000000, P_GCC_GPLL4_OUT_MAIN, 2, 0, 0),
  1702. { }
  1703. };
  1704. static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
  1705. .cmd_rcgr = 0x77030,
  1706. .mnd_width = 8,
  1707. .hid_width = 5,
  1708. .parent_map = gcc_parent_map_3,
  1709. .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
  1710. .enable_safe_config = true,
  1711. .flags = HW_CLK_CTRL_MODE,
  1712. .clkr.hw.init = &(const struct clk_init_data){
  1713. .name = "gcc_ufs_phy_axi_clk_src",
  1714. .parent_data = gcc_parent_data_3,
  1715. .num_parents = ARRAY_SIZE(gcc_parent_data_3),
  1716. .flags = CLK_SET_RATE_PARENT,
  1717. .ops = &clk_rcg2_ops,
  1718. },
  1719. .clkr.vdd_data = {
  1720. .vdd_classes = gcc_pineapple_regulators,
  1721. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1722. .num_rate_max = VDD_NUM,
  1723. .rate_max = (unsigned long[VDD_NUM]) {
  1724. [VDD_LOWER] = 100000000,
  1725. [VDD_LOW] = 201500000,
  1726. [VDD_NOMINAL] = 403000000},
  1727. },
  1728. };
  1729. static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
  1730. F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
  1731. F(201500000, P_GCC_GPLL4_OUT_MAIN, 4, 0, 0),
  1732. F(403000000, P_GCC_GPLL4_OUT_MAIN, 2, 0, 0),
  1733. { }
  1734. };
  1735. static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
  1736. .cmd_rcgr = 0x77080,
  1737. .mnd_width = 0,
  1738. .hid_width = 5,
  1739. .parent_map = gcc_parent_map_3,
  1740. .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
  1741. .enable_safe_config = true,
  1742. .flags = HW_CLK_CTRL_MODE,
  1743. .clkr.hw.init = &(const struct clk_init_data){
  1744. .name = "gcc_ufs_phy_ice_core_clk_src",
  1745. .parent_data = gcc_parent_data_3,
  1746. .num_parents = ARRAY_SIZE(gcc_parent_data_3),
  1747. .flags = CLK_SET_RATE_PARENT,
  1748. .ops = &clk_rcg2_ops,
  1749. },
  1750. .clkr.vdd_data = {
  1751. .vdd_classes = gcc_pineapple_regulators,
  1752. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1753. .num_rate_max = VDD_NUM,
  1754. .rate_max = (unsigned long[VDD_NUM]) {
  1755. [VDD_LOWER] = 100000000,
  1756. [VDD_LOW] = 201500000,
  1757. [VDD_NOMINAL] = 403000000},
  1758. },
  1759. };
  1760. static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
  1761. F(9600000, P_BI_TCXO, 2, 0, 0),
  1762. F(19200000, P_BI_TCXO, 1, 0, 0),
  1763. { }
  1764. };
  1765. static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
  1766. .cmd_rcgr = 0x770b4,
  1767. .mnd_width = 0,
  1768. .hid_width = 5,
  1769. .parent_map = gcc_parent_map_5,
  1770. .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
  1771. .enable_safe_config = true,
  1772. .flags = HW_CLK_CTRL_MODE,
  1773. .clkr.hw.init = &(const struct clk_init_data){
  1774. .name = "gcc_ufs_phy_phy_aux_clk_src",
  1775. .parent_data = gcc_parent_data_5,
  1776. .num_parents = ARRAY_SIZE(gcc_parent_data_5),
  1777. .flags = CLK_SET_RATE_PARENT,
  1778. .ops = &clk_rcg2_ops,
  1779. },
  1780. .clkr.vdd_data = {
  1781. .vdd_class = &vdd_cx,
  1782. .num_rate_max = VDD_NUM,
  1783. .rate_max = (unsigned long[VDD_NUM]) {
  1784. [VDD_LOWER] = 19200000},
  1785. },
  1786. };
  1787. static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
  1788. .cmd_rcgr = 0x77098,
  1789. .mnd_width = 0,
  1790. .hid_width = 5,
  1791. .parent_map = gcc_parent_map_3,
  1792. .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
  1793. .enable_safe_config = true,
  1794. .flags = HW_CLK_CTRL_MODE,
  1795. .clkr.hw.init = &(const struct clk_init_data){
  1796. .name = "gcc_ufs_phy_unipro_core_clk_src",
  1797. .parent_data = gcc_parent_data_3,
  1798. .num_parents = ARRAY_SIZE(gcc_parent_data_3),
  1799. .flags = CLK_SET_RATE_PARENT,
  1800. .ops = &clk_rcg2_ops,
  1801. },
  1802. .clkr.vdd_data = {
  1803. .vdd_classes = gcc_pineapple_regulators,
  1804. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1805. .num_rate_max = VDD_NUM,
  1806. .rate_max = (unsigned long[VDD_NUM]) {
  1807. [VDD_LOWER] = 100000000,
  1808. [VDD_LOW] = 201500000,
  1809. [VDD_NOMINAL] = 403000000},
  1810. },
  1811. };
  1812. static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
  1813. F(66666667, P_GCC_GPLL0_OUT_EVEN, 4.5, 0, 0),
  1814. F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0),
  1815. F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
  1816. F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
  1817. { }
  1818. };
  1819. static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
  1820. .cmd_rcgr = 0x3902c,
  1821. .mnd_width = 8,
  1822. .hid_width = 5,
  1823. .parent_map = gcc_parent_map_0,
  1824. .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
  1825. .enable_safe_config = true,
  1826. .flags = HW_CLK_CTRL_MODE,
  1827. .clkr.hw.init = &(const struct clk_init_data){
  1828. .name = "gcc_usb30_prim_master_clk_src",
  1829. .parent_data = gcc_parent_data_0,
  1830. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1831. .flags = CLK_SET_RATE_PARENT,
  1832. .ops = &clk_rcg2_ops,
  1833. },
  1834. .clkr.vdd_data = {
  1835. .vdd_classes = gcc_pineapple_regulators,
  1836. .num_vdd_classes = ARRAY_SIZE(gcc_pineapple_regulators),
  1837. .num_rate_max = VDD_NUM,
  1838. .rate_max = (unsigned long[VDD_NUM]) {
  1839. [VDD_LOWER] = 66666667,
  1840. [VDD_LOW] = 133333333,
  1841. [VDD_NOMINAL] = 200000000,
  1842. [VDD_HIGH] = 240000000},
  1843. },
  1844. };
  1845. static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
  1846. .cmd_rcgr = 0x39044,
  1847. .mnd_width = 0,
  1848. .hid_width = 5,
  1849. .parent_map = gcc_parent_map_0,
  1850. .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
  1851. .enable_safe_config = true,
  1852. .flags = HW_CLK_CTRL_MODE,
  1853. .clkr.hw.init = &(const struct clk_init_data){
  1854. .name = "gcc_usb30_prim_mock_utmi_clk_src",
  1855. .parent_data = gcc_parent_data_0,
  1856. .num_parents = ARRAY_SIZE(gcc_parent_data_0),
  1857. .flags = CLK_SET_RATE_PARENT,
  1858. .ops = &clk_rcg2_ops,
  1859. },
  1860. .clkr.vdd_data = {
  1861. .vdd_class = &vdd_cx,
  1862. .num_rate_max = VDD_NUM,
  1863. .rate_max = (unsigned long[VDD_NUM]) {
  1864. [VDD_LOWER] = 19200000},
  1865. },
  1866. };
  1867. static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
  1868. .cmd_rcgr = 0x39070,
  1869. .mnd_width = 0,
  1870. .hid_width = 5,
  1871. .parent_map = gcc_parent_map_4,
  1872. .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
  1873. .enable_safe_config = true,
  1874. .flags = HW_CLK_CTRL_MODE,
  1875. .clkr.hw.init = &(const struct clk_init_data){
  1876. .name = "gcc_usb3_prim_phy_aux_clk_src",
  1877. .parent_data = gcc_parent_data_4,
  1878. .num_parents = ARRAY_SIZE(gcc_parent_data_4),
  1879. .flags = CLK_SET_RATE_PARENT,
  1880. .ops = &clk_rcg2_ops,
  1881. },
  1882. .clkr.vdd_data = {
  1883. .vdd_class = &vdd_cx,
  1884. .num_rate_max = VDD_NUM,
  1885. .rate_max = (unsigned long[VDD_NUM]) {
  1886. [VDD_LOWER] = 19200000},
  1887. },
  1888. };
  1889. static struct clk_regmap_div gcc_qupv3_wrap1_s2_clk_src = {
  1890. .reg = 0x18280,
  1891. .shift = 0,
  1892. .width = 4,
  1893. .clkr.hw.init = &(const struct clk_init_data) {
  1894. .name = "gcc_qupv3_wrap1_s2_clk_src",
  1895. .parent_hws = (const struct clk_hw*[]){
  1896. &gcc_qupv3_wrap1_qspi_ref_clk_src.clkr.hw,
  1897. },
  1898. .num_parents = 1,
  1899. .flags = CLK_SET_RATE_PARENT,
  1900. .ops = &clk_regmap_div_ro_ops,
  1901. },
  1902. };
  1903. static struct clk_regmap_div gcc_qupv3_wrap3_s0_clk_src = {
  1904. .reg = 0x19010,
  1905. .shift = 0,
  1906. .width = 4,
  1907. .clkr.hw.init = &(const struct clk_init_data) {
  1908. .name = "gcc_qupv3_wrap3_s0_clk_src",
  1909. .parent_hws = (const struct clk_hw*[]){
  1910. &gcc_qupv3_wrap3_qspi_ref_clk_src.clkr.hw,
  1911. },
  1912. .num_parents = 1,
  1913. .flags = CLK_SET_RATE_PARENT,
  1914. .ops = &clk_regmap_div_ro_ops,
  1915. },
  1916. };
  1917. static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
  1918. .reg = 0x3905c,
  1919. .shift = 0,
  1920. .width = 4,
  1921. .clkr.hw.init = &(const struct clk_init_data) {
  1922. .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
  1923. .parent_hws = (const struct clk_hw*[]){
  1924. &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
  1925. },
  1926. .num_parents = 1,
  1927. .flags = CLK_SET_RATE_PARENT,
  1928. .ops = &clk_regmap_div_ro_ops,
  1929. },
  1930. };
  1931. static struct clk_branch gcc_aggre_noc_pcie_axi_clk = {
  1932. .halt_reg = 0x10064,
  1933. .halt_check = BRANCH_HALT_SKIP,
  1934. .hwcg_reg = 0x10064,
  1935. .hwcg_bit = 1,
  1936. .clkr = {
  1937. .enable_reg = 0x52000,
  1938. .enable_mask = BIT(12),
  1939. .hw.init = &(const struct clk_init_data){
  1940. .name = "gcc_aggre_noc_pcie_axi_clk",
  1941. .ops = &clk_branch2_ops,
  1942. },
  1943. },
  1944. };
  1945. static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
  1946. .halt_reg = 0x770e4,
  1947. .halt_check = BRANCH_HALT_VOTED,
  1948. .hwcg_reg = 0x770e4,
  1949. .hwcg_bit = 1,
  1950. .clkr = {
  1951. .enable_reg = 0x770e4,
  1952. .enable_mask = BIT(0),
  1953. .hw.init = &(const struct clk_init_data){
  1954. .name = "gcc_aggre_ufs_phy_axi_clk",
  1955. .parent_hws = (const struct clk_hw*[]){
  1956. &gcc_ufs_phy_axi_clk_src.clkr.hw,
  1957. },
  1958. .num_parents = 1,
  1959. .flags = CLK_SET_RATE_PARENT,
  1960. .ops = &clk_branch2_ops,
  1961. },
  1962. },
  1963. };
  1964. static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
  1965. .halt_reg = 0x770e4,
  1966. .halt_check = BRANCH_HALT_VOTED,
  1967. .hwcg_reg = 0x770e4,
  1968. .hwcg_bit = 1,
  1969. .clkr = {
  1970. .enable_reg = 0x770e4,
  1971. .enable_mask = BIT(1),
  1972. .hw.init = &(const struct clk_init_data){
  1973. .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
  1974. .parent_hws = (const struct clk_hw*[]){
  1975. &gcc_ufs_phy_axi_clk_src.clkr.hw,
  1976. },
  1977. .num_parents = 1,
  1978. .flags = CLK_SET_RATE_PARENT,
  1979. .ops = &clk_branch2_hw_ctl_ops,
  1980. },
  1981. },
  1982. };
  1983. static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
  1984. .halt_reg = 0x3908c,
  1985. .halt_check = BRANCH_HALT_VOTED,
  1986. .hwcg_reg = 0x3908c,
  1987. .hwcg_bit = 1,
  1988. .clkr = {
  1989. .enable_reg = 0x3908c,
  1990. .enable_mask = BIT(0),
  1991. .hw.init = &(const struct clk_init_data){
  1992. .name = "gcc_aggre_usb3_prim_axi_clk",
  1993. .parent_hws = (const struct clk_hw*[]){
  1994. &gcc_usb30_prim_master_clk_src.clkr.hw,
  1995. },
  1996. .num_parents = 1,
  1997. .flags = CLK_SET_RATE_PARENT,
  1998. .ops = &clk_branch2_ops,
  1999. },
  2000. },
  2001. };
  2002. static struct clk_branch gcc_boot_rom_ahb_clk = {
  2003. .halt_reg = 0x38004,
  2004. .halt_check = BRANCH_HALT_VOTED,
  2005. .hwcg_reg = 0x38004,
  2006. .hwcg_bit = 1,
  2007. .clkr = {
  2008. .enable_reg = 0x52000,
  2009. .enable_mask = BIT(10),
  2010. .hw.init = &(const struct clk_init_data){
  2011. .name = "gcc_boot_rom_ahb_clk",
  2012. .ops = &clk_branch2_ops,
  2013. },
  2014. },
  2015. };
  2016. static struct clk_branch gcc_camera_hf_axi_clk = {
  2017. .halt_reg = 0x26010,
  2018. .halt_check = BRANCH_HALT_SKIP,
  2019. .hwcg_reg = 0x26010,
  2020. .hwcg_bit = 1,
  2021. .clkr = {
  2022. .enable_reg = 0x26010,
  2023. .enable_mask = BIT(0),
  2024. .hw.init = &(const struct clk_init_data){
  2025. .name = "gcc_camera_hf_axi_clk",
  2026. .ops = &clk_branch2_ops,
  2027. },
  2028. },
  2029. };
  2030. static struct clk_branch gcc_camera_sf_axi_clk = {
  2031. .halt_reg = 0x2601c,
  2032. .halt_check = BRANCH_HALT_SKIP,
  2033. .hwcg_reg = 0x2601c,
  2034. .hwcg_bit = 1,
  2035. .clkr = {
  2036. .enable_reg = 0x2601c,
  2037. .enable_mask = BIT(0),
  2038. .hw.init = &(const struct clk_init_data){
  2039. .name = "gcc_camera_sf_axi_clk",
  2040. .ops = &clk_branch2_ops,
  2041. },
  2042. },
  2043. };
  2044. static struct clk_branch gcc_cfg_noc_pcie_anoc_ahb_clk = {
  2045. .halt_reg = 0x10050,
  2046. .halt_check = BRANCH_HALT_SKIP,
  2047. .hwcg_reg = 0x10050,
  2048. .hwcg_bit = 1,
  2049. .clkr = {
  2050. .enable_reg = 0x52000,
  2051. .enable_mask = BIT(20),
  2052. .hw.init = &(const struct clk_init_data){
  2053. .name = "gcc_cfg_noc_pcie_anoc_ahb_clk",
  2054. .ops = &clk_branch2_ops,
  2055. },
  2056. },
  2057. };
  2058. static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
  2059. .halt_reg = 0x39088,
  2060. .halt_check = BRANCH_HALT_VOTED,
  2061. .hwcg_reg = 0x39088,
  2062. .hwcg_bit = 1,
  2063. .clkr = {
  2064. .enable_reg = 0x39088,
  2065. .enable_mask = BIT(0),
  2066. .hw.init = &(const struct clk_init_data){
  2067. .name = "gcc_cfg_noc_usb3_prim_axi_clk",
  2068. .parent_hws = (const struct clk_hw*[]){
  2069. &gcc_usb30_prim_master_clk_src.clkr.hw,
  2070. },
  2071. .num_parents = 1,
  2072. .flags = CLK_SET_RATE_PARENT,
  2073. .ops = &clk_branch2_ops,
  2074. },
  2075. },
  2076. };
  2077. static struct clk_branch gcc_cnoc_pcie_sf_axi_clk = {
  2078. .halt_reg = 0x10058,
  2079. .halt_check = BRANCH_HALT_VOTED,
  2080. .hwcg_reg = 0x10058,
  2081. .hwcg_bit = 1,
  2082. .clkr = {
  2083. .enable_reg = 0x52008,
  2084. .enable_mask = BIT(6),
  2085. .hw.init = &(const struct clk_init_data){
  2086. .name = "gcc_cnoc_pcie_sf_axi_clk",
  2087. .ops = &clk_branch2_ops,
  2088. },
  2089. },
  2090. };
  2091. static struct clk_branch gcc_cpuss_ubwcp_clk = {
  2092. .halt_reg = 0x63000,
  2093. .halt_check = BRANCH_HALT_VOTED,
  2094. .hwcg_reg = 0x63000,
  2095. .hwcg_bit = 1,
  2096. .clkr = {
  2097. .enable_reg = 0x63000,
  2098. .enable_mask = BIT(0),
  2099. .hw.init = &(const struct clk_init_data){
  2100. .name = "gcc_cpuss_ubwcp_clk",
  2101. .parent_hws = (const struct clk_hw*[]){
  2102. &gcc_cpuss_ubwcp_clk_src.clkr.hw,
  2103. },
  2104. .num_parents = 1,
  2105. .flags = CLK_SET_RATE_PARENT,
  2106. .ops = &clk_branch2_ops,
  2107. },
  2108. },
  2109. };
  2110. static struct clk_branch gcc_ddrss_gpu_axi_clk = {
  2111. .halt_reg = 0x71154,
  2112. .halt_check = BRANCH_HALT_SKIP,
  2113. .hwcg_reg = 0x71154,
  2114. .hwcg_bit = 1,
  2115. .clkr = {
  2116. .enable_reg = 0x71154,
  2117. .enable_mask = BIT(0),
  2118. .hw.init = &(const struct clk_init_data){
  2119. .name = "gcc_ddrss_gpu_axi_clk",
  2120. .ops = &clk_branch2_aon_ops,
  2121. },
  2122. },
  2123. };
  2124. static struct clk_branch gcc_ddrss_pcie_sf_qtb_clk = {
  2125. .halt_reg = 0x10074,
  2126. .halt_check = BRANCH_HALT_SKIP,
  2127. .hwcg_reg = 0x10074,
  2128. .hwcg_bit = 1,
  2129. .clkr = {
  2130. .enable_reg = 0x52000,
  2131. .enable_mask = BIT(19),
  2132. .hw.init = &(const struct clk_init_data){
  2133. .name = "gcc_ddrss_pcie_sf_qtb_clk",
  2134. .ops = &clk_branch2_ops,
  2135. },
  2136. },
  2137. };
  2138. static struct clk_branch gcc_disp_hf_axi_clk = {
  2139. .halt_reg = 0x2700c,
  2140. .halt_check = BRANCH_HALT_SKIP,
  2141. .hwcg_reg = 0x2700c,
  2142. .hwcg_bit = 1,
  2143. .clkr = {
  2144. .enable_reg = 0x2700c,
  2145. .enable_mask = BIT(0),
  2146. .hw.init = &(const struct clk_init_data){
  2147. .name = "gcc_disp_hf_axi_clk",
  2148. .ops = &clk_branch2_ops,
  2149. },
  2150. },
  2151. };
  2152. static struct clk_branch gcc_gp1_clk = {
  2153. .halt_reg = 0x64000,
  2154. .halt_check = BRANCH_HALT,
  2155. .clkr = {
  2156. .enable_reg = 0x64000,
  2157. .enable_mask = BIT(0),
  2158. .hw.init = &(const struct clk_init_data){
  2159. .name = "gcc_gp1_clk",
  2160. .parent_hws = (const struct clk_hw*[]){
  2161. &gcc_gp1_clk_src.clkr.hw,
  2162. },
  2163. .num_parents = 1,
  2164. .flags = CLK_SET_RATE_PARENT,
  2165. .ops = &clk_branch2_ops,
  2166. },
  2167. },
  2168. };
  2169. static struct clk_branch gcc_gp2_clk = {
  2170. .halt_reg = 0x65000,
  2171. .halt_check = BRANCH_HALT,
  2172. .clkr = {
  2173. .enable_reg = 0x65000,
  2174. .enable_mask = BIT(0),
  2175. .hw.init = &(const struct clk_init_data){
  2176. .name = "gcc_gp2_clk",
  2177. .parent_hws = (const struct clk_hw*[]){
  2178. &gcc_gp2_clk_src.clkr.hw,
  2179. },
  2180. .num_parents = 1,
  2181. .flags = CLK_SET_RATE_PARENT,
  2182. .ops = &clk_branch2_ops,
  2183. },
  2184. },
  2185. };
  2186. static struct clk_branch gcc_gp3_clk = {
  2187. .halt_reg = 0x66000,
  2188. .halt_check = BRANCH_HALT,
  2189. .clkr = {
  2190. .enable_reg = 0x66000,
  2191. .enable_mask = BIT(0),
  2192. .hw.init = &(const struct clk_init_data){
  2193. .name = "gcc_gp3_clk",
  2194. .parent_hws = (const struct clk_hw*[]){
  2195. &gcc_gp3_clk_src.clkr.hw,
  2196. },
  2197. .num_parents = 1,
  2198. .flags = CLK_SET_RATE_PARENT,
  2199. .ops = &clk_branch2_ops,
  2200. },
  2201. },
  2202. };
  2203. static struct clk_branch gcc_gpu_gpll0_clk_src = {
  2204. .halt_check = BRANCH_HALT_DELAY,
  2205. .clkr = {
  2206. .enable_reg = 0x52000,
  2207. .enable_mask = BIT(15),
  2208. .hw.init = &(const struct clk_init_data){
  2209. .name = "gcc_gpu_gpll0_clk_src",
  2210. .parent_hws = (const struct clk_hw*[]){
  2211. &gcc_gpll0.clkr.hw,
  2212. },
  2213. .num_parents = 1,
  2214. .flags = CLK_SET_RATE_PARENT,
  2215. .ops = &clk_branch2_ops,
  2216. },
  2217. },
  2218. };
  2219. static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
  2220. .halt_check = BRANCH_HALT_DELAY,
  2221. .clkr = {
  2222. .enable_reg = 0x52000,
  2223. .enable_mask = BIT(16),
  2224. .hw.init = &(const struct clk_init_data){
  2225. .name = "gcc_gpu_gpll0_div_clk_src",
  2226. .parent_hws = (const struct clk_hw*[]){
  2227. &gcc_gpll0_out_even.clkr.hw,
  2228. },
  2229. .num_parents = 1,
  2230. .flags = CLK_SET_RATE_PARENT,
  2231. .ops = &clk_branch2_ops,
  2232. },
  2233. },
  2234. };
  2235. static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
  2236. .halt_reg = 0x71010,
  2237. .halt_check = BRANCH_HALT_VOTED,
  2238. .hwcg_reg = 0x71010,
  2239. .hwcg_bit = 1,
  2240. .clkr = {
  2241. .enable_reg = 0x71010,
  2242. .enable_mask = BIT(0),
  2243. .hw.init = &(const struct clk_init_data){
  2244. .name = "gcc_gpu_memnoc_gfx_clk",
  2245. .flags = CLK_DONT_HOLD_STATE,
  2246. .ops = &clk_branch2_aon_ops,
  2247. },
  2248. },
  2249. };
  2250. static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
  2251. .halt_reg = 0x71018,
  2252. .halt_check = BRANCH_HALT_DELAY,
  2253. .clkr = {
  2254. .enable_reg = 0x71018,
  2255. .enable_mask = BIT(0),
  2256. .hw.init = &(const struct clk_init_data){
  2257. .name = "gcc_gpu_snoc_dvm_gfx_clk",
  2258. .flags = CLK_DONT_HOLD_STATE,
  2259. .ops = &clk_branch2_ops,
  2260. },
  2261. },
  2262. };
  2263. static struct clk_branch gcc_pcie_0_aux_clk = {
  2264. .halt_reg = 0x6b03c,
  2265. .halt_check = BRANCH_HALT_VOTED,
  2266. .clkr = {
  2267. .enable_reg = 0x52008,
  2268. .enable_mask = BIT(3),
  2269. .hw.init = &(const struct clk_init_data){
  2270. .name = "gcc_pcie_0_aux_clk",
  2271. .parent_hws = (const struct clk_hw*[]){
  2272. &gcc_pcie_0_aux_clk_src.clkr.hw,
  2273. },
  2274. .num_parents = 1,
  2275. .flags = CLK_SET_RATE_PARENT,
  2276. .ops = &clk_branch2_ops,
  2277. },
  2278. },
  2279. };
  2280. static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
  2281. .halt_reg = 0x6b038,
  2282. .halt_check = BRANCH_HALT_VOTED,
  2283. .hwcg_reg = 0x6b038,
  2284. .hwcg_bit = 1,
  2285. .clkr = {
  2286. .enable_reg = 0x52008,
  2287. .enable_mask = BIT(2),
  2288. .hw.init = &(const struct clk_init_data){
  2289. .name = "gcc_pcie_0_cfg_ahb_clk",
  2290. .ops = &clk_branch2_ops,
  2291. },
  2292. },
  2293. };
  2294. static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
  2295. .halt_reg = 0x6b02c,
  2296. .halt_check = BRANCH_HALT_SKIP,
  2297. .hwcg_reg = 0x6b02c,
  2298. .hwcg_bit = 1,
  2299. .clkr = {
  2300. .enable_reg = 0x52008,
  2301. .enable_mask = BIT(1),
  2302. .hw.init = &(const struct clk_init_data){
  2303. .name = "gcc_pcie_0_mstr_axi_clk",
  2304. .ops = &clk_branch2_ops,
  2305. },
  2306. },
  2307. };
  2308. static struct clk_branch gcc_pcie_0_phy_rchng_clk = {
  2309. .halt_reg = 0x6b054,
  2310. .halt_check = BRANCH_HALT_VOTED,
  2311. .clkr = {
  2312. .enable_reg = 0x52000,
  2313. .enable_mask = BIT(22),
  2314. .hw.init = &(const struct clk_init_data){
  2315. .name = "gcc_pcie_0_phy_rchng_clk",
  2316. .parent_hws = (const struct clk_hw*[]){
  2317. &gcc_pcie_0_phy_rchng_clk_src.clkr.hw,
  2318. },
  2319. .num_parents = 1,
  2320. .flags = CLK_SET_RATE_PARENT,
  2321. .ops = &clk_branch2_ops,
  2322. },
  2323. },
  2324. };
  2325. static struct clk_branch gcc_pcie_0_pipe_clk = {
  2326. .halt_reg = 0x6b048,
  2327. .halt_check = BRANCH_HALT_SKIP,
  2328. .clkr = {
  2329. .enable_reg = 0x52008,
  2330. .enable_mask = BIT(4),
  2331. .hw.init = &(const struct clk_init_data){
  2332. .name = "gcc_pcie_0_pipe_clk",
  2333. .parent_hws = (const struct clk_hw*[]){
  2334. &gcc_pcie_0_pipe_clk_src.clkr.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_pcie_0_slv_axi_clk = {
  2343. .halt_reg = 0x6b020,
  2344. .halt_check = BRANCH_HALT_VOTED,
  2345. .hwcg_reg = 0x6b020,
  2346. .hwcg_bit = 1,
  2347. .clkr = {
  2348. .enable_reg = 0x52008,
  2349. .enable_mask = BIT(0),
  2350. .hw.init = &(const struct clk_init_data){
  2351. .name = "gcc_pcie_0_slv_axi_clk",
  2352. .ops = &clk_branch2_ops,
  2353. },
  2354. },
  2355. };
  2356. static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
  2357. .halt_reg = 0x6b01c,
  2358. .halt_check = BRANCH_HALT_VOTED,
  2359. .clkr = {
  2360. .enable_reg = 0x52008,
  2361. .enable_mask = BIT(5),
  2362. .hw.init = &(const struct clk_init_data){
  2363. .name = "gcc_pcie_0_slv_q2a_axi_clk",
  2364. .ops = &clk_branch2_ops,
  2365. },
  2366. },
  2367. };
  2368. static struct clk_branch gcc_pcie_1_aux_clk = {
  2369. .halt_reg = 0x8d038,
  2370. .halt_check = BRANCH_HALT_VOTED,
  2371. .clkr = {
  2372. .enable_reg = 0x52000,
  2373. .enable_mask = BIT(29),
  2374. .hw.init = &(const struct clk_init_data){
  2375. .name = "gcc_pcie_1_aux_clk",
  2376. .parent_hws = (const struct clk_hw*[]){
  2377. &gcc_pcie_1_aux_clk_src.clkr.hw,
  2378. },
  2379. .num_parents = 1,
  2380. .flags = CLK_SET_RATE_PARENT,
  2381. .ops = &clk_branch2_ops,
  2382. },
  2383. },
  2384. };
  2385. static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
  2386. .halt_reg = 0x8d034,
  2387. .halt_check = BRANCH_HALT_VOTED,
  2388. .hwcg_reg = 0x8d034,
  2389. .hwcg_bit = 1,
  2390. .clkr = {
  2391. .enable_reg = 0x52000,
  2392. .enable_mask = BIT(28),
  2393. .hw.init = &(const struct clk_init_data){
  2394. .name = "gcc_pcie_1_cfg_ahb_clk",
  2395. .ops = &clk_branch2_ops,
  2396. },
  2397. },
  2398. };
  2399. static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
  2400. .halt_reg = 0x8d028,
  2401. .halt_check = BRANCH_HALT_SKIP,
  2402. .hwcg_reg = 0x8d028,
  2403. .hwcg_bit = 1,
  2404. .clkr = {
  2405. .enable_reg = 0x52000,
  2406. .enable_mask = BIT(27),
  2407. .hw.init = &(const struct clk_init_data){
  2408. .name = "gcc_pcie_1_mstr_axi_clk",
  2409. .ops = &clk_branch2_ops,
  2410. },
  2411. },
  2412. };
  2413. static struct clk_branch gcc_pcie_1_phy_aux_clk = {
  2414. .halt_reg = 0x8d044,
  2415. .halt_check = BRANCH_HALT_VOTED,
  2416. .clkr = {
  2417. .enable_reg = 0x52000,
  2418. .enable_mask = BIT(24),
  2419. .hw.init = &(const struct clk_init_data){
  2420. .name = "gcc_pcie_1_phy_aux_clk",
  2421. .parent_hws = (const struct clk_hw*[]){
  2422. &gcc_pcie_1_phy_aux_clk_src.clkr.hw,
  2423. },
  2424. .num_parents = 1,
  2425. .flags = CLK_SET_RATE_PARENT,
  2426. .ops = &clk_branch2_ops,
  2427. },
  2428. },
  2429. };
  2430. static struct clk_branch gcc_pcie_1_phy_rchng_clk = {
  2431. .halt_reg = 0x8d05c,
  2432. .halt_check = BRANCH_HALT_VOTED,
  2433. .clkr = {
  2434. .enable_reg = 0x52000,
  2435. .enable_mask = BIT(23),
  2436. .hw.init = &(const struct clk_init_data){
  2437. .name = "gcc_pcie_1_phy_rchng_clk",
  2438. .parent_hws = (const struct clk_hw*[]){
  2439. &gcc_pcie_1_phy_rchng_clk_src.clkr.hw,
  2440. },
  2441. .num_parents = 1,
  2442. .flags = CLK_SET_RATE_PARENT,
  2443. .ops = &clk_branch2_ops,
  2444. },
  2445. },
  2446. };
  2447. static struct clk_branch gcc_pcie_1_pipe_clk = {
  2448. .halt_reg = 0x8d050,
  2449. .halt_check = BRANCH_HALT_SKIP,
  2450. .clkr = {
  2451. .enable_reg = 0x52000,
  2452. .enable_mask = BIT(30),
  2453. .hw.init = &(const struct clk_init_data){
  2454. .name = "gcc_pcie_1_pipe_clk",
  2455. .parent_hws = (const struct clk_hw*[]){
  2456. &gcc_pcie_1_pipe_clk_src.clkr.hw,
  2457. },
  2458. .num_parents = 1,
  2459. .flags = CLK_SET_RATE_PARENT,
  2460. .ops = &clk_branch2_ops,
  2461. },
  2462. },
  2463. };
  2464. static struct clk_branch gcc_pcie_1_slv_axi_clk = {
  2465. .halt_reg = 0x8d01c,
  2466. .halt_check = BRANCH_HALT_VOTED,
  2467. .hwcg_reg = 0x8d01c,
  2468. .hwcg_bit = 1,
  2469. .clkr = {
  2470. .enable_reg = 0x52000,
  2471. .enable_mask = BIT(26),
  2472. .hw.init = &(const struct clk_init_data){
  2473. .name = "gcc_pcie_1_slv_axi_clk",
  2474. .ops = &clk_branch2_ops,
  2475. },
  2476. },
  2477. };
  2478. static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
  2479. .halt_reg = 0x8d018,
  2480. .halt_check = BRANCH_HALT_VOTED,
  2481. .clkr = {
  2482. .enable_reg = 0x52000,
  2483. .enable_mask = BIT(25),
  2484. .hw.init = &(const struct clk_init_data){
  2485. .name = "gcc_pcie_1_slv_q2a_axi_clk",
  2486. .ops = &clk_branch2_ops,
  2487. },
  2488. },
  2489. };
  2490. static struct clk_branch gcc_pdm2_clk = {
  2491. .halt_reg = 0x3300c,
  2492. .halt_check = BRANCH_HALT,
  2493. .clkr = {
  2494. .enable_reg = 0x3300c,
  2495. .enable_mask = BIT(0),
  2496. .hw.init = &(const struct clk_init_data){
  2497. .name = "gcc_pdm2_clk",
  2498. .parent_hws = (const struct clk_hw*[]){
  2499. &gcc_pdm2_clk_src.clkr.hw,
  2500. },
  2501. .num_parents = 1,
  2502. .flags = CLK_SET_RATE_PARENT,
  2503. .ops = &clk_branch2_ops,
  2504. },
  2505. },
  2506. };
  2507. static struct clk_branch gcc_pdm_ahb_clk = {
  2508. .halt_reg = 0x33004,
  2509. .halt_check = BRANCH_HALT_VOTED,
  2510. .hwcg_reg = 0x33004,
  2511. .hwcg_bit = 1,
  2512. .clkr = {
  2513. .enable_reg = 0x33004,
  2514. .enable_mask = BIT(0),
  2515. .hw.init = &(const struct clk_init_data){
  2516. .name = "gcc_pdm_ahb_clk",
  2517. .ops = &clk_branch2_ops,
  2518. },
  2519. },
  2520. };
  2521. static struct clk_branch gcc_pdm_xo4_clk = {
  2522. .halt_reg = 0x33008,
  2523. .halt_check = BRANCH_HALT,
  2524. .clkr = {
  2525. .enable_reg = 0x33008,
  2526. .enable_mask = BIT(0),
  2527. .hw.init = &(const struct clk_init_data){
  2528. .name = "gcc_pdm_xo4_clk",
  2529. .ops = &clk_branch2_ops,
  2530. },
  2531. },
  2532. };
  2533. static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
  2534. .halt_reg = 0x26008,
  2535. .halt_check = BRANCH_HALT_VOTED,
  2536. .hwcg_reg = 0x26008,
  2537. .hwcg_bit = 1,
  2538. .clkr = {
  2539. .enable_reg = 0x26008,
  2540. .enable_mask = BIT(0),
  2541. .hw.init = &(const struct clk_init_data){
  2542. .name = "gcc_qmip_camera_nrt_ahb_clk",
  2543. .ops = &clk_branch2_ops,
  2544. },
  2545. },
  2546. };
  2547. static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
  2548. .halt_reg = 0x2600c,
  2549. .halt_check = BRANCH_HALT_VOTED,
  2550. .hwcg_reg = 0x2600c,
  2551. .hwcg_bit = 1,
  2552. .clkr = {
  2553. .enable_reg = 0x2600c,
  2554. .enable_mask = BIT(0),
  2555. .hw.init = &(const struct clk_init_data){
  2556. .name = "gcc_qmip_camera_rt_ahb_clk",
  2557. .ops = &clk_branch2_ops,
  2558. },
  2559. },
  2560. };
  2561. static struct clk_branch gcc_qmip_disp_ahb_clk = {
  2562. .halt_reg = 0x27008,
  2563. .halt_check = BRANCH_HALT_VOTED,
  2564. .hwcg_reg = 0x27008,
  2565. .hwcg_bit = 1,
  2566. .clkr = {
  2567. .enable_reg = 0x27008,
  2568. .enable_mask = BIT(0),
  2569. .hw.init = &(const struct clk_init_data){
  2570. .name = "gcc_qmip_disp_ahb_clk",
  2571. .ops = &clk_branch2_ops,
  2572. },
  2573. },
  2574. };
  2575. static struct clk_branch gcc_qmip_gpu_ahb_clk = {
  2576. .halt_reg = 0x71008,
  2577. .halt_check = BRANCH_HALT_VOTED,
  2578. .hwcg_reg = 0x71008,
  2579. .hwcg_bit = 1,
  2580. .clkr = {
  2581. .enable_reg = 0x71008,
  2582. .enable_mask = BIT(0),
  2583. .hw.init = &(const struct clk_init_data){
  2584. .name = "gcc_qmip_gpu_ahb_clk",
  2585. .ops = &clk_branch2_ops,
  2586. },
  2587. },
  2588. };
  2589. static struct clk_branch gcc_qmip_pcie_ahb_clk = {
  2590. .halt_reg = 0x6b018,
  2591. .halt_check = BRANCH_HALT_VOTED,
  2592. .hwcg_reg = 0x6b018,
  2593. .hwcg_bit = 1,
  2594. .clkr = {
  2595. .enable_reg = 0x52000,
  2596. .enable_mask = BIT(11),
  2597. .hw.init = &(const struct clk_init_data){
  2598. .name = "gcc_qmip_pcie_ahb_clk",
  2599. .ops = &clk_branch2_ops,
  2600. },
  2601. },
  2602. };
  2603. static struct clk_branch gcc_qmip_video_cv_cpu_ahb_clk = {
  2604. .halt_reg = 0x32014,
  2605. .halt_check = BRANCH_HALT_VOTED,
  2606. .hwcg_reg = 0x32014,
  2607. .hwcg_bit = 1,
  2608. .clkr = {
  2609. .enable_reg = 0x32014,
  2610. .enable_mask = BIT(0),
  2611. .hw.init = &(const struct clk_init_data){
  2612. .name = "gcc_qmip_video_cv_cpu_ahb_clk",
  2613. .ops = &clk_branch2_ops,
  2614. },
  2615. },
  2616. };
  2617. static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {
  2618. .halt_reg = 0x32008,
  2619. .halt_check = BRANCH_HALT_VOTED,
  2620. .hwcg_reg = 0x32008,
  2621. .hwcg_bit = 1,
  2622. .clkr = {
  2623. .enable_reg = 0x32008,
  2624. .enable_mask = BIT(0),
  2625. .hw.init = &(const struct clk_init_data){
  2626. .name = "gcc_qmip_video_cvp_ahb_clk",
  2627. .ops = &clk_branch2_ops,
  2628. },
  2629. },
  2630. };
  2631. static struct clk_branch gcc_qmip_video_v_cpu_ahb_clk = {
  2632. .halt_reg = 0x32010,
  2633. .halt_check = BRANCH_HALT_VOTED,
  2634. .hwcg_reg = 0x32010,
  2635. .hwcg_bit = 1,
  2636. .clkr = {
  2637. .enable_reg = 0x32010,
  2638. .enable_mask = BIT(0),
  2639. .hw.init = &(const struct clk_init_data){
  2640. .name = "gcc_qmip_video_v_cpu_ahb_clk",
  2641. .ops = &clk_branch2_ops,
  2642. },
  2643. },
  2644. };
  2645. static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
  2646. .halt_reg = 0x3200c,
  2647. .halt_check = BRANCH_HALT_VOTED,
  2648. .hwcg_reg = 0x3200c,
  2649. .hwcg_bit = 1,
  2650. .clkr = {
  2651. .enable_reg = 0x3200c,
  2652. .enable_mask = BIT(0),
  2653. .hw.init = &(const struct clk_init_data){
  2654. .name = "gcc_qmip_video_vcodec_ahb_clk",
  2655. .ops = &clk_branch2_ops,
  2656. },
  2657. },
  2658. };
  2659. static struct clk_branch gcc_qupv3_i2c_core_clk = {
  2660. .halt_reg = 0x23004,
  2661. .halt_check = BRANCH_HALT_VOTED,
  2662. .clkr = {
  2663. .enable_reg = 0x52008,
  2664. .enable_mask = BIT(8),
  2665. .hw.init = &(const struct clk_init_data){
  2666. .name = "gcc_qupv3_i2c_core_clk",
  2667. .ops = &clk_branch2_ops,
  2668. },
  2669. },
  2670. };
  2671. static struct clk_branch gcc_qupv3_i2c_s0_clk = {
  2672. .halt_reg = 0x17004,
  2673. .halt_check = BRANCH_HALT_VOTED,
  2674. .clkr = {
  2675. .enable_reg = 0x52008,
  2676. .enable_mask = BIT(10),
  2677. .hw.init = &(const struct clk_init_data){
  2678. .name = "gcc_qupv3_i2c_s0_clk",
  2679. .parent_hws = (const struct clk_hw*[]){
  2680. &gcc_qupv3_i2c_s0_clk_src.clkr.hw,
  2681. },
  2682. .num_parents = 1,
  2683. .flags = CLK_SET_RATE_PARENT,
  2684. .ops = &clk_branch2_ops,
  2685. },
  2686. },
  2687. };
  2688. static struct clk_branch gcc_qupv3_i2c_s1_clk = {
  2689. .halt_reg = 0x17020,
  2690. .halt_check = BRANCH_HALT_VOTED,
  2691. .clkr = {
  2692. .enable_reg = 0x52008,
  2693. .enable_mask = BIT(11),
  2694. .hw.init = &(const struct clk_init_data){
  2695. .name = "gcc_qupv3_i2c_s1_clk",
  2696. .parent_hws = (const struct clk_hw*[]){
  2697. &gcc_qupv3_i2c_s1_clk_src.clkr.hw,
  2698. },
  2699. .num_parents = 1,
  2700. .flags = CLK_SET_RATE_PARENT,
  2701. .ops = &clk_branch2_ops,
  2702. },
  2703. },
  2704. };
  2705. static struct clk_branch gcc_qupv3_i2c_s2_clk = {
  2706. .halt_reg = 0x1703c,
  2707. .halt_check = BRANCH_HALT_VOTED,
  2708. .clkr = {
  2709. .enable_reg = 0x52008,
  2710. .enable_mask = BIT(12),
  2711. .hw.init = &(const struct clk_init_data){
  2712. .name = "gcc_qupv3_i2c_s2_clk",
  2713. .parent_hws = (const struct clk_hw*[]){
  2714. &gcc_qupv3_i2c_s2_clk_src.clkr.hw,
  2715. },
  2716. .num_parents = 1,
  2717. .flags = CLK_SET_RATE_PARENT,
  2718. .ops = &clk_branch2_ops,
  2719. },
  2720. },
  2721. };
  2722. static struct clk_branch gcc_qupv3_i2c_s3_clk = {
  2723. .halt_reg = 0x17058,
  2724. .halt_check = BRANCH_HALT_VOTED,
  2725. .clkr = {
  2726. .enable_reg = 0x52008,
  2727. .enable_mask = BIT(13),
  2728. .hw.init = &(const struct clk_init_data){
  2729. .name = "gcc_qupv3_i2c_s3_clk",
  2730. .parent_hws = (const struct clk_hw*[]){
  2731. &gcc_qupv3_i2c_s3_clk_src.clkr.hw,
  2732. },
  2733. .num_parents = 1,
  2734. .flags = CLK_SET_RATE_PARENT,
  2735. .ops = &clk_branch2_ops,
  2736. },
  2737. },
  2738. };
  2739. static struct clk_branch gcc_qupv3_i2c_s4_clk = {
  2740. .halt_reg = 0x17074,
  2741. .halt_check = BRANCH_HALT_VOTED,
  2742. .clkr = {
  2743. .enable_reg = 0x52008,
  2744. .enable_mask = BIT(14),
  2745. .hw.init = &(const struct clk_init_data){
  2746. .name = "gcc_qupv3_i2c_s4_clk",
  2747. .parent_hws = (const struct clk_hw*[]){
  2748. &gcc_qupv3_i2c_s4_clk_src.clkr.hw,
  2749. },
  2750. .num_parents = 1,
  2751. .flags = CLK_SET_RATE_PARENT,
  2752. .ops = &clk_branch2_ops,
  2753. },
  2754. },
  2755. };
  2756. static struct clk_branch gcc_qupv3_i2c_s5_clk = {
  2757. .halt_reg = 0x17090,
  2758. .halt_check = BRANCH_HALT_VOTED,
  2759. .clkr = {
  2760. .enable_reg = 0x52008,
  2761. .enable_mask = BIT(15),
  2762. .hw.init = &(const struct clk_init_data){
  2763. .name = "gcc_qupv3_i2c_s5_clk",
  2764. .parent_hws = (const struct clk_hw*[]){
  2765. &gcc_qupv3_i2c_s5_clk_src.clkr.hw,
  2766. },
  2767. .num_parents = 1,
  2768. .flags = CLK_SET_RATE_PARENT,
  2769. .ops = &clk_branch2_ops,
  2770. },
  2771. },
  2772. };
  2773. static struct clk_branch gcc_qupv3_i2c_s6_clk = {
  2774. .halt_reg = 0x170ac,
  2775. .halt_check = BRANCH_HALT_VOTED,
  2776. .clkr = {
  2777. .enable_reg = 0x52008,
  2778. .enable_mask = BIT(16),
  2779. .hw.init = &(const struct clk_init_data){
  2780. .name = "gcc_qupv3_i2c_s6_clk",
  2781. .parent_hws = (const struct clk_hw*[]){
  2782. &gcc_qupv3_i2c_s6_clk_src.clkr.hw,
  2783. },
  2784. .num_parents = 1,
  2785. .flags = CLK_SET_RATE_PARENT,
  2786. .ops = &clk_branch2_ops,
  2787. },
  2788. },
  2789. };
  2790. static struct clk_branch gcc_qupv3_i2c_s7_clk = {
  2791. .halt_reg = 0x170c8,
  2792. .halt_check = BRANCH_HALT_VOTED,
  2793. .clkr = {
  2794. .enable_reg = 0x52008,
  2795. .enable_mask = BIT(17),
  2796. .hw.init = &(const struct clk_init_data){
  2797. .name = "gcc_qupv3_i2c_s7_clk",
  2798. .parent_hws = (const struct clk_hw*[]){
  2799. &gcc_qupv3_i2c_s7_clk_src.clkr.hw,
  2800. },
  2801. .num_parents = 1,
  2802. .flags = CLK_SET_RATE_PARENT,
  2803. .ops = &clk_branch2_ops,
  2804. },
  2805. },
  2806. };
  2807. static struct clk_branch gcc_qupv3_i2c_s8_clk = {
  2808. .halt_reg = 0x170e4,
  2809. .halt_check = BRANCH_HALT_VOTED,
  2810. .clkr = {
  2811. .enable_reg = 0x52010,
  2812. .enable_mask = BIT(14),
  2813. .hw.init = &(const struct clk_init_data){
  2814. .name = "gcc_qupv3_i2c_s8_clk",
  2815. .parent_hws = (const struct clk_hw*[]){
  2816. &gcc_qupv3_i2c_s8_clk_src.clkr.hw,
  2817. },
  2818. .num_parents = 1,
  2819. .flags = CLK_SET_RATE_PARENT,
  2820. .ops = &clk_branch2_ops,
  2821. },
  2822. },
  2823. };
  2824. static struct clk_branch gcc_qupv3_i2c_s9_clk = {
  2825. .halt_reg = 0x17100,
  2826. .halt_check = BRANCH_HALT_VOTED,
  2827. .clkr = {
  2828. .enable_reg = 0x52010,
  2829. .enable_mask = BIT(15),
  2830. .hw.init = &(const struct clk_init_data){
  2831. .name = "gcc_qupv3_i2c_s9_clk",
  2832. .parent_hws = (const struct clk_hw*[]){
  2833. &gcc_qupv3_i2c_s9_clk_src.clkr.hw,
  2834. },
  2835. .num_parents = 1,
  2836. .flags = CLK_SET_RATE_PARENT,
  2837. .ops = &clk_branch2_ops,
  2838. },
  2839. },
  2840. };
  2841. static struct clk_branch gcc_qupv3_i2c_s_ahb_clk = {
  2842. .halt_reg = 0x23000,
  2843. .halt_check = BRANCH_HALT_VOTED,
  2844. .hwcg_reg = 0x23000,
  2845. .hwcg_bit = 1,
  2846. .clkr = {
  2847. .enable_reg = 0x52008,
  2848. .enable_mask = BIT(7),
  2849. .hw.init = &(const struct clk_init_data){
  2850. .name = "gcc_qupv3_i2c_s_ahb_clk",
  2851. .ops = &clk_branch2_ops,
  2852. },
  2853. },
  2854. };
  2855. static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
  2856. .halt_reg = 0x23154,
  2857. .halt_check = BRANCH_HALT_VOTED,
  2858. .clkr = {
  2859. .enable_reg = 0x52008,
  2860. .enable_mask = BIT(18),
  2861. .hw.init = &(const struct clk_init_data){
  2862. .name = "gcc_qupv3_wrap1_core_2x_clk",
  2863. .ops = &clk_branch2_ops,
  2864. },
  2865. },
  2866. };
  2867. static struct clk_branch gcc_qupv3_wrap1_core_clk = {
  2868. .halt_reg = 0x23144,
  2869. .halt_check = BRANCH_HALT_VOTED,
  2870. .clkr = {
  2871. .enable_reg = 0x52008,
  2872. .enable_mask = BIT(19),
  2873. .hw.init = &(const struct clk_init_data){
  2874. .name = "gcc_qupv3_wrap1_core_clk",
  2875. .ops = &clk_branch2_ops,
  2876. },
  2877. },
  2878. };
  2879. static struct clk_branch gcc_qupv3_wrap1_qspi_ref_clk = {
  2880. .halt_reg = 0x1889c,
  2881. .halt_check = BRANCH_HALT_VOTED,
  2882. .clkr = {
  2883. .enable_reg = 0x52010,
  2884. .enable_mask = BIT(29),
  2885. .hw.init = &(const struct clk_init_data){
  2886. .name = "gcc_qupv3_wrap1_qspi_ref_clk",
  2887. .parent_hws = (const struct clk_hw*[]){
  2888. &gcc_qupv3_wrap1_qspi_ref_clk_src.clkr.hw,
  2889. },
  2890. .num_parents = 1,
  2891. .flags = CLK_SET_RATE_PARENT,
  2892. .ops = &clk_branch2_ops,
  2893. },
  2894. },
  2895. };
  2896. static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
  2897. .halt_reg = 0x18004,
  2898. .halt_check = BRANCH_HALT_VOTED,
  2899. .clkr = {
  2900. .enable_reg = 0x52008,
  2901. .enable_mask = BIT(22),
  2902. .hw.init = &(const struct clk_init_data){
  2903. .name = "gcc_qupv3_wrap1_s0_clk",
  2904. .parent_hws = (const struct clk_hw*[]){
  2905. &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
  2906. },
  2907. .num_parents = 1,
  2908. .flags = CLK_SET_RATE_PARENT,
  2909. .ops = &clk_branch2_ops,
  2910. },
  2911. },
  2912. };
  2913. static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
  2914. .halt_reg = 0x1813c,
  2915. .halt_check = BRANCH_HALT_VOTED,
  2916. .clkr = {
  2917. .enable_reg = 0x52008,
  2918. .enable_mask = BIT(23),
  2919. .hw.init = &(const struct clk_init_data){
  2920. .name = "gcc_qupv3_wrap1_s1_clk",
  2921. .parent_hws = (const struct clk_hw*[]){
  2922. &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
  2923. },
  2924. .num_parents = 1,
  2925. .flags = CLK_SET_RATE_PARENT,
  2926. .ops = &clk_branch2_ops,
  2927. },
  2928. },
  2929. };
  2930. static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
  2931. .halt_reg = 0x18274,
  2932. .halt_check = BRANCH_HALT_VOTED,
  2933. .clkr = {
  2934. .enable_reg = 0x52008,
  2935. .enable_mask = BIT(24),
  2936. .hw.init = &(const struct clk_init_data){
  2937. .name = "gcc_qupv3_wrap1_s2_clk",
  2938. .parent_hws = (const struct clk_hw*[]){
  2939. &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
  2940. },
  2941. .num_parents = 1,
  2942. .flags = CLK_SET_RATE_PARENT,
  2943. .ops = &clk_branch2_ops,
  2944. },
  2945. },
  2946. };
  2947. static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
  2948. .halt_reg = 0x18284,
  2949. .halt_check = BRANCH_HALT_VOTED,
  2950. .clkr = {
  2951. .enable_reg = 0x52008,
  2952. .enable_mask = BIT(25),
  2953. .hw.init = &(const struct clk_init_data){
  2954. .name = "gcc_qupv3_wrap1_s3_clk",
  2955. .parent_hws = (const struct clk_hw*[]){
  2956. &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
  2957. },
  2958. .num_parents = 1,
  2959. .flags = CLK_SET_RATE_PARENT,
  2960. .ops = &clk_branch2_ops,
  2961. },
  2962. },
  2963. };
  2964. static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
  2965. .halt_reg = 0x183bc,
  2966. .halt_check = BRANCH_HALT_VOTED,
  2967. .clkr = {
  2968. .enable_reg = 0x52008,
  2969. .enable_mask = BIT(26),
  2970. .hw.init = &(const struct clk_init_data){
  2971. .name = "gcc_qupv3_wrap1_s4_clk",
  2972. .parent_hws = (const struct clk_hw*[]){
  2973. &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
  2974. },
  2975. .num_parents = 1,
  2976. .flags = CLK_SET_RATE_PARENT,
  2977. .ops = &clk_branch2_ops,
  2978. },
  2979. },
  2980. };
  2981. static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
  2982. .halt_reg = 0x184f4,
  2983. .halt_check = BRANCH_HALT_VOTED,
  2984. .clkr = {
  2985. .enable_reg = 0x52008,
  2986. .enable_mask = BIT(27),
  2987. .hw.init = &(const struct clk_init_data){
  2988. .name = "gcc_qupv3_wrap1_s5_clk",
  2989. .parent_hws = (const struct clk_hw*[]){
  2990. &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
  2991. },
  2992. .num_parents = 1,
  2993. .flags = CLK_SET_RATE_PARENT,
  2994. .ops = &clk_branch2_ops,
  2995. },
  2996. },
  2997. };
  2998. static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
  2999. .halt_reg = 0x1862c,
  3000. .halt_check = BRANCH_HALT_VOTED,
  3001. .clkr = {
  3002. .enable_reg = 0x52008,
  3003. .enable_mask = BIT(28),
  3004. .hw.init = &(const struct clk_init_data){
  3005. .name = "gcc_qupv3_wrap1_s6_clk",
  3006. .parent_hws = (const struct clk_hw*[]){
  3007. &gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
  3008. },
  3009. .num_parents = 1,
  3010. .flags = CLK_SET_RATE_PARENT,
  3011. .ops = &clk_branch2_ops,
  3012. },
  3013. },
  3014. };
  3015. static struct clk_branch gcc_qupv3_wrap1_s7_clk = {
  3016. .halt_reg = 0x18764,
  3017. .halt_check = BRANCH_HALT_VOTED,
  3018. .clkr = {
  3019. .enable_reg = 0x52010,
  3020. .enable_mask = BIT(16),
  3021. .hw.init = &(const struct clk_init_data){
  3022. .name = "gcc_qupv3_wrap1_s7_clk",
  3023. .parent_hws = (const struct clk_hw*[]){
  3024. &gcc_qupv3_wrap1_s7_clk_src.clkr.hw,
  3025. },
  3026. .num_parents = 1,
  3027. .flags = CLK_SET_RATE_PARENT,
  3028. .ops = &clk_branch2_ops,
  3029. },
  3030. },
  3031. };
  3032. static struct clk_branch gcc_qupv3_wrap2_core_2x_clk = {
  3033. .halt_reg = 0x232a4,
  3034. .halt_check = BRANCH_HALT_VOTED,
  3035. .clkr = {
  3036. .enable_reg = 0x52010,
  3037. .enable_mask = BIT(3),
  3038. .hw.init = &(const struct clk_init_data){
  3039. .name = "gcc_qupv3_wrap2_core_2x_clk",
  3040. .ops = &clk_branch2_ops,
  3041. },
  3042. },
  3043. };
  3044. static struct clk_branch gcc_qupv3_wrap2_core_clk = {
  3045. .halt_reg = 0x23294,
  3046. .halt_check = BRANCH_HALT_VOTED,
  3047. .clkr = {
  3048. .enable_reg = 0x52010,
  3049. .enable_mask = BIT(0),
  3050. .hw.init = &(const struct clk_init_data){
  3051. .name = "gcc_qupv3_wrap2_core_clk",
  3052. .ops = &clk_branch2_ops,
  3053. },
  3054. },
  3055. };
  3056. static struct clk_branch gcc_qupv3_wrap2_ibi_ctrl_2_clk = {
  3057. .halt_reg = 0x1e9cc,
  3058. .halt_check = BRANCH_HALT_VOTED,
  3059. .hwcg_reg = 0x1e9cc,
  3060. .hwcg_bit = 1,
  3061. .clkr = {
  3062. .enable_reg = 0x52010,
  3063. .enable_mask = BIT(27),
  3064. .hw.init = &(const struct clk_init_data){
  3065. .name = "gcc_qupv3_wrap2_ibi_ctrl_2_clk",
  3066. .parent_hws = (const struct clk_hw*[]){
  3067. &gcc_qupv3_wrap2_ibi_ctrl_0_clk_src.clkr.hw,
  3068. },
  3069. .num_parents = 1,
  3070. .flags = CLK_SET_RATE_PARENT,
  3071. .ops = &clk_branch2_ops,
  3072. },
  3073. },
  3074. };
  3075. static struct clk_branch gcc_qupv3_wrap2_ibi_ctrl_3_clk = {
  3076. .halt_reg = 0x1e9d0,
  3077. .halt_check = BRANCH_HALT_VOTED,
  3078. .hwcg_reg = 0x1e9d0,
  3079. .hwcg_bit = 1,
  3080. .clkr = {
  3081. .enable_reg = 0x52010,
  3082. .enable_mask = BIT(28),
  3083. .hw.init = &(const struct clk_init_data){
  3084. .name = "gcc_qupv3_wrap2_ibi_ctrl_3_clk",
  3085. .parent_hws = (const struct clk_hw*[]){
  3086. &gcc_qupv3_wrap2_ibi_ctrl_0_clk_src.clkr.hw,
  3087. },
  3088. .num_parents = 1,
  3089. .flags = CLK_SET_RATE_PARENT,
  3090. .ops = &clk_branch2_ops,
  3091. },
  3092. },
  3093. };
  3094. static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
  3095. .halt_reg = 0x1e004,
  3096. .halt_check = BRANCH_HALT_VOTED,
  3097. .clkr = {
  3098. .enable_reg = 0x52010,
  3099. .enable_mask = BIT(4),
  3100. .hw.init = &(const struct clk_init_data){
  3101. .name = "gcc_qupv3_wrap2_s0_clk",
  3102. .parent_hws = (const struct clk_hw*[]){
  3103. &gcc_qupv3_wrap2_s0_clk_src.clkr.hw,
  3104. },
  3105. .num_parents = 1,
  3106. .flags = CLK_SET_RATE_PARENT,
  3107. .ops = &clk_branch2_ops,
  3108. },
  3109. },
  3110. };
  3111. static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
  3112. .halt_reg = 0x1e13c,
  3113. .halt_check = BRANCH_HALT_VOTED,
  3114. .clkr = {
  3115. .enable_reg = 0x52010,
  3116. .enable_mask = BIT(5),
  3117. .hw.init = &(const struct clk_init_data){
  3118. .name = "gcc_qupv3_wrap2_s1_clk",
  3119. .parent_hws = (const struct clk_hw*[]){
  3120. &gcc_qupv3_wrap2_s1_clk_src.clkr.hw,
  3121. },
  3122. .num_parents = 1,
  3123. .flags = CLK_SET_RATE_PARENT,
  3124. .ops = &clk_branch2_ops,
  3125. },
  3126. },
  3127. };
  3128. static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
  3129. .halt_reg = 0x1e274,
  3130. .halt_check = BRANCH_HALT_VOTED,
  3131. .clkr = {
  3132. .enable_reg = 0x52010,
  3133. .enable_mask = BIT(6),
  3134. .hw.init = &(const struct clk_init_data){
  3135. .name = "gcc_qupv3_wrap2_s2_clk",
  3136. .parent_hws = (const struct clk_hw*[]){
  3137. &gcc_qupv3_wrap2_s2_clk_src.clkr.hw,
  3138. },
  3139. .num_parents = 1,
  3140. .flags = CLK_SET_RATE_PARENT,
  3141. .ops = &clk_branch2_ops,
  3142. },
  3143. },
  3144. };
  3145. static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
  3146. .halt_reg = 0x1e3ac,
  3147. .halt_check = BRANCH_HALT_VOTED,
  3148. .clkr = {
  3149. .enable_reg = 0x52010,
  3150. .enable_mask = BIT(7),
  3151. .hw.init = &(const struct clk_init_data){
  3152. .name = "gcc_qupv3_wrap2_s3_clk",
  3153. .parent_hws = (const struct clk_hw*[]){
  3154. &gcc_qupv3_wrap2_s3_clk_src.clkr.hw,
  3155. },
  3156. .num_parents = 1,
  3157. .flags = CLK_SET_RATE_PARENT,
  3158. .ops = &clk_branch2_ops,
  3159. },
  3160. },
  3161. };
  3162. static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
  3163. .halt_reg = 0x1e4e4,
  3164. .halt_check = BRANCH_HALT_VOTED,
  3165. .clkr = {
  3166. .enable_reg = 0x52010,
  3167. .enable_mask = BIT(8),
  3168. .hw.init = &(const struct clk_init_data){
  3169. .name = "gcc_qupv3_wrap2_s4_clk",
  3170. .parent_hws = (const struct clk_hw*[]){
  3171. &gcc_qupv3_wrap2_s4_clk_src.clkr.hw,
  3172. },
  3173. .num_parents = 1,
  3174. .flags = CLK_SET_RATE_PARENT,
  3175. .ops = &clk_branch2_ops,
  3176. },
  3177. },
  3178. };
  3179. static struct clk_branch gcc_qupv3_wrap2_s5_clk = {
  3180. .halt_reg = 0x1e61c,
  3181. .halt_check = BRANCH_HALT_VOTED,
  3182. .clkr = {
  3183. .enable_reg = 0x52010,
  3184. .enable_mask = BIT(9),
  3185. .hw.init = &(const struct clk_init_data){
  3186. .name = "gcc_qupv3_wrap2_s5_clk",
  3187. .parent_hws = (const struct clk_hw*[]){
  3188. &gcc_qupv3_wrap2_s5_clk_src.clkr.hw,
  3189. },
  3190. .num_parents = 1,
  3191. .flags = CLK_SET_RATE_PARENT,
  3192. .ops = &clk_branch2_ops,
  3193. },
  3194. },
  3195. };
  3196. static struct clk_branch gcc_qupv3_wrap2_s6_clk = {
  3197. .halt_reg = 0x1e754,
  3198. .halt_check = BRANCH_HALT_VOTED,
  3199. .clkr = {
  3200. .enable_reg = 0x52010,
  3201. .enable_mask = BIT(10),
  3202. .hw.init = &(const struct clk_init_data){
  3203. .name = "gcc_qupv3_wrap2_s6_clk",
  3204. .parent_hws = (const struct clk_hw*[]){
  3205. &gcc_qupv3_wrap2_s6_clk_src.clkr.hw,
  3206. },
  3207. .num_parents = 1,
  3208. .flags = CLK_SET_RATE_PARENT,
  3209. .ops = &clk_branch2_ops,
  3210. },
  3211. },
  3212. };
  3213. static struct clk_branch gcc_qupv3_wrap2_s7_clk = {
  3214. .halt_reg = 0x1e88c,
  3215. .halt_check = BRANCH_HALT_VOTED,
  3216. .clkr = {
  3217. .enable_reg = 0x52010,
  3218. .enable_mask = BIT(17),
  3219. .hw.init = &(const struct clk_init_data){
  3220. .name = "gcc_qupv3_wrap2_s7_clk",
  3221. .parent_hws = (const struct clk_hw*[]){
  3222. &gcc_qupv3_wrap2_s7_clk_src.clkr.hw,
  3223. },
  3224. .num_parents = 1,
  3225. .flags = CLK_SET_RATE_PARENT,
  3226. .ops = &clk_branch2_ops,
  3227. },
  3228. },
  3229. };
  3230. static struct clk_branch gcc_qupv3_wrap3_core_2x_clk = {
  3231. .halt_reg = 0x233f4,
  3232. .halt_check = BRANCH_HALT_VOTED,
  3233. .clkr = {
  3234. .enable_reg = 0x52018,
  3235. .enable_mask = BIT(1),
  3236. .hw.init = &(const struct clk_init_data){
  3237. .name = "gcc_qupv3_wrap3_core_2x_clk",
  3238. .ops = &clk_branch2_ops,
  3239. },
  3240. },
  3241. };
  3242. static struct clk_branch gcc_qupv3_wrap3_core_clk = {
  3243. .halt_reg = 0x233e4,
  3244. .halt_check = BRANCH_HALT_VOTED,
  3245. .clkr = {
  3246. .enable_reg = 0x52018,
  3247. .enable_mask = BIT(0),
  3248. .hw.init = &(const struct clk_init_data){
  3249. .name = "gcc_qupv3_wrap3_core_clk",
  3250. .ops = &clk_branch2_ops,
  3251. },
  3252. },
  3253. };
  3254. static struct clk_branch gcc_qupv3_wrap3_qspi_ref_clk = {
  3255. .halt_reg = 0x19014,
  3256. .halt_check = BRANCH_HALT_VOTED,
  3257. .clkr = {
  3258. .enable_reg = 0x52018,
  3259. .enable_mask = BIT(3),
  3260. .hw.init = &(const struct clk_init_data){
  3261. .name = "gcc_qupv3_wrap3_qspi_ref_clk",
  3262. .parent_hws = (const struct clk_hw*[]){
  3263. &gcc_qupv3_wrap3_qspi_ref_clk_src.clkr.hw,
  3264. },
  3265. .num_parents = 1,
  3266. .flags = CLK_SET_RATE_PARENT,
  3267. .ops = &clk_branch2_ops,
  3268. },
  3269. },
  3270. };
  3271. static struct clk_branch gcc_qupv3_wrap3_s0_clk = {
  3272. .halt_reg = 0x19004,
  3273. .halt_check = BRANCH_HALT_VOTED,
  3274. .clkr = {
  3275. .enable_reg = 0x52018,
  3276. .enable_mask = BIT(2),
  3277. .hw.init = &(const struct clk_init_data){
  3278. .name = "gcc_qupv3_wrap3_s0_clk",
  3279. .parent_hws = (const struct clk_hw*[]){
  3280. &gcc_qupv3_wrap3_s0_clk_src.clkr.hw,
  3281. },
  3282. .num_parents = 1,
  3283. .flags = CLK_SET_RATE_PARENT,
  3284. .ops = &clk_branch2_ops,
  3285. },
  3286. },
  3287. };
  3288. static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
  3289. .halt_reg = 0x2313c,
  3290. .halt_check = BRANCH_HALT_VOTED,
  3291. .hwcg_reg = 0x2313c,
  3292. .hwcg_bit = 1,
  3293. .clkr = {
  3294. .enable_reg = 0x52008,
  3295. .enable_mask = BIT(20),
  3296. .hw.init = &(const struct clk_init_data){
  3297. .name = "gcc_qupv3_wrap_1_m_ahb_clk",
  3298. .ops = &clk_branch2_ops,
  3299. },
  3300. },
  3301. };
  3302. static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
  3303. .halt_reg = 0x23140,
  3304. .halt_check = BRANCH_HALT_VOTED,
  3305. .hwcg_reg = 0x23140,
  3306. .hwcg_bit = 1,
  3307. .clkr = {
  3308. .enable_reg = 0x52008,
  3309. .enable_mask = BIT(21),
  3310. .hw.init = &(const struct clk_init_data){
  3311. .name = "gcc_qupv3_wrap_1_s_ahb_clk",
  3312. .ops = &clk_branch2_ops,
  3313. },
  3314. },
  3315. };
  3316. static struct clk_branch gcc_qupv3_wrap_2_ibi_2_ahb_clk = {
  3317. .halt_reg = 0x1e9c4,
  3318. .halt_check = BRANCH_HALT_VOTED,
  3319. .hwcg_reg = 0x1e9c4,
  3320. .hwcg_bit = 1,
  3321. .clkr = {
  3322. .enable_reg = 0x52010,
  3323. .enable_mask = BIT(25),
  3324. .hw.init = &(const struct clk_init_data){
  3325. .name = "gcc_qupv3_wrap_2_ibi_2_ahb_clk",
  3326. .ops = &clk_branch2_ops,
  3327. },
  3328. },
  3329. };
  3330. static struct clk_branch gcc_qupv3_wrap_2_ibi_3_ahb_clk = {
  3331. .halt_reg = 0x1e9c8,
  3332. .halt_check = BRANCH_HALT_VOTED,
  3333. .hwcg_reg = 0x1e9c8,
  3334. .hwcg_bit = 1,
  3335. .clkr = {
  3336. .enable_reg = 0x52010,
  3337. .enable_mask = BIT(26),
  3338. .hw.init = &(const struct clk_init_data){
  3339. .name = "gcc_qupv3_wrap_2_ibi_3_ahb_clk",
  3340. .ops = &clk_branch2_ops,
  3341. },
  3342. },
  3343. };
  3344. static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
  3345. .halt_reg = 0x2328c,
  3346. .halt_check = BRANCH_HALT_VOTED,
  3347. .hwcg_reg = 0x2328c,
  3348. .hwcg_bit = 1,
  3349. .clkr = {
  3350. .enable_reg = 0x52010,
  3351. .enable_mask = BIT(2),
  3352. .hw.init = &(const struct clk_init_data){
  3353. .name = "gcc_qupv3_wrap_2_m_ahb_clk",
  3354. .ops = &clk_branch2_ops,
  3355. },
  3356. },
  3357. };
  3358. static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
  3359. .halt_reg = 0x23290,
  3360. .halt_check = BRANCH_HALT_VOTED,
  3361. .hwcg_reg = 0x23290,
  3362. .hwcg_bit = 1,
  3363. .clkr = {
  3364. .enable_reg = 0x52010,
  3365. .enable_mask = BIT(1),
  3366. .hw.init = &(const struct clk_init_data){
  3367. .name = "gcc_qupv3_wrap_2_s_ahb_clk",
  3368. .ops = &clk_branch2_ops,
  3369. },
  3370. },
  3371. };
  3372. static struct clk_branch gcc_qupv3_wrap_3_m_ahb_clk = {
  3373. .halt_reg = 0x233dc,
  3374. .halt_check = BRANCH_HALT_VOTED,
  3375. .hwcg_reg = 0x233dc,
  3376. .hwcg_bit = 1,
  3377. .clkr = {
  3378. .enable_reg = 0x52010,
  3379. .enable_mask = BIT(30),
  3380. .hw.init = &(const struct clk_init_data){
  3381. .name = "gcc_qupv3_wrap_3_m_ahb_clk",
  3382. .ops = &clk_branch2_ops,
  3383. },
  3384. },
  3385. };
  3386. static struct clk_branch gcc_qupv3_wrap_3_s_ahb_clk = {
  3387. .halt_reg = 0x233e0,
  3388. .halt_check = BRANCH_HALT_VOTED,
  3389. .hwcg_reg = 0x233e0,
  3390. .hwcg_bit = 1,
  3391. .clkr = {
  3392. .enable_reg = 0x52010,
  3393. .enable_mask = BIT(31),
  3394. .hw.init = &(const struct clk_init_data){
  3395. .name = "gcc_qupv3_wrap_3_s_ahb_clk",
  3396. .ops = &clk_branch2_ops,
  3397. },
  3398. },
  3399. };
  3400. static struct clk_branch gcc_sdcc2_ahb_clk = {
  3401. .halt_reg = 0x14010,
  3402. .halt_check = BRANCH_HALT,
  3403. .clkr = {
  3404. .enable_reg = 0x14010,
  3405. .enable_mask = BIT(0),
  3406. .hw.init = &(const struct clk_init_data){
  3407. .name = "gcc_sdcc2_ahb_clk",
  3408. .ops = &clk_branch2_ops,
  3409. },
  3410. },
  3411. };
  3412. static struct clk_branch gcc_sdcc2_apps_clk = {
  3413. .halt_reg = 0x14004,
  3414. .halt_check = BRANCH_HALT,
  3415. .clkr = {
  3416. .enable_reg = 0x14004,
  3417. .enable_mask = BIT(0),
  3418. .hw.init = &(const struct clk_init_data){
  3419. .name = "gcc_sdcc2_apps_clk",
  3420. .parent_hws = (const struct clk_hw*[]){
  3421. &gcc_sdcc2_apps_clk_src.clkr.hw,
  3422. },
  3423. .num_parents = 1,
  3424. .flags = CLK_SET_RATE_PARENT,
  3425. .ops = &clk_branch2_ops,
  3426. },
  3427. },
  3428. };
  3429. static struct clk_branch gcc_sdcc4_ahb_clk = {
  3430. .halt_reg = 0x16010,
  3431. .halt_check = BRANCH_HALT,
  3432. .clkr = {
  3433. .enable_reg = 0x16010,
  3434. .enable_mask = BIT(0),
  3435. .hw.init = &(const struct clk_init_data){
  3436. .name = "gcc_sdcc4_ahb_clk",
  3437. .ops = &clk_branch2_ops,
  3438. },
  3439. },
  3440. };
  3441. static struct clk_branch gcc_sdcc4_apps_clk = {
  3442. .halt_reg = 0x16004,
  3443. .halt_check = BRANCH_HALT,
  3444. .clkr = {
  3445. .enable_reg = 0x16004,
  3446. .enable_mask = BIT(0),
  3447. .hw.init = &(const struct clk_init_data){
  3448. .name = "gcc_sdcc4_apps_clk",
  3449. .parent_hws = (const struct clk_hw*[]){
  3450. &gcc_sdcc4_apps_clk_src.clkr.hw,
  3451. },
  3452. .num_parents = 1,
  3453. .flags = CLK_SET_RATE_PARENT,
  3454. .ops = &clk_branch2_ops,
  3455. },
  3456. },
  3457. };
  3458. static struct clk_branch gcc_ufs_phy_ahb_clk = {
  3459. .halt_reg = 0x77024,
  3460. .halt_check = BRANCH_HALT_VOTED,
  3461. .hwcg_reg = 0x77024,
  3462. .hwcg_bit = 1,
  3463. .clkr = {
  3464. .enable_reg = 0x77024,
  3465. .enable_mask = BIT(0),
  3466. .hw.init = &(const struct clk_init_data){
  3467. .name = "gcc_ufs_phy_ahb_clk",
  3468. .ops = &clk_branch2_ops,
  3469. },
  3470. },
  3471. };
  3472. static struct clk_branch gcc_ufs_phy_axi_clk = {
  3473. .halt_reg = 0x77018,
  3474. .halt_check = BRANCH_HALT_VOTED,
  3475. .hwcg_reg = 0x77018,
  3476. .hwcg_bit = 1,
  3477. .clkr = {
  3478. .enable_reg = 0x77018,
  3479. .enable_mask = BIT(0),
  3480. .hw.init = &(const struct clk_init_data){
  3481. .name = "gcc_ufs_phy_axi_clk",
  3482. .parent_hws = (const struct clk_hw*[]){
  3483. &gcc_ufs_phy_axi_clk_src.clkr.hw,
  3484. },
  3485. .num_parents = 1,
  3486. .flags = CLK_SET_RATE_PARENT,
  3487. .ops = &clk_branch2_ops,
  3488. },
  3489. },
  3490. };
  3491. static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
  3492. .halt_reg = 0x77018,
  3493. .halt_check = BRANCH_HALT_VOTED,
  3494. .hwcg_reg = 0x77018,
  3495. .hwcg_bit = 1,
  3496. .clkr = {
  3497. .enable_reg = 0x77018,
  3498. .enable_mask = BIT(1),
  3499. .hw.init = &(const struct clk_init_data){
  3500. .name = "gcc_ufs_phy_axi_hw_ctl_clk",
  3501. .parent_hws = (const struct clk_hw*[]){
  3502. &gcc_ufs_phy_axi_clk_src.clkr.hw,
  3503. },
  3504. .num_parents = 1,
  3505. .flags = CLK_SET_RATE_PARENT,
  3506. .ops = &clk_branch2_hw_ctl_ops,
  3507. },
  3508. },
  3509. };
  3510. static struct clk_branch gcc_ufs_phy_ice_core_clk = {
  3511. .halt_reg = 0x77074,
  3512. .halt_check = BRANCH_HALT_VOTED,
  3513. .hwcg_reg = 0x77074,
  3514. .hwcg_bit = 1,
  3515. .clkr = {
  3516. .enable_reg = 0x77074,
  3517. .enable_mask = BIT(0),
  3518. .hw.init = &(const struct clk_init_data){
  3519. .name = "gcc_ufs_phy_ice_core_clk",
  3520. .parent_hws = (const struct clk_hw*[]){
  3521. &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
  3522. },
  3523. .num_parents = 1,
  3524. .flags = CLK_SET_RATE_PARENT,
  3525. .ops = &clk_branch2_ops,
  3526. },
  3527. },
  3528. };
  3529. static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
  3530. .halt_reg = 0x77074,
  3531. .halt_check = BRANCH_HALT_VOTED,
  3532. .hwcg_reg = 0x77074,
  3533. .hwcg_bit = 1,
  3534. .clkr = {
  3535. .enable_reg = 0x77074,
  3536. .enable_mask = BIT(1),
  3537. .hw.init = &(const struct clk_init_data){
  3538. .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
  3539. .parent_hws = (const struct clk_hw*[]){
  3540. &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
  3541. },
  3542. .num_parents = 1,
  3543. .flags = CLK_SET_RATE_PARENT,
  3544. .ops = &clk_branch2_hw_ctl_ops,
  3545. },
  3546. },
  3547. };
  3548. static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
  3549. .halt_reg = 0x770b0,
  3550. .halt_check = BRANCH_HALT_VOTED,
  3551. .hwcg_reg = 0x770b0,
  3552. .hwcg_bit = 1,
  3553. .clkr = {
  3554. .enable_reg = 0x770b0,
  3555. .enable_mask = BIT(0),
  3556. .hw.init = &(const struct clk_init_data){
  3557. .name = "gcc_ufs_phy_phy_aux_clk",
  3558. .parent_hws = (const struct clk_hw*[]){
  3559. &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
  3560. },
  3561. .num_parents = 1,
  3562. .flags = CLK_SET_RATE_PARENT,
  3563. .ops = &clk_branch2_ops,
  3564. },
  3565. },
  3566. };
  3567. static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
  3568. .halt_reg = 0x770b0,
  3569. .halt_check = BRANCH_HALT_VOTED,
  3570. .hwcg_reg = 0x770b0,
  3571. .hwcg_bit = 1,
  3572. .clkr = {
  3573. .enable_reg = 0x770b0,
  3574. .enable_mask = BIT(1),
  3575. .hw.init = &(const struct clk_init_data){
  3576. .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
  3577. .parent_hws = (const struct clk_hw*[]){
  3578. &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
  3579. },
  3580. .num_parents = 1,
  3581. .flags = CLK_SET_RATE_PARENT,
  3582. .ops = &clk_branch2_hw_ctl_ops,
  3583. },
  3584. },
  3585. };
  3586. static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
  3587. .halt_reg = 0x7702c,
  3588. .halt_check = BRANCH_HALT_DELAY,
  3589. .clkr = {
  3590. .enable_reg = 0x7702c,
  3591. .enable_mask = BIT(0),
  3592. .hw.init = &(const struct clk_init_data){
  3593. .name = "gcc_ufs_phy_rx_symbol_0_clk",
  3594. .parent_hws = (const struct clk_hw*[]){
  3595. &gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw,
  3596. },
  3597. .num_parents = 1,
  3598. .flags = CLK_SET_RATE_PARENT,
  3599. .ops = &clk_branch2_ops,
  3600. },
  3601. },
  3602. };
  3603. static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
  3604. .halt_reg = 0x770cc,
  3605. .halt_check = BRANCH_HALT_DELAY,
  3606. .clkr = {
  3607. .enable_reg = 0x770cc,
  3608. .enable_mask = BIT(0),
  3609. .hw.init = &(const struct clk_init_data){
  3610. .name = "gcc_ufs_phy_rx_symbol_1_clk",
  3611. .parent_hws = (const struct clk_hw*[]){
  3612. &gcc_ufs_phy_rx_symbol_1_clk_src.clkr.hw,
  3613. },
  3614. .num_parents = 1,
  3615. .flags = CLK_SET_RATE_PARENT,
  3616. .ops = &clk_branch2_ops,
  3617. },
  3618. },
  3619. };
  3620. static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
  3621. .halt_reg = 0x77028,
  3622. .halt_check = BRANCH_HALT_DELAY,
  3623. .clkr = {
  3624. .enable_reg = 0x77028,
  3625. .enable_mask = BIT(0),
  3626. .hw.init = &(const struct clk_init_data){
  3627. .name = "gcc_ufs_phy_tx_symbol_0_clk",
  3628. .parent_hws = (const struct clk_hw*[]){
  3629. &gcc_ufs_phy_tx_symbol_0_clk_src.clkr.hw,
  3630. },
  3631. .num_parents = 1,
  3632. .flags = CLK_SET_RATE_PARENT,
  3633. .ops = &clk_branch2_ops,
  3634. },
  3635. },
  3636. };
  3637. static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
  3638. .halt_reg = 0x77068,
  3639. .halt_check = BRANCH_HALT_VOTED,
  3640. .hwcg_reg = 0x77068,
  3641. .hwcg_bit = 1,
  3642. .clkr = {
  3643. .enable_reg = 0x77068,
  3644. .enable_mask = BIT(0),
  3645. .hw.init = &(const struct clk_init_data){
  3646. .name = "gcc_ufs_phy_unipro_core_clk",
  3647. .parent_hws = (const struct clk_hw*[]){
  3648. &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
  3649. },
  3650. .num_parents = 1,
  3651. .flags = CLK_SET_RATE_PARENT,
  3652. .ops = &clk_branch2_ops,
  3653. },
  3654. },
  3655. };
  3656. static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
  3657. .halt_reg = 0x77068,
  3658. .halt_check = BRANCH_HALT_VOTED,
  3659. .hwcg_reg = 0x77068,
  3660. .hwcg_bit = 1,
  3661. .clkr = {
  3662. .enable_reg = 0x77068,
  3663. .enable_mask = BIT(1),
  3664. .hw.init = &(const struct clk_init_data){
  3665. .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
  3666. .parent_hws = (const struct clk_hw*[]){
  3667. &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
  3668. },
  3669. .num_parents = 1,
  3670. .flags = CLK_SET_RATE_PARENT,
  3671. .ops = &clk_branch2_hw_ctl_ops,
  3672. },
  3673. },
  3674. };
  3675. static struct clk_branch gcc_usb30_prim_master_clk = {
  3676. .halt_reg = 0x39018,
  3677. .halt_check = BRANCH_HALT,
  3678. .clkr = {
  3679. .enable_reg = 0x39018,
  3680. .enable_mask = BIT(0),
  3681. .hw.init = &(const struct clk_init_data){
  3682. .name = "gcc_usb30_prim_master_clk",
  3683. .parent_hws = (const struct clk_hw*[]){
  3684. &gcc_usb30_prim_master_clk_src.clkr.hw,
  3685. },
  3686. .num_parents = 1,
  3687. .flags = CLK_SET_RATE_PARENT,
  3688. .ops = &clk_branch2_ops,
  3689. },
  3690. },
  3691. };
  3692. static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
  3693. .halt_reg = 0x39028,
  3694. .halt_check = BRANCH_HALT,
  3695. .clkr = {
  3696. .enable_reg = 0x39028,
  3697. .enable_mask = BIT(0),
  3698. .hw.init = &(const struct clk_init_data){
  3699. .name = "gcc_usb30_prim_mock_utmi_clk",
  3700. .parent_hws = (const struct clk_hw*[]){
  3701. &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
  3702. },
  3703. .num_parents = 1,
  3704. .flags = CLK_SET_RATE_PARENT,
  3705. .ops = &clk_branch2_ops,
  3706. },
  3707. },
  3708. };
  3709. static struct clk_branch gcc_usb30_prim_sleep_clk = {
  3710. .halt_reg = 0x39024,
  3711. .halt_check = BRANCH_HALT,
  3712. .clkr = {
  3713. .enable_reg = 0x39024,
  3714. .enable_mask = BIT(0),
  3715. .hw.init = &(const struct clk_init_data){
  3716. .name = "gcc_usb30_prim_sleep_clk",
  3717. .ops = &clk_branch2_ops,
  3718. },
  3719. },
  3720. };
  3721. static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
  3722. .halt_reg = 0x39060,
  3723. .halt_check = BRANCH_HALT,
  3724. .clkr = {
  3725. .enable_reg = 0x39060,
  3726. .enable_mask = BIT(0),
  3727. .hw.init = &(const struct clk_init_data){
  3728. .name = "gcc_usb3_prim_phy_aux_clk",
  3729. .parent_hws = (const struct clk_hw*[]){
  3730. &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
  3731. },
  3732. .num_parents = 1,
  3733. .flags = CLK_SET_RATE_PARENT,
  3734. .ops = &clk_branch2_ops,
  3735. },
  3736. },
  3737. };
  3738. static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
  3739. .halt_reg = 0x39064,
  3740. .halt_check = BRANCH_HALT,
  3741. .clkr = {
  3742. .enable_reg = 0x39064,
  3743. .enable_mask = BIT(0),
  3744. .hw.init = &(const struct clk_init_data){
  3745. .name = "gcc_usb3_prim_phy_com_aux_clk",
  3746. .parent_hws = (const struct clk_hw*[]){
  3747. &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
  3748. },
  3749. .num_parents = 1,
  3750. .flags = CLK_SET_RATE_PARENT,
  3751. .ops = &clk_branch2_ops,
  3752. },
  3753. },
  3754. };
  3755. static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
  3756. .halt_reg = 0x39068,
  3757. .halt_check = BRANCH_HALT_DELAY,
  3758. .hwcg_reg = 0x39068,
  3759. .hwcg_bit = 1,
  3760. .clkr = {
  3761. .enable_reg = 0x39068,
  3762. .enable_mask = BIT(0),
  3763. .hw.init = &(const struct clk_init_data){
  3764. .name = "gcc_usb3_prim_phy_pipe_clk",
  3765. .parent_hws = (const struct clk_hw*[]){
  3766. &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
  3767. },
  3768. .num_parents = 1,
  3769. .flags = CLK_SET_RATE_PARENT,
  3770. .ops = &clk_branch2_ops,
  3771. },
  3772. },
  3773. };
  3774. static struct clk_branch gcc_video_axi0_clk = {
  3775. .halt_reg = 0x32018,
  3776. .halt_check = BRANCH_HALT_SKIP,
  3777. .hwcg_reg = 0x32018,
  3778. .hwcg_bit = 1,
  3779. .clkr = {
  3780. .enable_reg = 0x32018,
  3781. .enable_mask = BIT(0),
  3782. .hw.init = &(const struct clk_init_data){
  3783. .name = "gcc_video_axi0_clk",
  3784. .ops = &clk_branch2_ops,
  3785. },
  3786. },
  3787. };
  3788. static struct clk_branch gcc_video_axi1_clk = {
  3789. .halt_reg = 0x32024,
  3790. .halt_check = BRANCH_HALT_SKIP,
  3791. .hwcg_reg = 0x32024,
  3792. .hwcg_bit = 1,
  3793. .clkr = {
  3794. .enable_reg = 0x32024,
  3795. .enable_mask = BIT(0),
  3796. .hw.init = &(const struct clk_init_data){
  3797. .name = "gcc_video_axi1_clk",
  3798. .ops = &clk_branch2_ops,
  3799. },
  3800. },
  3801. };
  3802. static struct clk_regmap *gcc_pineapple_clocks[] = {
  3803. [GCC_AGGRE_NOC_PCIE_AXI_CLK] = &gcc_aggre_noc_pcie_axi_clk.clkr,
  3804. [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
  3805. [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
  3806. [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
  3807. [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
  3808. [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
  3809. [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
  3810. [GCC_CFG_NOC_PCIE_ANOC_AHB_CLK] = &gcc_cfg_noc_pcie_anoc_ahb_clk.clkr,
  3811. [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
  3812. [GCC_CNOC_PCIE_SF_AXI_CLK] = &gcc_cnoc_pcie_sf_axi_clk.clkr,
  3813. [GCC_CPUSS_UBWCP_CLK] = &gcc_cpuss_ubwcp_clk.clkr,
  3814. [GCC_CPUSS_UBWCP_CLK_SRC] = &gcc_cpuss_ubwcp_clk_src.clkr,
  3815. [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
  3816. [GCC_DDRSS_PCIE_SF_QTB_CLK] = &gcc_ddrss_pcie_sf_qtb_clk.clkr,
  3817. [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
  3818. [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
  3819. [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
  3820. [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
  3821. [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
  3822. [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
  3823. [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
  3824. [GCC_GPLL0] = &gcc_gpll0.clkr,
  3825. [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,
  3826. [GCC_GPLL1] = &gcc_gpll1.clkr,
  3827. [GCC_GPLL3] = &gcc_gpll3.clkr,
  3828. [GCC_GPLL4] = &gcc_gpll4.clkr,
  3829. [GCC_GPLL6] = &gcc_gpll6.clkr,
  3830. [GCC_GPLL7] = &gcc_gpll7.clkr,
  3831. [GCC_GPLL9] = &gcc_gpll9.clkr,
  3832. [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
  3833. [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
  3834. [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
  3835. [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
  3836. [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
  3837. [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
  3838. [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
  3839. [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
  3840. [GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr,
  3841. [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,
  3842. [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
  3843. [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
  3844. [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
  3845. [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
  3846. [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
  3847. [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
  3848. [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
  3849. [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
  3850. [GCC_PCIE_1_PHY_AUX_CLK] = &gcc_pcie_1_phy_aux_clk.clkr,
  3851. [GCC_PCIE_1_PHY_AUX_CLK_SRC] = &gcc_pcie_1_phy_aux_clk_src.clkr,
  3852. [GCC_PCIE_1_PHY_RCHNG_CLK] = &gcc_pcie_1_phy_rchng_clk.clkr,
  3853. [GCC_PCIE_1_PHY_RCHNG_CLK_SRC] = &gcc_pcie_1_phy_rchng_clk_src.clkr,
  3854. [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
  3855. [GCC_PCIE_1_PIPE_CLK_SRC] = &gcc_pcie_1_pipe_clk_src.clkr,
  3856. [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
  3857. [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
  3858. [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
  3859. [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
  3860. [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
  3861. [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
  3862. [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
  3863. [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
  3864. [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
  3865. [GCC_QMIP_GPU_AHB_CLK] = &gcc_qmip_gpu_ahb_clk.clkr,
  3866. [GCC_QMIP_PCIE_AHB_CLK] = &gcc_qmip_pcie_ahb_clk.clkr,
  3867. [GCC_QMIP_VIDEO_CV_CPU_AHB_CLK] = &gcc_qmip_video_cv_cpu_ahb_clk.clkr,
  3868. [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,
  3869. [GCC_QMIP_VIDEO_V_CPU_AHB_CLK] = &gcc_qmip_video_v_cpu_ahb_clk.clkr,
  3870. [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
  3871. [GCC_QUPV3_I2C_CORE_CLK] = &gcc_qupv3_i2c_core_clk.clkr,
  3872. [GCC_QUPV3_I2C_S0_CLK] = &gcc_qupv3_i2c_s0_clk.clkr,
  3873. [GCC_QUPV3_I2C_S0_CLK_SRC] = &gcc_qupv3_i2c_s0_clk_src.clkr,
  3874. [GCC_QUPV3_I2C_S1_CLK] = &gcc_qupv3_i2c_s1_clk.clkr,
  3875. [GCC_QUPV3_I2C_S1_CLK_SRC] = &gcc_qupv3_i2c_s1_clk_src.clkr,
  3876. [GCC_QUPV3_I2C_S2_CLK] = &gcc_qupv3_i2c_s2_clk.clkr,
  3877. [GCC_QUPV3_I2C_S2_CLK_SRC] = &gcc_qupv3_i2c_s2_clk_src.clkr,
  3878. [GCC_QUPV3_I2C_S3_CLK] = &gcc_qupv3_i2c_s3_clk.clkr,
  3879. [GCC_QUPV3_I2C_S3_CLK_SRC] = &gcc_qupv3_i2c_s3_clk_src.clkr,
  3880. [GCC_QUPV3_I2C_S4_CLK] = &gcc_qupv3_i2c_s4_clk.clkr,
  3881. [GCC_QUPV3_I2C_S4_CLK_SRC] = &gcc_qupv3_i2c_s4_clk_src.clkr,
  3882. [GCC_QUPV3_I2C_S5_CLK] = &gcc_qupv3_i2c_s5_clk.clkr,
  3883. [GCC_QUPV3_I2C_S5_CLK_SRC] = &gcc_qupv3_i2c_s5_clk_src.clkr,
  3884. [GCC_QUPV3_I2C_S6_CLK] = &gcc_qupv3_i2c_s6_clk.clkr,
  3885. [GCC_QUPV3_I2C_S6_CLK_SRC] = &gcc_qupv3_i2c_s6_clk_src.clkr,
  3886. [GCC_QUPV3_I2C_S7_CLK] = &gcc_qupv3_i2c_s7_clk.clkr,
  3887. [GCC_QUPV3_I2C_S7_CLK_SRC] = &gcc_qupv3_i2c_s7_clk_src.clkr,
  3888. [GCC_QUPV3_I2C_S8_CLK] = &gcc_qupv3_i2c_s8_clk.clkr,
  3889. [GCC_QUPV3_I2C_S8_CLK_SRC] = &gcc_qupv3_i2c_s8_clk_src.clkr,
  3890. [GCC_QUPV3_I2C_S9_CLK] = &gcc_qupv3_i2c_s9_clk.clkr,
  3891. [GCC_QUPV3_I2C_S9_CLK_SRC] = &gcc_qupv3_i2c_s9_clk_src.clkr,
  3892. [GCC_QUPV3_I2C_S_AHB_CLK] = &gcc_qupv3_i2c_s_ahb_clk.clkr,
  3893. [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
  3894. [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
  3895. [GCC_QUPV3_WRAP1_QSPI_REF_CLK] = &gcc_qupv3_wrap1_qspi_ref_clk.clkr,
  3896. [GCC_QUPV3_WRAP1_QSPI_REF_CLK_SRC] = &gcc_qupv3_wrap1_qspi_ref_clk_src.clkr,
  3897. [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
  3898. [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
  3899. [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
  3900. [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
  3901. [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
  3902. [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
  3903. [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
  3904. [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
  3905. [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
  3906. [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
  3907. [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
  3908. [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
  3909. [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
  3910. [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
  3911. [GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr,
  3912. [GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr,
  3913. [GCC_QUPV3_WRAP2_CORE_2X_CLK] = &gcc_qupv3_wrap2_core_2x_clk.clkr,
  3914. [GCC_QUPV3_WRAP2_CORE_CLK] = &gcc_qupv3_wrap2_core_clk.clkr,
  3915. [GCC_QUPV3_WRAP2_IBI_CTRL_0_CLK_SRC] = &gcc_qupv3_wrap2_ibi_ctrl_0_clk_src.clkr,
  3916. [GCC_QUPV3_WRAP2_IBI_CTRL_2_CLK] = &gcc_qupv3_wrap2_ibi_ctrl_2_clk.clkr,
  3917. [GCC_QUPV3_WRAP2_IBI_CTRL_3_CLK] = &gcc_qupv3_wrap2_ibi_ctrl_3_clk.clkr,
  3918. [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
  3919. [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
  3920. [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
  3921. [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
  3922. [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
  3923. [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
  3924. [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
  3925. [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
  3926. [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
  3927. [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
  3928. [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,
  3929. [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,
  3930. [GCC_QUPV3_WRAP2_S6_CLK] = &gcc_qupv3_wrap2_s6_clk.clkr,
  3931. [GCC_QUPV3_WRAP2_S6_CLK_SRC] = &gcc_qupv3_wrap2_s6_clk_src.clkr,
  3932. [GCC_QUPV3_WRAP2_S7_CLK] = &gcc_qupv3_wrap2_s7_clk.clkr,
  3933. [GCC_QUPV3_WRAP2_S7_CLK_SRC] = &gcc_qupv3_wrap2_s7_clk_src.clkr,
  3934. [GCC_QUPV3_WRAP3_CORE_2X_CLK] = &gcc_qupv3_wrap3_core_2x_clk.clkr,
  3935. [GCC_QUPV3_WRAP3_CORE_CLK] = &gcc_qupv3_wrap3_core_clk.clkr,
  3936. [GCC_QUPV3_WRAP3_QSPI_REF_CLK] = &gcc_qupv3_wrap3_qspi_ref_clk.clkr,
  3937. [GCC_QUPV3_WRAP3_QSPI_REF_CLK_SRC] = &gcc_qupv3_wrap3_qspi_ref_clk_src.clkr,
  3938. [GCC_QUPV3_WRAP3_S0_CLK] = &gcc_qupv3_wrap3_s0_clk.clkr,
  3939. [GCC_QUPV3_WRAP3_S0_CLK_SRC] = &gcc_qupv3_wrap3_s0_clk_src.clkr,
  3940. [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
  3941. [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
  3942. [GCC_QUPV3_WRAP_2_IBI_2_AHB_CLK] = &gcc_qupv3_wrap_2_ibi_2_ahb_clk.clkr,
  3943. [GCC_QUPV3_WRAP_2_IBI_3_AHB_CLK] = &gcc_qupv3_wrap_2_ibi_3_ahb_clk.clkr,
  3944. [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
  3945. [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
  3946. [GCC_QUPV3_WRAP_3_M_AHB_CLK] = &gcc_qupv3_wrap_3_m_ahb_clk.clkr,
  3947. [GCC_QUPV3_WRAP_3_S_AHB_CLK] = &gcc_qupv3_wrap_3_s_ahb_clk.clkr,
  3948. [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
  3949. [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
  3950. [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
  3951. [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
  3952. [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
  3953. [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
  3954. [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
  3955. [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
  3956. [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
  3957. [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
  3958. [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
  3959. [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
  3960. [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
  3961. [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
  3962. [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
  3963. [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
  3964. [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
  3965. [GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_rx_symbol_0_clk_src.clkr,
  3966. [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
  3967. [GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_phy_rx_symbol_1_clk_src.clkr,
  3968. [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
  3969. [GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_tx_symbol_0_clk_src.clkr,
  3970. [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
  3971. [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr,
  3972. [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
  3973. [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
  3974. [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
  3975. [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
  3976. [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
  3977. [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
  3978. [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
  3979. [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
  3980. [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
  3981. [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
  3982. [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
  3983. [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
  3984. [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
  3985. [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,
  3986. [GCC_GPLL0_AO] = &gcc_gpll0_ao.clkr,
  3987. [GCC_GPLL0_OUT_EVEN_AO] = &gcc_gpll0_out_even_ao.clkr,
  3988. [GCC_GPLL1_AO] = &gcc_gpll1_ao.clkr,
  3989. [GCC_GPLL3_AO] = &gcc_gpll3_ao.clkr,
  3990. [GCC_GPLL4_AO] = &gcc_gpll4_ao.clkr,
  3991. [GCC_GPLL6_AO] = &gcc_gpll6_ao.clkr,
  3992. };
  3993. static const struct qcom_reset_map gcc_pineapple_resets[] = {
  3994. [GCC_CAMERA_BCR] = { 0x26000 },
  3995. [GCC_DISPLAY_BCR] = { 0x27000 },
  3996. [GCC_GPU_BCR] = { 0x71000 },
  3997. [GCC_PCIE_0_BCR] = { 0x6b000 },
  3998. [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x6c014 },
  3999. [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x6c020 },
  4000. [GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
  4001. [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x6c028 },
  4002. [GCC_PCIE_1_BCR] = { 0x8d000 },
  4003. [GCC_PCIE_1_LINK_DOWN_BCR] = { 0x8e014 },
  4004. [GCC_PCIE_1_NOCSR_COM_PHY_BCR] = { 0x8e020 },
  4005. [GCC_PCIE_1_PHY_BCR] = { 0x8e01c },
  4006. [GCC_PCIE_1_PHY_NOCSR_COM_PHY_BCR] = { 0x8e024 },
  4007. [GCC_PCIE_PHY_BCR] = { 0x6f000 },
  4008. [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x6f00c },
  4009. [GCC_PCIE_PHY_COM_BCR] = { 0x6f010 },
  4010. [GCC_PDM_BCR] = { 0x33000 },
  4011. [GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 },
  4012. [GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 },
  4013. [GCC_QUPV3_WRAPPER_3_BCR] = { 0x19000 },
  4014. [GCC_QUPV3_WRAPPER_I2C_BCR] = { 0x17000 },
  4015. [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
  4016. [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
  4017. [GCC_SDCC2_BCR] = { 0x14000 },
  4018. [GCC_SDCC4_BCR] = { 0x16000 },
  4019. [GCC_UFS_PHY_BCR] = { 0x77000 },
  4020. [GCC_USB30_PRIM_BCR] = { 0x39000 },
  4021. [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },
  4022. [GCC_USB3_DP_PHY_SEC_BCR] = { 0x50014 },
  4023. [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },
  4024. [GCC_USB3_PHY_SEC_BCR] = { 0x5000c },
  4025. [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x50004 },
  4026. [GCC_USB3PHY_PHY_SEC_BCR] = { 0x50010 },
  4027. [GCC_VIDEO_AXI0_CLK_ARES] = { 0x32018, 2 },
  4028. [GCC_VIDEO_AXI1_CLK_ARES] = { 0x32024, 2 },
  4029. [GCC_VIDEO_BCR] = { 0x32000 },
  4030. };
  4031. static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
  4032. DEFINE_RCG_DFS(gcc_qupv3_wrap1_qspi_ref_clk_src),
  4033. DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
  4034. DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
  4035. DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
  4036. DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
  4037. DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
  4038. DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
  4039. DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src),
  4040. DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src),
  4041. DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src),
  4042. DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src),
  4043. DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src),
  4044. DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src),
  4045. DEFINE_RCG_DFS(gcc_qupv3_wrap2_s5_clk_src),
  4046. DEFINE_RCG_DFS(gcc_qupv3_wrap2_s6_clk_src),
  4047. DEFINE_RCG_DFS(gcc_qupv3_wrap2_s7_clk_src),
  4048. DEFINE_RCG_DFS(gcc_qupv3_wrap3_qspi_ref_clk_src),
  4049. };
  4050. static const struct regmap_config gcc_pineapple_regmap_config = {
  4051. .reg_bits = 32,
  4052. .reg_stride = 4,
  4053. .val_bits = 32,
  4054. .max_register = 0x1f41f0,
  4055. .fast_io = true,
  4056. };
  4057. static const struct qcom_cc_desc gcc_pineapple_desc = {
  4058. .config = &gcc_pineapple_regmap_config,
  4059. .clks = gcc_pineapple_clocks,
  4060. .num_clks = ARRAY_SIZE(gcc_pineapple_clocks),
  4061. .resets = gcc_pineapple_resets,
  4062. .num_resets = ARRAY_SIZE(gcc_pineapple_resets),
  4063. .clk_regulators = gcc_pineapple_regulators_all,
  4064. .num_clk_regulators = ARRAY_SIZE(gcc_pineapple_regulators_all),
  4065. };
  4066. static const struct of_device_id gcc_pineapple_match_table[] = {
  4067. { .compatible = "qcom,pineapple-gcc" },
  4068. { }
  4069. };
  4070. MODULE_DEVICE_TABLE(of, gcc_pineapple_match_table);
  4071. static int gcc_pineapple_probe(struct platform_device *pdev)
  4072. {
  4073. struct regmap *regmap;
  4074. int ret;
  4075. regmap = qcom_cc_map(pdev, &gcc_pineapple_desc);
  4076. if (IS_ERR(regmap))
  4077. return PTR_ERR(regmap);
  4078. /*
  4079. * Keep clocks always enabled:
  4080. * gcc_camera_ahb_clk
  4081. * gcc_camera_xo_clk
  4082. * gcc_ddrss_ubwcp_clk
  4083. * gcc_disp_ahb_clk
  4084. * gcc_disp_xo_clk
  4085. * gcc_gpu_cfg_ahb_clk
  4086. * gcc_video_ahb_clk
  4087. * gcc_video_xo_clk
  4088. */
  4089. regmap_update_bits(regmap, 0x26004, BIT(0), BIT(0));
  4090. regmap_update_bits(regmap, 0x26028, BIT(0), BIT(0));
  4091. regmap_update_bits(regmap, 0x63020, BIT(0), BIT(0));
  4092. regmap_update_bits(regmap, 0x27004, BIT(0), BIT(0));
  4093. regmap_update_bits(regmap, 0x27018, BIT(0), BIT(0));
  4094. regmap_update_bits(regmap, 0x71004, BIT(0), BIT(0));
  4095. regmap_update_bits(regmap, 0x32004, BIT(0), BIT(0));
  4096. regmap_update_bits(regmap, 0x32030, BIT(0), BIT(0));
  4097. ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
  4098. ARRAY_SIZE(gcc_dfs_clocks));
  4099. if (ret)
  4100. return ret;
  4101. /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
  4102. regmap_update_bits(regmap, gcc_ufs_phy_ice_core_clk.halt_reg,
  4103. BIT(14), BIT(14));
  4104. /* Clear GDSC_SLEEP_ENA_VOTE to stop votes being auto-removed in sleep. */
  4105. regmap_write(regmap, 0x52150, 0x0);
  4106. ret = qcom_cc_really_probe(pdev, &gcc_pineapple_desc, regmap);
  4107. if (ret) {
  4108. dev_err(&pdev->dev, "Failed to register GCC clocks\n");
  4109. return ret;
  4110. }
  4111. dev_info(&pdev->dev, "Registered GCC clocks\n");
  4112. return ret;
  4113. }
  4114. static void gcc_pineapple_sync_state(struct device *dev)
  4115. {
  4116. qcom_cc_sync_state(dev, &gcc_pineapple_desc);
  4117. }
  4118. static struct platform_driver gcc_pineapple_driver = {
  4119. .probe = gcc_pineapple_probe,
  4120. .driver = {
  4121. .name = "gcc-pineapple",
  4122. .of_match_table = gcc_pineapple_match_table,
  4123. .sync_state = gcc_pineapple_sync_state,
  4124. },
  4125. };
  4126. static int __init gcc_pineapple_init(void)
  4127. {
  4128. return platform_driver_register(&gcc_pineapple_driver);
  4129. }
  4130. subsys_initcall(gcc_pineapple_init);
  4131. static void __exit gcc_pineapple_exit(void)
  4132. {
  4133. platform_driver_unregister(&gcc_pineapple_driver);
  4134. }
  4135. module_exit(gcc_pineapple_exit);
  4136. MODULE_DESCRIPTION("QTI GCC PINEAPPLE Driver");
  4137. MODULE_LICENSE("GPL v2");