gcc-msm8909.c 67 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (C) 2022 Kernkonzept GmbH.
  4. *
  5. * Based on gcc-msm8916.c:
  6. * Copyright 2015 Linaro Limited
  7. * adapted with data from clock-gcc-8909.c in Qualcomm's msm-3.18 release:
  8. * Copyright (c) 2014-2016, The Linux Foundation. All rights reserved.
  9. */
  10. #include <linux/bitops.h>
  11. #include <linux/clk-provider.h>
  12. #include <linux/err.h>
  13. #include <linux/kernel.h>
  14. #include <linux/module.h>
  15. #include <linux/of.h>
  16. #include <linux/of_device.h>
  17. #include <linux/platform_device.h>
  18. #include <linux/regmap.h>
  19. #include <linux/reset-controller.h>
  20. #include <dt-bindings/clock/qcom,gcc-msm8909.h>
  21. #include "clk-alpha-pll.h"
  22. #include "clk-branch.h"
  23. #include "clk-pll.h"
  24. #include "clk-rcg.h"
  25. #include "clk-regmap.h"
  26. #include "common.h"
  27. #include "gdsc.h"
  28. #include "reset.h"
  29. /* Need to match the order of clocks in DT binding */
  30. enum {
  31. DT_XO,
  32. DT_SLEEP_CLK,
  33. DT_DSI0PLL,
  34. DT_DSI0PLL_BYTE,
  35. };
  36. enum {
  37. P_XO,
  38. P_SLEEP_CLK,
  39. P_GPLL0,
  40. P_GPLL1,
  41. P_GPLL2,
  42. P_BIMC,
  43. P_DSI0PLL,
  44. P_DSI0PLL_BYTE,
  45. };
  46. static const struct parent_map gcc_xo_map[] = {
  47. { P_XO, 0 },
  48. };
  49. static const struct clk_parent_data gcc_xo_data[] = {
  50. { .index = DT_XO },
  51. };
  52. static const struct clk_parent_data gcc_sleep_clk_data[] = {
  53. { .index = DT_SLEEP_CLK },
  54. };
  55. static struct clk_alpha_pll gpll0_early = {
  56. .offset = 0x21000,
  57. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  58. .clkr = {
  59. .enable_reg = 0x45000,
  60. .enable_mask = BIT(0),
  61. .hw.init = &(struct clk_init_data) {
  62. .name = "gpll0_early",
  63. .parent_data = gcc_xo_data,
  64. .num_parents = ARRAY_SIZE(gcc_xo_data),
  65. /* Avoid rate changes for shared clock */
  66. .ops = &clk_alpha_pll_fixed_ops,
  67. },
  68. },
  69. };
  70. static struct clk_alpha_pll_postdiv gpll0 = {
  71. .offset = 0x21000,
  72. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  73. .clkr.hw.init = &(struct clk_init_data) {
  74. .name = "gpll0",
  75. .parent_hws = (const struct clk_hw*[]) {
  76. &gpll0_early.clkr.hw,
  77. },
  78. .num_parents = 1,
  79. /* Avoid rate changes for shared clock */
  80. .ops = &clk_alpha_pll_postdiv_ro_ops,
  81. },
  82. };
  83. static struct clk_pll gpll1 = {
  84. .l_reg = 0x20004,
  85. .m_reg = 0x20008,
  86. .n_reg = 0x2000c,
  87. .config_reg = 0x20010,
  88. .mode_reg = 0x20000,
  89. .status_reg = 0x2001c,
  90. .status_bit = 17,
  91. .clkr.hw.init = &(struct clk_init_data) {
  92. .name = "gpll1",
  93. .parent_data = gcc_xo_data,
  94. .num_parents = ARRAY_SIZE(gcc_xo_data),
  95. .ops = &clk_pll_ops,
  96. },
  97. };
  98. static struct clk_regmap gpll1_vote = {
  99. .enable_reg = 0x45000,
  100. .enable_mask = BIT(1),
  101. .hw.init = &(struct clk_init_data) {
  102. .name = "gpll1_vote",
  103. .parent_hws = (const struct clk_hw*[]) {
  104. &gpll1.clkr.hw,
  105. },
  106. .num_parents = 1,
  107. .ops = &clk_pll_vote_ops,
  108. },
  109. };
  110. static struct clk_alpha_pll gpll2_early = {
  111. .offset = 0x25000,
  112. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  113. .clkr = {
  114. .enable_reg = 0x45000,
  115. .enable_mask = BIT(3),
  116. .hw.init = &(struct clk_init_data) {
  117. .name = "gpll2_early",
  118. .parent_data = gcc_xo_data,
  119. .num_parents = ARRAY_SIZE(gcc_xo_data),
  120. /* Avoid rate changes for shared clock */
  121. .ops = &clk_alpha_pll_fixed_ops,
  122. },
  123. },
  124. };
  125. static struct clk_alpha_pll_postdiv gpll2 = {
  126. .offset = 0x25000,
  127. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  128. .clkr.hw.init = &(struct clk_init_data) {
  129. .name = "gpll2",
  130. .parent_hws = (const struct clk_hw*[]) {
  131. &gpll2_early.clkr.hw,
  132. },
  133. .num_parents = 1,
  134. /* Avoid rate changes for shared clock */
  135. .ops = &clk_alpha_pll_postdiv_ro_ops,
  136. },
  137. };
  138. static struct clk_alpha_pll bimc_pll_early = {
  139. .offset = 0x23000,
  140. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  141. .clkr = {
  142. .enable_reg = 0x45000,
  143. .enable_mask = BIT(2),
  144. .hw.init = &(struct clk_init_data) {
  145. .name = "bimc_pll_early",
  146. .parent_data = gcc_xo_data,
  147. .num_parents = ARRAY_SIZE(gcc_xo_data),
  148. /* Avoid rate changes for shared clock */
  149. .ops = &clk_alpha_pll_fixed_ops,
  150. },
  151. },
  152. };
  153. static struct clk_alpha_pll_postdiv bimc_pll = {
  154. .offset = 0x23000,
  155. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  156. .clkr.hw.init = &(struct clk_init_data) {
  157. .name = "bimc_pll",
  158. .parent_hws = (const struct clk_hw*[]) {
  159. &bimc_pll_early.clkr.hw,
  160. },
  161. .num_parents = 1,
  162. /* Avoid rate changes for shared clock */
  163. .ops = &clk_alpha_pll_postdiv_ro_ops,
  164. },
  165. };
  166. static const struct parent_map gcc_xo_gpll0_map[] = {
  167. { P_XO, 0 },
  168. { P_GPLL0, 1 },
  169. };
  170. static const struct clk_parent_data gcc_xo_gpll0_data[] = {
  171. { .index = DT_XO },
  172. { .hw = &gpll0.clkr.hw },
  173. };
  174. static const struct parent_map gcc_xo_gpll0_bimc_map[] = {
  175. { P_XO, 0 },
  176. { P_GPLL0, 1 },
  177. { P_BIMC, 2 },
  178. };
  179. static const struct clk_parent_data gcc_xo_gpll0_bimc_data[] = {
  180. { .index = DT_XO },
  181. { .hw = &gpll0.clkr.hw },
  182. { .hw = &bimc_pll.clkr.hw },
  183. };
  184. static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
  185. F(19200000, P_XO, 1, 0, 0),
  186. F(50000000, P_GPLL0, 16, 0, 0),
  187. F(100000000, P_GPLL0, 8, 0, 0),
  188. { }
  189. };
  190. static struct clk_rcg2 apss_ahb_clk_src = {
  191. .cmd_rcgr = 0x46000,
  192. .hid_width = 5,
  193. .freq_tbl = ftbl_apss_ahb_clk_src,
  194. .parent_map = gcc_xo_gpll0_map,
  195. .clkr.hw.init = &(struct clk_init_data) {
  196. .name = "apss_ahb_clk_src",
  197. .parent_data = gcc_xo_gpll0_data,
  198. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  199. .ops = &clk_rcg2_ops,
  200. }
  201. };
  202. static struct clk_rcg2 bimc_ddr_clk_src = {
  203. .cmd_rcgr = 0x32004,
  204. .hid_width = 5,
  205. .parent_map = gcc_xo_gpll0_bimc_map,
  206. .clkr.hw.init = &(struct clk_init_data) {
  207. .name = "bimc_ddr_clk_src",
  208. .parent_data = gcc_xo_gpll0_bimc_data,
  209. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_data),
  210. .ops = &clk_rcg2_ops,
  211. .flags = CLK_GET_RATE_NOCACHE,
  212. },
  213. };
  214. static struct clk_rcg2 bimc_gpu_clk_src = {
  215. .cmd_rcgr = 0x31028,
  216. .hid_width = 5,
  217. .parent_map = gcc_xo_gpll0_bimc_map,
  218. .clkr.hw.init = &(struct clk_init_data) {
  219. .name = "bimc_gpu_clk_src",
  220. .parent_data = gcc_xo_gpll0_bimc_data,
  221. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_data),
  222. .ops = &clk_rcg2_ops,
  223. .flags = CLK_GET_RATE_NOCACHE,
  224. },
  225. };
  226. static const struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
  227. F(19200000, P_XO, 1, 0, 0),
  228. F(50000000, P_GPLL0, 16, 0, 0),
  229. { }
  230. };
  231. static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
  232. .cmd_rcgr = 0x0200c,
  233. .hid_width = 5,
  234. .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
  235. .parent_map = gcc_xo_gpll0_map,
  236. .clkr.hw.init = &(struct clk_init_data) {
  237. .name = "blsp1_qup1_i2c_apps_clk_src",
  238. .parent_data = gcc_xo_gpll0_data,
  239. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  240. .ops = &clk_rcg2_ops,
  241. }
  242. };
  243. static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
  244. .cmd_rcgr = 0x03000,
  245. .hid_width = 5,
  246. .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
  247. .parent_map = gcc_xo_gpll0_map,
  248. .clkr.hw.init = &(struct clk_init_data) {
  249. .name = "blsp1_qup2_i2c_apps_clk_src",
  250. .parent_data = gcc_xo_gpll0_data,
  251. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  252. .ops = &clk_rcg2_ops,
  253. }
  254. };
  255. static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
  256. .cmd_rcgr = 0x04000,
  257. .hid_width = 5,
  258. .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
  259. .parent_map = gcc_xo_gpll0_map,
  260. .clkr.hw.init = &(struct clk_init_data) {
  261. .name = "blsp1_qup3_i2c_apps_clk_src",
  262. .parent_data = gcc_xo_gpll0_data,
  263. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  264. .ops = &clk_rcg2_ops,
  265. }
  266. };
  267. static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
  268. .cmd_rcgr = 0x05000,
  269. .hid_width = 5,
  270. .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
  271. .parent_map = gcc_xo_gpll0_map,
  272. .clkr.hw.init = &(struct clk_init_data) {
  273. .name = "blsp1_qup4_i2c_apps_clk_src",
  274. .parent_data = gcc_xo_gpll0_data,
  275. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  276. .ops = &clk_rcg2_ops,
  277. }
  278. };
  279. static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
  280. .cmd_rcgr = 0x06000,
  281. .hid_width = 5,
  282. .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
  283. .parent_map = gcc_xo_gpll0_map,
  284. .clkr.hw.init = &(struct clk_init_data) {
  285. .name = "blsp1_qup5_i2c_apps_clk_src",
  286. .parent_data = gcc_xo_gpll0_data,
  287. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  288. .ops = &clk_rcg2_ops,
  289. }
  290. };
  291. static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
  292. .cmd_rcgr = 0x07000,
  293. .hid_width = 5,
  294. .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
  295. .parent_map = gcc_xo_gpll0_map,
  296. .clkr.hw.init = &(struct clk_init_data) {
  297. .name = "blsp1_qup6_i2c_apps_clk_src",
  298. .parent_data = gcc_xo_gpll0_data,
  299. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  300. .ops = &clk_rcg2_ops,
  301. }
  302. };
  303. static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = {
  304. F(960000, P_XO, 10, 1, 2),
  305. F(4800000, P_XO, 4, 0, 0),
  306. F(9600000, P_XO, 2, 0, 0),
  307. F(16000000, P_GPLL0, 10, 1, 5),
  308. F(19200000, P_XO, 1, 0, 0),
  309. F(25000000, P_GPLL0, 16, 1, 2),
  310. F(50000000, P_GPLL0, 16, 0, 0),
  311. { }
  312. };
  313. static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
  314. .cmd_rcgr = 0x02024,
  315. .hid_width = 5,
  316. .mnd_width = 8,
  317. .freq_tbl = ftbl_blsp_spi_apps_clk_src,
  318. .parent_map = gcc_xo_gpll0_map,
  319. .clkr.hw.init = &(struct clk_init_data) {
  320. .name = "blsp1_qup1_spi_apps_clk_src",
  321. .parent_data = gcc_xo_gpll0_data,
  322. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  323. .ops = &clk_rcg2_ops,
  324. }
  325. };
  326. static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
  327. .cmd_rcgr = 0x03014,
  328. .hid_width = 5,
  329. .mnd_width = 8,
  330. .freq_tbl = ftbl_blsp_spi_apps_clk_src,
  331. .parent_map = gcc_xo_gpll0_map,
  332. .clkr.hw.init = &(struct clk_init_data) {
  333. .name = "blsp1_qup2_spi_apps_clk_src",
  334. .parent_data = gcc_xo_gpll0_data,
  335. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  336. .ops = &clk_rcg2_ops,
  337. }
  338. };
  339. static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
  340. .cmd_rcgr = 0x04024,
  341. .hid_width = 5,
  342. .mnd_width = 8,
  343. .freq_tbl = ftbl_blsp_spi_apps_clk_src,
  344. .parent_map = gcc_xo_gpll0_map,
  345. .clkr.hw.init = &(struct clk_init_data) {
  346. .name = "blsp1_qup3_spi_apps_clk_src",
  347. .parent_data = gcc_xo_gpll0_data,
  348. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  349. .ops = &clk_rcg2_ops,
  350. }
  351. };
  352. static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
  353. .cmd_rcgr = 0x05024,
  354. .hid_width = 5,
  355. .mnd_width = 8,
  356. .freq_tbl = ftbl_blsp_spi_apps_clk_src,
  357. .parent_map = gcc_xo_gpll0_map,
  358. .clkr.hw.init = &(struct clk_init_data) {
  359. .name = "blsp1_qup4_spi_apps_clk_src",
  360. .parent_data = gcc_xo_gpll0_data,
  361. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  362. .ops = &clk_rcg2_ops,
  363. }
  364. };
  365. static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
  366. .cmd_rcgr = 0x06024,
  367. .hid_width = 5,
  368. .mnd_width = 8,
  369. .freq_tbl = ftbl_blsp_spi_apps_clk_src,
  370. .parent_map = gcc_xo_gpll0_map,
  371. .clkr.hw.init = &(struct clk_init_data) {
  372. .name = "blsp1_qup5_spi_apps_clk_src",
  373. .parent_data = gcc_xo_gpll0_data,
  374. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  375. .ops = &clk_rcg2_ops,
  376. }
  377. };
  378. static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
  379. .cmd_rcgr = 0x07024,
  380. .hid_width = 5,
  381. .mnd_width = 8,
  382. .freq_tbl = ftbl_blsp_spi_apps_clk_src,
  383. .parent_map = gcc_xo_gpll0_map,
  384. .clkr.hw.init = &(struct clk_init_data) {
  385. .name = "blsp1_qup6_spi_apps_clk_src",
  386. .parent_data = gcc_xo_gpll0_data,
  387. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  388. .ops = &clk_rcg2_ops,
  389. }
  390. };
  391. static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
  392. F(3686400, P_GPLL0, 1, 72, 15625),
  393. F(7372800, P_GPLL0, 1, 144, 15625),
  394. F(14745600, P_GPLL0, 1, 288, 15625),
  395. F(16000000, P_GPLL0, 10, 1, 5),
  396. F(19200000, P_XO, 1, 0, 0),
  397. F(24000000, P_GPLL0, 1, 3, 100),
  398. F(25000000, P_GPLL0, 16, 1, 2),
  399. F(32000000, P_GPLL0, 1, 1, 25),
  400. F(40000000, P_GPLL0, 1, 1, 20),
  401. F(46400000, P_GPLL0, 1, 29, 500),
  402. F(48000000, P_GPLL0, 1, 3, 50),
  403. F(51200000, P_GPLL0, 1, 8, 125),
  404. F(56000000, P_GPLL0, 1, 7, 100),
  405. F(58982400, P_GPLL0, 1, 1152, 15625),
  406. F(60000000, P_GPLL0, 1, 3, 40),
  407. { }
  408. };
  409. static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
  410. .cmd_rcgr = 0x02044,
  411. .hid_width = 5,
  412. .mnd_width = 16,
  413. .freq_tbl = ftbl_blsp_uart_apps_clk_src,
  414. .parent_map = gcc_xo_gpll0_map,
  415. .clkr.hw.init = &(struct clk_init_data) {
  416. .name = "blsp1_uart1_apps_clk_src",
  417. .parent_data = gcc_xo_gpll0_data,
  418. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  419. .ops = &clk_rcg2_ops,
  420. }
  421. };
  422. static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
  423. .cmd_rcgr = 0x03034,
  424. .hid_width = 5,
  425. .mnd_width = 16,
  426. .freq_tbl = ftbl_blsp_uart_apps_clk_src,
  427. .parent_map = gcc_xo_gpll0_map,
  428. .clkr.hw.init = &(struct clk_init_data) {
  429. .name = "blsp1_uart2_apps_clk_src",
  430. .parent_data = gcc_xo_gpll0_data,
  431. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  432. .ops = &clk_rcg2_ops,
  433. }
  434. };
  435. static const struct parent_map gcc_byte0_map[] = {
  436. { P_XO, 0 },
  437. { P_DSI0PLL_BYTE, 1 },
  438. };
  439. static const struct clk_parent_data gcc_byte_data[] = {
  440. { .index = DT_XO },
  441. { .index = DT_DSI0PLL_BYTE },
  442. };
  443. static struct clk_rcg2 byte0_clk_src = {
  444. .cmd_rcgr = 0x4d044,
  445. .hid_width = 5,
  446. .parent_map = gcc_byte0_map,
  447. .clkr.hw.init = &(struct clk_init_data) {
  448. .name = "byte0_clk_src",
  449. .parent_data = gcc_byte_data,
  450. .num_parents = ARRAY_SIZE(gcc_byte_data),
  451. .ops = &clk_byte2_ops,
  452. .flags = CLK_SET_RATE_PARENT,
  453. }
  454. };
  455. static const struct freq_tbl ftbl_camss_gp_clk_src[] = {
  456. F(100000000, P_GPLL0, 8, 0, 0),
  457. F(200000000, P_GPLL0, 4, 0, 0),
  458. { }
  459. };
  460. static struct clk_rcg2 camss_gp0_clk_src = {
  461. .cmd_rcgr = 0x54000,
  462. .hid_width = 5,
  463. .mnd_width = 8,
  464. .freq_tbl = ftbl_camss_gp_clk_src,
  465. .parent_map = gcc_xo_gpll0_map,
  466. .clkr.hw.init = &(struct clk_init_data) {
  467. .name = "camss_gp0_clk_src",
  468. .parent_data = gcc_xo_gpll0_data,
  469. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  470. .ops = &clk_rcg2_ops,
  471. }
  472. };
  473. static struct clk_rcg2 camss_gp1_clk_src = {
  474. .cmd_rcgr = 0x55000,
  475. .hid_width = 5,
  476. .mnd_width = 8,
  477. .freq_tbl = ftbl_camss_gp_clk_src,
  478. .parent_map = gcc_xo_gpll0_map,
  479. .clkr.hw.init = &(struct clk_init_data) {
  480. .name = "camss_gp1_clk_src",
  481. .parent_data = gcc_xo_gpll0_data,
  482. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  483. .ops = &clk_rcg2_ops,
  484. }
  485. };
  486. static const struct freq_tbl ftbl_camss_top_ahb_clk_src[] = {
  487. F(40000000, P_GPLL0, 10, 1, 2),
  488. F(80000000, P_GPLL0, 10, 0, 0),
  489. { }
  490. };
  491. static struct clk_rcg2 camss_top_ahb_clk_src = {
  492. .cmd_rcgr = 0x5a000,
  493. .hid_width = 5,
  494. .mnd_width = 8,
  495. .freq_tbl = ftbl_camss_top_ahb_clk_src,
  496. .parent_map = gcc_xo_gpll0_map,
  497. .clkr.hw.init = &(struct clk_init_data) {
  498. .name = "camss_top_ahb_clk_src",
  499. .parent_data = gcc_xo_gpll0_data,
  500. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  501. .ops = &clk_rcg2_ops,
  502. }
  503. };
  504. static const struct freq_tbl ftbl_crypto_clk_src[] = {
  505. F(50000000, P_GPLL0, 16, 0, 0),
  506. F(80000000, P_GPLL0, 10, 0, 0),
  507. F(100000000, P_GPLL0, 8, 0, 0),
  508. F(160000000, P_GPLL0, 5, 0, 0),
  509. { }
  510. };
  511. static struct clk_rcg2 crypto_clk_src = {
  512. .cmd_rcgr = 0x16004,
  513. .hid_width = 5,
  514. .freq_tbl = ftbl_crypto_clk_src,
  515. .parent_map = gcc_xo_gpll0_map,
  516. .clkr.hw.init = &(struct clk_init_data) {
  517. .name = "crypto_clk_src",
  518. .parent_data = gcc_xo_gpll0_data,
  519. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  520. .ops = &clk_rcg2_ops,
  521. }
  522. };
  523. static const struct freq_tbl ftbl_csi_clk_src[] = {
  524. F(100000000, P_GPLL0, 8, 0, 0),
  525. F(200000000, P_GPLL0, 4, 0, 0),
  526. { }
  527. };
  528. static struct clk_rcg2 csi0_clk_src = {
  529. .cmd_rcgr = 0x4e020,
  530. .hid_width = 5,
  531. .freq_tbl = ftbl_csi_clk_src,
  532. .parent_map = gcc_xo_gpll0_map,
  533. .clkr.hw.init = &(struct clk_init_data) {
  534. .name = "csi0_clk_src",
  535. .parent_data = gcc_xo_gpll0_data,
  536. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_map),
  537. .ops = &clk_rcg2_ops,
  538. }
  539. };
  540. static struct clk_rcg2 csi1_clk_src = {
  541. .cmd_rcgr = 0x4f020,
  542. .hid_width = 5,
  543. .freq_tbl = ftbl_csi_clk_src,
  544. .parent_map = gcc_xo_gpll0_map,
  545. .clkr.hw.init = &(struct clk_init_data) {
  546. .name = "csi1_clk_src",
  547. .parent_data = gcc_xo_gpll0_data,
  548. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  549. .ops = &clk_rcg2_ops,
  550. }
  551. };
  552. static const struct freq_tbl ftbl_csi_phytimer_clk_src[] = {
  553. F(100000000, P_GPLL0, 8, 0, 0),
  554. F(200000000, P_GPLL0, 4, 0, 0),
  555. { }
  556. };
  557. static struct clk_rcg2 csi0phytimer_clk_src = {
  558. .cmd_rcgr = 0x4e000,
  559. .hid_width = 5,
  560. .freq_tbl = ftbl_csi_phytimer_clk_src,
  561. .parent_map = gcc_xo_gpll0_map,
  562. .clkr.hw.init = &(struct clk_init_data) {
  563. .name = "csi0phytimer_clk_src",
  564. .parent_data = gcc_xo_gpll0_data,
  565. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  566. .ops = &clk_rcg2_ops,
  567. }
  568. };
  569. static const struct freq_tbl ftbl_esc0_clk_src[] = {
  570. F(19200000, P_XO, 1, 0, 0),
  571. { }
  572. };
  573. static struct clk_rcg2 esc0_clk_src = {
  574. .cmd_rcgr = 0x4d05c,
  575. .hid_width = 5,
  576. .freq_tbl = ftbl_esc0_clk_src,
  577. .parent_map = gcc_xo_map,
  578. .clkr.hw.init = &(struct clk_init_data) {
  579. .name = "esc0_clk_src",
  580. .parent_data = gcc_xo_data,
  581. .num_parents = ARRAY_SIZE(gcc_xo_data),
  582. .ops = &clk_rcg2_ops,
  583. }
  584. };
  585. static const struct parent_map gcc_gfx3d_map[] = {
  586. { P_XO, 0 },
  587. { P_GPLL0, 1 },
  588. { P_GPLL1, 2 },
  589. };
  590. static const struct clk_parent_data gcc_gfx3d_data[] = {
  591. { .index = DT_XO },
  592. { .hw = &gpll0.clkr.hw },
  593. { .hw = &gpll1_vote.hw },
  594. };
  595. static const struct freq_tbl ftbl_gfx3d_clk_src[] = {
  596. F(19200000, P_XO, 1, 0, 0),
  597. F(50000000, P_GPLL0, 16, 0, 0),
  598. F(80000000, P_GPLL0, 10, 0, 0),
  599. F(100000000, P_GPLL0, 8, 0, 0),
  600. F(160000000, P_GPLL0, 5, 0, 0),
  601. F(177780000, P_GPLL0, 4.5, 0, 0),
  602. F(200000000, P_GPLL0, 4, 0, 0),
  603. F(266670000, P_GPLL0, 3, 0, 0),
  604. F(307200000, P_GPLL1, 4, 0, 0),
  605. F(409600000, P_GPLL1, 3, 0, 0),
  606. { }
  607. };
  608. static struct clk_rcg2 gfx3d_clk_src = {
  609. .cmd_rcgr = 0x59000,
  610. .hid_width = 5,
  611. .freq_tbl = ftbl_gfx3d_clk_src,
  612. .parent_map = gcc_gfx3d_map,
  613. .clkr.hw.init = &(struct clk_init_data) {
  614. .name = "gfx3d_clk_src",
  615. .parent_data = gcc_gfx3d_data,
  616. .num_parents = ARRAY_SIZE(gcc_gfx3d_data),
  617. .ops = &clk_rcg2_ops,
  618. }
  619. };
  620. static const struct freq_tbl ftbl_gp_clk_src[] = {
  621. F(150000, P_XO, 1, 1, 128),
  622. F(19200000, P_XO, 1, 0, 0),
  623. { }
  624. };
  625. static struct clk_rcg2 gp1_clk_src = {
  626. .cmd_rcgr = 0x08004,
  627. .hid_width = 5,
  628. .mnd_width = 8,
  629. .freq_tbl = ftbl_gp_clk_src,
  630. .parent_map = gcc_xo_map,
  631. .clkr.hw.init = &(struct clk_init_data) {
  632. .name = "gp1_clk_src",
  633. .parent_data = gcc_xo_data,
  634. .num_parents = ARRAY_SIZE(gcc_xo_data),
  635. .ops = &clk_rcg2_ops,
  636. }
  637. };
  638. static struct clk_rcg2 gp2_clk_src = {
  639. .cmd_rcgr = 0x09004,
  640. .hid_width = 5,
  641. .mnd_width = 8,
  642. .freq_tbl = ftbl_gp_clk_src,
  643. .parent_map = gcc_xo_map,
  644. .clkr.hw.init = &(struct clk_init_data) {
  645. .name = "gp2_clk_src",
  646. .parent_data = gcc_xo_data,
  647. .num_parents = ARRAY_SIZE(gcc_xo_data),
  648. .ops = &clk_rcg2_ops,
  649. }
  650. };
  651. static struct clk_rcg2 gp3_clk_src = {
  652. .cmd_rcgr = 0x0a004,
  653. .hid_width = 5,
  654. .mnd_width = 8,
  655. .freq_tbl = ftbl_gp_clk_src,
  656. .parent_map = gcc_xo_map,
  657. .clkr.hw.init = &(struct clk_init_data) {
  658. .name = "gp3_clk_src",
  659. .parent_data = gcc_xo_data,
  660. .num_parents = ARRAY_SIZE(gcc_xo_data),
  661. .ops = &clk_rcg2_ops,
  662. }
  663. };
  664. static const struct parent_map gcc_mclk_map[] = {
  665. { P_XO, 0 },
  666. { P_GPLL0, 1 },
  667. { P_GPLL2, 3 },
  668. };
  669. static const struct clk_parent_data gcc_mclk_data[] = {
  670. { .index = DT_XO },
  671. { .hw = &gpll0.clkr.hw },
  672. { .hw = &gpll2.clkr.hw },
  673. };
  674. static const struct freq_tbl ftbl_mclk_clk_src[] = {
  675. F(24000000, P_GPLL2, 1, 1, 33),
  676. F(66667000, P_GPLL0, 12, 0, 0),
  677. { }
  678. };
  679. static struct clk_rcg2 mclk0_clk_src = {
  680. .cmd_rcgr = 0x52000,
  681. .hid_width = 5,
  682. .mnd_width = 8,
  683. .freq_tbl = ftbl_mclk_clk_src,
  684. .parent_map = gcc_mclk_map,
  685. .clkr.hw.init = &(struct clk_init_data) {
  686. .name = "mclk0_clk_src",
  687. .parent_data = gcc_mclk_data,
  688. .num_parents = ARRAY_SIZE(gcc_mclk_data),
  689. .ops = &clk_rcg2_ops,
  690. }
  691. };
  692. static struct clk_rcg2 mclk1_clk_src = {
  693. .cmd_rcgr = 0x53000,
  694. .hid_width = 5,
  695. .mnd_width = 8,
  696. .freq_tbl = ftbl_mclk_clk_src,
  697. .parent_map = gcc_mclk_map,
  698. .clkr.hw.init = &(struct clk_init_data) {
  699. .name = "mclk1_clk_src",
  700. .parent_data = gcc_mclk_data,
  701. .num_parents = ARRAY_SIZE(gcc_mclk_data),
  702. .ops = &clk_rcg2_ops,
  703. }
  704. };
  705. static const struct parent_map gcc_mdp_map[] = {
  706. { P_XO, 0 },
  707. { P_GPLL0, 1 },
  708. { P_GPLL1, 3 },
  709. };
  710. static const struct clk_parent_data gcc_mdp_data[] = {
  711. { .index = DT_XO },
  712. { .hw = &gpll0.clkr.hw },
  713. { .hw = &gpll1_vote.hw },
  714. };
  715. static const struct freq_tbl ftbl_mdp_clk_src[] = {
  716. F(50000000, P_GPLL0, 16, 0, 0),
  717. F(80000000, P_GPLL0, 10, 0, 0),
  718. F(100000000, P_GPLL0, 8, 0, 0),
  719. F(160000000, P_GPLL0, 5, 0, 0),
  720. F(177780000, P_GPLL0, 4.5, 0, 0),
  721. F(200000000, P_GPLL0, 4, 0, 0),
  722. F(266670000, P_GPLL0, 3, 0, 0),
  723. F(307200000, P_GPLL1, 4, 0, 0),
  724. { }
  725. };
  726. static struct clk_rcg2 mdp_clk_src = {
  727. .cmd_rcgr = 0x4d014,
  728. .hid_width = 5,
  729. .freq_tbl = ftbl_mdp_clk_src,
  730. .parent_map = gcc_mdp_map,
  731. .clkr.hw.init = &(struct clk_init_data) {
  732. .name = "mdp_clk_src",
  733. .parent_data = gcc_mdp_data,
  734. .num_parents = ARRAY_SIZE(gcc_mdp_data),
  735. .ops = &clk_rcg2_ops,
  736. }
  737. };
  738. static const struct parent_map gcc_pclk0_map[] = {
  739. { P_XO, 0 },
  740. { P_DSI0PLL, 1 },
  741. };
  742. static const struct clk_parent_data gcc_pclk_data[] = {
  743. { .index = DT_XO },
  744. { .index = DT_DSI0PLL },
  745. };
  746. static struct clk_rcg2 pclk0_clk_src = {
  747. .cmd_rcgr = 0x4d000,
  748. .hid_width = 5,
  749. .mnd_width = 8,
  750. .parent_map = gcc_pclk0_map,
  751. .clkr.hw.init = &(struct clk_init_data) {
  752. .name = "pclk0_clk_src",
  753. .parent_data = gcc_pclk_data,
  754. .num_parents = ARRAY_SIZE(gcc_pclk_data),
  755. .ops = &clk_pixel_ops,
  756. .flags = CLK_SET_RATE_PARENT,
  757. }
  758. };
  759. static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
  760. .cmd_rcgr = 0x27000,
  761. .hid_width = 5,
  762. .parent_map = gcc_xo_gpll0_bimc_map,
  763. .clkr.hw.init = &(struct clk_init_data) {
  764. .name = "pcnoc_bfdcd_clk_src",
  765. .parent_data = gcc_xo_gpll0_bimc_data,
  766. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_data),
  767. .ops = &clk_rcg2_ops,
  768. },
  769. };
  770. static const struct freq_tbl ftbl_pdm2_clk_src[] = {
  771. F(64000000, P_GPLL0, 12.5, 0, 0),
  772. { }
  773. };
  774. static struct clk_rcg2 pdm2_clk_src = {
  775. .cmd_rcgr = 0x44010,
  776. .hid_width = 5,
  777. .freq_tbl = ftbl_pdm2_clk_src,
  778. .parent_map = gcc_xo_gpll0_map,
  779. .clkr.hw.init = &(struct clk_init_data) {
  780. .name = "pdm2_clk_src",
  781. .parent_data = gcc_xo_gpll0_data,
  782. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  783. .ops = &clk_rcg2_ops,
  784. }
  785. };
  786. static const struct freq_tbl ftbl_gcc_sdcc1_2_apps_clk[] = {
  787. F(144000, P_XO, 16, 3, 25),
  788. F(400000, P_XO, 12, 1, 4),
  789. F(20000000, P_GPLL0, 10, 1, 4),
  790. F(25000000, P_GPLL0, 16, 1, 2),
  791. F(50000000, P_GPLL0, 16, 0, 0),
  792. F(100000000, P_GPLL0, 8, 0, 0),
  793. F(177770000, P_GPLL0, 4.5, 0, 0),
  794. F(200000000, P_GPLL0, 4, 0, 0),
  795. { }
  796. };
  797. static struct clk_rcg2 sdcc1_apps_clk_src = {
  798. .cmd_rcgr = 0x42004,
  799. .hid_width = 5,
  800. .mnd_width = 8,
  801. .freq_tbl = ftbl_gcc_sdcc1_2_apps_clk,
  802. .parent_map = gcc_xo_gpll0_map,
  803. .clkr.hw.init = &(struct clk_init_data) {
  804. .name = "sdcc1_apps_clk_src",
  805. .parent_data = gcc_xo_gpll0_data,
  806. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  807. .ops = &clk_rcg2_floor_ops,
  808. }
  809. };
  810. static struct clk_rcg2 sdcc2_apps_clk_src = {
  811. .cmd_rcgr = 0x43004,
  812. .hid_width = 5,
  813. .mnd_width = 8,
  814. .freq_tbl = ftbl_gcc_sdcc1_2_apps_clk,
  815. .parent_map = gcc_xo_gpll0_map,
  816. .clkr.hw.init = &(struct clk_init_data) {
  817. .name = "sdcc2_apps_clk_src",
  818. .parent_data = gcc_xo_gpll0_data,
  819. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  820. .ops = &clk_rcg2_floor_ops,
  821. }
  822. };
  823. static struct clk_rcg2 system_noc_bfdcd_clk_src = {
  824. .cmd_rcgr = 0x26004,
  825. .hid_width = 5,
  826. .parent_map = gcc_xo_gpll0_bimc_map,
  827. .clkr.hw.init = &(struct clk_init_data) {
  828. .name = "system_noc_bfdcd_clk_src",
  829. .parent_data = gcc_xo_gpll0_bimc_data,
  830. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_data),
  831. .ops = &clk_rcg2_ops,
  832. },
  833. };
  834. static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
  835. F(57140000, P_GPLL0, 14, 0, 0),
  836. F(80000000, P_GPLL0, 10, 0, 0),
  837. F(100000000, P_GPLL0, 8, 0, 0),
  838. { }
  839. };
  840. static struct clk_rcg2 usb_hs_system_clk_src = {
  841. .cmd_rcgr = 0x41010,
  842. .hid_width = 5,
  843. .freq_tbl = ftbl_gcc_usb_hs_system_clk,
  844. .parent_map = gcc_xo_gpll0_map,
  845. .clkr.hw.init = &(struct clk_init_data) {
  846. .name = "usb_hs_system_clk_src",
  847. .parent_data = gcc_xo_gpll0_data,
  848. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  849. .ops = &clk_rcg2_ops,
  850. }
  851. };
  852. static const struct parent_map gcc_vcodec0_map[] = {
  853. { P_XO, 0 },
  854. { P_GPLL0, 1 },
  855. { P_GPLL1, 3 },
  856. };
  857. static const struct clk_parent_data gcc_vcodec0_data[] = {
  858. { .index = DT_XO },
  859. { .hw = &gpll0.clkr.hw },
  860. { .hw = &gpll1_vote.hw },
  861. };
  862. static const struct freq_tbl ftbl_vcodec0_clk_src[] = {
  863. F(133330000, P_GPLL0, 6, 0, 0),
  864. F(266670000, P_GPLL0, 3, 0, 0),
  865. F(307200000, P_GPLL1, 4, 0, 0),
  866. { }
  867. };
  868. static struct clk_rcg2 vcodec0_clk_src = {
  869. .cmd_rcgr = 0x4c000,
  870. .hid_width = 5,
  871. .mnd_width = 8,
  872. .freq_tbl = ftbl_vcodec0_clk_src,
  873. .parent_map = gcc_vcodec0_map,
  874. .clkr.hw.init = &(struct clk_init_data) {
  875. .name = "vcodec0_clk_src",
  876. .parent_data = gcc_vcodec0_data,
  877. .num_parents = ARRAY_SIZE(gcc_vcodec0_data),
  878. .ops = &clk_rcg2_ops,
  879. }
  880. };
  881. static const struct freq_tbl ftbl_gcc_camss_vfe0_clk[] = {
  882. F(50000000, P_GPLL0, 16, 0, 0),
  883. F(80000000, P_GPLL0, 10, 0, 0),
  884. F(100000000, P_GPLL0, 8, 0, 0),
  885. F(133330000, P_GPLL0, 6, 0, 0),
  886. F(160000000, P_GPLL0, 5, 0, 0),
  887. F(177780000, P_GPLL0, 4.5, 0, 0),
  888. F(200000000, P_GPLL0, 4, 0, 0),
  889. F(266670000, P_GPLL0, 3, 0, 0),
  890. F(320000000, P_GPLL0, 2.5, 0, 0),
  891. { }
  892. };
  893. static struct clk_rcg2 vfe0_clk_src = {
  894. .cmd_rcgr = 0x58000,
  895. .hid_width = 5,
  896. .freq_tbl = ftbl_gcc_camss_vfe0_clk,
  897. .parent_map = gcc_xo_gpll0_map,
  898. .clkr.hw.init = &(struct clk_init_data) {
  899. .name = "vfe0_clk_src",
  900. .parent_data = gcc_xo_gpll0_data,
  901. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
  902. .ops = &clk_rcg2_ops,
  903. }
  904. };
  905. static const struct freq_tbl ftbl_vsync_clk_src[] = {
  906. F(19200000, P_XO, 1, 0, 0),
  907. { }
  908. };
  909. static struct clk_rcg2 vsync_clk_src = {
  910. .cmd_rcgr = 0x4d02c,
  911. .hid_width = 5,
  912. .freq_tbl = ftbl_vsync_clk_src,
  913. .parent_map = gcc_xo_map,
  914. .clkr.hw.init = &(struct clk_init_data) {
  915. .name = "vsync_clk_src",
  916. .parent_data = gcc_xo_data,
  917. .num_parents = ARRAY_SIZE(gcc_xo_data),
  918. .ops = &clk_rcg2_ops,
  919. }
  920. };
  921. static struct clk_branch gcc_apss_tcu_clk = {
  922. .halt_reg = 0x12018,
  923. .halt_check = BRANCH_HALT_VOTED,
  924. .clkr = {
  925. .enable_reg = 0x4500c,
  926. .enable_mask = BIT(1),
  927. .hw.init = &(struct clk_init_data) {
  928. .name = "gcc_apss_tcu_clk",
  929. .parent_hws = (const struct clk_hw*[]) {
  930. &bimc_ddr_clk_src.clkr.hw,
  931. },
  932. .num_parents = 1,
  933. .ops = &clk_branch2_ops,
  934. }
  935. }
  936. };
  937. static struct clk_branch gcc_blsp1_ahb_clk = {
  938. .halt_reg = 0x01008,
  939. .halt_check = BRANCH_HALT_VOTED,
  940. .clkr = {
  941. .enable_reg = 0x45004,
  942. .enable_mask = BIT(10),
  943. .hw.init = &(struct clk_init_data) {
  944. .name = "gcc_blsp1_ahb_clk",
  945. .parent_hws = (const struct clk_hw*[]) {
  946. &pcnoc_bfdcd_clk_src.clkr.hw,
  947. },
  948. .num_parents = 1,
  949. .ops = &clk_branch2_ops,
  950. }
  951. }
  952. };
  953. static struct clk_branch gcc_blsp1_sleep_clk = {
  954. .halt_reg = 0x01004,
  955. .halt_check = BRANCH_HALT_VOTED,
  956. .clkr = {
  957. .enable_reg = 0x45004,
  958. .enable_mask = BIT(9),
  959. .hw.init = &(struct clk_init_data) {
  960. .name = "gcc_blsp1_sleep_clk",
  961. .parent_data = gcc_sleep_clk_data,
  962. .num_parents = ARRAY_SIZE(gcc_sleep_clk_data),
  963. .ops = &clk_branch2_ops,
  964. }
  965. }
  966. };
  967. static struct clk_branch gcc_boot_rom_ahb_clk = {
  968. .halt_reg = 0x1300c,
  969. .halt_check = BRANCH_HALT_VOTED,
  970. .clkr = {
  971. .enable_reg = 0x45004,
  972. .enable_mask = BIT(7),
  973. .hw.init = &(struct clk_init_data) {
  974. .name = "gcc_boot_rom_ahb_clk",
  975. .parent_hws = (const struct clk_hw*[]) {
  976. &pcnoc_bfdcd_clk_src.clkr.hw,
  977. },
  978. .num_parents = 1,
  979. .ops = &clk_branch2_ops,
  980. }
  981. }
  982. };
  983. static struct clk_branch gcc_crypto_clk = {
  984. .halt_reg = 0x1601c,
  985. .halt_check = BRANCH_HALT_VOTED,
  986. .clkr = {
  987. .enable_reg = 0x45004,
  988. .enable_mask = BIT(2),
  989. .hw.init = &(struct clk_init_data) {
  990. .name = "gcc_crypto_clk",
  991. .parent_hws = (const struct clk_hw*[]) {
  992. &crypto_clk_src.clkr.hw,
  993. },
  994. .num_parents = 1,
  995. .ops = &clk_branch2_ops,
  996. .flags = CLK_SET_RATE_PARENT,
  997. }
  998. }
  999. };
  1000. static struct clk_branch gcc_crypto_ahb_clk = {
  1001. .halt_reg = 0x16024,
  1002. .halt_check = BRANCH_HALT_VOTED,
  1003. .clkr = {
  1004. .enable_reg = 0x45004,
  1005. .enable_mask = BIT(0),
  1006. .hw.init = &(struct clk_init_data) {
  1007. .name = "gcc_crypto_ahb_clk",
  1008. .parent_hws = (const struct clk_hw*[]) {
  1009. &pcnoc_bfdcd_clk_src.clkr.hw,
  1010. },
  1011. .num_parents = 1,
  1012. .ops = &clk_branch2_ops,
  1013. }
  1014. }
  1015. };
  1016. static struct clk_branch gcc_crypto_axi_clk = {
  1017. .halt_reg = 0x16020,
  1018. .halt_check = BRANCH_HALT_VOTED,
  1019. .clkr = {
  1020. .enable_reg = 0x45004,
  1021. .enable_mask = BIT(1),
  1022. .hw.init = &(struct clk_init_data) {
  1023. .name = "gcc_crypto_axi_clk",
  1024. .parent_hws = (const struct clk_hw*[]) {
  1025. &pcnoc_bfdcd_clk_src.clkr.hw,
  1026. },
  1027. .num_parents = 1,
  1028. .ops = &clk_branch2_ops,
  1029. }
  1030. }
  1031. };
  1032. static struct clk_branch gcc_gfx_tbu_clk = {
  1033. .halt_reg = 0x12010,
  1034. .halt_check = BRANCH_HALT_VOTED,
  1035. .clkr = {
  1036. .enable_reg = 0x4500c,
  1037. .enable_mask = BIT(3),
  1038. .hw.init = &(struct clk_init_data) {
  1039. .name = "gcc_gfx_tbu_clk",
  1040. .parent_hws = (const struct clk_hw*[]) {
  1041. &bimc_ddr_clk_src.clkr.hw,
  1042. },
  1043. .num_parents = 1,
  1044. .ops = &clk_branch2_ops,
  1045. }
  1046. }
  1047. };
  1048. static struct clk_branch gcc_gfx_tcu_clk = {
  1049. .halt_reg = 0x12020,
  1050. .halt_check = BRANCH_HALT_VOTED,
  1051. .clkr = {
  1052. .enable_reg = 0x4500c,
  1053. .enable_mask = BIT(2),
  1054. .hw.init = &(struct clk_init_data) {
  1055. .name = "gcc_gfx_tcu_clk",
  1056. .parent_hws = (const struct clk_hw*[]) {
  1057. &bimc_ddr_clk_src.clkr.hw,
  1058. },
  1059. .num_parents = 1,
  1060. .ops = &clk_branch2_ops,
  1061. }
  1062. }
  1063. };
  1064. static struct clk_branch gcc_gtcu_ahb_clk = {
  1065. .halt_reg = 0x12044,
  1066. .halt_check = BRANCH_HALT_VOTED,
  1067. .clkr = {
  1068. .enable_reg = 0x4500c,
  1069. .enable_mask = BIT(13),
  1070. .hw.init = &(struct clk_init_data) {
  1071. .name = "gcc_gtcu_ahb_clk",
  1072. .parent_hws = (const struct clk_hw*[]) {
  1073. &pcnoc_bfdcd_clk_src.clkr.hw,
  1074. },
  1075. .num_parents = 1,
  1076. .ops = &clk_branch2_ops,
  1077. }
  1078. }
  1079. };
  1080. static struct clk_branch gcc_mdp_tbu_clk = {
  1081. .halt_reg = 0x1201c,
  1082. .halt_check = BRANCH_HALT_VOTED,
  1083. .clkr = {
  1084. .enable_reg = 0x4500c,
  1085. .enable_mask = BIT(4),
  1086. .hw.init = &(struct clk_init_data) {
  1087. .name = "gcc_mdp_tbu_clk",
  1088. .parent_hws = (const struct clk_hw*[]) {
  1089. &system_noc_bfdcd_clk_src.clkr.hw,
  1090. },
  1091. .num_parents = 1,
  1092. .ops = &clk_branch2_ops,
  1093. }
  1094. }
  1095. };
  1096. static struct clk_branch gcc_prng_ahb_clk = {
  1097. .halt_reg = 0x13004,
  1098. .halt_check = BRANCH_HALT_VOTED,
  1099. .clkr = {
  1100. .enable_reg = 0x45004,
  1101. .enable_mask = BIT(8),
  1102. .hw.init = &(struct clk_init_data) {
  1103. .name = "gcc_prng_ahb_clk",
  1104. .parent_hws = (const struct clk_hw*[]) {
  1105. &pcnoc_bfdcd_clk_src.clkr.hw,
  1106. },
  1107. .num_parents = 1,
  1108. .ops = &clk_branch2_ops,
  1109. }
  1110. }
  1111. };
  1112. static struct clk_branch gcc_smmu_cfg_clk = {
  1113. .halt_reg = 0x12038,
  1114. .halt_check = BRANCH_HALT_VOTED,
  1115. .clkr = {
  1116. .enable_reg = 0x4500c,
  1117. .enable_mask = BIT(12),
  1118. .hw.init = &(struct clk_init_data) {
  1119. .name = "gcc_smmu_cfg_clk",
  1120. .parent_hws = (const struct clk_hw*[]) {
  1121. &pcnoc_bfdcd_clk_src.clkr.hw,
  1122. },
  1123. .num_parents = 1,
  1124. .ops = &clk_branch2_ops,
  1125. }
  1126. }
  1127. };
  1128. static struct clk_branch gcc_venus_tbu_clk = {
  1129. .halt_reg = 0x12014,
  1130. .halt_check = BRANCH_HALT_VOTED,
  1131. .clkr = {
  1132. .enable_reg = 0x4500c,
  1133. .enable_mask = BIT(5),
  1134. .hw.init = &(struct clk_init_data) {
  1135. .name = "gcc_venus_tbu_clk",
  1136. .parent_hws = (const struct clk_hw*[]) {
  1137. &system_noc_bfdcd_clk_src.clkr.hw,
  1138. },
  1139. .num_parents = 1,
  1140. .ops = &clk_branch2_ops,
  1141. }
  1142. }
  1143. };
  1144. static struct clk_branch gcc_vfe_tbu_clk = {
  1145. .halt_reg = 0x1203c,
  1146. .halt_check = BRANCH_HALT_VOTED,
  1147. .clkr = {
  1148. .enable_reg = 0x4500c,
  1149. .enable_mask = BIT(9),
  1150. .hw.init = &(struct clk_init_data) {
  1151. .name = "gcc_vfe_tbu_clk",
  1152. .parent_hws = (const struct clk_hw*[]) {
  1153. &system_noc_bfdcd_clk_src.clkr.hw,
  1154. },
  1155. .num_parents = 1,
  1156. .ops = &clk_branch2_ops,
  1157. }
  1158. }
  1159. };
  1160. static struct clk_branch gcc_bimc_gfx_clk = {
  1161. .halt_reg = 0x31024,
  1162. .halt_check = BRANCH_HALT,
  1163. .clkr = {
  1164. .enable_reg = 0x31024,
  1165. .enable_mask = BIT(0),
  1166. .hw.init = &(struct clk_init_data) {
  1167. .name = "gcc_bimc_gfx_clk",
  1168. .parent_hws = (const struct clk_hw*[]) {
  1169. &bimc_gpu_clk_src.clkr.hw,
  1170. },
  1171. .num_parents = 1,
  1172. .ops = &clk_branch2_ops,
  1173. }
  1174. }
  1175. };
  1176. static struct clk_branch gcc_bimc_gpu_clk = {
  1177. .halt_reg = 0x31040,
  1178. .halt_check = BRANCH_HALT,
  1179. .clkr = {
  1180. .enable_reg = 0x31040,
  1181. .enable_mask = BIT(0),
  1182. .hw.init = &(struct clk_init_data) {
  1183. .name = "gcc_bimc_gpu_clk",
  1184. .parent_hws = (const struct clk_hw*[]) {
  1185. &bimc_gpu_clk_src.clkr.hw,
  1186. },
  1187. .num_parents = 1,
  1188. .ops = &clk_branch2_ops,
  1189. }
  1190. }
  1191. };
  1192. static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
  1193. .halt_reg = 0x02008,
  1194. .halt_check = BRANCH_HALT,
  1195. .clkr = {
  1196. .enable_reg = 0x02008,
  1197. .enable_mask = BIT(0),
  1198. .hw.init = &(struct clk_init_data) {
  1199. .name = "gcc_blsp1_qup1_i2c_apps_clk",
  1200. .parent_hws = (const struct clk_hw*[]) {
  1201. &blsp1_qup1_i2c_apps_clk_src.clkr.hw,
  1202. },
  1203. .num_parents = 1,
  1204. .ops = &clk_branch2_ops,
  1205. .flags = CLK_SET_RATE_PARENT,
  1206. }
  1207. }
  1208. };
  1209. static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
  1210. .halt_reg = 0x03010,
  1211. .halt_check = BRANCH_HALT,
  1212. .clkr = {
  1213. .enable_reg = 0x03010,
  1214. .enable_mask = BIT(0),
  1215. .hw.init = &(struct clk_init_data) {
  1216. .name = "gcc_blsp1_qup2_i2c_apps_clk",
  1217. .parent_hws = (const struct clk_hw*[]) {
  1218. &blsp1_qup2_i2c_apps_clk_src.clkr.hw,
  1219. },
  1220. .num_parents = 1,
  1221. .ops = &clk_branch2_ops,
  1222. .flags = CLK_SET_RATE_PARENT,
  1223. }
  1224. }
  1225. };
  1226. static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
  1227. .halt_reg = 0x04020,
  1228. .halt_check = BRANCH_HALT,
  1229. .clkr = {
  1230. .enable_reg = 0x04020,
  1231. .enable_mask = BIT(0),
  1232. .hw.init = &(struct clk_init_data) {
  1233. .name = "gcc_blsp1_qup3_i2c_apps_clk",
  1234. .parent_hws = (const struct clk_hw*[]) {
  1235. &blsp1_qup3_i2c_apps_clk_src.clkr.hw,
  1236. },
  1237. .num_parents = 1,
  1238. .ops = &clk_branch2_ops,
  1239. .flags = CLK_SET_RATE_PARENT,
  1240. }
  1241. }
  1242. };
  1243. static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
  1244. .halt_reg = 0x05020,
  1245. .halt_check = BRANCH_HALT,
  1246. .clkr = {
  1247. .enable_reg = 0x05020,
  1248. .enable_mask = BIT(0),
  1249. .hw.init = &(struct clk_init_data) {
  1250. .name = "gcc_blsp1_qup4_i2c_apps_clk",
  1251. .parent_hws = (const struct clk_hw*[]) {
  1252. &blsp1_qup4_i2c_apps_clk_src.clkr.hw,
  1253. },
  1254. .num_parents = 1,
  1255. .ops = &clk_branch2_ops,
  1256. .flags = CLK_SET_RATE_PARENT,
  1257. }
  1258. }
  1259. };
  1260. static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
  1261. .halt_reg = 0x06020,
  1262. .halt_check = BRANCH_HALT,
  1263. .clkr = {
  1264. .enable_reg = 0x06020,
  1265. .enable_mask = BIT(0),
  1266. .hw.init = &(struct clk_init_data) {
  1267. .name = "gcc_blsp1_qup5_i2c_apps_clk",
  1268. .parent_hws = (const struct clk_hw*[]) {
  1269. &blsp1_qup5_i2c_apps_clk_src.clkr.hw,
  1270. },
  1271. .num_parents = 1,
  1272. .ops = &clk_branch2_ops,
  1273. .flags = CLK_SET_RATE_PARENT,
  1274. }
  1275. }
  1276. };
  1277. static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
  1278. .halt_reg = 0x07020,
  1279. .halt_check = BRANCH_HALT,
  1280. .clkr = {
  1281. .enable_reg = 0x07020,
  1282. .enable_mask = BIT(0),
  1283. .hw.init = &(struct clk_init_data) {
  1284. .name = "gcc_blsp1_qup6_i2c_apps_clk",
  1285. .parent_hws = (const struct clk_hw*[]) {
  1286. &blsp1_qup6_i2c_apps_clk_src.clkr.hw,
  1287. },
  1288. .num_parents = 1,
  1289. .ops = &clk_branch2_ops,
  1290. .flags = CLK_SET_RATE_PARENT,
  1291. }
  1292. }
  1293. };
  1294. static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
  1295. .halt_reg = 0x02004,
  1296. .halt_check = BRANCH_HALT,
  1297. .clkr = {
  1298. .enable_reg = 0x02004,
  1299. .enable_mask = BIT(0),
  1300. .hw.init = &(struct clk_init_data) {
  1301. .name = "gcc_blsp1_qup1_spi_apps_clk",
  1302. .parent_hws = (const struct clk_hw*[]) {
  1303. &blsp1_qup1_spi_apps_clk_src.clkr.hw,
  1304. },
  1305. .num_parents = 1,
  1306. .ops = &clk_branch2_ops,
  1307. .flags = CLK_SET_RATE_PARENT,
  1308. }
  1309. }
  1310. };
  1311. static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
  1312. .halt_reg = 0x0300c,
  1313. .halt_check = BRANCH_HALT,
  1314. .clkr = {
  1315. .enable_reg = 0x0300c,
  1316. .enable_mask = BIT(0),
  1317. .hw.init = &(struct clk_init_data) {
  1318. .name = "gcc_blsp1_qup2_spi_apps_clk",
  1319. .parent_hws = (const struct clk_hw*[]) {
  1320. &blsp1_qup2_spi_apps_clk_src.clkr.hw,
  1321. },
  1322. .num_parents = 1,
  1323. .ops = &clk_branch2_ops,
  1324. .flags = CLK_SET_RATE_PARENT,
  1325. }
  1326. }
  1327. };
  1328. static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
  1329. .halt_reg = 0x0401c,
  1330. .halt_check = BRANCH_HALT,
  1331. .clkr = {
  1332. .enable_reg = 0x0401c,
  1333. .enable_mask = BIT(0),
  1334. .hw.init = &(struct clk_init_data) {
  1335. .name = "gcc_blsp1_qup3_spi_apps_clk",
  1336. .parent_hws = (const struct clk_hw*[]) {
  1337. &blsp1_qup3_spi_apps_clk_src.clkr.hw,
  1338. },
  1339. .num_parents = 1,
  1340. .ops = &clk_branch2_ops,
  1341. .flags = CLK_SET_RATE_PARENT,
  1342. }
  1343. }
  1344. };
  1345. static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
  1346. .halt_reg = 0x0501c,
  1347. .halt_check = BRANCH_HALT,
  1348. .clkr = {
  1349. .enable_reg = 0x0501c,
  1350. .enable_mask = BIT(0),
  1351. .hw.init = &(struct clk_init_data) {
  1352. .name = "gcc_blsp1_qup4_spi_apps_clk",
  1353. .parent_hws = (const struct clk_hw*[]) {
  1354. &blsp1_qup4_spi_apps_clk_src.clkr.hw,
  1355. },
  1356. .num_parents = 1,
  1357. .ops = &clk_branch2_ops,
  1358. .flags = CLK_SET_RATE_PARENT,
  1359. }
  1360. }
  1361. };
  1362. static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
  1363. .halt_reg = 0x0601c,
  1364. .halt_check = BRANCH_HALT,
  1365. .clkr = {
  1366. .enable_reg = 0x0601c,
  1367. .enable_mask = BIT(0),
  1368. .hw.init = &(struct clk_init_data) {
  1369. .name = "gcc_blsp1_qup5_spi_apps_clk",
  1370. .parent_hws = (const struct clk_hw*[]) {
  1371. &blsp1_qup5_spi_apps_clk_src.clkr.hw,
  1372. },
  1373. .num_parents = 1,
  1374. .ops = &clk_branch2_ops,
  1375. .flags = CLK_SET_RATE_PARENT,
  1376. }
  1377. }
  1378. };
  1379. static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
  1380. .halt_reg = 0x0701c,
  1381. .halt_check = BRANCH_HALT,
  1382. .clkr = {
  1383. .enable_reg = 0x0701c,
  1384. .enable_mask = BIT(0),
  1385. .hw.init = &(struct clk_init_data) {
  1386. .name = "gcc_blsp1_qup6_spi_apps_clk",
  1387. .parent_hws = (const struct clk_hw*[]) {
  1388. &blsp1_qup6_spi_apps_clk_src.clkr.hw,
  1389. },
  1390. .num_parents = 1,
  1391. .ops = &clk_branch2_ops,
  1392. .flags = CLK_SET_RATE_PARENT,
  1393. }
  1394. }
  1395. };
  1396. static struct clk_branch gcc_blsp1_uart1_apps_clk = {
  1397. .halt_reg = 0x0203c,
  1398. .halt_check = BRANCH_HALT,
  1399. .clkr = {
  1400. .enable_reg = 0x0203c,
  1401. .enable_mask = BIT(0),
  1402. .hw.init = &(struct clk_init_data) {
  1403. .name = "gcc_blsp1_uart1_apps_clk",
  1404. .parent_hws = (const struct clk_hw*[]) {
  1405. &blsp1_uart1_apps_clk_src.clkr.hw,
  1406. },
  1407. .num_parents = 1,
  1408. .ops = &clk_branch2_ops,
  1409. .flags = CLK_SET_RATE_PARENT,
  1410. }
  1411. }
  1412. };
  1413. static struct clk_branch gcc_blsp1_uart2_apps_clk = {
  1414. .halt_reg = 0x0302c,
  1415. .halt_check = BRANCH_HALT,
  1416. .clkr = {
  1417. .enable_reg = 0x0302c,
  1418. .enable_mask = BIT(0),
  1419. .hw.init = &(struct clk_init_data) {
  1420. .name = "gcc_blsp1_uart2_apps_clk",
  1421. .parent_hws = (const struct clk_hw*[]) {
  1422. &blsp1_uart2_apps_clk_src.clkr.hw,
  1423. },
  1424. .num_parents = 1,
  1425. .ops = &clk_branch2_ops,
  1426. .flags = CLK_SET_RATE_PARENT,
  1427. }
  1428. }
  1429. };
  1430. static struct clk_branch gcc_camss_ahb_clk = {
  1431. .halt_reg = 0x5a014,
  1432. .halt_check = BRANCH_HALT,
  1433. .clkr = {
  1434. .enable_reg = 0x5a014,
  1435. .enable_mask = BIT(0),
  1436. .hw.init = &(struct clk_init_data) {
  1437. .name = "gcc_camss_ahb_clk",
  1438. .parent_hws = (const struct clk_hw*[]) {
  1439. &pcnoc_bfdcd_clk_src.clkr.hw,
  1440. },
  1441. .num_parents = 1,
  1442. .ops = &clk_branch2_ops,
  1443. }
  1444. }
  1445. };
  1446. static struct clk_branch gcc_camss_csi0_clk = {
  1447. .halt_reg = 0x4e03c,
  1448. .halt_check = BRANCH_HALT,
  1449. .clkr = {
  1450. .enable_reg = 0x4e03c,
  1451. .enable_mask = BIT(0),
  1452. .hw.init = &(struct clk_init_data) {
  1453. .name = "gcc_camss_csi0_clk",
  1454. .parent_hws = (const struct clk_hw*[]) {
  1455. &csi0_clk_src.clkr.hw,
  1456. },
  1457. .num_parents = 1,
  1458. .ops = &clk_branch2_ops,
  1459. .flags = CLK_SET_RATE_PARENT,
  1460. }
  1461. }
  1462. };
  1463. static struct clk_branch gcc_camss_csi0_ahb_clk = {
  1464. .halt_reg = 0x4e040,
  1465. .halt_check = BRANCH_HALT,
  1466. .clkr = {
  1467. .enable_reg = 0x4e040,
  1468. .enable_mask = BIT(0),
  1469. .hw.init = &(struct clk_init_data) {
  1470. .name = "gcc_camss_csi0_ahb_clk",
  1471. .parent_hws = (const struct clk_hw*[]) {
  1472. &camss_top_ahb_clk_src.clkr.hw,
  1473. },
  1474. .num_parents = 1,
  1475. .ops = &clk_branch2_ops,
  1476. .flags = CLK_SET_RATE_PARENT,
  1477. }
  1478. }
  1479. };
  1480. static struct clk_branch gcc_camss_csi0phy_clk = {
  1481. .halt_reg = 0x4e048,
  1482. .halt_check = BRANCH_HALT,
  1483. .clkr = {
  1484. .enable_reg = 0x4e048,
  1485. .enable_mask = BIT(0),
  1486. .hw.init = &(struct clk_init_data) {
  1487. .name = "gcc_camss_csi0phy_clk",
  1488. .parent_hws = (const struct clk_hw*[]) {
  1489. &csi0_clk_src.clkr.hw,
  1490. },
  1491. .num_parents = 1,
  1492. .ops = &clk_branch2_ops,
  1493. .flags = CLK_SET_RATE_PARENT,
  1494. }
  1495. }
  1496. };
  1497. static struct clk_branch gcc_camss_csi0phytimer_clk = {
  1498. .halt_reg = 0x4e01c,
  1499. .halt_check = BRANCH_HALT,
  1500. .clkr = {
  1501. .enable_reg = 0x4e01c,
  1502. .enable_mask = BIT(0),
  1503. .hw.init = &(struct clk_init_data) {
  1504. .name = "gcc_camss_csi0phytimer_clk",
  1505. .parent_hws = (const struct clk_hw*[]) {
  1506. &csi0phytimer_clk_src.clkr.hw,
  1507. },
  1508. .num_parents = 1,
  1509. .ops = &clk_branch2_ops,
  1510. .flags = CLK_SET_RATE_PARENT,
  1511. }
  1512. }
  1513. };
  1514. static struct clk_branch gcc_camss_csi0pix_clk = {
  1515. .halt_reg = 0x4e058,
  1516. .halt_check = BRANCH_HALT,
  1517. .clkr = {
  1518. .enable_reg = 0x4e058,
  1519. .enable_mask = BIT(0),
  1520. .hw.init = &(struct clk_init_data) {
  1521. .name = "gcc_camss_csi0pix_clk",
  1522. .parent_hws = (const struct clk_hw*[]) {
  1523. &csi0_clk_src.clkr.hw,
  1524. },
  1525. .num_parents = 1,
  1526. .ops = &clk_branch2_ops,
  1527. .flags = CLK_SET_RATE_PARENT,
  1528. }
  1529. }
  1530. };
  1531. static struct clk_branch gcc_camss_csi0rdi_clk = {
  1532. .halt_reg = 0x4e050,
  1533. .halt_check = BRANCH_HALT,
  1534. .clkr = {
  1535. .enable_reg = 0x4e050,
  1536. .enable_mask = BIT(0),
  1537. .hw.init = &(struct clk_init_data) {
  1538. .name = "gcc_camss_csi0rdi_clk",
  1539. .parent_hws = (const struct clk_hw*[]) {
  1540. &csi0_clk_src.clkr.hw,
  1541. },
  1542. .num_parents = 1,
  1543. .ops = &clk_branch2_ops,
  1544. .flags = CLK_SET_RATE_PARENT,
  1545. }
  1546. }
  1547. };
  1548. static struct clk_branch gcc_camss_csi1_clk = {
  1549. .halt_reg = 0x4f03c,
  1550. .halt_check = BRANCH_HALT,
  1551. .clkr = {
  1552. .enable_reg = 0x4f03c,
  1553. .enable_mask = BIT(0),
  1554. .hw.init = &(struct clk_init_data) {
  1555. .name = "gcc_camss_csi1_clk",
  1556. .parent_hws = (const struct clk_hw*[]) {
  1557. &csi1_clk_src.clkr.hw,
  1558. },
  1559. .num_parents = 1,
  1560. .ops = &clk_branch2_ops,
  1561. .flags = CLK_SET_RATE_PARENT,
  1562. }
  1563. }
  1564. };
  1565. static struct clk_branch gcc_camss_csi1_ahb_clk = {
  1566. .halt_reg = 0x4f040,
  1567. .halt_check = BRANCH_HALT,
  1568. .clkr = {
  1569. .enable_reg = 0x4f040,
  1570. .enable_mask = BIT(0),
  1571. .hw.init = &(struct clk_init_data) {
  1572. .name = "gcc_camss_csi1_ahb_clk",
  1573. .parent_hws = (const struct clk_hw*[]) {
  1574. &camss_top_ahb_clk_src.clkr.hw,
  1575. },
  1576. .num_parents = 1,
  1577. .ops = &clk_branch2_ops,
  1578. .flags = CLK_SET_RATE_PARENT,
  1579. }
  1580. }
  1581. };
  1582. static struct clk_branch gcc_camss_csi1phy_clk = {
  1583. .halt_reg = 0x4f048,
  1584. .halt_check = BRANCH_HALT,
  1585. .clkr = {
  1586. .enable_reg = 0x4f048,
  1587. .enable_mask = BIT(0),
  1588. .hw.init = &(struct clk_init_data) {
  1589. .name = "gcc_camss_csi1phy_clk",
  1590. .parent_hws = (const struct clk_hw*[]) {
  1591. &csi1_clk_src.clkr.hw,
  1592. },
  1593. .num_parents = 1,
  1594. .ops = &clk_branch2_ops,
  1595. .flags = CLK_SET_RATE_PARENT,
  1596. }
  1597. }
  1598. };
  1599. static struct clk_branch gcc_camss_csi1pix_clk = {
  1600. .halt_reg = 0x4f058,
  1601. .halt_check = BRANCH_HALT,
  1602. .clkr = {
  1603. .enable_reg = 0x4f058,
  1604. .enable_mask = BIT(0),
  1605. .hw.init = &(struct clk_init_data) {
  1606. .name = "gcc_camss_csi1pix_clk",
  1607. .parent_hws = (const struct clk_hw*[]) {
  1608. &csi1_clk_src.clkr.hw,
  1609. },
  1610. .num_parents = 1,
  1611. .ops = &clk_branch2_ops,
  1612. .flags = CLK_SET_RATE_PARENT,
  1613. }
  1614. }
  1615. };
  1616. static struct clk_branch gcc_camss_csi1rdi_clk = {
  1617. .halt_reg = 0x4f050,
  1618. .halt_check = BRANCH_HALT,
  1619. .clkr = {
  1620. .enable_reg = 0x4f050,
  1621. .enable_mask = BIT(0),
  1622. .hw.init = &(struct clk_init_data) {
  1623. .name = "gcc_camss_csi1rdi_clk",
  1624. .parent_hws = (const struct clk_hw*[]) {
  1625. &csi1_clk_src.clkr.hw,
  1626. },
  1627. .num_parents = 1,
  1628. .ops = &clk_branch2_ops,
  1629. .flags = CLK_SET_RATE_PARENT,
  1630. }
  1631. }
  1632. };
  1633. static struct clk_branch gcc_camss_csi_vfe0_clk = {
  1634. .halt_reg = 0x58050,
  1635. .halt_check = BRANCH_HALT,
  1636. .clkr = {
  1637. .enable_reg = 0x58050,
  1638. .enable_mask = BIT(0),
  1639. .hw.init = &(struct clk_init_data) {
  1640. .name = "gcc_camss_csi_vfe0_clk",
  1641. .parent_hws = (const struct clk_hw*[]) {
  1642. &vfe0_clk_src.clkr.hw,
  1643. },
  1644. .num_parents = 1,
  1645. .ops = &clk_branch2_ops,
  1646. .flags = CLK_SET_RATE_PARENT,
  1647. }
  1648. }
  1649. };
  1650. static struct clk_branch gcc_camss_gp0_clk = {
  1651. .halt_reg = 0x54018,
  1652. .halt_check = BRANCH_HALT,
  1653. .clkr = {
  1654. .enable_reg = 0x54018,
  1655. .enable_mask = BIT(0),
  1656. .hw.init = &(struct clk_init_data) {
  1657. .name = "gcc_camss_gp0_clk",
  1658. .parent_hws = (const struct clk_hw*[]) {
  1659. &camss_gp0_clk_src.clkr.hw,
  1660. },
  1661. .num_parents = 1,
  1662. .ops = &clk_branch2_ops,
  1663. .flags = CLK_SET_RATE_PARENT,
  1664. }
  1665. }
  1666. };
  1667. static struct clk_branch gcc_camss_gp1_clk = {
  1668. .halt_reg = 0x55018,
  1669. .halt_check = BRANCH_HALT,
  1670. .clkr = {
  1671. .enable_reg = 0x55018,
  1672. .enable_mask = BIT(0),
  1673. .hw.init = &(struct clk_init_data) {
  1674. .name = "gcc_camss_gp1_clk",
  1675. .parent_hws = (const struct clk_hw*[]) {
  1676. &camss_gp1_clk_src.clkr.hw,
  1677. },
  1678. .num_parents = 1,
  1679. .ops = &clk_branch2_ops,
  1680. .flags = CLK_SET_RATE_PARENT,
  1681. }
  1682. }
  1683. };
  1684. static struct clk_branch gcc_camss_ispif_ahb_clk = {
  1685. .halt_reg = 0x50004,
  1686. .halt_check = BRANCH_HALT,
  1687. .clkr = {
  1688. .enable_reg = 0x50004,
  1689. .enable_mask = BIT(0),
  1690. .hw.init = &(struct clk_init_data) {
  1691. .name = "gcc_camss_ispif_ahb_clk",
  1692. .parent_hws = (const struct clk_hw*[]) {
  1693. &camss_top_ahb_clk_src.clkr.hw,
  1694. },
  1695. .num_parents = 1,
  1696. .ops = &clk_branch2_ops,
  1697. .flags = CLK_SET_RATE_PARENT,
  1698. }
  1699. }
  1700. };
  1701. static struct clk_branch gcc_camss_mclk0_clk = {
  1702. .halt_reg = 0x52018,
  1703. .halt_check = BRANCH_HALT,
  1704. .clkr = {
  1705. .enable_reg = 0x52018,
  1706. .enable_mask = BIT(0),
  1707. .hw.init = &(struct clk_init_data) {
  1708. .name = "gcc_camss_mclk0_clk",
  1709. .parent_hws = (const struct clk_hw*[]) {
  1710. &mclk0_clk_src.clkr.hw,
  1711. },
  1712. .num_parents = 1,
  1713. .ops = &clk_branch2_ops,
  1714. .flags = CLK_SET_RATE_PARENT,
  1715. }
  1716. }
  1717. };
  1718. static struct clk_branch gcc_camss_mclk1_clk = {
  1719. .halt_reg = 0x53018,
  1720. .halt_check = BRANCH_HALT,
  1721. .clkr = {
  1722. .enable_reg = 0x53018,
  1723. .enable_mask = BIT(0),
  1724. .hw.init = &(struct clk_init_data) {
  1725. .name = "gcc_camss_mclk1_clk",
  1726. .parent_hws = (const struct clk_hw*[]) {
  1727. &mclk1_clk_src.clkr.hw,
  1728. },
  1729. .num_parents = 1,
  1730. .ops = &clk_branch2_ops,
  1731. .flags = CLK_SET_RATE_PARENT,
  1732. }
  1733. }
  1734. };
  1735. static struct clk_branch gcc_camss_top_ahb_clk = {
  1736. .halt_reg = 0x56004,
  1737. .halt_check = BRANCH_HALT,
  1738. .clkr = {
  1739. .enable_reg = 0x56004,
  1740. .enable_mask = BIT(0),
  1741. .hw.init = &(struct clk_init_data) {
  1742. .name = "gcc_camss_top_ahb_clk",
  1743. .parent_hws = (const struct clk_hw*[]) {
  1744. &camss_top_ahb_clk_src.clkr.hw,
  1745. },
  1746. .num_parents = 1,
  1747. .ops = &clk_branch2_ops,
  1748. .flags = CLK_SET_RATE_PARENT,
  1749. }
  1750. }
  1751. };
  1752. static struct clk_branch gcc_camss_vfe0_clk = {
  1753. .halt_reg = 0x58038,
  1754. .halt_check = BRANCH_HALT,
  1755. .clkr = {
  1756. .enable_reg = 0x58038,
  1757. .enable_mask = BIT(0),
  1758. .hw.init = &(struct clk_init_data) {
  1759. .name = "gcc_camss_vfe0_clk",
  1760. .parent_hws = (const struct clk_hw*[]) {
  1761. &vfe0_clk_src.clkr.hw,
  1762. },
  1763. .num_parents = 1,
  1764. .ops = &clk_branch2_ops,
  1765. .flags = CLK_SET_RATE_PARENT,
  1766. }
  1767. }
  1768. };
  1769. static struct clk_branch gcc_camss_vfe_ahb_clk = {
  1770. .halt_reg = 0x58044,
  1771. .halt_check = BRANCH_HALT,
  1772. .clkr = {
  1773. .enable_reg = 0x58044,
  1774. .enable_mask = BIT(0),
  1775. .hw.init = &(struct clk_init_data) {
  1776. .name = "gcc_camss_vfe_ahb_clk",
  1777. .parent_hws = (const struct clk_hw*[]) {
  1778. &camss_top_ahb_clk_src.clkr.hw,
  1779. },
  1780. .num_parents = 1,
  1781. .ops = &clk_branch2_ops,
  1782. .flags = CLK_SET_RATE_PARENT,
  1783. }
  1784. }
  1785. };
  1786. static struct clk_branch gcc_camss_vfe_axi_clk = {
  1787. .halt_reg = 0x58048,
  1788. .halt_check = BRANCH_HALT,
  1789. .clkr = {
  1790. .enable_reg = 0x58048,
  1791. .enable_mask = BIT(0),
  1792. .hw.init = &(struct clk_init_data) {
  1793. .name = "gcc_camss_vfe_axi_clk",
  1794. .parent_hws = (const struct clk_hw*[]) {
  1795. &system_noc_bfdcd_clk_src.clkr.hw,
  1796. },
  1797. .num_parents = 1,
  1798. .ops = &clk_branch2_ops,
  1799. }
  1800. }
  1801. };
  1802. static struct clk_branch gcc_gp1_clk = {
  1803. .halt_reg = 0x08000,
  1804. .halt_check = BRANCH_HALT,
  1805. .clkr = {
  1806. .enable_reg = 0x08000,
  1807. .enable_mask = BIT(0),
  1808. .hw.init = &(struct clk_init_data) {
  1809. .name = "gcc_gp1_clk",
  1810. .parent_hws = (const struct clk_hw*[]) {
  1811. &gp1_clk_src.clkr.hw,
  1812. },
  1813. .num_parents = 1,
  1814. .ops = &clk_branch2_ops,
  1815. .flags = CLK_SET_RATE_PARENT,
  1816. }
  1817. }
  1818. };
  1819. static struct clk_branch gcc_gp2_clk = {
  1820. .halt_reg = 0x09000,
  1821. .halt_check = BRANCH_HALT,
  1822. .clkr = {
  1823. .enable_reg = 0x09000,
  1824. .enable_mask = BIT(0),
  1825. .hw.init = &(struct clk_init_data) {
  1826. .name = "gcc_gp2_clk",
  1827. .parent_hws = (const struct clk_hw*[]) {
  1828. &gp2_clk_src.clkr.hw,
  1829. },
  1830. .num_parents = 1,
  1831. .ops = &clk_branch2_ops,
  1832. .flags = CLK_SET_RATE_PARENT,
  1833. }
  1834. }
  1835. };
  1836. static struct clk_branch gcc_gp3_clk = {
  1837. .halt_reg = 0x0a000,
  1838. .halt_check = BRANCH_HALT,
  1839. .clkr = {
  1840. .enable_reg = 0x0a000,
  1841. .enable_mask = BIT(0),
  1842. .hw.init = &(struct clk_init_data) {
  1843. .name = "gcc_gp3_clk",
  1844. .parent_hws = (const struct clk_hw*[]) {
  1845. &gp3_clk_src.clkr.hw,
  1846. },
  1847. .num_parents = 1,
  1848. .ops = &clk_branch2_ops,
  1849. .flags = CLK_SET_RATE_PARENT,
  1850. }
  1851. }
  1852. };
  1853. static struct clk_branch gcc_mdss_ahb_clk = {
  1854. .halt_reg = 0x4d07c,
  1855. .halt_check = BRANCH_HALT,
  1856. .clkr = {
  1857. .enable_reg = 0x4d07c,
  1858. .enable_mask = BIT(0),
  1859. .hw.init = &(struct clk_init_data) {
  1860. .name = "gcc_mdss_ahb_clk",
  1861. .parent_hws = (const struct clk_hw*[]) {
  1862. &pcnoc_bfdcd_clk_src.clkr.hw,
  1863. },
  1864. .num_parents = 1,
  1865. .ops = &clk_branch2_ops,
  1866. }
  1867. }
  1868. };
  1869. static struct clk_branch gcc_mdss_axi_clk = {
  1870. .halt_reg = 0x4d080,
  1871. .halt_check = BRANCH_HALT,
  1872. .clkr = {
  1873. .enable_reg = 0x4d080,
  1874. .enable_mask = BIT(0),
  1875. .hw.init = &(struct clk_init_data) {
  1876. .name = "gcc_mdss_axi_clk",
  1877. .parent_hws = (const struct clk_hw*[]) {
  1878. &system_noc_bfdcd_clk_src.clkr.hw,
  1879. },
  1880. .num_parents = 1,
  1881. .ops = &clk_branch2_ops,
  1882. }
  1883. }
  1884. };
  1885. static struct clk_branch gcc_mdss_byte0_clk = {
  1886. .halt_reg = 0x4d094,
  1887. .halt_check = BRANCH_HALT,
  1888. .clkr = {
  1889. .enable_reg = 0x4d094,
  1890. .enable_mask = BIT(0),
  1891. .hw.init = &(struct clk_init_data) {
  1892. .name = "gcc_mdss_byte0_clk",
  1893. .parent_hws = (const struct clk_hw*[]) {
  1894. &byte0_clk_src.clkr.hw,
  1895. },
  1896. .num_parents = 1,
  1897. .ops = &clk_branch2_ops,
  1898. .flags = CLK_SET_RATE_PARENT,
  1899. }
  1900. }
  1901. };
  1902. static struct clk_branch gcc_mdss_esc0_clk = {
  1903. .halt_reg = 0x4d098,
  1904. .halt_check = BRANCH_HALT,
  1905. .clkr = {
  1906. .enable_reg = 0x4d098,
  1907. .enable_mask = BIT(0),
  1908. .hw.init = &(struct clk_init_data) {
  1909. .name = "gcc_mdss_esc0_clk",
  1910. .parent_hws = (const struct clk_hw*[]) {
  1911. &esc0_clk_src.clkr.hw,
  1912. },
  1913. .num_parents = 1,
  1914. .ops = &clk_branch2_ops,
  1915. .flags = CLK_SET_RATE_PARENT,
  1916. }
  1917. }
  1918. };
  1919. static struct clk_branch gcc_mdss_mdp_clk = {
  1920. .halt_reg = 0x4d088,
  1921. .halt_check = BRANCH_HALT,
  1922. .clkr = {
  1923. .enable_reg = 0x4d088,
  1924. .enable_mask = BIT(0),
  1925. .hw.init = &(struct clk_init_data) {
  1926. .name = "gcc_mdss_mdp_clk",
  1927. .parent_hws = (const struct clk_hw*[]) {
  1928. &mdp_clk_src.clkr.hw,
  1929. },
  1930. .num_parents = 1,
  1931. .ops = &clk_branch2_ops,
  1932. .flags = CLK_SET_RATE_PARENT,
  1933. }
  1934. }
  1935. };
  1936. static struct clk_branch gcc_mdss_pclk0_clk = {
  1937. .halt_reg = 0x4d084,
  1938. .halt_check = BRANCH_HALT,
  1939. .clkr = {
  1940. .enable_reg = 0x4d084,
  1941. .enable_mask = BIT(0),
  1942. .hw.init = &(struct clk_init_data) {
  1943. .name = "gcc_mdss_pclk0_clk",
  1944. .parent_hws = (const struct clk_hw*[]) {
  1945. &pclk0_clk_src.clkr.hw,
  1946. },
  1947. .num_parents = 1,
  1948. .ops = &clk_branch2_ops,
  1949. .flags = CLK_SET_RATE_PARENT,
  1950. }
  1951. }
  1952. };
  1953. static struct clk_branch gcc_mdss_vsync_clk = {
  1954. .halt_reg = 0x4d090,
  1955. .halt_check = BRANCH_HALT,
  1956. .clkr = {
  1957. .enable_reg = 0x4d090,
  1958. .enable_mask = BIT(0),
  1959. .hw.init = &(struct clk_init_data) {
  1960. .name = "gcc_mdss_vsync_clk",
  1961. .parent_hws = (const struct clk_hw*[]) {
  1962. &vsync_clk_src.clkr.hw,
  1963. },
  1964. .num_parents = 1,
  1965. .ops = &clk_branch2_ops,
  1966. .flags = CLK_SET_RATE_PARENT,
  1967. }
  1968. }
  1969. };
  1970. static struct clk_branch gcc_mss_cfg_ahb_clk = {
  1971. .halt_reg = 0x49000,
  1972. .halt_check = BRANCH_HALT,
  1973. .clkr = {
  1974. .enable_reg = 0x49000,
  1975. .enable_mask = BIT(0),
  1976. .hw.init = &(struct clk_init_data) {
  1977. .name = "gcc_mss_cfg_ahb_clk",
  1978. .parent_hws = (const struct clk_hw*[]) {
  1979. &pcnoc_bfdcd_clk_src.clkr.hw,
  1980. },
  1981. .num_parents = 1,
  1982. .ops = &clk_branch2_ops,
  1983. }
  1984. }
  1985. };
  1986. static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
  1987. .halt_reg = 0x49004,
  1988. .halt_check = BRANCH_HALT,
  1989. .clkr = {
  1990. .enable_reg = 0x49004,
  1991. .enable_mask = BIT(0),
  1992. .hw.init = &(struct clk_init_data) {
  1993. .name = "gcc_mss_q6_bimc_axi_clk",
  1994. .parent_hws = (const struct clk_hw*[]) {
  1995. &bimc_ddr_clk_src.clkr.hw,
  1996. },
  1997. .num_parents = 1,
  1998. .ops = &clk_branch2_ops,
  1999. }
  2000. }
  2001. };
  2002. static struct clk_branch gcc_oxili_ahb_clk = {
  2003. .halt_reg = 0x59028,
  2004. .halt_check = BRANCH_HALT,
  2005. .clkr = {
  2006. .enable_reg = 0x59028,
  2007. .enable_mask = BIT(0),
  2008. .hw.init = &(struct clk_init_data) {
  2009. .name = "gcc_oxili_ahb_clk",
  2010. .parent_hws = (const struct clk_hw*[]) {
  2011. &pcnoc_bfdcd_clk_src.clkr.hw,
  2012. },
  2013. .num_parents = 1,
  2014. .ops = &clk_branch2_ops,
  2015. }
  2016. }
  2017. };
  2018. static struct clk_branch gcc_oxili_gfx3d_clk = {
  2019. .halt_reg = 0x59020,
  2020. .halt_check = BRANCH_HALT,
  2021. .clkr = {
  2022. .enable_reg = 0x59020,
  2023. .enable_mask = BIT(0),
  2024. .hw.init = &(struct clk_init_data) {
  2025. .name = "gcc_oxili_gfx3d_clk",
  2026. .parent_hws = (const struct clk_hw*[]) {
  2027. &gfx3d_clk_src.clkr.hw,
  2028. },
  2029. .num_parents = 1,
  2030. .ops = &clk_branch2_ops,
  2031. .flags = CLK_SET_RATE_PARENT,
  2032. }
  2033. }
  2034. };
  2035. static struct clk_branch gcc_pdm2_clk = {
  2036. .halt_reg = 0x4400c,
  2037. .halt_check = BRANCH_HALT,
  2038. .clkr = {
  2039. .enable_reg = 0x4400c,
  2040. .enable_mask = BIT(0),
  2041. .hw.init = &(struct clk_init_data) {
  2042. .name = "gcc_pdm2_clk",
  2043. .parent_hws = (const struct clk_hw*[]) {
  2044. &pdm2_clk_src.clkr.hw,
  2045. },
  2046. .num_parents = 1,
  2047. .ops = &clk_branch2_ops,
  2048. .flags = CLK_SET_RATE_PARENT,
  2049. }
  2050. }
  2051. };
  2052. static struct clk_branch gcc_pdm_ahb_clk = {
  2053. .halt_reg = 0x44004,
  2054. .halt_check = BRANCH_HALT,
  2055. .clkr = {
  2056. .enable_reg = 0x44004,
  2057. .enable_mask = BIT(0),
  2058. .hw.init = &(struct clk_init_data) {
  2059. .name = "gcc_pdm_ahb_clk",
  2060. .parent_hws = (const struct clk_hw*[]) {
  2061. &pcnoc_bfdcd_clk_src.clkr.hw,
  2062. },
  2063. .num_parents = 1,
  2064. .ops = &clk_branch2_ops,
  2065. }
  2066. }
  2067. };
  2068. static struct clk_branch gcc_sdcc1_ahb_clk = {
  2069. .halt_reg = 0x4201c,
  2070. .halt_check = BRANCH_HALT,
  2071. .clkr = {
  2072. .enable_reg = 0x4201c,
  2073. .enable_mask = BIT(0),
  2074. .hw.init = &(struct clk_init_data) {
  2075. .name = "gcc_sdcc1_ahb_clk",
  2076. .parent_hws = (const struct clk_hw*[]) {
  2077. &pcnoc_bfdcd_clk_src.clkr.hw,
  2078. },
  2079. .num_parents = 1,
  2080. .ops = &clk_branch2_ops,
  2081. }
  2082. }
  2083. };
  2084. static struct clk_branch gcc_sdcc1_apps_clk = {
  2085. .halt_reg = 0x42018,
  2086. .halt_check = BRANCH_HALT,
  2087. .clkr = {
  2088. .enable_reg = 0x42018,
  2089. .enable_mask = BIT(0),
  2090. .hw.init = &(struct clk_init_data) {
  2091. .name = "gcc_sdcc1_apps_clk",
  2092. .parent_hws = (const struct clk_hw*[]) {
  2093. &sdcc1_apps_clk_src.clkr.hw,
  2094. },
  2095. .num_parents = 1,
  2096. .ops = &clk_branch2_ops,
  2097. .flags = CLK_SET_RATE_PARENT,
  2098. }
  2099. }
  2100. };
  2101. static struct clk_branch gcc_sdcc2_ahb_clk = {
  2102. .halt_reg = 0x4301c,
  2103. .halt_check = BRANCH_HALT,
  2104. .clkr = {
  2105. .enable_reg = 0x4301c,
  2106. .enable_mask = BIT(0),
  2107. .hw.init = &(struct clk_init_data) {
  2108. .name = "gcc_sdcc2_ahb_clk",
  2109. .parent_hws = (const struct clk_hw*[]) {
  2110. &pcnoc_bfdcd_clk_src.clkr.hw,
  2111. },
  2112. .num_parents = 1,
  2113. .ops = &clk_branch2_ops,
  2114. }
  2115. }
  2116. };
  2117. static struct clk_branch gcc_sdcc2_apps_clk = {
  2118. .halt_reg = 0x43018,
  2119. .halt_check = BRANCH_HALT,
  2120. .clkr = {
  2121. .enable_reg = 0x43018,
  2122. .enable_mask = BIT(0),
  2123. .hw.init = &(struct clk_init_data) {
  2124. .name = "gcc_sdcc2_apps_clk",
  2125. .parent_hws = (const struct clk_hw*[]) {
  2126. &sdcc2_apps_clk_src.clkr.hw,
  2127. },
  2128. .num_parents = 1,
  2129. .ops = &clk_branch2_ops,
  2130. .flags = CLK_SET_RATE_PARENT,
  2131. }
  2132. }
  2133. };
  2134. static struct clk_branch gcc_usb2a_phy_sleep_clk = {
  2135. .halt_reg = 0x4102c,
  2136. .halt_check = BRANCH_HALT,
  2137. .clkr = {
  2138. .enable_reg = 0x4102c,
  2139. .enable_mask = BIT(0),
  2140. .hw.init = &(struct clk_init_data) {
  2141. .name = "gcc_usb2a_phy_sleep_clk",
  2142. .parent_data = gcc_sleep_clk_data,
  2143. .num_parents = ARRAY_SIZE(gcc_sleep_clk_data),
  2144. .ops = &clk_branch2_ops,
  2145. }
  2146. }
  2147. };
  2148. static struct clk_branch gcc_usb_hs_ahb_clk = {
  2149. .halt_reg = 0x41008,
  2150. .halt_check = BRANCH_HALT,
  2151. .clkr = {
  2152. .enable_reg = 0x41008,
  2153. .enable_mask = BIT(0),
  2154. .hw.init = &(struct clk_init_data) {
  2155. .name = "gcc_usb_hs_ahb_clk",
  2156. .parent_hws = (const struct clk_hw*[]) {
  2157. &pcnoc_bfdcd_clk_src.clkr.hw,
  2158. },
  2159. .num_parents = 1,
  2160. .ops = &clk_branch2_ops,
  2161. }
  2162. }
  2163. };
  2164. static struct clk_branch gcc_usb_hs_phy_cfg_ahb_clk = {
  2165. .halt_reg = 0x41030,
  2166. .halt_check = BRANCH_HALT,
  2167. .clkr = {
  2168. .enable_reg = 0x41030,
  2169. .enable_mask = BIT(0),
  2170. .hw.init = &(struct clk_init_data) {
  2171. .name = "gcc_usb_hs_phy_cfg_ahb_clk",
  2172. .parent_hws = (const struct clk_hw*[]) {
  2173. &pcnoc_bfdcd_clk_src.clkr.hw,
  2174. },
  2175. .num_parents = 1,
  2176. .ops = &clk_branch2_ops,
  2177. }
  2178. }
  2179. };
  2180. static struct clk_branch gcc_usb_hs_system_clk = {
  2181. .halt_reg = 0x41004,
  2182. .halt_check = BRANCH_HALT,
  2183. .clkr = {
  2184. .enable_reg = 0x41004,
  2185. .enable_mask = BIT(0),
  2186. .hw.init = &(struct clk_init_data) {
  2187. .name = "gcc_usb_hs_system_clk",
  2188. .parent_hws = (const struct clk_hw*[]) {
  2189. &usb_hs_system_clk_src.clkr.hw,
  2190. },
  2191. .num_parents = 1,
  2192. .ops = &clk_branch2_ops,
  2193. .flags = CLK_SET_RATE_PARENT,
  2194. }
  2195. }
  2196. };
  2197. static struct clk_branch gcc_venus0_ahb_clk = {
  2198. .halt_reg = 0x4c020,
  2199. .halt_check = BRANCH_HALT,
  2200. .clkr = {
  2201. .enable_reg = 0x4c020,
  2202. .enable_mask = BIT(0),
  2203. .hw.init = &(struct clk_init_data) {
  2204. .name = "gcc_venus0_ahb_clk",
  2205. .parent_hws = (const struct clk_hw*[]) {
  2206. &pcnoc_bfdcd_clk_src.clkr.hw,
  2207. },
  2208. .num_parents = 1,
  2209. .ops = &clk_branch2_ops,
  2210. }
  2211. }
  2212. };
  2213. static struct clk_branch gcc_venus0_axi_clk = {
  2214. .halt_reg = 0x4c024,
  2215. .halt_check = BRANCH_HALT,
  2216. .clkr = {
  2217. .enable_reg = 0x4c024,
  2218. .enable_mask = BIT(0),
  2219. .hw.init = &(struct clk_init_data) {
  2220. .name = "gcc_venus0_axi_clk",
  2221. .parent_hws = (const struct clk_hw*[]) {
  2222. &system_noc_bfdcd_clk_src.clkr.hw,
  2223. },
  2224. .num_parents = 1,
  2225. .ops = &clk_branch2_ops,
  2226. }
  2227. }
  2228. };
  2229. static struct clk_branch gcc_venus0_core0_vcodec0_clk = {
  2230. .halt_reg = 0x4c02c,
  2231. .halt_check = BRANCH_HALT,
  2232. .clkr = {
  2233. .enable_reg = 0x4c02c,
  2234. .enable_mask = BIT(0),
  2235. .hw.init = &(struct clk_init_data) {
  2236. .name = "gcc_venus0_core0_vcodec0_clk",
  2237. .parent_hws = (const struct clk_hw*[]) {
  2238. &vcodec0_clk_src.clkr.hw,
  2239. },
  2240. .num_parents = 1,
  2241. .ops = &clk_branch2_ops,
  2242. .flags = CLK_SET_RATE_PARENT,
  2243. }
  2244. }
  2245. };
  2246. static struct clk_branch gcc_venus0_vcodec0_clk = {
  2247. .halt_reg = 0x4c01c,
  2248. .halt_check = BRANCH_HALT,
  2249. .clkr = {
  2250. .enable_reg = 0x4c01c,
  2251. .enable_mask = BIT(0),
  2252. .hw.init = &(struct clk_init_data) {
  2253. .name = "gcc_venus0_vcodec0_clk",
  2254. .parent_hws = (const struct clk_hw*[]) {
  2255. &vcodec0_clk_src.clkr.hw,
  2256. },
  2257. .num_parents = 1,
  2258. .ops = &clk_branch2_ops,
  2259. .flags = CLK_SET_RATE_PARENT,
  2260. }
  2261. }
  2262. };
  2263. static struct gdsc mdss_gdsc = {
  2264. .gdscr = 0x4d078,
  2265. .cxcs = (unsigned int []) { 0x4d080, 0x4d088 },
  2266. .cxc_count = 2,
  2267. .pd = {
  2268. .name = "mdss_gdsc",
  2269. },
  2270. .pwrsts = PWRSTS_OFF_ON,
  2271. };
  2272. static struct gdsc oxili_gdsc = {
  2273. .gdscr = 0x5901c,
  2274. .cxcs = (unsigned int []) { 0x59020 },
  2275. .cxc_count = 1,
  2276. .pd = {
  2277. .name = "oxili_gdsc",
  2278. },
  2279. .pwrsts = PWRSTS_OFF_ON,
  2280. };
  2281. static struct gdsc venus_gdsc = {
  2282. .gdscr = 0x4c018,
  2283. .cxcs = (unsigned int []) { 0x4c024, 0x4c01c },
  2284. .cxc_count = 2,
  2285. .pd = {
  2286. .name = "venus_gdsc",
  2287. },
  2288. .pwrsts = PWRSTS_OFF_ON,
  2289. };
  2290. static struct gdsc venus_core0_gdsc = {
  2291. .gdscr = 0x4c028,
  2292. .cxcs = (unsigned int []) { 0x4c02c },
  2293. .cxc_count = 1,
  2294. .pd = {
  2295. .name = "venus_core0_gdsc",
  2296. },
  2297. .flags = HW_CTRL,
  2298. .pwrsts = PWRSTS_OFF_ON,
  2299. };
  2300. static struct gdsc vfe_gdsc = {
  2301. .gdscr = 0x58034,
  2302. .cxcs = (unsigned int []) { 0x58038, 0x58048, 0x58050 },
  2303. .cxc_count = 3,
  2304. .pd = {
  2305. .name = "vfe_gdsc",
  2306. },
  2307. .pwrsts = PWRSTS_OFF_ON,
  2308. };
  2309. static struct clk_regmap *gcc_msm8909_clocks[] = {
  2310. [GPLL0_EARLY] = &gpll0_early.clkr,
  2311. [GPLL0] = &gpll0.clkr,
  2312. [GPLL1] = &gpll1.clkr,
  2313. [GPLL1_VOTE] = &gpll1_vote,
  2314. [GPLL2_EARLY] = &gpll2_early.clkr,
  2315. [GPLL2] = &gpll2.clkr,
  2316. [BIMC_PLL_EARLY] = &bimc_pll_early.clkr,
  2317. [BIMC_PLL] = &bimc_pll.clkr,
  2318. [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
  2319. [BIMC_DDR_CLK_SRC] = &bimc_ddr_clk_src.clkr,
  2320. [BIMC_GPU_CLK_SRC] = &bimc_gpu_clk_src.clkr,
  2321. [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
  2322. [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
  2323. [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
  2324. [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
  2325. [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
  2326. [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
  2327. [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
  2328. [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
  2329. [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
  2330. [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
  2331. [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
  2332. [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
  2333. [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
  2334. [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
  2335. [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
  2336. [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
  2337. [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
  2338. [CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr,
  2339. [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
  2340. [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
  2341. [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
  2342. [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
  2343. [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
  2344. [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
  2345. [GP1_CLK_SRC] = &gp1_clk_src.clkr,
  2346. [GP2_CLK_SRC] = &gp2_clk_src.clkr,
  2347. [GP3_CLK_SRC] = &gp3_clk_src.clkr,
  2348. [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
  2349. [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
  2350. [MDP_CLK_SRC] = &mdp_clk_src.clkr,
  2351. [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
  2352. [PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
  2353. [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
  2354. [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
  2355. [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
  2356. [SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
  2357. [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
  2358. [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
  2359. [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
  2360. [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
  2361. [GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
  2362. [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
  2363. [GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,
  2364. [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
  2365. [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
  2366. [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
  2367. [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
  2368. [GCC_GFX_TBU_CLK] = &gcc_gfx_tbu_clk.clkr,
  2369. [GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,
  2370. [GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,
  2371. [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
  2372. [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
  2373. [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
  2374. [GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
  2375. [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
  2376. [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
  2377. [GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
  2378. [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
  2379. [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
  2380. [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
  2381. [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
  2382. [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
  2383. [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
  2384. [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
  2385. [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
  2386. [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
  2387. [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
  2388. [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
  2389. [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
  2390. [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
  2391. [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
  2392. [GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
  2393. [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
  2394. [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
  2395. [GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
  2396. [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
  2397. [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
  2398. [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
  2399. [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
  2400. [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
  2401. [GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
  2402. [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
  2403. [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
  2404. [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
  2405. [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
  2406. [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
  2407. [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
  2408. [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
  2409. [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
  2410. [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
  2411. [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
  2412. [GCC_CAMSS_VFE_AHB_CLK] = &gcc_camss_vfe_ahb_clk.clkr,
  2413. [GCC_CAMSS_VFE_AXI_CLK] = &gcc_camss_vfe_axi_clk.clkr,
  2414. [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
  2415. [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
  2416. [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
  2417. [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
  2418. [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
  2419. [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
  2420. [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
  2421. [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
  2422. [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
  2423. [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
  2424. [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
  2425. [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
  2426. [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
  2427. [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
  2428. [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
  2429. [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
  2430. [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
  2431. [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
  2432. [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
  2433. [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
  2434. [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
  2435. [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
  2436. [GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,
  2437. [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
  2438. [GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
  2439. [GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
  2440. [GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,
  2441. [GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
  2442. };
  2443. static struct gdsc *gcc_msm8909_gdscs[] = {
  2444. [MDSS_GDSC] = &mdss_gdsc,
  2445. [OXILI_GDSC] = &oxili_gdsc,
  2446. [VENUS_GDSC] = &venus_gdsc,
  2447. [VENUS_CORE0_GDSC] = &venus_core0_gdsc,
  2448. [VFE_GDSC] = &vfe_gdsc,
  2449. };
  2450. static const struct qcom_reset_map gcc_msm8909_resets[] = {
  2451. [GCC_AUDIO_CORE_BCR] = { 0x1c008 },
  2452. [GCC_BLSP1_BCR] = { 0x01000 },
  2453. [GCC_BLSP1_QUP1_BCR] = { 0x02000 },
  2454. [GCC_BLSP1_QUP2_BCR] = { 0x03008 },
  2455. [GCC_BLSP1_QUP3_BCR] = { 0x04018 },
  2456. [GCC_BLSP1_QUP4_BCR] = { 0x05018 },
  2457. [GCC_BLSP1_QUP5_BCR] = { 0x06018 },
  2458. [GCC_BLSP1_QUP6_BCR] = { 0x07018 },
  2459. [GCC_BLSP1_UART1_BCR] = { 0x02038 },
  2460. [GCC_BLSP1_UART2_BCR] = { 0x03028 },
  2461. [GCC_CAMSS_CSI0_BCR] = { 0x4e038 },
  2462. [GCC_CAMSS_CSI0PHY_BCR] = { 0x4e044 },
  2463. [GCC_CAMSS_CSI0PIX_BCR] = { 0x4e054 },
  2464. [GCC_CAMSS_CSI0RDI_BCR] = { 0x4e04c },
  2465. [GCC_CAMSS_CSI1_BCR] = { 0x4f038 },
  2466. [GCC_CAMSS_CSI1PHY_BCR] = { 0x4f044 },
  2467. [GCC_CAMSS_CSI1PIX_BCR] = { 0x4f054 },
  2468. [GCC_CAMSS_CSI1RDI_BCR] = { 0x4f04c },
  2469. [GCC_CAMSS_CSI_VFE0_BCR] = { 0x5804c },
  2470. [GCC_CAMSS_GP0_BCR] = { 0x54014 },
  2471. [GCC_CAMSS_GP1_BCR] = { 0x55014 },
  2472. [GCC_CAMSS_ISPIF_BCR] = { 0x50000 },
  2473. [GCC_CAMSS_MCLK0_BCR] = { 0x52014 },
  2474. [GCC_CAMSS_MCLK1_BCR] = { 0x53014 },
  2475. [GCC_CAMSS_PHY0_BCR] = { 0x4e018 },
  2476. [GCC_CAMSS_TOP_BCR] = { 0x56000 },
  2477. [GCC_CAMSS_TOP_AHB_BCR] = { 0x5a018 },
  2478. [GCC_CAMSS_VFE_BCR] = { 0x58030 },
  2479. [GCC_CRYPTO_BCR] = { 0x16000 },
  2480. [GCC_MDSS_BCR] = { 0x4d074 },
  2481. [GCC_OXILI_BCR] = { 0x59018 },
  2482. [GCC_PDM_BCR] = { 0x44000 },
  2483. [GCC_PRNG_BCR] = { 0x13000 },
  2484. [GCC_QUSB2_PHY_BCR] = { 0x4103c },
  2485. [GCC_SDCC1_BCR] = { 0x42000 },
  2486. [GCC_SDCC2_BCR] = { 0x43000 },
  2487. [GCC_ULT_AUDIO_BCR] = { 0x1c0b4 },
  2488. [GCC_USB2A_PHY_BCR] = { 0x41028 },
  2489. [GCC_USB2_HS_PHY_ONLY_BCR] = { .reg = 0x41034, .udelay = 15 },
  2490. [GCC_USB_HS_BCR] = { 0x41000 },
  2491. [GCC_VENUS0_BCR] = { 0x4c014 },
  2492. /* Subsystem Restart */
  2493. [GCC_MSS_RESTART] = { 0x3e000 },
  2494. };
  2495. static const struct regmap_config gcc_msm8909_regmap_config = {
  2496. .reg_bits = 32,
  2497. .reg_stride = 4,
  2498. .val_bits = 32,
  2499. .max_register = 0x80000,
  2500. .fast_io = true,
  2501. };
  2502. static const struct qcom_cc_desc gcc_msm8909_desc = {
  2503. .config = &gcc_msm8909_regmap_config,
  2504. .clks = gcc_msm8909_clocks,
  2505. .num_clks = ARRAY_SIZE(gcc_msm8909_clocks),
  2506. .resets = gcc_msm8909_resets,
  2507. .num_resets = ARRAY_SIZE(gcc_msm8909_resets),
  2508. .gdscs = gcc_msm8909_gdscs,
  2509. .num_gdscs = ARRAY_SIZE(gcc_msm8909_gdscs),
  2510. };
  2511. static const struct of_device_id gcc_msm8909_match_table[] = {
  2512. { .compatible = "qcom,gcc-msm8909" },
  2513. { }
  2514. };
  2515. MODULE_DEVICE_TABLE(of, gcc_msm8909_match_table);
  2516. static int gcc_msm8909_probe(struct platform_device *pdev)
  2517. {
  2518. return qcom_cc_probe(pdev, &gcc_msm8909_desc);
  2519. }
  2520. static struct platform_driver gcc_msm8909_driver = {
  2521. .probe = gcc_msm8909_probe,
  2522. .driver = {
  2523. .name = "gcc-msm8909",
  2524. .of_match_table = gcc_msm8909_match_table,
  2525. },
  2526. };
  2527. static int __init gcc_msm8909_init(void)
  2528. {
  2529. return platform_driver_register(&gcc_msm8909_driver);
  2530. }
  2531. core_initcall(gcc_msm8909_init);
  2532. static void __exit gcc_msm8909_exit(void)
  2533. {
  2534. platform_driver_unregister(&gcc_msm8909_driver);
  2535. }
  2536. module_exit(gcc_msm8909_exit);
  2537. MODULE_DESCRIPTION("Qualcomm GCC MSM8909 Driver");
  2538. MODULE_LICENSE("GPL");
  2539. MODULE_ALIAS("platform:gcc-msm8909");