gcc-msm8974.c 67 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694
  1. /*
  2. * Copyright (c) 2013, The Linux Foundation. All rights reserved.
  3. *
  4. * This software is licensed under the terms of the GNU General Public
  5. * License version 2, as published by the Free Software Foundation, and
  6. * may be copied, distributed, and modified under those terms.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. */
  13. #include <linux/kernel.h>
  14. #include <linux/bitops.h>
  15. #include <linux/err.h>
  16. #include <linux/platform_device.h>
  17. #include <linux/module.h>
  18. #include <linux/of.h>
  19. #include <linux/of_device.h>
  20. #include <linux/clk-provider.h>
  21. #include <linux/regmap.h>
  22. #include <linux/reset-controller.h>
  23. #include <dt-bindings/clock/qcom,gcc-msm8974.h>
  24. #include <dt-bindings/reset/qcom,gcc-msm8974.h>
  25. #include "clk-regmap.h"
  26. #include "clk-pll.h"
  27. #include "clk-rcg.h"
  28. #include "clk-branch.h"
  29. #include "reset.h"
  30. #define P_XO 0
  31. #define P_GPLL0 1
  32. #define P_GPLL1 1
  33. static const u8 gcc_xo_gpll0_map[] = {
  34. [P_XO] = 0,
  35. [P_GPLL0] = 1,
  36. };
  37. static const char *gcc_xo_gpll0[] = {
  38. "xo",
  39. "gpll0_vote",
  40. };
  41. #define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }
  42. static struct clk_pll gpll0 = {
  43. .l_reg = 0x0004,
  44. .m_reg = 0x0008,
  45. .n_reg = 0x000c,
  46. .config_reg = 0x0014,
  47. .mode_reg = 0x0000,
  48. .status_reg = 0x001c,
  49. .status_bit = 17,
  50. .clkr.hw.init = &(struct clk_init_data){
  51. .name = "gpll0",
  52. .parent_names = (const char *[]){ "xo" },
  53. .num_parents = 1,
  54. .ops = &clk_pll_ops,
  55. },
  56. };
  57. static struct clk_regmap gpll0_vote = {
  58. .enable_reg = 0x1480,
  59. .enable_mask = BIT(0),
  60. .hw.init = &(struct clk_init_data){
  61. .name = "gpll0_vote",
  62. .parent_names = (const char *[]){ "gpll0" },
  63. .num_parents = 1,
  64. .ops = &clk_pll_vote_ops,
  65. },
  66. };
  67. static struct clk_rcg2 config_noc_clk_src = {
  68. .cmd_rcgr = 0x0150,
  69. .hid_width = 5,
  70. .parent_map = gcc_xo_gpll0_map,
  71. .clkr.hw.init = &(struct clk_init_data){
  72. .name = "config_noc_clk_src",
  73. .parent_names = gcc_xo_gpll0,
  74. .num_parents = 2,
  75. .ops = &clk_rcg2_ops,
  76. },
  77. };
  78. static struct clk_rcg2 periph_noc_clk_src = {
  79. .cmd_rcgr = 0x0190,
  80. .hid_width = 5,
  81. .parent_map = gcc_xo_gpll0_map,
  82. .clkr.hw.init = &(struct clk_init_data){
  83. .name = "periph_noc_clk_src",
  84. .parent_names = gcc_xo_gpll0,
  85. .num_parents = 2,
  86. .ops = &clk_rcg2_ops,
  87. },
  88. };
  89. static struct clk_rcg2 system_noc_clk_src = {
  90. .cmd_rcgr = 0x0120,
  91. .hid_width = 5,
  92. .parent_map = gcc_xo_gpll0_map,
  93. .clkr.hw.init = &(struct clk_init_data){
  94. .name = "system_noc_clk_src",
  95. .parent_names = gcc_xo_gpll0,
  96. .num_parents = 2,
  97. .ops = &clk_rcg2_ops,
  98. },
  99. };
  100. static struct clk_pll gpll1 = {
  101. .l_reg = 0x0044,
  102. .m_reg = 0x0048,
  103. .n_reg = 0x004c,
  104. .config_reg = 0x0054,
  105. .mode_reg = 0x0040,
  106. .status_reg = 0x005c,
  107. .status_bit = 17,
  108. .clkr.hw.init = &(struct clk_init_data){
  109. .name = "gpll1",
  110. .parent_names = (const char *[]){ "xo" },
  111. .num_parents = 1,
  112. .ops = &clk_pll_ops,
  113. },
  114. };
  115. static struct clk_regmap gpll1_vote = {
  116. .enable_reg = 0x1480,
  117. .enable_mask = BIT(1),
  118. .hw.init = &(struct clk_init_data){
  119. .name = "gpll1_vote",
  120. .parent_names = (const char *[]){ "gpll1" },
  121. .num_parents = 1,
  122. .ops = &clk_pll_vote_ops,
  123. },
  124. };
  125. static const struct freq_tbl ftbl_gcc_usb30_master_clk[] = {
  126. F(125000000, P_GPLL0, 1, 5, 24),
  127. { }
  128. };
  129. static struct clk_rcg2 usb30_master_clk_src = {
  130. .cmd_rcgr = 0x03d4,
  131. .mnd_width = 8,
  132. .hid_width = 5,
  133. .parent_map = gcc_xo_gpll0_map,
  134. .freq_tbl = ftbl_gcc_usb30_master_clk,
  135. .clkr.hw.init = &(struct clk_init_data){
  136. .name = "usb30_master_clk_src",
  137. .parent_names = gcc_xo_gpll0,
  138. .num_parents = 2,
  139. .ops = &clk_rcg2_ops,
  140. },
  141. };
  142. static const struct freq_tbl ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk[] = {
  143. F(19200000, P_XO, 1, 0, 0),
  144. F(37500000, P_GPLL0, 16, 0, 0),
  145. F(50000000, P_GPLL0, 12, 0, 0),
  146. { }
  147. };
  148. static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
  149. .cmd_rcgr = 0x0660,
  150. .hid_width = 5,
  151. .parent_map = gcc_xo_gpll0_map,
  152. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
  153. .clkr.hw.init = &(struct clk_init_data){
  154. .name = "blsp1_qup1_i2c_apps_clk_src",
  155. .parent_names = gcc_xo_gpll0,
  156. .num_parents = 2,
  157. .ops = &clk_rcg2_ops,
  158. },
  159. };
  160. static const struct freq_tbl ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk[] = {
  161. F(960000, P_XO, 10, 1, 2),
  162. F(4800000, P_XO, 4, 0, 0),
  163. F(9600000, P_XO, 2, 0, 0),
  164. F(15000000, P_GPLL0, 10, 1, 4),
  165. F(19200000, P_XO, 1, 0, 0),
  166. F(25000000, P_GPLL0, 12, 1, 2),
  167. F(50000000, P_GPLL0, 12, 0, 0),
  168. { }
  169. };
  170. static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
  171. .cmd_rcgr = 0x064c,
  172. .mnd_width = 8,
  173. .hid_width = 5,
  174. .parent_map = gcc_xo_gpll0_map,
  175. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
  176. .clkr.hw.init = &(struct clk_init_data){
  177. .name = "blsp1_qup1_spi_apps_clk_src",
  178. .parent_names = gcc_xo_gpll0,
  179. .num_parents = 2,
  180. .ops = &clk_rcg2_ops,
  181. },
  182. };
  183. static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
  184. .cmd_rcgr = 0x06e0,
  185. .hid_width = 5,
  186. .parent_map = gcc_xo_gpll0_map,
  187. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
  188. .clkr.hw.init = &(struct clk_init_data){
  189. .name = "blsp1_qup2_i2c_apps_clk_src",
  190. .parent_names = gcc_xo_gpll0,
  191. .num_parents = 2,
  192. .ops = &clk_rcg2_ops,
  193. },
  194. };
  195. static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
  196. .cmd_rcgr = 0x06cc,
  197. .mnd_width = 8,
  198. .hid_width = 5,
  199. .parent_map = gcc_xo_gpll0_map,
  200. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
  201. .clkr.hw.init = &(struct clk_init_data){
  202. .name = "blsp1_qup2_spi_apps_clk_src",
  203. .parent_names = gcc_xo_gpll0,
  204. .num_parents = 2,
  205. .ops = &clk_rcg2_ops,
  206. },
  207. };
  208. static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
  209. .cmd_rcgr = 0x0760,
  210. .hid_width = 5,
  211. .parent_map = gcc_xo_gpll0_map,
  212. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
  213. .clkr.hw.init = &(struct clk_init_data){
  214. .name = "blsp1_qup3_i2c_apps_clk_src",
  215. .parent_names = gcc_xo_gpll0,
  216. .num_parents = 2,
  217. .ops = &clk_rcg2_ops,
  218. },
  219. };
  220. static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
  221. .cmd_rcgr = 0x074c,
  222. .mnd_width = 8,
  223. .hid_width = 5,
  224. .parent_map = gcc_xo_gpll0_map,
  225. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
  226. .clkr.hw.init = &(struct clk_init_data){
  227. .name = "blsp1_qup3_spi_apps_clk_src",
  228. .parent_names = gcc_xo_gpll0,
  229. .num_parents = 2,
  230. .ops = &clk_rcg2_ops,
  231. },
  232. };
  233. static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
  234. .cmd_rcgr = 0x07e0,
  235. .hid_width = 5,
  236. .parent_map = gcc_xo_gpll0_map,
  237. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
  238. .clkr.hw.init = &(struct clk_init_data){
  239. .name = "blsp1_qup4_i2c_apps_clk_src",
  240. .parent_names = gcc_xo_gpll0,
  241. .num_parents = 2,
  242. .ops = &clk_rcg2_ops,
  243. },
  244. };
  245. static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
  246. .cmd_rcgr = 0x07cc,
  247. .mnd_width = 8,
  248. .hid_width = 5,
  249. .parent_map = gcc_xo_gpll0_map,
  250. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
  251. .clkr.hw.init = &(struct clk_init_data){
  252. .name = "blsp1_qup4_spi_apps_clk_src",
  253. .parent_names = gcc_xo_gpll0,
  254. .num_parents = 2,
  255. .ops = &clk_rcg2_ops,
  256. },
  257. };
  258. static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
  259. .cmd_rcgr = 0x0860,
  260. .hid_width = 5,
  261. .parent_map = gcc_xo_gpll0_map,
  262. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
  263. .clkr.hw.init = &(struct clk_init_data){
  264. .name = "blsp1_qup5_i2c_apps_clk_src",
  265. .parent_names = gcc_xo_gpll0,
  266. .num_parents = 2,
  267. .ops = &clk_rcg2_ops,
  268. },
  269. };
  270. static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
  271. .cmd_rcgr = 0x084c,
  272. .mnd_width = 8,
  273. .hid_width = 5,
  274. .parent_map = gcc_xo_gpll0_map,
  275. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
  276. .clkr.hw.init = &(struct clk_init_data){
  277. .name = "blsp1_qup5_spi_apps_clk_src",
  278. .parent_names = gcc_xo_gpll0,
  279. .num_parents = 2,
  280. .ops = &clk_rcg2_ops,
  281. },
  282. };
  283. static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
  284. .cmd_rcgr = 0x08e0,
  285. .hid_width = 5,
  286. .parent_map = gcc_xo_gpll0_map,
  287. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
  288. .clkr.hw.init = &(struct clk_init_data){
  289. .name = "blsp1_qup6_i2c_apps_clk_src",
  290. .parent_names = gcc_xo_gpll0,
  291. .num_parents = 2,
  292. .ops = &clk_rcg2_ops,
  293. },
  294. };
  295. static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
  296. .cmd_rcgr = 0x08cc,
  297. .mnd_width = 8,
  298. .hid_width = 5,
  299. .parent_map = gcc_xo_gpll0_map,
  300. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
  301. .clkr.hw.init = &(struct clk_init_data){
  302. .name = "blsp1_qup6_spi_apps_clk_src",
  303. .parent_names = gcc_xo_gpll0,
  304. .num_parents = 2,
  305. .ops = &clk_rcg2_ops,
  306. },
  307. };
  308. static const struct freq_tbl ftbl_gcc_blsp1_2_uart1_6_apps_clk[] = {
  309. F(3686400, P_GPLL0, 1, 96, 15625),
  310. F(7372800, P_GPLL0, 1, 192, 15625),
  311. F(14745600, P_GPLL0, 1, 384, 15625),
  312. F(16000000, P_GPLL0, 5, 2, 15),
  313. F(19200000, P_XO, 1, 0, 0),
  314. F(24000000, P_GPLL0, 5, 1, 5),
  315. F(32000000, P_GPLL0, 1, 4, 75),
  316. F(40000000, P_GPLL0, 15, 0, 0),
  317. F(46400000, P_GPLL0, 1, 29, 375),
  318. F(48000000, P_GPLL0, 12.5, 0, 0),
  319. F(51200000, P_GPLL0, 1, 32, 375),
  320. F(56000000, P_GPLL0, 1, 7, 75),
  321. F(58982400, P_GPLL0, 1, 1536, 15625),
  322. F(60000000, P_GPLL0, 10, 0, 0),
  323. F(63160000, P_GPLL0, 9.5, 0, 0),
  324. { }
  325. };
  326. static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
  327. .cmd_rcgr = 0x068c,
  328. .mnd_width = 16,
  329. .hid_width = 5,
  330. .parent_map = gcc_xo_gpll0_map,
  331. .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
  332. .clkr.hw.init = &(struct clk_init_data){
  333. .name = "blsp1_uart1_apps_clk_src",
  334. .parent_names = gcc_xo_gpll0,
  335. .num_parents = 2,
  336. .ops = &clk_rcg2_ops,
  337. },
  338. };
  339. static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
  340. .cmd_rcgr = 0x070c,
  341. .mnd_width = 16,
  342. .hid_width = 5,
  343. .parent_map = gcc_xo_gpll0_map,
  344. .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
  345. .clkr.hw.init = &(struct clk_init_data){
  346. .name = "blsp1_uart2_apps_clk_src",
  347. .parent_names = gcc_xo_gpll0,
  348. .num_parents = 2,
  349. .ops = &clk_rcg2_ops,
  350. },
  351. };
  352. static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
  353. .cmd_rcgr = 0x078c,
  354. .mnd_width = 16,
  355. .hid_width = 5,
  356. .parent_map = gcc_xo_gpll0_map,
  357. .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
  358. .clkr.hw.init = &(struct clk_init_data){
  359. .name = "blsp1_uart3_apps_clk_src",
  360. .parent_names = gcc_xo_gpll0,
  361. .num_parents = 2,
  362. .ops = &clk_rcg2_ops,
  363. },
  364. };
  365. static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
  366. .cmd_rcgr = 0x080c,
  367. .mnd_width = 16,
  368. .hid_width = 5,
  369. .parent_map = gcc_xo_gpll0_map,
  370. .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
  371. .clkr.hw.init = &(struct clk_init_data){
  372. .name = "blsp1_uart4_apps_clk_src",
  373. .parent_names = gcc_xo_gpll0,
  374. .num_parents = 2,
  375. .ops = &clk_rcg2_ops,
  376. },
  377. };
  378. static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
  379. .cmd_rcgr = 0x088c,
  380. .mnd_width = 16,
  381. .hid_width = 5,
  382. .parent_map = gcc_xo_gpll0_map,
  383. .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
  384. .clkr.hw.init = &(struct clk_init_data){
  385. .name = "blsp1_uart5_apps_clk_src",
  386. .parent_names = gcc_xo_gpll0,
  387. .num_parents = 2,
  388. .ops = &clk_rcg2_ops,
  389. },
  390. };
  391. static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
  392. .cmd_rcgr = 0x090c,
  393. .mnd_width = 16,
  394. .hid_width = 5,
  395. .parent_map = gcc_xo_gpll0_map,
  396. .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
  397. .clkr.hw.init = &(struct clk_init_data){
  398. .name = "blsp1_uart6_apps_clk_src",
  399. .parent_names = gcc_xo_gpll0,
  400. .num_parents = 2,
  401. .ops = &clk_rcg2_ops,
  402. },
  403. };
  404. static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
  405. .cmd_rcgr = 0x09a0,
  406. .hid_width = 5,
  407. .parent_map = gcc_xo_gpll0_map,
  408. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
  409. .clkr.hw.init = &(struct clk_init_data){
  410. .name = "blsp2_qup1_i2c_apps_clk_src",
  411. .parent_names = gcc_xo_gpll0,
  412. .num_parents = 2,
  413. .ops = &clk_rcg2_ops,
  414. },
  415. };
  416. static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
  417. .cmd_rcgr = 0x098c,
  418. .mnd_width = 8,
  419. .hid_width = 5,
  420. .parent_map = gcc_xo_gpll0_map,
  421. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
  422. .clkr.hw.init = &(struct clk_init_data){
  423. .name = "blsp2_qup1_spi_apps_clk_src",
  424. .parent_names = gcc_xo_gpll0,
  425. .num_parents = 2,
  426. .ops = &clk_rcg2_ops,
  427. },
  428. };
  429. static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
  430. .cmd_rcgr = 0x0a20,
  431. .hid_width = 5,
  432. .parent_map = gcc_xo_gpll0_map,
  433. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
  434. .clkr.hw.init = &(struct clk_init_data){
  435. .name = "blsp2_qup2_i2c_apps_clk_src",
  436. .parent_names = gcc_xo_gpll0,
  437. .num_parents = 2,
  438. .ops = &clk_rcg2_ops,
  439. },
  440. };
  441. static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
  442. .cmd_rcgr = 0x0a0c,
  443. .mnd_width = 8,
  444. .hid_width = 5,
  445. .parent_map = gcc_xo_gpll0_map,
  446. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
  447. .clkr.hw.init = &(struct clk_init_data){
  448. .name = "blsp2_qup2_spi_apps_clk_src",
  449. .parent_names = gcc_xo_gpll0,
  450. .num_parents = 2,
  451. .ops = &clk_rcg2_ops,
  452. },
  453. };
  454. static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
  455. .cmd_rcgr = 0x0aa0,
  456. .hid_width = 5,
  457. .parent_map = gcc_xo_gpll0_map,
  458. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
  459. .clkr.hw.init = &(struct clk_init_data){
  460. .name = "blsp2_qup3_i2c_apps_clk_src",
  461. .parent_names = gcc_xo_gpll0,
  462. .num_parents = 2,
  463. .ops = &clk_rcg2_ops,
  464. },
  465. };
  466. static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
  467. .cmd_rcgr = 0x0a8c,
  468. .mnd_width = 8,
  469. .hid_width = 5,
  470. .parent_map = gcc_xo_gpll0_map,
  471. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
  472. .clkr.hw.init = &(struct clk_init_data){
  473. .name = "blsp2_qup3_spi_apps_clk_src",
  474. .parent_names = gcc_xo_gpll0,
  475. .num_parents = 2,
  476. .ops = &clk_rcg2_ops,
  477. },
  478. };
  479. static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
  480. .cmd_rcgr = 0x0b20,
  481. .hid_width = 5,
  482. .parent_map = gcc_xo_gpll0_map,
  483. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
  484. .clkr.hw.init = &(struct clk_init_data){
  485. .name = "blsp2_qup4_i2c_apps_clk_src",
  486. .parent_names = gcc_xo_gpll0,
  487. .num_parents = 2,
  488. .ops = &clk_rcg2_ops,
  489. },
  490. };
  491. static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
  492. .cmd_rcgr = 0x0b0c,
  493. .mnd_width = 8,
  494. .hid_width = 5,
  495. .parent_map = gcc_xo_gpll0_map,
  496. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
  497. .clkr.hw.init = &(struct clk_init_data){
  498. .name = "blsp2_qup4_spi_apps_clk_src",
  499. .parent_names = gcc_xo_gpll0,
  500. .num_parents = 2,
  501. .ops = &clk_rcg2_ops,
  502. },
  503. };
  504. static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = {
  505. .cmd_rcgr = 0x0ba0,
  506. .hid_width = 5,
  507. .parent_map = gcc_xo_gpll0_map,
  508. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
  509. .clkr.hw.init = &(struct clk_init_data){
  510. .name = "blsp2_qup5_i2c_apps_clk_src",
  511. .parent_names = gcc_xo_gpll0,
  512. .num_parents = 2,
  513. .ops = &clk_rcg2_ops,
  514. },
  515. };
  516. static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = {
  517. .cmd_rcgr = 0x0b8c,
  518. .mnd_width = 8,
  519. .hid_width = 5,
  520. .parent_map = gcc_xo_gpll0_map,
  521. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
  522. .clkr.hw.init = &(struct clk_init_data){
  523. .name = "blsp2_qup5_spi_apps_clk_src",
  524. .parent_names = gcc_xo_gpll0,
  525. .num_parents = 2,
  526. .ops = &clk_rcg2_ops,
  527. },
  528. };
  529. static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
  530. .cmd_rcgr = 0x0c20,
  531. .hid_width = 5,
  532. .parent_map = gcc_xo_gpll0_map,
  533. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
  534. .clkr.hw.init = &(struct clk_init_data){
  535. .name = "blsp2_qup6_i2c_apps_clk_src",
  536. .parent_names = gcc_xo_gpll0,
  537. .num_parents = 2,
  538. .ops = &clk_rcg2_ops,
  539. },
  540. };
  541. static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = {
  542. .cmd_rcgr = 0x0c0c,
  543. .mnd_width = 8,
  544. .hid_width = 5,
  545. .parent_map = gcc_xo_gpll0_map,
  546. .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
  547. .clkr.hw.init = &(struct clk_init_data){
  548. .name = "blsp2_qup6_spi_apps_clk_src",
  549. .parent_names = gcc_xo_gpll0,
  550. .num_parents = 2,
  551. .ops = &clk_rcg2_ops,
  552. },
  553. };
  554. static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
  555. .cmd_rcgr = 0x09cc,
  556. .mnd_width = 16,
  557. .hid_width = 5,
  558. .parent_map = gcc_xo_gpll0_map,
  559. .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
  560. .clkr.hw.init = &(struct clk_init_data){
  561. .name = "blsp2_uart1_apps_clk_src",
  562. .parent_names = gcc_xo_gpll0,
  563. .num_parents = 2,
  564. .ops = &clk_rcg2_ops,
  565. },
  566. };
  567. static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
  568. .cmd_rcgr = 0x0a4c,
  569. .mnd_width = 16,
  570. .hid_width = 5,
  571. .parent_map = gcc_xo_gpll0_map,
  572. .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
  573. .clkr.hw.init = &(struct clk_init_data){
  574. .name = "blsp2_uart2_apps_clk_src",
  575. .parent_names = gcc_xo_gpll0,
  576. .num_parents = 2,
  577. .ops = &clk_rcg2_ops,
  578. },
  579. };
  580. static struct clk_rcg2 blsp2_uart3_apps_clk_src = {
  581. .cmd_rcgr = 0x0acc,
  582. .mnd_width = 16,
  583. .hid_width = 5,
  584. .parent_map = gcc_xo_gpll0_map,
  585. .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
  586. .clkr.hw.init = &(struct clk_init_data){
  587. .name = "blsp2_uart3_apps_clk_src",
  588. .parent_names = gcc_xo_gpll0,
  589. .num_parents = 2,
  590. .ops = &clk_rcg2_ops,
  591. },
  592. };
  593. static struct clk_rcg2 blsp2_uart4_apps_clk_src = {
  594. .cmd_rcgr = 0x0b4c,
  595. .mnd_width = 16,
  596. .hid_width = 5,
  597. .parent_map = gcc_xo_gpll0_map,
  598. .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
  599. .clkr.hw.init = &(struct clk_init_data){
  600. .name = "blsp2_uart4_apps_clk_src",
  601. .parent_names = gcc_xo_gpll0,
  602. .num_parents = 2,
  603. .ops = &clk_rcg2_ops,
  604. },
  605. };
  606. static struct clk_rcg2 blsp2_uart5_apps_clk_src = {
  607. .cmd_rcgr = 0x0bcc,
  608. .mnd_width = 16,
  609. .hid_width = 5,
  610. .parent_map = gcc_xo_gpll0_map,
  611. .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
  612. .clkr.hw.init = &(struct clk_init_data){
  613. .name = "blsp2_uart5_apps_clk_src",
  614. .parent_names = gcc_xo_gpll0,
  615. .num_parents = 2,
  616. .ops = &clk_rcg2_ops,
  617. },
  618. };
  619. static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
  620. .cmd_rcgr = 0x0c4c,
  621. .mnd_width = 16,
  622. .hid_width = 5,
  623. .parent_map = gcc_xo_gpll0_map,
  624. .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
  625. .clkr.hw.init = &(struct clk_init_data){
  626. .name = "blsp2_uart6_apps_clk_src",
  627. .parent_names = gcc_xo_gpll0,
  628. .num_parents = 2,
  629. .ops = &clk_rcg2_ops,
  630. },
  631. };
  632. static const struct freq_tbl ftbl_gcc_ce1_clk[] = {
  633. F(50000000, P_GPLL0, 12, 0, 0),
  634. F(75000000, P_GPLL0, 8, 0, 0),
  635. F(100000000, P_GPLL0, 6, 0, 0),
  636. F(150000000, P_GPLL0, 4, 0, 0),
  637. { }
  638. };
  639. static struct clk_rcg2 ce1_clk_src = {
  640. .cmd_rcgr = 0x1050,
  641. .hid_width = 5,
  642. .parent_map = gcc_xo_gpll0_map,
  643. .freq_tbl = ftbl_gcc_ce1_clk,
  644. .clkr.hw.init = &(struct clk_init_data){
  645. .name = "ce1_clk_src",
  646. .parent_names = gcc_xo_gpll0,
  647. .num_parents = 2,
  648. .ops = &clk_rcg2_ops,
  649. },
  650. };
  651. static const struct freq_tbl ftbl_gcc_ce2_clk[] = {
  652. F(50000000, P_GPLL0, 12, 0, 0),
  653. F(75000000, P_GPLL0, 8, 0, 0),
  654. F(100000000, P_GPLL0, 6, 0, 0),
  655. F(150000000, P_GPLL0, 4, 0, 0),
  656. { }
  657. };
  658. static struct clk_rcg2 ce2_clk_src = {
  659. .cmd_rcgr = 0x1090,
  660. .hid_width = 5,
  661. .parent_map = gcc_xo_gpll0_map,
  662. .freq_tbl = ftbl_gcc_ce2_clk,
  663. .clkr.hw.init = &(struct clk_init_data){
  664. .name = "ce2_clk_src",
  665. .parent_names = gcc_xo_gpll0,
  666. .num_parents = 2,
  667. .ops = &clk_rcg2_ops,
  668. },
  669. };
  670. static const struct freq_tbl ftbl_gcc_gp_clk[] = {
  671. F(4800000, P_XO, 4, 0, 0),
  672. F(6000000, P_GPLL0, 10, 1, 10),
  673. F(6750000, P_GPLL0, 1, 1, 89),
  674. F(8000000, P_GPLL0, 15, 1, 5),
  675. F(9600000, P_XO, 2, 0, 0),
  676. F(16000000, P_GPLL0, 1, 2, 75),
  677. F(19200000, P_XO, 1, 0, 0),
  678. F(24000000, P_GPLL0, 5, 1, 5),
  679. { }
  680. };
  681. static struct clk_rcg2 gp1_clk_src = {
  682. .cmd_rcgr = 0x1904,
  683. .mnd_width = 8,
  684. .hid_width = 5,
  685. .parent_map = gcc_xo_gpll0_map,
  686. .freq_tbl = ftbl_gcc_gp_clk,
  687. .clkr.hw.init = &(struct clk_init_data){
  688. .name = "gp1_clk_src",
  689. .parent_names = gcc_xo_gpll0,
  690. .num_parents = 2,
  691. .ops = &clk_rcg2_ops,
  692. },
  693. };
  694. static struct clk_rcg2 gp2_clk_src = {
  695. .cmd_rcgr = 0x1944,
  696. .mnd_width = 8,
  697. .hid_width = 5,
  698. .parent_map = gcc_xo_gpll0_map,
  699. .freq_tbl = ftbl_gcc_gp_clk,
  700. .clkr.hw.init = &(struct clk_init_data){
  701. .name = "gp2_clk_src",
  702. .parent_names = gcc_xo_gpll0,
  703. .num_parents = 2,
  704. .ops = &clk_rcg2_ops,
  705. },
  706. };
  707. static struct clk_rcg2 gp3_clk_src = {
  708. .cmd_rcgr = 0x1984,
  709. .mnd_width = 8,
  710. .hid_width = 5,
  711. .parent_map = gcc_xo_gpll0_map,
  712. .freq_tbl = ftbl_gcc_gp_clk,
  713. .clkr.hw.init = &(struct clk_init_data){
  714. .name = "gp3_clk_src",
  715. .parent_names = gcc_xo_gpll0,
  716. .num_parents = 2,
  717. .ops = &clk_rcg2_ops,
  718. },
  719. };
  720. static const struct freq_tbl ftbl_gcc_pdm2_clk[] = {
  721. F(60000000, P_GPLL0, 10, 0, 0),
  722. { }
  723. };
  724. static struct clk_rcg2 pdm2_clk_src = {
  725. .cmd_rcgr = 0x0cd0,
  726. .hid_width = 5,
  727. .parent_map = gcc_xo_gpll0_map,
  728. .freq_tbl = ftbl_gcc_pdm2_clk,
  729. .clkr.hw.init = &(struct clk_init_data){
  730. .name = "pdm2_clk_src",
  731. .parent_names = gcc_xo_gpll0,
  732. .num_parents = 2,
  733. .ops = &clk_rcg2_ops,
  734. },
  735. };
  736. static const struct freq_tbl ftbl_gcc_sdcc1_4_apps_clk[] = {
  737. F(144000, P_XO, 16, 3, 25),
  738. F(400000, P_XO, 12, 1, 4),
  739. F(20000000, P_GPLL0, 15, 1, 2),
  740. F(25000000, P_GPLL0, 12, 1, 2),
  741. F(50000000, P_GPLL0, 12, 0, 0),
  742. F(100000000, P_GPLL0, 6, 0, 0),
  743. F(200000000, P_GPLL0, 3, 0, 0),
  744. { }
  745. };
  746. static struct clk_rcg2 sdcc1_apps_clk_src = {
  747. .cmd_rcgr = 0x04d0,
  748. .mnd_width = 8,
  749. .hid_width = 5,
  750. .parent_map = gcc_xo_gpll0_map,
  751. .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
  752. .clkr.hw.init = &(struct clk_init_data){
  753. .name = "sdcc1_apps_clk_src",
  754. .parent_names = gcc_xo_gpll0,
  755. .num_parents = 2,
  756. .ops = &clk_rcg2_ops,
  757. },
  758. };
  759. static struct clk_rcg2 sdcc2_apps_clk_src = {
  760. .cmd_rcgr = 0x0510,
  761. .mnd_width = 8,
  762. .hid_width = 5,
  763. .parent_map = gcc_xo_gpll0_map,
  764. .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
  765. .clkr.hw.init = &(struct clk_init_data){
  766. .name = "sdcc2_apps_clk_src",
  767. .parent_names = gcc_xo_gpll0,
  768. .num_parents = 2,
  769. .ops = &clk_rcg2_ops,
  770. },
  771. };
  772. static struct clk_rcg2 sdcc3_apps_clk_src = {
  773. .cmd_rcgr = 0x0550,
  774. .mnd_width = 8,
  775. .hid_width = 5,
  776. .parent_map = gcc_xo_gpll0_map,
  777. .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
  778. .clkr.hw.init = &(struct clk_init_data){
  779. .name = "sdcc3_apps_clk_src",
  780. .parent_names = gcc_xo_gpll0,
  781. .num_parents = 2,
  782. .ops = &clk_rcg2_ops,
  783. },
  784. };
  785. static struct clk_rcg2 sdcc4_apps_clk_src = {
  786. .cmd_rcgr = 0x0590,
  787. .mnd_width = 8,
  788. .hid_width = 5,
  789. .parent_map = gcc_xo_gpll0_map,
  790. .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
  791. .clkr.hw.init = &(struct clk_init_data){
  792. .name = "sdcc4_apps_clk_src",
  793. .parent_names = gcc_xo_gpll0,
  794. .num_parents = 2,
  795. .ops = &clk_rcg2_ops,
  796. },
  797. };
  798. static const struct freq_tbl ftbl_gcc_tsif_ref_clk[] = {
  799. F(105000, P_XO, 2, 1, 91),
  800. { }
  801. };
  802. static struct clk_rcg2 tsif_ref_clk_src = {
  803. .cmd_rcgr = 0x0d90,
  804. .mnd_width = 8,
  805. .hid_width = 5,
  806. .parent_map = gcc_xo_gpll0_map,
  807. .freq_tbl = ftbl_gcc_tsif_ref_clk,
  808. .clkr.hw.init = &(struct clk_init_data){
  809. .name = "tsif_ref_clk_src",
  810. .parent_names = gcc_xo_gpll0,
  811. .num_parents = 2,
  812. .ops = &clk_rcg2_ops,
  813. },
  814. };
  815. static const struct freq_tbl ftbl_gcc_usb30_mock_utmi_clk[] = {
  816. F(60000000, P_GPLL0, 10, 0, 0),
  817. { }
  818. };
  819. static struct clk_rcg2 usb30_mock_utmi_clk_src = {
  820. .cmd_rcgr = 0x03e8,
  821. .hid_width = 5,
  822. .parent_map = gcc_xo_gpll0_map,
  823. .freq_tbl = ftbl_gcc_usb30_mock_utmi_clk,
  824. .clkr.hw.init = &(struct clk_init_data){
  825. .name = "usb30_mock_utmi_clk_src",
  826. .parent_names = gcc_xo_gpll0,
  827. .num_parents = 2,
  828. .ops = &clk_rcg2_ops,
  829. },
  830. };
  831. static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
  832. F(60000000, P_GPLL0, 10, 0, 0),
  833. F(75000000, P_GPLL0, 8, 0, 0),
  834. { }
  835. };
  836. static struct clk_rcg2 usb_hs_system_clk_src = {
  837. .cmd_rcgr = 0x0490,
  838. .hid_width = 5,
  839. .parent_map = gcc_xo_gpll0_map,
  840. .freq_tbl = ftbl_gcc_usb_hs_system_clk,
  841. .clkr.hw.init = &(struct clk_init_data){
  842. .name = "usb_hs_system_clk_src",
  843. .parent_names = gcc_xo_gpll0,
  844. .num_parents = 2,
  845. .ops = &clk_rcg2_ops,
  846. },
  847. };
  848. static const struct freq_tbl ftbl_gcc_usb_hsic_clk[] = {
  849. F(480000000, P_GPLL1, 1, 0, 0),
  850. { }
  851. };
  852. static u8 usb_hsic_clk_src_map[] = {
  853. [P_XO] = 0,
  854. [P_GPLL1] = 4,
  855. };
  856. static struct clk_rcg2 usb_hsic_clk_src = {
  857. .cmd_rcgr = 0x0440,
  858. .hid_width = 5,
  859. .parent_map = usb_hsic_clk_src_map,
  860. .freq_tbl = ftbl_gcc_usb_hsic_clk,
  861. .clkr.hw.init = &(struct clk_init_data){
  862. .name = "usb_hsic_clk_src",
  863. .parent_names = (const char *[]){
  864. "xo",
  865. "gpll1_vote",
  866. },
  867. .num_parents = 2,
  868. .ops = &clk_rcg2_ops,
  869. },
  870. };
  871. static const struct freq_tbl ftbl_gcc_usb_hsic_io_cal_clk[] = {
  872. F(9600000, P_XO, 2, 0, 0),
  873. { }
  874. };
  875. static struct clk_rcg2 usb_hsic_io_cal_clk_src = {
  876. .cmd_rcgr = 0x0458,
  877. .hid_width = 5,
  878. .parent_map = gcc_xo_gpll0_map,
  879. .freq_tbl = ftbl_gcc_usb_hsic_io_cal_clk,
  880. .clkr.hw.init = &(struct clk_init_data){
  881. .name = "usb_hsic_io_cal_clk_src",
  882. .parent_names = gcc_xo_gpll0,
  883. .num_parents = 1,
  884. .ops = &clk_rcg2_ops,
  885. },
  886. };
  887. static const struct freq_tbl ftbl_gcc_usb_hsic_system_clk[] = {
  888. F(60000000, P_GPLL0, 10, 0, 0),
  889. F(75000000, P_GPLL0, 8, 0, 0),
  890. { }
  891. };
  892. static struct clk_rcg2 usb_hsic_system_clk_src = {
  893. .cmd_rcgr = 0x041c,
  894. .hid_width = 5,
  895. .parent_map = gcc_xo_gpll0_map,
  896. .freq_tbl = ftbl_gcc_usb_hsic_system_clk,
  897. .clkr.hw.init = &(struct clk_init_data){
  898. .name = "usb_hsic_system_clk_src",
  899. .parent_names = gcc_xo_gpll0,
  900. .num_parents = 2,
  901. .ops = &clk_rcg2_ops,
  902. },
  903. };
  904. static struct clk_regmap gcc_mmss_gpll0_clk_src = {
  905. .enable_reg = 0x1484,
  906. .enable_mask = BIT(26),
  907. .hw.init = &(struct clk_init_data){
  908. .name = "mmss_gpll0_vote",
  909. .parent_names = (const char *[]){
  910. "gpll0_vote",
  911. },
  912. .num_parents = 1,
  913. .ops = &clk_branch_simple_ops,
  914. },
  915. };
  916. static struct clk_branch gcc_bam_dma_ahb_clk = {
  917. .halt_reg = 0x0d44,
  918. .halt_check = BRANCH_HALT_VOTED,
  919. .clkr = {
  920. .enable_reg = 0x1484,
  921. .enable_mask = BIT(12),
  922. .hw.init = &(struct clk_init_data){
  923. .name = "gcc_bam_dma_ahb_clk",
  924. .parent_names = (const char *[]){
  925. "periph_noc_clk_src",
  926. },
  927. .num_parents = 1,
  928. .ops = &clk_branch2_ops,
  929. },
  930. },
  931. };
  932. static struct clk_branch gcc_blsp1_ahb_clk = {
  933. .halt_reg = 0x05c4,
  934. .halt_check = BRANCH_HALT_VOTED,
  935. .clkr = {
  936. .enable_reg = 0x1484,
  937. .enable_mask = BIT(17),
  938. .hw.init = &(struct clk_init_data){
  939. .name = "gcc_blsp1_ahb_clk",
  940. .parent_names = (const char *[]){
  941. "periph_noc_clk_src",
  942. },
  943. .num_parents = 1,
  944. .ops = &clk_branch2_ops,
  945. },
  946. },
  947. };
  948. static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
  949. .halt_reg = 0x0648,
  950. .clkr = {
  951. .enable_reg = 0x0648,
  952. .enable_mask = BIT(0),
  953. .hw.init = &(struct clk_init_data){
  954. .name = "gcc_blsp1_qup1_i2c_apps_clk",
  955. .parent_names = (const char *[]){
  956. "blsp1_qup1_i2c_apps_clk_src",
  957. },
  958. .num_parents = 1,
  959. .flags = CLK_SET_RATE_PARENT,
  960. .ops = &clk_branch2_ops,
  961. },
  962. },
  963. };
  964. static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
  965. .halt_reg = 0x0644,
  966. .clkr = {
  967. .enable_reg = 0x0644,
  968. .enable_mask = BIT(0),
  969. .hw.init = &(struct clk_init_data){
  970. .name = "gcc_blsp1_qup1_spi_apps_clk",
  971. .parent_names = (const char *[]){
  972. "blsp1_qup1_spi_apps_clk_src",
  973. },
  974. .num_parents = 1,
  975. .flags = CLK_SET_RATE_PARENT,
  976. .ops = &clk_branch2_ops,
  977. },
  978. },
  979. };
  980. static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
  981. .halt_reg = 0x06c8,
  982. .clkr = {
  983. .enable_reg = 0x06c8,
  984. .enable_mask = BIT(0),
  985. .hw.init = &(struct clk_init_data){
  986. .name = "gcc_blsp1_qup2_i2c_apps_clk",
  987. .parent_names = (const char *[]){
  988. "blsp1_qup2_i2c_apps_clk_src",
  989. },
  990. .num_parents = 1,
  991. .flags = CLK_SET_RATE_PARENT,
  992. .ops = &clk_branch2_ops,
  993. },
  994. },
  995. };
  996. static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
  997. .halt_reg = 0x06c4,
  998. .clkr = {
  999. .enable_reg = 0x06c4,
  1000. .enable_mask = BIT(0),
  1001. .hw.init = &(struct clk_init_data){
  1002. .name = "gcc_blsp1_qup2_spi_apps_clk",
  1003. .parent_names = (const char *[]){
  1004. "blsp1_qup2_spi_apps_clk_src",
  1005. },
  1006. .num_parents = 1,
  1007. .flags = CLK_SET_RATE_PARENT,
  1008. .ops = &clk_branch2_ops,
  1009. },
  1010. },
  1011. };
  1012. static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
  1013. .halt_reg = 0x0748,
  1014. .clkr = {
  1015. .enable_reg = 0x0748,
  1016. .enable_mask = BIT(0),
  1017. .hw.init = &(struct clk_init_data){
  1018. .name = "gcc_blsp1_qup3_i2c_apps_clk",
  1019. .parent_names = (const char *[]){
  1020. "blsp1_qup3_i2c_apps_clk_src",
  1021. },
  1022. .num_parents = 1,
  1023. .flags = CLK_SET_RATE_PARENT,
  1024. .ops = &clk_branch2_ops,
  1025. },
  1026. },
  1027. };
  1028. static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
  1029. .halt_reg = 0x0744,
  1030. .clkr = {
  1031. .enable_reg = 0x0744,
  1032. .enable_mask = BIT(0),
  1033. .hw.init = &(struct clk_init_data){
  1034. .name = "gcc_blsp1_qup3_spi_apps_clk",
  1035. .parent_names = (const char *[]){
  1036. "blsp1_qup3_spi_apps_clk_src",
  1037. },
  1038. .num_parents = 1,
  1039. .flags = CLK_SET_RATE_PARENT,
  1040. .ops = &clk_branch2_ops,
  1041. },
  1042. },
  1043. };
  1044. static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
  1045. .halt_reg = 0x07c8,
  1046. .clkr = {
  1047. .enable_reg = 0x07c8,
  1048. .enable_mask = BIT(0),
  1049. .hw.init = &(struct clk_init_data){
  1050. .name = "gcc_blsp1_qup4_i2c_apps_clk",
  1051. .parent_names = (const char *[]){
  1052. "blsp1_qup4_i2c_apps_clk_src",
  1053. },
  1054. .num_parents = 1,
  1055. .flags = CLK_SET_RATE_PARENT,
  1056. .ops = &clk_branch2_ops,
  1057. },
  1058. },
  1059. };
  1060. static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
  1061. .halt_reg = 0x07c4,
  1062. .clkr = {
  1063. .enable_reg = 0x07c4,
  1064. .enable_mask = BIT(0),
  1065. .hw.init = &(struct clk_init_data){
  1066. .name = "gcc_blsp1_qup4_spi_apps_clk",
  1067. .parent_names = (const char *[]){
  1068. "blsp1_qup4_spi_apps_clk_src",
  1069. },
  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 = 0x0848,
  1078. .clkr = {
  1079. .enable_reg = 0x0848,
  1080. .enable_mask = BIT(0),
  1081. .hw.init = &(struct clk_init_data){
  1082. .name = "gcc_blsp1_qup5_i2c_apps_clk",
  1083. .parent_names = (const char *[]){
  1084. "blsp1_qup5_i2c_apps_clk_src",
  1085. },
  1086. .num_parents = 1,
  1087. .flags = CLK_SET_RATE_PARENT,
  1088. .ops = &clk_branch2_ops,
  1089. },
  1090. },
  1091. };
  1092. static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
  1093. .halt_reg = 0x0844,
  1094. .clkr = {
  1095. .enable_reg = 0x0844,
  1096. .enable_mask = BIT(0),
  1097. .hw.init = &(struct clk_init_data){
  1098. .name = "gcc_blsp1_qup5_spi_apps_clk",
  1099. .parent_names = (const char *[]){
  1100. "blsp1_qup5_spi_apps_clk_src",
  1101. },
  1102. .num_parents = 1,
  1103. .flags = CLK_SET_RATE_PARENT,
  1104. .ops = &clk_branch2_ops,
  1105. },
  1106. },
  1107. };
  1108. static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
  1109. .halt_reg = 0x08c8,
  1110. .clkr = {
  1111. .enable_reg = 0x08c8,
  1112. .enable_mask = BIT(0),
  1113. .hw.init = &(struct clk_init_data){
  1114. .name = "gcc_blsp1_qup6_i2c_apps_clk",
  1115. .parent_names = (const char *[]){
  1116. "blsp1_qup6_i2c_apps_clk_src",
  1117. },
  1118. .num_parents = 1,
  1119. .flags = CLK_SET_RATE_PARENT,
  1120. .ops = &clk_branch2_ops,
  1121. },
  1122. },
  1123. };
  1124. static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
  1125. .halt_reg = 0x08c4,
  1126. .clkr = {
  1127. .enable_reg = 0x08c4,
  1128. .enable_mask = BIT(0),
  1129. .hw.init = &(struct clk_init_data){
  1130. .name = "gcc_blsp1_qup6_spi_apps_clk",
  1131. .parent_names = (const char *[]){
  1132. "blsp1_qup6_spi_apps_clk_src",
  1133. },
  1134. .num_parents = 1,
  1135. .flags = CLK_SET_RATE_PARENT,
  1136. .ops = &clk_branch2_ops,
  1137. },
  1138. },
  1139. };
  1140. static struct clk_branch gcc_blsp1_uart1_apps_clk = {
  1141. .halt_reg = 0x0684,
  1142. .clkr = {
  1143. .enable_reg = 0x0684,
  1144. .enable_mask = BIT(0),
  1145. .hw.init = &(struct clk_init_data){
  1146. .name = "gcc_blsp1_uart1_apps_clk",
  1147. .parent_names = (const char *[]){
  1148. "blsp1_uart1_apps_clk_src",
  1149. },
  1150. .num_parents = 1,
  1151. .flags = CLK_SET_RATE_PARENT,
  1152. .ops = &clk_branch2_ops,
  1153. },
  1154. },
  1155. };
  1156. static struct clk_branch gcc_blsp1_uart2_apps_clk = {
  1157. .halt_reg = 0x0704,
  1158. .clkr = {
  1159. .enable_reg = 0x0704,
  1160. .enable_mask = BIT(0),
  1161. .hw.init = &(struct clk_init_data){
  1162. .name = "gcc_blsp1_uart2_apps_clk",
  1163. .parent_names = (const char *[]){
  1164. "blsp1_uart2_apps_clk_src",
  1165. },
  1166. .num_parents = 1,
  1167. .flags = CLK_SET_RATE_PARENT,
  1168. .ops = &clk_branch2_ops,
  1169. },
  1170. },
  1171. };
  1172. static struct clk_branch gcc_blsp1_uart3_apps_clk = {
  1173. .halt_reg = 0x0784,
  1174. .clkr = {
  1175. .enable_reg = 0x0784,
  1176. .enable_mask = BIT(0),
  1177. .hw.init = &(struct clk_init_data){
  1178. .name = "gcc_blsp1_uart3_apps_clk",
  1179. .parent_names = (const char *[]){
  1180. "blsp1_uart3_apps_clk_src",
  1181. },
  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_uart4_apps_clk = {
  1189. .halt_reg = 0x0804,
  1190. .clkr = {
  1191. .enable_reg = 0x0804,
  1192. .enable_mask = BIT(0),
  1193. .hw.init = &(struct clk_init_data){
  1194. .name = "gcc_blsp1_uart4_apps_clk",
  1195. .parent_names = (const char *[]){
  1196. "blsp1_uart4_apps_clk_src",
  1197. },
  1198. .num_parents = 1,
  1199. .flags = CLK_SET_RATE_PARENT,
  1200. .ops = &clk_branch2_ops,
  1201. },
  1202. },
  1203. };
  1204. static struct clk_branch gcc_blsp1_uart5_apps_clk = {
  1205. .halt_reg = 0x0884,
  1206. .clkr = {
  1207. .enable_reg = 0x0884,
  1208. .enable_mask = BIT(0),
  1209. .hw.init = &(struct clk_init_data){
  1210. .name = "gcc_blsp1_uart5_apps_clk",
  1211. .parent_names = (const char *[]){
  1212. "blsp1_uart5_apps_clk_src",
  1213. },
  1214. .num_parents = 1,
  1215. .flags = CLK_SET_RATE_PARENT,
  1216. .ops = &clk_branch2_ops,
  1217. },
  1218. },
  1219. };
  1220. static struct clk_branch gcc_blsp1_uart6_apps_clk = {
  1221. .halt_reg = 0x0904,
  1222. .clkr = {
  1223. .enable_reg = 0x0904,
  1224. .enable_mask = BIT(0),
  1225. .hw.init = &(struct clk_init_data){
  1226. .name = "gcc_blsp1_uart6_apps_clk",
  1227. .parent_names = (const char *[]){
  1228. "blsp1_uart6_apps_clk_src",
  1229. },
  1230. .num_parents = 1,
  1231. .flags = CLK_SET_RATE_PARENT,
  1232. .ops = &clk_branch2_ops,
  1233. },
  1234. },
  1235. };
  1236. static struct clk_branch gcc_blsp2_ahb_clk = {
  1237. .halt_reg = 0x05c4,
  1238. .halt_check = BRANCH_HALT_VOTED,
  1239. .clkr = {
  1240. .enable_reg = 0x1484,
  1241. .enable_mask = BIT(15),
  1242. .hw.init = &(struct clk_init_data){
  1243. .name = "gcc_blsp2_ahb_clk",
  1244. .parent_names = (const char *[]){
  1245. "periph_noc_clk_src",
  1246. },
  1247. .num_parents = 1,
  1248. .ops = &clk_branch2_ops,
  1249. },
  1250. },
  1251. };
  1252. static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
  1253. .halt_reg = 0x0988,
  1254. .clkr = {
  1255. .enable_reg = 0x0988,
  1256. .enable_mask = BIT(0),
  1257. .hw.init = &(struct clk_init_data){
  1258. .name = "gcc_blsp2_qup1_i2c_apps_clk",
  1259. .parent_names = (const char *[]){
  1260. "blsp2_qup1_i2c_apps_clk_src",
  1261. },
  1262. .num_parents = 1,
  1263. .flags = CLK_SET_RATE_PARENT,
  1264. .ops = &clk_branch2_ops,
  1265. },
  1266. },
  1267. };
  1268. static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
  1269. .halt_reg = 0x0984,
  1270. .clkr = {
  1271. .enable_reg = 0x0984,
  1272. .enable_mask = BIT(0),
  1273. .hw.init = &(struct clk_init_data){
  1274. .name = "gcc_blsp2_qup1_spi_apps_clk",
  1275. .parent_names = (const char *[]){
  1276. "blsp2_qup1_spi_apps_clk_src",
  1277. },
  1278. .num_parents = 1,
  1279. .flags = CLK_SET_RATE_PARENT,
  1280. .ops = &clk_branch2_ops,
  1281. },
  1282. },
  1283. };
  1284. static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
  1285. .halt_reg = 0x0a08,
  1286. .clkr = {
  1287. .enable_reg = 0x0a08,
  1288. .enable_mask = BIT(0),
  1289. .hw.init = &(struct clk_init_data){
  1290. .name = "gcc_blsp2_qup2_i2c_apps_clk",
  1291. .parent_names = (const char *[]){
  1292. "blsp2_qup2_i2c_apps_clk_src",
  1293. },
  1294. .num_parents = 1,
  1295. .flags = CLK_SET_RATE_PARENT,
  1296. .ops = &clk_branch2_ops,
  1297. },
  1298. },
  1299. };
  1300. static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
  1301. .halt_reg = 0x0a04,
  1302. .clkr = {
  1303. .enable_reg = 0x0a04,
  1304. .enable_mask = BIT(0),
  1305. .hw.init = &(struct clk_init_data){
  1306. .name = "gcc_blsp2_qup2_spi_apps_clk",
  1307. .parent_names = (const char *[]){
  1308. "blsp2_qup2_spi_apps_clk_src",
  1309. },
  1310. .num_parents = 1,
  1311. .flags = CLK_SET_RATE_PARENT,
  1312. .ops = &clk_branch2_ops,
  1313. },
  1314. },
  1315. };
  1316. static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
  1317. .halt_reg = 0x0a88,
  1318. .clkr = {
  1319. .enable_reg = 0x0a88,
  1320. .enable_mask = BIT(0),
  1321. .hw.init = &(struct clk_init_data){
  1322. .name = "gcc_blsp2_qup3_i2c_apps_clk",
  1323. .parent_names = (const char *[]){
  1324. "blsp2_qup3_i2c_apps_clk_src",
  1325. },
  1326. .num_parents = 1,
  1327. .flags = CLK_SET_RATE_PARENT,
  1328. .ops = &clk_branch2_ops,
  1329. },
  1330. },
  1331. };
  1332. static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
  1333. .halt_reg = 0x0a84,
  1334. .clkr = {
  1335. .enable_reg = 0x0a84,
  1336. .enable_mask = BIT(0),
  1337. .hw.init = &(struct clk_init_data){
  1338. .name = "gcc_blsp2_qup3_spi_apps_clk",
  1339. .parent_names = (const char *[]){
  1340. "blsp2_qup3_spi_apps_clk_src",
  1341. },
  1342. .num_parents = 1,
  1343. .flags = CLK_SET_RATE_PARENT,
  1344. .ops = &clk_branch2_ops,
  1345. },
  1346. },
  1347. };
  1348. static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
  1349. .halt_reg = 0x0b08,
  1350. .clkr = {
  1351. .enable_reg = 0x0b08,
  1352. .enable_mask = BIT(0),
  1353. .hw.init = &(struct clk_init_data){
  1354. .name = "gcc_blsp2_qup4_i2c_apps_clk",
  1355. .parent_names = (const char *[]){
  1356. "blsp2_qup4_i2c_apps_clk_src",
  1357. },
  1358. .num_parents = 1,
  1359. .flags = CLK_SET_RATE_PARENT,
  1360. .ops = &clk_branch2_ops,
  1361. },
  1362. },
  1363. };
  1364. static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
  1365. .halt_reg = 0x0b04,
  1366. .clkr = {
  1367. .enable_reg = 0x0b04,
  1368. .enable_mask = BIT(0),
  1369. .hw.init = &(struct clk_init_data){
  1370. .name = "gcc_blsp2_qup4_spi_apps_clk",
  1371. .parent_names = (const char *[]){
  1372. "blsp2_qup4_spi_apps_clk_src",
  1373. },
  1374. .num_parents = 1,
  1375. .flags = CLK_SET_RATE_PARENT,
  1376. .ops = &clk_branch2_ops,
  1377. },
  1378. },
  1379. };
  1380. static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = {
  1381. .halt_reg = 0x0b88,
  1382. .clkr = {
  1383. .enable_reg = 0x0b88,
  1384. .enable_mask = BIT(0),
  1385. .hw.init = &(struct clk_init_data){
  1386. .name = "gcc_blsp2_qup5_i2c_apps_clk",
  1387. .parent_names = (const char *[]){
  1388. "blsp2_qup5_i2c_apps_clk_src",
  1389. },
  1390. .num_parents = 1,
  1391. .flags = CLK_SET_RATE_PARENT,
  1392. .ops = &clk_branch2_ops,
  1393. },
  1394. },
  1395. };
  1396. static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = {
  1397. .halt_reg = 0x0b84,
  1398. .clkr = {
  1399. .enable_reg = 0x0b84,
  1400. .enable_mask = BIT(0),
  1401. .hw.init = &(struct clk_init_data){
  1402. .name = "gcc_blsp2_qup5_spi_apps_clk",
  1403. .parent_names = (const char *[]){
  1404. "blsp2_qup5_spi_apps_clk_src",
  1405. },
  1406. .num_parents = 1,
  1407. .flags = CLK_SET_RATE_PARENT,
  1408. .ops = &clk_branch2_ops,
  1409. },
  1410. },
  1411. };
  1412. static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = {
  1413. .halt_reg = 0x0c08,
  1414. .clkr = {
  1415. .enable_reg = 0x0c08,
  1416. .enable_mask = BIT(0),
  1417. .hw.init = &(struct clk_init_data){
  1418. .name = "gcc_blsp2_qup6_i2c_apps_clk",
  1419. .parent_names = (const char *[]){
  1420. "blsp2_qup6_i2c_apps_clk_src",
  1421. },
  1422. .num_parents = 1,
  1423. .flags = CLK_SET_RATE_PARENT,
  1424. .ops = &clk_branch2_ops,
  1425. },
  1426. },
  1427. };
  1428. static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = {
  1429. .halt_reg = 0x0c04,
  1430. .clkr = {
  1431. .enable_reg = 0x0c04,
  1432. .enable_mask = BIT(0),
  1433. .hw.init = &(struct clk_init_data){
  1434. .name = "gcc_blsp2_qup6_spi_apps_clk",
  1435. .parent_names = (const char *[]){
  1436. "blsp2_qup6_spi_apps_clk_src",
  1437. },
  1438. .num_parents = 1,
  1439. .flags = CLK_SET_RATE_PARENT,
  1440. .ops = &clk_branch2_ops,
  1441. },
  1442. },
  1443. };
  1444. static struct clk_branch gcc_blsp2_uart1_apps_clk = {
  1445. .halt_reg = 0x09c4,
  1446. .clkr = {
  1447. .enable_reg = 0x09c4,
  1448. .enable_mask = BIT(0),
  1449. .hw.init = &(struct clk_init_data){
  1450. .name = "gcc_blsp2_uart1_apps_clk",
  1451. .parent_names = (const char *[]){
  1452. "blsp2_uart1_apps_clk_src",
  1453. },
  1454. .num_parents = 1,
  1455. .flags = CLK_SET_RATE_PARENT,
  1456. .ops = &clk_branch2_ops,
  1457. },
  1458. },
  1459. };
  1460. static struct clk_branch gcc_blsp2_uart2_apps_clk = {
  1461. .halt_reg = 0x0a44,
  1462. .clkr = {
  1463. .enable_reg = 0x0a44,
  1464. .enable_mask = BIT(0),
  1465. .hw.init = &(struct clk_init_data){
  1466. .name = "gcc_blsp2_uart2_apps_clk",
  1467. .parent_names = (const char *[]){
  1468. "blsp2_uart2_apps_clk_src",
  1469. },
  1470. .num_parents = 1,
  1471. .flags = CLK_SET_RATE_PARENT,
  1472. .ops = &clk_branch2_ops,
  1473. },
  1474. },
  1475. };
  1476. static struct clk_branch gcc_blsp2_uart3_apps_clk = {
  1477. .halt_reg = 0x0ac4,
  1478. .clkr = {
  1479. .enable_reg = 0x0ac4,
  1480. .enable_mask = BIT(0),
  1481. .hw.init = &(struct clk_init_data){
  1482. .name = "gcc_blsp2_uart3_apps_clk",
  1483. .parent_names = (const char *[]){
  1484. "blsp2_uart3_apps_clk_src",
  1485. },
  1486. .num_parents = 1,
  1487. .flags = CLK_SET_RATE_PARENT,
  1488. .ops = &clk_branch2_ops,
  1489. },
  1490. },
  1491. };
  1492. static struct clk_branch gcc_blsp2_uart4_apps_clk = {
  1493. .halt_reg = 0x0b44,
  1494. .clkr = {
  1495. .enable_reg = 0x0b44,
  1496. .enable_mask = BIT(0),
  1497. .hw.init = &(struct clk_init_data){
  1498. .name = "gcc_blsp2_uart4_apps_clk",
  1499. .parent_names = (const char *[]){
  1500. "blsp2_uart4_apps_clk_src",
  1501. },
  1502. .num_parents = 1,
  1503. .flags = CLK_SET_RATE_PARENT,
  1504. .ops = &clk_branch2_ops,
  1505. },
  1506. },
  1507. };
  1508. static struct clk_branch gcc_blsp2_uart5_apps_clk = {
  1509. .halt_reg = 0x0bc4,
  1510. .clkr = {
  1511. .enable_reg = 0x0bc4,
  1512. .enable_mask = BIT(0),
  1513. .hw.init = &(struct clk_init_data){
  1514. .name = "gcc_blsp2_uart5_apps_clk",
  1515. .parent_names = (const char *[]){
  1516. "blsp2_uart5_apps_clk_src",
  1517. },
  1518. .num_parents = 1,
  1519. .flags = CLK_SET_RATE_PARENT,
  1520. .ops = &clk_branch2_ops,
  1521. },
  1522. },
  1523. };
  1524. static struct clk_branch gcc_blsp2_uart6_apps_clk = {
  1525. .halt_reg = 0x0c44,
  1526. .clkr = {
  1527. .enable_reg = 0x0c44,
  1528. .enable_mask = BIT(0),
  1529. .hw.init = &(struct clk_init_data){
  1530. .name = "gcc_blsp2_uart6_apps_clk",
  1531. .parent_names = (const char *[]){
  1532. "blsp2_uart6_apps_clk_src",
  1533. },
  1534. .num_parents = 1,
  1535. .flags = CLK_SET_RATE_PARENT,
  1536. .ops = &clk_branch2_ops,
  1537. },
  1538. },
  1539. };
  1540. static struct clk_branch gcc_boot_rom_ahb_clk = {
  1541. .halt_reg = 0x0e04,
  1542. .halt_check = BRANCH_HALT_VOTED,
  1543. .clkr = {
  1544. .enable_reg = 0x1484,
  1545. .enable_mask = BIT(10),
  1546. .hw.init = &(struct clk_init_data){
  1547. .name = "gcc_boot_rom_ahb_clk",
  1548. .parent_names = (const char *[]){
  1549. "config_noc_clk_src",
  1550. },
  1551. .num_parents = 1,
  1552. .ops = &clk_branch2_ops,
  1553. },
  1554. },
  1555. };
  1556. static struct clk_branch gcc_ce1_ahb_clk = {
  1557. .halt_reg = 0x104c,
  1558. .halt_check = BRANCH_HALT_VOTED,
  1559. .clkr = {
  1560. .enable_reg = 0x1484,
  1561. .enable_mask = BIT(3),
  1562. .hw.init = &(struct clk_init_data){
  1563. .name = "gcc_ce1_ahb_clk",
  1564. .parent_names = (const char *[]){
  1565. "config_noc_clk_src",
  1566. },
  1567. .num_parents = 1,
  1568. .ops = &clk_branch2_ops,
  1569. },
  1570. },
  1571. };
  1572. static struct clk_branch gcc_ce1_axi_clk = {
  1573. .halt_reg = 0x1048,
  1574. .halt_check = BRANCH_HALT_VOTED,
  1575. .clkr = {
  1576. .enable_reg = 0x1484,
  1577. .enable_mask = BIT(4),
  1578. .hw.init = &(struct clk_init_data){
  1579. .name = "gcc_ce1_axi_clk",
  1580. .parent_names = (const char *[]){
  1581. "system_noc_clk_src",
  1582. },
  1583. .num_parents = 1,
  1584. .ops = &clk_branch2_ops,
  1585. },
  1586. },
  1587. };
  1588. static struct clk_branch gcc_ce1_clk = {
  1589. .halt_reg = 0x1050,
  1590. .halt_check = BRANCH_HALT_VOTED,
  1591. .clkr = {
  1592. .enable_reg = 0x1484,
  1593. .enable_mask = BIT(5),
  1594. .hw.init = &(struct clk_init_data){
  1595. .name = "gcc_ce1_clk",
  1596. .parent_names = (const char *[]){
  1597. "ce1_clk_src",
  1598. },
  1599. .num_parents = 1,
  1600. .ops = &clk_branch2_ops,
  1601. },
  1602. },
  1603. };
  1604. static struct clk_branch gcc_ce2_ahb_clk = {
  1605. .halt_reg = 0x108c,
  1606. .halt_check = BRANCH_HALT_VOTED,
  1607. .clkr = {
  1608. .enable_reg = 0x1484,
  1609. .enable_mask = BIT(0),
  1610. .hw.init = &(struct clk_init_data){
  1611. .name = "gcc_ce2_ahb_clk",
  1612. .parent_names = (const char *[]){
  1613. "config_noc_clk_src",
  1614. },
  1615. .num_parents = 1,
  1616. .ops = &clk_branch2_ops,
  1617. },
  1618. },
  1619. };
  1620. static struct clk_branch gcc_ce2_axi_clk = {
  1621. .halt_reg = 0x1088,
  1622. .halt_check = BRANCH_HALT_VOTED,
  1623. .clkr = {
  1624. .enable_reg = 0x1484,
  1625. .enable_mask = BIT(1),
  1626. .hw.init = &(struct clk_init_data){
  1627. .name = "gcc_ce2_axi_clk",
  1628. .parent_names = (const char *[]){
  1629. "system_noc_clk_src",
  1630. },
  1631. .num_parents = 1,
  1632. .ops = &clk_branch2_ops,
  1633. },
  1634. },
  1635. };
  1636. static struct clk_branch gcc_ce2_clk = {
  1637. .halt_reg = 0x1090,
  1638. .halt_check = BRANCH_HALT_VOTED,
  1639. .clkr = {
  1640. .enable_reg = 0x1484,
  1641. .enable_mask = BIT(2),
  1642. .hw.init = &(struct clk_init_data){
  1643. .name = "gcc_ce2_clk",
  1644. .parent_names = (const char *[]){
  1645. "ce2_clk_src",
  1646. },
  1647. .num_parents = 1,
  1648. .flags = CLK_SET_RATE_PARENT,
  1649. .ops = &clk_branch2_ops,
  1650. },
  1651. },
  1652. };
  1653. static struct clk_branch gcc_gp1_clk = {
  1654. .halt_reg = 0x1900,
  1655. .clkr = {
  1656. .enable_reg = 0x1900,
  1657. .enable_mask = BIT(0),
  1658. .hw.init = &(struct clk_init_data){
  1659. .name = "gcc_gp1_clk",
  1660. .parent_names = (const char *[]){
  1661. "gp1_clk_src",
  1662. },
  1663. .num_parents = 1,
  1664. .flags = CLK_SET_RATE_PARENT,
  1665. .ops = &clk_branch2_ops,
  1666. },
  1667. },
  1668. };
  1669. static struct clk_branch gcc_gp2_clk = {
  1670. .halt_reg = 0x1940,
  1671. .clkr = {
  1672. .enable_reg = 0x1940,
  1673. .enable_mask = BIT(0),
  1674. .hw.init = &(struct clk_init_data){
  1675. .name = "gcc_gp2_clk",
  1676. .parent_names = (const char *[]){
  1677. "gp2_clk_src",
  1678. },
  1679. .num_parents = 1,
  1680. .flags = CLK_SET_RATE_PARENT,
  1681. .ops = &clk_branch2_ops,
  1682. },
  1683. },
  1684. };
  1685. static struct clk_branch gcc_gp3_clk = {
  1686. .halt_reg = 0x1980,
  1687. .clkr = {
  1688. .enable_reg = 0x1980,
  1689. .enable_mask = BIT(0),
  1690. .hw.init = &(struct clk_init_data){
  1691. .name = "gcc_gp3_clk",
  1692. .parent_names = (const char *[]){
  1693. "gp3_clk_src",
  1694. },
  1695. .num_parents = 1,
  1696. .flags = CLK_SET_RATE_PARENT,
  1697. .ops = &clk_branch2_ops,
  1698. },
  1699. },
  1700. };
  1701. static struct clk_branch gcc_lpass_q6_axi_clk = {
  1702. .halt_reg = 0x11c0,
  1703. .clkr = {
  1704. .enable_reg = 0x11c0,
  1705. .enable_mask = BIT(0),
  1706. .hw.init = &(struct clk_init_data){
  1707. .name = "gcc_lpass_q6_axi_clk",
  1708. .parent_names = (const char *[]){
  1709. "system_noc_clk_src",
  1710. },
  1711. .num_parents = 1,
  1712. .ops = &clk_branch2_ops,
  1713. },
  1714. },
  1715. };
  1716. static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = {
  1717. .halt_reg = 0x024c,
  1718. .clkr = {
  1719. .enable_reg = 0x024c,
  1720. .enable_mask = BIT(0),
  1721. .hw.init = &(struct clk_init_data){
  1722. .name = "gcc_mmss_noc_cfg_ahb_clk",
  1723. .parent_names = (const char *[]){
  1724. "config_noc_clk_src",
  1725. },
  1726. .num_parents = 1,
  1727. .ops = &clk_branch2_ops,
  1728. .flags = CLK_IGNORE_UNUSED,
  1729. },
  1730. },
  1731. };
  1732. static struct clk_branch gcc_ocmem_noc_cfg_ahb_clk = {
  1733. .halt_reg = 0x0248,
  1734. .clkr = {
  1735. .enable_reg = 0x0248,
  1736. .enable_mask = BIT(0),
  1737. .hw.init = &(struct clk_init_data){
  1738. .name = "gcc_ocmem_noc_cfg_ahb_clk",
  1739. .parent_names = (const char *[]){
  1740. "config_noc_clk_src",
  1741. },
  1742. .num_parents = 1,
  1743. .ops = &clk_branch2_ops,
  1744. },
  1745. },
  1746. };
  1747. static struct clk_branch gcc_mss_cfg_ahb_clk = {
  1748. .halt_reg = 0x0280,
  1749. .clkr = {
  1750. .enable_reg = 0x0280,
  1751. .enable_mask = BIT(0),
  1752. .hw.init = &(struct clk_init_data){
  1753. .name = "gcc_mss_cfg_ahb_clk",
  1754. .parent_names = (const char *[]){
  1755. "config_noc_clk_src",
  1756. },
  1757. .num_parents = 1,
  1758. .ops = &clk_branch2_ops,
  1759. },
  1760. },
  1761. };
  1762. static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
  1763. .halt_reg = 0x0284,
  1764. .clkr = {
  1765. .enable_reg = 0x0284,
  1766. .enable_mask = BIT(0),
  1767. .hw.init = &(struct clk_init_data){
  1768. .name = "gcc_mss_q6_bimc_axi_clk",
  1769. .flags = CLK_IS_ROOT,
  1770. .ops = &clk_branch2_ops,
  1771. },
  1772. },
  1773. };
  1774. static struct clk_branch gcc_pdm2_clk = {
  1775. .halt_reg = 0x0ccc,
  1776. .clkr = {
  1777. .enable_reg = 0x0ccc,
  1778. .enable_mask = BIT(0),
  1779. .hw.init = &(struct clk_init_data){
  1780. .name = "gcc_pdm2_clk",
  1781. .parent_names = (const char *[]){
  1782. "pdm2_clk_src",
  1783. },
  1784. .num_parents = 1,
  1785. .flags = CLK_SET_RATE_PARENT,
  1786. .ops = &clk_branch2_ops,
  1787. },
  1788. },
  1789. };
  1790. static struct clk_branch gcc_pdm_ahb_clk = {
  1791. .halt_reg = 0x0cc4,
  1792. .clkr = {
  1793. .enable_reg = 0x0cc4,
  1794. .enable_mask = BIT(0),
  1795. .hw.init = &(struct clk_init_data){
  1796. .name = "gcc_pdm_ahb_clk",
  1797. .parent_names = (const char *[]){
  1798. "periph_noc_clk_src",
  1799. },
  1800. .num_parents = 1,
  1801. .ops = &clk_branch2_ops,
  1802. },
  1803. },
  1804. };
  1805. static struct clk_branch gcc_prng_ahb_clk = {
  1806. .halt_reg = 0x0d04,
  1807. .halt_check = BRANCH_HALT_VOTED,
  1808. .clkr = {
  1809. .enable_reg = 0x1484,
  1810. .enable_mask = BIT(13),
  1811. .hw.init = &(struct clk_init_data){
  1812. .name = "gcc_prng_ahb_clk",
  1813. .parent_names = (const char *[]){
  1814. "periph_noc_clk_src",
  1815. },
  1816. .num_parents = 1,
  1817. .ops = &clk_branch2_ops,
  1818. },
  1819. },
  1820. };
  1821. static struct clk_branch gcc_sdcc1_ahb_clk = {
  1822. .halt_reg = 0x04c8,
  1823. .clkr = {
  1824. .enable_reg = 0x04c8,
  1825. .enable_mask = BIT(0),
  1826. .hw.init = &(struct clk_init_data){
  1827. .name = "gcc_sdcc1_ahb_clk",
  1828. .parent_names = (const char *[]){
  1829. "periph_noc_clk_src",
  1830. },
  1831. .num_parents = 1,
  1832. .ops = &clk_branch2_ops,
  1833. },
  1834. },
  1835. };
  1836. static struct clk_branch gcc_sdcc1_apps_clk = {
  1837. .halt_reg = 0x04c4,
  1838. .clkr = {
  1839. .enable_reg = 0x04c4,
  1840. .enable_mask = BIT(0),
  1841. .hw.init = &(struct clk_init_data){
  1842. .name = "gcc_sdcc1_apps_clk",
  1843. .parent_names = (const char *[]){
  1844. "sdcc1_apps_clk_src",
  1845. },
  1846. .num_parents = 1,
  1847. .flags = CLK_SET_RATE_PARENT,
  1848. .ops = &clk_branch2_ops,
  1849. },
  1850. },
  1851. };
  1852. static struct clk_branch gcc_sdcc2_ahb_clk = {
  1853. .halt_reg = 0x0508,
  1854. .clkr = {
  1855. .enable_reg = 0x0508,
  1856. .enable_mask = BIT(0),
  1857. .hw.init = &(struct clk_init_data){
  1858. .name = "gcc_sdcc2_ahb_clk",
  1859. .parent_names = (const char *[]){
  1860. "periph_noc_clk_src",
  1861. },
  1862. .num_parents = 1,
  1863. .ops = &clk_branch2_ops,
  1864. },
  1865. },
  1866. };
  1867. static struct clk_branch gcc_sdcc2_apps_clk = {
  1868. .halt_reg = 0x0504,
  1869. .clkr = {
  1870. .enable_reg = 0x0504,
  1871. .enable_mask = BIT(0),
  1872. .hw.init = &(struct clk_init_data){
  1873. .name = "gcc_sdcc2_apps_clk",
  1874. .parent_names = (const char *[]){
  1875. "sdcc2_apps_clk_src",
  1876. },
  1877. .num_parents = 1,
  1878. .flags = CLK_SET_RATE_PARENT,
  1879. .ops = &clk_branch2_ops,
  1880. },
  1881. },
  1882. };
  1883. static struct clk_branch gcc_sdcc3_ahb_clk = {
  1884. .halt_reg = 0x0548,
  1885. .clkr = {
  1886. .enable_reg = 0x0548,
  1887. .enable_mask = BIT(0),
  1888. .hw.init = &(struct clk_init_data){
  1889. .name = "gcc_sdcc3_ahb_clk",
  1890. .parent_names = (const char *[]){
  1891. "periph_noc_clk_src",
  1892. },
  1893. .num_parents = 1,
  1894. .ops = &clk_branch2_ops,
  1895. },
  1896. },
  1897. };
  1898. static struct clk_branch gcc_sdcc3_apps_clk = {
  1899. .halt_reg = 0x0544,
  1900. .clkr = {
  1901. .enable_reg = 0x0544,
  1902. .enable_mask = BIT(0),
  1903. .hw.init = &(struct clk_init_data){
  1904. .name = "gcc_sdcc3_apps_clk",
  1905. .parent_names = (const char *[]){
  1906. "sdcc3_apps_clk_src",
  1907. },
  1908. .num_parents = 1,
  1909. .flags = CLK_SET_RATE_PARENT,
  1910. .ops = &clk_branch2_ops,
  1911. },
  1912. },
  1913. };
  1914. static struct clk_branch gcc_sdcc4_ahb_clk = {
  1915. .halt_reg = 0x0588,
  1916. .clkr = {
  1917. .enable_reg = 0x0588,
  1918. .enable_mask = BIT(0),
  1919. .hw.init = &(struct clk_init_data){
  1920. .name = "gcc_sdcc4_ahb_clk",
  1921. .parent_names = (const char *[]){
  1922. "periph_noc_clk_src",
  1923. },
  1924. .num_parents = 1,
  1925. .ops = &clk_branch2_ops,
  1926. },
  1927. },
  1928. };
  1929. static struct clk_branch gcc_sdcc4_apps_clk = {
  1930. .halt_reg = 0x0584,
  1931. .clkr = {
  1932. .enable_reg = 0x0584,
  1933. .enable_mask = BIT(0),
  1934. .hw.init = &(struct clk_init_data){
  1935. .name = "gcc_sdcc4_apps_clk",
  1936. .parent_names = (const char *[]){
  1937. "sdcc4_apps_clk_src",
  1938. },
  1939. .num_parents = 1,
  1940. .flags = CLK_SET_RATE_PARENT,
  1941. .ops = &clk_branch2_ops,
  1942. },
  1943. },
  1944. };
  1945. static struct clk_branch gcc_sys_noc_usb3_axi_clk = {
  1946. .halt_reg = 0x0108,
  1947. .clkr = {
  1948. .enable_reg = 0x0108,
  1949. .enable_mask = BIT(0),
  1950. .hw.init = &(struct clk_init_data){
  1951. .name = "gcc_sys_noc_usb3_axi_clk",
  1952. .parent_names = (const char *[]){
  1953. "usb30_master_clk_src",
  1954. },
  1955. .num_parents = 1,
  1956. .flags = CLK_SET_RATE_PARENT,
  1957. .ops = &clk_branch2_ops,
  1958. },
  1959. },
  1960. };
  1961. static struct clk_branch gcc_tsif_ahb_clk = {
  1962. .halt_reg = 0x0d84,
  1963. .clkr = {
  1964. .enable_reg = 0x0d84,
  1965. .enable_mask = BIT(0),
  1966. .hw.init = &(struct clk_init_data){
  1967. .name = "gcc_tsif_ahb_clk",
  1968. .parent_names = (const char *[]){
  1969. "periph_noc_clk_src",
  1970. },
  1971. .num_parents = 1,
  1972. .ops = &clk_branch2_ops,
  1973. },
  1974. },
  1975. };
  1976. static struct clk_branch gcc_tsif_ref_clk = {
  1977. .halt_reg = 0x0d88,
  1978. .clkr = {
  1979. .enable_reg = 0x0d88,
  1980. .enable_mask = BIT(0),
  1981. .hw.init = &(struct clk_init_data){
  1982. .name = "gcc_tsif_ref_clk",
  1983. .parent_names = (const char *[]){
  1984. "tsif_ref_clk_src",
  1985. },
  1986. .num_parents = 1,
  1987. .flags = CLK_SET_RATE_PARENT,
  1988. .ops = &clk_branch2_ops,
  1989. },
  1990. },
  1991. };
  1992. static struct clk_branch gcc_usb2a_phy_sleep_clk = {
  1993. .halt_reg = 0x04ac,
  1994. .clkr = {
  1995. .enable_reg = 0x04ac,
  1996. .enable_mask = BIT(0),
  1997. .hw.init = &(struct clk_init_data){
  1998. .name = "gcc_usb2a_phy_sleep_clk",
  1999. .parent_names = (const char *[]){
  2000. "sleep_clk_src",
  2001. },
  2002. .num_parents = 1,
  2003. .ops = &clk_branch2_ops,
  2004. },
  2005. },
  2006. };
  2007. static struct clk_branch gcc_usb2b_phy_sleep_clk = {
  2008. .halt_reg = 0x04b4,
  2009. .clkr = {
  2010. .enable_reg = 0x04b4,
  2011. .enable_mask = BIT(0),
  2012. .hw.init = &(struct clk_init_data){
  2013. .name = "gcc_usb2b_phy_sleep_clk",
  2014. .parent_names = (const char *[]){
  2015. "sleep_clk_src",
  2016. },
  2017. .num_parents = 1,
  2018. .ops = &clk_branch2_ops,
  2019. },
  2020. },
  2021. };
  2022. static struct clk_branch gcc_usb30_master_clk = {
  2023. .halt_reg = 0x03c8,
  2024. .clkr = {
  2025. .enable_reg = 0x03c8,
  2026. .enable_mask = BIT(0),
  2027. .hw.init = &(struct clk_init_data){
  2028. .name = "gcc_usb30_master_clk",
  2029. .parent_names = (const char *[]){
  2030. "usb30_master_clk_src",
  2031. },
  2032. .num_parents = 1,
  2033. .flags = CLK_SET_RATE_PARENT,
  2034. .ops = &clk_branch2_ops,
  2035. },
  2036. },
  2037. };
  2038. static struct clk_branch gcc_usb30_mock_utmi_clk = {
  2039. .halt_reg = 0x03d0,
  2040. .clkr = {
  2041. .enable_reg = 0x03d0,
  2042. .enable_mask = BIT(0),
  2043. .hw.init = &(struct clk_init_data){
  2044. .name = "gcc_usb30_mock_utmi_clk",
  2045. .parent_names = (const char *[]){
  2046. "usb30_mock_utmi_clk_src",
  2047. },
  2048. .num_parents = 1,
  2049. .flags = CLK_SET_RATE_PARENT,
  2050. .ops = &clk_branch2_ops,
  2051. },
  2052. },
  2053. };
  2054. static struct clk_branch gcc_usb30_sleep_clk = {
  2055. .halt_reg = 0x03cc,
  2056. .clkr = {
  2057. .enable_reg = 0x03cc,
  2058. .enable_mask = BIT(0),
  2059. .hw.init = &(struct clk_init_data){
  2060. .name = "gcc_usb30_sleep_clk",
  2061. .parent_names = (const char *[]){
  2062. "sleep_clk_src",
  2063. },
  2064. .num_parents = 1,
  2065. .ops = &clk_branch2_ops,
  2066. },
  2067. },
  2068. };
  2069. static struct clk_branch gcc_usb_hs_ahb_clk = {
  2070. .halt_reg = 0x0488,
  2071. .clkr = {
  2072. .enable_reg = 0x0488,
  2073. .enable_mask = BIT(0),
  2074. .hw.init = &(struct clk_init_data){
  2075. .name = "gcc_usb_hs_ahb_clk",
  2076. .parent_names = (const char *[]){
  2077. "periph_noc_clk_src",
  2078. },
  2079. .num_parents = 1,
  2080. .ops = &clk_branch2_ops,
  2081. },
  2082. },
  2083. };
  2084. static struct clk_branch gcc_usb_hs_system_clk = {
  2085. .halt_reg = 0x0484,
  2086. .clkr = {
  2087. .enable_reg = 0x0484,
  2088. .enable_mask = BIT(0),
  2089. .hw.init = &(struct clk_init_data){
  2090. .name = "gcc_usb_hs_system_clk",
  2091. .parent_names = (const char *[]){
  2092. "usb_hs_system_clk_src",
  2093. },
  2094. .num_parents = 1,
  2095. .flags = CLK_SET_RATE_PARENT,
  2096. .ops = &clk_branch2_ops,
  2097. },
  2098. },
  2099. };
  2100. static struct clk_branch gcc_usb_hsic_ahb_clk = {
  2101. .halt_reg = 0x0408,
  2102. .clkr = {
  2103. .enable_reg = 0x0408,
  2104. .enable_mask = BIT(0),
  2105. .hw.init = &(struct clk_init_data){
  2106. .name = "gcc_usb_hsic_ahb_clk",
  2107. .parent_names = (const char *[]){
  2108. "periph_noc_clk_src",
  2109. },
  2110. .num_parents = 1,
  2111. .ops = &clk_branch2_ops,
  2112. },
  2113. },
  2114. };
  2115. static struct clk_branch gcc_usb_hsic_clk = {
  2116. .halt_reg = 0x0410,
  2117. .clkr = {
  2118. .enable_reg = 0x0410,
  2119. .enable_mask = BIT(0),
  2120. .hw.init = &(struct clk_init_data){
  2121. .name = "gcc_usb_hsic_clk",
  2122. .parent_names = (const char *[]){
  2123. "usb_hsic_clk_src",
  2124. },
  2125. .num_parents = 1,
  2126. .flags = CLK_SET_RATE_PARENT,
  2127. .ops = &clk_branch2_ops,
  2128. },
  2129. },
  2130. };
  2131. static struct clk_branch gcc_usb_hsic_io_cal_clk = {
  2132. .halt_reg = 0x0414,
  2133. .clkr = {
  2134. .enable_reg = 0x0414,
  2135. .enable_mask = BIT(0),
  2136. .hw.init = &(struct clk_init_data){
  2137. .name = "gcc_usb_hsic_io_cal_clk",
  2138. .parent_names = (const char *[]){
  2139. "usb_hsic_io_cal_clk_src",
  2140. },
  2141. .num_parents = 1,
  2142. .flags = CLK_SET_RATE_PARENT,
  2143. .ops = &clk_branch2_ops,
  2144. },
  2145. },
  2146. };
  2147. static struct clk_branch gcc_usb_hsic_io_cal_sleep_clk = {
  2148. .halt_reg = 0x0418,
  2149. .clkr = {
  2150. .enable_reg = 0x0418,
  2151. .enable_mask = BIT(0),
  2152. .hw.init = &(struct clk_init_data){
  2153. .name = "gcc_usb_hsic_io_cal_sleep_clk",
  2154. .parent_names = (const char *[]){
  2155. "sleep_clk_src",
  2156. },
  2157. .num_parents = 1,
  2158. .ops = &clk_branch2_ops,
  2159. },
  2160. },
  2161. };
  2162. static struct clk_branch gcc_usb_hsic_system_clk = {
  2163. .halt_reg = 0x040c,
  2164. .clkr = {
  2165. .enable_reg = 0x040c,
  2166. .enable_mask = BIT(0),
  2167. .hw.init = &(struct clk_init_data){
  2168. .name = "gcc_usb_hsic_system_clk",
  2169. .parent_names = (const char *[]){
  2170. "usb_hsic_system_clk_src",
  2171. },
  2172. .num_parents = 1,
  2173. .flags = CLK_SET_RATE_PARENT,
  2174. .ops = &clk_branch2_ops,
  2175. },
  2176. },
  2177. };
  2178. static struct clk_regmap *gcc_msm8974_clocks[] = {
  2179. [GPLL0] = &gpll0.clkr,
  2180. [GPLL0_VOTE] = &gpll0_vote,
  2181. [CONFIG_NOC_CLK_SRC] = &config_noc_clk_src.clkr,
  2182. [PERIPH_NOC_CLK_SRC] = &periph_noc_clk_src.clkr,
  2183. [SYSTEM_NOC_CLK_SRC] = &system_noc_clk_src.clkr,
  2184. [GPLL1] = &gpll1.clkr,
  2185. [GPLL1_VOTE] = &gpll1_vote,
  2186. [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
  2187. [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
  2188. [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
  2189. [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
  2190. [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
  2191. [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
  2192. [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
  2193. [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
  2194. [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
  2195. [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
  2196. [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
  2197. [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
  2198. [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
  2199. [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
  2200. [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
  2201. [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
  2202. [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
  2203. [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
  2204. [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
  2205. [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
  2206. [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
  2207. [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
  2208. [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
  2209. [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
  2210. [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
  2211. [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
  2212. [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
  2213. [BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr,
  2214. [BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr,
  2215. [BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr,
  2216. [BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr,
  2217. [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
  2218. [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
  2219. [BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr,
  2220. [BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr,
  2221. [BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr,
  2222. [BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr,
  2223. [CE1_CLK_SRC] = &ce1_clk_src.clkr,
  2224. [CE2_CLK_SRC] = &ce2_clk_src.clkr,
  2225. [GP1_CLK_SRC] = &gp1_clk_src.clkr,
  2226. [GP2_CLK_SRC] = &gp2_clk_src.clkr,
  2227. [GP3_CLK_SRC] = &gp3_clk_src.clkr,
  2228. [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
  2229. [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
  2230. [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
  2231. [SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
  2232. [SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr,
  2233. [TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr,
  2234. [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
  2235. [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
  2236. [USB_HSIC_CLK_SRC] = &usb_hsic_clk_src.clkr,
  2237. [USB_HSIC_IO_CAL_CLK_SRC] = &usb_hsic_io_cal_clk_src.clkr,
  2238. [USB_HSIC_SYSTEM_CLK_SRC] = &usb_hsic_system_clk_src.clkr,
  2239. [GCC_BAM_DMA_AHB_CLK] = &gcc_bam_dma_ahb_clk.clkr,
  2240. [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
  2241. [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
  2242. [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
  2243. [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
  2244. [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
  2245. [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
  2246. [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
  2247. [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
  2248. [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
  2249. [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
  2250. [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
  2251. [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
  2252. [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
  2253. [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
  2254. [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
  2255. [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
  2256. [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
  2257. [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
  2258. [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
  2259. [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
  2260. [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
  2261. [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
  2262. [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
  2263. [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
  2264. [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
  2265. [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
  2266. [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
  2267. [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
  2268. [GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr,
  2269. [GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr,
  2270. [GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr,
  2271. [GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr,
  2272. [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
  2273. [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
  2274. [GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr,
  2275. [GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr,
  2276. [GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr,
  2277. [GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr,
  2278. [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
  2279. [GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
  2280. [GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
  2281. [GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
  2282. [GCC_CE2_AHB_CLK] = &gcc_ce2_ahb_clk.clkr,
  2283. [GCC_CE2_AXI_CLK] = &gcc_ce2_axi_clk.clkr,
  2284. [GCC_CE2_CLK] = &gcc_ce2_clk.clkr,
  2285. [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
  2286. [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
  2287. [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
  2288. [GCC_LPASS_Q6_AXI_CLK] = &gcc_lpass_q6_axi_clk.clkr,
  2289. [GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr,
  2290. [GCC_OCMEM_NOC_CFG_AHB_CLK] = &gcc_ocmem_noc_cfg_ahb_clk.clkr,
  2291. [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
  2292. [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
  2293. [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
  2294. [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
  2295. [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
  2296. [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
  2297. [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
  2298. [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
  2299. [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
  2300. [GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr,
  2301. [GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
  2302. [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
  2303. [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
  2304. [GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr,
  2305. [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
  2306. [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
  2307. [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
  2308. [GCC_USB2B_PHY_SLEEP_CLK] = &gcc_usb2b_phy_sleep_clk.clkr,
  2309. [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
  2310. [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
  2311. [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
  2312. [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
  2313. [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
  2314. [GCC_USB_HSIC_AHB_CLK] = &gcc_usb_hsic_ahb_clk.clkr,
  2315. [GCC_USB_HSIC_CLK] = &gcc_usb_hsic_clk.clkr,
  2316. [GCC_USB_HSIC_IO_CAL_CLK] = &gcc_usb_hsic_io_cal_clk.clkr,
  2317. [GCC_USB_HSIC_IO_CAL_SLEEP_CLK] = &gcc_usb_hsic_io_cal_sleep_clk.clkr,
  2318. [GCC_USB_HSIC_SYSTEM_CLK] = &gcc_usb_hsic_system_clk.clkr,
  2319. [GCC_MMSS_GPLL0_CLK_SRC] = &gcc_mmss_gpll0_clk_src,
  2320. };
  2321. static const struct qcom_reset_map gcc_msm8974_resets[] = {
  2322. [GCC_SYSTEM_NOC_BCR] = { 0x0100 },
  2323. [GCC_CONFIG_NOC_BCR] = { 0x0140 },
  2324. [GCC_PERIPH_NOC_BCR] = { 0x0180 },
  2325. [GCC_IMEM_BCR] = { 0x0200 },
  2326. [GCC_MMSS_BCR] = { 0x0240 },
  2327. [GCC_QDSS_BCR] = { 0x0300 },
  2328. [GCC_USB_30_BCR] = { 0x03c0 },
  2329. [GCC_USB3_PHY_BCR] = { 0x03fc },
  2330. [GCC_USB_HS_HSIC_BCR] = { 0x0400 },
  2331. [GCC_USB_HS_BCR] = { 0x0480 },
  2332. [GCC_USB2A_PHY_BCR] = { 0x04a8 },
  2333. [GCC_USB2B_PHY_BCR] = { 0x04b0 },
  2334. [GCC_SDCC1_BCR] = { 0x04c0 },
  2335. [GCC_SDCC2_BCR] = { 0x0500 },
  2336. [GCC_SDCC3_BCR] = { 0x0540 },
  2337. [GCC_SDCC4_BCR] = { 0x0580 },
  2338. [GCC_BLSP1_BCR] = { 0x05c0 },
  2339. [GCC_BLSP1_QUP1_BCR] = { 0x0640 },
  2340. [GCC_BLSP1_UART1_BCR] = { 0x0680 },
  2341. [GCC_BLSP1_QUP2_BCR] = { 0x06c0 },
  2342. [GCC_BLSP1_UART2_BCR] = { 0x0700 },
  2343. [GCC_BLSP1_QUP3_BCR] = { 0x0740 },
  2344. [GCC_BLSP1_UART3_BCR] = { 0x0780 },
  2345. [GCC_BLSP1_QUP4_BCR] = { 0x07c0 },
  2346. [GCC_BLSP1_UART4_BCR] = { 0x0800 },
  2347. [GCC_BLSP1_QUP5_BCR] = { 0x0840 },
  2348. [GCC_BLSP1_UART5_BCR] = { 0x0880 },
  2349. [GCC_BLSP1_QUP6_BCR] = { 0x08c0 },
  2350. [GCC_BLSP1_UART6_BCR] = { 0x0900 },
  2351. [GCC_BLSP2_BCR] = { 0x0940 },
  2352. [GCC_BLSP2_QUP1_BCR] = { 0x0980 },
  2353. [GCC_BLSP2_UART1_BCR] = { 0x09c0 },
  2354. [GCC_BLSP2_QUP2_BCR] = { 0x0a00 },
  2355. [GCC_BLSP2_UART2_BCR] = { 0x0a40 },
  2356. [GCC_BLSP2_QUP3_BCR] = { 0x0a80 },
  2357. [GCC_BLSP2_UART3_BCR] = { 0x0ac0 },
  2358. [GCC_BLSP2_QUP4_BCR] = { 0x0b00 },
  2359. [GCC_BLSP2_UART4_BCR] = { 0x0b40 },
  2360. [GCC_BLSP2_QUP5_BCR] = { 0x0b80 },
  2361. [GCC_BLSP2_UART5_BCR] = { 0x0bc0 },
  2362. [GCC_BLSP2_QUP6_BCR] = { 0x0c00 },
  2363. [GCC_BLSP2_UART6_BCR] = { 0x0c40 },
  2364. [GCC_PDM_BCR] = { 0x0cc0 },
  2365. [GCC_BAM_DMA_BCR] = { 0x0d40 },
  2366. [GCC_TSIF_BCR] = { 0x0d80 },
  2367. [GCC_TCSR_BCR] = { 0x0dc0 },
  2368. [GCC_BOOT_ROM_BCR] = { 0x0e00 },
  2369. [GCC_MSG_RAM_BCR] = { 0x0e40 },
  2370. [GCC_TLMM_BCR] = { 0x0e80 },
  2371. [GCC_MPM_BCR] = { 0x0ec0 },
  2372. [GCC_SEC_CTRL_BCR] = { 0x0f40 },
  2373. [GCC_SPMI_BCR] = { 0x0fc0 },
  2374. [GCC_SPDM_BCR] = { 0x1000 },
  2375. [GCC_CE1_BCR] = { 0x1040 },
  2376. [GCC_CE2_BCR] = { 0x1080 },
  2377. [GCC_BIMC_BCR] = { 0x1100 },
  2378. [GCC_MPM_NON_AHB_RESET] = { 0x0ec4, 2 },
  2379. [GCC_MPM_AHB_RESET] = { 0x0ec4, 1 },
  2380. [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x1240 },
  2381. [GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x1248 },
  2382. [GCC_PNOC_BUS_TIMEOUT0_BCR] = { 0x1280 },
  2383. [GCC_PNOC_BUS_TIMEOUT1_BCR] = { 0x1288 },
  2384. [GCC_PNOC_BUS_TIMEOUT2_BCR] = { 0x1290 },
  2385. [GCC_PNOC_BUS_TIMEOUT3_BCR] = { 0x1298 },
  2386. [GCC_PNOC_BUS_TIMEOUT4_BCR] = { 0x12a0 },
  2387. [GCC_CNOC_BUS_TIMEOUT0_BCR] = { 0x12c0 },
  2388. [GCC_CNOC_BUS_TIMEOUT1_BCR] = { 0x12c8 },
  2389. [GCC_CNOC_BUS_TIMEOUT2_BCR] = { 0x12d0 },
  2390. [GCC_CNOC_BUS_TIMEOUT3_BCR] = { 0x12d8 },
  2391. [GCC_CNOC_BUS_TIMEOUT4_BCR] = { 0x12e0 },
  2392. [GCC_CNOC_BUS_TIMEOUT5_BCR] = { 0x12e8 },
  2393. [GCC_CNOC_BUS_TIMEOUT6_BCR] = { 0x12f0 },
  2394. [GCC_DEHR_BCR] = { 0x1300 },
  2395. [GCC_RBCPR_BCR] = { 0x1380 },
  2396. [GCC_MSS_RESTART] = { 0x1680 },
  2397. [GCC_LPASS_RESTART] = { 0x16c0 },
  2398. [GCC_WCSS_RESTART] = { 0x1700 },
  2399. [GCC_VENUS_RESTART] = { 0x1740 },
  2400. };
  2401. static const struct regmap_config gcc_msm8974_regmap_config = {
  2402. .reg_bits = 32,
  2403. .reg_stride = 4,
  2404. .val_bits = 32,
  2405. .max_register = 0x1fc0,
  2406. .fast_io = true,
  2407. };
  2408. static const struct of_device_id gcc_msm8974_match_table[] = {
  2409. { .compatible = "qcom,gcc-msm8974" },
  2410. { }
  2411. };
  2412. MODULE_DEVICE_TABLE(of, gcc_msm8974_match_table);
  2413. struct qcom_cc {
  2414. struct qcom_reset_controller reset;
  2415. struct clk_onecell_data data;
  2416. struct clk *clks[];
  2417. };
  2418. static int gcc_msm8974_probe(struct platform_device *pdev)
  2419. {
  2420. void __iomem *base;
  2421. struct resource *res;
  2422. int i, ret;
  2423. struct device *dev = &pdev->dev;
  2424. struct clk *clk;
  2425. struct clk_onecell_data *data;
  2426. struct clk **clks;
  2427. struct regmap *regmap;
  2428. size_t num_clks;
  2429. struct qcom_reset_controller *reset;
  2430. struct qcom_cc *cc;
  2431. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  2432. base = devm_ioremap_resource(dev, res);
  2433. if (IS_ERR(base))
  2434. return PTR_ERR(base);
  2435. regmap = devm_regmap_init_mmio(dev, base, &gcc_msm8974_regmap_config);
  2436. if (IS_ERR(regmap))
  2437. return PTR_ERR(regmap);
  2438. num_clks = ARRAY_SIZE(gcc_msm8974_clocks);
  2439. cc = devm_kzalloc(dev, sizeof(*cc) + sizeof(*clks) * num_clks,
  2440. GFP_KERNEL);
  2441. if (!cc)
  2442. return -ENOMEM;
  2443. clks = cc->clks;
  2444. data = &cc->data;
  2445. data->clks = clks;
  2446. data->clk_num = num_clks;
  2447. /* Temporary until RPM clocks supported */
  2448. clk = clk_register_fixed_rate(dev, "xo", NULL, CLK_IS_ROOT, 19200000);
  2449. if (IS_ERR(clk))
  2450. return PTR_ERR(clk);
  2451. /* Should move to DT node? */
  2452. clk = clk_register_fixed_rate(dev, "sleep_clk_src", NULL,
  2453. CLK_IS_ROOT, 32768);
  2454. if (IS_ERR(clk))
  2455. return PTR_ERR(clk);
  2456. for (i = 0; i < num_clks; i++) {
  2457. if (!gcc_msm8974_clocks[i])
  2458. continue;
  2459. clk = devm_clk_register_regmap(dev, gcc_msm8974_clocks[i]);
  2460. if (IS_ERR(clk))
  2461. return PTR_ERR(clk);
  2462. clks[i] = clk;
  2463. }
  2464. ret = of_clk_add_provider(dev->of_node, of_clk_src_onecell_get, data);
  2465. if (ret)
  2466. return ret;
  2467. reset = &cc->reset;
  2468. reset->rcdev.of_node = dev->of_node;
  2469. reset->rcdev.ops = &qcom_reset_ops,
  2470. reset->rcdev.owner = THIS_MODULE,
  2471. reset->rcdev.nr_resets = ARRAY_SIZE(gcc_msm8974_resets),
  2472. reset->regmap = regmap;
  2473. reset->reset_map = gcc_msm8974_resets,
  2474. platform_set_drvdata(pdev, &reset->rcdev);
  2475. ret = reset_controller_register(&reset->rcdev);
  2476. if (ret)
  2477. of_clk_del_provider(dev->of_node);
  2478. return ret;
  2479. }
  2480. static int gcc_msm8974_remove(struct platform_device *pdev)
  2481. {
  2482. of_clk_del_provider(pdev->dev.of_node);
  2483. reset_controller_unregister(platform_get_drvdata(pdev));
  2484. return 0;
  2485. }
  2486. static struct platform_driver gcc_msm8974_driver = {
  2487. .probe = gcc_msm8974_probe,
  2488. .remove = gcc_msm8974_remove,
  2489. .driver = {
  2490. .name = "gcc-msm8974",
  2491. .owner = THIS_MODULE,
  2492. .of_match_table = gcc_msm8974_match_table,
  2493. },
  2494. };
  2495. static int __init gcc_msm8974_init(void)
  2496. {
  2497. return platform_driver_register(&gcc_msm8974_driver);
  2498. }
  2499. core_initcall(gcc_msm8974_init);
  2500. static void __exit gcc_msm8974_exit(void)
  2501. {
  2502. platform_driver_unregister(&gcc_msm8974_driver);
  2503. }
  2504. module_exit(gcc_msm8974_exit);
  2505. MODULE_DESCRIPTION("QCOM GCC MSM8974 Driver");
  2506. MODULE_LICENSE("GPL v2");
  2507. MODULE_ALIAS("platform:gcc-msm8974");