gcc-mdm9607.c 52 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2021, Konrad Dybcio <[email protected]>
  4. * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #include <linux/clk.h>
  7. #include <linux/kernel.h>
  8. #include <linux/bitops.h>
  9. #include <linux/err.h>
  10. #include <linux/platform_device.h>
  11. #include <linux/module.h>
  12. #include <linux/of.h>
  13. #include <linux/of_device.h>
  14. #include <linux/clk-provider.h>
  15. #include <linux/regmap.h>
  16. #include <linux/reset-controller.h>
  17. #include <dt-bindings/clock/qcom,gcc-mdm9607.h>
  18. #include "common.h"
  19. #include "clk-regmap.h"
  20. #include "clk-alpha-pll.h"
  21. #include "clk-pll.h"
  22. #include "clk-rcg.h"
  23. #include "clk-branch.h"
  24. #include "reset.h"
  25. #include "gdsc.h"
  26. #include "vdd-level-mdm9607.h"
  27. static DEFINE_VDD_REGULATORS(vdd_dig, VDD_NUM, 1, vdd_corner);
  28. enum {
  29. P_XO,
  30. P_GPLL0,
  31. P_GPLL1,
  32. P_GPLL2,
  33. P_EMAC_0_TX_CLK,
  34. P_EMAC_0_125M_CLK,
  35. P_SLEEP_CLK,
  36. };
  37. static unsigned int soft_vote_gpll0;
  38. static struct clk_alpha_pll gpll0_early = {
  39. .offset = 0x21000,
  40. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  41. .soft_vote = &soft_vote_gpll0,
  42. .soft_vote_mask = PLL_SOFT_VOTE_PRIMARY,
  43. .flags = SUPPORTS_FSM_MODE,
  44. .clkr = {
  45. .enable_reg = 0x45000,
  46. .enable_mask = BIT(0),
  47. .hw.init = &(struct clk_init_data)
  48. {
  49. .name = "gpll0_early",
  50. .parent_data = &(const struct clk_parent_data){
  51. .fw_name = "xo",
  52. },
  53. .num_parents = 1,
  54. .ops = &clk_alpha_pll_ops,
  55. },
  56. },
  57. };
  58. static struct clk_alpha_pll gpll0_ao = {
  59. .offset = 0x21000,
  60. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  61. .soft_vote = &soft_vote_gpll0,
  62. .soft_vote_mask = PLL_SOFT_VOTE_CPU,
  63. .flags = SUPPORTS_FSM_MODE,
  64. .clkr = {
  65. .enable_reg = 0x45000,
  66. .enable_mask = BIT(0),
  67. .hw.init = &(struct clk_init_data)
  68. {
  69. .name = "gpll0_ao",
  70. .parent_data = &(const struct clk_parent_data){
  71. .fw_name = "xo_ao",
  72. },
  73. .num_parents = 1,
  74. .ops = &clk_alpha_pll_ops,
  75. },
  76. },
  77. };
  78. static struct clk_alpha_pll_postdiv gpll0 = {
  79. .offset = 0x21000,
  80. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  81. .clkr.hw.init = &(struct clk_init_data)
  82. {
  83. .name = "gpll0",
  84. .parent_hws = (const struct clk_hw *[]){ &gpll0_early.clkr.hw },
  85. .num_parents = 1,
  86. .ops = &clk_alpha_pll_postdiv_ops,
  87. },
  88. };
  89. static const struct parent_map gcc_xo_gpll0_map[] = {
  90. { P_XO, 0 },
  91. { P_GPLL0, 1 },
  92. };
  93. static const struct clk_parent_data gcc_xo_gpll0[] = {
  94. { .fw_name = "xo" },
  95. { .hw = &gpll0.clkr.hw },
  96. };
  97. static const struct clk_parent_data gcc_xo_gpll0_ao[] = {
  98. { .fw_name = "xo_ao" },
  99. { .hw = &gpll0.clkr.hw },
  100. };
  101. static struct clk_pll gpll1 = {
  102. .l_reg = 0x20004,
  103. .m_reg = 0x20008,
  104. .n_reg = 0x2000c,
  105. .config_reg = 0x20010,
  106. .mode_reg = 0x20000,
  107. .status_reg = 0x2001c,
  108. .status_bit = 17,
  109. .clkr.hw.init = &(struct clk_init_data){
  110. .name = "gpll1",
  111. .parent_data = &(const struct clk_parent_data){
  112. .fw_name = "xo",
  113. },
  114. .num_parents = 1,
  115. .ops = &clk_pll_ops,
  116. },
  117. };
  118. static struct clk_regmap gpll1_vote = {
  119. .enable_reg = 0x45000,
  120. .enable_mask = BIT(1),
  121. .hw.init = &(struct clk_init_data){
  122. .name = "gpll1_vote",
  123. .parent_hws = (const struct clk_hw *[]){ &gpll1.clkr.hw },
  124. .num_parents = 1,
  125. .ops = &clk_pll_vote_ops,
  126. },
  127. };
  128. static const struct parent_map gcc_xo_gpll0_gpll1_sleep_map[] = {
  129. { P_XO, 0 },
  130. { P_GPLL0, 1 },
  131. { P_GPLL1, 2 },
  132. { P_SLEEP_CLK, 6 },
  133. };
  134. static const struct clk_parent_data gcc_xo_gpll0_gpll1_sleep[] = {
  135. { .fw_name = "xo" },
  136. { .hw = &gpll0.clkr.hw },
  137. { .hw = &gpll1_vote.hw },
  138. { .fw_name = "sleep_clk" },
  139. };
  140. static struct clk_alpha_pll gpll2_early = {
  141. .offset = 0x25000,
  142. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  143. .clkr = {
  144. .enable_reg = 0x45000,
  145. .enable_mask = BIT(3), /* Yeah, apparently it's not 2 */
  146. .hw.init = &(struct clk_init_data)
  147. {
  148. .name = "gpll2_early",
  149. .parent_data = &(const struct clk_parent_data){
  150. .fw_name = "xo",
  151. },
  152. .num_parents = 1,
  153. .ops = &clk_alpha_pll_ops,
  154. },
  155. },
  156. };
  157. static struct clk_alpha_pll_postdiv gpll2 = {
  158. .offset = 0x25000,
  159. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  160. .clkr.hw.init = &(struct clk_init_data)
  161. {
  162. .name = "gpll2",
  163. .parent_hws = (const struct clk_hw *[]){ &gpll2_early.clkr.hw },
  164. .num_parents = 1,
  165. .ops = &clk_alpha_pll_postdiv_ops,
  166. },
  167. };
  168. static const struct parent_map gcc_xo_gpll0_gpll2_map[] = {
  169. { P_XO, 0 },
  170. { P_GPLL0, 1 },
  171. { P_GPLL2, 2 },
  172. };
  173. static const struct clk_parent_data gcc_xo_gpll0_gpll2[] = {
  174. { .fw_name = "xo" },
  175. { .hw = &gpll0.clkr.hw },
  176. { .hw = &gpll2.clkr.hw },
  177. };
  178. static const struct parent_map gcc_xo_gpll0_gpll1_gpll2_map[] = {
  179. { P_XO, 0 },
  180. { P_GPLL0, 1 },
  181. { P_GPLL1, 2 },
  182. { P_GPLL2, 3 },
  183. };
  184. static const struct clk_parent_data gcc_xo_gpll0_gpll1_gpll2[] = {
  185. { .fw_name = "xo" },
  186. { .hw = &gpll0.clkr.hw },
  187. { .hw = &gpll1_vote.hw },
  188. { .hw = &gpll2.clkr.hw },
  189. };
  190. static const struct parent_map gcc_xo_emac_0_125m_tx_map[] = {
  191. { P_XO, 0 },
  192. { P_EMAC_0_125M_CLK, 1 },
  193. { P_EMAC_0_TX_CLK, 2 },
  194. };
  195. static const struct clk_parent_data gcc_xo_emac_0_125m_tx[] = {
  196. { .fw_name = "xo" },
  197. { .fw_name = "emac_0_125m_clk" },
  198. { .fw_name = "emac_0_tx_clk" },
  199. };
  200. static const struct parent_map gcc_xo_emac_0_125m_map[] = {
  201. { P_XO, 0 },
  202. { P_EMAC_0_125M_CLK, 1 },
  203. };
  204. static const struct clk_parent_data gcc_xo_emac_0_125m[] = {
  205. { .fw_name = "xo" },
  206. { .fw_name = "emac_0_125m_clk" },
  207. };
  208. static const struct freq_tbl ftbl_apss_ahb_clk[] = {
  209. F(19200000, P_XO, 1, 0, 0),
  210. { }
  211. };
  212. static struct clk_rcg2 apss_ahb_clk_src = {
  213. .cmd_rcgr = 0x46000,
  214. .hid_width = 5,
  215. .parent_map = gcc_xo_gpll0_map,
  216. .freq_tbl = ftbl_apss_ahb_clk,
  217. .clkr.hw.init = &(struct clk_init_data){
  218. .name = "apss_ahb_clk_src",
  219. .parent_data = gcc_xo_gpll0_ao,
  220. .num_parents = 2,
  221. .ops = &clk_rcg2_ops,
  222. },
  223. };
  224. static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_i2c_apps_clk[] = {
  225. F(19200000, P_XO, 1, 0, 0),
  226. F(50000000, P_GPLL0, 16, 0, 0),
  227. { }
  228. };
  229. static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
  230. .cmd_rcgr = 0x200c,
  231. .hid_width = 5,
  232. .parent_map = gcc_xo_gpll0_map,
  233. .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
  234. .clkr.hw.init = &(struct clk_init_data){
  235. .name = "blsp1_qup1_i2c_apps_clk_src",
  236. .parent_data = gcc_xo_gpll0,
  237. .num_parents = 2,
  238. .ops = &clk_rcg2_ops,
  239. },
  240. .clkr.vdd_data = {
  241. .vdd_class = &vdd_dig,
  242. .num_rate_max = VDD_NUM,
  243. .rate_max = (unsigned long[VDD_NUM]) {
  244. [VDD_LOWER] = 50000000},
  245. },
  246. };
  247. static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_spi_apps_clk[] = {
  248. F(960000, P_XO, 10, 1, 2),
  249. F(4800000, P_XO, 4, 0, 0),
  250. F(9600000, P_XO, 2, 0, 0),
  251. F(16000000, P_GPLL0, 10, 1, 5),
  252. F(19200000, P_XO, 1, 0, 0),
  253. F(25000000, P_GPLL0, 16, 1, 2),
  254. F(50000000, P_GPLL0, 16, 0, 0),
  255. { }
  256. };
  257. static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
  258. .cmd_rcgr = 0x2024,
  259. .mnd_width = 8,
  260. .hid_width = 5,
  261. .parent_map = gcc_xo_gpll0_map,
  262. .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
  263. .clkr.hw.init = &(struct clk_init_data){
  264. .name = "blsp1_qup1_spi_apps_clk_src",
  265. .parent_data = gcc_xo_gpll0,
  266. .num_parents = 2,
  267. .ops = &clk_rcg2_ops,
  268. },
  269. .clkr.vdd_data = {
  270. .vdd_class = &vdd_dig,
  271. .num_rate_max = VDD_NUM,
  272. .rate_max = (unsigned long[VDD_NUM]) {
  273. [VDD_LOWER] = 25000000,
  274. [VDD_NOMINAL] = 50000000},
  275. },
  276. };
  277. static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
  278. .cmd_rcgr = 0x3000,
  279. .hid_width = 5,
  280. .parent_map = gcc_xo_gpll0_map,
  281. .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
  282. .clkr.hw.init = &(struct clk_init_data){
  283. .name = "blsp1_qup2_i2c_apps_clk_src",
  284. .parent_data = gcc_xo_gpll0,
  285. .num_parents = 2,
  286. .ops = &clk_rcg2_ops,
  287. },
  288. .clkr.vdd_data = {
  289. .vdd_class = &vdd_dig,
  290. .num_rate_max = VDD_NUM,
  291. .rate_max = (unsigned long[VDD_NUM]) {
  292. [VDD_LOWER] = 50000000},
  293. },
  294. };
  295. static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
  296. .cmd_rcgr = 0x3014,
  297. .mnd_width = 8,
  298. .hid_width = 5,
  299. .parent_map = gcc_xo_gpll0_map,
  300. .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
  301. .clkr.hw.init = &(struct clk_init_data){
  302. .name = "blsp1_qup2_spi_apps_clk_src",
  303. .parent_data = gcc_xo_gpll0,
  304. .num_parents = 2,
  305. .ops = &clk_rcg2_ops,
  306. },
  307. .clkr.vdd_data = {
  308. .vdd_class = &vdd_dig,
  309. .num_rate_max = VDD_NUM,
  310. .rate_max = (unsigned long[VDD_NUM]) {
  311. [VDD_LOWER] = 25000000,
  312. [VDD_NOMINAL] = 50000000},
  313. },
  314. };
  315. static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
  316. .cmd_rcgr = 0x4000,
  317. .hid_width = 5,
  318. .parent_map = gcc_xo_gpll0_map,
  319. .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
  320. .clkr.hw.init = &(struct clk_init_data){
  321. .name = "blsp1_qup3_i2c_apps_clk_src",
  322. .parent_data = gcc_xo_gpll0,
  323. .num_parents = 2,
  324. .ops = &clk_rcg2_ops,
  325. },
  326. .clkr.vdd_data = {
  327. .vdd_class = &vdd_dig,
  328. .num_rate_max = VDD_NUM,
  329. .rate_max = (unsigned long[VDD_NUM]) {
  330. [VDD_LOWER] = 50000000},
  331. },
  332. };
  333. static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
  334. .cmd_rcgr = 0x4024,
  335. .mnd_width = 8,
  336. .hid_width = 5,
  337. .parent_map = gcc_xo_gpll0_map,
  338. .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
  339. .clkr.hw.init = &(struct clk_init_data){
  340. .name = "blsp1_qup3_spi_apps_clk_src",
  341. .parent_data = gcc_xo_gpll0,
  342. .num_parents = 2,
  343. .ops = &clk_rcg2_ops,
  344. },
  345. .clkr.vdd_data = {
  346. .vdd_class = &vdd_dig,
  347. .num_rate_max = VDD_NUM,
  348. .rate_max = (unsigned long[VDD_NUM]) {
  349. [VDD_LOWER] = 18180000,
  350. [VDD_NOMINAL] = 36360000},
  351. },
  352. };
  353. static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
  354. .cmd_rcgr = 0x5000,
  355. .hid_width = 5,
  356. .parent_map = gcc_xo_gpll0_map,
  357. .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
  358. .clkr.hw.init = &(struct clk_init_data){
  359. .name = "blsp1_qup4_i2c_apps_clk_src",
  360. .parent_data = gcc_xo_gpll0,
  361. .num_parents = 2,
  362. .ops = &clk_rcg2_ops,
  363. },
  364. .clkr.vdd_data = {
  365. .vdd_class = &vdd_dig,
  366. .num_rate_max = VDD_NUM,
  367. .rate_max = (unsigned long[VDD_NUM]) {
  368. [VDD_LOWER] = 50000000},
  369. },
  370. };
  371. static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
  372. .cmd_rcgr = 0x5024,
  373. .mnd_width = 8,
  374. .hid_width = 5,
  375. .parent_map = gcc_xo_gpll0_map,
  376. .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
  377. .clkr.hw.init = &(struct clk_init_data){
  378. .name = "blsp1_qup4_spi_apps_clk_src",
  379. .parent_data = gcc_xo_gpll0,
  380. .num_parents = 2,
  381. .ops = &clk_rcg2_ops,
  382. },
  383. .clkr.vdd_data = {
  384. .vdd_class = &vdd_dig,
  385. .num_rate_max = VDD_NUM,
  386. .rate_max = (unsigned long[VDD_NUM]) {
  387. [VDD_LOWER] = 25000000,
  388. [VDD_NOMINAL] = 50000000},
  389. },
  390. };
  391. static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
  392. .cmd_rcgr = 0x6000,
  393. .hid_width = 5,
  394. .parent_map = gcc_xo_gpll0_map,
  395. .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
  396. .clkr.hw.init = &(struct clk_init_data){
  397. .name = "blsp1_qup5_i2c_apps_clk_src",
  398. .parent_data = gcc_xo_gpll0,
  399. .num_parents = 2,
  400. .ops = &clk_rcg2_ops,
  401. },
  402. .clkr.vdd_data = {
  403. .vdd_class = &vdd_dig,
  404. .num_rate_max = VDD_NUM,
  405. .rate_max = (unsigned long[VDD_NUM]) {
  406. [VDD_LOWER] = 50000000},
  407. },
  408. };
  409. static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
  410. .cmd_rcgr = 0x6024,
  411. .mnd_width = 8,
  412. .hid_width = 5,
  413. .parent_map = gcc_xo_gpll0_map,
  414. .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
  415. .clkr.hw.init = &(struct clk_init_data){
  416. .name = "blsp1_qup5_spi_apps_clk_src",
  417. .parent_data = gcc_xo_gpll0,
  418. .num_parents = 2,
  419. .ops = &clk_rcg2_ops,
  420. },
  421. .clkr.vdd_data = {
  422. .vdd_class = &vdd_dig,
  423. .num_rate_max = VDD_NUM,
  424. .rate_max = (unsigned long[VDD_NUM]) {
  425. [VDD_LOWER] = 25000000,
  426. [VDD_NOMINAL] = 50000000},
  427. },
  428. };
  429. static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
  430. .cmd_rcgr = 0x7000,
  431. .hid_width = 5,
  432. .parent_map = gcc_xo_gpll0_map,
  433. .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
  434. .clkr.hw.init = &(struct clk_init_data){
  435. .name = "blsp1_qup6_i2c_apps_clk_src",
  436. .parent_data = gcc_xo_gpll0,
  437. .num_parents = 2,
  438. .ops = &clk_rcg2_ops,
  439. },
  440. .clkr.vdd_data = {
  441. .vdd_class = &vdd_dig,
  442. .num_rate_max = VDD_NUM,
  443. .rate_max = (unsigned long[VDD_NUM]) {
  444. [VDD_LOWER] = 50000000},
  445. },
  446. };
  447. static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
  448. .cmd_rcgr = 0x7024,
  449. .mnd_width = 8,
  450. .hid_width = 5,
  451. .parent_map = gcc_xo_gpll0_map,
  452. .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
  453. .clkr.hw.init = &(struct clk_init_data){
  454. .name = "blsp1_qup6_spi_apps_clk_src",
  455. .parent_data = gcc_xo_gpll0,
  456. .num_parents = 2,
  457. .ops = &clk_rcg2_ops,
  458. },
  459. .clkr.vdd_data = {
  460. .vdd_class = &vdd_dig,
  461. .num_rate_max = VDD_NUM,
  462. .rate_max = (unsigned long[VDD_NUM]) {
  463. [VDD_LOWER] = 25000000,
  464. [VDD_NOMINAL] = 50000000},
  465. },
  466. };
  467. static const struct freq_tbl ftbl_gcc_blsp1_uart1_6_apps_clk[] = {
  468. F(3686400, P_GPLL0, 1, 72, 15625),
  469. F(7372800, P_GPLL0, 1, 144, 15625),
  470. F(14745600, P_GPLL0, 1, 288, 15625),
  471. F(16000000, P_GPLL0, 10, 1, 5),
  472. F(19200000, P_XO, 1, 0, 0),
  473. F(24000000, P_GPLL0, 1, 3, 100),
  474. F(25000000, P_GPLL0, 16, 1, 2),
  475. F(32000000, P_GPLL0, 1, 1, 25),
  476. F(40000000, P_GPLL0, 1, 1, 20),
  477. F(46400000, P_GPLL0, 1, 29, 500),
  478. F(48000000, P_GPLL0, 1, 3, 50),
  479. F(51200000, P_GPLL0, 1, 8, 125),
  480. F(56000000, P_GPLL0, 1, 7, 100),
  481. F(58982400, P_GPLL0, 1, 1152, 15625),
  482. F(60000000, P_GPLL0, 1, 3, 40),
  483. { }
  484. };
  485. static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
  486. .cmd_rcgr = 0x2044,
  487. .mnd_width = 16,
  488. .hid_width = 5,
  489. .parent_map = gcc_xo_gpll0_map,
  490. .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
  491. .clkr.hw.init = &(struct clk_init_data){
  492. .name = "blsp1_uart1_apps_clk_src",
  493. .parent_data = gcc_xo_gpll0,
  494. .num_parents = 2,
  495. .ops = &clk_rcg2_ops,
  496. },
  497. .clkr.vdd_data = {
  498. .vdd_class = &vdd_dig,
  499. .num_rate_max = VDD_NUM,
  500. .rate_max = (unsigned long[VDD_NUM]) {
  501. [VDD_LOWER] = 48480000,
  502. [VDD_NOMINAL] = 64000000},
  503. },
  504. };
  505. static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
  506. .cmd_rcgr = 0x3034,
  507. .mnd_width = 16,
  508. .hid_width = 5,
  509. .parent_map = gcc_xo_gpll0_map,
  510. .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
  511. .clkr.hw.init = &(struct clk_init_data){
  512. .name = "blsp1_uart2_apps_clk_src",
  513. .parent_data = gcc_xo_gpll0,
  514. .num_parents = 2,
  515. .ops = &clk_rcg2_ops,
  516. },
  517. .clkr.vdd_data = {
  518. .vdd_class = &vdd_dig,
  519. .num_rate_max = VDD_NUM,
  520. .rate_max = (unsigned long[VDD_NUM]) {
  521. [VDD_LOWER] = 48480000,
  522. [VDD_NOMINAL] = 64000000},
  523. },
  524. };
  525. static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
  526. .cmd_rcgr = 0x4044,
  527. .mnd_width = 16,
  528. .hid_width = 5,
  529. .parent_map = gcc_xo_gpll0_map,
  530. .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
  531. .clkr.hw.init = &(struct clk_init_data){
  532. .name = "blsp1_uart3_apps_clk_src",
  533. .parent_data = gcc_xo_gpll0,
  534. .num_parents = 2,
  535. .ops = &clk_rcg2_ops,
  536. },
  537. .clkr.vdd_data = {
  538. .vdd_class = &vdd_dig,
  539. .num_rate_max = VDD_NUM,
  540. .rate_max = (unsigned long[VDD_NUM]) {
  541. [VDD_LOWER] = 48480000,
  542. [VDD_NOMINAL] = 64000000},
  543. },
  544. };
  545. static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
  546. .cmd_rcgr = 0x5044,
  547. .mnd_width = 16,
  548. .hid_width = 5,
  549. .parent_map = gcc_xo_gpll0_map,
  550. .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
  551. .clkr.hw.init = &(struct clk_init_data){
  552. .name = "blsp1_uart4_apps_clk_src",
  553. .parent_data = gcc_xo_gpll0,
  554. .num_parents = 2,
  555. .ops = &clk_rcg2_ops,
  556. },
  557. .clkr.vdd_data = {
  558. .vdd_class = &vdd_dig,
  559. .num_rate_max = VDD_NUM,
  560. .rate_max = (unsigned long[VDD_NUM]) {
  561. [VDD_LOWER] = 48480000,
  562. [VDD_NOMINAL] = 64000000},
  563. },
  564. };
  565. static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
  566. .cmd_rcgr = 0x6044,
  567. .mnd_width = 16,
  568. .hid_width = 5,
  569. .parent_map = gcc_xo_gpll0_map,
  570. .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
  571. .clkr.hw.init = &(struct clk_init_data){
  572. .name = "blsp1_uart5_apps_clk_src",
  573. .parent_data = gcc_xo_gpll0,
  574. .num_parents = 2,
  575. .ops = &clk_rcg2_ops,
  576. },
  577. .clkr.vdd_data = {
  578. .vdd_class = &vdd_dig,
  579. .num_rate_max = VDD_NUM,
  580. .rate_max = (unsigned long[VDD_NUM]) {
  581. [VDD_LOWER] = 48480000,
  582. [VDD_NOMINAL] = 64000000},
  583. },
  584. };
  585. static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
  586. .cmd_rcgr = 0x6044,
  587. .mnd_width = 16,
  588. .hid_width = 5,
  589. .parent_map = gcc_xo_gpll0_map,
  590. .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
  591. .clkr.hw.init = &(struct clk_init_data){
  592. .name = "blsp1_uart6_apps_clk_src",
  593. .parent_data = gcc_xo_gpll0,
  594. .num_parents = 2,
  595. .ops = &clk_rcg2_ops,
  596. },
  597. .clkr.vdd_data = {
  598. .vdd_class = &vdd_dig,
  599. .num_rate_max = VDD_NUM,
  600. .rate_max = (unsigned long[VDD_NUM]) {
  601. [VDD_LOWER] = 48480000,
  602. [VDD_NOMINAL] = 64000000},
  603. },
  604. };
  605. static const struct freq_tbl ftbl_gcc_crypto_clk[] = {
  606. F(50000000, P_GPLL0, 16, 0, 0),
  607. F(80000000, P_GPLL0, 10, 0, 0),
  608. F(100000000, P_GPLL0, 8, 0, 0),
  609. F(160000000, P_GPLL0, 5, 0, 0),
  610. { }
  611. };
  612. static struct clk_rcg2 crypto_clk_src = {
  613. .cmd_rcgr = 0x16004,
  614. .hid_width = 5,
  615. .parent_map = gcc_xo_gpll0_map,
  616. .freq_tbl = ftbl_gcc_crypto_clk,
  617. .clkr.hw.init = &(struct clk_init_data){
  618. .name = "crypto_clk_src",
  619. .parent_data = gcc_xo_gpll0,
  620. .num_parents = 2,
  621. .ops = &clk_rcg2_ops,
  622. },
  623. .clkr.vdd_data = {
  624. .vdd_class = &vdd_dig,
  625. .num_rate_max = VDD_NUM,
  626. .rate_max = (unsigned long[VDD_NUM]) {
  627. [VDD_LOWER] = 80000000,
  628. [VDD_NOMINAL] = 160000000},
  629. },
  630. };
  631. static const struct freq_tbl ftbl_gcc_gp1_3_clk[] = {
  632. F(19200000, P_XO, 1, 0, 0),
  633. { }
  634. };
  635. static struct clk_rcg2 gp1_clk_src = {
  636. .cmd_rcgr = 0x8004,
  637. .mnd_width = 8,
  638. .hid_width = 5,
  639. .parent_map = gcc_xo_gpll0_gpll1_sleep_map,
  640. .freq_tbl = ftbl_gcc_gp1_3_clk,
  641. .clkr.hw.init = &(struct clk_init_data){
  642. .name = "gp1_clk_src",
  643. .parent_data = gcc_xo_gpll0_gpll1_sleep,
  644. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1_sleep),
  645. .ops = &clk_rcg2_ops,
  646. },
  647. .clkr.vdd_data = {
  648. .vdd_class = &vdd_dig,
  649. .num_rate_max = VDD_NUM,
  650. .rate_max = (unsigned long[VDD_NUM]) {
  651. [VDD_LOWER] = 100000000,
  652. [VDD_NOMINAL] = 200000000},
  653. },
  654. };
  655. static struct clk_rcg2 gp2_clk_src = {
  656. .cmd_rcgr = 0x09004,
  657. .mnd_width = 8,
  658. .hid_width = 5,
  659. .parent_map = gcc_xo_gpll0_gpll1_sleep_map,
  660. .freq_tbl = ftbl_gcc_gp1_3_clk,
  661. .clkr.hw.init = &(struct clk_init_data){
  662. .name = "gp2_clk_src",
  663. .parent_data = gcc_xo_gpll0_gpll1_sleep,
  664. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1_sleep),
  665. .ops = &clk_rcg2_ops,
  666. },
  667. .clkr.vdd_data = {
  668. .vdd_class = &vdd_dig,
  669. .num_rate_max = VDD_NUM,
  670. .rate_max = (unsigned long[VDD_NUM]) {
  671. [VDD_LOWER] = 100000000,
  672. [VDD_NOMINAL] = 200000000},
  673. },
  674. };
  675. static struct clk_rcg2 gp3_clk_src = {
  676. .cmd_rcgr = 0x0a004,
  677. .mnd_width = 8,
  678. .hid_width = 5,
  679. .parent_map = gcc_xo_gpll0_gpll1_sleep_map,
  680. .freq_tbl = ftbl_gcc_gp1_3_clk,
  681. .clkr.hw.init = &(struct clk_init_data){
  682. .name = "gp3_clk_src",
  683. .parent_data = gcc_xo_gpll0_gpll1_sleep,
  684. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1_sleep),
  685. .ops = &clk_rcg2_ops,
  686. },
  687. .clkr.vdd_data = {
  688. .vdd_class = &vdd_dig,
  689. .num_rate_max = VDD_NUM,
  690. .rate_max = (unsigned long[VDD_NUM]) {
  691. [VDD_LOWER] = 100000000,
  692. [VDD_NOMINAL] = 200000000},
  693. },
  694. };
  695. static const struct freq_tbl ftbl_gcc_pdm2_clk[] = {
  696. F(64000000, P_GPLL0, 12.5, 0, 0),
  697. { }
  698. };
  699. static struct clk_rcg2 pdm2_clk_src = {
  700. .cmd_rcgr = 0x44010,
  701. .hid_width = 5,
  702. .parent_map = gcc_xo_gpll0_map,
  703. .freq_tbl = ftbl_gcc_pdm2_clk,
  704. .clkr.hw.init = &(struct clk_init_data){
  705. .name = "pdm2_clk_src",
  706. .parent_data = gcc_xo_gpll0,
  707. .num_parents = 2,
  708. .ops = &clk_rcg2_ops,
  709. },
  710. .clkr.vdd_data = {
  711. .vdd_class = &vdd_dig,
  712. .num_rate_max = VDD_NUM,
  713. .rate_max = (unsigned long[VDD_NUM]) {
  714. [VDD_LOWER] = 64000000},
  715. },
  716. };
  717. static const struct freq_tbl ftbl_gcc_sdcc_apps_clk[] = {
  718. F(144000, P_XO, 16, 3, 25),
  719. F(400000, P_XO, 12, 1, 4),
  720. F(20000000, P_GPLL0, 10, 1, 4),
  721. F(25000000, P_GPLL0, 16, 1, 2),
  722. F(50000000, P_GPLL0, 16, 0, 0),
  723. F(100000000, P_GPLL0, 8, 0, 0),
  724. F(177770000, P_GPLL0, 4.5, 0, 0),
  725. F(200000000, P_GPLL0, 4, 0, 0),
  726. { }
  727. };
  728. static struct clk_rcg2 sdcc1_apps_clk_src = {
  729. .cmd_rcgr = 0x42004,
  730. .mnd_width = 8,
  731. .hid_width = 5,
  732. .parent_map = gcc_xo_gpll0_map,
  733. .freq_tbl = ftbl_gcc_sdcc_apps_clk,
  734. .clkr.hw.init = &(struct clk_init_data){
  735. .name = "sdcc1_apps_clk_src",
  736. .parent_data = gcc_xo_gpll0,
  737. .num_parents = 2,
  738. .ops = &clk_rcg2_floor_ops,
  739. },
  740. .clkr.vdd_data = {
  741. .vdd_class = &vdd_dig,
  742. .num_rate_max = VDD_NUM,
  743. .rate_max = (unsigned long[VDD_NUM]) {
  744. [VDD_LOWER] = 50000000,
  745. [VDD_NOMINAL] = 200000000},
  746. },
  747. };
  748. static struct clk_rcg2 sdcc2_apps_clk_src = {
  749. .cmd_rcgr = 0x43004,
  750. .mnd_width = 8,
  751. .hid_width = 5,
  752. .parent_map = gcc_xo_gpll0_map,
  753. .freq_tbl = ftbl_gcc_sdcc_apps_clk,
  754. .clkr.hw.init = &(struct clk_init_data){
  755. .name = "sdcc2_apps_clk_src",
  756. .parent_data = gcc_xo_gpll0,
  757. .num_parents = 2,
  758. .ops = &clk_rcg2_floor_ops,
  759. },
  760. .clkr.vdd_data = {
  761. .vdd_class = &vdd_dig,
  762. .num_rate_max = VDD_NUM,
  763. .rate_max = (unsigned long[VDD_NUM]) {
  764. [VDD_LOWER] = 50000000,
  765. [VDD_NOMINAL] = 200000000},
  766. },
  767. };
  768. static const struct freq_tbl ftbl_gcc_apss_tcu_clk[] = {
  769. F(155000000, P_GPLL2, 6, 0, 0),
  770. F(310000000, P_GPLL2, 3, 0, 0),
  771. F(400000000, P_GPLL0, 2, 0, 0),
  772. { }
  773. };
  774. static struct clk_rcg2 apss_tcu_clk_src = {
  775. .cmd_rcgr = 0x1207c,
  776. .hid_width = 5,
  777. .parent_map = gcc_xo_gpll0_gpll1_gpll2_map,
  778. .freq_tbl = ftbl_gcc_apss_tcu_clk,
  779. .clkr.hw.init = &(struct clk_init_data){
  780. .name = "apss_tcu_clk_src",
  781. .parent_data = gcc_xo_gpll0_gpll1_gpll2,
  782. .num_parents = 4,
  783. .ops = &clk_rcg2_ops,
  784. },
  785. };
  786. static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
  787. F(19200000, P_XO, 1, 0, 0),
  788. F(57140000, P_GPLL0, 14, 0, 0),
  789. F(69565000, P_GPLL0, 11.5, 0, 0),
  790. F(133330000, P_GPLL0, 6, 0, 0),
  791. F(177778000, P_GPLL0, 4.5, 0, 0),
  792. { }
  793. };
  794. static struct clk_rcg2 usb_hs_system_clk_src = {
  795. .cmd_rcgr = 0x41010,
  796. .hid_width = 5,
  797. .parent_map = gcc_xo_gpll0_map,
  798. .freq_tbl = ftbl_gcc_usb_hs_system_clk,
  799. .clkr.hw.init = &(struct clk_init_data){
  800. .name = "usb_hs_system_clk_src",
  801. .parent_data = gcc_xo_gpll0,
  802. .num_parents = 2,
  803. .ops = &clk_rcg2_ops,
  804. },
  805. .clkr.vdd_data = {
  806. .vdd_class = &vdd_dig,
  807. .num_rate_max = VDD_NUM,
  808. .rate_max = (unsigned long[VDD_NUM]) {
  809. [VDD_LOWER] = 69570000,
  810. [VDD_NOMINAL] = 133330000,
  811. [VDD_HIGH] = 177780000},
  812. },
  813. };
  814. static const struct freq_tbl ftbl_emac_0_125m_clk_src[] = {
  815. F(19200000, P_XO, 1, 0, 0),
  816. F(25000000, P_EMAC_0_125M_CLK, 5, 0, 0),
  817. F(125000000, P_EMAC_0_125M_CLK, 1, 0, 0),
  818. { }
  819. };
  820. static struct clk_rcg2 emac_0_125m_clk_src = {
  821. .cmd_rcgr = 0x4e028,
  822. .hid_width = 5,
  823. .parent_map = gcc_xo_emac_0_125m_map,
  824. .freq_tbl = ftbl_emac_0_125m_clk_src,
  825. .clkr.hw.init = &(struct clk_init_data){
  826. .name = "emac_0_125m_clk_src",
  827. .parent_data = gcc_xo_emac_0_125m,
  828. .num_parents = ARRAY_SIZE(gcc_xo_emac_0_125m),
  829. .ops = &clk_rcg2_ops,
  830. },
  831. };
  832. static const struct freq_tbl ftbl_emac_0_sys_25m_clk_src[] = {
  833. F(19200000, P_XO, 1, 0, 0),
  834. F(25000000, P_EMAC_0_125M_CLK, 5, 0, 0),
  835. F(125000000, P_EMAC_0_125M_CLK, 1, 0, 0),
  836. { }
  837. };
  838. static struct clk_rcg2 emac_0_sys_25m_clk_src = {
  839. .cmd_rcgr = 0x4e03c,
  840. .hid_width = 5,
  841. .parent_map = gcc_xo_emac_0_125m_map,
  842. .freq_tbl = ftbl_emac_0_sys_25m_clk_src,
  843. .clkr.hw.init = &(struct clk_init_data){
  844. .name = "emac_0_sys_25m_clk_src",
  845. .parent_data = gcc_xo_emac_0_125m,
  846. .num_parents = ARRAY_SIZE(gcc_xo_emac_0_125m),
  847. .ops = &clk_rcg2_ops,
  848. },
  849. .clkr.vdd_data = {
  850. .vdd_class = &vdd_dig,
  851. .num_rate_max = VDD_NUM,
  852. .rate_max = (unsigned long[VDD_NUM]) {
  853. [VDD_LOWER] = 25000000,
  854. [VDD_NOMINAL] = 125000000},
  855. },
  856. };
  857. static const struct freq_tbl ftbl_emac_0_tx_clk_src[] = {
  858. F(19200000, P_XO, 1, 0, 0),
  859. F(125000000, P_EMAC_0_TX_CLK, 1, 0, 0),
  860. { }
  861. };
  862. static struct clk_rcg2 emac_0_tx_clk_src = {
  863. .cmd_rcgr = 0x4e014,
  864. .hid_width = 5,
  865. .parent_map = gcc_xo_emac_0_125m_tx_map,
  866. .freq_tbl = ftbl_emac_0_tx_clk_src,
  867. .clkr.hw.init = &(struct clk_init_data){
  868. .name = "emac_0_tx_clk_src",
  869. .parent_data = gcc_xo_emac_0_125m_tx,
  870. .num_parents = ARRAY_SIZE(gcc_xo_emac_0_125m_tx),
  871. .ops = &clk_rcg2_ops,
  872. },
  873. .clkr.vdd_data = {
  874. .vdd_class = &vdd_dig,
  875. .num_rate_max = VDD_NUM,
  876. .rate_max = (unsigned long[VDD_NUM]) {
  877. [VDD_LOWER] = 25000000,
  878. [VDD_NOMINAL] = 125000000},
  879. },
  880. };
  881. static const struct freq_tbl ftbl_usb_hsic_clk_src[] = {
  882. F(480000000, P_GPLL2, 1, 0, 0),
  883. { }
  884. };
  885. static struct clk_rcg2 usb_hsic_clk_src = {
  886. .cmd_rcgr = 0x3d018,
  887. .hid_width = 5,
  888. .parent_map = gcc_xo_gpll0_gpll2_map,
  889. .freq_tbl = ftbl_usb_hsic_clk_src,
  890. .clkr.hw.init = &(struct clk_init_data){
  891. .name = "usb_hsic_clk_src",
  892. .parent_data = gcc_xo_gpll0_gpll2,
  893. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2),
  894. .ops = &clk_rcg2_ops,
  895. },
  896. .clkr.vdd_data = {
  897. .vdd_class = &vdd_dig,
  898. .num_rate_max = VDD_NUM,
  899. .rate_max = (unsigned long[VDD_NUM]) {
  900. [VDD_LOWER] = 480000000},
  901. },
  902. };
  903. static const struct freq_tbl ftbl_usb_hsic_io_cal_clk_src[] = {
  904. F(9600000, P_XO, 2, 0, 0),
  905. { }
  906. };
  907. static struct clk_rcg2 usb_hsic_io_cal_clk_src = {
  908. .cmd_rcgr = 0x3d030,
  909. .hid_width = 5,
  910. .parent_map = gcc_xo_gpll0_map,
  911. .freq_tbl = ftbl_usb_hsic_io_cal_clk_src,
  912. .clkr.hw.init = &(struct clk_init_data){
  913. .name = "usb_hsic_io_cal_clk_src",
  914. .parent_data = gcc_xo_gpll0,
  915. .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
  916. .ops = &clk_rcg2_ops,
  917. },
  918. .clkr.vdd_data = {
  919. .vdd_class = &vdd_dig,
  920. .num_rate_max = VDD_NUM,
  921. .rate_max = (unsigned long[VDD_NUM]) {
  922. [VDD_LOWER] = 9600000},
  923. },
  924. };
  925. static const struct freq_tbl ftbl_usb_hsic_system_clk_src[] = {
  926. F(19200000, P_XO, 1, 0, 0),
  927. F(57142857, P_GPLL0, 14, 0, 0),
  928. F(133333333, P_GPLL0, 6, 0, 0),
  929. F(177777777, P_GPLL0, 4.5, 0, 0),
  930. { }
  931. };
  932. static struct clk_rcg2 usb_hsic_system_clk_src = {
  933. .cmd_rcgr = 0x3d000,
  934. .hid_width = 5,
  935. .freq_tbl = ftbl_usb_hsic_system_clk_src,
  936. .parent_map = gcc_xo_gpll0_gpll2_map,
  937. .clkr.hw.init = &(struct clk_init_data){
  938. .name = "usb_hsic_system_clk_src",
  939. .parent_data = gcc_xo_gpll0_gpll2,
  940. .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2),
  941. .ops = &clk_rcg2_ops,
  942. },
  943. .clkr.vdd_data = {
  944. .vdd_class = &vdd_dig,
  945. .num_rate_max = VDD_NUM,
  946. .rate_max = (unsigned long[VDD_NUM]) {
  947. [VDD_LOWER] = 57140000,
  948. [VDD_NOMINAL] = 133330000,
  949. [VDD_HIGH] = 177778000},
  950. },
  951. };
  952. static struct clk_branch gcc_blsp1_ahb_clk = {
  953. .halt_reg = 0x1008,
  954. .halt_check = BRANCH_HALT_VOTED,
  955. .clkr = {
  956. .enable_reg = 0x45004,
  957. .enable_mask = BIT(10),
  958. .hw.init = &(struct clk_init_data){
  959. .name = "gcc_blsp1_ahb_clk",
  960. .ops = &clk_branch2_ops,
  961. },
  962. },
  963. };
  964. static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
  965. .halt_reg = 0x2008,
  966. .clkr = {
  967. .enable_reg = 0x2008,
  968. .enable_mask = BIT(0),
  969. .hw.init = &(struct clk_init_data){
  970. .name = "gcc_blsp1_qup1_i2c_apps_clk",
  971. .parent_hws = (const struct clk_hw *[]){ &blsp1_qup1_i2c_apps_clk_src.clkr.hw },
  972. .num_parents = 1,
  973. .flags = CLK_SET_RATE_PARENT,
  974. .ops = &clk_branch2_ops,
  975. },
  976. },
  977. };
  978. static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
  979. .halt_reg = 0x2004,
  980. .clkr = {
  981. .enable_reg = 0x2004,
  982. .enable_mask = BIT(0),
  983. .hw.init = &(struct clk_init_data){
  984. .name = "gcc_blsp1_qup1_spi_apps_clk",
  985. .parent_hws = (const struct clk_hw *[]){ &blsp1_qup1_spi_apps_clk_src.clkr.hw },
  986. .num_parents = 1,
  987. .flags = CLK_SET_RATE_PARENT,
  988. .ops = &clk_branch2_ops,
  989. },
  990. },
  991. };
  992. static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
  993. .halt_reg = 0x3010,
  994. .clkr = {
  995. .enable_reg = 0x3010,
  996. .enable_mask = BIT(0),
  997. .hw.init = &(struct clk_init_data){
  998. .name = "gcc_blsp1_qup2_i2c_apps_clk",
  999. .parent_hws = (const struct clk_hw *[]){ &blsp1_qup2_i2c_apps_clk_src.clkr.hw },
  1000. .num_parents = 1,
  1001. .flags = CLK_SET_RATE_PARENT,
  1002. .ops = &clk_branch2_ops,
  1003. },
  1004. },
  1005. };
  1006. static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
  1007. .halt_reg = 0x300c,
  1008. .clkr = {
  1009. .enable_reg = 0x300c,
  1010. .enable_mask = BIT(0),
  1011. .hw.init = &(struct clk_init_data){
  1012. .name = "gcc_blsp1_qup2_spi_apps_clk",
  1013. .parent_hws = (const struct clk_hw *[]){ &blsp1_qup2_spi_apps_clk_src.clkr.hw },
  1014. .num_parents = 1,
  1015. .flags = CLK_SET_RATE_PARENT,
  1016. .ops = &clk_branch2_ops,
  1017. },
  1018. },
  1019. };
  1020. static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
  1021. .halt_reg = 0x4020,
  1022. .clkr = {
  1023. .enable_reg = 0x4020,
  1024. .enable_mask = BIT(0),
  1025. .hw.init = &(struct clk_init_data){
  1026. .name = "gcc_blsp1_qup3_i2c_apps_clk",
  1027. .parent_hws = (const struct clk_hw *[]){ &blsp1_qup3_i2c_apps_clk_src.clkr.hw },
  1028. .num_parents = 1,
  1029. .flags = CLK_SET_RATE_PARENT,
  1030. .ops = &clk_branch2_ops,
  1031. },
  1032. },
  1033. };
  1034. static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
  1035. .halt_reg = 0x401c,
  1036. .clkr = {
  1037. .enable_reg = 0x401c,
  1038. .enable_mask = BIT(0),
  1039. .hw.init = &(struct clk_init_data){
  1040. .name = "gcc_blsp1_qup3_spi_apps_clk",
  1041. .parent_hws = (const struct clk_hw *[]){ &blsp1_qup3_spi_apps_clk_src.clkr.hw },
  1042. .num_parents = 1,
  1043. .flags = CLK_SET_RATE_PARENT,
  1044. .ops = &clk_branch2_ops,
  1045. },
  1046. },
  1047. };
  1048. static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
  1049. .halt_reg = 0x5020,
  1050. .clkr = {
  1051. .enable_reg = 0x5020,
  1052. .enable_mask = BIT(0),
  1053. .hw.init = &(struct clk_init_data){
  1054. .name = "gcc_blsp1_qup4_i2c_apps_clk",
  1055. .parent_hws = (const struct clk_hw *[]){ &blsp1_qup4_i2c_apps_clk_src.clkr.hw },
  1056. .num_parents = 1,
  1057. .flags = CLK_SET_RATE_PARENT,
  1058. .ops = &clk_branch2_ops,
  1059. },
  1060. },
  1061. };
  1062. static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
  1063. .halt_reg = 0x501c,
  1064. .clkr = {
  1065. .enable_reg = 0x501c,
  1066. .enable_mask = BIT(0),
  1067. .hw.init = &(struct clk_init_data){
  1068. .name = "gcc_blsp1_qup4_spi_apps_clk",
  1069. .parent_hws = (const struct clk_hw *[]){ &blsp1_qup4_spi_apps_clk_src.clkr.hw },
  1070. .num_parents = 1,
  1071. .flags = CLK_SET_RATE_PARENT,
  1072. .ops = &clk_branch2_ops,
  1073. },
  1074. },
  1075. };
  1076. static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
  1077. .halt_reg = 0x6020,
  1078. .clkr = {
  1079. .enable_reg = 0x6020,
  1080. .enable_mask = BIT(0),
  1081. .hw.init = &(struct clk_init_data){
  1082. .name = "gcc_blsp1_qup5_i2c_apps_clk",
  1083. .parent_hws = (const struct clk_hw *[]){ &blsp1_qup5_i2c_apps_clk_src.clkr.hw },
  1084. .num_parents = 1,
  1085. .flags = CLK_SET_RATE_PARENT,
  1086. .ops = &clk_branch2_ops,
  1087. },
  1088. },
  1089. };
  1090. static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
  1091. .halt_reg = 0x601c,
  1092. .clkr = {
  1093. .enable_reg = 0x601c,
  1094. .enable_mask = BIT(0),
  1095. .hw.init = &(struct clk_init_data){
  1096. .name = "gcc_blsp1_qup5_spi_apps_clk",
  1097. .parent_hws = (const struct clk_hw *[]){ &blsp1_qup5_spi_apps_clk_src.clkr.hw },
  1098. .num_parents = 1,
  1099. .flags = CLK_SET_RATE_PARENT,
  1100. .ops = &clk_branch2_ops,
  1101. },
  1102. },
  1103. };
  1104. static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
  1105. .halt_reg = 0x7020,
  1106. .clkr = {
  1107. .enable_reg = 0x7020,
  1108. .enable_mask = BIT(0),
  1109. .hw.init = &(struct clk_init_data){
  1110. .name = "gcc_blsp1_qup6_i2c_apps_clk",
  1111. .parent_hws = (const struct clk_hw *[]){ &blsp1_qup6_i2c_apps_clk_src.clkr.hw },
  1112. .num_parents = 1,
  1113. .flags = CLK_SET_RATE_PARENT,
  1114. .ops = &clk_branch2_ops,
  1115. },
  1116. },
  1117. };
  1118. static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
  1119. .halt_reg = 0x701c,
  1120. .clkr = {
  1121. .enable_reg = 0x701c,
  1122. .enable_mask = BIT(0),
  1123. .hw.init = &(struct clk_init_data){
  1124. .name = "gcc_blsp1_qup6_spi_apps_clk",
  1125. .parent_hws = (const struct clk_hw *[]){ &blsp1_qup6_spi_apps_clk_src.clkr.hw },
  1126. .num_parents = 1,
  1127. .flags = CLK_SET_RATE_PARENT,
  1128. .ops = &clk_branch2_ops,
  1129. },
  1130. },
  1131. };
  1132. static struct clk_branch gcc_blsp1_uart1_apps_clk = {
  1133. .halt_reg = 0x203c,
  1134. .clkr = {
  1135. .enable_reg = 0x203c,
  1136. .enable_mask = BIT(0),
  1137. .hw.init = &(struct clk_init_data){
  1138. .name = "gcc_blsp1_uart1_apps_clk",
  1139. .parent_hws = (const struct clk_hw *[]){ &blsp1_uart1_apps_clk_src.clkr.hw },
  1140. .num_parents = 1,
  1141. .flags = CLK_SET_RATE_PARENT,
  1142. .ops = &clk_branch2_ops,
  1143. },
  1144. },
  1145. };
  1146. static struct clk_branch gcc_blsp1_uart2_apps_clk = {
  1147. .halt_reg = 0x302c,
  1148. .clkr = {
  1149. .enable_reg = 0x302c,
  1150. .enable_mask = BIT(0),
  1151. .hw.init = &(struct clk_init_data){
  1152. .name = "gcc_blsp1_uart2_apps_clk",
  1153. .parent_hws = (const struct clk_hw *[]){ &blsp1_uart2_apps_clk_src.clkr.hw },
  1154. .num_parents = 1,
  1155. .flags = CLK_SET_RATE_PARENT,
  1156. .ops = &clk_branch2_ops,
  1157. },
  1158. },
  1159. };
  1160. static struct clk_branch gcc_blsp1_uart3_apps_clk = {
  1161. .halt_reg = 0x403c,
  1162. .clkr = {
  1163. .enable_reg = 0x403c,
  1164. .enable_mask = BIT(0),
  1165. .hw.init = &(struct clk_init_data){
  1166. .name = "gcc_blsp1_uart3_apps_clk",
  1167. .parent_hws = (const struct clk_hw *[]){ &blsp1_uart3_apps_clk_src.clkr.hw },
  1168. .num_parents = 1,
  1169. .flags = CLK_SET_RATE_PARENT,
  1170. .ops = &clk_branch2_ops,
  1171. },
  1172. },
  1173. };
  1174. static struct clk_branch gcc_blsp1_uart4_apps_clk = {
  1175. .halt_reg = 0x503c,
  1176. .clkr = {
  1177. .enable_reg = 0x503c,
  1178. .enable_mask = BIT(0),
  1179. .hw.init = &(struct clk_init_data){
  1180. .name = "gcc_blsp1_uart4_apps_clk",
  1181. .parent_hws = (const struct clk_hw *[]){ &blsp1_uart4_apps_clk_src.clkr.hw },
  1182. .num_parents = 1,
  1183. .flags = CLK_SET_RATE_PARENT,
  1184. .ops = &clk_branch2_ops,
  1185. },
  1186. },
  1187. };
  1188. static struct clk_branch gcc_blsp1_uart5_apps_clk = {
  1189. .halt_reg = 0x603c,
  1190. .clkr = {
  1191. .enable_reg = 0x603c,
  1192. .enable_mask = BIT(0),
  1193. .hw.init = &(struct clk_init_data){
  1194. .name = "gcc_blsp1_uart5_apps_clk",
  1195. .parent_hws = (const struct clk_hw *[]){ &blsp1_uart5_apps_clk_src.clkr.hw },
  1196. .num_parents = 1,
  1197. .flags = CLK_SET_RATE_PARENT,
  1198. .ops = &clk_branch2_ops,
  1199. },
  1200. },
  1201. };
  1202. static struct clk_branch gcc_blsp1_uart6_apps_clk = {
  1203. .halt_reg = 0x703c,
  1204. .clkr = {
  1205. .enable_reg = 0x703c,
  1206. .enable_mask = BIT(0),
  1207. .hw.init = &(struct clk_init_data){
  1208. .name = "gcc_blsp1_uart6_apps_clk",
  1209. .parent_hws = (const struct clk_hw *[]){ &blsp1_uart6_apps_clk_src.clkr.hw },
  1210. .num_parents = 1,
  1211. .flags = CLK_SET_RATE_PARENT,
  1212. .ops = &clk_branch2_ops,
  1213. },
  1214. },
  1215. };
  1216. static struct clk_branch gcc_boot_rom_ahb_clk = {
  1217. .halt_reg = 0x1300c,
  1218. .halt_check = BRANCH_HALT_VOTED,
  1219. .clkr = {
  1220. .enable_reg = 0x45004,
  1221. .enable_mask = BIT(7),
  1222. .hw.init = &(struct clk_init_data){
  1223. .name = "gcc_boot_rom_ahb_clk",
  1224. .ops = &clk_branch2_ops,
  1225. },
  1226. },
  1227. };
  1228. static struct clk_branch gcc_crypto_ahb_clk = {
  1229. .halt_reg = 0x16024,
  1230. .halt_check = BRANCH_HALT_VOTED,
  1231. .clkr = {
  1232. .enable_reg = 0x45004,
  1233. .enable_mask = BIT(0),
  1234. .hw.init = &(struct clk_init_data){
  1235. .name = "gcc_crypto_ahb_clk",
  1236. .flags = CLK_SET_RATE_PARENT,
  1237. .ops = &clk_branch2_ops,
  1238. },
  1239. },
  1240. };
  1241. static struct clk_branch gcc_crypto_axi_clk = {
  1242. .halt_reg = 0x16020,
  1243. .halt_check = BRANCH_HALT_VOTED,
  1244. .clkr = {
  1245. .enable_reg = 0x45004,
  1246. .enable_mask = BIT(1),
  1247. .hw.init = &(struct clk_init_data){
  1248. .name = "gcc_crypto_axi_clk",
  1249. .flags = CLK_SET_RATE_PARENT,
  1250. .ops = &clk_branch2_ops,
  1251. },
  1252. },
  1253. };
  1254. static struct clk_branch gcc_crypto_clk = {
  1255. .halt_reg = 0x1601c,
  1256. .halt_check = BRANCH_HALT_VOTED,
  1257. .clkr = {
  1258. .enable_reg = 0x45004,
  1259. .enable_mask = BIT(2),
  1260. .hw.init = &(struct clk_init_data){
  1261. .name = "gcc_crypto_clk",
  1262. .parent_hws = (const struct clk_hw *[]){ &crypto_clk_src.clkr.hw },
  1263. .num_parents = 1,
  1264. .flags = CLK_SET_RATE_PARENT,
  1265. .ops = &clk_branch2_ops,
  1266. },
  1267. },
  1268. };
  1269. static struct clk_branch gcc_gp1_clk = {
  1270. .halt_reg = 0x08000,
  1271. .clkr = {
  1272. .enable_reg = 0x08000,
  1273. .enable_mask = BIT(0),
  1274. .hw.init = &(struct clk_init_data){
  1275. .name = "gcc_gp1_clk",
  1276. .parent_hws = (const struct clk_hw *[]){ &gp1_clk_src.clkr.hw },
  1277. .num_parents = 1,
  1278. .flags = CLK_SET_RATE_PARENT,
  1279. .ops = &clk_branch2_ops,
  1280. },
  1281. },
  1282. };
  1283. static struct clk_branch gcc_gp2_clk = {
  1284. .halt_reg = 0x09000,
  1285. .clkr = {
  1286. .enable_reg = 0x09000,
  1287. .enable_mask = BIT(0),
  1288. .hw.init = &(struct clk_init_data){
  1289. .name = "gcc_gp2_clk",
  1290. .parent_hws = (const struct clk_hw *[]){ &gp2_clk_src.clkr.hw },
  1291. .num_parents = 1,
  1292. .flags = CLK_SET_RATE_PARENT,
  1293. .ops = &clk_branch2_ops,
  1294. },
  1295. },
  1296. };
  1297. static struct clk_branch gcc_gp3_clk = {
  1298. .halt_reg = 0x0a000,
  1299. .clkr = {
  1300. .enable_reg = 0x0a000,
  1301. .enable_mask = BIT(0),
  1302. .hw.init = &(struct clk_init_data){
  1303. .name = "gcc_gp3_clk",
  1304. .parent_hws = (const struct clk_hw *[]){ &gp3_clk_src.clkr.hw },
  1305. .num_parents = 1,
  1306. .flags = CLK_SET_RATE_PARENT,
  1307. .ops = &clk_branch2_ops,
  1308. },
  1309. },
  1310. };
  1311. static struct clk_branch gcc_mss_cfg_ahb_clk = {
  1312. .halt_reg = 0x49000,
  1313. .clkr = {
  1314. .enable_reg = 0x49000,
  1315. .enable_mask = BIT(0),
  1316. .hw.init = &(struct clk_init_data){
  1317. .name = "gcc_mss_cfg_ahb_clk",
  1318. .flags = CLK_SET_RATE_PARENT,
  1319. .ops = &clk_branch2_ops,
  1320. },
  1321. },
  1322. };
  1323. static struct clk_branch gcc_pdm2_clk = {
  1324. .halt_reg = 0x4400c,
  1325. .clkr = {
  1326. .enable_reg = 0x4400c,
  1327. .enable_mask = BIT(0),
  1328. .hw.init = &(struct clk_init_data){
  1329. .name = "gcc_pdm2_clk",
  1330. .parent_hws = (const struct clk_hw *[]){ &pdm2_clk_src.clkr.hw },
  1331. .num_parents = 1,
  1332. .flags = CLK_SET_RATE_PARENT,
  1333. .ops = &clk_branch2_ops,
  1334. },
  1335. },
  1336. };
  1337. static struct clk_branch gcc_pdm_ahb_clk = {
  1338. .halt_reg = 0x44004,
  1339. .clkr = {
  1340. .enable_reg = 0x44004,
  1341. .enable_mask = BIT(0),
  1342. .hw.init = &(struct clk_init_data){
  1343. .name = "gcc_pdm_ahb_clk",
  1344. .flags = CLK_SET_RATE_PARENT,
  1345. .ops = &clk_branch2_ops,
  1346. },
  1347. },
  1348. };
  1349. static struct clk_branch gcc_prng_ahb_clk = {
  1350. .halt_reg = 0x13004,
  1351. .halt_check = BRANCH_HALT_VOTED,
  1352. .clkr = {
  1353. .enable_reg = 0x45004,
  1354. .enable_mask = BIT(8),
  1355. .hw.init = &(struct clk_init_data){
  1356. .name = "gcc_prng_ahb_clk",
  1357. .flags = CLK_SET_RATE_PARENT,
  1358. .ops = &clk_branch2_ops,
  1359. },
  1360. },
  1361. };
  1362. static struct clk_branch gcc_sdcc1_ahb_clk = {
  1363. .halt_reg = 0x4201c,
  1364. .clkr = {
  1365. .enable_reg = 0x4201c,
  1366. .enable_mask = BIT(0),
  1367. .hw.init = &(struct clk_init_data){
  1368. .name = "gcc_sdcc1_ahb_clk",
  1369. .flags = CLK_SET_RATE_PARENT,
  1370. .ops = &clk_branch2_ops,
  1371. },
  1372. },
  1373. };
  1374. static struct clk_branch gcc_sdcc1_apps_clk = {
  1375. .halt_reg = 0x42018,
  1376. .clkr = {
  1377. .enable_reg = 0x42018,
  1378. .enable_mask = BIT(0),
  1379. .hw.init = &(struct clk_init_data){
  1380. .name = "gcc_sdcc1_apps_clk",
  1381. .parent_hws = (const struct clk_hw *[]){ &sdcc1_apps_clk_src.clkr.hw },
  1382. .num_parents = 1,
  1383. .flags = CLK_SET_RATE_PARENT,
  1384. .ops = &clk_branch2_ops,
  1385. },
  1386. },
  1387. };
  1388. static struct clk_branch gcc_sdcc2_ahb_clk = {
  1389. .halt_reg = 0x4301c,
  1390. .clkr = {
  1391. .enable_reg = 0x4301c,
  1392. .enable_mask = BIT(0),
  1393. .hw.init = &(struct clk_init_data){
  1394. .name = "gcc_sdcc2_ahb_clk",
  1395. .flags = CLK_SET_RATE_PARENT,
  1396. .ops = &clk_branch2_ops,
  1397. },
  1398. },
  1399. };
  1400. static struct clk_branch gcc_sdcc2_apps_clk = {
  1401. .halt_reg = 0x43018,
  1402. .clkr = {
  1403. .enable_reg = 0x43018,
  1404. .enable_mask = BIT(0),
  1405. .hw.init = &(struct clk_init_data){
  1406. .name = "gcc_sdcc2_apps_clk",
  1407. .parent_hws = (const struct clk_hw *[]){ &sdcc2_apps_clk_src.clkr.hw },
  1408. .num_parents = 1,
  1409. .flags = CLK_SET_RATE_PARENT,
  1410. .ops = &clk_branch2_ops,
  1411. },
  1412. },
  1413. };
  1414. static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
  1415. .halt_reg = 0x49004,
  1416. .clkr = {
  1417. .enable_reg = 0x49004,
  1418. .enable_mask = BIT(0),
  1419. .hw.init = &(struct clk_init_data){
  1420. .name = "gcc_mss_q6_bimc_axi_clk",
  1421. .ops = &clk_branch2_ops,
  1422. },
  1423. },
  1424. };
  1425. static struct clk_branch gcc_apss_tcu_clk = {
  1426. .halt_reg = 0x12018,
  1427. .halt_check = BRANCH_HALT_VOTED,
  1428. .clkr = {
  1429. .enable_reg = 0x4500c,
  1430. .enable_mask = BIT(1),
  1431. .hw.init = &(struct clk_init_data){
  1432. .name = "gcc_apss_tcu_clk",
  1433. .ops = &clk_branch2_ops,
  1434. },
  1435. },
  1436. };
  1437. static struct clk_branch gcc_smmu_cfg_clk = {
  1438. .halt_reg = 0x12038,
  1439. .halt_check = BRANCH_HALT_VOTED,
  1440. .clkr = {
  1441. .enable_reg = 0x4500c,
  1442. .enable_mask = BIT(12),
  1443. .hw.init = &(struct clk_init_data){
  1444. .name = "gcc_smmu_cfg_clk",
  1445. .flags = CLK_SET_RATE_PARENT,
  1446. .ops = &clk_branch2_ops,
  1447. },
  1448. },
  1449. };
  1450. static struct clk_branch gcc_qdss_dap_clk = {
  1451. .halt_reg = 0x29084,
  1452. .halt_check = BRANCH_HALT_VOTED,
  1453. .clkr = {
  1454. .enable_reg = 0x45004,
  1455. .enable_mask = BIT(19),
  1456. .hw.init = &(struct clk_init_data){
  1457. .name = "gcc_qdss_dap_clk",
  1458. .parent_data = &(const struct clk_parent_data){
  1459. .fw_name = "xo",
  1460. },
  1461. .num_parents = 1,
  1462. .ops = &clk_branch2_ops,
  1463. },
  1464. },
  1465. };
  1466. static struct clk_branch gcc_usb2a_phy_sleep_clk = {
  1467. .halt_reg = 0x4102c,
  1468. .clkr = {
  1469. .enable_reg = 0x4102c,
  1470. .enable_mask = BIT(0),
  1471. .hw.init = &(struct clk_init_data){
  1472. .name = "gcc_usb2a_phy_sleep_clk",
  1473. .parent_data = &(const struct clk_parent_data){
  1474. .fw_name = "sleep_clk",
  1475. },
  1476. .num_parents = 1,
  1477. .flags = CLK_SET_RATE_PARENT,
  1478. .ops = &clk_branch2_ops,
  1479. },
  1480. },
  1481. };
  1482. static struct clk_branch gcc_usb_hs_phy_cfg_ahb_clk = {
  1483. .halt_reg = 0x41030,
  1484. .halt_check = BRANCH_HALT,
  1485. .clkr = {
  1486. .enable_reg = 0x41030,
  1487. .enable_mask = BIT(0),
  1488. .hw.init = &(struct clk_init_data){
  1489. .name = "gcc_usb_hs_phy_cfg_ahb_clk",
  1490. .flags = CLK_SET_RATE_PARENT,
  1491. .ops = &clk_branch2_ops,
  1492. },
  1493. },
  1494. };
  1495. static struct clk_branch gcc_usb_hs_ahb_clk = {
  1496. .halt_reg = 0x41008,
  1497. .clkr = {
  1498. .enable_reg = 0x41008,
  1499. .enable_mask = BIT(0),
  1500. .hw.init = &(struct clk_init_data){
  1501. .name = "gcc_usb_hs_ahb_clk",
  1502. .flags = CLK_SET_RATE_PARENT,
  1503. .ops = &clk_branch2_ops,
  1504. },
  1505. },
  1506. };
  1507. static struct clk_branch gcc_usb_hs_system_clk = {
  1508. .halt_reg = 0x41004,
  1509. .clkr = {
  1510. .enable_reg = 0x41004,
  1511. .enable_mask = BIT(0),
  1512. .hw.init = &(struct clk_init_data){
  1513. .name = "gcc_usb_hs_system_clk",
  1514. .parent_hws = (const struct clk_hw *[]){ &usb_hs_system_clk_src.clkr.hw },
  1515. .num_parents = 1,
  1516. .flags = CLK_SET_RATE_PARENT,
  1517. .ops = &clk_branch2_ops,
  1518. },
  1519. },
  1520. };
  1521. static struct clk_branch gcc_apss_ahb_clk = {
  1522. .halt_reg = 0x4601c,
  1523. .halt_check = BRANCH_HALT_VOTED,
  1524. .clkr = {
  1525. .enable_reg = 0x45004,
  1526. .enable_mask = BIT(14),
  1527. .hw.init = &(struct clk_init_data){
  1528. .name = "gcc_apss_ahb_clk",
  1529. .ops = &clk_branch2_ops,
  1530. },
  1531. },
  1532. };
  1533. static struct clk_branch gcc_apss_axi_clk = {
  1534. .halt_reg = 0x4601c,
  1535. .halt_check = BRANCH_HALT_VOTED,
  1536. .clkr = {
  1537. .enable_reg = 0x45004,
  1538. .enable_mask = BIT(13),
  1539. .hw.init = &(struct clk_init_data){
  1540. .name = "gcc_apss_axi_clk",
  1541. .ops = &clk_branch2_ops,
  1542. },
  1543. },
  1544. };
  1545. static struct clk_branch gcc_emac_0_125m_clk = {
  1546. .halt_reg = 0x4e010,
  1547. .halt_check = BRANCH_HALT,
  1548. .clkr = {
  1549. .enable_reg = 0x4e010,
  1550. .enable_mask = BIT(0),
  1551. .hw.init = &(struct clk_init_data){
  1552. .name = "gcc_emac_0_125m_clk",
  1553. .parent_hws = (const struct clk_hw *[]){ &emac_0_125m_clk_src.clkr.hw },
  1554. .num_parents = 1,
  1555. .flags = CLK_SET_RATE_PARENT,
  1556. .ops = &clk_branch2_ops,
  1557. },
  1558. },
  1559. };
  1560. static struct clk_branch gcc_emac_0_ahb_clk = {
  1561. .halt_reg = 0x4e000,
  1562. .halt_check = BRANCH_HALT,
  1563. .clkr = {
  1564. .enable_reg = 0x4e000,
  1565. .enable_mask = BIT(0),
  1566. .hw.init = &(struct clk_init_data){
  1567. .name = "gcc_emac_0_ahb_clk",
  1568. .ops = &clk_branch2_ops,
  1569. },
  1570. },
  1571. };
  1572. static struct clk_branch gcc_emac_0_axi_clk = {
  1573. .halt_reg = 0x4e008,
  1574. .halt_check = BRANCH_HALT,
  1575. .clkr = {
  1576. .enable_reg = 0x4e008,
  1577. .enable_mask = BIT(0),
  1578. .hw.init = &(struct clk_init_data){
  1579. .name = "gcc_emac_0_axi_clk",
  1580. .ops = &clk_branch2_ops,
  1581. },
  1582. },
  1583. };
  1584. static struct clk_branch gcc_emac_0_sys_25m_clk = {
  1585. .halt_reg = 0x4e038,
  1586. .halt_check = BRANCH_HALT,
  1587. .clkr = {
  1588. .enable_reg = 0x4e038,
  1589. .enable_mask = BIT(0),
  1590. .hw.init = &(struct clk_init_data){
  1591. .name = "gcc_emac_0_sys_25m_clk",
  1592. .parent_hws = (const struct clk_hw *[]){ &emac_0_125m_clk_src.clkr.hw },
  1593. .num_parents = 1,
  1594. .flags = CLK_SET_RATE_PARENT,
  1595. .ops = &clk_branch2_ops,
  1596. },
  1597. },
  1598. };
  1599. static struct clk_branch gcc_emac_0_sys_clk = {
  1600. .halt_reg = 0x4e034,
  1601. .halt_check = BRANCH_HALT,
  1602. .clkr = {
  1603. .enable_reg = 0x4e034,
  1604. .enable_mask = BIT(0),
  1605. .hw.init = &(struct clk_init_data){
  1606. .name = "gcc_emac_0_sys_clk",
  1607. .parent_hws = (const struct clk_hw *[]){ &emac_0_125m_clk_src.clkr.hw },
  1608. .num_parents = 1,
  1609. .flags = CLK_SET_RATE_PARENT,
  1610. .ops = &clk_branch2_ops,
  1611. },
  1612. },
  1613. };
  1614. static struct clk_branch gcc_emac_0_tx_clk = {
  1615. .halt_reg = 0x4e00c,
  1616. .halt_check = BRANCH_HALT,
  1617. .clkr = {
  1618. .enable_reg = 0x4e00c,
  1619. .enable_mask = BIT(0),
  1620. .hw.init = &(struct clk_init_data){
  1621. .name = "gcc_emac_0_tx_clk",
  1622. .parent_hws = (const struct clk_hw *[]){ &emac_0_tx_clk_src.clkr.hw },
  1623. .num_parents = 1,
  1624. .flags = CLK_SET_RATE_PARENT,
  1625. .ops = &clk_branch2_ops,
  1626. },
  1627. },
  1628. };
  1629. static struct clk_branch gcc_emac_0_rx_clk = {
  1630. .halt_reg = 0x4e030,
  1631. .halt_check = BRANCH_HALT_DELAY,
  1632. .clkr = {
  1633. .enable_reg = 0x4e030,
  1634. .enable_mask = BIT(0),
  1635. .hw.init = &(struct clk_init_data){
  1636. .name = "gcc_emac_0_rx_clk",
  1637. .ops = &clk_branch2_ops,
  1638. },
  1639. },
  1640. };
  1641. static struct clk_branch gcc_usb_hsic_ahb_clk = {
  1642. .halt_reg = 0X3d04c,
  1643. .halt_check = BRANCH_HALT,
  1644. .clkr = {
  1645. .enable_reg = 0X3d04c,
  1646. .enable_mask = BIT(0),
  1647. .hw.init = &(struct clk_init_data){
  1648. .name = "gcc_usb_hsic_ahb_clk",
  1649. .ops = &clk_branch2_ops,
  1650. },
  1651. },
  1652. };
  1653. static struct clk_branch gcc_usb_hsic_clk = {
  1654. .halt_reg = 0x3d050,
  1655. .halt_check = BRANCH_HALT,
  1656. .clkr = {
  1657. .enable_reg = 0x3d050,
  1658. .enable_mask = BIT(0),
  1659. .hw.init = &(struct clk_init_data){
  1660. .name = "gcc_usb_hsic_clk",
  1661. .parent_hws = (const struct clk_hw *[]){ &usb_hsic_clk_src.clkr.hw },
  1662. .num_parents = 1,
  1663. .flags = CLK_SET_RATE_PARENT,
  1664. .ops = &clk_branch2_ops,
  1665. },
  1666. },
  1667. };
  1668. static struct clk_branch gcc_usb_hsic_io_cal_clk = {
  1669. .halt_reg = 0x3d054,
  1670. .halt_check = BRANCH_HALT,
  1671. .clkr = {
  1672. .enable_reg = 0x3d054,
  1673. .enable_mask = BIT(0),
  1674. .hw.init = &(struct clk_init_data){
  1675. .name = "gcc_usb_hsic_io_cal_clk",
  1676. .parent_hws = (const struct clk_hw *[]){ &usb_hsic_io_cal_clk_src.clkr.hw },
  1677. .num_parents = 1,
  1678. .flags = CLK_SET_RATE_PARENT,
  1679. .ops = &clk_branch2_ops,
  1680. },
  1681. },
  1682. };
  1683. static struct clk_branch gcc_usb_hsic_io_cal_sleep_clk = {
  1684. .halt_reg = 0x3d058,
  1685. .halt_check = BRANCH_HALT,
  1686. .clkr = {
  1687. .enable_reg = 0x3d058,
  1688. .enable_mask = BIT(0),
  1689. .hw.init = &(struct clk_init_data){
  1690. .name = "gcc_usb_hsic_io_cal_sleep_clk",
  1691. .ops = &clk_branch2_ops,
  1692. },
  1693. },
  1694. };
  1695. static struct clk_branch gcc_usb_hsic_system_clk = {
  1696. .halt_reg = 0x3d048,
  1697. .halt_check = BRANCH_HALT,
  1698. .clkr = {
  1699. .enable_reg = 0x3d048,
  1700. .enable_mask = BIT(0),
  1701. .hw.init = &(struct clk_init_data){
  1702. .name = "gcc_usb_hsic_system_clk",
  1703. .parent_hws = (const struct clk_hw *[]){ &usb_hsic_system_clk_src.clkr.hw },
  1704. .num_parents = 1,
  1705. .flags = CLK_SET_RATE_PARENT,
  1706. .ops = &clk_branch2_ops,
  1707. },
  1708. },
  1709. };
  1710. static struct clk_branch gcc_usb2_hs_phy_only_clk = {
  1711. .halt_reg = 0x41034,
  1712. .halt_check = BRANCH_HALT,
  1713. .clkr = {
  1714. .enable_reg = 0x41034,
  1715. .enable_mask = BIT(0),
  1716. .hw.init = &(struct clk_init_data){
  1717. .name = "gcc_usb2_hs_phy_only_clk",
  1718. .ops = &clk_branch2_ops,
  1719. },
  1720. },
  1721. };
  1722. static struct clk_branch gcc_qusb2_phy_clk = {
  1723. .halt_reg = 0x4103C,
  1724. .halt_check = BRANCH_HALT,
  1725. .clkr = {
  1726. .enable_reg = 0x4103C,
  1727. .enable_mask = BIT(0),
  1728. .hw.init = &(struct clk_init_data){
  1729. .name = "gcc_usb2_phy_clk",
  1730. .ops = &clk_branch2_ops,
  1731. },
  1732. },
  1733. };
  1734. static struct clk_regmap *gcc_mdm9607_clocks[] = {
  1735. [GPLL0] = &gpll0.clkr,
  1736. [GPLL0_EARLY] = &gpll0_early.clkr,
  1737. [GPLL0_AO] = &gpll0_ao.clkr,
  1738. [GPLL1] = &gpll1.clkr,
  1739. [GPLL1_VOTE] = &gpll1_vote,
  1740. [GPLL2] = &gpll2.clkr,
  1741. [GPLL2_EARLY] = &gpll2_early.clkr,
  1742. [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
  1743. [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
  1744. [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
  1745. [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
  1746. [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
  1747. [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
  1748. [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
  1749. [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
  1750. [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
  1751. [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
  1752. [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
  1753. [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
  1754. [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
  1755. [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
  1756. [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
  1757. [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
  1758. [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
  1759. [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
  1760. [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
  1761. [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
  1762. [GP1_CLK_SRC] = &gp1_clk_src.clkr,
  1763. [GP2_CLK_SRC] = &gp2_clk_src.clkr,
  1764. [GP3_CLK_SRC] = &gp3_clk_src.clkr,
  1765. [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
  1766. [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
  1767. [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
  1768. [APSS_TCU_CLK_SRC] = &apss_tcu_clk_src.clkr,
  1769. [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
  1770. [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
  1771. [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
  1772. [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
  1773. [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
  1774. [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
  1775. [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
  1776. [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
  1777. [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
  1778. [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
  1779. [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
  1780. [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
  1781. [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
  1782. [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
  1783. [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
  1784. [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
  1785. [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
  1786. [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
  1787. [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
  1788. [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
  1789. [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
  1790. [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
  1791. [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
  1792. [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
  1793. [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
  1794. [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
  1795. [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
  1796. [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
  1797. [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
  1798. [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
  1799. [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
  1800. [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
  1801. [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
  1802. [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
  1803. [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
  1804. [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
  1805. [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
  1806. [GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,
  1807. [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
  1808. [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
  1809. [GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
  1810. [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
  1811. [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
  1812. [GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,
  1813. [GCC_APSS_AXI_CLK] = &gcc_apss_axi_clk.clkr,
  1814. [EMAC_0_SYS_25M_CLK_SRC] = &emac_0_sys_25m_clk_src.clkr,
  1815. [EMAC_0_TX_CLK_SRC] = &emac_0_tx_clk_src.clkr,
  1816. [GCC_EMAC_0_125M_CLK] = &gcc_emac_0_125m_clk.clkr,
  1817. [GCC_EMAC_0_AHB_CLK] = &gcc_emac_0_ahb_clk.clkr,
  1818. [GCC_EMAC_0_AXI_CLK] = &gcc_emac_0_axi_clk.clkr,
  1819. [GCC_EMAC_0_SYS_25M_CLK] = &gcc_emac_0_sys_25m_clk.clkr,
  1820. [GCC_EMAC_0_SYS_CLK] = &gcc_emac_0_sys_clk.clkr,
  1821. [GCC_EMAC_0_TX_CLK] = &gcc_emac_0_tx_clk.clkr,
  1822. [GCC_EMAC_0_RX_CLK] = &gcc_emac_0_rx_clk.clkr,
  1823. [USB_HSIC_CLK_SRC] = &usb_hsic_clk_src.clkr,
  1824. [USB_HSIC_IO_CAL_CLK_SRC] = &usb_hsic_io_cal_clk_src.clkr,
  1825. [USB_HSIC_SYSTEM_CLK_SRC] = &usb_hsic_system_clk_src.clkr,
  1826. [GCC_USB_HSIC_AHB_CLK] = &gcc_usb_hsic_ahb_clk.clkr,
  1827. [GCC_USB_HSIC_CLK] = &gcc_usb_hsic_clk.clkr,
  1828. [GCC_USB_HSIC_IO_CAL_CLK] = &gcc_usb_hsic_io_cal_clk.clkr,
  1829. [GCC_USB_HSIC_IO_CAL_SLEEP_CLK] = &gcc_usb_hsic_io_cal_sleep_clk.clkr,
  1830. [GCC_USB_HSIC_SYSTEM_CLK] = &gcc_usb_hsic_system_clk.clkr,
  1831. [GCC_USB2_HS_PHY_ONLY_CLK] = &gcc_usb2_hs_phy_only_clk.clkr,
  1832. [GCC_QUSB2_PHY_CLK] = &gcc_qusb2_phy_clk.clkr,
  1833. };
  1834. static const struct qcom_reset_map gcc_mdm9607_resets[] = {
  1835. [USB_HS_HSIC_BCR] = { 0x3d05c },
  1836. [GCC_MSS_RESTART] = { 0x3e000 },
  1837. [USB_HS_BCR] = { 0x41000 },
  1838. [USB2_HS_PHY_ONLY_BCR] = { 0x41034 },
  1839. [QUSB2_PHY_BCR] = { 0x4103c },
  1840. };
  1841. static const struct regmap_config gcc_mdm9607_regmap_config = {
  1842. .reg_bits = 32,
  1843. .reg_stride = 4,
  1844. .val_bits = 32,
  1845. .max_register = 0x80000,
  1846. .fast_io = true,
  1847. };
  1848. static const struct qcom_cc_desc gcc_mdm9607_desc = {
  1849. .config = &gcc_mdm9607_regmap_config,
  1850. .clks = gcc_mdm9607_clocks,
  1851. .num_clks = ARRAY_SIZE(gcc_mdm9607_clocks),
  1852. .resets = gcc_mdm9607_resets,
  1853. .num_resets = ARRAY_SIZE(gcc_mdm9607_resets),
  1854. };
  1855. static const struct of_device_id gcc_mdm9607_match_table[] = {
  1856. { .compatible = "qcom,gcc-mdm9607" },
  1857. { }
  1858. };
  1859. MODULE_DEVICE_TABLE(of, gcc_mdm9607_match_table);
  1860. static int gcc_mdm9607_probe(struct platform_device *pdev)
  1861. {
  1862. struct regmap *regmap;
  1863. int ret;
  1864. vdd_dig.regulator[0] = devm_regulator_get(&pdev->dev, "vdd_dig");
  1865. if (IS_ERR(vdd_dig.regulator[0])) {
  1866. if (!(PTR_ERR(vdd_dig.regulator[0]) == -EPROBE_DEFER))
  1867. dev_err(&pdev->dev,
  1868. "Unable to get vdd_dig regulator\n");
  1869. return PTR_ERR(vdd_dig.regulator[0]);
  1870. }
  1871. regmap = qcom_cc_map(pdev, &gcc_mdm9607_desc);
  1872. if (IS_ERR(regmap))
  1873. return PTR_ERR(regmap);
  1874. /* Vote for GPLL0 to turn on. Needed by acpuclock. */
  1875. regmap_update_bits(regmap, 0x45000, BIT(0), BIT(0));
  1876. ret = qcom_cc_really_probe(pdev, &gcc_mdm9607_desc, regmap);
  1877. clk_set_rate(apss_ahb_clk_src.clkr.hw.clk, 19200000);
  1878. clk_prepare_enable(apss_ahb_clk_src.clkr.hw.clk);
  1879. return ret;
  1880. }
  1881. static struct platform_driver gcc_mdm9607_driver = {
  1882. .probe = gcc_mdm9607_probe,
  1883. .driver = {
  1884. .name = "gcc-mdm9607",
  1885. .of_match_table = gcc_mdm9607_match_table,
  1886. },
  1887. };
  1888. static int __init gcc_mdm9607_init(void)
  1889. {
  1890. return platform_driver_register(&gcc_mdm9607_driver);
  1891. }
  1892. core_initcall(gcc_mdm9607_init);
  1893. static void __exit gcc_mdm9607_exit(void)
  1894. {
  1895. platform_driver_unregister(&gcc_mdm9607_driver);
  1896. }
  1897. module_exit(gcc_mdm9607_exit);
  1898. MODULE_DESCRIPTION("Qualcomm GCC mdm9607 Driver");
  1899. MODULE_LICENSE("GPL v2");