0007-v6.2-clk-qcom-ipq8074-convert-to-parent-data.patch 112 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601
  1. From e6c5115d6845f25eda7e162dcd783a2044215867 Mon Sep 17 00:00:00 2001
  2. From: Robert Marko <[email protected]>
  3. Date: Sun, 30 Oct 2022 18:57:01 +0100
  4. Subject: [PATCH] clk: qcom: ipq8074: convert to parent data
  5. Convert the IPQ8074 GCC driver to use parent data instead of global
  6. name matching.
  7. Utilize ARRAY_SIZE for num_parents instead of hardcoding the value.
  8. Signed-off-by: Robert Marko <[email protected]>
  9. Signed-off-by: Bjorn Andersson <[email protected]>
  10. Link: https://lore.kernel.org/r/[email protected]
  11. ---
  12. drivers/clk/qcom/gcc-ipq8074.c | 1781 +++++++++++++++-----------------
  13. 1 file changed, 813 insertions(+), 968 deletions(-)
  14. --- a/drivers/clk/qcom/gcc-ipq8074.c
  15. +++ b/drivers/clk/qcom/gcc-ipq8074.c
  16. @@ -49,349 +49,6 @@ enum {
  17. P_UNIPHY2_TX,
  18. };
  19. -static const char * const gcc_xo_gpll0_gpll0_out_main_div2[] = {
  20. - "xo",
  21. - "gpll0",
  22. - "gpll0_out_main_div2",
  23. -};
  24. -
  25. -static const struct parent_map gcc_xo_gpll0_gpll0_out_main_div2_map[] = {
  26. - { P_XO, 0 },
  27. - { P_GPLL0, 1 },
  28. - { P_GPLL0_DIV2, 4 },
  29. -};
  30. -
  31. -static const struct parent_map gcc_xo_gpll0_map[] = {
  32. - { P_XO, 0 },
  33. - { P_GPLL0, 1 },
  34. -};
  35. -
  36. -static const char * const gcc_xo_gpll0_gpll2_gpll0_out_main_div2[] = {
  37. - "xo",
  38. - "gpll0",
  39. - "gpll2",
  40. - "gpll0_out_main_div2",
  41. -};
  42. -
  43. -static const struct parent_map gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map[] = {
  44. - { P_XO, 0 },
  45. - { P_GPLL0, 1 },
  46. - { P_GPLL2, 2 },
  47. - { P_GPLL0_DIV2, 4 },
  48. -};
  49. -
  50. -static const char * const gcc_xo_gpll0_sleep_clk[] = {
  51. - "xo",
  52. - "gpll0",
  53. - "sleep_clk",
  54. -};
  55. -
  56. -static const struct parent_map gcc_xo_gpll0_sleep_clk_map[] = {
  57. - { P_XO, 0 },
  58. - { P_GPLL0, 2 },
  59. - { P_SLEEP_CLK, 6 },
  60. -};
  61. -
  62. -static const char * const gcc_xo_gpll6_gpll0_gpll0_out_main_div2[] = {
  63. - "xo",
  64. - "gpll6",
  65. - "gpll0",
  66. - "gpll0_out_main_div2",
  67. -};
  68. -
  69. -static const struct parent_map gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map[] = {
  70. - { P_XO, 0 },
  71. - { P_GPLL6, 1 },
  72. - { P_GPLL0, 3 },
  73. - { P_GPLL0_DIV2, 4 },
  74. -};
  75. -
  76. -static const char * const gcc_xo_gpll0_out_main_div2_gpll0[] = {
  77. - "xo",
  78. - "gpll0_out_main_div2",
  79. - "gpll0",
  80. -};
  81. -
  82. -static const struct parent_map gcc_xo_gpll0_out_main_div2_gpll0_map[] = {
  83. - { P_XO, 0 },
  84. - { P_GPLL0_DIV2, 2 },
  85. - { P_GPLL0, 1 },
  86. -};
  87. -
  88. -static const char * const gcc_usb3phy_0_cc_pipe_clk_xo[] = {
  89. - "usb3phy_0_cc_pipe_clk",
  90. - "xo",
  91. -};
  92. -
  93. -static const struct parent_map gcc_usb3phy_0_cc_pipe_clk_xo_map[] = {
  94. - { P_USB3PHY_0_PIPE, 0 },
  95. - { P_XO, 2 },
  96. -};
  97. -
  98. -static const char * const gcc_usb3phy_1_cc_pipe_clk_xo[] = {
  99. - "usb3phy_1_cc_pipe_clk",
  100. - "xo",
  101. -};
  102. -
  103. -static const struct parent_map gcc_usb3phy_1_cc_pipe_clk_xo_map[] = {
  104. - { P_USB3PHY_1_PIPE, 0 },
  105. - { P_XO, 2 },
  106. -};
  107. -
  108. -static const char * const gcc_pcie20_phy0_pipe_clk_xo[] = {
  109. - "pcie20_phy0_pipe_clk",
  110. - "xo",
  111. -};
  112. -
  113. -static const struct parent_map gcc_pcie20_phy0_pipe_clk_xo_map[] = {
  114. - { P_PCIE20_PHY0_PIPE, 0 },
  115. - { P_XO, 2 },
  116. -};
  117. -
  118. -static const char * const gcc_pcie20_phy1_pipe_clk_xo[] = {
  119. - "pcie20_phy1_pipe_clk",
  120. - "xo",
  121. -};
  122. -
  123. -static const struct parent_map gcc_pcie20_phy1_pipe_clk_xo_map[] = {
  124. - { P_PCIE20_PHY1_PIPE, 0 },
  125. - { P_XO, 2 },
  126. -};
  127. -
  128. -static const char * const gcc_xo_gpll0_gpll6_gpll0_div2[] = {
  129. - "xo",
  130. - "gpll0",
  131. - "gpll6",
  132. - "gpll0_out_main_div2",
  133. -};
  134. -
  135. -static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_div2_map[] = {
  136. - { P_XO, 0 },
  137. - { P_GPLL0, 1 },
  138. - { P_GPLL6, 2 },
  139. - { P_GPLL0_DIV2, 4 },
  140. -};
  141. -
  142. -static const char * const gcc_xo_gpll0_gpll6_gpll0_out_main_div2[] = {
  143. - "xo",
  144. - "gpll0",
  145. - "gpll6",
  146. - "gpll0_out_main_div2",
  147. -};
  148. -
  149. -static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map[] = {
  150. - { P_XO, 0 },
  151. - { P_GPLL0, 1 },
  152. - { P_GPLL6, 2 },
  153. - { P_GPLL0_DIV2, 3 },
  154. -};
  155. -
  156. -static const char * const gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2[] = {
  157. - "xo",
  158. - "bias_pll_nss_noc_clk",
  159. - "gpll0",
  160. - "gpll2",
  161. -};
  162. -
  163. -static const struct parent_map gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2_map[] = {
  164. - { P_XO, 0 },
  165. - { P_BIAS_PLL_NSS_NOC, 1 },
  166. - { P_GPLL0, 2 },
  167. - { P_GPLL2, 3 },
  168. -};
  169. -
  170. -static const char * const gcc_xo_nss_crypto_pll_gpll0[] = {
  171. - "xo",
  172. - "nss_crypto_pll",
  173. - "gpll0",
  174. -};
  175. -
  176. -static const struct parent_map gcc_xo_nss_crypto_pll_gpll0_map[] = {
  177. - { P_XO, 0 },
  178. - { P_NSS_CRYPTO_PLL, 1 },
  179. - { P_GPLL0, 2 },
  180. -};
  181. -
  182. -static const char * const gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6[] = {
  183. - "xo",
  184. - "ubi32_pll",
  185. - "gpll0",
  186. - "gpll2",
  187. - "gpll4",
  188. - "gpll6",
  189. -};
  190. -
  191. -static const struct parent_map gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map[] = {
  192. - { P_XO, 0 },
  193. - { P_UBI32_PLL, 1 },
  194. - { P_GPLL0, 2 },
  195. - { P_GPLL2, 3 },
  196. - { P_GPLL4, 4 },
  197. - { P_GPLL6, 5 },
  198. -};
  199. -
  200. -static const char * const gcc_xo_gpll0_out_main_div2[] = {
  201. - "xo",
  202. - "gpll0_out_main_div2",
  203. -};
  204. -
  205. -static const struct parent_map gcc_xo_gpll0_out_main_div2_map[] = {
  206. - { P_XO, 0 },
  207. - { P_GPLL0_DIV2, 1 },
  208. -};
  209. -
  210. -static const char * const gcc_xo_bias_gpll0_gpll4_nss_ubi32[] = {
  211. - "xo",
  212. - "bias_pll_cc_clk",
  213. - "gpll0",
  214. - "gpll4",
  215. - "nss_crypto_pll",
  216. - "ubi32_pll",
  217. -};
  218. -
  219. -static const struct parent_map gcc_xo_bias_gpll0_gpll4_nss_ubi32_map[] = {
  220. - { P_XO, 0 },
  221. - { P_BIAS_PLL, 1 },
  222. - { P_GPLL0, 2 },
  223. - { P_GPLL4, 3 },
  224. - { P_NSS_CRYPTO_PLL, 4 },
  225. - { P_UBI32_PLL, 5 },
  226. -};
  227. -
  228. -static const char * const gcc_xo_gpll0_gpll4[] = {
  229. - "xo",
  230. - "gpll0",
  231. - "gpll4",
  232. -};
  233. -
  234. -static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
  235. - { P_XO, 0 },
  236. - { P_GPLL0, 1 },
  237. - { P_GPLL4, 2 },
  238. -};
  239. -
  240. -static const char * const gcc_xo_uniphy0_rx_tx_ubi32_bias[] = {
  241. - "xo",
  242. - "uniphy0_gcc_rx_clk",
  243. - "uniphy0_gcc_tx_clk",
  244. - "ubi32_pll",
  245. - "bias_pll_cc_clk",
  246. -};
  247. -
  248. -static const struct parent_map gcc_xo_uniphy0_rx_tx_ubi32_bias_map[] = {
  249. - { P_XO, 0 },
  250. - { P_UNIPHY0_RX, 1 },
  251. - { P_UNIPHY0_TX, 2 },
  252. - { P_UBI32_PLL, 5 },
  253. - { P_BIAS_PLL, 6 },
  254. -};
  255. -
  256. -static const char * const gcc_xo_uniphy0_tx_rx_ubi32_bias[] = {
  257. - "xo",
  258. - "uniphy0_gcc_tx_clk",
  259. - "uniphy0_gcc_rx_clk",
  260. - "ubi32_pll",
  261. - "bias_pll_cc_clk",
  262. -};
  263. -
  264. -static const struct parent_map gcc_xo_uniphy0_tx_rx_ubi32_bias_map[] = {
  265. - { P_XO, 0 },
  266. - { P_UNIPHY0_TX, 1 },
  267. - { P_UNIPHY0_RX, 2 },
  268. - { P_UBI32_PLL, 5 },
  269. - { P_BIAS_PLL, 6 },
  270. -};
  271. -
  272. -static const char * const gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias[] = {
  273. - "xo",
  274. - "uniphy0_gcc_rx_clk",
  275. - "uniphy0_gcc_tx_clk",
  276. - "uniphy1_gcc_rx_clk",
  277. - "uniphy1_gcc_tx_clk",
  278. - "ubi32_pll",
  279. - "bias_pll_cc_clk",
  280. -};
  281. -
  282. -static const struct parent_map
  283. -gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map[] = {
  284. - { P_XO, 0 },
  285. - { P_UNIPHY0_RX, 1 },
  286. - { P_UNIPHY0_TX, 2 },
  287. - { P_UNIPHY1_RX, 3 },
  288. - { P_UNIPHY1_TX, 4 },
  289. - { P_UBI32_PLL, 5 },
  290. - { P_BIAS_PLL, 6 },
  291. -};
  292. -
  293. -static const char * const gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias[] = {
  294. - "xo",
  295. - "uniphy0_gcc_tx_clk",
  296. - "uniphy0_gcc_rx_clk",
  297. - "uniphy1_gcc_tx_clk",
  298. - "uniphy1_gcc_rx_clk",
  299. - "ubi32_pll",
  300. - "bias_pll_cc_clk",
  301. -};
  302. -
  303. -static const struct parent_map
  304. -gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map[] = {
  305. - { P_XO, 0 },
  306. - { P_UNIPHY0_TX, 1 },
  307. - { P_UNIPHY0_RX, 2 },
  308. - { P_UNIPHY1_TX, 3 },
  309. - { P_UNIPHY1_RX, 4 },
  310. - { P_UBI32_PLL, 5 },
  311. - { P_BIAS_PLL, 6 },
  312. -};
  313. -
  314. -static const char * const gcc_xo_uniphy2_rx_tx_ubi32_bias[] = {
  315. - "xo",
  316. - "uniphy2_gcc_rx_clk",
  317. - "uniphy2_gcc_tx_clk",
  318. - "ubi32_pll",
  319. - "bias_pll_cc_clk",
  320. -};
  321. -
  322. -static const struct parent_map gcc_xo_uniphy2_rx_tx_ubi32_bias_map[] = {
  323. - { P_XO, 0 },
  324. - { P_UNIPHY2_RX, 1 },
  325. - { P_UNIPHY2_TX, 2 },
  326. - { P_UBI32_PLL, 5 },
  327. - { P_BIAS_PLL, 6 },
  328. -};
  329. -
  330. -static const char * const gcc_xo_uniphy2_tx_rx_ubi32_bias[] = {
  331. - "xo",
  332. - "uniphy2_gcc_tx_clk",
  333. - "uniphy2_gcc_rx_clk",
  334. - "ubi32_pll",
  335. - "bias_pll_cc_clk",
  336. -};
  337. -
  338. -static const struct parent_map gcc_xo_uniphy2_tx_rx_ubi32_bias_map[] = {
  339. - { P_XO, 0 },
  340. - { P_UNIPHY2_TX, 1 },
  341. - { P_UNIPHY2_RX, 2 },
  342. - { P_UBI32_PLL, 5 },
  343. - { P_BIAS_PLL, 6 },
  344. -};
  345. -
  346. -static const char * const gcc_xo_gpll0_gpll6_gpll0_sleep_clk[] = {
  347. - "xo",
  348. - "gpll0",
  349. - "gpll6",
  350. - "gpll0_out_main_div2",
  351. - "sleep_clk",
  352. -};
  353. -
  354. -static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map[] = {
  355. - { P_XO, 0 },
  356. - { P_GPLL0, 1 },
  357. - { P_GPLL6, 2 },
  358. - { P_GPLL0_DIV2, 4 },
  359. - { P_SLEEP_CLK, 6 },
  360. -};
  361. -
  362. static struct clk_alpha_pll gpll0_main = {
  363. .offset = 0x21000,
  364. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  365. @@ -400,8 +57,9 @@ static struct clk_alpha_pll gpll0_main =
  366. .enable_mask = BIT(0),
  367. .hw.init = &(struct clk_init_data){
  368. .name = "gpll0_main",
  369. - .parent_names = (const char *[]){
  370. - "xo"
  371. + .parent_data = &(const struct clk_parent_data){
  372. + .fw_name = "xo",
  373. + .name = "xo",
  374. },
  375. .num_parents = 1,
  376. .ops = &clk_alpha_pll_ops,
  377. @@ -414,9 +72,8 @@ static struct clk_fixed_factor gpll0_out
  378. .div = 2,
  379. .hw.init = &(struct clk_init_data){
  380. .name = "gpll0_out_main_div2",
  381. - .parent_names = (const char *[]){
  382. - "gpll0_main"
  383. - },
  384. + .parent_hws = (const struct clk_hw *[]){
  385. + &gpll0_main.clkr.hw },
  386. .num_parents = 1,
  387. .ops = &clk_fixed_factor_ops,
  388. },
  389. @@ -428,9 +85,8 @@ static struct clk_alpha_pll_postdiv gpll
  390. .width = 4,
  391. .clkr.hw.init = &(struct clk_init_data){
  392. .name = "gpll0",
  393. - .parent_names = (const char *[]){
  394. - "gpll0_main"
  395. - },
  396. + .parent_hws = (const struct clk_hw *[]){
  397. + &gpll0_main.clkr.hw },
  398. .num_parents = 1,
  399. .ops = &clk_alpha_pll_postdiv_ro_ops,
  400. },
  401. @@ -444,8 +100,9 @@ static struct clk_alpha_pll gpll2_main =
  402. .enable_mask = BIT(2),
  403. .hw.init = &(struct clk_init_data){
  404. .name = "gpll2_main",
  405. - .parent_names = (const char *[]){
  406. - "xo"
  407. + .parent_data = &(const struct clk_parent_data){
  408. + .fw_name = "xo",
  409. + .name = "xo",
  410. },
  411. .num_parents = 1,
  412. .ops = &clk_alpha_pll_ops,
  413. @@ -460,9 +117,8 @@ static struct clk_alpha_pll_postdiv gpll
  414. .width = 4,
  415. .clkr.hw.init = &(struct clk_init_data){
  416. .name = "gpll2",
  417. - .parent_names = (const char *[]){
  418. - "gpll2_main"
  419. - },
  420. + .parent_hws = (const struct clk_hw *[]){
  421. + &gpll2_main.clkr.hw },
  422. .num_parents = 1,
  423. .ops = &clk_alpha_pll_postdiv_ro_ops,
  424. },
  425. @@ -476,8 +132,9 @@ static struct clk_alpha_pll gpll4_main =
  426. .enable_mask = BIT(5),
  427. .hw.init = &(struct clk_init_data){
  428. .name = "gpll4_main",
  429. - .parent_names = (const char *[]){
  430. - "xo"
  431. + .parent_data = &(const struct clk_parent_data){
  432. + .fw_name = "xo",
  433. + .name = "xo",
  434. },
  435. .num_parents = 1,
  436. .ops = &clk_alpha_pll_ops,
  437. @@ -492,9 +149,8 @@ static struct clk_alpha_pll_postdiv gpll
  438. .width = 4,
  439. .clkr.hw.init = &(struct clk_init_data){
  440. .name = "gpll4",
  441. - .parent_names = (const char *[]){
  442. - "gpll4_main"
  443. - },
  444. + .parent_hws = (const struct clk_hw *[]){
  445. + &gpll4_main.clkr.hw },
  446. .num_parents = 1,
  447. .ops = &clk_alpha_pll_postdiv_ro_ops,
  448. },
  449. @@ -509,8 +165,9 @@ static struct clk_alpha_pll gpll6_main =
  450. .enable_mask = BIT(7),
  451. .hw.init = &(struct clk_init_data){
  452. .name = "gpll6_main",
  453. - .parent_names = (const char *[]){
  454. - "xo"
  455. + .parent_data = &(const struct clk_parent_data){
  456. + .fw_name = "xo",
  457. + .name = "xo",
  458. },
  459. .num_parents = 1,
  460. .ops = &clk_alpha_pll_ops,
  461. @@ -525,9 +182,8 @@ static struct clk_alpha_pll_postdiv gpll
  462. .width = 2,
  463. .clkr.hw.init = &(struct clk_init_data){
  464. .name = "gpll6",
  465. - .parent_names = (const char *[]){
  466. - "gpll6_main"
  467. - },
  468. + .parent_hws = (const struct clk_hw *[]){
  469. + &gpll6_main.clkr.hw },
  470. .num_parents = 1,
  471. .ops = &clk_alpha_pll_postdiv_ro_ops,
  472. },
  473. @@ -538,9 +194,8 @@ static struct clk_fixed_factor gpll6_out
  474. .div = 2,
  475. .hw.init = &(struct clk_init_data){
  476. .name = "gpll6_out_main_div2",
  477. - .parent_names = (const char *[]){
  478. - "gpll6_main"
  479. - },
  480. + .parent_hws = (const struct clk_hw *[]){
  481. + &gpll6_main.clkr.hw },
  482. .num_parents = 1,
  483. .ops = &clk_fixed_factor_ops,
  484. },
  485. @@ -555,8 +210,9 @@ static struct clk_alpha_pll ubi32_pll_ma
  486. .enable_mask = BIT(6),
  487. .hw.init = &(struct clk_init_data){
  488. .name = "ubi32_pll_main",
  489. - .parent_names = (const char *[]){
  490. - "xo"
  491. + .parent_data = &(const struct clk_parent_data){
  492. + .fw_name = "xo",
  493. + .name = "xo",
  494. },
  495. .num_parents = 1,
  496. .ops = &clk_alpha_pll_huayra_ops,
  497. @@ -570,9 +226,8 @@ static struct clk_alpha_pll_postdiv ubi3
  498. .width = 2,
  499. .clkr.hw.init = &(struct clk_init_data){
  500. .name = "ubi32_pll",
  501. - .parent_names = (const char *[]){
  502. - "ubi32_pll_main"
  503. - },
  504. + .parent_hws = (const struct clk_hw *[]){
  505. + &ubi32_pll_main.clkr.hw },
  506. .num_parents = 1,
  507. .ops = &clk_alpha_pll_postdiv_ro_ops,
  508. .flags = CLK_SET_RATE_PARENT,
  509. @@ -587,8 +242,9 @@ static struct clk_alpha_pll nss_crypto_p
  510. .enable_mask = BIT(4),
  511. .hw.init = &(struct clk_init_data){
  512. .name = "nss_crypto_pll_main",
  513. - .parent_names = (const char *[]){
  514. - "xo"
  515. + .parent_data = &(const struct clk_parent_data){
  516. + .fw_name = "xo",
  517. + .name = "xo",
  518. },
  519. .num_parents = 1,
  520. .ops = &clk_alpha_pll_ops,
  521. @@ -602,9 +258,8 @@ static struct clk_alpha_pll_postdiv nss_
  522. .width = 4,
  523. .clkr.hw.init = &(struct clk_init_data){
  524. .name = "nss_crypto_pll",
  525. - .parent_names = (const char *[]){
  526. - "nss_crypto_pll_main"
  527. - },
  528. + .parent_hws = (const struct clk_hw *[]){
  529. + &nss_crypto_pll_main.clkr.hw },
  530. .num_parents = 1,
  531. .ops = &clk_alpha_pll_postdiv_ro_ops,
  532. },
  533. @@ -617,6 +272,18 @@ static const struct freq_tbl ftbl_pcnoc_
  534. { }
  535. };
  536. +static const struct clk_parent_data gcc_xo_gpll0_gpll0_out_main_div2[] = {
  537. + { .fw_name = "xo", .name = "xo" },
  538. + { .hw = &gpll0.clkr.hw},
  539. + { .hw = &gpll0_out_main_div2.hw},
  540. +};
  541. +
  542. +static const struct parent_map gcc_xo_gpll0_gpll0_out_main_div2_map[] = {
  543. + { P_XO, 0 },
  544. + { P_GPLL0, 1 },
  545. + { P_GPLL0_DIV2, 4 },
  546. +};
  547. +
  548. static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
  549. .cmd_rcgr = 0x27000,
  550. .freq_tbl = ftbl_pcnoc_bfdcd_clk_src,
  551. @@ -624,8 +291,8 @@ static struct clk_rcg2 pcnoc_bfdcd_clk_s
  552. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  553. .clkr.hw.init = &(struct clk_init_data){
  554. .name = "pcnoc_bfdcd_clk_src",
  555. - .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
  556. - .num_parents = 3,
  557. + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  558. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  559. .ops = &clk_rcg2_ops,
  560. .flags = CLK_IS_CRITICAL,
  561. },
  562. @@ -636,9 +303,8 @@ static struct clk_fixed_factor pcnoc_clk
  563. .div = 1,
  564. .hw.init = &(struct clk_init_data){
  565. .name = "pcnoc_clk_src",
  566. - .parent_names = (const char *[]){
  567. - "pcnoc_bfdcd_clk_src"
  568. - },
  569. + .parent_hws = (const struct clk_hw *[]){
  570. + &pcnoc_bfdcd_clk_src.clkr.hw },
  571. .num_parents = 1,
  572. .ops = &clk_fixed_factor_ops,
  573. .flags = CLK_SET_RATE_PARENT,
  574. @@ -652,8 +318,9 @@ static struct clk_branch gcc_sleep_clk_s
  575. .enable_mask = BIT(1),
  576. .hw.init = &(struct clk_init_data){
  577. .name = "gcc_sleep_clk_src",
  578. - .parent_names = (const char *[]){
  579. - "sleep_clk"
  580. + .parent_data = &(const struct clk_parent_data){
  581. + .fw_name = "sleep_clk",
  582. + .name = "sleep_clk",
  583. },
  584. .num_parents = 1,
  585. .ops = &clk_branch2_ops,
  586. @@ -676,8 +343,8 @@ static struct clk_rcg2 blsp1_qup1_i2c_ap
  587. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  588. .clkr.hw.init = &(struct clk_init_data){
  589. .name = "blsp1_qup1_i2c_apps_clk_src",
  590. - .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
  591. - .num_parents = 3,
  592. + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  593. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  594. .ops = &clk_rcg2_ops,
  595. },
  596. };
  597. @@ -702,8 +369,8 @@ static struct clk_rcg2 blsp1_qup1_spi_ap
  598. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  599. .clkr.hw.init = &(struct clk_init_data){
  600. .name = "blsp1_qup1_spi_apps_clk_src",
  601. - .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
  602. - .num_parents = 3,
  603. + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  604. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  605. .ops = &clk_rcg2_ops,
  606. },
  607. };
  608. @@ -715,8 +382,8 @@ static struct clk_rcg2 blsp1_qup2_i2c_ap
  609. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  610. .clkr.hw.init = &(struct clk_init_data){
  611. .name = "blsp1_qup2_i2c_apps_clk_src",
  612. - .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
  613. - .num_parents = 3,
  614. + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  615. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  616. .ops = &clk_rcg2_ops,
  617. },
  618. };
  619. @@ -729,8 +396,8 @@ static struct clk_rcg2 blsp1_qup2_spi_ap
  620. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  621. .clkr.hw.init = &(struct clk_init_data){
  622. .name = "blsp1_qup2_spi_apps_clk_src",
  623. - .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
  624. - .num_parents = 3,
  625. + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  626. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  627. .ops = &clk_rcg2_ops,
  628. },
  629. };
  630. @@ -742,8 +409,8 @@ static struct clk_rcg2 blsp1_qup3_i2c_ap
  631. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  632. .clkr.hw.init = &(struct clk_init_data){
  633. .name = "blsp1_qup3_i2c_apps_clk_src",
  634. - .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
  635. - .num_parents = 3,
  636. + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  637. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  638. .ops = &clk_rcg2_ops,
  639. },
  640. };
  641. @@ -756,8 +423,8 @@ static struct clk_rcg2 blsp1_qup3_spi_ap
  642. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  643. .clkr.hw.init = &(struct clk_init_data){
  644. .name = "blsp1_qup3_spi_apps_clk_src",
  645. - .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
  646. - .num_parents = 3,
  647. + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  648. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  649. .ops = &clk_rcg2_ops,
  650. },
  651. };
  652. @@ -769,8 +436,8 @@ static struct clk_rcg2 blsp1_qup4_i2c_ap
  653. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  654. .clkr.hw.init = &(struct clk_init_data){
  655. .name = "blsp1_qup4_i2c_apps_clk_src",
  656. - .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
  657. - .num_parents = 3,
  658. + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  659. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  660. .ops = &clk_rcg2_ops,
  661. },
  662. };
  663. @@ -783,8 +450,8 @@ static struct clk_rcg2 blsp1_qup4_spi_ap
  664. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  665. .clkr.hw.init = &(struct clk_init_data){
  666. .name = "blsp1_qup4_spi_apps_clk_src",
  667. - .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
  668. - .num_parents = 3,
  669. + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  670. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  671. .ops = &clk_rcg2_ops,
  672. },
  673. };
  674. @@ -796,8 +463,8 @@ static struct clk_rcg2 blsp1_qup5_i2c_ap
  675. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  676. .clkr.hw.init = &(struct clk_init_data){
  677. .name = "blsp1_qup5_i2c_apps_clk_src",
  678. - .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
  679. - .num_parents = 3,
  680. + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  681. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  682. .ops = &clk_rcg2_ops,
  683. },
  684. };
  685. @@ -810,8 +477,8 @@ static struct clk_rcg2 blsp1_qup5_spi_ap
  686. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  687. .clkr.hw.init = &(struct clk_init_data){
  688. .name = "blsp1_qup5_spi_apps_clk_src",
  689. - .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
  690. - .num_parents = 3,
  691. + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  692. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  693. .ops = &clk_rcg2_ops,
  694. },
  695. };
  696. @@ -823,8 +490,8 @@ static struct clk_rcg2 blsp1_qup6_i2c_ap
  697. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  698. .clkr.hw.init = &(struct clk_init_data){
  699. .name = "blsp1_qup6_i2c_apps_clk_src",
  700. - .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
  701. - .num_parents = 3,
  702. + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  703. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  704. .ops = &clk_rcg2_ops,
  705. },
  706. };
  707. @@ -837,8 +504,8 @@ static struct clk_rcg2 blsp1_qup6_spi_ap
  708. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  709. .clkr.hw.init = &(struct clk_init_data){
  710. .name = "blsp1_qup6_spi_apps_clk_src",
  711. - .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
  712. - .num_parents = 3,
  713. + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  714. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  715. .ops = &clk_rcg2_ops,
  716. },
  717. };
  718. @@ -871,8 +538,8 @@ static struct clk_rcg2 blsp1_uart1_apps_
  719. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  720. .clkr.hw.init = &(struct clk_init_data){
  721. .name = "blsp1_uart1_apps_clk_src",
  722. - .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
  723. - .num_parents = 3,
  724. + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  725. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  726. .ops = &clk_rcg2_ops,
  727. },
  728. };
  729. @@ -885,8 +552,8 @@ static struct clk_rcg2 blsp1_uart2_apps_
  730. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  731. .clkr.hw.init = &(struct clk_init_data){
  732. .name = "blsp1_uart2_apps_clk_src",
  733. - .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
  734. - .num_parents = 3,
  735. + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  736. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  737. .ops = &clk_rcg2_ops,
  738. },
  739. };
  740. @@ -899,8 +566,8 @@ static struct clk_rcg2 blsp1_uart3_apps_
  741. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  742. .clkr.hw.init = &(struct clk_init_data){
  743. .name = "blsp1_uart3_apps_clk_src",
  744. - .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
  745. - .num_parents = 3,
  746. + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  747. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  748. .ops = &clk_rcg2_ops,
  749. },
  750. };
  751. @@ -913,8 +580,8 @@ static struct clk_rcg2 blsp1_uart4_apps_
  752. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  753. .clkr.hw.init = &(struct clk_init_data){
  754. .name = "blsp1_uart4_apps_clk_src",
  755. - .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
  756. - .num_parents = 3,
  757. + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  758. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  759. .ops = &clk_rcg2_ops,
  760. },
  761. };
  762. @@ -927,8 +594,8 @@ static struct clk_rcg2 blsp1_uart5_apps_
  763. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  764. .clkr.hw.init = &(struct clk_init_data){
  765. .name = "blsp1_uart5_apps_clk_src",
  766. - .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
  767. - .num_parents = 3,
  768. + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  769. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  770. .ops = &clk_rcg2_ops,
  771. },
  772. };
  773. @@ -941,8 +608,8 @@ static struct clk_rcg2 blsp1_uart6_apps_
  774. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  775. .clkr.hw.init = &(struct clk_init_data){
  776. .name = "blsp1_uart6_apps_clk_src",
  777. - .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
  778. - .num_parents = 3,
  779. + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  780. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  781. .ops = &clk_rcg2_ops,
  782. },
  783. };
  784. @@ -952,6 +619,11 @@ static const struct clk_parent_data gcc_
  785. { .hw = &gpll0.clkr.hw },
  786. };
  787. +static const struct parent_map gcc_xo_gpll0_map[] = {
  788. + { P_XO, 0 },
  789. + { P_GPLL0, 1 },
  790. +};
  791. +
  792. static const struct freq_tbl ftbl_pcie_axi_clk_src[] = {
  793. F(19200000, P_XO, 1, 0, 0),
  794. F(200000000, P_GPLL0, 4, 0, 0),
  795. @@ -966,7 +638,7 @@ static struct clk_rcg2 pcie0_axi_clk_src
  796. .clkr.hw.init = &(struct clk_init_data){
  797. .name = "pcie0_axi_clk_src",
  798. .parent_data = gcc_xo_gpll0,
  799. - .num_parents = 2,
  800. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
  801. .ops = &clk_rcg2_ops,
  802. },
  803. };
  804. @@ -975,6 +647,18 @@ static const struct freq_tbl ftbl_pcie_a
  805. F(19200000, P_XO, 1, 0, 0),
  806. };
  807. +static const struct clk_parent_data gcc_xo_gpll0_sleep_clk[] = {
  808. + { .fw_name = "xo", .name = "xo" },
  809. + { .hw = &gpll0.clkr.hw },
  810. + { .fw_name = "sleep_clk", .name = "sleep_clk" },
  811. +};
  812. +
  813. +static const struct parent_map gcc_xo_gpll0_sleep_clk_map[] = {
  814. + { P_XO, 0 },
  815. + { P_GPLL0, 2 },
  816. + { P_SLEEP_CLK, 6 },
  817. +};
  818. +
  819. static struct clk_rcg2 pcie0_aux_clk_src = {
  820. .cmd_rcgr = 0x75024,
  821. .freq_tbl = ftbl_pcie_aux_clk_src,
  822. @@ -983,12 +667,22 @@ static struct clk_rcg2 pcie0_aux_clk_src
  823. .parent_map = gcc_xo_gpll0_sleep_clk_map,
  824. .clkr.hw.init = &(struct clk_init_data){
  825. .name = "pcie0_aux_clk_src",
  826. - .parent_names = gcc_xo_gpll0_sleep_clk,
  827. - .num_parents = 3,
  828. + .parent_data = gcc_xo_gpll0_sleep_clk,
  829. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk),
  830. .ops = &clk_rcg2_ops,
  831. },
  832. };
  833. +static const struct clk_parent_data gcc_pcie20_phy0_pipe_clk_xo[] = {
  834. + { .name = "pcie20_phy0_pipe_clk" },
  835. + { .fw_name = "xo", .name = "xo" },
  836. +};
  837. +
  838. +static const struct parent_map gcc_pcie20_phy0_pipe_clk_xo_map[] = {
  839. + { P_PCIE20_PHY0_PIPE, 0 },
  840. + { P_XO, 2 },
  841. +};
  842. +
  843. static struct clk_regmap_mux pcie0_pipe_clk_src = {
  844. .reg = 0x7501c,
  845. .shift = 8,
  846. @@ -997,8 +691,8 @@ static struct clk_regmap_mux pcie0_pipe_
  847. .clkr = {
  848. .hw.init = &(struct clk_init_data){
  849. .name = "pcie0_pipe_clk_src",
  850. - .parent_names = gcc_pcie20_phy0_pipe_clk_xo,
  851. - .num_parents = 2,
  852. + .parent_data = gcc_pcie20_phy0_pipe_clk_xo,
  853. + .num_parents = ARRAY_SIZE(gcc_pcie20_phy0_pipe_clk_xo),
  854. .ops = &clk_regmap_mux_closest_ops,
  855. .flags = CLK_SET_RATE_PARENT,
  856. },
  857. @@ -1013,7 +707,7 @@ static struct clk_rcg2 pcie1_axi_clk_src
  858. .clkr.hw.init = &(struct clk_init_data){
  859. .name = "pcie1_axi_clk_src",
  860. .parent_data = gcc_xo_gpll0,
  861. - .num_parents = 2,
  862. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
  863. .ops = &clk_rcg2_ops,
  864. },
  865. };
  866. @@ -1026,12 +720,22 @@ static struct clk_rcg2 pcie1_aux_clk_src
  867. .parent_map = gcc_xo_gpll0_sleep_clk_map,
  868. .clkr.hw.init = &(struct clk_init_data){
  869. .name = "pcie1_aux_clk_src",
  870. - .parent_names = gcc_xo_gpll0_sleep_clk,
  871. - .num_parents = 3,
  872. + .parent_data = gcc_xo_gpll0_sleep_clk,
  873. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk),
  874. .ops = &clk_rcg2_ops,
  875. },
  876. };
  877. +static const struct clk_parent_data gcc_pcie20_phy1_pipe_clk_xo[] = {
  878. + { .name = "pcie20_phy1_pipe_clk" },
  879. + { .fw_name = "xo", .name = "xo" },
  880. +};
  881. +
  882. +static const struct parent_map gcc_pcie20_phy1_pipe_clk_xo_map[] = {
  883. + { P_PCIE20_PHY1_PIPE, 0 },
  884. + { P_XO, 2 },
  885. +};
  886. +
  887. static struct clk_regmap_mux pcie1_pipe_clk_src = {
  888. .reg = 0x7601c,
  889. .shift = 8,
  890. @@ -1040,8 +744,8 @@ static struct clk_regmap_mux pcie1_pipe_
  891. .clkr = {
  892. .hw.init = &(struct clk_init_data){
  893. .name = "pcie1_pipe_clk_src",
  894. - .parent_names = gcc_pcie20_phy1_pipe_clk_xo,
  895. - .num_parents = 2,
  896. + .parent_data = gcc_pcie20_phy1_pipe_clk_xo,
  897. + .num_parents = ARRAY_SIZE(gcc_pcie20_phy1_pipe_clk_xo),
  898. .ops = &clk_regmap_mux_closest_ops,
  899. .flags = CLK_SET_RATE_PARENT,
  900. },
  901. @@ -1060,6 +764,20 @@ static const struct freq_tbl ftbl_sdcc_a
  902. { }
  903. };
  904. +static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll0_out_main_div2[] = {
  905. + { .fw_name = "xo", .name = "xo" },
  906. + { .hw = &gpll0.clkr.hw },
  907. + { .hw = &gpll2.clkr.hw },
  908. + { .hw = &gpll0_out_main_div2.hw },
  909. +};
  910. +
  911. +static const struct parent_map gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map[] = {
  912. + { P_XO, 0 },
  913. + { P_GPLL0, 1 },
  914. + { P_GPLL2, 2 },
  915. + { P_GPLL0_DIV2, 4 },
  916. +};
  917. +
  918. static struct clk_rcg2 sdcc1_apps_clk_src = {
  919. .cmd_rcgr = 0x42004,
  920. .freq_tbl = ftbl_sdcc_apps_clk_src,
  921. @@ -1068,8 +786,8 @@ static struct clk_rcg2 sdcc1_apps_clk_sr
  922. .parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map,
  923. .clkr.hw.init = &(struct clk_init_data){
  924. .name = "sdcc1_apps_clk_src",
  925. - .parent_names = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
  926. - .num_parents = 4,
  927. + .parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
  928. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll0_out_main_div2),
  929. .ops = &clk_rcg2_floor_ops,
  930. },
  931. };
  932. @@ -1080,6 +798,20 @@ static const struct freq_tbl ftbl_sdcc_i
  933. F(308570000, P_GPLL6, 3.5, 0, 0),
  934. };
  935. +static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll0_div2[] = {
  936. + { .fw_name = "xo", .name = "xo" },
  937. + { .hw = &gpll0.clkr.hw },
  938. + { .hw = &gpll6.clkr.hw },
  939. + { .hw = &gpll0_out_main_div2.hw },
  940. +};
  941. +
  942. +static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_div2_map[] = {
  943. + { P_XO, 0 },
  944. + { P_GPLL0, 1 },
  945. + { P_GPLL6, 2 },
  946. + { P_GPLL0_DIV2, 4 },
  947. +};
  948. +
  949. static struct clk_rcg2 sdcc1_ice_core_clk_src = {
  950. .cmd_rcgr = 0x5d000,
  951. .freq_tbl = ftbl_sdcc_ice_core_clk_src,
  952. @@ -1088,8 +820,8 @@ static struct clk_rcg2 sdcc1_ice_core_cl
  953. .parent_map = gcc_xo_gpll0_gpll6_gpll0_div2_map,
  954. .clkr.hw.init = &(struct clk_init_data){
  955. .name = "sdcc1_ice_core_clk_src",
  956. - .parent_names = gcc_xo_gpll0_gpll6_gpll0_div2,
  957. - .num_parents = 4,
  958. + .parent_data = gcc_xo_gpll0_gpll6_gpll0_div2,
  959. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll0_div2),
  960. .ops = &clk_rcg2_ops,
  961. },
  962. };
  963. @@ -1102,8 +834,8 @@ static struct clk_rcg2 sdcc2_apps_clk_sr
  964. .parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map,
  965. .clkr.hw.init = &(struct clk_init_data){
  966. .name = "sdcc2_apps_clk_src",
  967. - .parent_names = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
  968. - .num_parents = 4,
  969. + .parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
  970. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll0_out_main_div2),
  971. .ops = &clk_rcg2_floor_ops,
  972. },
  973. };
  974. @@ -1115,6 +847,18 @@ static const struct freq_tbl ftbl_usb_ma
  975. { }
  976. };
  977. +static const struct clk_parent_data gcc_xo_gpll0_out_main_div2_gpll0[] = {
  978. + { .fw_name = "xo", .name = "xo" },
  979. + { .hw = &gpll0_out_main_div2.hw },
  980. + { .hw = &gpll0.clkr.hw },
  981. +};
  982. +
  983. +static const struct parent_map gcc_xo_gpll0_out_main_div2_gpll0_map[] = {
  984. + { P_XO, 0 },
  985. + { P_GPLL0_DIV2, 2 },
  986. + { P_GPLL0, 1 },
  987. +};
  988. +
  989. static struct clk_rcg2 usb0_master_clk_src = {
  990. .cmd_rcgr = 0x3e00c,
  991. .freq_tbl = ftbl_usb_master_clk_src,
  992. @@ -1123,8 +867,8 @@ static struct clk_rcg2 usb0_master_clk_s
  993. .parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,
  994. .clkr.hw.init = &(struct clk_init_data){
  995. .name = "usb0_master_clk_src",
  996. - .parent_names = gcc_xo_gpll0_out_main_div2_gpll0,
  997. - .num_parents = 3,
  998. + .parent_data = gcc_xo_gpll0_out_main_div2_gpll0,
  999. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_out_main_div2_gpll0),
  1000. .ops = &clk_rcg2_ops,
  1001. },
  1002. };
  1003. @@ -1142,8 +886,8 @@ static struct clk_rcg2 usb0_aux_clk_src
  1004. .parent_map = gcc_xo_gpll0_sleep_clk_map,
  1005. .clkr.hw.init = &(struct clk_init_data){
  1006. .name = "usb0_aux_clk_src",
  1007. - .parent_names = gcc_xo_gpll0_sleep_clk,
  1008. - .num_parents = 3,
  1009. + .parent_data = gcc_xo_gpll0_sleep_clk,
  1010. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk),
  1011. .ops = &clk_rcg2_ops,
  1012. },
  1013. };
  1014. @@ -1155,6 +899,20 @@ static const struct freq_tbl ftbl_usb_mo
  1015. { }
  1016. };
  1017. +static const struct clk_parent_data gcc_xo_gpll6_gpll0_gpll0_out_main_div2[] = {
  1018. + { .fw_name = "xo", .name = "xo" },
  1019. + { .hw = &gpll6.clkr.hw },
  1020. + { .hw = &gpll0.clkr.hw },
  1021. + { .hw = &gpll0_out_main_div2.hw },
  1022. +};
  1023. +
  1024. +static const struct parent_map gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map[] = {
  1025. + { P_XO, 0 },
  1026. + { P_GPLL6, 1 },
  1027. + { P_GPLL0, 3 },
  1028. + { P_GPLL0_DIV2, 4 },
  1029. +};
  1030. +
  1031. static struct clk_rcg2 usb0_mock_utmi_clk_src = {
  1032. .cmd_rcgr = 0x3e020,
  1033. .freq_tbl = ftbl_usb_mock_utmi_clk_src,
  1034. @@ -1163,12 +921,22 @@ static struct clk_rcg2 usb0_mock_utmi_cl
  1035. .parent_map = gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map,
  1036. .clkr.hw.init = &(struct clk_init_data){
  1037. .name = "usb0_mock_utmi_clk_src",
  1038. - .parent_names = gcc_xo_gpll6_gpll0_gpll0_out_main_div2,
  1039. - .num_parents = 4,
  1040. + .parent_data = gcc_xo_gpll6_gpll0_gpll0_out_main_div2,
  1041. + .num_parents = ARRAY_SIZE(gcc_xo_gpll6_gpll0_gpll0_out_main_div2),
  1042. .ops = &clk_rcg2_ops,
  1043. },
  1044. };
  1045. +static const struct clk_parent_data gcc_usb3phy_0_cc_pipe_clk_xo[] = {
  1046. + { .name = "usb3phy_0_cc_pipe_clk" },
  1047. + { .fw_name = "xo", .name = "xo" },
  1048. +};
  1049. +
  1050. +static const struct parent_map gcc_usb3phy_0_cc_pipe_clk_xo_map[] = {
  1051. + { P_USB3PHY_0_PIPE, 0 },
  1052. + { P_XO, 2 },
  1053. +};
  1054. +
  1055. static struct clk_regmap_mux usb0_pipe_clk_src = {
  1056. .reg = 0x3e048,
  1057. .shift = 8,
  1058. @@ -1177,8 +945,8 @@ static struct clk_regmap_mux usb0_pipe_c
  1059. .clkr = {
  1060. .hw.init = &(struct clk_init_data){
  1061. .name = "usb0_pipe_clk_src",
  1062. - .parent_names = gcc_usb3phy_0_cc_pipe_clk_xo,
  1063. - .num_parents = 2,
  1064. + .parent_data = gcc_usb3phy_0_cc_pipe_clk_xo,
  1065. + .num_parents = ARRAY_SIZE(gcc_usb3phy_0_cc_pipe_clk_xo),
  1066. .ops = &clk_regmap_mux_closest_ops,
  1067. .flags = CLK_SET_RATE_PARENT,
  1068. },
  1069. @@ -1193,8 +961,8 @@ static struct clk_rcg2 usb1_master_clk_s
  1070. .parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,
  1071. .clkr.hw.init = &(struct clk_init_data){
  1072. .name = "usb1_master_clk_src",
  1073. - .parent_names = gcc_xo_gpll0_out_main_div2_gpll0,
  1074. - .num_parents = 3,
  1075. + .parent_data = gcc_xo_gpll0_out_main_div2_gpll0,
  1076. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_out_main_div2_gpll0),
  1077. .ops = &clk_rcg2_ops,
  1078. },
  1079. };
  1080. @@ -1207,8 +975,8 @@ static struct clk_rcg2 usb1_aux_clk_src
  1081. .parent_map = gcc_xo_gpll0_sleep_clk_map,
  1082. .clkr.hw.init = &(struct clk_init_data){
  1083. .name = "usb1_aux_clk_src",
  1084. - .parent_names = gcc_xo_gpll0_sleep_clk,
  1085. - .num_parents = 3,
  1086. + .parent_data = gcc_xo_gpll0_sleep_clk,
  1087. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk),
  1088. .ops = &clk_rcg2_ops,
  1089. },
  1090. };
  1091. @@ -1221,12 +989,22 @@ static struct clk_rcg2 usb1_mock_utmi_cl
  1092. .parent_map = gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map,
  1093. .clkr.hw.init = &(struct clk_init_data){
  1094. .name = "usb1_mock_utmi_clk_src",
  1095. - .parent_names = gcc_xo_gpll6_gpll0_gpll0_out_main_div2,
  1096. - .num_parents = 4,
  1097. + .parent_data = gcc_xo_gpll6_gpll0_gpll0_out_main_div2,
  1098. + .num_parents = ARRAY_SIZE(gcc_xo_gpll6_gpll0_gpll0_out_main_div2),
  1099. .ops = &clk_rcg2_ops,
  1100. },
  1101. };
  1102. +static const struct clk_parent_data gcc_usb3phy_1_cc_pipe_clk_xo[] = {
  1103. + { .name = "usb3phy_1_cc_pipe_clk" },
  1104. + { .fw_name = "xo", .name = "xo" },
  1105. +};
  1106. +
  1107. +static const struct parent_map gcc_usb3phy_1_cc_pipe_clk_xo_map[] = {
  1108. + { P_USB3PHY_1_PIPE, 0 },
  1109. + { P_XO, 2 },
  1110. +};
  1111. +
  1112. static struct clk_regmap_mux usb1_pipe_clk_src = {
  1113. .reg = 0x3f048,
  1114. .shift = 8,
  1115. @@ -1235,8 +1013,8 @@ static struct clk_regmap_mux usb1_pipe_c
  1116. .clkr = {
  1117. .hw.init = &(struct clk_init_data){
  1118. .name = "usb1_pipe_clk_src",
  1119. - .parent_names = gcc_usb3phy_1_cc_pipe_clk_xo,
  1120. - .num_parents = 2,
  1121. + .parent_data = gcc_usb3phy_1_cc_pipe_clk_xo,
  1122. + .num_parents = ARRAY_SIZE(gcc_usb3phy_1_cc_pipe_clk_xo),
  1123. .ops = &clk_regmap_mux_closest_ops,
  1124. .flags = CLK_SET_RATE_PARENT,
  1125. },
  1126. @@ -1250,8 +1028,9 @@ static struct clk_branch gcc_xo_clk_src
  1127. .enable_mask = BIT(1),
  1128. .hw.init = &(struct clk_init_data){
  1129. .name = "gcc_xo_clk_src",
  1130. - .parent_names = (const char *[]){
  1131. - "xo"
  1132. + .parent_data = &(const struct clk_parent_data){
  1133. + .fw_name = "xo",
  1134. + .name = "xo",
  1135. },
  1136. .num_parents = 1,
  1137. .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
  1138. @@ -1265,9 +1044,8 @@ static struct clk_fixed_factor gcc_xo_di
  1139. .div = 4,
  1140. .hw.init = &(struct clk_init_data){
  1141. .name = "gcc_xo_div4_clk_src",
  1142. - .parent_names = (const char *[]){
  1143. - "gcc_xo_clk_src"
  1144. - },
  1145. + .parent_hws = (const struct clk_hw *[]){
  1146. + &gcc_xo_clk_src.clkr.hw },
  1147. .num_parents = 1,
  1148. .ops = &clk_fixed_factor_ops,
  1149. .flags = CLK_SET_RATE_PARENT,
  1150. @@ -1285,6 +1063,20 @@ static const struct freq_tbl ftbl_system
  1151. { }
  1152. };
  1153. +static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll0_out_main_div2[] = {
  1154. + { .fw_name = "xo", .name = "xo" },
  1155. + { .hw = &gpll0.clkr.hw },
  1156. + { .hw = &gpll6.clkr.hw },
  1157. + { .hw = &gpll0_out_main_div2.hw },
  1158. +};
  1159. +
  1160. +static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map[] = {
  1161. + { P_XO, 0 },
  1162. + { P_GPLL0, 1 },
  1163. + { P_GPLL6, 2 },
  1164. + { P_GPLL0_DIV2, 3 },
  1165. +};
  1166. +
  1167. static struct clk_rcg2 system_noc_bfdcd_clk_src = {
  1168. .cmd_rcgr = 0x26004,
  1169. .freq_tbl = ftbl_system_noc_bfdcd_clk_src,
  1170. @@ -1292,8 +1084,8 @@ static struct clk_rcg2 system_noc_bfdcd_
  1171. .parent_map = gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map,
  1172. .clkr.hw.init = &(struct clk_init_data){
  1173. .name = "system_noc_bfdcd_clk_src",
  1174. - .parent_names = gcc_xo_gpll0_gpll6_gpll0_out_main_div2,
  1175. - .num_parents = 4,
  1176. + .parent_data = gcc_xo_gpll0_gpll6_gpll0_out_main_div2,
  1177. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll0_out_main_div2),
  1178. .ops = &clk_rcg2_ops,
  1179. .flags = CLK_IS_CRITICAL,
  1180. },
  1181. @@ -1304,9 +1096,8 @@ static struct clk_fixed_factor system_no
  1182. .div = 1,
  1183. .hw.init = &(struct clk_init_data){
  1184. .name = "system_noc_clk_src",
  1185. - .parent_names = (const char *[]){
  1186. - "system_noc_bfdcd_clk_src"
  1187. - },
  1188. + .parent_hws = (const struct clk_hw *[]){
  1189. + &system_noc_bfdcd_clk_src.clkr.hw },
  1190. .num_parents = 1,
  1191. .ops = &clk_fixed_factor_ops,
  1192. .flags = CLK_SET_RATE_PARENT,
  1193. @@ -1327,7 +1118,7 @@ static struct clk_rcg2 nss_ce_clk_src =
  1194. .clkr.hw.init = &(struct clk_init_data){
  1195. .name = "nss_ce_clk_src",
  1196. .parent_data = gcc_xo_gpll0,
  1197. - .num_parents = 2,
  1198. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
  1199. .ops = &clk_rcg2_ops,
  1200. },
  1201. };
  1202. @@ -1338,6 +1129,20 @@ static const struct freq_tbl ftbl_nss_no
  1203. { }
  1204. };
  1205. +static const struct clk_parent_data gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2[] = {
  1206. + { .fw_name = "xo", .name = "xo" },
  1207. + { .name = "bias_pll_nss_noc_clk" },
  1208. + { .hw = &gpll0.clkr.hw },
  1209. + { .hw = &gpll2.clkr.hw },
  1210. +};
  1211. +
  1212. +static const struct parent_map gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2_map[] = {
  1213. + { P_XO, 0 },
  1214. + { P_BIAS_PLL_NSS_NOC, 1 },
  1215. + { P_GPLL0, 2 },
  1216. + { P_GPLL2, 3 },
  1217. +};
  1218. +
  1219. static struct clk_rcg2 nss_noc_bfdcd_clk_src = {
  1220. .cmd_rcgr = 0x68088,
  1221. .freq_tbl = ftbl_nss_noc_bfdcd_clk_src,
  1222. @@ -1345,8 +1150,8 @@ static struct clk_rcg2 nss_noc_bfdcd_clk
  1223. .parent_map = gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2_map,
  1224. .clkr.hw.init = &(struct clk_init_data){
  1225. .name = "nss_noc_bfdcd_clk_src",
  1226. - .parent_names = gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2,
  1227. - .num_parents = 4,
  1228. + .parent_data = gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2,
  1229. + .num_parents = ARRAY_SIZE(gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2),
  1230. .ops = &clk_rcg2_ops,
  1231. },
  1232. };
  1233. @@ -1356,9 +1161,8 @@ static struct clk_fixed_factor nss_noc_c
  1234. .div = 1,
  1235. .hw.init = &(struct clk_init_data){
  1236. .name = "nss_noc_clk_src",
  1237. - .parent_names = (const char *[]){
  1238. - "nss_noc_bfdcd_clk_src"
  1239. - },
  1240. + .parent_hws = (const struct clk_hw *[]){
  1241. + &nss_noc_bfdcd_clk_src.clkr.hw },
  1242. .num_parents = 1,
  1243. .ops = &clk_fixed_factor_ops,
  1244. .flags = CLK_SET_RATE_PARENT,
  1245. @@ -1371,6 +1175,18 @@ static const struct freq_tbl ftbl_nss_cr
  1246. { }
  1247. };
  1248. +static const struct clk_parent_data gcc_xo_nss_crypto_pll_gpll0[] = {
  1249. + { .fw_name = "xo", .name = "xo" },
  1250. + { .hw = &nss_crypto_pll.clkr.hw },
  1251. + { .hw = &gpll0.clkr.hw },
  1252. +};
  1253. +
  1254. +static const struct parent_map gcc_xo_nss_crypto_pll_gpll0_map[] = {
  1255. + { P_XO, 0 },
  1256. + { P_NSS_CRYPTO_PLL, 1 },
  1257. + { P_GPLL0, 2 },
  1258. +};
  1259. +
  1260. static struct clk_rcg2 nss_crypto_clk_src = {
  1261. .cmd_rcgr = 0x68144,
  1262. .freq_tbl = ftbl_nss_crypto_clk_src,
  1263. @@ -1379,8 +1195,8 @@ static struct clk_rcg2 nss_crypto_clk_sr
  1264. .parent_map = gcc_xo_nss_crypto_pll_gpll0_map,
  1265. .clkr.hw.init = &(struct clk_init_data){
  1266. .name = "nss_crypto_clk_src",
  1267. - .parent_names = gcc_xo_nss_crypto_pll_gpll0,
  1268. - .num_parents = 3,
  1269. + .parent_data = gcc_xo_nss_crypto_pll_gpll0,
  1270. + .num_parents = ARRAY_SIZE(gcc_xo_nss_crypto_pll_gpll0),
  1271. .ops = &clk_rcg2_ops,
  1272. },
  1273. };
  1274. @@ -1394,6 +1210,24 @@ static const struct freq_tbl ftbl_nss_ub
  1275. { }
  1276. };
  1277. +static const struct clk_parent_data gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6[] = {
  1278. + { .fw_name = "xo", .name = "xo" },
  1279. + { .hw = &ubi32_pll.clkr.hw },
  1280. + { .hw = &gpll0.clkr.hw },
  1281. + { .hw = &gpll2.clkr.hw },
  1282. + { .hw = &gpll4.clkr.hw },
  1283. + { .hw = &gpll6.clkr.hw },
  1284. +};
  1285. +
  1286. +static const struct parent_map gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map[] = {
  1287. + { P_XO, 0 },
  1288. + { P_UBI32_PLL, 1 },
  1289. + { P_GPLL0, 2 },
  1290. + { P_GPLL2, 3 },
  1291. + { P_GPLL4, 4 },
  1292. + { P_GPLL6, 5 },
  1293. +};
  1294. +
  1295. static struct clk_rcg2 nss_ubi0_clk_src = {
  1296. .cmd_rcgr = 0x68104,
  1297. .freq_tbl = ftbl_nss_ubi_clk_src,
  1298. @@ -1401,8 +1235,8 @@ static struct clk_rcg2 nss_ubi0_clk_src
  1299. .parent_map = gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map,
  1300. .clkr.hw.init = &(struct clk_init_data){
  1301. .name = "nss_ubi0_clk_src",
  1302. - .parent_names = gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6,
  1303. - .num_parents = 6,
  1304. + .parent_data = gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6,
  1305. + .num_parents = ARRAY_SIZE(gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6),
  1306. .ops = &clk_rcg2_ops,
  1307. .flags = CLK_SET_RATE_PARENT,
  1308. },
  1309. @@ -1415,9 +1249,8 @@ static struct clk_regmap_div nss_ubi0_di
  1310. .clkr = {
  1311. .hw.init = &(struct clk_init_data){
  1312. .name = "nss_ubi0_div_clk_src",
  1313. - .parent_names = (const char *[]){
  1314. - "nss_ubi0_clk_src"
  1315. - },
  1316. + .parent_hws = (const struct clk_hw *[]){
  1317. + &nss_ubi0_clk_src.clkr.hw },
  1318. .num_parents = 1,
  1319. .ops = &clk_regmap_div_ro_ops,
  1320. .flags = CLK_SET_RATE_PARENT,
  1321. @@ -1432,8 +1265,8 @@ static struct clk_rcg2 nss_ubi1_clk_src
  1322. .parent_map = gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map,
  1323. .clkr.hw.init = &(struct clk_init_data){
  1324. .name = "nss_ubi1_clk_src",
  1325. - .parent_names = gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6,
  1326. - .num_parents = 6,
  1327. + .parent_data = gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6,
  1328. + .num_parents = ARRAY_SIZE(gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6),
  1329. .ops = &clk_rcg2_ops,
  1330. .flags = CLK_SET_RATE_PARENT,
  1331. },
  1332. @@ -1446,9 +1279,8 @@ static struct clk_regmap_div nss_ubi1_di
  1333. .clkr = {
  1334. .hw.init = &(struct clk_init_data){
  1335. .name = "nss_ubi1_div_clk_src",
  1336. - .parent_names = (const char *[]){
  1337. - "nss_ubi1_clk_src"
  1338. - },
  1339. + .parent_hws = (const struct clk_hw *[]){
  1340. + &nss_ubi1_clk_src.clkr.hw },
  1341. .num_parents = 1,
  1342. .ops = &clk_regmap_div_ro_ops,
  1343. .flags = CLK_SET_RATE_PARENT,
  1344. @@ -1462,6 +1294,16 @@ static const struct freq_tbl ftbl_ubi_mp
  1345. { }
  1346. };
  1347. +static const struct clk_parent_data gcc_xo_gpll0_out_main_div2[] = {
  1348. + { .fw_name = "xo", .name = "xo" },
  1349. + { .hw = &gpll0_out_main_div2.hw },
  1350. +};
  1351. +
  1352. +static const struct parent_map gcc_xo_gpll0_out_main_div2_map[] = {
  1353. + { P_XO, 0 },
  1354. + { P_GPLL0_DIV2, 1 },
  1355. +};
  1356. +
  1357. static struct clk_rcg2 ubi_mpt_clk_src = {
  1358. .cmd_rcgr = 0x68090,
  1359. .freq_tbl = ftbl_ubi_mpt_clk_src,
  1360. @@ -1469,8 +1311,8 @@ static struct clk_rcg2 ubi_mpt_clk_src =
  1361. .parent_map = gcc_xo_gpll0_out_main_div2_map,
  1362. .clkr.hw.init = &(struct clk_init_data){
  1363. .name = "ubi_mpt_clk_src",
  1364. - .parent_names = gcc_xo_gpll0_out_main_div2,
  1365. - .num_parents = 2,
  1366. + .parent_data = gcc_xo_gpll0_out_main_div2,
  1367. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_out_main_div2),
  1368. .ops = &clk_rcg2_ops,
  1369. },
  1370. };
  1371. @@ -1481,6 +1323,18 @@ static const struct freq_tbl ftbl_nss_im
  1372. { }
  1373. };
  1374. +static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = {
  1375. + { .fw_name = "xo", .name = "xo" },
  1376. + { .hw = &gpll0.clkr.hw },
  1377. + { .hw = &gpll4.clkr.hw },
  1378. +};
  1379. +
  1380. +static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
  1381. + { P_XO, 0 },
  1382. + { P_GPLL0, 1 },
  1383. + { P_GPLL4, 2 },
  1384. +};
  1385. +
  1386. static struct clk_rcg2 nss_imem_clk_src = {
  1387. .cmd_rcgr = 0x68158,
  1388. .freq_tbl = ftbl_nss_imem_clk_src,
  1389. @@ -1488,8 +1342,8 @@ static struct clk_rcg2 nss_imem_clk_src
  1390. .parent_map = gcc_xo_gpll0_gpll4_map,
  1391. .clkr.hw.init = &(struct clk_init_data){
  1392. .name = "nss_imem_clk_src",
  1393. - .parent_names = gcc_xo_gpll0_gpll4,
  1394. - .num_parents = 3,
  1395. + .parent_data = gcc_xo_gpll0_gpll4,
  1396. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),
  1397. .ops = &clk_rcg2_ops,
  1398. },
  1399. };
  1400. @@ -1500,6 +1354,24 @@ static const struct freq_tbl ftbl_nss_pp
  1401. { }
  1402. };
  1403. +static const struct clk_parent_data gcc_xo_bias_gpll0_gpll4_nss_ubi32[] = {
  1404. + { .fw_name = "xo", .name = "xo" },
  1405. + { .name = "bias_pll_cc_clk" },
  1406. + { .hw = &gpll0.clkr.hw },
  1407. + { .hw = &gpll4.clkr.hw },
  1408. + { .hw = &nss_crypto_pll.clkr.hw },
  1409. + { .hw = &ubi32_pll.clkr.hw },
  1410. +};
  1411. +
  1412. +static const struct parent_map gcc_xo_bias_gpll0_gpll4_nss_ubi32_map[] = {
  1413. + { P_XO, 0 },
  1414. + { P_BIAS_PLL, 1 },
  1415. + { P_GPLL0, 2 },
  1416. + { P_GPLL4, 3 },
  1417. + { P_NSS_CRYPTO_PLL, 4 },
  1418. + { P_UBI32_PLL, 5 },
  1419. +};
  1420. +
  1421. static struct clk_rcg2 nss_ppe_clk_src = {
  1422. .cmd_rcgr = 0x68080,
  1423. .freq_tbl = ftbl_nss_ppe_clk_src,
  1424. @@ -1507,8 +1379,8 @@ static struct clk_rcg2 nss_ppe_clk_src =
  1425. .parent_map = gcc_xo_bias_gpll0_gpll4_nss_ubi32_map,
  1426. .clkr.hw.init = &(struct clk_init_data){
  1427. .name = "nss_ppe_clk_src",
  1428. - .parent_names = gcc_xo_bias_gpll0_gpll4_nss_ubi32,
  1429. - .num_parents = 6,
  1430. + .parent_data = gcc_xo_bias_gpll0_gpll4_nss_ubi32,
  1431. + .num_parents = ARRAY_SIZE(gcc_xo_bias_gpll0_gpll4_nss_ubi32),
  1432. .ops = &clk_rcg2_ops,
  1433. },
  1434. };
  1435. @@ -1518,9 +1390,8 @@ static struct clk_fixed_factor nss_ppe_c
  1436. .div = 4,
  1437. .hw.init = &(struct clk_init_data){
  1438. .name = "nss_ppe_cdiv_clk_src",
  1439. - .parent_names = (const char *[]){
  1440. - "nss_ppe_clk_src"
  1441. - },
  1442. + .parent_hws = (const struct clk_hw *[]){
  1443. + &nss_ppe_clk_src.clkr.hw },
  1444. .num_parents = 1,
  1445. .ops = &clk_fixed_factor_ops,
  1446. .flags = CLK_SET_RATE_PARENT,
  1447. @@ -1534,6 +1405,22 @@ static const struct freq_tbl ftbl_nss_po
  1448. { }
  1449. };
  1450. +static const struct clk_parent_data gcc_xo_uniphy0_rx_tx_ubi32_bias[] = {
  1451. + { .fw_name = "xo", .name = "xo" },
  1452. + { .name = "uniphy0_gcc_rx_clk" },
  1453. + { .name = "uniphy0_gcc_tx_clk" },
  1454. + { .hw = &ubi32_pll.clkr.hw },
  1455. + { .name = "bias_pll_cc_clk" },
  1456. +};
  1457. +
  1458. +static const struct parent_map gcc_xo_uniphy0_rx_tx_ubi32_bias_map[] = {
  1459. + { P_XO, 0 },
  1460. + { P_UNIPHY0_RX, 1 },
  1461. + { P_UNIPHY0_TX, 2 },
  1462. + { P_UBI32_PLL, 5 },
  1463. + { P_BIAS_PLL, 6 },
  1464. +};
  1465. +
  1466. static struct clk_rcg2 nss_port1_rx_clk_src = {
  1467. .cmd_rcgr = 0x68020,
  1468. .freq_tbl = ftbl_nss_port1_rx_clk_src,
  1469. @@ -1541,8 +1428,8 @@ static struct clk_rcg2 nss_port1_rx_clk_
  1470. .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
  1471. .clkr.hw.init = &(struct clk_init_data){
  1472. .name = "nss_port1_rx_clk_src",
  1473. - .parent_names = gcc_xo_uniphy0_rx_tx_ubi32_bias,
  1474. - .num_parents = 5,
  1475. + .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
  1476. + .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_rx_tx_ubi32_bias),
  1477. .ops = &clk_rcg2_ops,
  1478. },
  1479. };
  1480. @@ -1554,9 +1441,8 @@ static struct clk_regmap_div nss_port1_r
  1481. .clkr = {
  1482. .hw.init = &(struct clk_init_data){
  1483. .name = "nss_port1_rx_div_clk_src",
  1484. - .parent_names = (const char *[]){
  1485. - "nss_port1_rx_clk_src"
  1486. - },
  1487. + .parent_hws = (const struct clk_hw *[]){
  1488. + &nss_port1_rx_clk_src.clkr.hw },
  1489. .num_parents = 1,
  1490. .ops = &clk_regmap_div_ops,
  1491. .flags = CLK_SET_RATE_PARENT,
  1492. @@ -1571,6 +1457,22 @@ static const struct freq_tbl ftbl_nss_po
  1493. { }
  1494. };
  1495. +static const struct clk_parent_data gcc_xo_uniphy0_tx_rx_ubi32_bias[] = {
  1496. + { .fw_name = "xo", .name = "xo" },
  1497. + { .name = "uniphy0_gcc_tx_clk" },
  1498. + { .name = "uniphy0_gcc_rx_clk" },
  1499. + { .hw = &ubi32_pll.clkr.hw },
  1500. + { .name = "bias_pll_cc_clk" },
  1501. +};
  1502. +
  1503. +static const struct parent_map gcc_xo_uniphy0_tx_rx_ubi32_bias_map[] = {
  1504. + { P_XO, 0 },
  1505. + { P_UNIPHY0_TX, 1 },
  1506. + { P_UNIPHY0_RX, 2 },
  1507. + { P_UBI32_PLL, 5 },
  1508. + { P_BIAS_PLL, 6 },
  1509. +};
  1510. +
  1511. static struct clk_rcg2 nss_port1_tx_clk_src = {
  1512. .cmd_rcgr = 0x68028,
  1513. .freq_tbl = ftbl_nss_port1_tx_clk_src,
  1514. @@ -1578,8 +1480,8 @@ static struct clk_rcg2 nss_port1_tx_clk_
  1515. .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
  1516. .clkr.hw.init = &(struct clk_init_data){
  1517. .name = "nss_port1_tx_clk_src",
  1518. - .parent_names = gcc_xo_uniphy0_tx_rx_ubi32_bias,
  1519. - .num_parents = 5,
  1520. + .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
  1521. + .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_tx_rx_ubi32_bias),
  1522. .ops = &clk_rcg2_ops,
  1523. },
  1524. };
  1525. @@ -1591,9 +1493,8 @@ static struct clk_regmap_div nss_port1_t
  1526. .clkr = {
  1527. .hw.init = &(struct clk_init_data){
  1528. .name = "nss_port1_tx_div_clk_src",
  1529. - .parent_names = (const char *[]){
  1530. - "nss_port1_tx_clk_src"
  1531. - },
  1532. + .parent_hws = (const struct clk_hw *[]){
  1533. + &nss_port1_tx_clk_src.clkr.hw },
  1534. .num_parents = 1,
  1535. .ops = &clk_regmap_div_ops,
  1536. .flags = CLK_SET_RATE_PARENT,
  1537. @@ -1608,8 +1509,8 @@ static struct clk_rcg2 nss_port2_rx_clk_
  1538. .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
  1539. .clkr.hw.init = &(struct clk_init_data){
  1540. .name = "nss_port2_rx_clk_src",
  1541. - .parent_names = gcc_xo_uniphy0_rx_tx_ubi32_bias,
  1542. - .num_parents = 5,
  1543. + .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
  1544. + .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_rx_tx_ubi32_bias),
  1545. .ops = &clk_rcg2_ops,
  1546. },
  1547. };
  1548. @@ -1621,9 +1522,8 @@ static struct clk_regmap_div nss_port2_r
  1549. .clkr = {
  1550. .hw.init = &(struct clk_init_data){
  1551. .name = "nss_port2_rx_div_clk_src",
  1552. - .parent_names = (const char *[]){
  1553. - "nss_port2_rx_clk_src"
  1554. - },
  1555. + .parent_hws = (const struct clk_hw *[]){
  1556. + &nss_port2_rx_clk_src.clkr.hw },
  1557. .num_parents = 1,
  1558. .ops = &clk_regmap_div_ops,
  1559. .flags = CLK_SET_RATE_PARENT,
  1560. @@ -1638,8 +1538,8 @@ static struct clk_rcg2 nss_port2_tx_clk_
  1561. .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
  1562. .clkr.hw.init = &(struct clk_init_data){
  1563. .name = "nss_port2_tx_clk_src",
  1564. - .parent_names = gcc_xo_uniphy0_tx_rx_ubi32_bias,
  1565. - .num_parents = 5,
  1566. + .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
  1567. + .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_tx_rx_ubi32_bias),
  1568. .ops = &clk_rcg2_ops,
  1569. },
  1570. };
  1571. @@ -1651,9 +1551,8 @@ static struct clk_regmap_div nss_port2_t
  1572. .clkr = {
  1573. .hw.init = &(struct clk_init_data){
  1574. .name = "nss_port2_tx_div_clk_src",
  1575. - .parent_names = (const char *[]){
  1576. - "nss_port2_tx_clk_src"
  1577. - },
  1578. + .parent_hws = (const struct clk_hw *[]){
  1579. + &nss_port2_tx_clk_src.clkr.hw },
  1580. .num_parents = 1,
  1581. .ops = &clk_regmap_div_ops,
  1582. .flags = CLK_SET_RATE_PARENT,
  1583. @@ -1668,8 +1567,8 @@ static struct clk_rcg2 nss_port3_rx_clk_
  1584. .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
  1585. .clkr.hw.init = &(struct clk_init_data){
  1586. .name = "nss_port3_rx_clk_src",
  1587. - .parent_names = gcc_xo_uniphy0_rx_tx_ubi32_bias,
  1588. - .num_parents = 5,
  1589. + .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
  1590. + .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_rx_tx_ubi32_bias),
  1591. .ops = &clk_rcg2_ops,
  1592. },
  1593. };
  1594. @@ -1681,9 +1580,8 @@ static struct clk_regmap_div nss_port3_r
  1595. .clkr = {
  1596. .hw.init = &(struct clk_init_data){
  1597. .name = "nss_port3_rx_div_clk_src",
  1598. - .parent_names = (const char *[]){
  1599. - "nss_port3_rx_clk_src"
  1600. - },
  1601. + .parent_hws = (const struct clk_hw *[]){
  1602. + &nss_port3_rx_clk_src.clkr.hw },
  1603. .num_parents = 1,
  1604. .ops = &clk_regmap_div_ops,
  1605. .flags = CLK_SET_RATE_PARENT,
  1606. @@ -1698,8 +1596,8 @@ static struct clk_rcg2 nss_port3_tx_clk_
  1607. .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
  1608. .clkr.hw.init = &(struct clk_init_data){
  1609. .name = "nss_port3_tx_clk_src",
  1610. - .parent_names = gcc_xo_uniphy0_tx_rx_ubi32_bias,
  1611. - .num_parents = 5,
  1612. + .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
  1613. + .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_tx_rx_ubi32_bias),
  1614. .ops = &clk_rcg2_ops,
  1615. },
  1616. };
  1617. @@ -1711,9 +1609,8 @@ static struct clk_regmap_div nss_port3_t
  1618. .clkr = {
  1619. .hw.init = &(struct clk_init_data){
  1620. .name = "nss_port3_tx_div_clk_src",
  1621. - .parent_names = (const char *[]){
  1622. - "nss_port3_tx_clk_src"
  1623. - },
  1624. + .parent_hws = (const struct clk_hw *[]){
  1625. + &nss_port3_tx_clk_src.clkr.hw },
  1626. .num_parents = 1,
  1627. .ops = &clk_regmap_div_ops,
  1628. .flags = CLK_SET_RATE_PARENT,
  1629. @@ -1728,8 +1625,8 @@ static struct clk_rcg2 nss_port4_rx_clk_
  1630. .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
  1631. .clkr.hw.init = &(struct clk_init_data){
  1632. .name = "nss_port4_rx_clk_src",
  1633. - .parent_names = gcc_xo_uniphy0_rx_tx_ubi32_bias,
  1634. - .num_parents = 5,
  1635. + .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
  1636. + .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_rx_tx_ubi32_bias),
  1637. .ops = &clk_rcg2_ops,
  1638. },
  1639. };
  1640. @@ -1741,9 +1638,8 @@ static struct clk_regmap_div nss_port4_r
  1641. .clkr = {
  1642. .hw.init = &(struct clk_init_data){
  1643. .name = "nss_port4_rx_div_clk_src",
  1644. - .parent_names = (const char *[]){
  1645. - "nss_port4_rx_clk_src"
  1646. - },
  1647. + .parent_hws = (const struct clk_hw *[]){
  1648. + &nss_port4_rx_clk_src.clkr.hw },
  1649. .num_parents = 1,
  1650. .ops = &clk_regmap_div_ops,
  1651. .flags = CLK_SET_RATE_PARENT,
  1652. @@ -1758,8 +1654,8 @@ static struct clk_rcg2 nss_port4_tx_clk_
  1653. .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
  1654. .clkr.hw.init = &(struct clk_init_data){
  1655. .name = "nss_port4_tx_clk_src",
  1656. - .parent_names = gcc_xo_uniphy0_tx_rx_ubi32_bias,
  1657. - .num_parents = 5,
  1658. + .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
  1659. + .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_tx_rx_ubi32_bias),
  1660. .ops = &clk_rcg2_ops,
  1661. },
  1662. };
  1663. @@ -1771,9 +1667,8 @@ static struct clk_regmap_div nss_port4_t
  1664. .clkr = {
  1665. .hw.init = &(struct clk_init_data){
  1666. .name = "nss_port4_tx_div_clk_src",
  1667. - .parent_names = (const char *[]){
  1668. - "nss_port4_tx_clk_src"
  1669. - },
  1670. + .parent_hws = (const struct clk_hw *[]){
  1671. + &nss_port4_tx_clk_src.clkr.hw },
  1672. .num_parents = 1,
  1673. .ops = &clk_regmap_div_ops,
  1674. .flags = CLK_SET_RATE_PARENT,
  1675. @@ -1793,6 +1688,27 @@ static const struct freq_tbl ftbl_nss_po
  1676. { }
  1677. };
  1678. +static const struct clk_parent_data gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias[] = {
  1679. + { .fw_name = "xo", .name = "xo" },
  1680. + { .name = "uniphy0_gcc_rx_clk" },
  1681. + { .name = "uniphy0_gcc_tx_clk" },
  1682. + { .name = "uniphy1_gcc_rx_clk" },
  1683. + { .name = "uniphy1_gcc_tx_clk" },
  1684. + { .hw = &ubi32_pll.clkr.hw },
  1685. + { .name = "bias_pll_cc_clk" },
  1686. +};
  1687. +
  1688. +static const struct parent_map
  1689. +gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map[] = {
  1690. + { P_XO, 0 },
  1691. + { P_UNIPHY0_RX, 1 },
  1692. + { P_UNIPHY0_TX, 2 },
  1693. + { P_UNIPHY1_RX, 3 },
  1694. + { P_UNIPHY1_TX, 4 },
  1695. + { P_UBI32_PLL, 5 },
  1696. + { P_BIAS_PLL, 6 },
  1697. +};
  1698. +
  1699. static struct clk_rcg2 nss_port5_rx_clk_src = {
  1700. .cmd_rcgr = 0x68060,
  1701. .freq_tbl = ftbl_nss_port5_rx_clk_src,
  1702. @@ -1800,8 +1716,8 @@ static struct clk_rcg2 nss_port5_rx_clk_
  1703. .parent_map = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map,
  1704. .clkr.hw.init = &(struct clk_init_data){
  1705. .name = "nss_port5_rx_clk_src",
  1706. - .parent_names = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias,
  1707. - .num_parents = 7,
  1708. + .parent_data = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias,
  1709. + .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias),
  1710. .ops = &clk_rcg2_ops,
  1711. },
  1712. };
  1713. @@ -1813,9 +1729,8 @@ static struct clk_regmap_div nss_port5_r
  1714. .clkr = {
  1715. .hw.init = &(struct clk_init_data){
  1716. .name = "nss_port5_rx_div_clk_src",
  1717. - .parent_names = (const char *[]){
  1718. - "nss_port5_rx_clk_src"
  1719. - },
  1720. + .parent_hws = (const struct clk_hw *[]){
  1721. + &nss_port5_rx_clk_src.clkr.hw },
  1722. .num_parents = 1,
  1723. .ops = &clk_regmap_div_ops,
  1724. .flags = CLK_SET_RATE_PARENT,
  1725. @@ -1835,6 +1750,27 @@ static const struct freq_tbl ftbl_nss_po
  1726. { }
  1727. };
  1728. +static const struct clk_parent_data gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias[] = {
  1729. + { .fw_name = "xo", .name = "xo" },
  1730. + { .name = "uniphy0_gcc_tx_clk" },
  1731. + { .name = "uniphy0_gcc_rx_clk" },
  1732. + { .name = "uniphy1_gcc_tx_clk" },
  1733. + { .name = "uniphy1_gcc_rx_clk" },
  1734. + { .hw = &ubi32_pll.clkr.hw },
  1735. + { .name = "bias_pll_cc_clk" },
  1736. +};
  1737. +
  1738. +static const struct parent_map
  1739. +gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map[] = {
  1740. + { P_XO, 0 },
  1741. + { P_UNIPHY0_TX, 1 },
  1742. + { P_UNIPHY0_RX, 2 },
  1743. + { P_UNIPHY1_TX, 3 },
  1744. + { P_UNIPHY1_RX, 4 },
  1745. + { P_UBI32_PLL, 5 },
  1746. + { P_BIAS_PLL, 6 },
  1747. +};
  1748. +
  1749. static struct clk_rcg2 nss_port5_tx_clk_src = {
  1750. .cmd_rcgr = 0x68068,
  1751. .freq_tbl = ftbl_nss_port5_tx_clk_src,
  1752. @@ -1842,8 +1778,8 @@ static struct clk_rcg2 nss_port5_tx_clk_
  1753. .parent_map = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map,
  1754. .clkr.hw.init = &(struct clk_init_data){
  1755. .name = "nss_port5_tx_clk_src",
  1756. - .parent_names = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias,
  1757. - .num_parents = 7,
  1758. + .parent_data = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias,
  1759. + .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias),
  1760. .ops = &clk_rcg2_ops,
  1761. },
  1762. };
  1763. @@ -1855,9 +1791,8 @@ static struct clk_regmap_div nss_port5_t
  1764. .clkr = {
  1765. .hw.init = &(struct clk_init_data){
  1766. .name = "nss_port5_tx_div_clk_src",
  1767. - .parent_names = (const char *[]){
  1768. - "nss_port5_tx_clk_src"
  1769. - },
  1770. + .parent_hws = (const struct clk_hw *[]){
  1771. + &nss_port5_tx_clk_src.clkr.hw },
  1772. .num_parents = 1,
  1773. .ops = &clk_regmap_div_ops,
  1774. .flags = CLK_SET_RATE_PARENT,
  1775. @@ -1877,6 +1812,22 @@ static const struct freq_tbl ftbl_nss_po
  1776. { }
  1777. };
  1778. +static const struct clk_parent_data gcc_xo_uniphy2_rx_tx_ubi32_bias[] = {
  1779. + { .fw_name = "xo", .name = "xo" },
  1780. + { .name = "uniphy2_gcc_rx_clk" },
  1781. + { .name = "uniphy2_gcc_tx_clk" },
  1782. + { .hw = &ubi32_pll.clkr.hw },
  1783. + { .name = "bias_pll_cc_clk" },
  1784. +};
  1785. +
  1786. +static const struct parent_map gcc_xo_uniphy2_rx_tx_ubi32_bias_map[] = {
  1787. + { P_XO, 0 },
  1788. + { P_UNIPHY2_RX, 1 },
  1789. + { P_UNIPHY2_TX, 2 },
  1790. + { P_UBI32_PLL, 5 },
  1791. + { P_BIAS_PLL, 6 },
  1792. +};
  1793. +
  1794. static struct clk_rcg2 nss_port6_rx_clk_src = {
  1795. .cmd_rcgr = 0x68070,
  1796. .freq_tbl = ftbl_nss_port6_rx_clk_src,
  1797. @@ -1884,8 +1835,8 @@ static struct clk_rcg2 nss_port6_rx_clk_
  1798. .parent_map = gcc_xo_uniphy2_rx_tx_ubi32_bias_map,
  1799. .clkr.hw.init = &(struct clk_init_data){
  1800. .name = "nss_port6_rx_clk_src",
  1801. - .parent_names = gcc_xo_uniphy2_rx_tx_ubi32_bias,
  1802. - .num_parents = 5,
  1803. + .parent_data = gcc_xo_uniphy2_rx_tx_ubi32_bias,
  1804. + .num_parents = ARRAY_SIZE(gcc_xo_uniphy2_rx_tx_ubi32_bias),
  1805. .ops = &clk_rcg2_ops,
  1806. },
  1807. };
  1808. @@ -1897,9 +1848,8 @@ static struct clk_regmap_div nss_port6_r
  1809. .clkr = {
  1810. .hw.init = &(struct clk_init_data){
  1811. .name = "nss_port6_rx_div_clk_src",
  1812. - .parent_names = (const char *[]){
  1813. - "nss_port6_rx_clk_src"
  1814. - },
  1815. + .parent_hws = (const struct clk_hw *[]){
  1816. + &nss_port6_rx_clk_src.clkr.hw },
  1817. .num_parents = 1,
  1818. .ops = &clk_regmap_div_ops,
  1819. .flags = CLK_SET_RATE_PARENT,
  1820. @@ -1919,6 +1869,22 @@ static const struct freq_tbl ftbl_nss_po
  1821. { }
  1822. };
  1823. +static const struct clk_parent_data gcc_xo_uniphy2_tx_rx_ubi32_bias[] = {
  1824. + { .fw_name = "xo", .name = "xo" },
  1825. + { .name = "uniphy2_gcc_tx_clk" },
  1826. + { .name = "uniphy2_gcc_rx_clk" },
  1827. + { .hw = &ubi32_pll.clkr.hw },
  1828. + { .name = "bias_pll_cc_clk" },
  1829. +};
  1830. +
  1831. +static const struct parent_map gcc_xo_uniphy2_tx_rx_ubi32_bias_map[] = {
  1832. + { P_XO, 0 },
  1833. + { P_UNIPHY2_TX, 1 },
  1834. + { P_UNIPHY2_RX, 2 },
  1835. + { P_UBI32_PLL, 5 },
  1836. + { P_BIAS_PLL, 6 },
  1837. +};
  1838. +
  1839. static struct clk_rcg2 nss_port6_tx_clk_src = {
  1840. .cmd_rcgr = 0x68078,
  1841. .freq_tbl = ftbl_nss_port6_tx_clk_src,
  1842. @@ -1926,8 +1892,8 @@ static struct clk_rcg2 nss_port6_tx_clk_
  1843. .parent_map = gcc_xo_uniphy2_tx_rx_ubi32_bias_map,
  1844. .clkr.hw.init = &(struct clk_init_data){
  1845. .name = "nss_port6_tx_clk_src",
  1846. - .parent_names = gcc_xo_uniphy2_tx_rx_ubi32_bias,
  1847. - .num_parents = 5,
  1848. + .parent_data = gcc_xo_uniphy2_tx_rx_ubi32_bias,
  1849. + .num_parents = ARRAY_SIZE(gcc_xo_uniphy2_tx_rx_ubi32_bias),
  1850. .ops = &clk_rcg2_ops,
  1851. },
  1852. };
  1853. @@ -1939,9 +1905,8 @@ static struct clk_regmap_div nss_port6_t
  1854. .clkr = {
  1855. .hw.init = &(struct clk_init_data){
  1856. .name = "nss_port6_tx_div_clk_src",
  1857. - .parent_names = (const char *[]){
  1858. - "nss_port6_tx_clk_src"
  1859. - },
  1860. + .parent_hws = (const struct clk_hw *[]){
  1861. + &nss_port6_tx_clk_src.clkr.hw },
  1862. .num_parents = 1,
  1863. .ops = &clk_regmap_div_ops,
  1864. .flags = CLK_SET_RATE_PARENT,
  1865. @@ -1964,8 +1929,8 @@ static struct clk_rcg2 crypto_clk_src =
  1866. .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
  1867. .clkr.hw.init = &(struct clk_init_data){
  1868. .name = "crypto_clk_src",
  1869. - .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
  1870. - .num_parents = 3,
  1871. + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
  1872. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
  1873. .ops = &clk_rcg2_ops,
  1874. },
  1875. };
  1876. @@ -1975,6 +1940,22 @@ static struct freq_tbl ftbl_gp_clk_src[]
  1877. { }
  1878. };
  1879. +static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll0_sleep_clk[] = {
  1880. + { .fw_name = "xo", .name = "xo" },
  1881. + { .hw = &gpll0.clkr.hw },
  1882. + { .hw = &gpll6.clkr.hw },
  1883. + { .hw = &gpll0_out_main_div2.hw },
  1884. + { .fw_name = "sleep_clk", .name = "sleep_clk" },
  1885. +};
  1886. +
  1887. +static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map[] = {
  1888. + { P_XO, 0 },
  1889. + { P_GPLL0, 1 },
  1890. + { P_GPLL6, 2 },
  1891. + { P_GPLL0_DIV2, 4 },
  1892. + { P_SLEEP_CLK, 6 },
  1893. +};
  1894. +
  1895. static struct clk_rcg2 gp1_clk_src = {
  1896. .cmd_rcgr = 0x08004,
  1897. .freq_tbl = ftbl_gp_clk_src,
  1898. @@ -1983,8 +1964,8 @@ static struct clk_rcg2 gp1_clk_src = {
  1899. .parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
  1900. .clkr.hw.init = &(struct clk_init_data){
  1901. .name = "gp1_clk_src",
  1902. - .parent_names = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
  1903. - .num_parents = 5,
  1904. + .parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
  1905. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll0_sleep_clk),
  1906. .ops = &clk_rcg2_ops,
  1907. },
  1908. };
  1909. @@ -1997,8 +1978,8 @@ static struct clk_rcg2 gp2_clk_src = {
  1910. .parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
  1911. .clkr.hw.init = &(struct clk_init_data){
  1912. .name = "gp2_clk_src",
  1913. - .parent_names = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
  1914. - .num_parents = 5,
  1915. + .parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
  1916. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll0_sleep_clk),
  1917. .ops = &clk_rcg2_ops,
  1918. },
  1919. };
  1920. @@ -2011,8 +1992,8 @@ static struct clk_rcg2 gp3_clk_src = {
  1921. .parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
  1922. .clkr.hw.init = &(struct clk_init_data){
  1923. .name = "gp3_clk_src",
  1924. - .parent_names = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
  1925. - .num_parents = 5,
  1926. + .parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
  1927. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll0_sleep_clk),
  1928. .ops = &clk_rcg2_ops,
  1929. },
  1930. };
  1931. @@ -2024,9 +2005,8 @@ static struct clk_branch gcc_blsp1_ahb_c
  1932. .enable_mask = BIT(0),
  1933. .hw.init = &(struct clk_init_data){
  1934. .name = "gcc_blsp1_ahb_clk",
  1935. - .parent_names = (const char *[]){
  1936. - "pcnoc_clk_src"
  1937. - },
  1938. + .parent_hws = (const struct clk_hw *[]){
  1939. + &pcnoc_clk_src.hw },
  1940. .num_parents = 1,
  1941. .flags = CLK_SET_RATE_PARENT,
  1942. .ops = &clk_branch2_ops,
  1943. @@ -2041,9 +2021,8 @@ static struct clk_branch gcc_blsp1_qup1_
  1944. .enable_mask = BIT(0),
  1945. .hw.init = &(struct clk_init_data){
  1946. .name = "gcc_blsp1_qup1_i2c_apps_clk",
  1947. - .parent_names = (const char *[]){
  1948. - "blsp1_qup1_i2c_apps_clk_src"
  1949. - },
  1950. + .parent_hws = (const struct clk_hw *[]){
  1951. + &blsp1_qup1_i2c_apps_clk_src.clkr.hw },
  1952. .num_parents = 1,
  1953. .flags = CLK_SET_RATE_PARENT,
  1954. .ops = &clk_branch2_ops,
  1955. @@ -2058,9 +2037,8 @@ static struct clk_branch gcc_blsp1_qup1_
  1956. .enable_mask = BIT(0),
  1957. .hw.init = &(struct clk_init_data){
  1958. .name = "gcc_blsp1_qup1_spi_apps_clk",
  1959. - .parent_names = (const char *[]){
  1960. - "blsp1_qup1_spi_apps_clk_src"
  1961. - },
  1962. + .parent_hws = (const struct clk_hw *[]){
  1963. + &blsp1_qup1_spi_apps_clk_src.clkr.hw },
  1964. .num_parents = 1,
  1965. .flags = CLK_SET_RATE_PARENT,
  1966. .ops = &clk_branch2_ops,
  1967. @@ -2075,9 +2053,8 @@ static struct clk_branch gcc_blsp1_qup2_
  1968. .enable_mask = BIT(0),
  1969. .hw.init = &(struct clk_init_data){
  1970. .name = "gcc_blsp1_qup2_i2c_apps_clk",
  1971. - .parent_names = (const char *[]){
  1972. - "blsp1_qup2_i2c_apps_clk_src"
  1973. - },
  1974. + .parent_hws = (const struct clk_hw *[]){
  1975. + &blsp1_qup2_i2c_apps_clk_src.clkr.hw },
  1976. .num_parents = 1,
  1977. .flags = CLK_SET_RATE_PARENT,
  1978. .ops = &clk_branch2_ops,
  1979. @@ -2092,9 +2069,8 @@ static struct clk_branch gcc_blsp1_qup2_
  1980. .enable_mask = BIT(0),
  1981. .hw.init = &(struct clk_init_data){
  1982. .name = "gcc_blsp1_qup2_spi_apps_clk",
  1983. - .parent_names = (const char *[]){
  1984. - "blsp1_qup2_spi_apps_clk_src"
  1985. - },
  1986. + .parent_hws = (const struct clk_hw *[]){
  1987. + &blsp1_qup2_spi_apps_clk_src.clkr.hw },
  1988. .num_parents = 1,
  1989. .flags = CLK_SET_RATE_PARENT,
  1990. .ops = &clk_branch2_ops,
  1991. @@ -2109,9 +2085,8 @@ static struct clk_branch gcc_blsp1_qup3_
  1992. .enable_mask = BIT(0),
  1993. .hw.init = &(struct clk_init_data){
  1994. .name = "gcc_blsp1_qup3_i2c_apps_clk",
  1995. - .parent_names = (const char *[]){
  1996. - "blsp1_qup3_i2c_apps_clk_src"
  1997. - },
  1998. + .parent_hws = (const struct clk_hw *[]){
  1999. + &blsp1_qup3_i2c_apps_clk_src.clkr.hw },
  2000. .num_parents = 1,
  2001. .flags = CLK_SET_RATE_PARENT,
  2002. .ops = &clk_branch2_ops,
  2003. @@ -2126,9 +2101,8 @@ static struct clk_branch gcc_blsp1_qup3_
  2004. .enable_mask = BIT(0),
  2005. .hw.init = &(struct clk_init_data){
  2006. .name = "gcc_blsp1_qup3_spi_apps_clk",
  2007. - .parent_names = (const char *[]){
  2008. - "blsp1_qup3_spi_apps_clk_src"
  2009. - },
  2010. + .parent_hws = (const struct clk_hw *[]){
  2011. + &blsp1_qup3_spi_apps_clk_src.clkr.hw },
  2012. .num_parents = 1,
  2013. .flags = CLK_SET_RATE_PARENT,
  2014. .ops = &clk_branch2_ops,
  2015. @@ -2143,9 +2117,8 @@ static struct clk_branch gcc_blsp1_qup4_
  2016. .enable_mask = BIT(0),
  2017. .hw.init = &(struct clk_init_data){
  2018. .name = "gcc_blsp1_qup4_i2c_apps_clk",
  2019. - .parent_names = (const char *[]){
  2020. - "blsp1_qup4_i2c_apps_clk_src"
  2021. - },
  2022. + .parent_hws = (const struct clk_hw *[]){
  2023. + &blsp1_qup4_i2c_apps_clk_src.clkr.hw },
  2024. .num_parents = 1,
  2025. .flags = CLK_SET_RATE_PARENT,
  2026. .ops = &clk_branch2_ops,
  2027. @@ -2160,9 +2133,8 @@ static struct clk_branch gcc_blsp1_qup4_
  2028. .enable_mask = BIT(0),
  2029. .hw.init = &(struct clk_init_data){
  2030. .name = "gcc_blsp1_qup4_spi_apps_clk",
  2031. - .parent_names = (const char *[]){
  2032. - "blsp1_qup4_spi_apps_clk_src"
  2033. - },
  2034. + .parent_hws = (const struct clk_hw *[]){
  2035. + &blsp1_qup4_spi_apps_clk_src.clkr.hw },
  2036. .num_parents = 1,
  2037. .flags = CLK_SET_RATE_PARENT,
  2038. .ops = &clk_branch2_ops,
  2039. @@ -2177,9 +2149,8 @@ static struct clk_branch gcc_blsp1_qup5_
  2040. .enable_mask = BIT(0),
  2041. .hw.init = &(struct clk_init_data){
  2042. .name = "gcc_blsp1_qup5_i2c_apps_clk",
  2043. - .parent_names = (const char *[]){
  2044. - "blsp1_qup5_i2c_apps_clk_src"
  2045. - },
  2046. + .parent_hws = (const struct clk_hw *[]){
  2047. + &blsp1_qup5_i2c_apps_clk_src.clkr.hw },
  2048. .num_parents = 1,
  2049. .flags = CLK_SET_RATE_PARENT,
  2050. .ops = &clk_branch2_ops,
  2051. @@ -2194,9 +2165,8 @@ static struct clk_branch gcc_blsp1_qup5_
  2052. .enable_mask = BIT(0),
  2053. .hw.init = &(struct clk_init_data){
  2054. .name = "gcc_blsp1_qup5_spi_apps_clk",
  2055. - .parent_names = (const char *[]){
  2056. - "blsp1_qup5_spi_apps_clk_src"
  2057. - },
  2058. + .parent_hws = (const struct clk_hw *[]){
  2059. + &blsp1_qup5_spi_apps_clk_src.clkr.hw },
  2060. .num_parents = 1,
  2061. .flags = CLK_SET_RATE_PARENT,
  2062. .ops = &clk_branch2_ops,
  2063. @@ -2211,9 +2181,8 @@ static struct clk_branch gcc_blsp1_qup6_
  2064. .enable_mask = BIT(0),
  2065. .hw.init = &(struct clk_init_data){
  2066. .name = "gcc_blsp1_qup6_i2c_apps_clk",
  2067. - .parent_names = (const char *[]){
  2068. - "blsp1_qup6_i2c_apps_clk_src"
  2069. - },
  2070. + .parent_hws = (const struct clk_hw *[]){
  2071. + &blsp1_qup6_i2c_apps_clk_src.clkr.hw },
  2072. .num_parents = 1,
  2073. .flags = CLK_SET_RATE_PARENT,
  2074. .ops = &clk_branch2_ops,
  2075. @@ -2228,9 +2197,8 @@ static struct clk_branch gcc_blsp1_qup6_
  2076. .enable_mask = BIT(0),
  2077. .hw.init = &(struct clk_init_data){
  2078. .name = "gcc_blsp1_qup6_spi_apps_clk",
  2079. - .parent_names = (const char *[]){
  2080. - "blsp1_qup6_spi_apps_clk_src"
  2081. - },
  2082. + .parent_hws = (const struct clk_hw *[]){
  2083. + &blsp1_qup6_spi_apps_clk_src.clkr.hw },
  2084. .num_parents = 1,
  2085. .flags = CLK_SET_RATE_PARENT,
  2086. .ops = &clk_branch2_ops,
  2087. @@ -2245,9 +2213,8 @@ static struct clk_branch gcc_blsp1_uart1
  2088. .enable_mask = BIT(0),
  2089. .hw.init = &(struct clk_init_data){
  2090. .name = "gcc_blsp1_uart1_apps_clk",
  2091. - .parent_names = (const char *[]){
  2092. - "blsp1_uart1_apps_clk_src"
  2093. - },
  2094. + .parent_hws = (const struct clk_hw *[]){
  2095. + &blsp1_uart1_apps_clk_src.clkr.hw },
  2096. .num_parents = 1,
  2097. .flags = CLK_SET_RATE_PARENT,
  2098. .ops = &clk_branch2_ops,
  2099. @@ -2262,9 +2229,8 @@ static struct clk_branch gcc_blsp1_uart2
  2100. .enable_mask = BIT(0),
  2101. .hw.init = &(struct clk_init_data){
  2102. .name = "gcc_blsp1_uart2_apps_clk",
  2103. - .parent_names = (const char *[]){
  2104. - "blsp1_uart2_apps_clk_src"
  2105. - },
  2106. + .parent_hws = (const struct clk_hw *[]){
  2107. + &blsp1_uart2_apps_clk_src.clkr.hw },
  2108. .num_parents = 1,
  2109. .flags = CLK_SET_RATE_PARENT,
  2110. .ops = &clk_branch2_ops,
  2111. @@ -2279,9 +2245,8 @@ static struct clk_branch gcc_blsp1_uart3
  2112. .enable_mask = BIT(0),
  2113. .hw.init = &(struct clk_init_data){
  2114. .name = "gcc_blsp1_uart3_apps_clk",
  2115. - .parent_names = (const char *[]){
  2116. - "blsp1_uart3_apps_clk_src"
  2117. - },
  2118. + .parent_hws = (const struct clk_hw *[]){
  2119. + &blsp1_uart3_apps_clk_src.clkr.hw },
  2120. .num_parents = 1,
  2121. .flags = CLK_SET_RATE_PARENT,
  2122. .ops = &clk_branch2_ops,
  2123. @@ -2296,9 +2261,8 @@ static struct clk_branch gcc_blsp1_uart4
  2124. .enable_mask = BIT(0),
  2125. .hw.init = &(struct clk_init_data){
  2126. .name = "gcc_blsp1_uart4_apps_clk",
  2127. - .parent_names = (const char *[]){
  2128. - "blsp1_uart4_apps_clk_src"
  2129. - },
  2130. + .parent_hws = (const struct clk_hw *[]){
  2131. + &blsp1_uart4_apps_clk_src.clkr.hw },
  2132. .num_parents = 1,
  2133. .flags = CLK_SET_RATE_PARENT,
  2134. .ops = &clk_branch2_ops,
  2135. @@ -2313,9 +2277,8 @@ static struct clk_branch gcc_blsp1_uart5
  2136. .enable_mask = BIT(0),
  2137. .hw.init = &(struct clk_init_data){
  2138. .name = "gcc_blsp1_uart5_apps_clk",
  2139. - .parent_names = (const char *[]){
  2140. - "blsp1_uart5_apps_clk_src"
  2141. - },
  2142. + .parent_hws = (const struct clk_hw *[]){
  2143. + &blsp1_uart5_apps_clk_src.clkr.hw },
  2144. .num_parents = 1,
  2145. .flags = CLK_SET_RATE_PARENT,
  2146. .ops = &clk_branch2_ops,
  2147. @@ -2330,9 +2293,8 @@ static struct clk_branch gcc_blsp1_uart6
  2148. .enable_mask = BIT(0),
  2149. .hw.init = &(struct clk_init_data){
  2150. .name = "gcc_blsp1_uart6_apps_clk",
  2151. - .parent_names = (const char *[]){
  2152. - "blsp1_uart6_apps_clk_src"
  2153. - },
  2154. + .parent_hws = (const struct clk_hw *[]){
  2155. + &blsp1_uart6_apps_clk_src.clkr.hw },
  2156. .num_parents = 1,
  2157. .flags = CLK_SET_RATE_PARENT,
  2158. .ops = &clk_branch2_ops,
  2159. @@ -2348,9 +2310,8 @@ static struct clk_branch gcc_prng_ahb_cl
  2160. .enable_mask = BIT(8),
  2161. .hw.init = &(struct clk_init_data){
  2162. .name = "gcc_prng_ahb_clk",
  2163. - .parent_names = (const char *[]){
  2164. - "pcnoc_clk_src"
  2165. - },
  2166. + .parent_hws = (const struct clk_hw *[]){
  2167. + &pcnoc_clk_src.hw },
  2168. .num_parents = 1,
  2169. .flags = CLK_SET_RATE_PARENT,
  2170. .ops = &clk_branch2_ops,
  2171. @@ -2365,9 +2326,8 @@ static struct clk_branch gcc_qpic_ahb_cl
  2172. .enable_mask = BIT(0),
  2173. .hw.init = &(struct clk_init_data){
  2174. .name = "gcc_qpic_ahb_clk",
  2175. - .parent_names = (const char *[]){
  2176. - "pcnoc_clk_src"
  2177. - },
  2178. + .parent_hws = (const struct clk_hw *[]){
  2179. + &pcnoc_clk_src.hw },
  2180. .num_parents = 1,
  2181. .flags = CLK_SET_RATE_PARENT,
  2182. .ops = &clk_branch2_ops,
  2183. @@ -2382,9 +2342,8 @@ static struct clk_branch gcc_qpic_clk =
  2184. .enable_mask = BIT(0),
  2185. .hw.init = &(struct clk_init_data){
  2186. .name = "gcc_qpic_clk",
  2187. - .parent_names = (const char *[]){
  2188. - "pcnoc_clk_src"
  2189. - },
  2190. + .parent_hws = (const struct clk_hw *[]){
  2191. + &pcnoc_clk_src.hw },
  2192. .num_parents = 1,
  2193. .flags = CLK_SET_RATE_PARENT,
  2194. .ops = &clk_branch2_ops,
  2195. @@ -2399,9 +2358,8 @@ static struct clk_branch gcc_pcie0_ahb_c
  2196. .enable_mask = BIT(0),
  2197. .hw.init = &(struct clk_init_data){
  2198. .name = "gcc_pcie0_ahb_clk",
  2199. - .parent_names = (const char *[]){
  2200. - "pcnoc_clk_src"
  2201. - },
  2202. + .parent_hws = (const struct clk_hw *[]){
  2203. + &pcnoc_clk_src.hw },
  2204. .num_parents = 1,
  2205. .flags = CLK_SET_RATE_PARENT,
  2206. .ops = &clk_branch2_ops,
  2207. @@ -2416,9 +2374,8 @@ static struct clk_branch gcc_pcie0_aux_c
  2208. .enable_mask = BIT(0),
  2209. .hw.init = &(struct clk_init_data){
  2210. .name = "gcc_pcie0_aux_clk",
  2211. - .parent_names = (const char *[]){
  2212. - "pcie0_aux_clk_src"
  2213. - },
  2214. + .parent_hws = (const struct clk_hw *[]){
  2215. + &pcie0_aux_clk_src.clkr.hw },
  2216. .num_parents = 1,
  2217. .flags = CLK_SET_RATE_PARENT,
  2218. .ops = &clk_branch2_ops,
  2219. @@ -2433,9 +2390,8 @@ static struct clk_branch gcc_pcie0_axi_m
  2220. .enable_mask = BIT(0),
  2221. .hw.init = &(struct clk_init_data){
  2222. .name = "gcc_pcie0_axi_m_clk",
  2223. - .parent_names = (const char *[]){
  2224. - "pcie0_axi_clk_src"
  2225. - },
  2226. + .parent_hws = (const struct clk_hw *[]){
  2227. + &pcie0_axi_clk_src.clkr.hw },
  2228. .num_parents = 1,
  2229. .flags = CLK_SET_RATE_PARENT,
  2230. .ops = &clk_branch2_ops,
  2231. @@ -2450,9 +2406,8 @@ static struct clk_branch gcc_pcie0_axi_s
  2232. .enable_mask = BIT(0),
  2233. .hw.init = &(struct clk_init_data){
  2234. .name = "gcc_pcie0_axi_s_clk",
  2235. - .parent_names = (const char *[]){
  2236. - "pcie0_axi_clk_src"
  2237. - },
  2238. + .parent_hws = (const struct clk_hw *[]){
  2239. + &pcie0_axi_clk_src.clkr.hw },
  2240. .num_parents = 1,
  2241. .flags = CLK_SET_RATE_PARENT,
  2242. .ops = &clk_branch2_ops,
  2243. @@ -2468,9 +2423,8 @@ static struct clk_branch gcc_pcie0_pipe_
  2244. .enable_mask = BIT(0),
  2245. .hw.init = &(struct clk_init_data){
  2246. .name = "gcc_pcie0_pipe_clk",
  2247. - .parent_names = (const char *[]){
  2248. - "pcie0_pipe_clk_src"
  2249. - },
  2250. + .parent_hws = (const struct clk_hw *[]){
  2251. + &pcie0_pipe_clk_src.clkr.hw },
  2252. .num_parents = 1,
  2253. .flags = CLK_SET_RATE_PARENT,
  2254. .ops = &clk_branch2_ops,
  2255. @@ -2485,9 +2439,8 @@ static struct clk_branch gcc_sys_noc_pci
  2256. .enable_mask = BIT(0),
  2257. .hw.init = &(struct clk_init_data){
  2258. .name = "gcc_sys_noc_pcie0_axi_clk",
  2259. - .parent_names = (const char *[]){
  2260. - "pcie0_axi_clk_src"
  2261. - },
  2262. + .parent_hws = (const struct clk_hw *[]){
  2263. + &pcie0_axi_clk_src.clkr.hw },
  2264. .num_parents = 1,
  2265. .flags = CLK_SET_RATE_PARENT,
  2266. .ops = &clk_branch2_ops,
  2267. @@ -2502,9 +2455,8 @@ static struct clk_branch gcc_pcie1_ahb_c
  2268. .enable_mask = BIT(0),
  2269. .hw.init = &(struct clk_init_data){
  2270. .name = "gcc_pcie1_ahb_clk",
  2271. - .parent_names = (const char *[]){
  2272. - "pcnoc_clk_src"
  2273. - },
  2274. + .parent_hws = (const struct clk_hw *[]){
  2275. + &pcnoc_clk_src.hw },
  2276. .num_parents = 1,
  2277. .flags = CLK_SET_RATE_PARENT,
  2278. .ops = &clk_branch2_ops,
  2279. @@ -2519,9 +2471,8 @@ static struct clk_branch gcc_pcie1_aux_c
  2280. .enable_mask = BIT(0),
  2281. .hw.init = &(struct clk_init_data){
  2282. .name = "gcc_pcie1_aux_clk",
  2283. - .parent_names = (const char *[]){
  2284. - "pcie1_aux_clk_src"
  2285. - },
  2286. + .parent_hws = (const struct clk_hw *[]){
  2287. + &pcie1_aux_clk_src.clkr.hw },
  2288. .num_parents = 1,
  2289. .flags = CLK_SET_RATE_PARENT,
  2290. .ops = &clk_branch2_ops,
  2291. @@ -2536,9 +2487,8 @@ static struct clk_branch gcc_pcie1_axi_m
  2292. .enable_mask = BIT(0),
  2293. .hw.init = &(struct clk_init_data){
  2294. .name = "gcc_pcie1_axi_m_clk",
  2295. - .parent_names = (const char *[]){
  2296. - "pcie1_axi_clk_src"
  2297. - },
  2298. + .parent_hws = (const struct clk_hw *[]){
  2299. + &pcie1_axi_clk_src.clkr.hw },
  2300. .num_parents = 1,
  2301. .flags = CLK_SET_RATE_PARENT,
  2302. .ops = &clk_branch2_ops,
  2303. @@ -2553,9 +2503,8 @@ static struct clk_branch gcc_pcie1_axi_s
  2304. .enable_mask = BIT(0),
  2305. .hw.init = &(struct clk_init_data){
  2306. .name = "gcc_pcie1_axi_s_clk",
  2307. - .parent_names = (const char *[]){
  2308. - "pcie1_axi_clk_src"
  2309. - },
  2310. + .parent_hws = (const struct clk_hw *[]){
  2311. + &pcie1_axi_clk_src.clkr.hw },
  2312. .num_parents = 1,
  2313. .flags = CLK_SET_RATE_PARENT,
  2314. .ops = &clk_branch2_ops,
  2315. @@ -2571,9 +2520,8 @@ static struct clk_branch gcc_pcie1_pipe_
  2316. .enable_mask = BIT(0),
  2317. .hw.init = &(struct clk_init_data){
  2318. .name = "gcc_pcie1_pipe_clk",
  2319. - .parent_names = (const char *[]){
  2320. - "pcie1_pipe_clk_src"
  2321. - },
  2322. + .parent_hws = (const struct clk_hw *[]){
  2323. + &pcie1_pipe_clk_src.clkr.hw },
  2324. .num_parents = 1,
  2325. .flags = CLK_SET_RATE_PARENT,
  2326. .ops = &clk_branch2_ops,
  2327. @@ -2588,9 +2536,8 @@ static struct clk_branch gcc_sys_noc_pci
  2328. .enable_mask = BIT(0),
  2329. .hw.init = &(struct clk_init_data){
  2330. .name = "gcc_sys_noc_pcie1_axi_clk",
  2331. - .parent_names = (const char *[]){
  2332. - "pcie1_axi_clk_src"
  2333. - },
  2334. + .parent_hws = (const struct clk_hw *[]){
  2335. + &pcie1_axi_clk_src.clkr.hw },
  2336. .num_parents = 1,
  2337. .flags = CLK_SET_RATE_PARENT,
  2338. .ops = &clk_branch2_ops,
  2339. @@ -2605,9 +2552,8 @@ static struct clk_branch gcc_usb0_aux_cl
  2340. .enable_mask = BIT(0),
  2341. .hw.init = &(struct clk_init_data){
  2342. .name = "gcc_usb0_aux_clk",
  2343. - .parent_names = (const char *[]){
  2344. - "usb0_aux_clk_src"
  2345. - },
  2346. + .parent_hws = (const struct clk_hw *[]){
  2347. + &usb0_aux_clk_src.clkr.hw },
  2348. .num_parents = 1,
  2349. .flags = CLK_SET_RATE_PARENT,
  2350. .ops = &clk_branch2_ops,
  2351. @@ -2622,9 +2568,8 @@ static struct clk_branch gcc_sys_noc_usb
  2352. .enable_mask = BIT(0),
  2353. .hw.init = &(struct clk_init_data){
  2354. .name = "gcc_sys_noc_usb0_axi_clk",
  2355. - .parent_names = (const char *[]){
  2356. - "usb0_master_clk_src"
  2357. - },
  2358. + .parent_hws = (const struct clk_hw *[]){
  2359. + &usb0_master_clk_src.clkr.hw },
  2360. .num_parents = 1,
  2361. .flags = CLK_SET_RATE_PARENT,
  2362. .ops = &clk_branch2_ops,
  2363. @@ -2639,9 +2584,8 @@ static struct clk_branch gcc_usb0_master
  2364. .enable_mask = BIT(0),
  2365. .hw.init = &(struct clk_init_data){
  2366. .name = "gcc_usb0_master_clk",
  2367. - .parent_names = (const char *[]){
  2368. - "usb0_master_clk_src"
  2369. - },
  2370. + .parent_hws = (const struct clk_hw *[]){
  2371. + &usb0_master_clk_src.clkr.hw },
  2372. .num_parents = 1,
  2373. .flags = CLK_SET_RATE_PARENT,
  2374. .ops = &clk_branch2_ops,
  2375. @@ -2656,9 +2600,8 @@ static struct clk_branch gcc_usb0_mock_u
  2376. .enable_mask = BIT(0),
  2377. .hw.init = &(struct clk_init_data){
  2378. .name = "gcc_usb0_mock_utmi_clk",
  2379. - .parent_names = (const char *[]){
  2380. - "usb0_mock_utmi_clk_src"
  2381. - },
  2382. + .parent_hws = (const struct clk_hw *[]){
  2383. + &usb0_mock_utmi_clk_src.clkr.hw },
  2384. .num_parents = 1,
  2385. .flags = CLK_SET_RATE_PARENT,
  2386. .ops = &clk_branch2_ops,
  2387. @@ -2673,9 +2616,8 @@ static struct clk_branch gcc_usb0_phy_cf
  2388. .enable_mask = BIT(0),
  2389. .hw.init = &(struct clk_init_data){
  2390. .name = "gcc_usb0_phy_cfg_ahb_clk",
  2391. - .parent_names = (const char *[]){
  2392. - "pcnoc_clk_src"
  2393. - },
  2394. + .parent_hws = (const struct clk_hw *[]){
  2395. + &pcnoc_clk_src.hw },
  2396. .num_parents = 1,
  2397. .flags = CLK_SET_RATE_PARENT,
  2398. .ops = &clk_branch2_ops,
  2399. @@ -2691,9 +2633,8 @@ static struct clk_branch gcc_usb0_pipe_c
  2400. .enable_mask = BIT(0),
  2401. .hw.init = &(struct clk_init_data){
  2402. .name = "gcc_usb0_pipe_clk",
  2403. - .parent_names = (const char *[]){
  2404. - "usb0_pipe_clk_src"
  2405. - },
  2406. + .parent_hws = (const struct clk_hw *[]){
  2407. + &usb0_pipe_clk_src.clkr.hw },
  2408. .num_parents = 1,
  2409. .flags = CLK_SET_RATE_PARENT,
  2410. .ops = &clk_branch2_ops,
  2411. @@ -2708,9 +2649,8 @@ static struct clk_branch gcc_usb0_sleep_
  2412. .enable_mask = BIT(0),
  2413. .hw.init = &(struct clk_init_data){
  2414. .name = "gcc_usb0_sleep_clk",
  2415. - .parent_names = (const char *[]){
  2416. - "gcc_sleep_clk_src"
  2417. - },
  2418. + .parent_hws = (const struct clk_hw *[]){
  2419. + &gcc_sleep_clk_src.clkr.hw },
  2420. .num_parents = 1,
  2421. .flags = CLK_SET_RATE_PARENT,
  2422. .ops = &clk_branch2_ops,
  2423. @@ -2725,9 +2665,8 @@ static struct clk_branch gcc_usb1_aux_cl
  2424. .enable_mask = BIT(0),
  2425. .hw.init = &(struct clk_init_data){
  2426. .name = "gcc_usb1_aux_clk",
  2427. - .parent_names = (const char *[]){
  2428. - "usb1_aux_clk_src"
  2429. - },
  2430. + .parent_hws = (const struct clk_hw *[]){
  2431. + &usb1_aux_clk_src.clkr.hw },
  2432. .num_parents = 1,
  2433. .flags = CLK_SET_RATE_PARENT,
  2434. .ops = &clk_branch2_ops,
  2435. @@ -2742,9 +2681,8 @@ static struct clk_branch gcc_sys_noc_usb
  2436. .enable_mask = BIT(0),
  2437. .hw.init = &(struct clk_init_data){
  2438. .name = "gcc_sys_noc_usb1_axi_clk",
  2439. - .parent_names = (const char *[]){
  2440. - "usb1_master_clk_src"
  2441. - },
  2442. + .parent_hws = (const struct clk_hw *[]){
  2443. + &usb1_master_clk_src.clkr.hw },
  2444. .num_parents = 1,
  2445. .flags = CLK_SET_RATE_PARENT,
  2446. .ops = &clk_branch2_ops,
  2447. @@ -2759,9 +2697,8 @@ static struct clk_branch gcc_usb1_master
  2448. .enable_mask = BIT(0),
  2449. .hw.init = &(struct clk_init_data){
  2450. .name = "gcc_usb1_master_clk",
  2451. - .parent_names = (const char *[]){
  2452. - "usb1_master_clk_src"
  2453. - },
  2454. + .parent_hws = (const struct clk_hw *[]){
  2455. + &usb1_master_clk_src.clkr.hw },
  2456. .num_parents = 1,
  2457. .flags = CLK_SET_RATE_PARENT,
  2458. .ops = &clk_branch2_ops,
  2459. @@ -2776,9 +2713,8 @@ static struct clk_branch gcc_usb1_mock_u
  2460. .enable_mask = BIT(0),
  2461. .hw.init = &(struct clk_init_data){
  2462. .name = "gcc_usb1_mock_utmi_clk",
  2463. - .parent_names = (const char *[]){
  2464. - "usb1_mock_utmi_clk_src"
  2465. - },
  2466. + .parent_hws = (const struct clk_hw *[]){
  2467. + &usb1_mock_utmi_clk_src.clkr.hw },
  2468. .num_parents = 1,
  2469. .flags = CLK_SET_RATE_PARENT,
  2470. .ops = &clk_branch2_ops,
  2471. @@ -2793,9 +2729,8 @@ static struct clk_branch gcc_usb1_phy_cf
  2472. .enable_mask = BIT(0),
  2473. .hw.init = &(struct clk_init_data){
  2474. .name = "gcc_usb1_phy_cfg_ahb_clk",
  2475. - .parent_names = (const char *[]){
  2476. - "pcnoc_clk_src"
  2477. - },
  2478. + .parent_hws = (const struct clk_hw *[]){
  2479. + &pcnoc_clk_src.hw },
  2480. .num_parents = 1,
  2481. .flags = CLK_SET_RATE_PARENT,
  2482. .ops = &clk_branch2_ops,
  2483. @@ -2811,9 +2746,8 @@ static struct clk_branch gcc_usb1_pipe_c
  2484. .enable_mask = BIT(0),
  2485. .hw.init = &(struct clk_init_data){
  2486. .name = "gcc_usb1_pipe_clk",
  2487. - .parent_names = (const char *[]){
  2488. - "usb1_pipe_clk_src"
  2489. - },
  2490. + .parent_hws = (const struct clk_hw *[]){
  2491. + &usb1_pipe_clk_src.clkr.hw },
  2492. .num_parents = 1,
  2493. .flags = CLK_SET_RATE_PARENT,
  2494. .ops = &clk_branch2_ops,
  2495. @@ -2828,9 +2762,8 @@ static struct clk_branch gcc_usb1_sleep_
  2496. .enable_mask = BIT(0),
  2497. .hw.init = &(struct clk_init_data){
  2498. .name = "gcc_usb1_sleep_clk",
  2499. - .parent_names = (const char *[]){
  2500. - "gcc_sleep_clk_src"
  2501. - },
  2502. + .parent_hws = (const struct clk_hw *[]){
  2503. + &gcc_sleep_clk_src.clkr.hw },
  2504. .num_parents = 1,
  2505. .flags = CLK_SET_RATE_PARENT,
  2506. .ops = &clk_branch2_ops,
  2507. @@ -2845,9 +2778,8 @@ static struct clk_branch gcc_sdcc1_ahb_c
  2508. .enable_mask = BIT(0),
  2509. .hw.init = &(struct clk_init_data){
  2510. .name = "gcc_sdcc1_ahb_clk",
  2511. - .parent_names = (const char *[]){
  2512. - "pcnoc_clk_src"
  2513. - },
  2514. + .parent_hws = (const struct clk_hw *[]){
  2515. + &pcnoc_clk_src.hw },
  2516. .num_parents = 1,
  2517. .flags = CLK_SET_RATE_PARENT,
  2518. .ops = &clk_branch2_ops,
  2519. @@ -2862,9 +2794,8 @@ static struct clk_branch gcc_sdcc1_apps_
  2520. .enable_mask = BIT(0),
  2521. .hw.init = &(struct clk_init_data){
  2522. .name = "gcc_sdcc1_apps_clk",
  2523. - .parent_names = (const char *[]){
  2524. - "sdcc1_apps_clk_src"
  2525. - },
  2526. + .parent_hws = (const struct clk_hw *[]){
  2527. + &sdcc1_apps_clk_src.clkr.hw },
  2528. .num_parents = 1,
  2529. .flags = CLK_SET_RATE_PARENT,
  2530. .ops = &clk_branch2_ops,
  2531. @@ -2879,9 +2810,8 @@ static struct clk_branch gcc_sdcc1_ice_c
  2532. .enable_mask = BIT(0),
  2533. .hw.init = &(struct clk_init_data){
  2534. .name = "gcc_sdcc1_ice_core_clk",
  2535. - .parent_names = (const char *[]){
  2536. - "sdcc1_ice_core_clk_src"
  2537. - },
  2538. + .parent_hws = (const struct clk_hw *[]){
  2539. + &sdcc1_ice_core_clk_src.clkr.hw },
  2540. .num_parents = 1,
  2541. .flags = CLK_SET_RATE_PARENT,
  2542. .ops = &clk_branch2_ops,
  2543. @@ -2896,9 +2826,8 @@ static struct clk_branch gcc_sdcc2_ahb_c
  2544. .enable_mask = BIT(0),
  2545. .hw.init = &(struct clk_init_data){
  2546. .name = "gcc_sdcc2_ahb_clk",
  2547. - .parent_names = (const char *[]){
  2548. - "pcnoc_clk_src"
  2549. - },
  2550. + .parent_hws = (const struct clk_hw *[]){
  2551. + &pcnoc_clk_src.hw },
  2552. .num_parents = 1,
  2553. .flags = CLK_SET_RATE_PARENT,
  2554. .ops = &clk_branch2_ops,
  2555. @@ -2913,9 +2842,8 @@ static struct clk_branch gcc_sdcc2_apps_
  2556. .enable_mask = BIT(0),
  2557. .hw.init = &(struct clk_init_data){
  2558. .name = "gcc_sdcc2_apps_clk",
  2559. - .parent_names = (const char *[]){
  2560. - "sdcc2_apps_clk_src"
  2561. - },
  2562. + .parent_hws = (const struct clk_hw *[]){
  2563. + &sdcc2_apps_clk_src.clkr.hw },
  2564. .num_parents = 1,
  2565. .flags = CLK_SET_RATE_PARENT,
  2566. .ops = &clk_branch2_ops,
  2567. @@ -2930,9 +2858,8 @@ static struct clk_branch gcc_mem_noc_nss
  2568. .enable_mask = BIT(0),
  2569. .hw.init = &(struct clk_init_data){
  2570. .name = "gcc_mem_noc_nss_axi_clk",
  2571. - .parent_names = (const char *[]){
  2572. - "nss_noc_clk_src"
  2573. - },
  2574. + .parent_hws = (const struct clk_hw *[]){
  2575. + &nss_noc_clk_src.hw },
  2576. .num_parents = 1,
  2577. .flags = CLK_SET_RATE_PARENT,
  2578. .ops = &clk_branch2_ops,
  2579. @@ -2947,9 +2874,8 @@ static struct clk_branch gcc_nss_ce_apb_
  2580. .enable_mask = BIT(0),
  2581. .hw.init = &(struct clk_init_data){
  2582. .name = "gcc_nss_ce_apb_clk",
  2583. - .parent_names = (const char *[]){
  2584. - "nss_ce_clk_src"
  2585. - },
  2586. + .parent_hws = (const struct clk_hw *[]){
  2587. + &nss_ce_clk_src.clkr.hw },
  2588. .num_parents = 1,
  2589. .flags = CLK_SET_RATE_PARENT,
  2590. .ops = &clk_branch2_ops,
  2591. @@ -2964,9 +2890,8 @@ static struct clk_branch gcc_nss_ce_axi_
  2592. .enable_mask = BIT(0),
  2593. .hw.init = &(struct clk_init_data){
  2594. .name = "gcc_nss_ce_axi_clk",
  2595. - .parent_names = (const char *[]){
  2596. - "nss_ce_clk_src"
  2597. - },
  2598. + .parent_hws = (const struct clk_hw *[]){
  2599. + &nss_ce_clk_src.clkr.hw },
  2600. .num_parents = 1,
  2601. .flags = CLK_SET_RATE_PARENT,
  2602. .ops = &clk_branch2_ops,
  2603. @@ -2981,9 +2906,8 @@ static struct clk_branch gcc_nss_cfg_clk
  2604. .enable_mask = BIT(0),
  2605. .hw.init = &(struct clk_init_data){
  2606. .name = "gcc_nss_cfg_clk",
  2607. - .parent_names = (const char *[]){
  2608. - "pcnoc_clk_src"
  2609. - },
  2610. + .parent_hws = (const struct clk_hw *[]){
  2611. + &pcnoc_clk_src.hw },
  2612. .num_parents = 1,
  2613. .flags = CLK_SET_RATE_PARENT,
  2614. .ops = &clk_branch2_ops,
  2615. @@ -2998,9 +2922,8 @@ static struct clk_branch gcc_nss_crypto_
  2616. .enable_mask = BIT(0),
  2617. .hw.init = &(struct clk_init_data){
  2618. .name = "gcc_nss_crypto_clk",
  2619. - .parent_names = (const char *[]){
  2620. - "nss_crypto_clk_src"
  2621. - },
  2622. + .parent_hws = (const struct clk_hw *[]){
  2623. + &nss_crypto_clk_src.clkr.hw },
  2624. .num_parents = 1,
  2625. .flags = CLK_SET_RATE_PARENT,
  2626. .ops = &clk_branch2_ops,
  2627. @@ -3015,9 +2938,8 @@ static struct clk_branch gcc_nss_csr_clk
  2628. .enable_mask = BIT(0),
  2629. .hw.init = &(struct clk_init_data){
  2630. .name = "gcc_nss_csr_clk",
  2631. - .parent_names = (const char *[]){
  2632. - "nss_ce_clk_src"
  2633. - },
  2634. + .parent_hws = (const struct clk_hw *[]){
  2635. + &nss_ce_clk_src.clkr.hw },
  2636. .num_parents = 1,
  2637. .flags = CLK_SET_RATE_PARENT,
  2638. .ops = &clk_branch2_ops,
  2639. @@ -3032,9 +2954,8 @@ static struct clk_branch gcc_nss_edma_cf
  2640. .enable_mask = BIT(0),
  2641. .hw.init = &(struct clk_init_data){
  2642. .name = "gcc_nss_edma_cfg_clk",
  2643. - .parent_names = (const char *[]){
  2644. - "nss_ppe_clk_src"
  2645. - },
  2646. + .parent_hws = (const struct clk_hw *[]){
  2647. + &nss_ppe_clk_src.clkr.hw },
  2648. .num_parents = 1,
  2649. .flags = CLK_SET_RATE_PARENT,
  2650. .ops = &clk_branch2_ops,
  2651. @@ -3049,9 +2970,8 @@ static struct clk_branch gcc_nss_edma_cl
  2652. .enable_mask = BIT(0),
  2653. .hw.init = &(struct clk_init_data){
  2654. .name = "gcc_nss_edma_clk",
  2655. - .parent_names = (const char *[]){
  2656. - "nss_ppe_clk_src"
  2657. - },
  2658. + .parent_hws = (const struct clk_hw *[]){
  2659. + &nss_ppe_clk_src.clkr.hw },
  2660. .num_parents = 1,
  2661. .flags = CLK_SET_RATE_PARENT,
  2662. .ops = &clk_branch2_ops,
  2663. @@ -3066,9 +2986,8 @@ static struct clk_branch gcc_nss_imem_cl
  2664. .enable_mask = BIT(0),
  2665. .hw.init = &(struct clk_init_data){
  2666. .name = "gcc_nss_imem_clk",
  2667. - .parent_names = (const char *[]){
  2668. - "nss_imem_clk_src"
  2669. - },
  2670. + .parent_hws = (const struct clk_hw *[]){
  2671. + &nss_imem_clk_src.clkr.hw },
  2672. .num_parents = 1,
  2673. .flags = CLK_SET_RATE_PARENT,
  2674. .ops = &clk_branch2_ops,
  2675. @@ -3083,9 +3002,8 @@ static struct clk_branch gcc_nss_noc_clk
  2676. .enable_mask = BIT(0),
  2677. .hw.init = &(struct clk_init_data){
  2678. .name = "gcc_nss_noc_clk",
  2679. - .parent_names = (const char *[]){
  2680. - "nss_noc_clk_src"
  2681. - },
  2682. + .parent_hws = (const struct clk_hw *[]){
  2683. + &nss_noc_clk_src.hw },
  2684. .num_parents = 1,
  2685. .flags = CLK_SET_RATE_PARENT,
  2686. .ops = &clk_branch2_ops,
  2687. @@ -3100,9 +3018,8 @@ static struct clk_branch gcc_nss_ppe_btq
  2688. .enable_mask = BIT(0),
  2689. .hw.init = &(struct clk_init_data){
  2690. .name = "gcc_nss_ppe_btq_clk",
  2691. - .parent_names = (const char *[]){
  2692. - "nss_ppe_clk_src"
  2693. - },
  2694. + .parent_hws = (const struct clk_hw *[]){
  2695. + &nss_ppe_clk_src.clkr.hw },
  2696. .num_parents = 1,
  2697. .flags = CLK_SET_RATE_PARENT,
  2698. .ops = &clk_branch2_ops,
  2699. @@ -3117,9 +3034,8 @@ static struct clk_branch gcc_nss_ppe_cfg
  2700. .enable_mask = BIT(0),
  2701. .hw.init = &(struct clk_init_data){
  2702. .name = "gcc_nss_ppe_cfg_clk",
  2703. - .parent_names = (const char *[]){
  2704. - "nss_ppe_clk_src"
  2705. - },
  2706. + .parent_hws = (const struct clk_hw *[]){
  2707. + &nss_ppe_clk_src.clkr.hw },
  2708. .num_parents = 1,
  2709. .flags = CLK_SET_RATE_PARENT,
  2710. .ops = &clk_branch2_ops,
  2711. @@ -3134,9 +3050,8 @@ static struct clk_branch gcc_nss_ppe_clk
  2712. .enable_mask = BIT(0),
  2713. .hw.init = &(struct clk_init_data){
  2714. .name = "gcc_nss_ppe_clk",
  2715. - .parent_names = (const char *[]){
  2716. - "nss_ppe_clk_src"
  2717. - },
  2718. + .parent_hws = (const struct clk_hw *[]){
  2719. + &nss_ppe_clk_src.clkr.hw },
  2720. .num_parents = 1,
  2721. .flags = CLK_SET_RATE_PARENT,
  2722. .ops = &clk_branch2_ops,
  2723. @@ -3151,9 +3066,8 @@ static struct clk_branch gcc_nss_ppe_ipe
  2724. .enable_mask = BIT(0),
  2725. .hw.init = &(struct clk_init_data){
  2726. .name = "gcc_nss_ppe_ipe_clk",
  2727. - .parent_names = (const char *[]){
  2728. - "nss_ppe_clk_src"
  2729. - },
  2730. + .parent_hws = (const struct clk_hw *[]){
  2731. + &nss_ppe_clk_src.clkr.hw },
  2732. .num_parents = 1,
  2733. .flags = CLK_SET_RATE_PARENT,
  2734. .ops = &clk_branch2_ops,
  2735. @@ -3168,9 +3082,8 @@ static struct clk_branch gcc_nss_ptp_ref
  2736. .enable_mask = BIT(0),
  2737. .hw.init = &(struct clk_init_data){
  2738. .name = "gcc_nss_ptp_ref_clk",
  2739. - .parent_names = (const char *[]){
  2740. - "nss_ppe_cdiv_clk_src"
  2741. - },
  2742. + .parent_hws = (const struct clk_hw *[]){
  2743. + &nss_ppe_cdiv_clk_src.hw },
  2744. .num_parents = 1,
  2745. .flags = CLK_SET_RATE_PARENT,
  2746. .ops = &clk_branch2_ops,
  2747. @@ -3186,9 +3099,8 @@ static struct clk_branch gcc_crypto_ppe_
  2748. .enable_mask = BIT(0),
  2749. .hw.init = &(struct clk_init_data){
  2750. .name = "gcc_crypto_ppe_clk",
  2751. - .parent_names = (const char *[]){
  2752. - "nss_ppe_clk_src"
  2753. - },
  2754. + .parent_hws = (const struct clk_hw *[]){
  2755. + &nss_ppe_clk_src.clkr.hw },
  2756. .num_parents = 1,
  2757. .flags = CLK_SET_RATE_PARENT,
  2758. .ops = &clk_branch2_ops,
  2759. @@ -3203,9 +3115,8 @@ static struct clk_branch gcc_nssnoc_ce_a
  2760. .enable_mask = BIT(0),
  2761. .hw.init = &(struct clk_init_data){
  2762. .name = "gcc_nssnoc_ce_apb_clk",
  2763. - .parent_names = (const char *[]){
  2764. - "nss_ce_clk_src"
  2765. - },
  2766. + .parent_hws = (const struct clk_hw *[]){
  2767. + &nss_ce_clk_src.clkr.hw },
  2768. .num_parents = 1,
  2769. .flags = CLK_SET_RATE_PARENT,
  2770. .ops = &clk_branch2_ops,
  2771. @@ -3220,9 +3131,8 @@ static struct clk_branch gcc_nssnoc_ce_a
  2772. .enable_mask = BIT(0),
  2773. .hw.init = &(struct clk_init_data){
  2774. .name = "gcc_nssnoc_ce_axi_clk",
  2775. - .parent_names = (const char *[]){
  2776. - "nss_ce_clk_src"
  2777. - },
  2778. + .parent_hws = (const struct clk_hw *[]){
  2779. + &nss_ce_clk_src.clkr.hw },
  2780. .num_parents = 1,
  2781. .flags = CLK_SET_RATE_PARENT,
  2782. .ops = &clk_branch2_ops,
  2783. @@ -3237,9 +3147,8 @@ static struct clk_branch gcc_nssnoc_cryp
  2784. .enable_mask = BIT(0),
  2785. .hw.init = &(struct clk_init_data){
  2786. .name = "gcc_nssnoc_crypto_clk",
  2787. - .parent_names = (const char *[]){
  2788. - "nss_crypto_clk_src"
  2789. - },
  2790. + .parent_hws = (const struct clk_hw *[]){
  2791. + &nss_crypto_clk_src.clkr.hw },
  2792. .num_parents = 1,
  2793. .flags = CLK_SET_RATE_PARENT,
  2794. .ops = &clk_branch2_ops,
  2795. @@ -3254,9 +3163,8 @@ static struct clk_branch gcc_nssnoc_ppe_
  2796. .enable_mask = BIT(0),
  2797. .hw.init = &(struct clk_init_data){
  2798. .name = "gcc_nssnoc_ppe_cfg_clk",
  2799. - .parent_names = (const char *[]){
  2800. - "nss_ppe_clk_src"
  2801. - },
  2802. + .parent_hws = (const struct clk_hw *[]){
  2803. + &nss_ppe_clk_src.clkr.hw },
  2804. .num_parents = 1,
  2805. .flags = CLK_SET_RATE_PARENT,
  2806. .ops = &clk_branch2_ops,
  2807. @@ -3271,9 +3179,8 @@ static struct clk_branch gcc_nssnoc_ppe_
  2808. .enable_mask = BIT(0),
  2809. .hw.init = &(struct clk_init_data){
  2810. .name = "gcc_nssnoc_ppe_clk",
  2811. - .parent_names = (const char *[]){
  2812. - "nss_ppe_clk_src"
  2813. - },
  2814. + .parent_hws = (const struct clk_hw *[]){
  2815. + &nss_ppe_clk_src.clkr.hw },
  2816. .num_parents = 1,
  2817. .flags = CLK_SET_RATE_PARENT,
  2818. .ops = &clk_branch2_ops,
  2819. @@ -3288,9 +3195,8 @@ static struct clk_branch gcc_nssnoc_qosg
  2820. .enable_mask = BIT(0),
  2821. .hw.init = &(struct clk_init_data){
  2822. .name = "gcc_nssnoc_qosgen_ref_clk",
  2823. - .parent_names = (const char *[]){
  2824. - "gcc_xo_clk_src"
  2825. - },
  2826. + .parent_hws = (const struct clk_hw *[]){
  2827. + &gcc_xo_clk_src.clkr.hw },
  2828. .num_parents = 1,
  2829. .flags = CLK_SET_RATE_PARENT,
  2830. .ops = &clk_branch2_ops,
  2831. @@ -3305,9 +3211,8 @@ static struct clk_branch gcc_nssnoc_snoc
  2832. .enable_mask = BIT(0),
  2833. .hw.init = &(struct clk_init_data){
  2834. .name = "gcc_nssnoc_snoc_clk",
  2835. - .parent_names = (const char *[]){
  2836. - "system_noc_clk_src"
  2837. - },
  2838. + .parent_hws = (const struct clk_hw *[]){
  2839. + &system_noc_clk_src.hw },
  2840. .num_parents = 1,
  2841. .flags = CLK_SET_RATE_PARENT,
  2842. .ops = &clk_branch2_ops,
  2843. @@ -3322,9 +3227,8 @@ static struct clk_branch gcc_nssnoc_time
  2844. .enable_mask = BIT(0),
  2845. .hw.init = &(struct clk_init_data){
  2846. .name = "gcc_nssnoc_timeout_ref_clk",
  2847. - .parent_names = (const char *[]){
  2848. - "gcc_xo_div4_clk_src"
  2849. - },
  2850. + .parent_hws = (const struct clk_hw *[]){
  2851. + &gcc_xo_div4_clk_src.hw },
  2852. .num_parents = 1,
  2853. .flags = CLK_SET_RATE_PARENT,
  2854. .ops = &clk_branch2_ops,
  2855. @@ -3339,9 +3243,8 @@ static struct clk_branch gcc_nssnoc_ubi0
  2856. .enable_mask = BIT(0),
  2857. .hw.init = &(struct clk_init_data){
  2858. .name = "gcc_nssnoc_ubi0_ahb_clk",
  2859. - .parent_names = (const char *[]){
  2860. - "nss_ce_clk_src"
  2861. - },
  2862. + .parent_hws = (const struct clk_hw *[]){
  2863. + &nss_ce_clk_src.clkr.hw },
  2864. .num_parents = 1,
  2865. .flags = CLK_SET_RATE_PARENT,
  2866. .ops = &clk_branch2_ops,
  2867. @@ -3356,9 +3259,8 @@ static struct clk_branch gcc_nssnoc_ubi1
  2868. .enable_mask = BIT(0),
  2869. .hw.init = &(struct clk_init_data){
  2870. .name = "gcc_nssnoc_ubi1_ahb_clk",
  2871. - .parent_names = (const char *[]){
  2872. - "nss_ce_clk_src"
  2873. - },
  2874. + .parent_hws = (const struct clk_hw *[]){
  2875. + &nss_ce_clk_src.clkr.hw },
  2876. .num_parents = 1,
  2877. .flags = CLK_SET_RATE_PARENT,
  2878. .ops = &clk_branch2_ops,
  2879. @@ -3374,9 +3276,8 @@ static struct clk_branch gcc_ubi0_ahb_cl
  2880. .enable_mask = BIT(0),
  2881. .hw.init = &(struct clk_init_data){
  2882. .name = "gcc_ubi0_ahb_clk",
  2883. - .parent_names = (const char *[]){
  2884. - "nss_ce_clk_src"
  2885. - },
  2886. + .parent_hws = (const struct clk_hw *[]){
  2887. + &nss_ce_clk_src.clkr.hw },
  2888. .num_parents = 1,
  2889. .flags = CLK_SET_RATE_PARENT,
  2890. .ops = &clk_branch2_ops,
  2891. @@ -3392,9 +3293,8 @@ static struct clk_branch gcc_ubi0_axi_cl
  2892. .enable_mask = BIT(0),
  2893. .hw.init = &(struct clk_init_data){
  2894. .name = "gcc_ubi0_axi_clk",
  2895. - .parent_names = (const char *[]){
  2896. - "nss_noc_clk_src"
  2897. - },
  2898. + .parent_hws = (const struct clk_hw *[]){
  2899. + &nss_noc_clk_src.hw },
  2900. .num_parents = 1,
  2901. .flags = CLK_SET_RATE_PARENT,
  2902. .ops = &clk_branch2_ops,
  2903. @@ -3410,9 +3310,8 @@ static struct clk_branch gcc_ubi0_nc_axi
  2904. .enable_mask = BIT(0),
  2905. .hw.init = &(struct clk_init_data){
  2906. .name = "gcc_ubi0_nc_axi_clk",
  2907. - .parent_names = (const char *[]){
  2908. - "nss_noc_clk_src"
  2909. - },
  2910. + .parent_hws = (const struct clk_hw *[]){
  2911. + &nss_noc_clk_src.hw },
  2912. .num_parents = 1,
  2913. .flags = CLK_SET_RATE_PARENT,
  2914. .ops = &clk_branch2_ops,
  2915. @@ -3428,9 +3327,8 @@ static struct clk_branch gcc_ubi0_core_c
  2916. .enable_mask = BIT(0),
  2917. .hw.init = &(struct clk_init_data){
  2918. .name = "gcc_ubi0_core_clk",
  2919. - .parent_names = (const char *[]){
  2920. - "nss_ubi0_div_clk_src"
  2921. - },
  2922. + .parent_hws = (const struct clk_hw *[]){
  2923. + &nss_ubi0_div_clk_src.clkr.hw },
  2924. .num_parents = 1,
  2925. .flags = CLK_SET_RATE_PARENT,
  2926. .ops = &clk_branch2_ops,
  2927. @@ -3446,9 +3344,8 @@ static struct clk_branch gcc_ubi0_mpt_cl
  2928. .enable_mask = BIT(0),
  2929. .hw.init = &(struct clk_init_data){
  2930. .name = "gcc_ubi0_mpt_clk",
  2931. - .parent_names = (const char *[]){
  2932. - "ubi_mpt_clk_src"
  2933. - },
  2934. + .parent_hws = (const struct clk_hw *[]){
  2935. + &ubi_mpt_clk_src.clkr.hw },
  2936. .num_parents = 1,
  2937. .flags = CLK_SET_RATE_PARENT,
  2938. .ops = &clk_branch2_ops,
  2939. @@ -3464,9 +3361,8 @@ static struct clk_branch gcc_ubi1_ahb_cl
  2940. .enable_mask = BIT(0),
  2941. .hw.init = &(struct clk_init_data){
  2942. .name = "gcc_ubi1_ahb_clk",
  2943. - .parent_names = (const char *[]){
  2944. - "nss_ce_clk_src"
  2945. - },
  2946. + .parent_hws = (const struct clk_hw *[]){
  2947. + &nss_ce_clk_src.clkr.hw },
  2948. .num_parents = 1,
  2949. .flags = CLK_SET_RATE_PARENT,
  2950. .ops = &clk_branch2_ops,
  2951. @@ -3482,9 +3378,8 @@ static struct clk_branch gcc_ubi1_axi_cl
  2952. .enable_mask = BIT(0),
  2953. .hw.init = &(struct clk_init_data){
  2954. .name = "gcc_ubi1_axi_clk",
  2955. - .parent_names = (const char *[]){
  2956. - "nss_noc_clk_src"
  2957. - },
  2958. + .parent_hws = (const struct clk_hw *[]){
  2959. + &nss_noc_clk_src.hw },
  2960. .num_parents = 1,
  2961. .flags = CLK_SET_RATE_PARENT,
  2962. .ops = &clk_branch2_ops,
  2963. @@ -3500,9 +3395,8 @@ static struct clk_branch gcc_ubi1_nc_axi
  2964. .enable_mask = BIT(0),
  2965. .hw.init = &(struct clk_init_data){
  2966. .name = "gcc_ubi1_nc_axi_clk",
  2967. - .parent_names = (const char *[]){
  2968. - "nss_noc_clk_src"
  2969. - },
  2970. + .parent_hws = (const struct clk_hw *[]){
  2971. + &nss_noc_clk_src.hw },
  2972. .num_parents = 1,
  2973. .flags = CLK_SET_RATE_PARENT,
  2974. .ops = &clk_branch2_ops,
  2975. @@ -3518,9 +3412,8 @@ static struct clk_branch gcc_ubi1_core_c
  2976. .enable_mask = BIT(0),
  2977. .hw.init = &(struct clk_init_data){
  2978. .name = "gcc_ubi1_core_clk",
  2979. - .parent_names = (const char *[]){
  2980. - "nss_ubi1_div_clk_src"
  2981. - },
  2982. + .parent_hws = (const struct clk_hw *[]){
  2983. + &nss_ubi1_div_clk_src.clkr.hw },
  2984. .num_parents = 1,
  2985. .flags = CLK_SET_RATE_PARENT,
  2986. .ops = &clk_branch2_ops,
  2987. @@ -3536,9 +3429,8 @@ static struct clk_branch gcc_ubi1_mpt_cl
  2988. .enable_mask = BIT(0),
  2989. .hw.init = &(struct clk_init_data){
  2990. .name = "gcc_ubi1_mpt_clk",
  2991. - .parent_names = (const char *[]){
  2992. - "ubi_mpt_clk_src"
  2993. - },
  2994. + .parent_hws = (const struct clk_hw *[]){
  2995. + &ubi_mpt_clk_src.clkr.hw },
  2996. .num_parents = 1,
  2997. .flags = CLK_SET_RATE_PARENT,
  2998. .ops = &clk_branch2_ops,
  2999. @@ -3553,9 +3445,8 @@ static struct clk_branch gcc_cmn_12gpll_
  3000. .enable_mask = BIT(0),
  3001. .hw.init = &(struct clk_init_data){
  3002. .name = "gcc_cmn_12gpll_ahb_clk",
  3003. - .parent_names = (const char *[]){
  3004. - "pcnoc_clk_src"
  3005. - },
  3006. + .parent_hws = (const struct clk_hw *[]){
  3007. + &pcnoc_clk_src.hw },
  3008. .num_parents = 1,
  3009. .flags = CLK_SET_RATE_PARENT,
  3010. .ops = &clk_branch2_ops,
  3011. @@ -3570,9 +3461,8 @@ static struct clk_branch gcc_cmn_12gpll_
  3012. .enable_mask = BIT(0),
  3013. .hw.init = &(struct clk_init_data){
  3014. .name = "gcc_cmn_12gpll_sys_clk",
  3015. - .parent_names = (const char *[]){
  3016. - "gcc_xo_clk_src"
  3017. - },
  3018. + .parent_hws = (const struct clk_hw *[]){
  3019. + &gcc_xo_clk_src.clkr.hw },
  3020. .num_parents = 1,
  3021. .flags = CLK_SET_RATE_PARENT,
  3022. .ops = &clk_branch2_ops,
  3023. @@ -3587,9 +3477,8 @@ static struct clk_branch gcc_mdio_ahb_cl
  3024. .enable_mask = BIT(0),
  3025. .hw.init = &(struct clk_init_data){
  3026. .name = "gcc_mdio_ahb_clk",
  3027. - .parent_names = (const char *[]){
  3028. - "pcnoc_clk_src"
  3029. - },
  3030. + .parent_hws = (const struct clk_hw *[]){
  3031. + &pcnoc_clk_src.hw },
  3032. .num_parents = 1,
  3033. .flags = CLK_SET_RATE_PARENT,
  3034. .ops = &clk_branch2_ops,
  3035. @@ -3604,9 +3493,8 @@ static struct clk_branch gcc_uniphy0_ahb
  3036. .enable_mask = BIT(0),
  3037. .hw.init = &(struct clk_init_data){
  3038. .name = "gcc_uniphy0_ahb_clk",
  3039. - .parent_names = (const char *[]){
  3040. - "pcnoc_clk_src"
  3041. - },
  3042. + .parent_hws = (const struct clk_hw *[]){
  3043. + &pcnoc_clk_src.hw },
  3044. .num_parents = 1,
  3045. .flags = CLK_SET_RATE_PARENT,
  3046. .ops = &clk_branch2_ops,
  3047. @@ -3621,9 +3509,8 @@ static struct clk_branch gcc_uniphy0_sys
  3048. .enable_mask = BIT(0),
  3049. .hw.init = &(struct clk_init_data){
  3050. .name = "gcc_uniphy0_sys_clk",
  3051. - .parent_names = (const char *[]){
  3052. - "gcc_xo_clk_src"
  3053. - },
  3054. + .parent_hws = (const struct clk_hw *[]){
  3055. + &gcc_xo_clk_src.clkr.hw },
  3056. .num_parents = 1,
  3057. .flags = CLK_SET_RATE_PARENT,
  3058. .ops = &clk_branch2_ops,
  3059. @@ -3638,9 +3525,8 @@ static struct clk_branch gcc_uniphy1_ahb
  3060. .enable_mask = BIT(0),
  3061. .hw.init = &(struct clk_init_data){
  3062. .name = "gcc_uniphy1_ahb_clk",
  3063. - .parent_names = (const char *[]){
  3064. - "pcnoc_clk_src"
  3065. - },
  3066. + .parent_hws = (const struct clk_hw *[]){
  3067. + &pcnoc_clk_src.hw },
  3068. .num_parents = 1,
  3069. .flags = CLK_SET_RATE_PARENT,
  3070. .ops = &clk_branch2_ops,
  3071. @@ -3655,9 +3541,8 @@ static struct clk_branch gcc_uniphy1_sys
  3072. .enable_mask = BIT(0),
  3073. .hw.init = &(struct clk_init_data){
  3074. .name = "gcc_uniphy1_sys_clk",
  3075. - .parent_names = (const char *[]){
  3076. - "gcc_xo_clk_src"
  3077. - },
  3078. + .parent_hws = (const struct clk_hw *[]){
  3079. + &gcc_xo_clk_src.clkr.hw },
  3080. .num_parents = 1,
  3081. .flags = CLK_SET_RATE_PARENT,
  3082. .ops = &clk_branch2_ops,
  3083. @@ -3672,9 +3557,8 @@ static struct clk_branch gcc_uniphy2_ahb
  3084. .enable_mask = BIT(0),
  3085. .hw.init = &(struct clk_init_data){
  3086. .name = "gcc_uniphy2_ahb_clk",
  3087. - .parent_names = (const char *[]){
  3088. - "pcnoc_clk_src"
  3089. - },
  3090. + .parent_hws = (const struct clk_hw *[]){
  3091. + &pcnoc_clk_src.hw },
  3092. .num_parents = 1,
  3093. .flags = CLK_SET_RATE_PARENT,
  3094. .ops = &clk_branch2_ops,
  3095. @@ -3689,9 +3573,8 @@ static struct clk_branch gcc_uniphy2_sys
  3096. .enable_mask = BIT(0),
  3097. .hw.init = &(struct clk_init_data){
  3098. .name = "gcc_uniphy2_sys_clk",
  3099. - .parent_names = (const char *[]){
  3100. - "gcc_xo_clk_src"
  3101. - },
  3102. + .parent_hws = (const struct clk_hw *[]){
  3103. + &gcc_xo_clk_src.clkr.hw },
  3104. .num_parents = 1,
  3105. .flags = CLK_SET_RATE_PARENT,
  3106. .ops = &clk_branch2_ops,
  3107. @@ -3706,9 +3589,8 @@ static struct clk_branch gcc_nss_port1_r
  3108. .enable_mask = BIT(0),
  3109. .hw.init = &(struct clk_init_data){
  3110. .name = "gcc_nss_port1_rx_clk",
  3111. - .parent_names = (const char *[]){
  3112. - "nss_port1_rx_div_clk_src"
  3113. - },
  3114. + .parent_hws = (const struct clk_hw *[]){
  3115. + &nss_port1_rx_div_clk_src.clkr.hw },
  3116. .num_parents = 1,
  3117. .flags = CLK_SET_RATE_PARENT,
  3118. .ops = &clk_branch2_ops,
  3119. @@ -3723,9 +3605,8 @@ static struct clk_branch gcc_nss_port1_t
  3120. .enable_mask = BIT(0),
  3121. .hw.init = &(struct clk_init_data){
  3122. .name = "gcc_nss_port1_tx_clk",
  3123. - .parent_names = (const char *[]){
  3124. - "nss_port1_tx_div_clk_src"
  3125. - },
  3126. + .parent_hws = (const struct clk_hw *[]){
  3127. + &nss_port1_tx_div_clk_src.clkr.hw },
  3128. .num_parents = 1,
  3129. .flags = CLK_SET_RATE_PARENT,
  3130. .ops = &clk_branch2_ops,
  3131. @@ -3740,9 +3621,8 @@ static struct clk_branch gcc_nss_port2_r
  3132. .enable_mask = BIT(0),
  3133. .hw.init = &(struct clk_init_data){
  3134. .name = "gcc_nss_port2_rx_clk",
  3135. - .parent_names = (const char *[]){
  3136. - "nss_port2_rx_div_clk_src"
  3137. - },
  3138. + .parent_hws = (const struct clk_hw *[]){
  3139. + &nss_port2_rx_div_clk_src.clkr.hw },
  3140. .num_parents = 1,
  3141. .flags = CLK_SET_RATE_PARENT,
  3142. .ops = &clk_branch2_ops,
  3143. @@ -3757,9 +3637,8 @@ static struct clk_branch gcc_nss_port2_t
  3144. .enable_mask = BIT(0),
  3145. .hw.init = &(struct clk_init_data){
  3146. .name = "gcc_nss_port2_tx_clk",
  3147. - .parent_names = (const char *[]){
  3148. - "nss_port2_tx_div_clk_src"
  3149. - },
  3150. + .parent_hws = (const struct clk_hw *[]){
  3151. + &nss_port2_tx_div_clk_src.clkr.hw },
  3152. .num_parents = 1,
  3153. .flags = CLK_SET_RATE_PARENT,
  3154. .ops = &clk_branch2_ops,
  3155. @@ -3774,9 +3653,8 @@ static struct clk_branch gcc_nss_port3_r
  3156. .enable_mask = BIT(0),
  3157. .hw.init = &(struct clk_init_data){
  3158. .name = "gcc_nss_port3_rx_clk",
  3159. - .parent_names = (const char *[]){
  3160. - "nss_port3_rx_div_clk_src"
  3161. - },
  3162. + .parent_hws = (const struct clk_hw *[]){
  3163. + &nss_port3_rx_div_clk_src.clkr.hw },
  3164. .num_parents = 1,
  3165. .flags = CLK_SET_RATE_PARENT,
  3166. .ops = &clk_branch2_ops,
  3167. @@ -3791,9 +3669,8 @@ static struct clk_branch gcc_nss_port3_t
  3168. .enable_mask = BIT(0),
  3169. .hw.init = &(struct clk_init_data){
  3170. .name = "gcc_nss_port3_tx_clk",
  3171. - .parent_names = (const char *[]){
  3172. - "nss_port3_tx_div_clk_src"
  3173. - },
  3174. + .parent_hws = (const struct clk_hw *[]){
  3175. + &nss_port3_tx_div_clk_src.clkr.hw },
  3176. .num_parents = 1,
  3177. .flags = CLK_SET_RATE_PARENT,
  3178. .ops = &clk_branch2_ops,
  3179. @@ -3808,9 +3685,8 @@ static struct clk_branch gcc_nss_port4_r
  3180. .enable_mask = BIT(0),
  3181. .hw.init = &(struct clk_init_data){
  3182. .name = "gcc_nss_port4_rx_clk",
  3183. - .parent_names = (const char *[]){
  3184. - "nss_port4_rx_div_clk_src"
  3185. - },
  3186. + .parent_hws = (const struct clk_hw *[]){
  3187. + &nss_port4_rx_div_clk_src.clkr.hw },
  3188. .num_parents = 1,
  3189. .flags = CLK_SET_RATE_PARENT,
  3190. .ops = &clk_branch2_ops,
  3191. @@ -3825,9 +3701,8 @@ static struct clk_branch gcc_nss_port4_t
  3192. .enable_mask = BIT(0),
  3193. .hw.init = &(struct clk_init_data){
  3194. .name = "gcc_nss_port4_tx_clk",
  3195. - .parent_names = (const char *[]){
  3196. - "nss_port4_tx_div_clk_src"
  3197. - },
  3198. + .parent_hws = (const struct clk_hw *[]){
  3199. + &nss_port4_tx_div_clk_src.clkr.hw },
  3200. .num_parents = 1,
  3201. .flags = CLK_SET_RATE_PARENT,
  3202. .ops = &clk_branch2_ops,
  3203. @@ -3842,9 +3717,8 @@ static struct clk_branch gcc_nss_port5_r
  3204. .enable_mask = BIT(0),
  3205. .hw.init = &(struct clk_init_data){
  3206. .name = "gcc_nss_port5_rx_clk",
  3207. - .parent_names = (const char *[]){
  3208. - "nss_port5_rx_div_clk_src"
  3209. - },
  3210. + .parent_hws = (const struct clk_hw *[]){
  3211. + &nss_port5_rx_div_clk_src.clkr.hw },
  3212. .num_parents = 1,
  3213. .flags = CLK_SET_RATE_PARENT,
  3214. .ops = &clk_branch2_ops,
  3215. @@ -3859,9 +3733,8 @@ static struct clk_branch gcc_nss_port5_t
  3216. .enable_mask = BIT(0),
  3217. .hw.init = &(struct clk_init_data){
  3218. .name = "gcc_nss_port5_tx_clk",
  3219. - .parent_names = (const char *[]){
  3220. - "nss_port5_tx_div_clk_src"
  3221. - },
  3222. + .parent_hws = (const struct clk_hw *[]){
  3223. + &nss_port5_tx_div_clk_src.clkr.hw },
  3224. .num_parents = 1,
  3225. .flags = CLK_SET_RATE_PARENT,
  3226. .ops = &clk_branch2_ops,
  3227. @@ -3876,9 +3749,8 @@ static struct clk_branch gcc_nss_port6_r
  3228. .enable_mask = BIT(0),
  3229. .hw.init = &(struct clk_init_data){
  3230. .name = "gcc_nss_port6_rx_clk",
  3231. - .parent_names = (const char *[]){
  3232. - "nss_port6_rx_div_clk_src"
  3233. - },
  3234. + .parent_hws = (const struct clk_hw *[]){
  3235. + &nss_port6_rx_div_clk_src.clkr.hw },
  3236. .num_parents = 1,
  3237. .flags = CLK_SET_RATE_PARENT,
  3238. .ops = &clk_branch2_ops,
  3239. @@ -3893,9 +3765,8 @@ static struct clk_branch gcc_nss_port6_t
  3240. .enable_mask = BIT(0),
  3241. .hw.init = &(struct clk_init_data){
  3242. .name = "gcc_nss_port6_tx_clk",
  3243. - .parent_names = (const char *[]){
  3244. - "nss_port6_tx_div_clk_src"
  3245. - },
  3246. + .parent_hws = (const struct clk_hw *[]){
  3247. + &nss_port6_tx_div_clk_src.clkr.hw },
  3248. .num_parents = 1,
  3249. .flags = CLK_SET_RATE_PARENT,
  3250. .ops = &clk_branch2_ops,
  3251. @@ -3910,9 +3781,8 @@ static struct clk_branch gcc_port1_mac_c
  3252. .enable_mask = BIT(0),
  3253. .hw.init = &(struct clk_init_data){
  3254. .name = "gcc_port1_mac_clk",
  3255. - .parent_names = (const char *[]){
  3256. - "nss_ppe_clk_src"
  3257. - },
  3258. + .parent_hws = (const struct clk_hw *[]){
  3259. + &nss_ppe_clk_src.clkr.hw },
  3260. .num_parents = 1,
  3261. .flags = CLK_SET_RATE_PARENT,
  3262. .ops = &clk_branch2_ops,
  3263. @@ -3927,9 +3797,8 @@ static struct clk_branch gcc_port2_mac_c
  3264. .enable_mask = BIT(0),
  3265. .hw.init = &(struct clk_init_data){
  3266. .name = "gcc_port2_mac_clk",
  3267. - .parent_names = (const char *[]){
  3268. - "nss_ppe_clk_src"
  3269. - },
  3270. + .parent_hws = (const struct clk_hw *[]){
  3271. + &nss_ppe_clk_src.clkr.hw },
  3272. .num_parents = 1,
  3273. .flags = CLK_SET_RATE_PARENT,
  3274. .ops = &clk_branch2_ops,
  3275. @@ -3944,9 +3813,8 @@ static struct clk_branch gcc_port3_mac_c
  3276. .enable_mask = BIT(0),
  3277. .hw.init = &(struct clk_init_data){
  3278. .name = "gcc_port3_mac_clk",
  3279. - .parent_names = (const char *[]){
  3280. - "nss_ppe_clk_src"
  3281. - },
  3282. + .parent_hws = (const struct clk_hw *[]){
  3283. + &nss_ppe_clk_src.clkr.hw },
  3284. .num_parents = 1,
  3285. .flags = CLK_SET_RATE_PARENT,
  3286. .ops = &clk_branch2_ops,
  3287. @@ -3961,9 +3829,8 @@ static struct clk_branch gcc_port4_mac_c
  3288. .enable_mask = BIT(0),
  3289. .hw.init = &(struct clk_init_data){
  3290. .name = "gcc_port4_mac_clk",
  3291. - .parent_names = (const char *[]){
  3292. - "nss_ppe_clk_src"
  3293. - },
  3294. + .parent_hws = (const struct clk_hw *[]){
  3295. + &nss_ppe_clk_src.clkr.hw },
  3296. .num_parents = 1,
  3297. .flags = CLK_SET_RATE_PARENT,
  3298. .ops = &clk_branch2_ops,
  3299. @@ -3978,9 +3845,8 @@ static struct clk_branch gcc_port5_mac_c
  3300. .enable_mask = BIT(0),
  3301. .hw.init = &(struct clk_init_data){
  3302. .name = "gcc_port5_mac_clk",
  3303. - .parent_names = (const char *[]){
  3304. - "nss_ppe_clk_src"
  3305. - },
  3306. + .parent_hws = (const struct clk_hw *[]){
  3307. + &nss_ppe_clk_src.clkr.hw },
  3308. .num_parents = 1,
  3309. .flags = CLK_SET_RATE_PARENT,
  3310. .ops = &clk_branch2_ops,
  3311. @@ -3995,9 +3861,8 @@ static struct clk_branch gcc_port6_mac_c
  3312. .enable_mask = BIT(0),
  3313. .hw.init = &(struct clk_init_data){
  3314. .name = "gcc_port6_mac_clk",
  3315. - .parent_names = (const char *[]){
  3316. - "nss_ppe_clk_src"
  3317. - },
  3318. + .parent_hws = (const struct clk_hw *[]){
  3319. + &nss_ppe_clk_src.clkr.hw },
  3320. .num_parents = 1,
  3321. .flags = CLK_SET_RATE_PARENT,
  3322. .ops = &clk_branch2_ops,
  3323. @@ -4012,9 +3877,8 @@ static struct clk_branch gcc_uniphy0_por
  3324. .enable_mask = BIT(0),
  3325. .hw.init = &(struct clk_init_data){
  3326. .name = "gcc_uniphy0_port1_rx_clk",
  3327. - .parent_names = (const char *[]){
  3328. - "nss_port1_rx_div_clk_src"
  3329. - },
  3330. + .parent_hws = (const struct clk_hw *[]){
  3331. + &nss_port1_rx_div_clk_src.clkr.hw },
  3332. .num_parents = 1,
  3333. .flags = CLK_SET_RATE_PARENT,
  3334. .ops = &clk_branch2_ops,
  3335. @@ -4029,9 +3893,8 @@ static struct clk_branch gcc_uniphy0_por
  3336. .enable_mask = BIT(0),
  3337. .hw.init = &(struct clk_init_data){
  3338. .name = "gcc_uniphy0_port1_tx_clk",
  3339. - .parent_names = (const char *[]){
  3340. - "nss_port1_tx_div_clk_src"
  3341. - },
  3342. + .parent_hws = (const struct clk_hw *[]){
  3343. + &nss_port1_tx_div_clk_src.clkr.hw },
  3344. .num_parents = 1,
  3345. .flags = CLK_SET_RATE_PARENT,
  3346. .ops = &clk_branch2_ops,
  3347. @@ -4046,9 +3909,8 @@ static struct clk_branch gcc_uniphy0_por
  3348. .enable_mask = BIT(0),
  3349. .hw.init = &(struct clk_init_data){
  3350. .name = "gcc_uniphy0_port2_rx_clk",
  3351. - .parent_names = (const char *[]){
  3352. - "nss_port2_rx_div_clk_src"
  3353. - },
  3354. + .parent_hws = (const struct clk_hw *[]){
  3355. + &nss_port2_rx_div_clk_src.clkr.hw },
  3356. .num_parents = 1,
  3357. .flags = CLK_SET_RATE_PARENT,
  3358. .ops = &clk_branch2_ops,
  3359. @@ -4063,9 +3925,8 @@ static struct clk_branch gcc_uniphy0_por
  3360. .enable_mask = BIT(0),
  3361. .hw.init = &(struct clk_init_data){
  3362. .name = "gcc_uniphy0_port2_tx_clk",
  3363. - .parent_names = (const char *[]){
  3364. - "nss_port2_tx_div_clk_src"
  3365. - },
  3366. + .parent_hws = (const struct clk_hw *[]){
  3367. + &nss_port2_tx_div_clk_src.clkr.hw },
  3368. .num_parents = 1,
  3369. .flags = CLK_SET_RATE_PARENT,
  3370. .ops = &clk_branch2_ops,
  3371. @@ -4080,9 +3941,8 @@ static struct clk_branch gcc_uniphy0_por
  3372. .enable_mask = BIT(0),
  3373. .hw.init = &(struct clk_init_data){
  3374. .name = "gcc_uniphy0_port3_rx_clk",
  3375. - .parent_names = (const char *[]){
  3376. - "nss_port3_rx_div_clk_src"
  3377. - },
  3378. + .parent_hws = (const struct clk_hw *[]){
  3379. + &nss_port3_rx_div_clk_src.clkr.hw },
  3380. .num_parents = 1,
  3381. .flags = CLK_SET_RATE_PARENT,
  3382. .ops = &clk_branch2_ops,
  3383. @@ -4097,9 +3957,8 @@ static struct clk_branch gcc_uniphy0_por
  3384. .enable_mask = BIT(0),
  3385. .hw.init = &(struct clk_init_data){
  3386. .name = "gcc_uniphy0_port3_tx_clk",
  3387. - .parent_names = (const char *[]){
  3388. - "nss_port3_tx_div_clk_src"
  3389. - },
  3390. + .parent_hws = (const struct clk_hw *[]){
  3391. + &nss_port3_tx_div_clk_src.clkr.hw },
  3392. .num_parents = 1,
  3393. .flags = CLK_SET_RATE_PARENT,
  3394. .ops = &clk_branch2_ops,
  3395. @@ -4114,9 +3973,8 @@ static struct clk_branch gcc_uniphy0_por
  3396. .enable_mask = BIT(0),
  3397. .hw.init = &(struct clk_init_data){
  3398. .name = "gcc_uniphy0_port4_rx_clk",
  3399. - .parent_names = (const char *[]){
  3400. - "nss_port4_rx_div_clk_src"
  3401. - },
  3402. + .parent_hws = (const struct clk_hw *[]){
  3403. + &nss_port4_rx_div_clk_src.clkr.hw },
  3404. .num_parents = 1,
  3405. .flags = CLK_SET_RATE_PARENT,
  3406. .ops = &clk_branch2_ops,
  3407. @@ -4131,9 +3989,8 @@ static struct clk_branch gcc_uniphy0_por
  3408. .enable_mask = BIT(0),
  3409. .hw.init = &(struct clk_init_data){
  3410. .name = "gcc_uniphy0_port4_tx_clk",
  3411. - .parent_names = (const char *[]){
  3412. - "nss_port4_tx_div_clk_src"
  3413. - },
  3414. + .parent_hws = (const struct clk_hw *[]){
  3415. + &nss_port4_tx_div_clk_src.clkr.hw },
  3416. .num_parents = 1,
  3417. .flags = CLK_SET_RATE_PARENT,
  3418. .ops = &clk_branch2_ops,
  3419. @@ -4148,9 +4005,8 @@ static struct clk_branch gcc_uniphy0_por
  3420. .enable_mask = BIT(0),
  3421. .hw.init = &(struct clk_init_data){
  3422. .name = "gcc_uniphy0_port5_rx_clk",
  3423. - .parent_names = (const char *[]){
  3424. - "nss_port5_rx_div_clk_src"
  3425. - },
  3426. + .parent_hws = (const struct clk_hw *[]){
  3427. + &nss_port5_rx_div_clk_src.clkr.hw },
  3428. .num_parents = 1,
  3429. .flags = CLK_SET_RATE_PARENT,
  3430. .ops = &clk_branch2_ops,
  3431. @@ -4165,9 +4021,8 @@ static struct clk_branch gcc_uniphy0_por
  3432. .enable_mask = BIT(0),
  3433. .hw.init = &(struct clk_init_data){
  3434. .name = "gcc_uniphy0_port5_tx_clk",
  3435. - .parent_names = (const char *[]){
  3436. - "nss_port5_tx_div_clk_src"
  3437. - },
  3438. + .parent_hws = (const struct clk_hw *[]){
  3439. + &nss_port5_tx_div_clk_src.clkr.hw },
  3440. .num_parents = 1,
  3441. .flags = CLK_SET_RATE_PARENT,
  3442. .ops = &clk_branch2_ops,
  3443. @@ -4182,9 +4037,8 @@ static struct clk_branch gcc_uniphy1_por
  3444. .enable_mask = BIT(0),
  3445. .hw.init = &(struct clk_init_data){
  3446. .name = "gcc_uniphy1_port5_rx_clk",
  3447. - .parent_names = (const char *[]){
  3448. - "nss_port5_rx_div_clk_src"
  3449. - },
  3450. + .parent_hws = (const struct clk_hw *[]){
  3451. + &nss_port5_rx_div_clk_src.clkr.hw },
  3452. .num_parents = 1,
  3453. .flags = CLK_SET_RATE_PARENT,
  3454. .ops = &clk_branch2_ops,
  3455. @@ -4199,9 +4053,8 @@ static struct clk_branch gcc_uniphy1_por
  3456. .enable_mask = BIT(0),
  3457. .hw.init = &(struct clk_init_data){
  3458. .name = "gcc_uniphy1_port5_tx_clk",
  3459. - .parent_names = (const char *[]){
  3460. - "nss_port5_tx_div_clk_src"
  3461. - },
  3462. + .parent_hws = (const struct clk_hw *[]){
  3463. + &nss_port5_tx_div_clk_src.clkr.hw },
  3464. .num_parents = 1,
  3465. .flags = CLK_SET_RATE_PARENT,
  3466. .ops = &clk_branch2_ops,
  3467. @@ -4216,9 +4069,8 @@ static struct clk_branch gcc_uniphy2_por
  3468. .enable_mask = BIT(0),
  3469. .hw.init = &(struct clk_init_data){
  3470. .name = "gcc_uniphy2_port6_rx_clk",
  3471. - .parent_names = (const char *[]){
  3472. - "nss_port6_rx_div_clk_src"
  3473. - },
  3474. + .parent_hws = (const struct clk_hw *[]){
  3475. + &nss_port6_rx_div_clk_src.clkr.hw },
  3476. .num_parents = 1,
  3477. .flags = CLK_SET_RATE_PARENT,
  3478. .ops = &clk_branch2_ops,
  3479. @@ -4233,9 +4085,8 @@ static struct clk_branch gcc_uniphy2_por
  3480. .enable_mask = BIT(0),
  3481. .hw.init = &(struct clk_init_data){
  3482. .name = "gcc_uniphy2_port6_tx_clk",
  3483. - .parent_names = (const char *[]){
  3484. - "nss_port6_tx_div_clk_src"
  3485. - },
  3486. + .parent_hws = (const struct clk_hw *[]){
  3487. + &nss_port6_tx_div_clk_src.clkr.hw },
  3488. .num_parents = 1,
  3489. .flags = CLK_SET_RATE_PARENT,
  3490. .ops = &clk_branch2_ops,
  3491. @@ -4251,9 +4102,8 @@ static struct clk_branch gcc_crypto_ahb_
  3492. .enable_mask = BIT(0),
  3493. .hw.init = &(struct clk_init_data){
  3494. .name = "gcc_crypto_ahb_clk",
  3495. - .parent_names = (const char *[]){
  3496. - "pcnoc_clk_src"
  3497. - },
  3498. + .parent_hws = (const struct clk_hw *[]){
  3499. + &pcnoc_clk_src.hw },
  3500. .num_parents = 1,
  3501. .flags = CLK_SET_RATE_PARENT,
  3502. .ops = &clk_branch2_ops,
  3503. @@ -4269,9 +4119,8 @@ static struct clk_branch gcc_crypto_axi_
  3504. .enable_mask = BIT(1),
  3505. .hw.init = &(struct clk_init_data){
  3506. .name = "gcc_crypto_axi_clk",
  3507. - .parent_names = (const char *[]){
  3508. - "pcnoc_clk_src"
  3509. - },
  3510. + .parent_hws = (const struct clk_hw *[]){
  3511. + &pcnoc_clk_src.hw },
  3512. .num_parents = 1,
  3513. .flags = CLK_SET_RATE_PARENT,
  3514. .ops = &clk_branch2_ops,
  3515. @@ -4287,9 +4136,8 @@ static struct clk_branch gcc_crypto_clk
  3516. .enable_mask = BIT(2),
  3517. .hw.init = &(struct clk_init_data){
  3518. .name = "gcc_crypto_clk",
  3519. - .parent_names = (const char *[]){
  3520. - "crypto_clk_src"
  3521. - },
  3522. + .parent_hws = (const struct clk_hw *[]){
  3523. + &crypto_clk_src.clkr.hw },
  3524. .num_parents = 1,
  3525. .flags = CLK_SET_RATE_PARENT,
  3526. .ops = &clk_branch2_ops,
  3527. @@ -4304,9 +4152,8 @@ static struct clk_branch gcc_gp1_clk = {
  3528. .enable_mask = BIT(0),
  3529. .hw.init = &(struct clk_init_data){
  3530. .name = "gcc_gp1_clk",
  3531. - .parent_names = (const char *[]){
  3532. - "gp1_clk_src"
  3533. - },
  3534. + .parent_hws = (const struct clk_hw *[]){
  3535. + &gp1_clk_src.clkr.hw },
  3536. .num_parents = 1,
  3537. .flags = CLK_SET_RATE_PARENT,
  3538. .ops = &clk_branch2_ops,
  3539. @@ -4321,9 +4168,8 @@ static struct clk_branch gcc_gp2_clk = {
  3540. .enable_mask = BIT(0),
  3541. .hw.init = &(struct clk_init_data){
  3542. .name = "gcc_gp2_clk",
  3543. - .parent_names = (const char *[]){
  3544. - "gp2_clk_src"
  3545. - },
  3546. + .parent_hws = (const struct clk_hw *[]){
  3547. + &gp2_clk_src.clkr.hw },
  3548. .num_parents = 1,
  3549. .flags = CLK_SET_RATE_PARENT,
  3550. .ops = &clk_branch2_ops,
  3551. @@ -4338,9 +4184,8 @@ static struct clk_branch gcc_gp3_clk = {
  3552. .enable_mask = BIT(0),
  3553. .hw.init = &(struct clk_init_data){
  3554. .name = "gcc_gp3_clk",
  3555. - .parent_names = (const char *[]){
  3556. - "gp3_clk_src"
  3557. - },
  3558. + .parent_hws = (const struct clk_hw *[]){
  3559. + &gp3_clk_src.clkr.hw },
  3560. .num_parents = 1,
  3561. .flags = CLK_SET_RATE_PARENT,
  3562. .ops = &clk_branch2_ops,
  3563. @@ -4362,7 +4207,7 @@ static struct clk_rcg2 pcie0_rchng_clk_s
  3564. .clkr.hw.init = &(struct clk_init_data){
  3565. .name = "pcie0_rchng_clk_src",
  3566. .parent_data = gcc_xo_gpll0,
  3567. - .num_parents = 2,
  3568. + .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
  3569. .ops = &clk_rcg2_ops,
  3570. },
  3571. };