clk-fsd.c 90 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2017-2022 Samsung Electronics Co., Ltd.
  4. * https://www.samsung.com
  5. * Copyright (c) 2017-2022 Tesla, Inc.
  6. * https://www.tesla.com
  7. *
  8. * Common Clock Framework support for FSD SoC.
  9. */
  10. #include <linux/clk.h>
  11. #include <linux/clk-provider.h>
  12. #include <linux/init.h>
  13. #include <linux/kernel.h>
  14. #include <linux/of.h>
  15. #include <linux/platform_device.h>
  16. #include <dt-bindings/clock/fsd-clk.h>
  17. #include "clk.h"
  18. #include "clk-exynos-arm64.h"
  19. /* Register Offset definitions for CMU_CMU (0x11c10000) */
  20. #define PLL_LOCKTIME_PLL_SHARED0 0x0
  21. #define PLL_LOCKTIME_PLL_SHARED1 0x4
  22. #define PLL_LOCKTIME_PLL_SHARED2 0x8
  23. #define PLL_LOCKTIME_PLL_SHARED3 0xc
  24. #define PLL_CON0_PLL_SHARED0 0x100
  25. #define PLL_CON0_PLL_SHARED1 0x120
  26. #define PLL_CON0_PLL_SHARED2 0x140
  27. #define PLL_CON0_PLL_SHARED3 0x160
  28. #define MUX_CMU_CIS0_CLKMUX 0x1000
  29. #define MUX_CMU_CIS1_CLKMUX 0x1004
  30. #define MUX_CMU_CIS2_CLKMUX 0x1008
  31. #define MUX_CMU_CPUCL_SWITCHMUX 0x100c
  32. #define MUX_CMU_FSYS1_ACLK_MUX 0x1014
  33. #define MUX_PLL_SHARED0_MUX 0x1020
  34. #define MUX_PLL_SHARED1_MUX 0x1024
  35. #define DIV_CMU_CIS0_CLK 0x1800
  36. #define DIV_CMU_CIS1_CLK 0x1804
  37. #define DIV_CMU_CIS2_CLK 0x1808
  38. #define DIV_CMU_CMU_ACLK 0x180c
  39. #define DIV_CMU_CPUCL_SWITCH 0x1810
  40. #define DIV_CMU_FSYS0_SHARED0DIV4 0x181c
  41. #define DIV_CMU_FSYS0_SHARED1DIV3 0x1820
  42. #define DIV_CMU_FSYS0_SHARED1DIV4 0x1824
  43. #define DIV_CMU_FSYS1_SHARED0DIV4 0x1828
  44. #define DIV_CMU_FSYS1_SHARED0DIV8 0x182c
  45. #define DIV_CMU_IMEM_ACLK 0x1834
  46. #define DIV_CMU_IMEM_DMACLK 0x1838
  47. #define DIV_CMU_IMEM_TCUCLK 0x183c
  48. #define DIV_CMU_PERIC_SHARED0DIV20 0x1844
  49. #define DIV_CMU_PERIC_SHARED0DIV3_TBUCLK 0x1848
  50. #define DIV_CMU_PERIC_SHARED1DIV36 0x184c
  51. #define DIV_CMU_PERIC_SHARED1DIV4_DMACLK 0x1850
  52. #define DIV_PLL_SHARED0_DIV2 0x1858
  53. #define DIV_PLL_SHARED0_DIV3 0x185c
  54. #define DIV_PLL_SHARED0_DIV4 0x1860
  55. #define DIV_PLL_SHARED0_DIV6 0x1864
  56. #define DIV_PLL_SHARED1_DIV3 0x1868
  57. #define DIV_PLL_SHARED1_DIV36 0x186c
  58. #define DIV_PLL_SHARED1_DIV4 0x1870
  59. #define DIV_PLL_SHARED1_DIV9 0x1874
  60. #define GAT_CMU_CIS0_CLKGATE 0x2000
  61. #define GAT_CMU_CIS1_CLKGATE 0x2004
  62. #define GAT_CMU_CIS2_CLKGATE 0x2008
  63. #define GAT_CMU_CPUCL_SWITCH_GATE 0x200c
  64. #define GAT_CMU_FSYS0_SHARED0DIV4_GATE 0x2018
  65. #define GAT_CMU_FSYS0_SHARED1DIV4_CLK 0x201c
  66. #define GAT_CMU_FSYS0_SHARED1DIV4_GATE 0x2020
  67. #define GAT_CMU_FSYS1_SHARED0DIV4_GATE 0x2024
  68. #define GAT_CMU_FSYS1_SHARED1DIV4_GATE 0x2028
  69. #define GAT_CMU_IMEM_ACLK_GATE 0x2030
  70. #define GAT_CMU_IMEM_DMACLK_GATE 0x2034
  71. #define GAT_CMU_IMEM_TCUCLK_GATE 0x2038
  72. #define GAT_CMU_PERIC_SHARED0DIVE3_TBUCLK_GATE 0x2040
  73. #define GAT_CMU_PERIC_SHARED0DIVE4_GATE 0x2044
  74. #define GAT_CMU_PERIC_SHARED1DIV4_DMACLK_GATE 0x2048
  75. #define GAT_CMU_PERIC_SHARED1DIVE4_GATE 0x204c
  76. #define GAT_CMU_CMU_CMU_IPCLKPORT_PCLK 0x2054
  77. #define GAT_CMU_AXI2APB_CMU_IPCLKPORT_ACLK 0x2058
  78. #define GAT_CMU_NS_BRDG_CMU_IPCLKPORT_CLK__PSOC_CMU__CLK_CMU 0x205c
  79. #define GAT_CMU_SYSREG_CMU_IPCLKPORT_PCLK 0x2060
  80. static const unsigned long cmu_clk_regs[] __initconst = {
  81. PLL_LOCKTIME_PLL_SHARED0,
  82. PLL_LOCKTIME_PLL_SHARED1,
  83. PLL_LOCKTIME_PLL_SHARED2,
  84. PLL_LOCKTIME_PLL_SHARED3,
  85. PLL_CON0_PLL_SHARED0,
  86. PLL_CON0_PLL_SHARED1,
  87. PLL_CON0_PLL_SHARED2,
  88. PLL_CON0_PLL_SHARED3,
  89. MUX_CMU_CIS0_CLKMUX,
  90. MUX_CMU_CIS1_CLKMUX,
  91. MUX_CMU_CIS2_CLKMUX,
  92. MUX_CMU_CPUCL_SWITCHMUX,
  93. MUX_CMU_FSYS1_ACLK_MUX,
  94. MUX_PLL_SHARED0_MUX,
  95. MUX_PLL_SHARED1_MUX,
  96. DIV_CMU_CIS0_CLK,
  97. DIV_CMU_CIS1_CLK,
  98. DIV_CMU_CIS2_CLK,
  99. DIV_CMU_CMU_ACLK,
  100. DIV_CMU_CPUCL_SWITCH,
  101. DIV_CMU_FSYS0_SHARED0DIV4,
  102. DIV_CMU_FSYS0_SHARED1DIV3,
  103. DIV_CMU_FSYS0_SHARED1DIV4,
  104. DIV_CMU_FSYS1_SHARED0DIV4,
  105. DIV_CMU_FSYS1_SHARED0DIV8,
  106. DIV_CMU_IMEM_ACLK,
  107. DIV_CMU_IMEM_DMACLK,
  108. DIV_CMU_IMEM_TCUCLK,
  109. DIV_CMU_PERIC_SHARED0DIV20,
  110. DIV_CMU_PERIC_SHARED0DIV3_TBUCLK,
  111. DIV_CMU_PERIC_SHARED1DIV36,
  112. DIV_CMU_PERIC_SHARED1DIV4_DMACLK,
  113. DIV_PLL_SHARED0_DIV2,
  114. DIV_PLL_SHARED0_DIV3,
  115. DIV_PLL_SHARED0_DIV4,
  116. DIV_PLL_SHARED0_DIV6,
  117. DIV_PLL_SHARED1_DIV3,
  118. DIV_PLL_SHARED1_DIV36,
  119. DIV_PLL_SHARED1_DIV4,
  120. DIV_PLL_SHARED1_DIV9,
  121. GAT_CMU_CIS0_CLKGATE,
  122. GAT_CMU_CIS1_CLKGATE,
  123. GAT_CMU_CIS2_CLKGATE,
  124. GAT_CMU_CPUCL_SWITCH_GATE,
  125. GAT_CMU_FSYS0_SHARED0DIV4_GATE,
  126. GAT_CMU_FSYS0_SHARED1DIV4_CLK,
  127. GAT_CMU_FSYS0_SHARED1DIV4_GATE,
  128. GAT_CMU_FSYS1_SHARED0DIV4_GATE,
  129. GAT_CMU_FSYS1_SHARED1DIV4_GATE,
  130. GAT_CMU_IMEM_ACLK_GATE,
  131. GAT_CMU_IMEM_DMACLK_GATE,
  132. GAT_CMU_IMEM_TCUCLK_GATE,
  133. GAT_CMU_PERIC_SHARED0DIVE3_TBUCLK_GATE,
  134. GAT_CMU_PERIC_SHARED0DIVE4_GATE,
  135. GAT_CMU_PERIC_SHARED1DIV4_DMACLK_GATE,
  136. GAT_CMU_PERIC_SHARED1DIVE4_GATE,
  137. GAT_CMU_CMU_CMU_IPCLKPORT_PCLK,
  138. GAT_CMU_AXI2APB_CMU_IPCLKPORT_ACLK,
  139. GAT_CMU_NS_BRDG_CMU_IPCLKPORT_CLK__PSOC_CMU__CLK_CMU,
  140. GAT_CMU_SYSREG_CMU_IPCLKPORT_PCLK,
  141. };
  142. static const struct samsung_pll_rate_table pll_shared0_rate_table[] __initconst = {
  143. PLL_35XX_RATE(24 * MHZ, 2000000000U, 250, 3, 0),
  144. };
  145. static const struct samsung_pll_rate_table pll_shared1_rate_table[] __initconst = {
  146. PLL_35XX_RATE(24 * MHZ, 2400000000U, 200, 2, 0),
  147. };
  148. static const struct samsung_pll_rate_table pll_shared2_rate_table[] __initconst = {
  149. PLL_35XX_RATE(24 * MHZ, 2400000000U, 200, 2, 0),
  150. };
  151. static const struct samsung_pll_rate_table pll_shared3_rate_table[] __initconst = {
  152. PLL_35XX_RATE(24 * MHZ, 1800000000U, 150, 2, 0),
  153. };
  154. static const struct samsung_pll_clock cmu_pll_clks[] __initconst = {
  155. PLL(pll_142xx, 0, "fout_pll_shared0", "fin_pll", PLL_LOCKTIME_PLL_SHARED0,
  156. PLL_CON0_PLL_SHARED0, pll_shared0_rate_table),
  157. PLL(pll_142xx, 0, "fout_pll_shared1", "fin_pll", PLL_LOCKTIME_PLL_SHARED1,
  158. PLL_CON0_PLL_SHARED1, pll_shared1_rate_table),
  159. PLL(pll_142xx, 0, "fout_pll_shared2", "fin_pll", PLL_LOCKTIME_PLL_SHARED2,
  160. PLL_CON0_PLL_SHARED2, pll_shared2_rate_table),
  161. PLL(pll_142xx, 0, "fout_pll_shared3", "fin_pll", PLL_LOCKTIME_PLL_SHARED3,
  162. PLL_CON0_PLL_SHARED3, pll_shared3_rate_table),
  163. };
  164. /* List of parent clocks for Muxes in CMU_CMU */
  165. PNAME(mout_cmu_shared0_pll_p) = { "fin_pll", "fout_pll_shared0" };
  166. PNAME(mout_cmu_shared1_pll_p) = { "fin_pll", "fout_pll_shared1" };
  167. PNAME(mout_cmu_shared2_pll_p) = { "fin_pll", "fout_pll_shared2" };
  168. PNAME(mout_cmu_shared3_pll_p) = { "fin_pll", "fout_pll_shared3" };
  169. PNAME(mout_cmu_cis0_clkmux_p) = { "fin_pll", "dout_cmu_pll_shared0_div4" };
  170. PNAME(mout_cmu_cis1_clkmux_p) = { "fin_pll", "dout_cmu_pll_shared0_div4" };
  171. PNAME(mout_cmu_cis2_clkmux_p) = { "fin_pll", "dout_cmu_pll_shared0_div4" };
  172. PNAME(mout_cmu_cpucl_switchmux_p) = { "mout_cmu_pll_shared2", "mout_cmu_pll_shared0_mux" };
  173. PNAME(mout_cmu_fsys1_aclk_mux_p) = { "dout_cmu_pll_shared0_div4", "fin_pll" };
  174. PNAME(mout_cmu_pll_shared0_mux_p) = { "fin_pll", "mout_cmu_pll_shared0" };
  175. PNAME(mout_cmu_pll_shared1_mux_p) = { "fin_pll", "mout_cmu_pll_shared1" };
  176. static const struct samsung_mux_clock cmu_mux_clks[] __initconst = {
  177. MUX(0, "mout_cmu_pll_shared0", mout_cmu_shared0_pll_p, PLL_CON0_PLL_SHARED0, 4, 1),
  178. MUX(0, "mout_cmu_pll_shared1", mout_cmu_shared1_pll_p, PLL_CON0_PLL_SHARED1, 4, 1),
  179. MUX(0, "mout_cmu_pll_shared2", mout_cmu_shared2_pll_p, PLL_CON0_PLL_SHARED2, 4, 1),
  180. MUX(0, "mout_cmu_pll_shared3", mout_cmu_shared3_pll_p, PLL_CON0_PLL_SHARED3, 4, 1),
  181. MUX(0, "mout_cmu_cis0_clkmux", mout_cmu_cis0_clkmux_p, MUX_CMU_CIS0_CLKMUX, 0, 1),
  182. MUX(0, "mout_cmu_cis1_clkmux", mout_cmu_cis1_clkmux_p, MUX_CMU_CIS1_CLKMUX, 0, 1),
  183. MUX(0, "mout_cmu_cis2_clkmux", mout_cmu_cis2_clkmux_p, MUX_CMU_CIS2_CLKMUX, 0, 1),
  184. MUX(0, "mout_cmu_cpucl_switchmux", mout_cmu_cpucl_switchmux_p,
  185. MUX_CMU_CPUCL_SWITCHMUX, 0, 1),
  186. MUX(0, "mout_cmu_fsys1_aclk_mux", mout_cmu_fsys1_aclk_mux_p, MUX_CMU_FSYS1_ACLK_MUX, 0, 1),
  187. MUX(0, "mout_cmu_pll_shared0_mux", mout_cmu_pll_shared0_mux_p, MUX_PLL_SHARED0_MUX, 0, 1),
  188. MUX(0, "mout_cmu_pll_shared1_mux", mout_cmu_pll_shared1_mux_p, MUX_PLL_SHARED1_MUX, 0, 1),
  189. };
  190. static const struct samsung_div_clock cmu_div_clks[] __initconst = {
  191. DIV(0, "dout_cmu_cis0_clk", "cmu_cis0_clkgate", DIV_CMU_CIS0_CLK, 0, 4),
  192. DIV(0, "dout_cmu_cis1_clk", "cmu_cis1_clkgate", DIV_CMU_CIS1_CLK, 0, 4),
  193. DIV(0, "dout_cmu_cis2_clk", "cmu_cis2_clkgate", DIV_CMU_CIS2_CLK, 0, 4),
  194. DIV(0, "dout_cmu_cmu_aclk", "dout_cmu_pll_shared1_div9", DIV_CMU_CMU_ACLK, 0, 4),
  195. DIV(0, "dout_cmu_cpucl_switch", "cmu_cpucl_switch_gate", DIV_CMU_CPUCL_SWITCH, 0, 4),
  196. DIV(DOUT_CMU_FSYS0_SHARED0DIV4, "dout_cmu_fsys0_shared0div4", "cmu_fsys0_shared0div4_gate",
  197. DIV_CMU_FSYS0_SHARED0DIV4, 0, 4),
  198. DIV(0, "dout_cmu_fsys0_shared1div3", "cmu_fsys0_shared1div4_clk",
  199. DIV_CMU_FSYS0_SHARED1DIV3, 0, 4),
  200. DIV(DOUT_CMU_FSYS0_SHARED1DIV4, "dout_cmu_fsys0_shared1div4", "cmu_fsys0_shared1div4_gate",
  201. DIV_CMU_FSYS0_SHARED1DIV4, 0, 4),
  202. DIV(DOUT_CMU_FSYS1_SHARED0DIV4, "dout_cmu_fsys1_shared0div4", "cmu_fsys1_shared0div4_gate",
  203. DIV_CMU_FSYS1_SHARED0DIV4, 0, 4),
  204. DIV(DOUT_CMU_FSYS1_SHARED0DIV8, "dout_cmu_fsys1_shared0div8", "cmu_fsys1_shared1div4_gate",
  205. DIV_CMU_FSYS1_SHARED0DIV8, 0, 4),
  206. DIV(DOUT_CMU_IMEM_ACLK, "dout_cmu_imem_aclk", "cmu_imem_aclk_gate",
  207. DIV_CMU_IMEM_ACLK, 0, 4),
  208. DIV(DOUT_CMU_IMEM_DMACLK, "dout_cmu_imem_dmaclk", "cmu_imem_dmaclk_gate",
  209. DIV_CMU_IMEM_DMACLK, 0, 4),
  210. DIV(DOUT_CMU_IMEM_TCUCLK, "dout_cmu_imem_tcuclk", "cmu_imem_tcuclk_gate",
  211. DIV_CMU_IMEM_TCUCLK, 0, 4),
  212. DIV(DOUT_CMU_PERIC_SHARED0DIV20, "dout_cmu_peric_shared0div20",
  213. "cmu_peric_shared0dive4_gate", DIV_CMU_PERIC_SHARED0DIV20, 0, 4),
  214. DIV(DOUT_CMU_PERIC_SHARED0DIV3_TBUCLK, "dout_cmu_peric_shared0div3_tbuclk",
  215. "cmu_peric_shared0dive3_tbuclk_gate", DIV_CMU_PERIC_SHARED0DIV3_TBUCLK, 0, 4),
  216. DIV(DOUT_CMU_PERIC_SHARED1DIV36, "dout_cmu_peric_shared1div36",
  217. "cmu_peric_shared1dive4_gate", DIV_CMU_PERIC_SHARED1DIV36, 0, 4),
  218. DIV(DOUT_CMU_PERIC_SHARED1DIV4_DMACLK, "dout_cmu_peric_shared1div4_dmaclk",
  219. "cmu_peric_shared1div4_dmaclk_gate", DIV_CMU_PERIC_SHARED1DIV4_DMACLK, 0, 4),
  220. DIV(0, "dout_cmu_pll_shared0_div2", "mout_cmu_pll_shared0_mux",
  221. DIV_PLL_SHARED0_DIV2, 0, 4),
  222. DIV(0, "dout_cmu_pll_shared0_div3", "mout_cmu_pll_shared0_mux",
  223. DIV_PLL_SHARED0_DIV3, 0, 4),
  224. DIV(DOUT_CMU_PLL_SHARED0_DIV4, "dout_cmu_pll_shared0_div4", "dout_cmu_pll_shared0_div2",
  225. DIV_PLL_SHARED0_DIV4, 0, 4),
  226. DIV(DOUT_CMU_PLL_SHARED0_DIV6, "dout_cmu_pll_shared0_div6", "dout_cmu_pll_shared0_div3",
  227. DIV_PLL_SHARED0_DIV6, 0, 4),
  228. DIV(0, "dout_cmu_pll_shared1_div3", "mout_cmu_pll_shared1_mux",
  229. DIV_PLL_SHARED1_DIV3, 0, 4),
  230. DIV(0, "dout_cmu_pll_shared1_div36", "dout_cmu_pll_shared1_div9",
  231. DIV_PLL_SHARED1_DIV36, 0, 4),
  232. DIV(0, "dout_cmu_pll_shared1_div4", "mout_cmu_pll_shared1_mux",
  233. DIV_PLL_SHARED1_DIV4, 0, 4),
  234. DIV(0, "dout_cmu_pll_shared1_div9", "dout_cmu_pll_shared1_div3",
  235. DIV_PLL_SHARED1_DIV9, 0, 4),
  236. };
  237. static const struct samsung_gate_clock cmu_gate_clks[] __initconst = {
  238. GATE(0, "cmu_cis0_clkgate", "mout_cmu_cis0_clkmux", GAT_CMU_CIS0_CLKGATE, 21,
  239. CLK_IGNORE_UNUSED, 0),
  240. GATE(0, "cmu_cis1_clkgate", "mout_cmu_cis1_clkmux", GAT_CMU_CIS1_CLKGATE, 21,
  241. CLK_IGNORE_UNUSED, 0),
  242. GATE(0, "cmu_cis2_clkgate", "mout_cmu_cis2_clkmux", GAT_CMU_CIS2_CLKGATE, 21,
  243. CLK_IGNORE_UNUSED, 0),
  244. GATE(CMU_CPUCL_SWITCH_GATE, "cmu_cpucl_switch_gate", "mout_cmu_cpucl_switchmux",
  245. GAT_CMU_CPUCL_SWITCH_GATE, 21, CLK_IGNORE_UNUSED, 0),
  246. GATE(GAT_CMU_FSYS0_SHARED0DIV4, "cmu_fsys0_shared0div4_gate", "dout_cmu_pll_shared0_div4",
  247. GAT_CMU_FSYS0_SHARED0DIV4_GATE, 21, CLK_IGNORE_UNUSED, 0),
  248. GATE(0, "cmu_fsys0_shared1div4_clk", "dout_cmu_pll_shared1_div3",
  249. GAT_CMU_FSYS0_SHARED1DIV4_CLK, 21, CLK_IGNORE_UNUSED, 0),
  250. GATE(0, "cmu_fsys0_shared1div4_gate", "dout_cmu_pll_shared1_div4",
  251. GAT_CMU_FSYS0_SHARED1DIV4_GATE, 21, CLK_IGNORE_UNUSED, 0),
  252. GATE(0, "cmu_fsys1_shared0div4_gate", "mout_cmu_fsys1_aclk_mux",
  253. GAT_CMU_FSYS1_SHARED0DIV4_GATE, 21, CLK_IGNORE_UNUSED, 0),
  254. GATE(0, "cmu_fsys1_shared1div4_gate", "dout_cmu_fsys1_shared0div4",
  255. GAT_CMU_FSYS1_SHARED1DIV4_GATE, 21, CLK_IGNORE_UNUSED, 0),
  256. GATE(0, "cmu_imem_aclk_gate", "dout_cmu_pll_shared1_div9", GAT_CMU_IMEM_ACLK_GATE, 21,
  257. CLK_IGNORE_UNUSED, 0),
  258. GATE(0, "cmu_imem_dmaclk_gate", "mout_cmu_pll_shared1_mux", GAT_CMU_IMEM_DMACLK_GATE, 21,
  259. CLK_IGNORE_UNUSED, 0),
  260. GATE(0, "cmu_imem_tcuclk_gate", "dout_cmu_pll_shared0_div3", GAT_CMU_IMEM_TCUCLK_GATE, 21,
  261. CLK_IGNORE_UNUSED, 0),
  262. GATE(0, "cmu_peric_shared0dive3_tbuclk_gate", "dout_cmu_pll_shared0_div3",
  263. GAT_CMU_PERIC_SHARED0DIVE3_TBUCLK_GATE, 21, CLK_IGNORE_UNUSED, 0),
  264. GATE(0, "cmu_peric_shared0dive4_gate", "dout_cmu_pll_shared0_div4",
  265. GAT_CMU_PERIC_SHARED0DIVE4_GATE, 21, CLK_IGNORE_UNUSED, 0),
  266. GATE(0, "cmu_peric_shared1div4_dmaclk_gate", "dout_cmu_pll_shared1_div4",
  267. GAT_CMU_PERIC_SHARED1DIV4_DMACLK_GATE, 21, CLK_IGNORE_UNUSED, 0),
  268. GATE(0, "cmu_peric_shared1dive4_gate", "dout_cmu_pll_shared1_div36",
  269. GAT_CMU_PERIC_SHARED1DIVE4_GATE, 21, CLK_IGNORE_UNUSED, 0),
  270. GATE(0, "cmu_uid_cmu_cmu_cmu_ipclkport_pclk", "dout_cmu_cmu_aclk",
  271. GAT_CMU_CMU_CMU_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  272. GATE(0, "cmu_uid_axi2apb_cmu_ipclkport_aclk", "dout_cmu_cmu_aclk",
  273. GAT_CMU_AXI2APB_CMU_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  274. GATE(0, "cmu_uid_ns_brdg_cmu_ipclkport_clk__psoc_cmu__clk_cmu", "dout_cmu_cmu_aclk",
  275. GAT_CMU_NS_BRDG_CMU_IPCLKPORT_CLK__PSOC_CMU__CLK_CMU, 21, CLK_IGNORE_UNUSED, 0),
  276. GATE(0, "cmu_uid_sysreg_cmu_ipclkport_pclk", "dout_cmu_cmu_aclk",
  277. GAT_CMU_SYSREG_CMU_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  278. };
  279. static const struct samsung_cmu_info cmu_cmu_info __initconst = {
  280. .pll_clks = cmu_pll_clks,
  281. .nr_pll_clks = ARRAY_SIZE(cmu_pll_clks),
  282. .mux_clks = cmu_mux_clks,
  283. .nr_mux_clks = ARRAY_SIZE(cmu_mux_clks),
  284. .div_clks = cmu_div_clks,
  285. .nr_div_clks = ARRAY_SIZE(cmu_div_clks),
  286. .gate_clks = cmu_gate_clks,
  287. .nr_gate_clks = ARRAY_SIZE(cmu_gate_clks),
  288. .nr_clk_ids = CMU_NR_CLK,
  289. .clk_regs = cmu_clk_regs,
  290. .nr_clk_regs = ARRAY_SIZE(cmu_clk_regs),
  291. };
  292. static void __init fsd_clk_cmu_init(struct device_node *np)
  293. {
  294. samsung_cmu_register_one(np, &cmu_cmu_info);
  295. }
  296. CLK_OF_DECLARE(fsd_clk_cmu, "tesla,fsd-clock-cmu", fsd_clk_cmu_init);
  297. /* Register Offset definitions for CMU_PERIC (0x14010000) */
  298. #define PLL_CON0_PERIC_DMACLK_MUX 0x100
  299. #define PLL_CON0_PERIC_EQOS_BUSCLK_MUX 0x120
  300. #define PLL_CON0_PERIC_PCLK_MUX 0x140
  301. #define PLL_CON0_PERIC_TBUCLK_MUX 0x160
  302. #define PLL_CON0_SPI_CLK 0x180
  303. #define PLL_CON0_SPI_PCLK 0x1a0
  304. #define PLL_CON0_UART_CLK 0x1c0
  305. #define PLL_CON0_UART_PCLK 0x1e0
  306. #define MUX_PERIC_EQOS_PHYRXCLK 0x1000
  307. #define DIV_EQOS_BUSCLK 0x1800
  308. #define DIV_PERIC_MCAN_CLK 0x1804
  309. #define DIV_RGMII_CLK 0x1808
  310. #define DIV_RII_CLK 0x180c
  311. #define DIV_RMII_CLK 0x1810
  312. #define DIV_SPI_CLK 0x1814
  313. #define DIV_UART_CLK 0x1818
  314. #define GAT_EQOS_TOP_IPCLKPORT_CLK_PTP_REF_I 0x2000
  315. #define GAT_GPIO_PERIC_IPCLKPORT_OSCCLK 0x2004
  316. #define GAT_PERIC_ADC0_IPCLKPORT_I_OSCCLK 0x2008
  317. #define GAT_PERIC_CMU_PERIC_IPCLKPORT_PCLK 0x200c
  318. #define GAT_PERIC_PWM0_IPCLKPORT_I_OSCCLK 0x2010
  319. #define GAT_PERIC_PWM1_IPCLKPORT_I_OSCCLK 0x2014
  320. #define GAT_ASYNC_APB_DMA0_IPCLKPORT_PCLKM 0x2018
  321. #define GAT_ASYNC_APB_DMA0_IPCLKPORT_PCLKS 0x201c
  322. #define GAT_ASYNC_APB_DMA1_IPCLKPORT_PCLKM 0x2020
  323. #define GAT_ASYNC_APB_DMA1_IPCLKPORT_PCLKS 0x2024
  324. #define GAT_AXI2APB_PERIC0_IPCLKPORT_ACLK 0x2028
  325. #define GAT_AXI2APB_PERIC1_IPCLKPORT_ACLK 0x202c
  326. #define GAT_AXI2APB_PERIC2_IPCLKPORT_ACLK 0x2030
  327. #define GAT_BUS_D_PERIC_IPCLKPORT_DMACLK 0x2034
  328. #define GAT_BUS_D_PERIC_IPCLKPORT_EQOSCLK 0x2038
  329. #define GAT_BUS_D_PERIC_IPCLKPORT_MAINCLK 0x203c
  330. #define GAT_BUS_P_PERIC_IPCLKPORT_EQOSCLK 0x2040
  331. #define GAT_BUS_P_PERIC_IPCLKPORT_MAINCLK 0x2044
  332. #define GAT_BUS_P_PERIC_IPCLKPORT_SMMUCLK 0x2048
  333. #define GAT_EQOS_TOP_IPCLKPORT_ACLK_I 0x204c
  334. #define GAT_EQOS_TOP_IPCLKPORT_CLK_RX_I 0x2050
  335. #define GAT_EQOS_TOP_IPCLKPORT_HCLK_I 0x2054
  336. #define GAT_EQOS_TOP_IPCLKPORT_RGMII_CLK_I 0x2058
  337. #define GAT_EQOS_TOP_IPCLKPORT_RII_CLK_I 0x205c
  338. #define GAT_EQOS_TOP_IPCLKPORT_RMII_CLK_I 0x2060
  339. #define GAT_GPIO_PERIC_IPCLKPORT_PCLK 0x2064
  340. #define GAT_NS_BRDG_PERIC_IPCLKPORT_CLK__PSOC_PERIC__CLK_PERIC_D 0x2068
  341. #define GAT_NS_BRDG_PERIC_IPCLKPORT_CLK__PSOC_PERIC__CLK_PERIC_P 0x206c
  342. #define GAT_PERIC_ADC0_IPCLKPORT_PCLK_S0 0x2070
  343. #define GAT_PERIC_DMA0_IPCLKPORT_ACLK 0x2074
  344. #define GAT_PERIC_DMA1_IPCLKPORT_ACLK 0x2078
  345. #define GAT_PERIC_I2C0_IPCLKPORT_I_PCLK 0x207c
  346. #define GAT_PERIC_I2C1_IPCLKPORT_I_PCLK 0x2080
  347. #define GAT_PERIC_I2C2_IPCLKPORT_I_PCLK 0x2084
  348. #define GAT_PERIC_I2C3_IPCLKPORT_I_PCLK 0x2088
  349. #define GAT_PERIC_I2C4_IPCLKPORT_I_PCLK 0x208c
  350. #define GAT_PERIC_I2C5_IPCLKPORT_I_PCLK 0x2090
  351. #define GAT_PERIC_I2C6_IPCLKPORT_I_PCLK 0x2094
  352. #define GAT_PERIC_I2C7_IPCLKPORT_I_PCLK 0x2098
  353. #define GAT_PERIC_MCAN0_IPCLKPORT_CCLK 0x209c
  354. #define GAT_PERIC_MCAN0_IPCLKPORT_PCLK 0x20a0
  355. #define GAT_PERIC_MCAN1_IPCLKPORT_CCLK 0x20a4
  356. #define GAT_PERIC_MCAN1_IPCLKPORT_PCLK 0x20a8
  357. #define GAT_PERIC_MCAN2_IPCLKPORT_CCLK 0x20ac
  358. #define GAT_PERIC_MCAN2_IPCLKPORT_PCLK 0x20b0
  359. #define GAT_PERIC_MCAN3_IPCLKPORT_CCLK 0x20b4
  360. #define GAT_PERIC_MCAN3_IPCLKPORT_PCLK 0x20b8
  361. #define GAT_PERIC_PWM0_IPCLKPORT_I_PCLK_S0 0x20bc
  362. #define GAT_PERIC_PWM1_IPCLKPORT_I_PCLK_S0 0x20c0
  363. #define GAT_PERIC_SMMU_IPCLKPORT_CCLK 0x20c4
  364. #define GAT_PERIC_SMMU_IPCLKPORT_PERIC_BCLK 0x20c8
  365. #define GAT_PERIC_SPI0_IPCLKPORT_I_PCLK 0x20cc
  366. #define GAT_PERIC_SPI0_IPCLKPORT_I_SCLK_SPI 0x20d0
  367. #define GAT_PERIC_SPI1_IPCLKPORT_I_PCLK 0x20d4
  368. #define GAT_PERIC_SPI1_IPCLKPORT_I_SCLK_SPI 0x20d8
  369. #define GAT_PERIC_SPI2_IPCLKPORT_I_PCLK 0x20dc
  370. #define GAT_PERIC_SPI2_IPCLKPORT_I_SCLK_SPI 0x20e0
  371. #define GAT_PERIC_TDM0_IPCLKPORT_HCLK_M 0x20e4
  372. #define GAT_PERIC_TDM0_IPCLKPORT_PCLK 0x20e8
  373. #define GAT_PERIC_TDM1_IPCLKPORT_HCLK_M 0x20ec
  374. #define GAT_PERIC_TDM1_IPCLKPORT_PCLK 0x20f0
  375. #define GAT_PERIC_UART0_IPCLKPORT_I_SCLK_UART 0x20f4
  376. #define GAT_PERIC_UART0_IPCLKPORT_PCLK 0x20f8
  377. #define GAT_PERIC_UART1_IPCLKPORT_I_SCLK_UART 0x20fc
  378. #define GAT_PERIC_UART1_IPCLKPORT_PCLK 0x2100
  379. #define GAT_SYSREG_PERI_IPCLKPORT_PCLK 0x2104
  380. static const unsigned long peric_clk_regs[] __initconst = {
  381. PLL_CON0_PERIC_DMACLK_MUX,
  382. PLL_CON0_PERIC_EQOS_BUSCLK_MUX,
  383. PLL_CON0_PERIC_PCLK_MUX,
  384. PLL_CON0_PERIC_TBUCLK_MUX,
  385. PLL_CON0_SPI_CLK,
  386. PLL_CON0_SPI_PCLK,
  387. PLL_CON0_UART_CLK,
  388. PLL_CON0_UART_PCLK,
  389. MUX_PERIC_EQOS_PHYRXCLK,
  390. DIV_EQOS_BUSCLK,
  391. DIV_PERIC_MCAN_CLK,
  392. DIV_RGMII_CLK,
  393. DIV_RII_CLK,
  394. DIV_RMII_CLK,
  395. DIV_SPI_CLK,
  396. DIV_UART_CLK,
  397. GAT_EQOS_TOP_IPCLKPORT_CLK_PTP_REF_I,
  398. GAT_GPIO_PERIC_IPCLKPORT_OSCCLK,
  399. GAT_PERIC_ADC0_IPCLKPORT_I_OSCCLK,
  400. GAT_PERIC_CMU_PERIC_IPCLKPORT_PCLK,
  401. GAT_PERIC_PWM0_IPCLKPORT_I_OSCCLK,
  402. GAT_PERIC_PWM1_IPCLKPORT_I_OSCCLK,
  403. GAT_ASYNC_APB_DMA0_IPCLKPORT_PCLKM,
  404. GAT_ASYNC_APB_DMA0_IPCLKPORT_PCLKS,
  405. GAT_ASYNC_APB_DMA1_IPCLKPORT_PCLKM,
  406. GAT_ASYNC_APB_DMA1_IPCLKPORT_PCLKS,
  407. GAT_AXI2APB_PERIC0_IPCLKPORT_ACLK,
  408. GAT_AXI2APB_PERIC1_IPCLKPORT_ACLK,
  409. GAT_AXI2APB_PERIC2_IPCLKPORT_ACLK,
  410. GAT_BUS_D_PERIC_IPCLKPORT_DMACLK,
  411. GAT_BUS_D_PERIC_IPCLKPORT_EQOSCLK,
  412. GAT_BUS_D_PERIC_IPCLKPORT_MAINCLK,
  413. GAT_BUS_P_PERIC_IPCLKPORT_EQOSCLK,
  414. GAT_BUS_P_PERIC_IPCLKPORT_MAINCLK,
  415. GAT_BUS_P_PERIC_IPCLKPORT_SMMUCLK,
  416. GAT_EQOS_TOP_IPCLKPORT_ACLK_I,
  417. GAT_EQOS_TOP_IPCLKPORT_CLK_RX_I,
  418. GAT_EQOS_TOP_IPCLKPORT_HCLK_I,
  419. GAT_EQOS_TOP_IPCLKPORT_RGMII_CLK_I,
  420. GAT_EQOS_TOP_IPCLKPORT_RII_CLK_I,
  421. GAT_EQOS_TOP_IPCLKPORT_RMII_CLK_I,
  422. GAT_GPIO_PERIC_IPCLKPORT_PCLK,
  423. GAT_NS_BRDG_PERIC_IPCLKPORT_CLK__PSOC_PERIC__CLK_PERIC_D,
  424. GAT_NS_BRDG_PERIC_IPCLKPORT_CLK__PSOC_PERIC__CLK_PERIC_P,
  425. GAT_PERIC_ADC0_IPCLKPORT_PCLK_S0,
  426. GAT_PERIC_DMA0_IPCLKPORT_ACLK,
  427. GAT_PERIC_DMA1_IPCLKPORT_ACLK,
  428. GAT_PERIC_I2C0_IPCLKPORT_I_PCLK,
  429. GAT_PERIC_I2C1_IPCLKPORT_I_PCLK,
  430. GAT_PERIC_I2C2_IPCLKPORT_I_PCLK,
  431. GAT_PERIC_I2C3_IPCLKPORT_I_PCLK,
  432. GAT_PERIC_I2C4_IPCLKPORT_I_PCLK,
  433. GAT_PERIC_I2C5_IPCLKPORT_I_PCLK,
  434. GAT_PERIC_I2C6_IPCLKPORT_I_PCLK,
  435. GAT_PERIC_I2C7_IPCLKPORT_I_PCLK,
  436. GAT_PERIC_MCAN0_IPCLKPORT_CCLK,
  437. GAT_PERIC_MCAN0_IPCLKPORT_PCLK,
  438. GAT_PERIC_MCAN1_IPCLKPORT_CCLK,
  439. GAT_PERIC_MCAN1_IPCLKPORT_PCLK,
  440. GAT_PERIC_MCAN2_IPCLKPORT_CCLK,
  441. GAT_PERIC_MCAN2_IPCLKPORT_PCLK,
  442. GAT_PERIC_MCAN3_IPCLKPORT_CCLK,
  443. GAT_PERIC_MCAN3_IPCLKPORT_PCLK,
  444. GAT_PERIC_PWM0_IPCLKPORT_I_PCLK_S0,
  445. GAT_PERIC_PWM1_IPCLKPORT_I_PCLK_S0,
  446. GAT_PERIC_SMMU_IPCLKPORT_CCLK,
  447. GAT_PERIC_SMMU_IPCLKPORT_PERIC_BCLK,
  448. GAT_PERIC_SPI0_IPCLKPORT_I_PCLK,
  449. GAT_PERIC_SPI0_IPCLKPORT_I_SCLK_SPI,
  450. GAT_PERIC_SPI1_IPCLKPORT_I_PCLK,
  451. GAT_PERIC_SPI1_IPCLKPORT_I_SCLK_SPI,
  452. GAT_PERIC_SPI2_IPCLKPORT_I_PCLK,
  453. GAT_PERIC_SPI2_IPCLKPORT_I_SCLK_SPI,
  454. GAT_PERIC_TDM0_IPCLKPORT_HCLK_M,
  455. GAT_PERIC_TDM0_IPCLKPORT_PCLK,
  456. GAT_PERIC_TDM1_IPCLKPORT_HCLK_M,
  457. GAT_PERIC_TDM1_IPCLKPORT_PCLK,
  458. GAT_PERIC_UART0_IPCLKPORT_I_SCLK_UART,
  459. GAT_PERIC_UART0_IPCLKPORT_PCLK,
  460. GAT_PERIC_UART1_IPCLKPORT_I_SCLK_UART,
  461. GAT_PERIC_UART1_IPCLKPORT_PCLK,
  462. GAT_SYSREG_PERI_IPCLKPORT_PCLK,
  463. };
  464. static const struct samsung_fixed_rate_clock peric_fixed_clks[] __initconst = {
  465. FRATE(PERIC_EQOS_PHYRXCLK, "eqos_phyrxclk", NULL, 0, 125000000),
  466. };
  467. /* List of parent clocks for Muxes in CMU_PERIC */
  468. PNAME(mout_peric_dmaclk_p) = { "fin_pll", "cmu_peric_shared1div4_dmaclk_gate" };
  469. PNAME(mout_peric_eqos_busclk_p) = { "fin_pll", "dout_cmu_pll_shared0_div4" };
  470. PNAME(mout_peric_pclk_p) = { "fin_pll", "dout_cmu_peric_shared1div36" };
  471. PNAME(mout_peric_tbuclk_p) = { "fin_pll", "dout_cmu_peric_shared0div3_tbuclk" };
  472. PNAME(mout_peric_spi_clk_p) = { "fin_pll", "dout_cmu_peric_shared0div20" };
  473. PNAME(mout_peric_spi_pclk_p) = { "fin_pll", "dout_cmu_peric_shared1div36" };
  474. PNAME(mout_peric_uart_clk_p) = { "fin_pll", "dout_cmu_peric_shared1div4_dmaclk" };
  475. PNAME(mout_peric_uart_pclk_p) = { "fin_pll", "dout_cmu_peric_shared1div36" };
  476. PNAME(mout_peric_eqos_phyrxclk_p) = { "dout_peric_rgmii_clk", "eqos_phyrxclk" };
  477. static const struct samsung_mux_clock peric_mux_clks[] __initconst = {
  478. MUX(0, "mout_peric_dmaclk", mout_peric_dmaclk_p, PLL_CON0_PERIC_DMACLK_MUX, 4, 1),
  479. MUX(0, "mout_peric_eqos_busclk", mout_peric_eqos_busclk_p,
  480. PLL_CON0_PERIC_EQOS_BUSCLK_MUX, 4, 1),
  481. MUX(0, "mout_peric_pclk", mout_peric_pclk_p, PLL_CON0_PERIC_PCLK_MUX, 4, 1),
  482. MUX(0, "mout_peric_tbuclk", mout_peric_tbuclk_p, PLL_CON0_PERIC_TBUCLK_MUX, 4, 1),
  483. MUX(0, "mout_peric_spi_clk", mout_peric_spi_clk_p, PLL_CON0_SPI_CLK, 4, 1),
  484. MUX(0, "mout_peric_spi_pclk", mout_peric_spi_pclk_p, PLL_CON0_SPI_PCLK, 4, 1),
  485. MUX(0, "mout_peric_uart_clk", mout_peric_uart_clk_p, PLL_CON0_UART_CLK, 4, 1),
  486. MUX(0, "mout_peric_uart_pclk", mout_peric_uart_pclk_p, PLL_CON0_UART_PCLK, 4, 1),
  487. MUX(PERIC_EQOS_PHYRXCLK_MUX, "mout_peric_eqos_phyrxclk", mout_peric_eqos_phyrxclk_p,
  488. MUX_PERIC_EQOS_PHYRXCLK, 0, 1),
  489. };
  490. static const struct samsung_div_clock peric_div_clks[] __initconst = {
  491. DIV(0, "dout_peric_eqos_busclk", "mout_peric_eqos_busclk", DIV_EQOS_BUSCLK, 0, 4),
  492. DIV(0, "dout_peric_mcan_clk", "mout_peric_dmaclk", DIV_PERIC_MCAN_CLK, 0, 4),
  493. DIV(PERIC_DOUT_RGMII_CLK, "dout_peric_rgmii_clk", "mout_peric_eqos_busclk",
  494. DIV_RGMII_CLK, 0, 4),
  495. DIV(0, "dout_peric_rii_clk", "dout_peric_rmii_clk", DIV_RII_CLK, 0, 4),
  496. DIV(0, "dout_peric_rmii_clk", "dout_peric_rgmii_clk", DIV_RMII_CLK, 0, 4),
  497. DIV(0, "dout_peric_spi_clk", "mout_peric_spi_clk", DIV_SPI_CLK, 0, 6),
  498. DIV(0, "dout_peric_uart_clk", "mout_peric_uart_clk", DIV_UART_CLK, 0, 6),
  499. };
  500. static const struct samsung_gate_clock peric_gate_clks[] __initconst = {
  501. GATE(PERIC_EQOS_TOP_IPCLKPORT_CLK_PTP_REF_I, "peric_eqos_top_ipclkport_clk_ptp_ref_i",
  502. "fin_pll", GAT_EQOS_TOP_IPCLKPORT_CLK_PTP_REF_I, 21, CLK_IGNORE_UNUSED, 0),
  503. GATE(0, "peric_gpio_peric_ipclkport_oscclk", "fin_pll", GAT_GPIO_PERIC_IPCLKPORT_OSCCLK,
  504. 21, CLK_IGNORE_UNUSED, 0),
  505. GATE(PERIC_PCLK_ADCIF, "peric_adc0_ipclkport_i_oscclk", "fin_pll",
  506. GAT_PERIC_ADC0_IPCLKPORT_I_OSCCLK, 21, CLK_IGNORE_UNUSED, 0),
  507. GATE(0, "peric_cmu_peric_ipclkport_pclk", "mout_peric_pclk",
  508. GAT_PERIC_CMU_PERIC_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  509. GATE(0, "peric_pwm0_ipclkport_i_oscclk", "fin_pll", GAT_PERIC_PWM0_IPCLKPORT_I_OSCCLK, 21,
  510. CLK_IGNORE_UNUSED, 0),
  511. GATE(0, "peric_pwm1_ipclkport_i_oscclk", "fin_pll", GAT_PERIC_PWM1_IPCLKPORT_I_OSCCLK, 21,
  512. CLK_IGNORE_UNUSED, 0),
  513. GATE(0, "peric_async_apb_dma0_ipclkport_pclkm", "mout_peric_dmaclk",
  514. GAT_ASYNC_APB_DMA0_IPCLKPORT_PCLKM, 21, CLK_IGNORE_UNUSED, 0),
  515. GATE(0, "peric_async_apb_dma0_ipclkport_pclks", "mout_peric_pclk",
  516. GAT_ASYNC_APB_DMA0_IPCLKPORT_PCLKS, 21, CLK_IGNORE_UNUSED, 0),
  517. GATE(0, "peric_async_apb_dma1_ipclkport_pclkm", "mout_peric_dmaclk",
  518. GAT_ASYNC_APB_DMA1_IPCLKPORT_PCLKM, 21, CLK_IGNORE_UNUSED, 0),
  519. GATE(0, "peric_async_apb_dma1_ipclkport_pclks", "mout_peric_pclk",
  520. GAT_ASYNC_APB_DMA1_IPCLKPORT_PCLKS, 21, CLK_IGNORE_UNUSED, 0),
  521. GATE(0, "peric_axi2apb_peric0_ipclkport_aclk", "mout_peric_pclk",
  522. GAT_AXI2APB_PERIC0_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  523. GATE(0, "peric_axi2apb_peric1_ipclkport_aclk", "mout_peric_pclk",
  524. GAT_AXI2APB_PERIC1_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  525. GATE(0, "peric_axi2apb_peric2_ipclkport_aclk", "mout_peric_pclk",
  526. GAT_AXI2APB_PERIC2_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  527. GATE(0, "peric_bus_d_peric_ipclkport_dmaclk", "mout_peric_dmaclk",
  528. GAT_BUS_D_PERIC_IPCLKPORT_DMACLK, 21, CLK_IGNORE_UNUSED, 0),
  529. GATE(PERIC_BUS_D_PERIC_IPCLKPORT_EQOSCLK, "peric_bus_d_peric_ipclkport_eqosclk",
  530. "dout_peric_eqos_busclk", GAT_BUS_D_PERIC_IPCLKPORT_EQOSCLK, 21, CLK_IGNORE_UNUSED, 0),
  531. GATE(0, "peric_bus_d_peric_ipclkport_mainclk", "mout_peric_tbuclk",
  532. GAT_BUS_D_PERIC_IPCLKPORT_MAINCLK, 21, CLK_IGNORE_UNUSED, 0),
  533. GATE(PERIC_BUS_P_PERIC_IPCLKPORT_EQOSCLK, "peric_bus_p_peric_ipclkport_eqosclk",
  534. "dout_peric_eqos_busclk", GAT_BUS_P_PERIC_IPCLKPORT_EQOSCLK, 21, CLK_IGNORE_UNUSED, 0),
  535. GATE(0, "peric_bus_p_peric_ipclkport_mainclk", "mout_peric_pclk",
  536. GAT_BUS_P_PERIC_IPCLKPORT_MAINCLK, 21, CLK_IGNORE_UNUSED, 0),
  537. GATE(0, "peric_bus_p_peric_ipclkport_smmuclk", "mout_peric_tbuclk",
  538. GAT_BUS_P_PERIC_IPCLKPORT_SMMUCLK, 21, CLK_IGNORE_UNUSED, 0),
  539. GATE(PERIC_EQOS_TOP_IPCLKPORT_ACLK_I, "peric_eqos_top_ipclkport_aclk_i",
  540. "dout_peric_eqos_busclk", GAT_EQOS_TOP_IPCLKPORT_ACLK_I, 21, CLK_IGNORE_UNUSED, 0),
  541. GATE(PERIC_EQOS_TOP_IPCLKPORT_CLK_RX_I, "peric_eqos_top_ipclkport_clk_rx_i",
  542. "mout_peric_eqos_phyrxclk", GAT_EQOS_TOP_IPCLKPORT_CLK_RX_I, 21, CLK_IGNORE_UNUSED, 0),
  543. GATE(PERIC_EQOS_TOP_IPCLKPORT_HCLK_I, "peric_eqos_top_ipclkport_hclk_i",
  544. "dout_peric_eqos_busclk", GAT_EQOS_TOP_IPCLKPORT_HCLK_I, 21, CLK_IGNORE_UNUSED, 0),
  545. GATE(PERIC_EQOS_TOP_IPCLKPORT_RGMII_CLK_I, "peric_eqos_top_ipclkport_rgmii_clk_i",
  546. "dout_peric_rgmii_clk", GAT_EQOS_TOP_IPCLKPORT_RGMII_CLK_I, 21, CLK_IGNORE_UNUSED, 0),
  547. GATE(0, "peric_eqos_top_ipclkport_rii_clk_i", "dout_peric_rii_clk",
  548. GAT_EQOS_TOP_IPCLKPORT_RII_CLK_I, 21, CLK_IGNORE_UNUSED, 0),
  549. GATE(0, "peric_eqos_top_ipclkport_rmii_clk_i", "dout_peric_rmii_clk",
  550. GAT_EQOS_TOP_IPCLKPORT_RMII_CLK_I, 21, CLK_IGNORE_UNUSED, 0),
  551. GATE(0, "peric_gpio_peric_ipclkport_pclk", "mout_peric_pclk",
  552. GAT_GPIO_PERIC_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  553. GATE(0, "peric_ns_brdg_peric_ipclkport_clk__psoc_peric__clk_peric_d", "mout_peric_tbuclk",
  554. GAT_NS_BRDG_PERIC_IPCLKPORT_CLK__PSOC_PERIC__CLK_PERIC_D, 21, CLK_IGNORE_UNUSED, 0),
  555. GATE(0, "peric_ns_brdg_peric_ipclkport_clk__psoc_peric__clk_peric_p", "mout_peric_pclk",
  556. GAT_NS_BRDG_PERIC_IPCLKPORT_CLK__PSOC_PERIC__CLK_PERIC_P, 21, CLK_IGNORE_UNUSED, 0),
  557. GATE(0, "peric_adc0_ipclkport_pclk_s0", "mout_peric_pclk",
  558. GAT_PERIC_ADC0_IPCLKPORT_PCLK_S0, 21, CLK_IGNORE_UNUSED, 0),
  559. GATE(PERIC_DMA0_IPCLKPORT_ACLK, "peric_dma0_ipclkport_aclk", "mout_peric_dmaclk",
  560. GAT_PERIC_DMA0_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  561. GATE(PERIC_DMA1_IPCLKPORT_ACLK, "peric_dma1_ipclkport_aclk", "mout_peric_dmaclk",
  562. GAT_PERIC_DMA1_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  563. GATE(PERIC_PCLK_HSI2C0, "peric_i2c0_ipclkport_i_pclk", "mout_peric_pclk",
  564. GAT_PERIC_I2C0_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  565. GATE(PERIC_PCLK_HSI2C1, "peric_i2c1_ipclkport_i_pclk", "mout_peric_pclk",
  566. GAT_PERIC_I2C1_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  567. GATE(PERIC_PCLK_HSI2C2, "peric_i2c2_ipclkport_i_pclk", "mout_peric_pclk",
  568. GAT_PERIC_I2C2_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  569. GATE(PERIC_PCLK_HSI2C3, "peric_i2c3_ipclkport_i_pclk", "mout_peric_pclk",
  570. GAT_PERIC_I2C3_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  571. GATE(PERIC_PCLK_HSI2C4, "peric_i2c4_ipclkport_i_pclk", "mout_peric_pclk",
  572. GAT_PERIC_I2C4_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  573. GATE(PERIC_PCLK_HSI2C5, "peric_i2c5_ipclkport_i_pclk", "mout_peric_pclk",
  574. GAT_PERIC_I2C5_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  575. GATE(PERIC_PCLK_HSI2C6, "peric_i2c6_ipclkport_i_pclk", "mout_peric_pclk",
  576. GAT_PERIC_I2C6_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  577. GATE(PERIC_PCLK_HSI2C7, "peric_i2c7_ipclkport_i_pclk", "mout_peric_pclk",
  578. GAT_PERIC_I2C7_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  579. GATE(PERIC_MCAN0_IPCLKPORT_CCLK, "peric_mcan0_ipclkport_cclk", "dout_peric_mcan_clk",
  580. GAT_PERIC_MCAN0_IPCLKPORT_CCLK, 21, CLK_IGNORE_UNUSED, 0),
  581. GATE(PERIC_MCAN0_IPCLKPORT_PCLK, "peric_mcan0_ipclkport_pclk", "mout_peric_pclk",
  582. GAT_PERIC_MCAN0_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  583. GATE(PERIC_MCAN1_IPCLKPORT_CCLK, "peric_mcan1_ipclkport_cclk", "dout_peric_mcan_clk",
  584. GAT_PERIC_MCAN1_IPCLKPORT_CCLK, 21, CLK_IGNORE_UNUSED, 0),
  585. GATE(PERIC_MCAN1_IPCLKPORT_PCLK, "peric_mcan1_ipclkport_pclk", "mout_peric_pclk",
  586. GAT_PERIC_MCAN1_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  587. GATE(PERIC_MCAN2_IPCLKPORT_CCLK, "peric_mcan2_ipclkport_cclk", "dout_peric_mcan_clk",
  588. GAT_PERIC_MCAN2_IPCLKPORT_CCLK, 21, CLK_IGNORE_UNUSED, 0),
  589. GATE(PERIC_MCAN2_IPCLKPORT_PCLK, "peric_mcan2_ipclkport_pclk", "mout_peric_pclk",
  590. GAT_PERIC_MCAN2_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  591. GATE(PERIC_MCAN3_IPCLKPORT_CCLK, "peric_mcan3_ipclkport_cclk", "dout_peric_mcan_clk",
  592. GAT_PERIC_MCAN3_IPCLKPORT_CCLK, 21, CLK_IGNORE_UNUSED, 0),
  593. GATE(PERIC_MCAN3_IPCLKPORT_PCLK, "peric_mcan3_ipclkport_pclk", "mout_peric_pclk",
  594. GAT_PERIC_MCAN3_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  595. GATE(PERIC_PWM0_IPCLKPORT_I_PCLK_S0, "peric_pwm0_ipclkport_i_pclk_s0", "mout_peric_pclk",
  596. GAT_PERIC_PWM0_IPCLKPORT_I_PCLK_S0, 21, CLK_IGNORE_UNUSED, 0),
  597. GATE(PERIC_PWM1_IPCLKPORT_I_PCLK_S0, "peric_pwm1_ipclkport_i_pclk_s0", "mout_peric_pclk",
  598. GAT_PERIC_PWM1_IPCLKPORT_I_PCLK_S0, 21, CLK_IGNORE_UNUSED, 0),
  599. GATE(0, "peric_smmu_ipclkport_cclk", "mout_peric_tbuclk",
  600. GAT_PERIC_SMMU_IPCLKPORT_CCLK, 21, CLK_IGNORE_UNUSED, 0),
  601. GATE(0, "peric_smmu_ipclkport_peric_bclk", "mout_peric_tbuclk",
  602. GAT_PERIC_SMMU_IPCLKPORT_PERIC_BCLK, 21, CLK_IGNORE_UNUSED, 0),
  603. GATE(PERIC_PCLK_SPI0, "peric_spi0_ipclkport_i_pclk", "mout_peric_spi_pclk",
  604. GAT_PERIC_SPI0_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  605. GATE(PERIC_SCLK_SPI0, "peric_spi0_ipclkport_i_sclk_spi", "dout_peric_spi_clk",
  606. GAT_PERIC_SPI0_IPCLKPORT_I_SCLK_SPI, 21, CLK_IGNORE_UNUSED, 0),
  607. GATE(PERIC_PCLK_SPI1, "peric_spi1_ipclkport_i_pclk", "mout_peric_spi_pclk",
  608. GAT_PERIC_SPI1_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  609. GATE(PERIC_SCLK_SPI1, "peric_spi1_ipclkport_i_sclk_spi", "dout_peric_spi_clk",
  610. GAT_PERIC_SPI1_IPCLKPORT_I_SCLK_SPI, 21, CLK_IGNORE_UNUSED, 0),
  611. GATE(PERIC_PCLK_SPI2, "peric_spi2_ipclkport_i_pclk", "mout_peric_spi_pclk",
  612. GAT_PERIC_SPI2_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  613. GATE(PERIC_SCLK_SPI2, "peric_spi2_ipclkport_i_sclk_spi", "dout_peric_spi_clk",
  614. GAT_PERIC_SPI2_IPCLKPORT_I_SCLK_SPI, 21, CLK_IGNORE_UNUSED, 0),
  615. GATE(PERIC_HCLK_TDM0, "peric_tdm0_ipclkport_hclk_m", "mout_peric_pclk",
  616. GAT_PERIC_TDM0_IPCLKPORT_HCLK_M, 21, CLK_IGNORE_UNUSED, 0),
  617. GATE(PERIC_PCLK_TDM0, "peric_tdm0_ipclkport_pclk", "mout_peric_pclk",
  618. GAT_PERIC_TDM0_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  619. GATE(PERIC_HCLK_TDM1, "peric_tdm1_ipclkport_hclk_m", "mout_peric_pclk",
  620. GAT_PERIC_TDM1_IPCLKPORT_HCLK_M, 21, CLK_IGNORE_UNUSED, 0),
  621. GATE(PERIC_PCLK_TDM1, "peric_tdm1_ipclkport_pclk", "mout_peric_pclk",
  622. GAT_PERIC_TDM1_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  623. GATE(PERIC_SCLK_UART0, "peric_uart0_ipclkport_i_sclk_uart", "dout_peric_uart_clk",
  624. GAT_PERIC_UART0_IPCLKPORT_I_SCLK_UART, 21, CLK_IGNORE_UNUSED, 0),
  625. GATE(PERIC_PCLK_UART0, "peric_uart0_ipclkport_pclk", "mout_peric_uart_pclk",
  626. GAT_PERIC_UART0_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  627. GATE(PERIC_SCLK_UART1, "peric_uart1_ipclkport_i_sclk_uart", "dout_peric_uart_clk",
  628. GAT_PERIC_UART1_IPCLKPORT_I_SCLK_UART, 21, CLK_IGNORE_UNUSED, 0),
  629. GATE(PERIC_PCLK_UART1, "peric_uart1_ipclkport_pclk", "mout_peric_uart_pclk",
  630. GAT_PERIC_UART1_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  631. GATE(0, "peric_sysreg_peri_ipclkport_pclk", "mout_peric_pclk",
  632. GAT_SYSREG_PERI_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  633. };
  634. static const struct samsung_cmu_info peric_cmu_info __initconst = {
  635. .mux_clks = peric_mux_clks,
  636. .nr_mux_clks = ARRAY_SIZE(peric_mux_clks),
  637. .div_clks = peric_div_clks,
  638. .nr_div_clks = ARRAY_SIZE(peric_div_clks),
  639. .gate_clks = peric_gate_clks,
  640. .nr_gate_clks = ARRAY_SIZE(peric_gate_clks),
  641. .fixed_clks = peric_fixed_clks,
  642. .nr_fixed_clks = ARRAY_SIZE(peric_fixed_clks),
  643. .nr_clk_ids = PERIC_NR_CLK,
  644. .clk_regs = peric_clk_regs,
  645. .nr_clk_regs = ARRAY_SIZE(peric_clk_regs),
  646. .clk_name = "dout_cmu_pll_shared0_div4",
  647. };
  648. /* Register Offset definitions for CMU_FSYS0 (0x15010000) */
  649. #define PLL_CON0_CLKCMU_FSYS0_UNIPRO 0x100
  650. #define PLL_CON0_CLK_FSYS0_SLAVEBUSCLK 0x140
  651. #define PLL_CON0_EQOS_RGMII_125_MUX1 0x160
  652. #define DIV_CLK_UNIPRO 0x1800
  653. #define DIV_EQS_RGMII_CLK_125 0x1804
  654. #define DIV_PERIBUS_GRP 0x1808
  655. #define DIV_EQOS_RII_CLK2O5 0x180c
  656. #define DIV_EQOS_RMIICLK_25 0x1810
  657. #define DIV_PCIE_PHY_OSCCLK 0x1814
  658. #define GAT_FSYS0_EQOS_TOP0_IPCLKPORT_CLK_PTP_REF_I 0x2004
  659. #define GAT_FSYS0_EQOS_TOP0_IPCLKPORT_CLK_RX_I 0x2008
  660. #define GAT_FSYS0_FSYS0_CMU_FSYS0_IPCLKPORT_PCLK 0x200c
  661. #define GAT_FSYS0_GPIO_FSYS0_IPCLKPORT_OSCCLK 0x2010
  662. #define GAT_FSYS0_PCIE_TOP_IPCLKPORT_PCIEG3_PHY_X4_INST_0_PLL_REFCLK_FROM_XO 0x2014
  663. #define GAT_FSYS0_PCIE_TOP_IPCLKPORT_PIPE_PAL_INST_0_I_IMMORTAL_CLK 0x2018
  664. #define GAT_FSYS0_PCIE_TOP_IPCLKPORT_FSD_PCIE_SUB_CTRL_INST_0_AUX_CLK_SOC 0x201c
  665. #define GAT_FSYS0_UFS_TOP0_IPCLKPORT_I_MPHY_REFCLK_IXTAL24 0x2020
  666. #define GAT_FSYS0_UFS_TOP0_IPCLKPORT_I_MPHY_REFCLK_IXTAL26 0x2024
  667. #define GAT_FSYS0_UFS_TOP1_IPCLKPORT_I_MPHY_REFCLK_IXTAL24 0x2028
  668. #define GAT_FSYS0_UFS_TOP1_IPCLKPORT_I_MPHY_REFCLK_IXTAL26 0x202c
  669. #define GAT_FSYS0_AHBBR_FSYS0_IPCLKPORT_HCLK 0x2038
  670. #define GAT_FSYS0_AXI2APB_FSYS0_IPCLKPORT_ACLK 0x203c
  671. #define GAT_FSYS0_BUS_D_FSYS0_IPCLKPORT_MAINCLK 0x2040
  672. #define GAT_FSYS0_BUS_D_FSYS0_IPCLKPORT_PERICLK 0x2044
  673. #define GAT_FSYS0_BUS_P_FSYS0_IPCLKPORT_MAINCLK 0x2048
  674. #define GAT_FSYS0_BUS_P_FSYS0_IPCLKPORT_TCUCLK 0x204c
  675. #define GAT_FSYS0_CPE425_IPCLKPORT_ACLK 0x2050
  676. #define GAT_FSYS0_EQOS_TOP0_IPCLKPORT_ACLK_I 0x2054
  677. #define GAT_FSYS0_EQOS_TOP0_IPCLKPORT_HCLK_I 0x2058
  678. #define GAT_FSYS0_EQOS_TOP0_IPCLKPORT_RGMII_CLK_I 0x205c
  679. #define GAT_FSYS0_EQOS_TOP0_IPCLKPORT_RII_CLK_I 0x2060
  680. #define GAT_FSYS0_EQOS_TOP0_IPCLKPORT_RMII_CLK_I 0x2064
  681. #define GAT_FSYS0_GPIO_FSYS0_IPCLKPORT_PCLK 0x2068
  682. #define GAT_FSYS0_NS_BRDG_FSYS0_IPCLKPORT_CLK__PSOC_FSYS0__CLK_FSYS0_D 0x206c
  683. #define GAT_FSYS0_NS_BRDG_FSYS0_IPCLKPORT_CLK__PSOC_FSYS0__CLK_FSYS0_D1 0x2070
  684. #define GAT_FSYS0_NS_BRDG_FSYS0_IPCLKPORT_CLK__PSOC_FSYS0__CLK_FSYS0_P 0x2074
  685. #define GAT_FSYS0_NS_BRDG_FSYS0_IPCLKPORT_CLK__PSOC_FSYS0__CLK_FSYS0_S 0x2078
  686. #define GAT_FSYS0_PCIE_TOP_IPCLKPORT_PCIEG3_PHY_X4_INST_0_I_APB_PCLK 0x207c
  687. #define GAT_FSYS0_PCIE_TOP_IPCLKPORT_PCIEG3_PHY_X4_INST_0_PLL_REFCLK_FROM_SYSPLL 0x2080
  688. #define GAT_FSYS0_PCIE_TOP_IPCLKPORT_PIPE_PAL_INST_0_I_APB_PCLK_0 0x2084
  689. #define GAT_FSYS0_PCIE_TOP_IPCLKPORT_FSD_PCIE_SUB_CTRL_INST_0_DBI_ACLK_SOC 0x2088
  690. #define GAT_FSYS0_PCIE_TOP_IPCLKPORT_FSD_PCIE_SUB_CTRL_INST_0_I_DRIVER_APB_CLK 0x208c
  691. #define GAT_FSYS0_PCIE_TOP_IPCLKPORT_FSD_PCIE_SUB_CTRL_INST_0_MSTR_ACLK_SOC 0x2090
  692. #define GAT_FSYS0_PCIE_TOP_IPCLKPORT_FSD_PCIE_SUB_CTRL_INST_0_SLV_ACLK_SOC 0x2094
  693. #define GAT_FSYS0_SMMU_FSYS0_IPCLKPORT_CCLK 0x2098
  694. #define GAT_FSYS0_SMMU_FSYS0_IPCLKPORT_FSYS0_BCLK 0x209c
  695. #define GAT_FSYS0_SYSREG_FSYS0_IPCLKPORT_PCLK 0x20a0
  696. #define GAT_FSYS0_UFS_TOP0_IPCLKPORT_HCLK_BUS 0x20a4
  697. #define GAT_FSYS0_UFS_TOP0_IPCLKPORT_I_ACLK 0x20a8
  698. #define GAT_FSYS0_UFS_TOP0_IPCLKPORT_I_CLK_UNIPRO 0x20ac
  699. #define GAT_FSYS0_UFS_TOP0_IPCLKPORT_I_FMP_CLK 0x20b0
  700. #define GAT_FSYS0_UFS_TOP1_IPCLKPORT_HCLK_BUS 0x20b4
  701. #define GAT_FSYS0_UFS_TOP1_IPCLKPORT_I_ACLK 0x20b8
  702. #define GAT_FSYS0_UFS_TOP1_IPCLKPORT_I_CLK_UNIPRO 0x20bc
  703. #define GAT_FSYS0_UFS_TOP1_IPCLKPORT_I_FMP_CLK 0x20c0
  704. #define GAT_FSYS0_RII_CLK_DIVGATE 0x20d4
  705. static const unsigned long fsys0_clk_regs[] __initconst = {
  706. PLL_CON0_CLKCMU_FSYS0_UNIPRO,
  707. PLL_CON0_CLK_FSYS0_SLAVEBUSCLK,
  708. PLL_CON0_EQOS_RGMII_125_MUX1,
  709. DIV_CLK_UNIPRO,
  710. DIV_EQS_RGMII_CLK_125,
  711. DIV_PERIBUS_GRP,
  712. DIV_EQOS_RII_CLK2O5,
  713. DIV_EQOS_RMIICLK_25,
  714. DIV_PCIE_PHY_OSCCLK,
  715. GAT_FSYS0_EQOS_TOP0_IPCLKPORT_CLK_PTP_REF_I,
  716. GAT_FSYS0_EQOS_TOP0_IPCLKPORT_CLK_RX_I,
  717. GAT_FSYS0_FSYS0_CMU_FSYS0_IPCLKPORT_PCLK,
  718. GAT_FSYS0_GPIO_FSYS0_IPCLKPORT_OSCCLK,
  719. GAT_FSYS0_PCIE_TOP_IPCLKPORT_PCIEG3_PHY_X4_INST_0_PLL_REFCLK_FROM_XO,
  720. GAT_FSYS0_PCIE_TOP_IPCLKPORT_PIPE_PAL_INST_0_I_IMMORTAL_CLK,
  721. GAT_FSYS0_PCIE_TOP_IPCLKPORT_FSD_PCIE_SUB_CTRL_INST_0_AUX_CLK_SOC,
  722. GAT_FSYS0_UFS_TOP0_IPCLKPORT_I_MPHY_REFCLK_IXTAL24,
  723. GAT_FSYS0_UFS_TOP0_IPCLKPORT_I_MPHY_REFCLK_IXTAL26,
  724. GAT_FSYS0_UFS_TOP1_IPCLKPORT_I_MPHY_REFCLK_IXTAL24,
  725. GAT_FSYS0_UFS_TOP1_IPCLKPORT_I_MPHY_REFCLK_IXTAL26,
  726. GAT_FSYS0_AHBBR_FSYS0_IPCLKPORT_HCLK,
  727. GAT_FSYS0_AXI2APB_FSYS0_IPCLKPORT_ACLK,
  728. GAT_FSYS0_BUS_D_FSYS0_IPCLKPORT_MAINCLK,
  729. GAT_FSYS0_BUS_D_FSYS0_IPCLKPORT_PERICLK,
  730. GAT_FSYS0_BUS_P_FSYS0_IPCLKPORT_MAINCLK,
  731. GAT_FSYS0_BUS_P_FSYS0_IPCLKPORT_TCUCLK,
  732. GAT_FSYS0_CPE425_IPCLKPORT_ACLK,
  733. GAT_FSYS0_EQOS_TOP0_IPCLKPORT_ACLK_I,
  734. GAT_FSYS0_EQOS_TOP0_IPCLKPORT_HCLK_I,
  735. GAT_FSYS0_EQOS_TOP0_IPCLKPORT_RGMII_CLK_I,
  736. GAT_FSYS0_EQOS_TOP0_IPCLKPORT_RII_CLK_I,
  737. GAT_FSYS0_EQOS_TOP0_IPCLKPORT_RMII_CLK_I,
  738. GAT_FSYS0_GPIO_FSYS0_IPCLKPORT_PCLK,
  739. GAT_FSYS0_NS_BRDG_FSYS0_IPCLKPORT_CLK__PSOC_FSYS0__CLK_FSYS0_D,
  740. GAT_FSYS0_NS_BRDG_FSYS0_IPCLKPORT_CLK__PSOC_FSYS0__CLK_FSYS0_D1,
  741. GAT_FSYS0_NS_BRDG_FSYS0_IPCLKPORT_CLK__PSOC_FSYS0__CLK_FSYS0_P,
  742. GAT_FSYS0_NS_BRDG_FSYS0_IPCLKPORT_CLK__PSOC_FSYS0__CLK_FSYS0_S,
  743. GAT_FSYS0_PCIE_TOP_IPCLKPORT_PCIEG3_PHY_X4_INST_0_I_APB_PCLK,
  744. GAT_FSYS0_PCIE_TOP_IPCLKPORT_PCIEG3_PHY_X4_INST_0_PLL_REFCLK_FROM_SYSPLL,
  745. GAT_FSYS0_PCIE_TOP_IPCLKPORT_PIPE_PAL_INST_0_I_APB_PCLK_0,
  746. GAT_FSYS0_PCIE_TOP_IPCLKPORT_FSD_PCIE_SUB_CTRL_INST_0_DBI_ACLK_SOC,
  747. GAT_FSYS0_PCIE_TOP_IPCLKPORT_FSD_PCIE_SUB_CTRL_INST_0_I_DRIVER_APB_CLK,
  748. GAT_FSYS0_PCIE_TOP_IPCLKPORT_FSD_PCIE_SUB_CTRL_INST_0_MSTR_ACLK_SOC,
  749. GAT_FSYS0_PCIE_TOP_IPCLKPORT_FSD_PCIE_SUB_CTRL_INST_0_SLV_ACLK_SOC,
  750. GAT_FSYS0_SMMU_FSYS0_IPCLKPORT_CCLK,
  751. GAT_FSYS0_SMMU_FSYS0_IPCLKPORT_FSYS0_BCLK,
  752. GAT_FSYS0_SYSREG_FSYS0_IPCLKPORT_PCLK,
  753. GAT_FSYS0_UFS_TOP0_IPCLKPORT_HCLK_BUS,
  754. GAT_FSYS0_UFS_TOP0_IPCLKPORT_I_ACLK,
  755. GAT_FSYS0_UFS_TOP0_IPCLKPORT_I_CLK_UNIPRO,
  756. GAT_FSYS0_UFS_TOP0_IPCLKPORT_I_FMP_CLK,
  757. GAT_FSYS0_UFS_TOP1_IPCLKPORT_HCLK_BUS,
  758. GAT_FSYS0_UFS_TOP1_IPCLKPORT_I_ACLK,
  759. GAT_FSYS0_UFS_TOP1_IPCLKPORT_I_CLK_UNIPRO,
  760. GAT_FSYS0_UFS_TOP1_IPCLKPORT_I_FMP_CLK,
  761. GAT_FSYS0_RII_CLK_DIVGATE,
  762. };
  763. static const struct samsung_fixed_rate_clock fsys0_fixed_clks[] __initconst = {
  764. FRATE(0, "pad_eqos0_phyrxclk", NULL, 0, 125000000),
  765. FRATE(0, "i_mphy_refclk_ixtal26", NULL, 0, 26000000),
  766. FRATE(0, "xtal_clk_pcie_phy", NULL, 0, 100000000),
  767. };
  768. /* List of parent clocks for Muxes in CMU_FSYS0 */
  769. PNAME(mout_fsys0_clkcmu_fsys0_unipro_p) = { "fin_pll", "dout_cmu_pll_shared0_div6" };
  770. PNAME(mout_fsys0_clk_fsys0_slavebusclk_p) = { "fin_pll", "dout_cmu_fsys0_shared1div4" };
  771. PNAME(mout_fsys0_eqos_rgmii_125_mux1_p) = { "fin_pll", "dout_cmu_fsys0_shared0div4" };
  772. static const struct samsung_mux_clock fsys0_mux_clks[] __initconst = {
  773. MUX(0, "mout_fsys0_clkcmu_fsys0_unipro", mout_fsys0_clkcmu_fsys0_unipro_p,
  774. PLL_CON0_CLKCMU_FSYS0_UNIPRO, 4, 1),
  775. MUX(0, "mout_fsys0_clk_fsys0_slavebusclk", mout_fsys0_clk_fsys0_slavebusclk_p,
  776. PLL_CON0_CLK_FSYS0_SLAVEBUSCLK, 4, 1),
  777. MUX(0, "mout_fsys0_eqos_rgmii_125_mux1", mout_fsys0_eqos_rgmii_125_mux1_p,
  778. PLL_CON0_EQOS_RGMII_125_MUX1, 4, 1),
  779. };
  780. static const struct samsung_div_clock fsys0_div_clks[] __initconst = {
  781. DIV(0, "dout_fsys0_clk_unipro", "mout_fsys0_clkcmu_fsys0_unipro", DIV_CLK_UNIPRO, 0, 4),
  782. DIV(0, "dout_fsys0_eqs_rgmii_clk_125", "mout_fsys0_eqos_rgmii_125_mux1",
  783. DIV_EQS_RGMII_CLK_125, 0, 4),
  784. DIV(FSYS0_DOUT_FSYS0_PERIBUS_GRP, "dout_fsys0_peribus_grp",
  785. "mout_fsys0_clk_fsys0_slavebusclk", DIV_PERIBUS_GRP, 0, 4),
  786. DIV(0, "dout_fsys0_eqos_rii_clk2o5", "fsys0_rii_clk_divgate", DIV_EQOS_RII_CLK2O5, 0, 4),
  787. DIV(0, "dout_fsys0_eqos_rmiiclk_25", "mout_fsys0_eqos_rgmii_125_mux1",
  788. DIV_EQOS_RMIICLK_25, 0, 5),
  789. DIV(0, "dout_fsys0_pcie_phy_oscclk", "mout_fsys0_eqos_rgmii_125_mux1",
  790. DIV_PCIE_PHY_OSCCLK, 0, 4),
  791. };
  792. static const struct samsung_gate_clock fsys0_gate_clks[] __initconst = {
  793. GATE(FSYS0_EQOS_TOP0_IPCLKPORT_CLK_RX_I, "fsys0_eqos_top0_ipclkport_clk_rx_i",
  794. "pad_eqos0_phyrxclk", GAT_FSYS0_EQOS_TOP0_IPCLKPORT_CLK_RX_I, 21,
  795. CLK_IGNORE_UNUSED, 0),
  796. GATE(PCIE_SUBCTRL_INST0_AUX_CLK_SOC,
  797. "fsys0_pcie_top_ipclkport_fsd_pcie_sub_ctrl_inst_0_aux_clk_soc", "fin_pll",
  798. GAT_FSYS0_PCIE_TOP_IPCLKPORT_FSD_PCIE_SUB_CTRL_INST_0_AUX_CLK_SOC, 21,
  799. CLK_IGNORE_UNUSED, 0),
  800. GATE(0, "fsys0_fsys0_cmu_fsys0_ipclkport_pclk", "dout_fsys0_peribus_grp",
  801. GAT_FSYS0_FSYS0_CMU_FSYS0_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  802. GATE(0,
  803. "fsys0_pcie_top_ipclkport_pcieg3_phy_x4_inst_0_pll_refclk_from_xo",
  804. "xtal_clk_pcie_phy",
  805. GAT_FSYS0_PCIE_TOP_IPCLKPORT_PCIEG3_PHY_X4_INST_0_PLL_REFCLK_FROM_XO, 21,
  806. CLK_IGNORE_UNUSED, 0),
  807. GATE(UFS0_MPHY_REFCLK_IXTAL24, "fsys0_ufs_top0_ipclkport_i_mphy_refclk_ixtal24",
  808. "i_mphy_refclk_ixtal26", GAT_FSYS0_UFS_TOP0_IPCLKPORT_I_MPHY_REFCLK_IXTAL24, 21,
  809. CLK_IGNORE_UNUSED, 0),
  810. GATE(UFS0_MPHY_REFCLK_IXTAL26, "fsys0_ufs_top0_ipclkport_i_mphy_refclk_ixtal26",
  811. "i_mphy_refclk_ixtal26", GAT_FSYS0_UFS_TOP0_IPCLKPORT_I_MPHY_REFCLK_IXTAL26, 21,
  812. CLK_IGNORE_UNUSED, 0),
  813. GATE(UFS1_MPHY_REFCLK_IXTAL24, "fsys0_ufs_top1_ipclkport_i_mphy_refclk_ixtal24",
  814. "i_mphy_refclk_ixtal26", GAT_FSYS0_UFS_TOP1_IPCLKPORT_I_MPHY_REFCLK_IXTAL24, 21,
  815. CLK_IGNORE_UNUSED, 0),
  816. GATE(UFS1_MPHY_REFCLK_IXTAL26, "fsys0_ufs_top1_ipclkport_i_mphy_refclk_ixtal26",
  817. "i_mphy_refclk_ixtal26", GAT_FSYS0_UFS_TOP1_IPCLKPORT_I_MPHY_REFCLK_IXTAL26, 21,
  818. CLK_IGNORE_UNUSED, 0),
  819. GATE(0, "fsys0_ahbbr_fsys0_ipclkport_hclk", "dout_fsys0_peribus_grp",
  820. GAT_FSYS0_AHBBR_FSYS0_IPCLKPORT_HCLK, 21, CLK_IGNORE_UNUSED, 0),
  821. GATE(0, "fsys0_axi2apb_fsys0_ipclkport_aclk", "dout_fsys0_peribus_grp",
  822. GAT_FSYS0_AXI2APB_FSYS0_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  823. GATE(0, "fsys0_bus_d_fsys0_ipclkport_mainclk", "mout_fsys0_clk_fsys0_slavebusclk",
  824. GAT_FSYS0_BUS_D_FSYS0_IPCLKPORT_MAINCLK, 21, CLK_IGNORE_UNUSED, 0),
  825. GATE(0, "fsys0_bus_d_fsys0_ipclkport_periclk", "dout_fsys0_peribus_grp",
  826. GAT_FSYS0_BUS_D_FSYS0_IPCLKPORT_PERICLK, 21, CLK_IGNORE_UNUSED, 0),
  827. GATE(0, "fsys0_bus_p_fsys0_ipclkport_mainclk", "dout_fsys0_peribus_grp",
  828. GAT_FSYS0_BUS_P_FSYS0_IPCLKPORT_MAINCLK, 21, CLK_IGNORE_UNUSED, 0),
  829. GATE(0, "fsys0_bus_p_fsys0_ipclkport_tcuclk", "mout_fsys0_eqos_rgmii_125_mux1",
  830. GAT_FSYS0_BUS_P_FSYS0_IPCLKPORT_TCUCLK, 21, CLK_IGNORE_UNUSED, 0),
  831. GATE(0, "fsys0_cpe425_ipclkport_aclk", "mout_fsys0_clk_fsys0_slavebusclk",
  832. GAT_FSYS0_CPE425_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  833. GATE(FSYS0_EQOS_TOP0_IPCLKPORT_ACLK_I, "fsys0_eqos_top0_ipclkport_aclk_i",
  834. "dout_fsys0_peribus_grp", GAT_FSYS0_EQOS_TOP0_IPCLKPORT_ACLK_I, 21,
  835. CLK_IGNORE_UNUSED, 0),
  836. GATE(FSYS0_EQOS_TOP0_IPCLKPORT_HCLK_I, "fsys0_eqos_top0_ipclkport_hclk_i",
  837. "dout_fsys0_peribus_grp", GAT_FSYS0_EQOS_TOP0_IPCLKPORT_HCLK_I, 21,
  838. CLK_IGNORE_UNUSED, 0),
  839. GATE(FSYS0_EQOS_TOP0_IPCLKPORT_RGMII_CLK_I, "fsys0_eqos_top0_ipclkport_rgmii_clk_i",
  840. "dout_fsys0_eqs_rgmii_clk_125", GAT_FSYS0_EQOS_TOP0_IPCLKPORT_RGMII_CLK_I, 21,
  841. CLK_IGNORE_UNUSED, 0),
  842. GATE(0, "fsys0_eqos_top0_ipclkport_rii_clk_i", "dout_fsys0_eqos_rii_clk2o5",
  843. GAT_FSYS0_EQOS_TOP0_IPCLKPORT_RII_CLK_I, 21, CLK_IGNORE_UNUSED, 0),
  844. GATE(0, "fsys0_eqos_top0_ipclkport_rmii_clk_i", "dout_fsys0_eqos_rmiiclk_25",
  845. GAT_FSYS0_EQOS_TOP0_IPCLKPORT_RMII_CLK_I, 21, CLK_IGNORE_UNUSED, 0),
  846. GATE(0, "fsys0_gpio_fsys0_ipclkport_pclk", "dout_fsys0_peribus_grp",
  847. GAT_FSYS0_GPIO_FSYS0_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  848. GATE(0, "fsys0_gpio_fsys0_ipclkport_oscclk", "fin_pll",
  849. GAT_FSYS0_GPIO_FSYS0_IPCLKPORT_OSCCLK, 21, CLK_IGNORE_UNUSED, 0),
  850. GATE(0, "fsys0_ns_brdg_fsys0_ipclkport_clk__psoc_fsys0__clk_fsys0_d",
  851. "mout_fsys0_clk_fsys0_slavebusclk",
  852. GAT_FSYS0_NS_BRDG_FSYS0_IPCLKPORT_CLK__PSOC_FSYS0__CLK_FSYS0_D, 21,
  853. CLK_IGNORE_UNUSED, 0),
  854. GATE(0, "fsys0_ns_brdg_fsys0_ipclkport_clk__psoc_fsys0__clk_fsys0_d1",
  855. "mout_fsys0_eqos_rgmii_125_mux1",
  856. GAT_FSYS0_NS_BRDG_FSYS0_IPCLKPORT_CLK__PSOC_FSYS0__CLK_FSYS0_D1, 21,
  857. CLK_IGNORE_UNUSED, 0),
  858. GATE(0, "fsys0_ns_brdg_fsys0_ipclkport_clk__psoc_fsys0__clk_fsys0_p",
  859. "dout_fsys0_peribus_grp",
  860. GAT_FSYS0_NS_BRDG_FSYS0_IPCLKPORT_CLK__PSOC_FSYS0__CLK_FSYS0_P, 21,
  861. CLK_IGNORE_UNUSED, 0),
  862. GATE(0, "fsys0_ns_brdg_fsys0_ipclkport_clk__psoc_fsys0__clk_fsys0_s",
  863. "mout_fsys0_clk_fsys0_slavebusclk",
  864. GAT_FSYS0_NS_BRDG_FSYS0_IPCLKPORT_CLK__PSOC_FSYS0__CLK_FSYS0_S, 21,
  865. CLK_IGNORE_UNUSED, 0),
  866. GATE(0, "fsys0_pcie_top_ipclkport_pcieg3_phy_x4_inst_0_i_apb_pclk",
  867. "dout_fsys0_peribus_grp",
  868. GAT_FSYS0_PCIE_TOP_IPCLKPORT_PCIEG3_PHY_X4_INST_0_I_APB_PCLK, 21,
  869. CLK_IGNORE_UNUSED, 0),
  870. GATE(0,
  871. "fsys0_pcie_top_ipclkport_pcieg3_phy_x4_inst_0_pll_refclk_from_syspll",
  872. "dout_fsys0_pcie_phy_oscclk",
  873. GAT_FSYS0_PCIE_TOP_IPCLKPORT_PCIEG3_PHY_X4_INST_0_PLL_REFCLK_FROM_SYSPLL,
  874. 21, CLK_IGNORE_UNUSED, 0),
  875. GATE(0, "fsys0_pcie_top_ipclkport_pipe_pal_inst_0_i_apb_pclk_0", "dout_fsys0_peribus_grp",
  876. GAT_FSYS0_PCIE_TOP_IPCLKPORT_PIPE_PAL_INST_0_I_APB_PCLK_0, 21, CLK_IGNORE_UNUSED, 0),
  877. GATE(0, "fsys0_pcie_top_ipclkport_pipe_pal_inst_0_i_immortal_clk", "fin_pll",
  878. GAT_FSYS0_PCIE_TOP_IPCLKPORT_PIPE_PAL_INST_0_I_IMMORTAL_CLK, 21, CLK_IGNORE_UNUSED, 0),
  879. GATE(PCIE_SUBCTRL_INST0_DBI_ACLK_SOC,
  880. "fsys0_pcie_top_ipclkport_fsd_pcie_sub_ctrl_inst_0_dbi_aclk_soc",
  881. "dout_fsys0_peribus_grp",
  882. GAT_FSYS0_PCIE_TOP_IPCLKPORT_FSD_PCIE_SUB_CTRL_INST_0_DBI_ACLK_SOC, 21,
  883. CLK_IGNORE_UNUSED, 0),
  884. GATE(0, "fsys0_pcie_top_ipclkport_fsd_pcie_sub_ctrl_inst_0_i_driver_apb_clk",
  885. "dout_fsys0_peribus_grp",
  886. GAT_FSYS0_PCIE_TOP_IPCLKPORT_FSD_PCIE_SUB_CTRL_INST_0_I_DRIVER_APB_CLK, 21,
  887. CLK_IGNORE_UNUSED, 0),
  888. GATE(PCIE_SUBCTRL_INST0_MSTR_ACLK_SOC,
  889. "fsys0_pcie_top_ipclkport_fsd_pcie_sub_ctrl_inst_0_mstr_aclk_soc",
  890. "mout_fsys0_clk_fsys0_slavebusclk",
  891. GAT_FSYS0_PCIE_TOP_IPCLKPORT_FSD_PCIE_SUB_CTRL_INST_0_MSTR_ACLK_SOC, 21,
  892. CLK_IGNORE_UNUSED, 0),
  893. GATE(PCIE_SUBCTRL_INST0_SLV_ACLK_SOC,
  894. "fsys0_pcie_top_ipclkport_fsd_pcie_sub_ctrl_inst_0_slv_aclk_soc",
  895. "mout_fsys0_clk_fsys0_slavebusclk",
  896. GAT_FSYS0_PCIE_TOP_IPCLKPORT_FSD_PCIE_SUB_CTRL_INST_0_SLV_ACLK_SOC, 21,
  897. CLK_IGNORE_UNUSED, 0),
  898. GATE(0, "fsys0_smmu_fsys0_ipclkport_cclk", "mout_fsys0_eqos_rgmii_125_mux1",
  899. GAT_FSYS0_SMMU_FSYS0_IPCLKPORT_CCLK, 21, CLK_IGNORE_UNUSED, 0),
  900. GATE(0, "fsys0_smmu_fsys0_ipclkport_fsys0_bclk", "mout_fsys0_clk_fsys0_slavebusclk",
  901. GAT_FSYS0_SMMU_FSYS0_IPCLKPORT_FSYS0_BCLK, 21, CLK_IGNORE_UNUSED, 0),
  902. GATE(0, "fsys0_sysreg_fsys0_ipclkport_pclk", "dout_fsys0_peribus_grp",
  903. GAT_FSYS0_SYSREG_FSYS0_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  904. GATE(UFS0_TOP0_HCLK_BUS, "fsys0_ufs_top0_ipclkport_hclk_bus", "dout_fsys0_peribus_grp",
  905. GAT_FSYS0_UFS_TOP0_IPCLKPORT_HCLK_BUS, 21, CLK_IGNORE_UNUSED, 0),
  906. GATE(UFS0_TOP0_ACLK, "fsys0_ufs_top0_ipclkport_i_aclk", "dout_fsys0_peribus_grp",
  907. GAT_FSYS0_UFS_TOP0_IPCLKPORT_I_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  908. GATE(UFS0_TOP0_CLK_UNIPRO, "fsys0_ufs_top0_ipclkport_i_clk_unipro", "dout_fsys0_clk_unipro",
  909. GAT_FSYS0_UFS_TOP0_IPCLKPORT_I_CLK_UNIPRO, 21, CLK_IGNORE_UNUSED, 0),
  910. GATE(UFS0_TOP0_FMP_CLK, "fsys0_ufs_top0_ipclkport_i_fmp_clk", "dout_fsys0_peribus_grp",
  911. GAT_FSYS0_UFS_TOP0_IPCLKPORT_I_FMP_CLK, 21, CLK_IGNORE_UNUSED, 0),
  912. GATE(UFS1_TOP1_HCLK_BUS, "fsys0_ufs_top1_ipclkport_hclk_bus", "dout_fsys0_peribus_grp",
  913. GAT_FSYS0_UFS_TOP1_IPCLKPORT_HCLK_BUS, 21, CLK_IGNORE_UNUSED, 0),
  914. GATE(UFS1_TOP1_ACLK, "fsys0_ufs_top1_ipclkport_i_aclk", "dout_fsys0_peribus_grp",
  915. GAT_FSYS0_UFS_TOP1_IPCLKPORT_I_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  916. GATE(UFS1_TOP1_CLK_UNIPRO, "fsys0_ufs_top1_ipclkport_i_clk_unipro", "dout_fsys0_clk_unipro",
  917. GAT_FSYS0_UFS_TOP1_IPCLKPORT_I_CLK_UNIPRO, 21, CLK_IGNORE_UNUSED, 0),
  918. GATE(UFS1_TOP1_FMP_CLK, "fsys0_ufs_top1_ipclkport_i_fmp_clk", "dout_fsys0_peribus_grp",
  919. GAT_FSYS0_UFS_TOP1_IPCLKPORT_I_FMP_CLK, 21, CLK_IGNORE_UNUSED, 0),
  920. GATE(0, "fsys0_rii_clk_divgate", "dout_fsys0_eqos_rmiiclk_25", GAT_FSYS0_RII_CLK_DIVGATE,
  921. 21, CLK_IGNORE_UNUSED, 0),
  922. GATE(FSYS0_EQOS_TOP0_IPCLKPORT_CLK_PTP_REF_I, "fsys0_eqos_top0_ipclkport_clk_ptp_ref_i",
  923. "fin_pll", GAT_FSYS0_EQOS_TOP0_IPCLKPORT_CLK_PTP_REF_I, 21, CLK_IGNORE_UNUSED, 0),
  924. };
  925. static const struct samsung_cmu_info fsys0_cmu_info __initconst = {
  926. .mux_clks = fsys0_mux_clks,
  927. .nr_mux_clks = ARRAY_SIZE(fsys0_mux_clks),
  928. .div_clks = fsys0_div_clks,
  929. .nr_div_clks = ARRAY_SIZE(fsys0_div_clks),
  930. .gate_clks = fsys0_gate_clks,
  931. .nr_gate_clks = ARRAY_SIZE(fsys0_gate_clks),
  932. .fixed_clks = fsys0_fixed_clks,
  933. .nr_fixed_clks = ARRAY_SIZE(fsys0_fixed_clks),
  934. .nr_clk_ids = FSYS0_NR_CLK,
  935. .clk_regs = fsys0_clk_regs,
  936. .nr_clk_regs = ARRAY_SIZE(fsys0_clk_regs),
  937. .clk_name = "dout_cmu_fsys0_shared1div4",
  938. };
  939. /* Register Offset definitions for CMU_FSYS1 (0x16810000) */
  940. #define PLL_CON0_ACLK_FSYS1_BUSP_MUX 0x100
  941. #define PLL_CON0_PCLKL_FSYS1_BUSP_MUX 0x180
  942. #define DIV_CLK_FSYS1_PHY0_OSCCLK 0x1800
  943. #define DIV_CLK_FSYS1_PHY1_OSCCLK 0x1804
  944. #define GAT_FSYS1_CMU_FSYS1_IPCLKPORT_PCLK 0x2000
  945. #define GAT_FSYS1_PCIE_LINK0_IPCLKPORT_AUXCLK 0x2004
  946. #define GAT_FSYS1_PCIE_LINK0_IPCLKPORT_I_SOC_REF_CLK 0x2008
  947. #define GAT_FSYS1_PCIE_LINK1_IPCLKPORT_AUXCLK 0x200c
  948. #define GAT_FSYS1_PCIE_PHY0_IPCLKPORT_I_REF_XTAL 0x202c
  949. #define GAT_FSYS1_PHY0_OSCCLLK 0x2034
  950. #define GAT_FSYS1_PHY1_OSCCLK 0x2038
  951. #define GAT_FSYS1_AXI2APB_FSYS1_IPCLKPORT_ACLK 0x203c
  952. #define GAT_FSYS1_BUS_D0_FSYS1_IPCLKPORT_MAINCLK 0x2040
  953. #define GAT_FSYS1_BUS_S0_FSYS1_IPCLKPORT_M250CLK 0x2048
  954. #define GAT_FSYS1_BUS_S0_FSYS1_IPCLKPORT_MAINCLK 0x204c
  955. #define GAT_FSYS1_CPE425_0_FSYS1_IPCLKPORT_ACLK 0x2054
  956. #define GAT_FSYS1_NS_BRDG_FSYS1_IPCLKPORT_CLK__PSOC_FSYS1__CLK_FSYS1_D0 0x205c
  957. #define GAT_FSYS1_NS_BRDG_FSYS1_IPCLKPORT_CLK__PSOC_FSYS1__CLK_FSYS1_S0 0x2064
  958. #define GAT_FSYS1_PCIE_LINK0_IPCLKPORT_DBI_ACLK 0x206c
  959. #define GAT_FSYS1_PCIE_LINK0_IPCLKPORT_I_APB_CLK 0x2070
  960. #define GAT_FSYS1_PCIE_LINK0_IPCLKPORT_I_DRIVER_APB_CLK 0x2074
  961. #define GAT_FSYS1_PCIE_LINK0_IPCLKPORT_MSTR_ACLK 0x2078
  962. #define GAT_FSYS1_PCIE_LINK0_IPCLKPORT_SLV_ACLK 0x207c
  963. #define GAT_FSYS1_PCIE_LINK1_IPCLKPORT_DBI_ACLK 0x2080
  964. #define GAT_FSYS1_PCIE_LINK1_IPCLKPORT_I_DRIVER_APB_CLK 0x2084
  965. #define GAT_FSYS1_PCIE_LINK1_IPCLKPORT_MSTR_ACLK 0x2088
  966. #define GAT_FSYS1_PCIE_LINK1_IPCLKPORT_SLV_ACLK 0x208c
  967. #define GAT_FSYS1_PCIE_PHY0_IPCLKPORT_I_APB_CLK 0x20a4
  968. #define GAT_FSYS1_PCIE_PHY0_IPCLKPORT_I_REF_SOC_PLL 0x20a8
  969. #define GAT_FSYS1_SYSREG_FSYS1_IPCLKPORT_PCLK 0x20b4
  970. #define GAT_FSYS1_TBU0_FSYS1_IPCLKPORT_ACLK 0x20b8
  971. static const unsigned long fsys1_clk_regs[] __initconst = {
  972. PLL_CON0_ACLK_FSYS1_BUSP_MUX,
  973. PLL_CON0_PCLKL_FSYS1_BUSP_MUX,
  974. DIV_CLK_FSYS1_PHY0_OSCCLK,
  975. DIV_CLK_FSYS1_PHY1_OSCCLK,
  976. GAT_FSYS1_CMU_FSYS1_IPCLKPORT_PCLK,
  977. GAT_FSYS1_PCIE_LINK0_IPCLKPORT_AUXCLK,
  978. GAT_FSYS1_PCIE_LINK0_IPCLKPORT_I_SOC_REF_CLK,
  979. GAT_FSYS1_PCIE_LINK1_IPCLKPORT_AUXCLK,
  980. GAT_FSYS1_PCIE_PHY0_IPCLKPORT_I_REF_XTAL,
  981. GAT_FSYS1_PHY0_OSCCLLK,
  982. GAT_FSYS1_PHY1_OSCCLK,
  983. GAT_FSYS1_AXI2APB_FSYS1_IPCLKPORT_ACLK,
  984. GAT_FSYS1_BUS_D0_FSYS1_IPCLKPORT_MAINCLK,
  985. GAT_FSYS1_BUS_S0_FSYS1_IPCLKPORT_M250CLK,
  986. GAT_FSYS1_BUS_S0_FSYS1_IPCLKPORT_MAINCLK,
  987. GAT_FSYS1_CPE425_0_FSYS1_IPCLKPORT_ACLK,
  988. GAT_FSYS1_NS_BRDG_FSYS1_IPCLKPORT_CLK__PSOC_FSYS1__CLK_FSYS1_D0,
  989. GAT_FSYS1_NS_BRDG_FSYS1_IPCLKPORT_CLK__PSOC_FSYS1__CLK_FSYS1_S0,
  990. GAT_FSYS1_PCIE_LINK0_IPCLKPORT_DBI_ACLK,
  991. GAT_FSYS1_PCIE_LINK0_IPCLKPORT_I_APB_CLK,
  992. GAT_FSYS1_PCIE_LINK0_IPCLKPORT_I_DRIVER_APB_CLK,
  993. GAT_FSYS1_PCIE_LINK0_IPCLKPORT_MSTR_ACLK,
  994. GAT_FSYS1_PCIE_LINK0_IPCLKPORT_SLV_ACLK,
  995. GAT_FSYS1_PCIE_LINK1_IPCLKPORT_DBI_ACLK,
  996. GAT_FSYS1_PCIE_LINK1_IPCLKPORT_I_DRIVER_APB_CLK,
  997. GAT_FSYS1_PCIE_LINK1_IPCLKPORT_MSTR_ACLK,
  998. GAT_FSYS1_PCIE_LINK1_IPCLKPORT_SLV_ACLK,
  999. GAT_FSYS1_PCIE_PHY0_IPCLKPORT_I_APB_CLK,
  1000. GAT_FSYS1_PCIE_PHY0_IPCLKPORT_I_REF_SOC_PLL,
  1001. GAT_FSYS1_SYSREG_FSYS1_IPCLKPORT_PCLK,
  1002. GAT_FSYS1_TBU0_FSYS1_IPCLKPORT_ACLK,
  1003. };
  1004. static const struct samsung_fixed_rate_clock fsys1_fixed_clks[] __initconst = {
  1005. FRATE(0, "clk_fsys1_phy0_ref", NULL, 0, 100000000),
  1006. FRATE(0, "clk_fsys1_phy1_ref", NULL, 0, 100000000),
  1007. };
  1008. /* List of parent clocks for Muxes in CMU_FSYS1 */
  1009. PNAME(mout_fsys1_pclkl_fsys1_busp_mux_p) = { "fin_pll", "dout_cmu_fsys1_shared0div8" };
  1010. PNAME(mout_fsys1_aclk_fsys1_busp_mux_p) = { "fin_pll", "dout_cmu_fsys1_shared0div4" };
  1011. static const struct samsung_mux_clock fsys1_mux_clks[] __initconst = {
  1012. MUX(0, "mout_fsys1_pclkl_fsys1_busp_mux", mout_fsys1_pclkl_fsys1_busp_mux_p,
  1013. PLL_CON0_PCLKL_FSYS1_BUSP_MUX, 4, 1),
  1014. MUX(0, "mout_fsys1_aclk_fsys1_busp_mux", mout_fsys1_aclk_fsys1_busp_mux_p,
  1015. PLL_CON0_ACLK_FSYS1_BUSP_MUX, 4, 1),
  1016. };
  1017. static const struct samsung_div_clock fsys1_div_clks[] __initconst = {
  1018. DIV(0, "dout_fsys1_clk_fsys1_phy0_oscclk", "fsys1_phy0_osccllk",
  1019. DIV_CLK_FSYS1_PHY0_OSCCLK, 0, 4),
  1020. DIV(0, "dout_fsys1_clk_fsys1_phy1_oscclk", "fsys1_phy1_oscclk",
  1021. DIV_CLK_FSYS1_PHY1_OSCCLK, 0, 4),
  1022. };
  1023. static const struct samsung_gate_clock fsys1_gate_clks[] __initconst = {
  1024. GATE(0, "fsys1_cmu_fsys1_ipclkport_pclk", "mout_fsys1_pclkl_fsys1_busp_mux",
  1025. GAT_FSYS1_CMU_FSYS1_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1026. GATE(0, "fsys1_pcie_phy0_ipclkport_i_ref_xtal", "clk_fsys1_phy0_ref",
  1027. GAT_FSYS1_PCIE_PHY0_IPCLKPORT_I_REF_XTAL, 21, CLK_IGNORE_UNUSED, 0),
  1028. GATE(0, "fsys1_phy0_osccllk", "mout_fsys1_aclk_fsys1_busp_mux",
  1029. GAT_FSYS1_PHY0_OSCCLLK, 21, CLK_IGNORE_UNUSED, 0),
  1030. GATE(0, "fsys1_phy1_oscclk", "mout_fsys1_aclk_fsys1_busp_mux",
  1031. GAT_FSYS1_PHY1_OSCCLK, 21, CLK_IGNORE_UNUSED, 0),
  1032. GATE(0, "fsys1_axi2apb_fsys1_ipclkport_aclk", "mout_fsys1_pclkl_fsys1_busp_mux",
  1033. GAT_FSYS1_AXI2APB_FSYS1_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1034. GATE(0, "fsys1_bus_d0_fsys1_ipclkport_mainclk", "mout_fsys1_aclk_fsys1_busp_mux",
  1035. GAT_FSYS1_BUS_D0_FSYS1_IPCLKPORT_MAINCLK, 21, CLK_IGNORE_UNUSED, 0),
  1036. GATE(0, "fsys1_bus_s0_fsys1_ipclkport_m250clk", "mout_fsys1_pclkl_fsys1_busp_mux",
  1037. GAT_FSYS1_BUS_S0_FSYS1_IPCLKPORT_M250CLK, 21, CLK_IGNORE_UNUSED, 0),
  1038. GATE(0, "fsys1_bus_s0_fsys1_ipclkport_mainclk", "mout_fsys1_aclk_fsys1_busp_mux",
  1039. GAT_FSYS1_BUS_S0_FSYS1_IPCLKPORT_MAINCLK, 21, CLK_IGNORE_UNUSED, 0),
  1040. GATE(0, "fsys1_cpe425_0_fsys1_ipclkport_aclk", "mout_fsys1_aclk_fsys1_busp_mux",
  1041. GAT_FSYS1_CPE425_0_FSYS1_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1042. GATE(0, "fsys1_ns_brdg_fsys1_ipclkport_clk__psoc_fsys1__clk_fsys1_d0",
  1043. "mout_fsys1_aclk_fsys1_busp_mux",
  1044. GAT_FSYS1_NS_BRDG_FSYS1_IPCLKPORT_CLK__PSOC_FSYS1__CLK_FSYS1_D0, 21,
  1045. CLK_IGNORE_UNUSED, 0),
  1046. GATE(0, "fsys1_ns_brdg_fsys1_ipclkport_clk__psoc_fsys1__clk_fsys1_s0",
  1047. "mout_fsys1_aclk_fsys1_busp_mux",
  1048. GAT_FSYS1_NS_BRDG_FSYS1_IPCLKPORT_CLK__PSOC_FSYS1__CLK_FSYS1_S0, 21,
  1049. CLK_IGNORE_UNUSED, 0),
  1050. GATE(PCIE_LINK0_IPCLKPORT_DBI_ACLK, "fsys1_pcie_link0_ipclkport_dbi_aclk",
  1051. "mout_fsys1_aclk_fsys1_busp_mux", GAT_FSYS1_PCIE_LINK0_IPCLKPORT_DBI_ACLK, 21,
  1052. CLK_IGNORE_UNUSED, 0),
  1053. GATE(0, "fsys1_pcie_link0_ipclkport_i_apb_clk", "mout_fsys1_pclkl_fsys1_busp_mux",
  1054. GAT_FSYS1_PCIE_LINK0_IPCLKPORT_I_APB_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1055. GATE(0, "fsys1_pcie_link0_ipclkport_i_soc_ref_clk", "fin_pll",
  1056. GAT_FSYS1_PCIE_LINK0_IPCLKPORT_I_SOC_REF_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1057. GATE(0, "fsys1_pcie_link0_ipclkport_i_driver_apb_clk", "mout_fsys1_pclkl_fsys1_busp_mux",
  1058. GAT_FSYS1_PCIE_LINK0_IPCLKPORT_I_DRIVER_APB_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1059. GATE(PCIE_LINK0_IPCLKPORT_MSTR_ACLK, "fsys1_pcie_link0_ipclkport_mstr_aclk",
  1060. "mout_fsys1_aclk_fsys1_busp_mux", GAT_FSYS1_PCIE_LINK0_IPCLKPORT_MSTR_ACLK, 21,
  1061. CLK_IGNORE_UNUSED, 0),
  1062. GATE(PCIE_LINK0_IPCLKPORT_SLV_ACLK, "fsys1_pcie_link0_ipclkport_slv_aclk",
  1063. "mout_fsys1_aclk_fsys1_busp_mux", GAT_FSYS1_PCIE_LINK0_IPCLKPORT_SLV_ACLK, 21,
  1064. CLK_IGNORE_UNUSED, 0),
  1065. GATE(PCIE_LINK1_IPCLKPORT_DBI_ACLK, "fsys1_pcie_link1_ipclkport_dbi_aclk",
  1066. "mout_fsys1_aclk_fsys1_busp_mux", GAT_FSYS1_PCIE_LINK1_IPCLKPORT_DBI_ACLK, 21,
  1067. CLK_IGNORE_UNUSED, 0),
  1068. GATE(0, "fsys1_pcie_link1_ipclkport_i_driver_apb_clk", "mout_fsys1_pclkl_fsys1_busp_mux",
  1069. GAT_FSYS1_PCIE_LINK1_IPCLKPORT_I_DRIVER_APB_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1070. GATE(PCIE_LINK1_IPCLKPORT_MSTR_ACLK, "fsys1_pcie_link1_ipclkport_mstr_aclk",
  1071. "mout_fsys1_aclk_fsys1_busp_mux", GAT_FSYS1_PCIE_LINK1_IPCLKPORT_MSTR_ACLK, 21,
  1072. CLK_IGNORE_UNUSED, 0),
  1073. GATE(PCIE_LINK1_IPCLKPORT_SLV_ACLK, "fsys1_pcie_link1_ipclkport_slv_aclk",
  1074. "mout_fsys1_aclk_fsys1_busp_mux", GAT_FSYS1_PCIE_LINK1_IPCLKPORT_SLV_ACLK, 21,
  1075. CLK_IGNORE_UNUSED, 0),
  1076. GATE(0, "fsys1_pcie_phy0_ipclkport_i_apb_clk", "mout_fsys1_pclkl_fsys1_busp_mux",
  1077. GAT_FSYS1_PCIE_PHY0_IPCLKPORT_I_APB_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1078. GATE(PCIE_LINK0_IPCLKPORT_AUX_ACLK, "fsys1_pcie_link0_ipclkport_auxclk", "fin_pll",
  1079. GAT_FSYS1_PCIE_LINK0_IPCLKPORT_AUXCLK, 21, CLK_IGNORE_UNUSED, 0),
  1080. GATE(PCIE_LINK1_IPCLKPORT_AUX_ACLK, "fsys1_pcie_link1_ipclkport_auxclk", "fin_pll",
  1081. GAT_FSYS1_PCIE_LINK1_IPCLKPORT_AUXCLK, 21, CLK_IGNORE_UNUSED, 0),
  1082. GATE(0, "fsys1_pcie_phy0_ipclkport_i_ref_soc_pll", "dout_fsys1_clk_fsys1_phy0_oscclk",
  1083. GAT_FSYS1_PCIE_PHY0_IPCLKPORT_I_REF_SOC_PLL, 21, CLK_IGNORE_UNUSED, 0),
  1084. GATE(0, "fsys1_sysreg_fsys1_ipclkport_pclk", "mout_fsys1_pclkl_fsys1_busp_mux",
  1085. GAT_FSYS1_SYSREG_FSYS1_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1086. GATE(0, "fsys1_tbu0_fsys1_ipclkport_aclk", "mout_fsys1_aclk_fsys1_busp_mux",
  1087. GAT_FSYS1_TBU0_FSYS1_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1088. };
  1089. static const struct samsung_cmu_info fsys1_cmu_info __initconst = {
  1090. .mux_clks = fsys1_mux_clks,
  1091. .nr_mux_clks = ARRAY_SIZE(fsys1_mux_clks),
  1092. .div_clks = fsys1_div_clks,
  1093. .nr_div_clks = ARRAY_SIZE(fsys1_div_clks),
  1094. .gate_clks = fsys1_gate_clks,
  1095. .nr_gate_clks = ARRAY_SIZE(fsys1_gate_clks),
  1096. .fixed_clks = fsys1_fixed_clks,
  1097. .nr_fixed_clks = ARRAY_SIZE(fsys1_fixed_clks),
  1098. .nr_clk_ids = FSYS1_NR_CLK,
  1099. .clk_regs = fsys1_clk_regs,
  1100. .nr_clk_regs = ARRAY_SIZE(fsys1_clk_regs),
  1101. .clk_name = "dout_cmu_fsys1_shared0div4",
  1102. };
  1103. /* Register Offset definitions for CMU_IMEM (0x10010000) */
  1104. #define PLL_CON0_CLK_IMEM_ACLK 0x100
  1105. #define PLL_CON0_CLK_IMEM_INTMEMCLK 0x120
  1106. #define PLL_CON0_CLK_IMEM_TCUCLK 0x140
  1107. #define DIV_OSCCLK_IMEM_TMUTSCLK 0x1800
  1108. #define GAT_IMEM_IMEM_CMU_IMEM_IPCLKPORT_PCLK 0x2000
  1109. #define GAT_IMEM_MCT_IPCLKPORT_OSCCLK__ALO 0x2004
  1110. #define GAT_IMEM_OTP_CON_TOP_IPCLKPORT_I_OSCCLK 0x2008
  1111. #define GAT_IMEM_RSTNSYNC_OSCCLK_IPCLKPORT_CLK 0x200c
  1112. #define GAT_IMEM_TMU_CPU0_IPCLKPORT_I_CLK 0x2010
  1113. #define GAT_IMEM_TMU_CPU0_IPCLKPORT_I_CLK_TS 0x2014
  1114. #define GAT_IMEM_TMU_CPU2_IPCLKPORT_I_CLK 0x2018
  1115. #define GAT_IMEM_TMU_CPU2_IPCLKPORT_I_CLK_TS 0x201c
  1116. #define GAT_IMEM_TMU_GPU_IPCLKPORT_I_CLK 0x2020
  1117. #define GAT_IMEM_TMU_GPU_IPCLKPORT_I_CLK_TS 0x2024
  1118. #define GAT_IMEM_TMU_GT_IPCLKPORT_I_CLK 0x2028
  1119. #define GAT_IMEM_TMU_GT_IPCLKPORT_I_CLK_TS 0x202c
  1120. #define GAT_IMEM_TMU_TOP_IPCLKPORT_I_CLK 0x2030
  1121. #define GAT_IMEM_TMU_TOP_IPCLKPORT_I_CLK_TS 0x2034
  1122. #define GAT_IMEM_WDT0_IPCLKPORT_CLK 0x2038
  1123. #define GAT_IMEM_WDT1_IPCLKPORT_CLK 0x203c
  1124. #define GAT_IMEM_WDT2_IPCLKPORT_CLK 0x2040
  1125. #define GAT_IMEM_ADM_AXI4ST_I0_IMEM_IPCLKPORT_ACLKM 0x2044
  1126. #define GAT_IMEM_ADM_AXI4ST_I1_IMEM_IPCLKPORT_ACLKM 0x2048
  1127. #define GAT_IMEM_ADM_AXI4ST_I2_IMEM_IPCLKPORT_ACLKM 0x204c
  1128. #define GAT_IMEM_ADS_AXI4ST_I0_IMEM_IPCLKPORT_ACLKS 0x2050
  1129. #define GAT_IMEM_ADS_AXI4ST_I1_IMEM_IPCLKPORT_ACLKS 0x2054
  1130. #define GAT_IMEM_ADS_AXI4ST_I2_IMEM_IPCLKPORT_ACLKS 0x2058
  1131. #define GAT_IMEM_ASYNC_DMA0_IPCLKPORT_PCLKM 0x205c
  1132. #define GAT_IMEM_ASYNC_DMA0_IPCLKPORT_PCLKS 0x2060
  1133. #define GAT_IMEM_ASYNC_DMA1_IPCLKPORT_PCLKM 0x2064
  1134. #define GAT_IMEM_ASYNC_DMA1_IPCLKPORT_PCLKS 0x2068
  1135. #define GAT_IMEM_AXI2APB_IMEMP0_IPCLKPORT_ACLK 0x206c
  1136. #define GAT_IMEM_AXI2APB_IMEMP1_IPCLKPORT_ACLK 0x2070
  1137. #define GAT_IMEM_BUS_D_IMEM_IPCLKPORT_MAINCLK 0x2074
  1138. #define GAT_IMEM_BUS_P_IMEM_IPCLKPORT_MAINCLK 0x2078
  1139. #define GAT_IMEM_BUS_P_IMEM_IPCLKPORT_PERICLK 0x207c
  1140. #define GAT_IMEM_BUS_P_IMEM_IPCLKPORT_TCUCLK 0x2080
  1141. #define GAT_IMEM_DMA0_IPCLKPORT_ACLK 0x2084
  1142. #define GAT_IMEM_DMA1_IPCLKPORT_ACLK 0x2088
  1143. #define GAT_IMEM_GIC500_INPUT_SYNC_IPCLKPORT_CLK 0x208c
  1144. #define GAT_IMEM_GIC_IPCLKPORT_CLK 0x2090
  1145. #define GAT_IMEM_INTMEM_IPCLKPORT_ACLK 0x2094
  1146. #define GAT_IMEM_MAILBOX_SCS_CA72_IPCLKPORT_PCLK 0x2098
  1147. #define GAT_IMEM_MAILBOX_SMS_CA72_IPCLKPORT_PCLK 0x209c
  1148. #define GAT_IMEM_MCT_IPCLKPORT_PCLK 0x20a0
  1149. #define GAT_IMEM_NS_BRDG_IMEM_IPCLKPORT_CLK__PSCO_IMEM__CLK_IMEM_D 0x20a4
  1150. #define GAT_IMEM_NS_BRDG_IMEM_IPCLKPORT_CLK__PSCO_IMEM__CLK_IMEM_TCU 0x20a8
  1151. #define GAT_IMEM_NS_BRDG_IMEM_IPCLKPORT_CLK__PSOC_IMEM__CLK_IMEM_P 0x20ac
  1152. #define GAT_IMEM_OTP_CON_TOP_IPCLKPORT_PCLK 0x20b0
  1153. #define GAT_IMEM_RSTNSYNC_ACLK_IPCLKPORT_CLK 0x20b4
  1154. #define GAT_IMEM_RSTNSYNC_INTMEMCLK_IPCLKPORT_CLK 0x20b8
  1155. #define GAT_IMEM_RSTNSYNC_TCUCLK_IPCLKPORT_CLK 0x20bc
  1156. #define GAT_IMEM_SFRIF_TMU0_IMEM_IPCLKPORT_PCLK 0x20c0
  1157. #define GAT_IMEM_SFRIF_TMU1_IMEM_IPCLKPORT_PCLK 0x20c4
  1158. #define GAT_IMEM_SYSREG_IMEM_IPCLKPORT_PCLK 0x20c8
  1159. #define GAT_IMEM_TBU_IMEM_IPCLKPORT_ACLK 0x20cc
  1160. #define GAT_IMEM_TCU_IPCLKPORT_ACLK 0x20d0
  1161. #define GAT_IMEM_WDT0_IPCLKPORT_PCLK 0x20d4
  1162. #define GAT_IMEM_WDT1_IPCLKPORT_PCLK 0x20d8
  1163. #define GAT_IMEM_WDT2_IPCLKPORT_PCLK 0x20dc
  1164. static const unsigned long imem_clk_regs[] __initconst = {
  1165. PLL_CON0_CLK_IMEM_ACLK,
  1166. PLL_CON0_CLK_IMEM_INTMEMCLK,
  1167. PLL_CON0_CLK_IMEM_TCUCLK,
  1168. DIV_OSCCLK_IMEM_TMUTSCLK,
  1169. GAT_IMEM_IMEM_CMU_IMEM_IPCLKPORT_PCLK,
  1170. GAT_IMEM_MCT_IPCLKPORT_OSCCLK__ALO,
  1171. GAT_IMEM_OTP_CON_TOP_IPCLKPORT_I_OSCCLK,
  1172. GAT_IMEM_RSTNSYNC_OSCCLK_IPCLKPORT_CLK,
  1173. GAT_IMEM_TMU_CPU0_IPCLKPORT_I_CLK,
  1174. GAT_IMEM_TMU_CPU0_IPCLKPORT_I_CLK_TS,
  1175. GAT_IMEM_TMU_CPU2_IPCLKPORT_I_CLK,
  1176. GAT_IMEM_TMU_CPU2_IPCLKPORT_I_CLK_TS,
  1177. GAT_IMEM_TMU_GPU_IPCLKPORT_I_CLK,
  1178. GAT_IMEM_TMU_GPU_IPCLKPORT_I_CLK_TS,
  1179. GAT_IMEM_TMU_GT_IPCLKPORT_I_CLK,
  1180. GAT_IMEM_TMU_GT_IPCLKPORT_I_CLK_TS,
  1181. GAT_IMEM_TMU_TOP_IPCLKPORT_I_CLK,
  1182. GAT_IMEM_TMU_TOP_IPCLKPORT_I_CLK_TS,
  1183. GAT_IMEM_WDT0_IPCLKPORT_CLK,
  1184. GAT_IMEM_WDT1_IPCLKPORT_CLK,
  1185. GAT_IMEM_WDT2_IPCLKPORT_CLK,
  1186. GAT_IMEM_ADM_AXI4ST_I0_IMEM_IPCLKPORT_ACLKM,
  1187. GAT_IMEM_ADM_AXI4ST_I1_IMEM_IPCLKPORT_ACLKM,
  1188. GAT_IMEM_ADM_AXI4ST_I2_IMEM_IPCLKPORT_ACLKM,
  1189. GAT_IMEM_ADS_AXI4ST_I0_IMEM_IPCLKPORT_ACLKS,
  1190. GAT_IMEM_ADS_AXI4ST_I1_IMEM_IPCLKPORT_ACLKS,
  1191. GAT_IMEM_ADS_AXI4ST_I2_IMEM_IPCLKPORT_ACLKS,
  1192. GAT_IMEM_ASYNC_DMA0_IPCLKPORT_PCLKM,
  1193. GAT_IMEM_ASYNC_DMA0_IPCLKPORT_PCLKS,
  1194. GAT_IMEM_ASYNC_DMA1_IPCLKPORT_PCLKM,
  1195. GAT_IMEM_ASYNC_DMA1_IPCLKPORT_PCLKS,
  1196. GAT_IMEM_AXI2APB_IMEMP0_IPCLKPORT_ACLK,
  1197. GAT_IMEM_AXI2APB_IMEMP1_IPCLKPORT_ACLK,
  1198. GAT_IMEM_BUS_D_IMEM_IPCLKPORT_MAINCLK,
  1199. GAT_IMEM_BUS_P_IMEM_IPCLKPORT_MAINCLK,
  1200. GAT_IMEM_BUS_P_IMEM_IPCLKPORT_PERICLK,
  1201. GAT_IMEM_BUS_P_IMEM_IPCLKPORT_TCUCLK,
  1202. GAT_IMEM_DMA0_IPCLKPORT_ACLK,
  1203. GAT_IMEM_DMA1_IPCLKPORT_ACLK,
  1204. GAT_IMEM_GIC500_INPUT_SYNC_IPCLKPORT_CLK,
  1205. GAT_IMEM_GIC_IPCLKPORT_CLK,
  1206. GAT_IMEM_INTMEM_IPCLKPORT_ACLK,
  1207. GAT_IMEM_MAILBOX_SCS_CA72_IPCLKPORT_PCLK,
  1208. GAT_IMEM_MAILBOX_SMS_CA72_IPCLKPORT_PCLK,
  1209. GAT_IMEM_MCT_IPCLKPORT_PCLK,
  1210. GAT_IMEM_NS_BRDG_IMEM_IPCLKPORT_CLK__PSCO_IMEM__CLK_IMEM_D,
  1211. GAT_IMEM_NS_BRDG_IMEM_IPCLKPORT_CLK__PSCO_IMEM__CLK_IMEM_TCU,
  1212. GAT_IMEM_NS_BRDG_IMEM_IPCLKPORT_CLK__PSOC_IMEM__CLK_IMEM_P,
  1213. GAT_IMEM_OTP_CON_TOP_IPCLKPORT_PCLK,
  1214. GAT_IMEM_RSTNSYNC_ACLK_IPCLKPORT_CLK,
  1215. GAT_IMEM_RSTNSYNC_INTMEMCLK_IPCLKPORT_CLK,
  1216. GAT_IMEM_RSTNSYNC_TCUCLK_IPCLKPORT_CLK,
  1217. GAT_IMEM_SFRIF_TMU0_IMEM_IPCLKPORT_PCLK,
  1218. GAT_IMEM_SFRIF_TMU1_IMEM_IPCLKPORT_PCLK,
  1219. GAT_IMEM_SYSREG_IMEM_IPCLKPORT_PCLK,
  1220. GAT_IMEM_TBU_IMEM_IPCLKPORT_ACLK,
  1221. GAT_IMEM_TCU_IPCLKPORT_ACLK,
  1222. GAT_IMEM_WDT0_IPCLKPORT_PCLK,
  1223. GAT_IMEM_WDT1_IPCLKPORT_PCLK,
  1224. GAT_IMEM_WDT2_IPCLKPORT_PCLK,
  1225. };
  1226. PNAME(mout_imem_clk_imem_tcuclk_p) = { "fin_pll", "dout_cmu_imem_tcuclk" };
  1227. PNAME(mout_imem_clk_imem_aclk_p) = { "fin_pll", "dout_cmu_imem_aclk" };
  1228. PNAME(mout_imem_clk_imem_intmemclk_p) = { "fin_pll", "dout_cmu_imem_dmaclk" };
  1229. static const struct samsung_mux_clock imem_mux_clks[] __initconst = {
  1230. MUX(0, "mout_imem_clk_imem_tcuclk", mout_imem_clk_imem_tcuclk_p,
  1231. PLL_CON0_CLK_IMEM_TCUCLK, 4, 1),
  1232. MUX(0, "mout_imem_clk_imem_aclk", mout_imem_clk_imem_aclk_p, PLL_CON0_CLK_IMEM_ACLK, 4, 1),
  1233. MUX(0, "mout_imem_clk_imem_intmemclk", mout_imem_clk_imem_intmemclk_p,
  1234. PLL_CON0_CLK_IMEM_INTMEMCLK, 4, 1),
  1235. };
  1236. static const struct samsung_div_clock imem_div_clks[] __initconst = {
  1237. DIV(0, "dout_imem_oscclk_imem_tmutsclk", "fin_pll", DIV_OSCCLK_IMEM_TMUTSCLK, 0, 4),
  1238. };
  1239. static const struct samsung_gate_clock imem_gate_clks[] __initconst = {
  1240. GATE(0, "imem_imem_cmu_imem_ipclkport_pclk", "mout_imem_clk_imem_aclk",
  1241. GAT_IMEM_IMEM_CMU_IMEM_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1242. GATE(0, "imem_otp_con_top_ipclkport_i_oscclk", "fin_pll",
  1243. GAT_IMEM_OTP_CON_TOP_IPCLKPORT_I_OSCCLK, 21, CLK_IGNORE_UNUSED, 0),
  1244. GATE(0, "imem_tmu_top_ipclkport_i_clk", "fin_pll",
  1245. GAT_IMEM_TMU_TOP_IPCLKPORT_I_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1246. GATE(0, "imem_tmu_gt_ipclkport_i_clk", "fin_pll",
  1247. GAT_IMEM_TMU_GT_IPCLKPORT_I_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1248. GATE(0, "imem_tmu_cpu0_ipclkport_i_clk", "fin_pll",
  1249. GAT_IMEM_TMU_CPU0_IPCLKPORT_I_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1250. GATE(0, "imem_tmu_gpu_ipclkport_i_clk", "fin_pll",
  1251. GAT_IMEM_TMU_GPU_IPCLKPORT_I_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1252. GATE(0, "imem_mct_ipclkport_oscclk__alo", "fin_pll",
  1253. GAT_IMEM_MCT_IPCLKPORT_OSCCLK__ALO, 21, CLK_IGNORE_UNUSED, 0),
  1254. GATE(0, "imem_wdt0_ipclkport_clk", "fin_pll",
  1255. GAT_IMEM_WDT0_IPCLKPORT_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1256. GATE(0, "imem_wdt1_ipclkport_clk", "fin_pll",
  1257. GAT_IMEM_WDT1_IPCLKPORT_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1258. GATE(0, "imem_wdt2_ipclkport_clk", "fin_pll",
  1259. GAT_IMEM_WDT2_IPCLKPORT_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1260. GATE(IMEM_TMU_CPU0_IPCLKPORT_I_CLK_TS, "imem_tmu_cpu0_ipclkport_i_clk_ts",
  1261. "dout_imem_oscclk_imem_tmutsclk",
  1262. GAT_IMEM_TMU_CPU0_IPCLKPORT_I_CLK_TS, 21, CLK_IGNORE_UNUSED, 0),
  1263. GATE(IMEM_TMU_CPU2_IPCLKPORT_I_CLK_TS, "imem_tmu_cpu2_ipclkport_i_clk_ts",
  1264. "dout_imem_oscclk_imem_tmutsclk",
  1265. GAT_IMEM_TMU_CPU2_IPCLKPORT_I_CLK_TS, 21, CLK_IGNORE_UNUSED, 0),
  1266. GATE(IMEM_TMU_GPU_IPCLKPORT_I_CLK_TS, "imem_tmu_gpu_ipclkport_i_clk_ts",
  1267. "dout_imem_oscclk_imem_tmutsclk",
  1268. GAT_IMEM_TMU_GPU_IPCLKPORT_I_CLK_TS, 21, CLK_IGNORE_UNUSED, 0),
  1269. GATE(IMEM_TMU_GT_IPCLKPORT_I_CLK_TS, "imem_tmu_gt_ipclkport_i_clk_ts",
  1270. "dout_imem_oscclk_imem_tmutsclk",
  1271. GAT_IMEM_TMU_GT_IPCLKPORT_I_CLK_TS, 21, CLK_IGNORE_UNUSED, 0),
  1272. GATE(IMEM_TMU_TOP_IPCLKPORT_I_CLK_TS, "imem_tmu_top_ipclkport_i_clk_ts",
  1273. "dout_imem_oscclk_imem_tmutsclk",
  1274. GAT_IMEM_TMU_TOP_IPCLKPORT_I_CLK_TS, 21, CLK_IGNORE_UNUSED, 0),
  1275. GATE(0, "imem_adm_axi4st_i0_imem_ipclkport_aclkm", "mout_imem_clk_imem_aclk",
  1276. GAT_IMEM_ADM_AXI4ST_I0_IMEM_IPCLKPORT_ACLKM, 21, CLK_IGNORE_UNUSED, 0),
  1277. GATE(0, "imem_adm_axi4st_i1_imem_ipclkport_aclkm", "mout_imem_clk_imem_aclk",
  1278. GAT_IMEM_ADM_AXI4ST_I1_IMEM_IPCLKPORT_ACLKM, 21, CLK_IGNORE_UNUSED, 0),
  1279. GATE(0, "imem_adm_axi4st_i2_imem_ipclkport_aclkm", "mout_imem_clk_imem_aclk",
  1280. GAT_IMEM_ADM_AXI4ST_I2_IMEM_IPCLKPORT_ACLKM, 21, CLK_IGNORE_UNUSED, 0),
  1281. GATE(0, "imem_ads_axi4st_i0_imem_ipclkport_aclks", "mout_imem_clk_imem_aclk",
  1282. GAT_IMEM_ADS_AXI4ST_I0_IMEM_IPCLKPORT_ACLKS, 21, CLK_IGNORE_UNUSED, 0),
  1283. GATE(0, "imem_ads_axi4st_i1_imem_ipclkport_aclks", "mout_imem_clk_imem_aclk",
  1284. GAT_IMEM_ADS_AXI4ST_I1_IMEM_IPCLKPORT_ACLKS, 21, CLK_IGNORE_UNUSED, 0),
  1285. GATE(0, "imem_ads_axi4st_i2_imem_ipclkport_aclks", "mout_imem_clk_imem_aclk",
  1286. GAT_IMEM_ADS_AXI4ST_I2_IMEM_IPCLKPORT_ACLKS, 21, CLK_IGNORE_UNUSED, 0),
  1287. GATE(0, "imem_async_dma0_ipclkport_pclkm", "mout_imem_clk_imem_tcuclk",
  1288. GAT_IMEM_ASYNC_DMA0_IPCLKPORT_PCLKM, 21, CLK_IGNORE_UNUSED, 0),
  1289. GATE(0, "imem_async_dma0_ipclkport_pclks", "mout_imem_clk_imem_aclk",
  1290. GAT_IMEM_ASYNC_DMA0_IPCLKPORT_PCLKS, 21, CLK_IGNORE_UNUSED, 0),
  1291. GATE(0, "imem_async_dma1_ipclkport_pclkm", "mout_imem_clk_imem_tcuclk",
  1292. GAT_IMEM_ASYNC_DMA1_IPCLKPORT_PCLKM, 21, CLK_IGNORE_UNUSED, 0),
  1293. GATE(0, "imem_async_dma1_ipclkport_pclks", "mout_imem_clk_imem_aclk",
  1294. GAT_IMEM_ASYNC_DMA1_IPCLKPORT_PCLKS, 21, CLK_IGNORE_UNUSED, 0),
  1295. GATE(0, "imem_axi2apb_imemp0_ipclkport_aclk", "mout_imem_clk_imem_aclk",
  1296. GAT_IMEM_AXI2APB_IMEMP0_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1297. GATE(0, "imem_axi2apb_imemp1_ipclkport_aclk", "mout_imem_clk_imem_aclk",
  1298. GAT_IMEM_AXI2APB_IMEMP1_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1299. GATE(0, "imem_bus_d_imem_ipclkport_mainclk", "mout_imem_clk_imem_tcuclk",
  1300. GAT_IMEM_BUS_D_IMEM_IPCLKPORT_MAINCLK, 21, CLK_IGNORE_UNUSED, 0),
  1301. GATE(0, "imem_bus_p_imem_ipclkport_mainclk", "mout_imem_clk_imem_aclk",
  1302. GAT_IMEM_BUS_P_IMEM_IPCLKPORT_MAINCLK, 21, CLK_IGNORE_UNUSED, 0),
  1303. GATE(0, "imem_bus_p_imem_ipclkport_pericclk", "mout_imem_clk_imem_aclk",
  1304. GAT_IMEM_BUS_P_IMEM_IPCLKPORT_PERICLK, 21, CLK_IGNORE_UNUSED, 0),
  1305. GATE(0, "imem_bus_p_imem_ipclkport_tcuclk", "mout_imem_clk_imem_tcuclk",
  1306. GAT_IMEM_BUS_P_IMEM_IPCLKPORT_TCUCLK, 21, CLK_IGNORE_UNUSED, 0),
  1307. GATE(IMEM_DMA0_IPCLKPORT_ACLK, "imem_dma0_ipclkport_aclk", "mout_imem_clk_imem_tcuclk",
  1308. GAT_IMEM_DMA0_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED | CLK_IS_CRITICAL, 0),
  1309. GATE(IMEM_DMA1_IPCLKPORT_ACLK, "imem_dma1_ipclkport_aclk", "mout_imem_clk_imem_tcuclk",
  1310. GAT_IMEM_DMA1_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED | CLK_IS_CRITICAL, 0),
  1311. GATE(0, "imem_gic500_input_sync_ipclkport_clk", "mout_imem_clk_imem_aclk",
  1312. GAT_IMEM_GIC500_INPUT_SYNC_IPCLKPORT_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1313. GATE(0, "imem_gic_ipclkport_clk", "mout_imem_clk_imem_aclk",
  1314. GAT_IMEM_GIC_IPCLKPORT_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1315. GATE(0, "imem_intmem_ipclkport_aclk", "mout_imem_clk_imem_intmemclk",
  1316. GAT_IMEM_INTMEM_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1317. GATE(0, "imem_mailbox_scs_ca72_ipclkport_pclk", "mout_imem_clk_imem_aclk",
  1318. GAT_IMEM_MAILBOX_SCS_CA72_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1319. GATE(0, "imem_mailbox_sms_ca72_ipclkport_pclk", "mout_imem_clk_imem_aclk",
  1320. GAT_IMEM_MAILBOX_SMS_CA72_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1321. GATE(IMEM_MCT_PCLK, "imem_mct_ipclkport_pclk", "mout_imem_clk_imem_aclk",
  1322. GAT_IMEM_MCT_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1323. GATE(0, "imem_ns_brdg_imem_ipclkport_clk__psco_imem__clk_imem_d",
  1324. "mout_imem_clk_imem_tcuclk",
  1325. GAT_IMEM_NS_BRDG_IMEM_IPCLKPORT_CLK__PSCO_IMEM__CLK_IMEM_D, 21, CLK_IGNORE_UNUSED, 0),
  1326. GATE(0, "imem_ns_brdg_imem_ipclkport_clk__psco_imem__clk_imem_tcu",
  1327. "mout_imem_clk_imem_tcuclk",
  1328. GAT_IMEM_NS_BRDG_IMEM_IPCLKPORT_CLK__PSCO_IMEM__CLK_IMEM_TCU, 21,
  1329. CLK_IGNORE_UNUSED, 0),
  1330. GATE(0, "imem_ns_brdg_imem_ipclkport_clk__psoc_imem__clk_imem_p", "mout_imem_clk_imem_aclk",
  1331. GAT_IMEM_NS_BRDG_IMEM_IPCLKPORT_CLK__PSOC_IMEM__CLK_IMEM_P, 21, CLK_IGNORE_UNUSED, 0),
  1332. GATE(0, "imem_otp_con_top_ipclkport_pclk", "mout_imem_clk_imem_aclk",
  1333. GAT_IMEM_OTP_CON_TOP_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1334. GATE(0, "imem_rstnsync_aclk_ipclkport_clk", "mout_imem_clk_imem_aclk",
  1335. GAT_IMEM_RSTNSYNC_ACLK_IPCLKPORT_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1336. GATE(0, "imem_rstnsync_oscclk_ipclkport_clk", "fin_pll",
  1337. GAT_IMEM_RSTNSYNC_OSCCLK_IPCLKPORT_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1338. GATE(0, "imem_rstnsync_intmemclk_ipclkport_clk", "mout_imem_clk_imem_intmemclk",
  1339. GAT_IMEM_RSTNSYNC_INTMEMCLK_IPCLKPORT_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1340. GATE(0, "imem_rstnsync_tcuclk_ipclkport_clk", "mout_imem_clk_imem_tcuclk",
  1341. GAT_IMEM_RSTNSYNC_TCUCLK_IPCLKPORT_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1342. GATE(0, "imem_sfrif_tmu0_imem_ipclkport_pclk", "mout_imem_clk_imem_aclk",
  1343. GAT_IMEM_SFRIF_TMU0_IMEM_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1344. GATE(0, "imem_sfrif_tmu1_imem_ipclkport_pclk", "mout_imem_clk_imem_aclk",
  1345. GAT_IMEM_SFRIF_TMU1_IMEM_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1346. GATE(0, "imem_tmu_cpu2_ipclkport_i_clk", "fin_pll",
  1347. GAT_IMEM_TMU_CPU2_IPCLKPORT_I_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1348. GATE(0, "imem_sysreg_imem_ipclkport_pclk", "mout_imem_clk_imem_aclk",
  1349. GAT_IMEM_SYSREG_IMEM_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1350. GATE(0, "imem_tbu_imem_ipclkport_aclk", "mout_imem_clk_imem_tcuclk",
  1351. GAT_IMEM_TBU_IMEM_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1352. GATE(0, "imem_tcu_ipclkport_aclk", "mout_imem_clk_imem_tcuclk",
  1353. GAT_IMEM_TCU_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1354. GATE(IMEM_WDT0_IPCLKPORT_PCLK, "imem_wdt0_ipclkport_pclk", "mout_imem_clk_imem_aclk",
  1355. GAT_IMEM_WDT0_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1356. GATE(IMEM_WDT1_IPCLKPORT_PCLK, "imem_wdt1_ipclkport_pclk", "mout_imem_clk_imem_aclk",
  1357. GAT_IMEM_WDT1_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1358. GATE(IMEM_WDT2_IPCLKPORT_PCLK, "imem_wdt2_ipclkport_pclk", "mout_imem_clk_imem_aclk",
  1359. GAT_IMEM_WDT2_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1360. };
  1361. static const struct samsung_cmu_info imem_cmu_info __initconst = {
  1362. .mux_clks = imem_mux_clks,
  1363. .nr_mux_clks = ARRAY_SIZE(imem_mux_clks),
  1364. .div_clks = imem_div_clks,
  1365. .nr_div_clks = ARRAY_SIZE(imem_div_clks),
  1366. .gate_clks = imem_gate_clks,
  1367. .nr_gate_clks = ARRAY_SIZE(imem_gate_clks),
  1368. .nr_clk_ids = IMEM_NR_CLK,
  1369. .clk_regs = imem_clk_regs,
  1370. .nr_clk_regs = ARRAY_SIZE(imem_clk_regs),
  1371. };
  1372. static void __init fsd_clk_imem_init(struct device_node *np)
  1373. {
  1374. samsung_cmu_register_one(np, &imem_cmu_info);
  1375. }
  1376. CLK_OF_DECLARE(fsd_clk_imem, "tesla,fsd-clock-imem", fsd_clk_imem_init);
  1377. /* Register Offset definitions for CMU_MFC (0x12810000) */
  1378. #define PLL_LOCKTIME_PLL_MFC 0x0
  1379. #define PLL_CON0_PLL_MFC 0x100
  1380. #define MUX_MFC_BUSD 0x1000
  1381. #define MUX_MFC_BUSP 0x1008
  1382. #define DIV_MFC_BUSD_DIV4 0x1800
  1383. #define GAT_MFC_CMU_MFC_IPCLKPORT_PCLK 0x2000
  1384. #define GAT_MFC_AS_P_MFC_IPCLKPORT_PCLKM 0x2004
  1385. #define GAT_MFC_AS_P_MFC_IPCLKPORT_PCLKS 0x2008
  1386. #define GAT_MFC_AXI2APB_MFC_IPCLKPORT_ACLK 0x200c
  1387. #define GAT_MFC_MFC_IPCLKPORT_ACLK 0x2010
  1388. #define GAT_MFC_NS_BRDG_MFC_IPCLKPORT_CLK__PMFC__CLK_MFC_D 0x2018
  1389. #define GAT_MFC_NS_BRDG_MFC_IPCLKPORT_CLK__PMFC__CLK_MFC_P 0x201c
  1390. #define GAT_MFC_PPMU_MFCD0_IPCLKPORT_ACLK 0x2028
  1391. #define GAT_MFC_PPMU_MFCD0_IPCLKPORT_PCLK 0x202c
  1392. #define GAT_MFC_PPMU_MFCD1_IPCLKPORT_ACLK 0x2030
  1393. #define GAT_MFC_PPMU_MFCD1_IPCLKPORT_PCLK 0x2034
  1394. #define GAT_MFC_SYSREG_MFC_IPCLKPORT_PCLK 0x2038
  1395. #define GAT_MFC_TBU_MFCD0_IPCLKPORT_CLK 0x203c
  1396. #define GAT_MFC_TBU_MFCD1_IPCLKPORT_CLK 0x2040
  1397. #define GAT_MFC_BUSD_DIV4_GATE 0x2044
  1398. #define GAT_MFC_BUSD_GATE 0x2048
  1399. static const unsigned long mfc_clk_regs[] __initconst = {
  1400. PLL_LOCKTIME_PLL_MFC,
  1401. PLL_CON0_PLL_MFC,
  1402. MUX_MFC_BUSD,
  1403. MUX_MFC_BUSP,
  1404. DIV_MFC_BUSD_DIV4,
  1405. GAT_MFC_CMU_MFC_IPCLKPORT_PCLK,
  1406. GAT_MFC_AS_P_MFC_IPCLKPORT_PCLKM,
  1407. GAT_MFC_AS_P_MFC_IPCLKPORT_PCLKS,
  1408. GAT_MFC_AXI2APB_MFC_IPCLKPORT_ACLK,
  1409. GAT_MFC_MFC_IPCLKPORT_ACLK,
  1410. GAT_MFC_NS_BRDG_MFC_IPCLKPORT_CLK__PMFC__CLK_MFC_D,
  1411. GAT_MFC_NS_BRDG_MFC_IPCLKPORT_CLK__PMFC__CLK_MFC_P,
  1412. GAT_MFC_PPMU_MFCD0_IPCLKPORT_ACLK,
  1413. GAT_MFC_PPMU_MFCD0_IPCLKPORT_PCLK,
  1414. GAT_MFC_PPMU_MFCD1_IPCLKPORT_ACLK,
  1415. GAT_MFC_PPMU_MFCD1_IPCLKPORT_PCLK,
  1416. GAT_MFC_SYSREG_MFC_IPCLKPORT_PCLK,
  1417. GAT_MFC_TBU_MFCD0_IPCLKPORT_CLK,
  1418. GAT_MFC_TBU_MFCD1_IPCLKPORT_CLK,
  1419. GAT_MFC_BUSD_DIV4_GATE,
  1420. GAT_MFC_BUSD_GATE,
  1421. };
  1422. static const struct samsung_pll_rate_table pll_mfc_rate_table[] __initconst = {
  1423. PLL_35XX_RATE(24 * MHZ, 666000000U, 111, 4, 0),
  1424. };
  1425. static const struct samsung_pll_clock mfc_pll_clks[] __initconst = {
  1426. PLL(pll_142xx, 0, "fout_pll_mfc", "fin_pll",
  1427. PLL_LOCKTIME_PLL_MFC, PLL_CON0_PLL_MFC, pll_mfc_rate_table),
  1428. };
  1429. PNAME(mout_mfc_pll_p) = { "fin_pll", "fout_pll_mfc" };
  1430. PNAME(mout_mfc_busp_p) = { "fin_pll", "dout_mfc_busd_div4" };
  1431. PNAME(mout_mfc_busd_p) = { "fin_pll", "mfc_busd_gate" };
  1432. static const struct samsung_mux_clock mfc_mux_clks[] __initconst = {
  1433. MUX(0, "mout_mfc_pll", mout_mfc_pll_p, PLL_CON0_PLL_MFC, 4, 1),
  1434. MUX(0, "mout_mfc_busp", mout_mfc_busp_p, MUX_MFC_BUSP, 0, 1),
  1435. MUX(0, "mout_mfc_busd", mout_mfc_busd_p, MUX_MFC_BUSD, 0, 1),
  1436. };
  1437. static const struct samsung_div_clock mfc_div_clks[] __initconst = {
  1438. DIV(0, "dout_mfc_busd_div4", "mfc_busd_div4_gate", DIV_MFC_BUSD_DIV4, 0, 4),
  1439. };
  1440. static const struct samsung_gate_clock mfc_gate_clks[] __initconst = {
  1441. GATE(0, "mfc_cmu_mfc_ipclkport_pclk", "mout_mfc_busp",
  1442. GAT_MFC_CMU_MFC_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1443. GATE(0, "mfc_as_p_mfc_ipclkport_pclkm", "mout_mfc_busd",
  1444. GAT_MFC_AS_P_MFC_IPCLKPORT_PCLKM, 21, CLK_IGNORE_UNUSED, 0),
  1445. GATE(0, "mfc_as_p_mfc_ipclkport_pclks", "mout_mfc_busp",
  1446. GAT_MFC_AS_P_MFC_IPCLKPORT_PCLKS, 21, CLK_IGNORE_UNUSED, 0),
  1447. GATE(0, "mfc_axi2apb_mfc_ipclkport_aclk", "mout_mfc_busp",
  1448. GAT_MFC_AXI2APB_MFC_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1449. GATE(MFC_MFC_IPCLKPORT_ACLK, "mfc_mfc_ipclkport_aclk", "mout_mfc_busd",
  1450. GAT_MFC_MFC_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1451. GATE(0, "mfc_ns_brdg_mfc_ipclkport_clk__pmfc__clk_mfc_d", "mout_mfc_busd",
  1452. GAT_MFC_NS_BRDG_MFC_IPCLKPORT_CLK__PMFC__CLK_MFC_D, 21, CLK_IGNORE_UNUSED, 0),
  1453. GATE(0, "mfc_ns_brdg_mfc_ipclkport_clk__pmfc__clk_mfc_p", "mout_mfc_busp",
  1454. GAT_MFC_NS_BRDG_MFC_IPCLKPORT_CLK__PMFC__CLK_MFC_P, 21, CLK_IGNORE_UNUSED, 0),
  1455. GATE(0, "mfc_ppmu_mfcd0_ipclkport_aclk", "mout_mfc_busd",
  1456. GAT_MFC_PPMU_MFCD0_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1457. GATE(0, "mfc_ppmu_mfcd0_ipclkport_pclk", "mout_mfc_busp",
  1458. GAT_MFC_PPMU_MFCD0_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1459. GATE(0, "mfc_ppmu_mfcd1_ipclkport_aclk", "mout_mfc_busd",
  1460. GAT_MFC_PPMU_MFCD1_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1461. GATE(0, "mfc_ppmu_mfcd1_ipclkport_pclk", "mout_mfc_busp",
  1462. GAT_MFC_PPMU_MFCD1_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1463. GATE(0, "mfc_sysreg_mfc_ipclkport_pclk", "mout_mfc_busp",
  1464. GAT_MFC_SYSREG_MFC_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1465. GATE(0, "mfc_tbu_mfcd0_ipclkport_clk", "mout_mfc_busd",
  1466. GAT_MFC_TBU_MFCD0_IPCLKPORT_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1467. GATE(0, "mfc_tbu_mfcd1_ipclkport_clk", "mout_mfc_busd",
  1468. GAT_MFC_TBU_MFCD1_IPCLKPORT_CLK, 21, CLK_IGNORE_UNUSED, 0),
  1469. GATE(0, "mfc_busd_div4_gate", "mout_mfc_pll",
  1470. GAT_MFC_BUSD_DIV4_GATE, 21, CLK_IGNORE_UNUSED, 0),
  1471. GATE(0, "mfc_busd_gate", "mout_mfc_pll", GAT_MFC_BUSD_GATE, 21, CLK_IS_CRITICAL, 0),
  1472. };
  1473. static const struct samsung_cmu_info mfc_cmu_info __initconst = {
  1474. .pll_clks = mfc_pll_clks,
  1475. .nr_pll_clks = ARRAY_SIZE(mfc_pll_clks),
  1476. .mux_clks = mfc_mux_clks,
  1477. .nr_mux_clks = ARRAY_SIZE(mfc_mux_clks),
  1478. .div_clks = mfc_div_clks,
  1479. .nr_div_clks = ARRAY_SIZE(mfc_div_clks),
  1480. .gate_clks = mfc_gate_clks,
  1481. .nr_gate_clks = ARRAY_SIZE(mfc_gate_clks),
  1482. .nr_clk_ids = MFC_NR_CLK,
  1483. .clk_regs = mfc_clk_regs,
  1484. .nr_clk_regs = ARRAY_SIZE(mfc_clk_regs),
  1485. };
  1486. /* Register Offset definitions for CMU_CAM_CSI (0x12610000) */
  1487. #define PLL_LOCKTIME_PLL_CAM_CSI 0x0
  1488. #define PLL_CON0_PLL_CAM_CSI 0x100
  1489. #define DIV_CAM_CSI0_ACLK 0x1800
  1490. #define DIV_CAM_CSI1_ACLK 0x1804
  1491. #define DIV_CAM_CSI2_ACLK 0x1808
  1492. #define DIV_CAM_CSI_BUSD 0x180c
  1493. #define DIV_CAM_CSI_BUSP 0x1810
  1494. #define GAT_CAM_CSI_CMU_CAM_CSI_IPCLKPORT_PCLK 0x2000
  1495. #define GAT_CAM_AXI2APB_CAM_CSI_IPCLKPORT_ACLK 0x2004
  1496. #define GAT_CAM_CSI_BUS_D_CAM_CSI_IPCLKPORT_CLK__SYSTEM__CLK_CSI0 0x2008
  1497. #define GAT_CAM_CSI_BUS_D_CAM_CSI_IPCLKPORT_CLK__SYSTEM__CLK_CSI1 0x200c
  1498. #define GAT_CAM_CSI_BUS_D_CAM_CSI_IPCLKPORT_CLK__SYSTEM__CLK_CSI2 0x2010
  1499. #define GAT_CAM_CSI_BUS_D_CAM_CSI_IPCLKPORT_CLK__SYSTEM__CLK_SOC_NOC 0x2014
  1500. #define GAT_CAM_CSI_BUS_D_CAM_CSI_IPCLKPORT_CLK__SYSTEM__NOC 0x2018
  1501. #define GAT_CAM_CSI0_0_IPCLKPORT_I_ACLK 0x201c
  1502. #define GAT_CAM_CSI0_0_IPCLKPORT_I_PCLK 0x2020
  1503. #define GAT_CAM_CSI0_1_IPCLKPORT_I_ACLK 0x2024
  1504. #define GAT_CAM_CSI0_1_IPCLKPORT_I_PCLK 0x2028
  1505. #define GAT_CAM_CSI0_2_IPCLKPORT_I_ACLK 0x202c
  1506. #define GAT_CAM_CSI0_2_IPCLKPORT_I_PCLK 0x2030
  1507. #define GAT_CAM_CSI0_3_IPCLKPORT_I_ACLK 0x2034
  1508. #define GAT_CAM_CSI0_3_IPCLKPORT_I_PCLK 0x2038
  1509. #define GAT_CAM_CSI1_0_IPCLKPORT_I_ACLK 0x203c
  1510. #define GAT_CAM_CSI1_0_IPCLKPORT_I_PCLK 0x2040
  1511. #define GAT_CAM_CSI1_1_IPCLKPORT_I_ACLK 0x2044
  1512. #define GAT_CAM_CSI1_1_IPCLKPORT_I_PCLK 0x2048
  1513. #define GAT_CAM_CSI1_2_IPCLKPORT_I_ACLK 0x204c
  1514. #define GAT_CAM_CSI1_2_IPCLKPORT_I_PCLK 0x2050
  1515. #define GAT_CAM_CSI1_3_IPCLKPORT_I_ACLK 0x2054
  1516. #define GAT_CAM_CSI1_3_IPCLKPORT_I_PCLK 0x2058
  1517. #define GAT_CAM_CSI2_0_IPCLKPORT_I_ACLK 0x205c
  1518. #define GAT_CAM_CSI2_0_IPCLKPORT_I_PCLK 0x2060
  1519. #define GAT_CAM_CSI2_1_IPCLKPORT_I_ACLK 0x2064
  1520. #define GAT_CAM_CSI2_1_IPCLKPORT_I_PCLK 0x2068
  1521. #define GAT_CAM_CSI2_2_IPCLKPORT_I_ACLK 0x206c
  1522. #define GAT_CAM_CSI2_2_IPCLKPORT_I_PCLK 0x2070
  1523. #define GAT_CAM_CSI2_3_IPCLKPORT_I_ACLK 0x2074
  1524. #define GAT_CAM_CSI2_3_IPCLKPORT_I_PCLK 0x2078
  1525. #define GAT_CAM_NS_BRDG_CAM_CSI_IPCLKPORT_CLK__PSOC_CAM_CSI__CLK_CAM_CSI_D 0x207c
  1526. #define GAT_CAM_NS_BRDG_CAM_CSI_IPCLKPORT_CLK__PSOC_CAM_CSI__CLK_CAM_CSI_P 0x2080
  1527. #define GAT_CAM_SYSREG_CAM_CSI_IPCLKPORT_PCLK 0x2084
  1528. #define GAT_CAM_TBU_CAM_CSI_IPCLKPORT_ACLK 0x2088
  1529. static const unsigned long cam_csi_clk_regs[] __initconst = {
  1530. PLL_LOCKTIME_PLL_CAM_CSI,
  1531. PLL_CON0_PLL_CAM_CSI,
  1532. DIV_CAM_CSI0_ACLK,
  1533. DIV_CAM_CSI1_ACLK,
  1534. DIV_CAM_CSI2_ACLK,
  1535. DIV_CAM_CSI_BUSD,
  1536. DIV_CAM_CSI_BUSP,
  1537. GAT_CAM_CSI_CMU_CAM_CSI_IPCLKPORT_PCLK,
  1538. GAT_CAM_AXI2APB_CAM_CSI_IPCLKPORT_ACLK,
  1539. GAT_CAM_CSI_BUS_D_CAM_CSI_IPCLKPORT_CLK__SYSTEM__CLK_CSI0,
  1540. GAT_CAM_CSI_BUS_D_CAM_CSI_IPCLKPORT_CLK__SYSTEM__CLK_CSI1,
  1541. GAT_CAM_CSI_BUS_D_CAM_CSI_IPCLKPORT_CLK__SYSTEM__CLK_CSI2,
  1542. GAT_CAM_CSI_BUS_D_CAM_CSI_IPCLKPORT_CLK__SYSTEM__CLK_SOC_NOC,
  1543. GAT_CAM_CSI_BUS_D_CAM_CSI_IPCLKPORT_CLK__SYSTEM__NOC,
  1544. GAT_CAM_CSI0_0_IPCLKPORT_I_ACLK,
  1545. GAT_CAM_CSI0_0_IPCLKPORT_I_PCLK,
  1546. GAT_CAM_CSI0_1_IPCLKPORT_I_ACLK,
  1547. GAT_CAM_CSI0_1_IPCLKPORT_I_PCLK,
  1548. GAT_CAM_CSI0_2_IPCLKPORT_I_ACLK,
  1549. GAT_CAM_CSI0_2_IPCLKPORT_I_PCLK,
  1550. GAT_CAM_CSI0_3_IPCLKPORT_I_ACLK,
  1551. GAT_CAM_CSI0_3_IPCLKPORT_I_PCLK,
  1552. GAT_CAM_CSI1_0_IPCLKPORT_I_ACLK,
  1553. GAT_CAM_CSI1_0_IPCLKPORT_I_PCLK,
  1554. GAT_CAM_CSI1_1_IPCLKPORT_I_ACLK,
  1555. GAT_CAM_CSI1_1_IPCLKPORT_I_PCLK,
  1556. GAT_CAM_CSI1_2_IPCLKPORT_I_ACLK,
  1557. GAT_CAM_CSI1_2_IPCLKPORT_I_PCLK,
  1558. GAT_CAM_CSI1_3_IPCLKPORT_I_ACLK,
  1559. GAT_CAM_CSI1_3_IPCLKPORT_I_PCLK,
  1560. GAT_CAM_CSI2_0_IPCLKPORT_I_ACLK,
  1561. GAT_CAM_CSI2_0_IPCLKPORT_I_PCLK,
  1562. GAT_CAM_CSI2_1_IPCLKPORT_I_ACLK,
  1563. GAT_CAM_CSI2_1_IPCLKPORT_I_PCLK,
  1564. GAT_CAM_CSI2_2_IPCLKPORT_I_ACLK,
  1565. GAT_CAM_CSI2_2_IPCLKPORT_I_PCLK,
  1566. GAT_CAM_CSI2_3_IPCLKPORT_I_ACLK,
  1567. GAT_CAM_CSI2_3_IPCLKPORT_I_PCLK,
  1568. GAT_CAM_NS_BRDG_CAM_CSI_IPCLKPORT_CLK__PSOC_CAM_CSI__CLK_CAM_CSI_D,
  1569. GAT_CAM_NS_BRDG_CAM_CSI_IPCLKPORT_CLK__PSOC_CAM_CSI__CLK_CAM_CSI_P,
  1570. GAT_CAM_SYSREG_CAM_CSI_IPCLKPORT_PCLK,
  1571. GAT_CAM_TBU_CAM_CSI_IPCLKPORT_ACLK,
  1572. };
  1573. static const struct samsung_pll_rate_table pll_cam_csi_rate_table[] __initconst = {
  1574. PLL_35XX_RATE(24 * MHZ, 1066000000U, 533, 12, 0),
  1575. };
  1576. static const struct samsung_pll_clock cam_csi_pll_clks[] __initconst = {
  1577. PLL(pll_142xx, 0, "fout_pll_cam_csi", "fin_pll",
  1578. PLL_LOCKTIME_PLL_CAM_CSI, PLL_CON0_PLL_CAM_CSI, pll_cam_csi_rate_table),
  1579. };
  1580. PNAME(mout_cam_csi_pll_p) = { "fin_pll", "fout_pll_cam_csi" };
  1581. static const struct samsung_mux_clock cam_csi_mux_clks[] __initconst = {
  1582. MUX(0, "mout_cam_csi_pll", mout_cam_csi_pll_p, PLL_CON0_PLL_CAM_CSI, 4, 1),
  1583. };
  1584. static const struct samsung_div_clock cam_csi_div_clks[] __initconst = {
  1585. DIV(0, "dout_cam_csi0_aclk", "mout_cam_csi_pll", DIV_CAM_CSI0_ACLK, 0, 4),
  1586. DIV(0, "dout_cam_csi1_aclk", "mout_cam_csi_pll", DIV_CAM_CSI1_ACLK, 0, 4),
  1587. DIV(0, "dout_cam_csi2_aclk", "mout_cam_csi_pll", DIV_CAM_CSI2_ACLK, 0, 4),
  1588. DIV(0, "dout_cam_csi_busd", "mout_cam_csi_pll", DIV_CAM_CSI_BUSD, 0, 4),
  1589. DIV(0, "dout_cam_csi_busp", "mout_cam_csi_pll", DIV_CAM_CSI_BUSP, 0, 4),
  1590. };
  1591. static const struct samsung_gate_clock cam_csi_gate_clks[] __initconst = {
  1592. GATE(0, "cam_csi_cmu_cam_csi_ipclkport_pclk", "dout_cam_csi_busp",
  1593. GAT_CAM_CSI_CMU_CAM_CSI_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1594. GATE(0, "cam_axi2apb_cam_csi_ipclkport_aclk", "dout_cam_csi_busp",
  1595. GAT_CAM_AXI2APB_CAM_CSI_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1596. GATE(0, "cam_csi_bus_d_cam_csi_ipclkport_clk__system__clk_csi0", "dout_cam_csi0_aclk",
  1597. GAT_CAM_CSI_BUS_D_CAM_CSI_IPCLKPORT_CLK__SYSTEM__CLK_CSI0, 21, CLK_IGNORE_UNUSED, 0),
  1598. GATE(0, "cam_csi_bus_d_cam_csi_ipclkport_clk__system__clk_csi1", "dout_cam_csi1_aclk",
  1599. GAT_CAM_CSI_BUS_D_CAM_CSI_IPCLKPORT_CLK__SYSTEM__CLK_CSI1, 21, CLK_IGNORE_UNUSED, 0),
  1600. GATE(0, "cam_csi_bus_d_cam_csi_ipclkport_clk__system__clk_csi2", "dout_cam_csi2_aclk",
  1601. GAT_CAM_CSI_BUS_D_CAM_CSI_IPCLKPORT_CLK__SYSTEM__CLK_CSI2, 21, CLK_IGNORE_UNUSED, 0),
  1602. GATE(0, "cam_csi_bus_d_cam_csi_ipclkport_clk__system__clk_soc_noc", "dout_cam_csi_busd",
  1603. GAT_CAM_CSI_BUS_D_CAM_CSI_IPCLKPORT_CLK__SYSTEM__CLK_SOC_NOC, 21,
  1604. CLK_IGNORE_UNUSED, 0),
  1605. GATE(0, "cam_csi_bus_d_cam_csi_ipclkport_clk__system__noc", "dout_cam_csi_busd",
  1606. GAT_CAM_CSI_BUS_D_CAM_CSI_IPCLKPORT_CLK__SYSTEM__NOC, 21, CLK_IGNORE_UNUSED, 0),
  1607. GATE(CAM_CSI0_0_IPCLKPORT_I_ACLK, "cam_csi0_0_ipclkport_i_aclk", "dout_cam_csi0_aclk",
  1608. GAT_CAM_CSI0_0_IPCLKPORT_I_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1609. GATE(0, "cam_csi0_0_ipclkport_i_pclk", "dout_cam_csi_busp",
  1610. GAT_CAM_CSI0_0_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1611. GATE(CAM_CSI0_1_IPCLKPORT_I_ACLK, "cam_csi0_1_ipclkport_i_aclk", "dout_cam_csi0_aclk",
  1612. GAT_CAM_CSI0_1_IPCLKPORT_I_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1613. GATE(0, "cam_csi0_1_ipclkport_i_pclk", "dout_cam_csi_busp",
  1614. GAT_CAM_CSI0_1_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1615. GATE(CAM_CSI0_2_IPCLKPORT_I_ACLK, "cam_csi0_2_ipclkport_i_aclk", "dout_cam_csi0_aclk",
  1616. GAT_CAM_CSI0_2_IPCLKPORT_I_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1617. GATE(0, "cam_csi0_2_ipclkport_i_pclk", "dout_cam_csi_busp",
  1618. GAT_CAM_CSI0_2_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1619. GATE(CAM_CSI0_3_IPCLKPORT_I_ACLK, "cam_csi0_3_ipclkport_i_aclk", "dout_cam_csi0_aclk",
  1620. GAT_CAM_CSI0_3_IPCLKPORT_I_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1621. GATE(0, "cam_csi0_3_ipclkport_i_pclk", "dout_cam_csi_busp",
  1622. GAT_CAM_CSI0_3_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1623. GATE(CAM_CSI1_0_IPCLKPORT_I_ACLK, "cam_csi1_0_ipclkport_i_aclk", "dout_cam_csi1_aclk",
  1624. GAT_CAM_CSI1_0_IPCLKPORT_I_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1625. GATE(0, "cam_csi1_0_ipclkport_i_pclk", "dout_cam_csi_busp",
  1626. GAT_CAM_CSI1_0_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1627. GATE(CAM_CSI1_1_IPCLKPORT_I_ACLK, "cam_csi1_1_ipclkport_i_aclk", "dout_cam_csi1_aclk",
  1628. GAT_CAM_CSI1_1_IPCLKPORT_I_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1629. GATE(0, "cam_csi1_1_ipclkport_i_pclk", "dout_cam_csi_busp",
  1630. GAT_CAM_CSI1_1_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1631. GATE(CAM_CSI1_2_IPCLKPORT_I_ACLK, "cam_csi1_2_ipclkport_i_aclk", "dout_cam_csi1_aclk",
  1632. GAT_CAM_CSI1_2_IPCLKPORT_I_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1633. GATE(0, "cam_csi1_2_ipclkport_i_pclk", "dout_cam_csi_busp",
  1634. GAT_CAM_CSI1_2_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1635. GATE(CAM_CSI1_3_IPCLKPORT_I_ACLK, "cam_csi1_3_ipclkport_i_aclk", "dout_cam_csi1_aclk",
  1636. GAT_CAM_CSI1_3_IPCLKPORT_I_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1637. GATE(0, "cam_csi1_3_ipclkport_i_pclk", "dout_cam_csi_busp",
  1638. GAT_CAM_CSI1_3_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1639. GATE(CAM_CSI2_0_IPCLKPORT_I_ACLK, "cam_csi2_0_ipclkport_i_aclk", "dout_cam_csi2_aclk",
  1640. GAT_CAM_CSI2_0_IPCLKPORT_I_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1641. GATE(0, "cam_csi2_0_ipclkport_i_pclk", "dout_cam_csi_busp",
  1642. GAT_CAM_CSI2_0_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1643. GATE(CAM_CSI2_1_IPCLKPORT_I_ACLK, "cam_csi2_1_ipclkport_i_aclk", "dout_cam_csi2_aclk",
  1644. GAT_CAM_CSI2_1_IPCLKPORT_I_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1645. GATE(0, "cam_csi2_1_ipclkport_i_pclk", "dout_cam_csi_busp",
  1646. GAT_CAM_CSI2_1_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1647. GATE(CAM_CSI2_2_IPCLKPORT_I_ACLK, "cam_csi2_2_ipclkport_i_aclk", "dout_cam_csi2_aclk",
  1648. GAT_CAM_CSI2_2_IPCLKPORT_I_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1649. GATE(0, "cam_csi2_2_ipclkport_i_pclk", "dout_cam_csi_busp",
  1650. GAT_CAM_CSI2_2_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1651. GATE(CAM_CSI2_3_IPCLKPORT_I_ACLK, "cam_csi2_3_ipclkport_i_aclk", "dout_cam_csi2_aclk",
  1652. GAT_CAM_CSI2_3_IPCLKPORT_I_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1653. GATE(0, "cam_csi2_3_ipclkport_i_pclk", "dout_cam_csi_busp",
  1654. GAT_CAM_CSI2_3_IPCLKPORT_I_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1655. GATE(0, "cam_ns_brdg_cam_csi_ipclkport_clk__psoc_cam_csi__clk_cam_csi_d",
  1656. "dout_cam_csi_busd",
  1657. GAT_CAM_NS_BRDG_CAM_CSI_IPCLKPORT_CLK__PSOC_CAM_CSI__CLK_CAM_CSI_D, 21,
  1658. CLK_IGNORE_UNUSED, 0),
  1659. GATE(0, "cam_ns_brdg_cam_csi_ipclkport_clk__psoc_cam_csi__clk_cam_csi_p",
  1660. "dout_cam_csi_busp",
  1661. GAT_CAM_NS_BRDG_CAM_CSI_IPCLKPORT_CLK__PSOC_CAM_CSI__CLK_CAM_CSI_P, 21,
  1662. CLK_IGNORE_UNUSED, 0),
  1663. GATE(0, "cam_sysreg_cam_csi_ipclkport_pclk", "dout_cam_csi_busp",
  1664. GAT_CAM_SYSREG_CAM_CSI_IPCLKPORT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
  1665. GATE(0, "cam_tbu_cam_csi_ipclkport_aclk", "dout_cam_csi_busd",
  1666. GAT_CAM_TBU_CAM_CSI_IPCLKPORT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
  1667. };
  1668. static const struct samsung_cmu_info cam_csi_cmu_info __initconst = {
  1669. .pll_clks = cam_csi_pll_clks,
  1670. .nr_pll_clks = ARRAY_SIZE(cam_csi_pll_clks),
  1671. .mux_clks = cam_csi_mux_clks,
  1672. .nr_mux_clks = ARRAY_SIZE(cam_csi_mux_clks),
  1673. .div_clks = cam_csi_div_clks,
  1674. .nr_div_clks = ARRAY_SIZE(cam_csi_div_clks),
  1675. .gate_clks = cam_csi_gate_clks,
  1676. .nr_gate_clks = ARRAY_SIZE(cam_csi_gate_clks),
  1677. .nr_clk_ids = CAM_CSI_NR_CLK,
  1678. .clk_regs = cam_csi_clk_regs,
  1679. .nr_clk_regs = ARRAY_SIZE(cam_csi_clk_regs),
  1680. };
  1681. /**
  1682. * fsd_cmu_probe - Probe function for FSD platform clocks
  1683. * @pdev: Pointer to platform device
  1684. *
  1685. * Configure clock hierarchy for clock domains of FSD platform
  1686. */
  1687. static int __init fsd_cmu_probe(struct platform_device *pdev)
  1688. {
  1689. const struct samsung_cmu_info *info;
  1690. struct device *dev = &pdev->dev;
  1691. info = of_device_get_match_data(dev);
  1692. exynos_arm64_register_cmu(dev, dev->of_node, info);
  1693. return 0;
  1694. }
  1695. /* CMUs which belong to Power Domains and need runtime PM to be implemented */
  1696. static const struct of_device_id fsd_cmu_of_match[] = {
  1697. {
  1698. .compatible = "tesla,fsd-clock-peric",
  1699. .data = &peric_cmu_info,
  1700. }, {
  1701. .compatible = "tesla,fsd-clock-fsys0",
  1702. .data = &fsys0_cmu_info,
  1703. }, {
  1704. .compatible = "tesla,fsd-clock-fsys1",
  1705. .data = &fsys1_cmu_info,
  1706. }, {
  1707. .compatible = "tesla,fsd-clock-mfc",
  1708. .data = &mfc_cmu_info,
  1709. }, {
  1710. .compatible = "tesla,fsd-clock-cam_csi",
  1711. .data = &cam_csi_cmu_info,
  1712. }, {
  1713. },
  1714. };
  1715. static struct platform_driver fsd_cmu_driver __refdata = {
  1716. .driver = {
  1717. .name = "fsd-cmu",
  1718. .of_match_table = fsd_cmu_of_match,
  1719. .suppress_bind_attrs = true,
  1720. },
  1721. .probe = fsd_cmu_probe,
  1722. };
  1723. static int __init fsd_cmu_init(void)
  1724. {
  1725. return platform_driver_register(&fsd_cmu_driver);
  1726. }
  1727. core_initcall(fsd_cmu_init);