clk-exynosautov9.c 89 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2022 Samsung Electronics Co., Ltd.
  4. * Author: Chanho Park <[email protected]>
  5. *
  6. * Common Clock Framework support for ExynosAuto V9 SoC.
  7. */
  8. #include <linux/clk.h>
  9. #include <linux/clk-provider.h>
  10. #include <linux/of.h>
  11. #include <linux/of_address.h>
  12. #include <linux/of_device.h>
  13. #include <linux/platform_device.h>
  14. #include <dt-bindings/clock/samsung,exynosautov9.h>
  15. #include "clk.h"
  16. #include "clk-exynos-arm64.h"
  17. /* ---- CMU_TOP ------------------------------------------------------------ */
  18. /* Register Offset definitions for CMU_TOP (0x1b240000) */
  19. #define PLL_LOCKTIME_PLL_SHARED0 0x0000
  20. #define PLL_LOCKTIME_PLL_SHARED1 0x0004
  21. #define PLL_LOCKTIME_PLL_SHARED2 0x0008
  22. #define PLL_LOCKTIME_PLL_SHARED3 0x000c
  23. #define PLL_LOCKTIME_PLL_SHARED4 0x0010
  24. #define PLL_CON0_PLL_SHARED0 0x0100
  25. #define PLL_CON3_PLL_SHARED0 0x010c
  26. #define PLL_CON0_PLL_SHARED1 0x0140
  27. #define PLL_CON3_PLL_SHARED1 0x014c
  28. #define PLL_CON0_PLL_SHARED2 0x0180
  29. #define PLL_CON3_PLL_SHARED2 0x018c
  30. #define PLL_CON0_PLL_SHARED3 0x01c0
  31. #define PLL_CON3_PLL_SHARED3 0x01cc
  32. #define PLL_CON0_PLL_SHARED4 0x0200
  33. #define PLL_CON3_PLL_SHARED4 0x020c
  34. /* MUX */
  35. #define CLK_CON_MUX_MUX_CLKCMU_ACC_BUS 0x1000
  36. #define CLK_CON_MUX_MUX_CLKCMU_APM_BUS 0x1004
  37. #define CLK_CON_MUX_MUX_CLKCMU_AUD_BUS 0x1008
  38. #define CLK_CON_MUX_MUX_CLKCMU_AUD_CPU 0x100c
  39. #define CLK_CON_MUX_MUX_CLKCMU_BUSC_BUS 0x1010
  40. #define CLK_CON_MUX_MUX_CLKCMU_BUSMC_BUS 0x1018
  41. #define CLK_CON_MUX_MUX_CLKCMU_CMU_BOOST 0x101c
  42. #define CLK_CON_MUX_MUX_CLKCMU_CORE_BUS 0x1020
  43. #define CLK_CON_MUX_MUX_CLKCMU_CPUCL0_CLUSTER 0x1024
  44. #define CLK_CON_MUX_MUX_CLKCMU_CPUCL0_SWITCH 0x102c
  45. #define CLK_CON_MUX_MUX_CLKCMU_CPUCL1_CLUSTER 0x1030
  46. #define CLK_CON_MUX_MUX_CLKCMU_CPUCL1_SWITCH 0x1034
  47. #define CLK_CON_MUX_MUX_CLKCMU_DPTX_BUS 0x1040
  48. #define CLK_CON_MUX_MUX_CLKCMU_DPTX_DPGTC 0x1044
  49. #define CLK_CON_MUX_MUX_CLKCMU_DPUM_BUS 0x1048
  50. #define CLK_CON_MUX_MUX_CLKCMU_DPUS0_BUS 0x104c
  51. #define CLK_CON_MUX_MUX_CLKCMU_DPUS1_BUS 0x1050
  52. #define CLK_CON_MUX_MUX_CLKCMU_FSYS0_BUS 0x1054
  53. #define CLK_CON_MUX_MUX_CLKCMU_FSYS0_PCIE 0x1058
  54. #define CLK_CON_MUX_MUX_CLKCMU_FSYS1_BUS 0x105c
  55. #define CLK_CON_MUX_MUX_CLKCMU_FSYS1_MMC_CARD 0x1060
  56. #define CLK_CON_MUX_MUX_CLKCMU_FSYS1_USBDRD 0x1064
  57. #define CLK_CON_MUX_MUX_CLKCMU_FSYS2_BUS 0x1068
  58. #define CLK_CON_MUX_MUX_CLKCMU_FSYS2_ETHERNET 0x106c
  59. #define CLK_CON_MUX_MUX_CLKCMU_FSYS2_UFS_EMBD 0x1070
  60. #define CLK_CON_MUX_MUX_CLKCMU_G2D_G2D 0x1074
  61. #define CLK_CON_MUX_MUX_CLKCMU_G2D_MSCL 0x1078
  62. #define CLK_CON_MUX_MUX_CLKCMU_G3D00_SWITCH 0x107c
  63. #define CLK_CON_MUX_MUX_CLKCMU_G3D01_SWITCH 0x1080
  64. #define CLK_CON_MUX_MUX_CLKCMU_G3D1_SWITCH 0x1084
  65. #define CLK_CON_MUX_MUX_CLKCMU_ISPB_BUS 0x108c
  66. #define CLK_CON_MUX_MUX_CLKCMU_MFC_MFC 0x1090
  67. #define CLK_CON_MUX_MUX_CLKCMU_MFC_WFD 0x1094
  68. #define CLK_CON_MUX_MUX_CLKCMU_MIF_SWITCH 0x109c
  69. #define CLK_CON_MUX_MUX_CLKCMU_MIF_BUSP 0x1098
  70. #define CLK_CON_MUX_MUX_CLKCMU_MIF_SWITCH 0x109c
  71. #define CLK_CON_MUX_MUX_CLKCMU_NPU_BUS 0x10a0
  72. #define CLK_CON_MUX_MUX_CLKCMU_PERIC0_BUS 0x10a4
  73. #define CLK_CON_MUX_MUX_CLKCMU_PERIC0_IP 0x10a8
  74. #define CLK_CON_MUX_MUX_CLKCMU_PERIC1_BUS 0x10ac
  75. #define CLK_CON_MUX_MUX_CLKCMU_PERIC1_IP 0x10b0
  76. #define CLK_CON_MUX_MUX_CLKCMU_PERIS_BUS 0x10b4
  77. #define CLK_CON_MUX_MUX_CMU_CMUREF 0x10c0
  78. /* DIV */
  79. #define CLK_CON_DIV_CLKCMU_ACC_BUS 0x1800
  80. #define CLK_CON_DIV_CLKCMU_APM_BUS 0x1804
  81. #define CLK_CON_DIV_CLKCMU_AUD_BUS 0x1808
  82. #define CLK_CON_DIV_CLKCMU_AUD_CPU 0x180c
  83. #define CLK_CON_DIV_CLKCMU_BUSC_BUS 0x1810
  84. #define CLK_CON_DIV_CLKCMU_BUSMC_BUS 0x1818
  85. #define CLK_CON_DIV_CLKCMU_CORE_BUS 0x181c
  86. #define CLK_CON_DIV_CLKCMU_CPUCL0_CLUSTER 0x1820
  87. #define CLK_CON_DIV_CLKCMU_CPUCL0_SWITCH 0x1828
  88. #define CLK_CON_DIV_CLKCMU_CPUCL1_CLUSTER 0x182c
  89. #define CLK_CON_DIV_CLKCMU_CPUCL1_SWITCH 0x1830
  90. #define CLK_CON_DIV_CLKCMU_DPTX_BUS 0x183c
  91. #define CLK_CON_DIV_CLKCMU_DPTX_DPGTC 0x1840
  92. #define CLK_CON_DIV_CLKCMU_DPUM_BUS 0x1844
  93. #define CLK_CON_DIV_CLKCMU_DPUS0_BUS 0x1848
  94. #define CLK_CON_DIV_CLKCMU_DPUS1_BUS 0x184c
  95. #define CLK_CON_DIV_CLKCMU_FSYS0_BUS 0x1850
  96. #define CLK_CON_DIV_CLKCMU_FSYS0_PCIE 0x1854
  97. #define CLK_CON_DIV_CLKCMU_FSYS1_BUS 0x1858
  98. #define CLK_CON_DIV_CLKCMU_FSYS1_USBDRD 0x185c
  99. #define CLK_CON_DIV_CLKCMU_FSYS2_BUS 0x1860
  100. #define CLK_CON_DIV_CLKCMU_FSYS2_ETHERNET 0x1864
  101. #define CLK_CON_DIV_CLKCMU_FSYS2_UFS_EMBD 0x1868
  102. #define CLK_CON_DIV_CLKCMU_G2D_G2D 0x186c
  103. #define CLK_CON_DIV_CLKCMU_G2D_MSCL 0x1870
  104. #define CLK_CON_DIV_CLKCMU_G3D00_SWITCH 0x1874
  105. #define CLK_CON_DIV_CLKCMU_G3D01_SWITCH 0x1878
  106. #define CLK_CON_DIV_CLKCMU_G3D1_SWITCH 0x187c
  107. #define CLK_CON_DIV_CLKCMU_ISPB_BUS 0x1884
  108. #define CLK_CON_DIV_CLKCMU_MFC_MFC 0x1888
  109. #define CLK_CON_DIV_CLKCMU_MFC_WFD 0x188c
  110. #define CLK_CON_DIV_CLKCMU_MIF_BUSP 0x1890
  111. #define CLK_CON_DIV_CLKCMU_NPU_BUS 0x1894
  112. #define CLK_CON_DIV_CLKCMU_PERIC0_BUS 0x1898
  113. #define CLK_CON_DIV_CLKCMU_PERIC0_IP 0x189c
  114. #define CLK_CON_DIV_CLKCMU_PERIC1_BUS 0x18a0
  115. #define CLK_CON_DIV_CLKCMU_PERIC1_IP 0x18a4
  116. #define CLK_CON_DIV_CLKCMU_PERIS_BUS 0x18a8
  117. #define CLK_CON_DIV_DIV_CLKCMU_CMU_BOOST 0x18b4
  118. #define CLK_CON_DIV_PLL_SHARED0_DIV2 0x18b8
  119. #define CLK_CON_DIV_PLL_SHARED0_DIV3 0x18bc
  120. #define CLK_CON_DIV_PLL_SHARED1_DIV2 0x18c0
  121. #define CLK_CON_DIV_PLL_SHARED1_DIV3 0x18c4
  122. #define CLK_CON_DIV_PLL_SHARED1_DIV4 0x18c8
  123. #define CLK_CON_DIV_PLL_SHARED2_DIV2 0x18cc
  124. #define CLK_CON_DIV_PLL_SHARED2_DIV3 0x18d0
  125. #define CLK_CON_DIV_PLL_SHARED2_DIV4 0x18d4
  126. #define CLK_CON_DIV_PLL_SHARED4_DIV2 0x18d4
  127. #define CLK_CON_DIV_PLL_SHARED4_DIV4 0x18d8
  128. /* GATE */
  129. #define CLK_CON_GAT_CLKCMU_CMU_BUSC_BOOST 0x2000
  130. #define CLK_CON_GAT_CLKCMU_CMU_BUSMC_BOOST 0x2004
  131. #define CLK_CON_GAT_CLKCMU_CMU_CORE_BOOST 0x2008
  132. #define CLK_CON_GAT_CLKCMU_CMU_CPUCL0_BOOST 0x2010
  133. #define CLK_CON_GAT_CLKCMU_CMU_CPUCL1_BOOST 0x2018
  134. #define CLK_CON_GAT_CLKCMU_CMU_MIF_BOOST 0x2020
  135. #define CLK_CON_GAT_GATE_CLKCMU_FSYS1_MMC_CARD 0x2024
  136. #define CLK_CON_GAT_GATE_CLKCMU_MIF_SWITCH 0x2028
  137. #define CLK_CON_GAT_GATE_CLKCMU_ACC_BUS 0x202c
  138. #define CLK_CON_GAT_GATE_CLKCMU_APM_BUS 0x2030
  139. #define CLK_CON_GAT_GATE_CLKCMU_AUD_BUS 0x2034
  140. #define CLK_CON_GAT_GATE_CLKCMU_AUD_CPU 0x2038
  141. #define CLK_CON_GAT_GATE_CLKCMU_BUSC_BUS 0x203c
  142. #define CLK_CON_GAT_GATE_CLKCMU_BUSMC_BUS 0x2044
  143. #define CLK_CON_GAT_GATE_CLKCMU_CMU_BOOST 0x2048
  144. #define CLK_CON_GAT_GATE_CLKCMU_CORE_BUS 0x204c
  145. #define CLK_CON_GAT_GATE_CLKCMU_CPUCL0_CLUSTER 0x2050
  146. #define CLK_CON_GAT_GATE_CLKCMU_CPUCL0_SWITCH 0x2058
  147. #define CLK_CON_GAT_GATE_CLKCMU_CPUCL1_CLUSTER 0x205c
  148. #define CLK_CON_GAT_GATE_CLKCMU_CPUCL1_SWITCH 0x2060
  149. #define CLK_CON_GAT_GATE_CLKCMU_DPTX_BUS 0x206c
  150. #define CLK_CON_GAT_GATE_CLKCMU_DPTX_DPGTC 0x2070
  151. #define CLK_CON_GAT_GATE_CLKCMU_DPUM_BUS 0x2060
  152. #define CLK_CON_GAT_GATE_CLKCMU_DPUS0_BUS 0x2064
  153. #define CLK_CON_GAT_GATE_CLKCMU_DPUS1_BUS 0x207c
  154. #define CLK_CON_GAT_GATE_CLKCMU_FSYS0_BUS 0x2080
  155. #define CLK_CON_GAT_GATE_CLKCMU_FSYS0_PCIE 0x2084
  156. #define CLK_CON_GAT_GATE_CLKCMU_FSYS1_BUS 0x2088
  157. #define CLK_CON_GAT_GATE_CLKCMU_FSYS1_USBDRD 0x208c
  158. #define CLK_CON_GAT_GATE_CLKCMU_FSYS2_BUS 0x2090
  159. #define CLK_CON_GAT_GATE_CLKCMU_FSYS2_ETHERNET 0x2094
  160. #define CLK_CON_GAT_GATE_CLKCMU_FSYS2_UFS_EMBD 0x2098
  161. #define CLK_CON_GAT_GATE_CLKCMU_G2D_G2D 0x209c
  162. #define CLK_CON_GAT_GATE_CLKCMU_G2D_MSCL 0x20a0
  163. #define CLK_CON_GAT_GATE_CLKCMU_G3D00_SWITCH 0x20a4
  164. #define CLK_CON_GAT_GATE_CLKCMU_G3D01_SWITCH 0x20a8
  165. #define CLK_CON_GAT_GATE_CLKCMU_G3D1_SWITCH 0x20ac
  166. #define CLK_CON_GAT_GATE_CLKCMU_ISPB_BUS 0x20b4
  167. #define CLK_CON_GAT_GATE_CLKCMU_MFC_MFC 0x20b8
  168. #define CLK_CON_GAT_GATE_CLKCMU_MFC_WFD 0x20bc
  169. #define CLK_CON_GAT_GATE_CLKCMU_MIF_BUSP 0x20c0
  170. #define CLK_CON_GAT_GATE_CLKCMU_NPU_BUS 0x20c4
  171. #define CLK_CON_GAT_GATE_CLKCMU_PERIC0_BUS 0x20c8
  172. #define CLK_CON_GAT_GATE_CLKCMU_PERIC0_IP 0x20cc
  173. #define CLK_CON_GAT_GATE_CLKCMU_PERIC1_BUS 0x20d0
  174. #define CLK_CON_GAT_GATE_CLKCMU_PERIC1_IP 0x20d4
  175. #define CLK_CON_GAT_GATE_CLKCMU_PERIS_BUS 0x20d8
  176. static const unsigned long top_clk_regs[] __initconst = {
  177. PLL_LOCKTIME_PLL_SHARED0,
  178. PLL_LOCKTIME_PLL_SHARED1,
  179. PLL_LOCKTIME_PLL_SHARED2,
  180. PLL_LOCKTIME_PLL_SHARED3,
  181. PLL_LOCKTIME_PLL_SHARED4,
  182. PLL_CON0_PLL_SHARED0,
  183. PLL_CON3_PLL_SHARED0,
  184. PLL_CON0_PLL_SHARED1,
  185. PLL_CON3_PLL_SHARED1,
  186. PLL_CON0_PLL_SHARED2,
  187. PLL_CON3_PLL_SHARED2,
  188. PLL_CON0_PLL_SHARED3,
  189. PLL_CON3_PLL_SHARED3,
  190. PLL_CON0_PLL_SHARED4,
  191. PLL_CON3_PLL_SHARED4,
  192. CLK_CON_MUX_MUX_CLKCMU_ACC_BUS,
  193. CLK_CON_MUX_MUX_CLKCMU_APM_BUS,
  194. CLK_CON_MUX_MUX_CLKCMU_AUD_BUS,
  195. CLK_CON_MUX_MUX_CLKCMU_AUD_CPU,
  196. CLK_CON_MUX_MUX_CLKCMU_BUSC_BUS,
  197. CLK_CON_MUX_MUX_CLKCMU_CMU_BOOST,
  198. CLK_CON_MUX_MUX_CLKCMU_CORE_BUS,
  199. CLK_CON_MUX_MUX_CLKCMU_CPUCL0_CLUSTER,
  200. CLK_CON_MUX_MUX_CLKCMU_CPUCL0_SWITCH,
  201. CLK_CON_MUX_MUX_CLKCMU_CPUCL1_CLUSTER,
  202. CLK_CON_MUX_MUX_CLKCMU_CPUCL1_SWITCH,
  203. CLK_CON_MUX_MUX_CLKCMU_DPTX_BUS,
  204. CLK_CON_MUX_MUX_CLKCMU_DPTX_DPGTC,
  205. CLK_CON_MUX_MUX_CLKCMU_DPUM_BUS,
  206. CLK_CON_MUX_MUX_CLKCMU_DPUS0_BUS,
  207. CLK_CON_MUX_MUX_CLKCMU_DPUS1_BUS,
  208. CLK_CON_MUX_MUX_CLKCMU_FSYS0_BUS,
  209. CLK_CON_MUX_MUX_CLKCMU_FSYS0_PCIE,
  210. CLK_CON_MUX_MUX_CLKCMU_FSYS1_BUS,
  211. CLK_CON_MUX_MUX_CLKCMU_FSYS1_MMC_CARD,
  212. CLK_CON_MUX_MUX_CLKCMU_FSYS1_USBDRD,
  213. CLK_CON_MUX_MUX_CLKCMU_FSYS2_BUS,
  214. CLK_CON_MUX_MUX_CLKCMU_FSYS2_ETHERNET,
  215. CLK_CON_MUX_MUX_CLKCMU_FSYS2_UFS_EMBD,
  216. CLK_CON_MUX_MUX_CLKCMU_G2D_G2D,
  217. CLK_CON_MUX_MUX_CLKCMU_G2D_MSCL,
  218. CLK_CON_MUX_MUX_CLKCMU_G3D00_SWITCH,
  219. CLK_CON_MUX_MUX_CLKCMU_G3D01_SWITCH,
  220. CLK_CON_MUX_MUX_CLKCMU_G3D1_SWITCH,
  221. CLK_CON_MUX_MUX_CLKCMU_ISPB_BUS,
  222. CLK_CON_MUX_MUX_CLKCMU_MFC_MFC,
  223. CLK_CON_MUX_MUX_CLKCMU_MFC_WFD,
  224. CLK_CON_MUX_MUX_CLKCMU_MIF_SWITCH,
  225. CLK_CON_MUX_MUX_CLKCMU_MIF_BUSP,
  226. CLK_CON_MUX_MUX_CLKCMU_MIF_SWITCH,
  227. CLK_CON_MUX_MUX_CLKCMU_NPU_BUS,
  228. CLK_CON_MUX_MUX_CLKCMU_PERIC0_BUS,
  229. CLK_CON_MUX_MUX_CLKCMU_PERIC0_IP,
  230. CLK_CON_MUX_MUX_CLKCMU_PERIC1_BUS,
  231. CLK_CON_MUX_MUX_CLKCMU_PERIC1_IP,
  232. CLK_CON_MUX_MUX_CLKCMU_PERIS_BUS,
  233. CLK_CON_MUX_MUX_CMU_CMUREF,
  234. CLK_CON_DIV_CLKCMU_ACC_BUS,
  235. CLK_CON_DIV_CLKCMU_APM_BUS,
  236. CLK_CON_DIV_CLKCMU_AUD_BUS,
  237. CLK_CON_DIV_CLKCMU_AUD_CPU,
  238. CLK_CON_DIV_CLKCMU_BUSC_BUS,
  239. CLK_CON_DIV_CLKCMU_BUSMC_BUS,
  240. CLK_CON_DIV_CLKCMU_CORE_BUS,
  241. CLK_CON_DIV_CLKCMU_CPUCL0_CLUSTER,
  242. CLK_CON_DIV_CLKCMU_CPUCL0_SWITCH,
  243. CLK_CON_DIV_CLKCMU_CPUCL1_CLUSTER,
  244. CLK_CON_DIV_CLKCMU_CPUCL1_SWITCH,
  245. CLK_CON_DIV_CLKCMU_DPTX_BUS,
  246. CLK_CON_DIV_CLKCMU_DPTX_DPGTC,
  247. CLK_CON_DIV_CLKCMU_DPUM_BUS,
  248. CLK_CON_DIV_CLKCMU_DPUS0_BUS,
  249. CLK_CON_DIV_CLKCMU_DPUS1_BUS,
  250. CLK_CON_DIV_CLKCMU_FSYS0_BUS,
  251. CLK_CON_DIV_CLKCMU_FSYS0_PCIE,
  252. CLK_CON_DIV_CLKCMU_FSYS1_BUS,
  253. CLK_CON_DIV_CLKCMU_FSYS1_USBDRD,
  254. CLK_CON_DIV_CLKCMU_FSYS2_BUS,
  255. CLK_CON_DIV_CLKCMU_FSYS2_ETHERNET,
  256. CLK_CON_DIV_CLKCMU_FSYS2_UFS_EMBD,
  257. CLK_CON_DIV_CLKCMU_G2D_G2D,
  258. CLK_CON_DIV_CLKCMU_G2D_MSCL,
  259. CLK_CON_DIV_CLKCMU_G3D00_SWITCH,
  260. CLK_CON_DIV_CLKCMU_G3D01_SWITCH,
  261. CLK_CON_DIV_CLKCMU_G3D1_SWITCH,
  262. CLK_CON_DIV_CLKCMU_ISPB_BUS,
  263. CLK_CON_DIV_CLKCMU_MFC_MFC,
  264. CLK_CON_DIV_CLKCMU_MFC_WFD,
  265. CLK_CON_DIV_CLKCMU_MIF_BUSP,
  266. CLK_CON_DIV_CLKCMU_NPU_BUS,
  267. CLK_CON_DIV_CLKCMU_PERIC0_BUS,
  268. CLK_CON_DIV_CLKCMU_PERIC0_IP,
  269. CLK_CON_DIV_CLKCMU_PERIC1_BUS,
  270. CLK_CON_DIV_CLKCMU_PERIC1_IP,
  271. CLK_CON_DIV_CLKCMU_PERIS_BUS,
  272. CLK_CON_DIV_DIV_CLKCMU_CMU_BOOST,
  273. CLK_CON_DIV_PLL_SHARED0_DIV2,
  274. CLK_CON_DIV_PLL_SHARED0_DIV3,
  275. CLK_CON_DIV_PLL_SHARED1_DIV2,
  276. CLK_CON_DIV_PLL_SHARED1_DIV3,
  277. CLK_CON_DIV_PLL_SHARED1_DIV4,
  278. CLK_CON_DIV_PLL_SHARED2_DIV2,
  279. CLK_CON_DIV_PLL_SHARED2_DIV3,
  280. CLK_CON_DIV_PLL_SHARED2_DIV4,
  281. CLK_CON_DIV_PLL_SHARED4_DIV2,
  282. CLK_CON_DIV_PLL_SHARED4_DIV4,
  283. CLK_CON_GAT_CLKCMU_CMU_BUSC_BOOST,
  284. CLK_CON_GAT_CLKCMU_CMU_BUSMC_BOOST,
  285. CLK_CON_GAT_CLKCMU_CMU_CORE_BOOST,
  286. CLK_CON_GAT_CLKCMU_CMU_CPUCL0_BOOST,
  287. CLK_CON_GAT_CLKCMU_CMU_CPUCL1_BOOST,
  288. CLK_CON_GAT_CLKCMU_CMU_MIF_BOOST,
  289. CLK_CON_GAT_GATE_CLKCMU_FSYS1_MMC_CARD,
  290. CLK_CON_GAT_GATE_CLKCMU_MIF_SWITCH,
  291. CLK_CON_GAT_GATE_CLKCMU_ACC_BUS,
  292. CLK_CON_GAT_GATE_CLKCMU_APM_BUS,
  293. CLK_CON_GAT_GATE_CLKCMU_AUD_BUS,
  294. CLK_CON_GAT_GATE_CLKCMU_AUD_CPU,
  295. CLK_CON_GAT_GATE_CLKCMU_BUSC_BUS,
  296. CLK_CON_GAT_GATE_CLKCMU_BUSMC_BUS,
  297. CLK_CON_GAT_GATE_CLKCMU_CMU_BOOST,
  298. CLK_CON_GAT_GATE_CLKCMU_CORE_BUS,
  299. CLK_CON_GAT_GATE_CLKCMU_CPUCL0_CLUSTER,
  300. CLK_CON_GAT_GATE_CLKCMU_CPUCL0_SWITCH,
  301. CLK_CON_GAT_GATE_CLKCMU_CPUCL1_CLUSTER,
  302. CLK_CON_GAT_GATE_CLKCMU_CPUCL1_SWITCH,
  303. CLK_CON_GAT_GATE_CLKCMU_DPTX_BUS,
  304. CLK_CON_GAT_GATE_CLKCMU_DPTX_DPGTC,
  305. CLK_CON_GAT_GATE_CLKCMU_DPUM_BUS,
  306. CLK_CON_GAT_GATE_CLKCMU_DPUS0_BUS,
  307. CLK_CON_GAT_GATE_CLKCMU_DPUS1_BUS,
  308. CLK_CON_GAT_GATE_CLKCMU_FSYS0_BUS,
  309. CLK_CON_GAT_GATE_CLKCMU_FSYS0_PCIE,
  310. CLK_CON_GAT_GATE_CLKCMU_FSYS1_BUS,
  311. CLK_CON_GAT_GATE_CLKCMU_FSYS1_USBDRD,
  312. CLK_CON_GAT_GATE_CLKCMU_FSYS2_BUS,
  313. CLK_CON_GAT_GATE_CLKCMU_FSYS2_ETHERNET,
  314. CLK_CON_GAT_GATE_CLKCMU_FSYS2_UFS_EMBD,
  315. CLK_CON_GAT_GATE_CLKCMU_G2D_G2D,
  316. CLK_CON_GAT_GATE_CLKCMU_G2D_MSCL,
  317. CLK_CON_GAT_GATE_CLKCMU_G3D00_SWITCH,
  318. CLK_CON_GAT_GATE_CLKCMU_G3D01_SWITCH,
  319. CLK_CON_GAT_GATE_CLKCMU_G3D1_SWITCH,
  320. CLK_CON_GAT_GATE_CLKCMU_ISPB_BUS,
  321. CLK_CON_GAT_GATE_CLKCMU_MFC_MFC,
  322. CLK_CON_GAT_GATE_CLKCMU_MFC_WFD,
  323. CLK_CON_GAT_GATE_CLKCMU_MIF_BUSP,
  324. CLK_CON_GAT_GATE_CLKCMU_NPU_BUS,
  325. CLK_CON_GAT_GATE_CLKCMU_PERIC0_BUS,
  326. CLK_CON_GAT_GATE_CLKCMU_PERIC0_IP,
  327. CLK_CON_GAT_GATE_CLKCMU_PERIC1_BUS,
  328. CLK_CON_GAT_GATE_CLKCMU_PERIC1_IP,
  329. CLK_CON_GAT_GATE_CLKCMU_PERIS_BUS,
  330. };
  331. static const struct samsung_pll_clock top_pll_clks[] __initconst = {
  332. /* CMU_TOP_PURECLKCOMP */
  333. PLL(pll_0822x, FOUT_SHARED0_PLL, "fout_shared0_pll", "oscclk",
  334. PLL_LOCKTIME_PLL_SHARED0, PLL_CON3_PLL_SHARED0, NULL),
  335. PLL(pll_0822x, FOUT_SHARED0_PLL, "fout_shared1_pll", "oscclk",
  336. PLL_LOCKTIME_PLL_SHARED1, PLL_CON3_PLL_SHARED1, NULL),
  337. PLL(pll_0822x, FOUT_SHARED0_PLL, "fout_shared2_pll", "oscclk",
  338. PLL_LOCKTIME_PLL_SHARED2, PLL_CON3_PLL_SHARED2, NULL),
  339. PLL(pll_0822x, FOUT_SHARED0_PLL, "fout_shared3_pll", "oscclk",
  340. PLL_LOCKTIME_PLL_SHARED3, PLL_CON3_PLL_SHARED3, NULL),
  341. PLL(pll_0822x, FOUT_SHARED0_PLL, "fout_shared4_pll", "oscclk",
  342. PLL_LOCKTIME_PLL_SHARED4, PLL_CON3_PLL_SHARED4, NULL),
  343. };
  344. /* List of parent clocks for Muxes in CMU_TOP */
  345. PNAME(mout_shared0_pll_p) = { "oscclk", "fout_shared0_pll" };
  346. PNAME(mout_shared1_pll_p) = { "oscclk", "fout_shared1_pll" };
  347. PNAME(mout_shared2_pll_p) = { "oscclk", "fout_shared2_pll" };
  348. PNAME(mout_shared3_pll_p) = { "oscclk", "fout_shared3_pll" };
  349. PNAME(mout_shared4_pll_p) = { "oscclk", "fout_shared4_pll" };
  350. PNAME(mout_clkcmu_cmu_boost_p) = { "dout_shared2_div3", "dout_shared1_div4",
  351. "dout_shared2_div4", "dout_shared4_div4" };
  352. PNAME(mout_clkcmu_cmu_cmuref_p) = { "oscclk", "dout_cmu_boost" };
  353. PNAME(mout_clkcmu_acc_bus_p) = { "dout_shared1_div3", "dout_shared2_div3",
  354. "dout_shared1_div4", "dout_shared2_div4" };
  355. PNAME(mout_clkcmu_apm_bus_p) = { "dout_shared2_div3", "dout_shared1_div4",
  356. "dout_shared2_div4", "dout_shared4_div4" };
  357. PNAME(mout_clkcmu_aud_cpu_p) = { "dout_shared0_div2", "dout_shared1_div2",
  358. "dout_shared2_div2", "dout_shared0_div3",
  359. "dout_shared4_div2", "dout_shared1_div3",
  360. "fout_shared3_pll" };
  361. PNAME(mout_clkcmu_aud_bus_p) = { "dout_shared4_div2", "dout_shared1_div3",
  362. "dout_shared2_div3", "dout_shared1_div4" };
  363. PNAME(mout_clkcmu_busc_bus_p) = { "dout_shared2_div3", "dout_shared1_div4",
  364. "dout_shared2_div4", "dout_shared4_div4" };
  365. PNAME(mout_clkcmu_core_bus_p) = { "dout_shared0_div2", "dout_shared1_div2",
  366. "dout_shared2_div2", "dout_shared0_div3",
  367. "dout_shared4_div2", "dout_shared1_div3",
  368. "dout_shared2_div3", "fout_shared3_pll" };
  369. PNAME(mout_clkcmu_cpucl0_switch_p) = {
  370. "dout_shared0_div2", "dout_shared1_div2",
  371. "dout_shared2_div2", "dout_shared4_div2" };
  372. PNAME(mout_clkcmu_cpucl0_cluster_p) = {
  373. "fout_shared2_pll", "fout_shared4_pll",
  374. "dout_shared0_div2", "dout_shared1_div2",
  375. "dout_shared2_div2", "dout_shared4_div2",
  376. "dout_shared2_div3", "fout_shared3_pll" };
  377. PNAME(mout_clkcmu_dptx_bus_p) = { "dout_shared4_div2", "dout_shared2_div3",
  378. "dout_shared1_div4", "dout_shared2_div4" };
  379. PNAME(mout_clkcmu_dptx_dpgtc_p) = { "oscclk", "dout_shared2_div3",
  380. "dout_shared2_div4", "dout_shared4_div4" };
  381. PNAME(mout_clkcmu_dpum_bus_p) = { "dout_shared1_div3", "dout_shared2_div3",
  382. "dout_shared1_div4", "dout_shared2_div4",
  383. "dout_shared4_div4", "fout_shared3_pll" };
  384. PNAME(mout_clkcmu_fsys0_bus_p) = {
  385. "dout_shared4_div2", "dout_shared2_div3",
  386. "dout_shared1_div4", "dout_shared2_div4" };
  387. PNAME(mout_clkcmu_fsys0_pcie_p) = { "oscclk", "dout_shared2_div4" };
  388. PNAME(mout_clkcmu_fsys1_bus_p) = { "dout_shared2_div3", "dout_shared1_div4",
  389. "dout_shared2_div4", "dout_shared4_div4" };
  390. PNAME(mout_clkcmu_fsys1_usbdrd_p) = {
  391. "oscclk", "dout_shared2_div3",
  392. "dout_shared2_div4", "dout_shared4_div4" };
  393. PNAME(mout_clkcmu_fsys1_mmc_card_p) = {
  394. "oscclk", "dout_shared2_div2",
  395. "dout_shared4_div2", "dout_shared2_div3" };
  396. PNAME(mout_clkcmu_fsys2_ethernet_p) = {
  397. "oscclk", "dout_shared2_div2",
  398. "dout_shared0_div3", "dout_shared2_div3",
  399. "dout_shared1_div4", "fout_shared3_pll" };
  400. PNAME(mout_clkcmu_g2d_g2d_p) = { "dout_shared2_div2", "dout_shared0_div3",
  401. "dout_shared4_div2", "dout_shared1_div3",
  402. "dout_shared2_div3", "dout_shared1_div4",
  403. "dout_shared2_div4", "dout_shared4_div4" };
  404. PNAME(mout_clkcmu_g3d0_switch_p) = { "dout_shared0_div2", "dout_shared1_div2",
  405. "dout_shared2_div2", "dout_shared4_div2" };
  406. PNAME(mout_clkcmu_g3d1_switch_p) = { "dout_shared2_div2", "dout_shared4_div2",
  407. "dout_shared2_div3", "dout_shared1_div4" };
  408. PNAME(mout_clkcmu_mif_switch_p) = { "fout_shared0_pll", "fout_shared1_pll",
  409. "fout_shared2_pll", "fout_shared4_pll",
  410. "dout_shared0_div2", "dout_shared1_div2",
  411. "dout_shared2_div2", "fout_shared3_pll" };
  412. PNAME(mout_clkcmu_npu_bus_p) = { "dout_shared1_div2", "dout_shared2_div2",
  413. "dout_shared0_div3", "dout_shared4_div2",
  414. "dout_shared1_div3", "dout_shared2_div3",
  415. "dout_shared1_div4", "fout_shared3_pll" };
  416. PNAME(mout_clkcmu_peric0_bus_p) = { "dout_shared2_div3", "dout_shared2_div4" };
  417. static const struct samsung_mux_clock top_mux_clks[] __initconst = {
  418. /* CMU_TOP_PURECLKCOMP */
  419. MUX(MOUT_SHARED0_PLL, "mout_shared0_pll", mout_shared0_pll_p,
  420. PLL_CON0_PLL_SHARED0, 4, 1),
  421. MUX(MOUT_SHARED1_PLL, "mout_shared1_pll", mout_shared1_pll_p,
  422. PLL_CON0_PLL_SHARED1, 4, 1),
  423. MUX(MOUT_SHARED2_PLL, "mout_shared2_pll", mout_shared2_pll_p,
  424. PLL_CON0_PLL_SHARED2, 4, 1),
  425. MUX(MOUT_SHARED3_PLL, "mout_shared3_pll", mout_shared3_pll_p,
  426. PLL_CON0_PLL_SHARED3, 4, 1),
  427. MUX(MOUT_SHARED4_PLL, "mout_shared4_pll", mout_shared4_pll_p,
  428. PLL_CON0_PLL_SHARED4, 4, 1),
  429. /* BOOST */
  430. MUX(MOUT_CLKCMU_CMU_BOOST, "mout_clkcmu_cmu_boost",
  431. mout_clkcmu_cmu_boost_p, CLK_CON_MUX_MUX_CLKCMU_CMU_BOOST, 0, 2),
  432. MUX(MOUT_CLKCMU_CMU_CMUREF, "mout_clkcmu_cmu_cmuref",
  433. mout_clkcmu_cmu_cmuref_p, CLK_CON_MUX_MUX_CMU_CMUREF, 0, 1),
  434. /* ACC */
  435. MUX(MOUT_CLKCMU_ACC_BUS, "mout_clkcmu_acc_bus", mout_clkcmu_acc_bus_p,
  436. CLK_CON_MUX_MUX_CLKCMU_ACC_BUS, 0, 2),
  437. /* APM */
  438. MUX(MOUT_CLKCMU_APM_BUS, "mout_clkcmu_apm_bus", mout_clkcmu_apm_bus_p,
  439. CLK_CON_MUX_MUX_CLKCMU_APM_BUS, 0, 2),
  440. /* AUD */
  441. MUX(MOUT_CLKCMU_AUD_CPU, "mout_clkcmu_aud_cpu", mout_clkcmu_aud_cpu_p,
  442. CLK_CON_MUX_MUX_CLKCMU_AUD_CPU, 0, 3),
  443. MUX(MOUT_CLKCMU_AUD_BUS, "mout_clkcmu_aud_bus", mout_clkcmu_aud_bus_p,
  444. CLK_CON_MUX_MUX_CLKCMU_AUD_BUS, 0, 2),
  445. /* BUSC */
  446. MUX(MOUT_CLKCMU_BUSC_BUS, "mout_clkcmu_busc_bus",
  447. mout_clkcmu_busc_bus_p, CLK_CON_MUX_MUX_CLKCMU_BUSC_BUS, 0, 2),
  448. /* BUSMC */
  449. MUX(MOUT_CLKCMU_BUSMC_BUS, "mout_clkcmu_busmc_bus",
  450. mout_clkcmu_busc_bus_p, CLK_CON_MUX_MUX_CLKCMU_BUSMC_BUS, 0, 2),
  451. /* CORE */
  452. MUX(MOUT_CLKCMU_CORE_BUS, "mout_clkcmu_core_bus",
  453. mout_clkcmu_core_bus_p, CLK_CON_MUX_MUX_CLKCMU_CORE_BUS, 0, 3),
  454. /* CPUCL0 */
  455. MUX(MOUT_CLKCMU_CPUCL0_SWITCH, "mout_clkcmu_cpucl0_switch",
  456. mout_clkcmu_cpucl0_switch_p, CLK_CON_MUX_MUX_CLKCMU_CPUCL0_SWITCH,
  457. 0, 2),
  458. MUX(MOUT_CLKCMU_CPUCL0_CLUSTER, "mout_clkcmu_cpucl0_cluster",
  459. mout_clkcmu_cpucl0_cluster_p,
  460. CLK_CON_MUX_MUX_CLKCMU_CPUCL0_CLUSTER, 0, 3),
  461. /* CPUCL1 */
  462. MUX(MOUT_CLKCMU_CPUCL1_SWITCH, "mout_clkcmu_cpucl1_switch",
  463. mout_clkcmu_cpucl0_switch_p, CLK_CON_MUX_MUX_CLKCMU_CPUCL1_SWITCH,
  464. 0, 2),
  465. MUX(MOUT_CLKCMU_CPUCL1_CLUSTER, "mout_clkcmu_cpucl1_cluster",
  466. mout_clkcmu_cpucl0_cluster_p,
  467. CLK_CON_MUX_MUX_CLKCMU_CPUCL1_CLUSTER, 0, 3),
  468. /* DPTX */
  469. MUX(MOUT_CLKCMU_DPTX_BUS, "mout_clkcmu_dptx_bus",
  470. mout_clkcmu_dptx_bus_p, CLK_CON_MUX_MUX_CLKCMU_DPTX_BUS, 0, 2),
  471. MUX(MOUT_CLKCMU_DPTX_DPGTC, "mout_clkcmu_dptx_dpgtc",
  472. mout_clkcmu_dptx_dpgtc_p, CLK_CON_MUX_MUX_CLKCMU_DPTX_DPGTC, 0, 2),
  473. /* DPUM */
  474. MUX(MOUT_CLKCMU_DPUM_BUS, "mout_clkcmu_dpum_bus",
  475. mout_clkcmu_dpum_bus_p, CLK_CON_MUX_MUX_CLKCMU_DPUM_BUS, 0, 3),
  476. /* DPUS */
  477. MUX(MOUT_CLKCMU_DPUS0_BUS, "mout_clkcmu_dpus0_bus",
  478. mout_clkcmu_dpum_bus_p, CLK_CON_MUX_MUX_CLKCMU_DPUS0_BUS, 0, 3),
  479. MUX(MOUT_CLKCMU_DPUS1_BUS, "mout_clkcmu_dpus1_bus",
  480. mout_clkcmu_dpum_bus_p, CLK_CON_MUX_MUX_CLKCMU_DPUS1_BUS, 0, 3),
  481. /* FSYS0 */
  482. MUX(MOUT_CLKCMU_FSYS0_BUS, "mout_clkcmu_fsys0_bus",
  483. mout_clkcmu_fsys0_bus_p, CLK_CON_MUX_MUX_CLKCMU_FSYS0_BUS, 0, 2),
  484. MUX(MOUT_CLKCMU_FSYS0_PCIE, "mout_clkcmu_fsys0_pcie",
  485. mout_clkcmu_fsys0_pcie_p, CLK_CON_MUX_MUX_CLKCMU_FSYS0_PCIE, 0, 1),
  486. /* FSYS1 */
  487. MUX(MOUT_CLKCMU_FSYS1_BUS, "mout_clkcmu_fsys1_bus",
  488. mout_clkcmu_fsys1_bus_p, CLK_CON_MUX_MUX_CLKCMU_FSYS1_BUS, 0, 2),
  489. MUX(MOUT_CLKCMU_FSYS1_USBDRD, "mout_clkcmu_fsys1_usbdrd",
  490. mout_clkcmu_fsys1_usbdrd_p, CLK_CON_MUX_MUX_CLKCMU_FSYS1_USBDRD,
  491. 0, 2),
  492. MUX(MOUT_CLKCMU_FSYS1_MMC_CARD, "mout_clkcmu_fsys1_mmc_card",
  493. mout_clkcmu_fsys1_mmc_card_p,
  494. CLK_CON_MUX_MUX_CLKCMU_FSYS1_MMC_CARD, 0, 2),
  495. /* FSYS2 */
  496. MUX(MOUT_CLKCMU_FSYS2_BUS, "mout_clkcmu_fsys2_bus",
  497. mout_clkcmu_fsys0_bus_p, CLK_CON_MUX_MUX_CLKCMU_FSYS2_BUS, 0, 2),
  498. MUX(MOUT_CLKCMU_FSYS2_UFS_EMBD, "mout_clkcmu_fsys2_ufs_embd",
  499. mout_clkcmu_fsys1_usbdrd_p, CLK_CON_MUX_MUX_CLKCMU_FSYS2_UFS_EMBD,
  500. 0, 2),
  501. MUX(MOUT_CLKCMU_FSYS2_ETHERNET, "mout_clkcmu_fsys2_ethernet",
  502. mout_clkcmu_fsys2_ethernet_p,
  503. CLK_CON_MUX_MUX_CLKCMU_FSYS2_ETHERNET, 0, 3),
  504. /* G2D */
  505. MUX(MOUT_CLKCMU_G2D_G2D, "mout_clkcmu_g2d_g2d", mout_clkcmu_g2d_g2d_p,
  506. CLK_CON_MUX_MUX_CLKCMU_G2D_G2D, 0, 3),
  507. MUX(MOUT_CLKCMU_G2D_MSCL, "mout_clkcmu_g2d_mscl",
  508. mout_clkcmu_fsys1_bus_p, CLK_CON_MUX_MUX_CLKCMU_G2D_MSCL, 0, 2),
  509. /* G3D0 */
  510. MUX(MOUT_CLKCMU_G3D00_SWITCH, "mout_clkcmu_g3d00_switch",
  511. mout_clkcmu_g3d0_switch_p, CLK_CON_MUX_MUX_CLKCMU_G3D00_SWITCH,
  512. 0, 2),
  513. MUX(MOUT_CLKCMU_G3D01_SWITCH, "mout_clkcmu_g3d01_switch",
  514. mout_clkcmu_g3d0_switch_p, CLK_CON_MUX_MUX_CLKCMU_G3D01_SWITCH,
  515. 0, 2),
  516. /* G3D1 */
  517. MUX(MOUT_CLKCMU_G3D1_SWITCH, "mout_clkcmu_g3d1_switch",
  518. mout_clkcmu_g3d1_switch_p, CLK_CON_MUX_MUX_CLKCMU_G3D1_SWITCH,
  519. 0, 2),
  520. /* ISPB */
  521. MUX(MOUT_CLKCMU_ISPB_BUS, "mout_clkcmu_ispb_bus",
  522. mout_clkcmu_acc_bus_p, CLK_CON_MUX_MUX_CLKCMU_ISPB_BUS, 0, 2),
  523. /* MFC */
  524. MUX(MOUT_CLKCMU_MFC_MFC, "mout_clkcmu_mfc_mfc",
  525. mout_clkcmu_g3d1_switch_p, CLK_CON_MUX_MUX_CLKCMU_MFC_MFC, 0, 2),
  526. MUX(MOUT_CLKCMU_MFC_WFD, "mout_clkcmu_mfc_wfd",
  527. mout_clkcmu_fsys0_bus_p, CLK_CON_MUX_MUX_CLKCMU_MFC_WFD, 0, 2),
  528. /* MIF */
  529. MUX(MOUT_CLKCMU_MIF_SWITCH, "mout_clkcmu_mif_switch",
  530. mout_clkcmu_mif_switch_p, CLK_CON_MUX_MUX_CLKCMU_MIF_SWITCH, 0, 3),
  531. MUX(MOUT_CLKCMU_MIF_BUSP, "mout_clkcmu_mif_busp",
  532. mout_clkcmu_fsys1_bus_p, CLK_CON_MUX_MUX_CLKCMU_MIF_BUSP, 0, 2),
  533. /* NPU */
  534. MUX(MOUT_CLKCMU_NPU_BUS, "mout_clkcmu_npu_bus", mout_clkcmu_npu_bus_p,
  535. CLK_CON_MUX_MUX_CLKCMU_NPU_BUS, 0, 3),
  536. /* PERIC0 */
  537. MUX(MOUT_CLKCMU_PERIC0_BUS, "mout_clkcmu_peric0_bus",
  538. mout_clkcmu_peric0_bus_p, CLK_CON_MUX_MUX_CLKCMU_PERIC0_BUS, 0, 1),
  539. MUX(MOUT_CLKCMU_PERIC0_IP, "mout_clkcmu_peric0_ip",
  540. mout_clkcmu_peric0_bus_p, CLK_CON_MUX_MUX_CLKCMU_PERIC0_IP, 0, 1),
  541. /* PERIC1 */
  542. MUX(MOUT_CLKCMU_PERIC1_BUS, "mout_clkcmu_peric1_bus",
  543. mout_clkcmu_peric0_bus_p, CLK_CON_MUX_MUX_CLKCMU_PERIC1_BUS, 0, 1),
  544. MUX(MOUT_CLKCMU_PERIC1_IP, "mout_clkcmu_peric1_ip",
  545. mout_clkcmu_peric0_bus_p, CLK_CON_MUX_MUX_CLKCMU_PERIC1_IP, 0, 1),
  546. /* PERIS */
  547. MUX(MOUT_CLKCMU_PERIS_BUS, "mout_clkcmu_peris_bus",
  548. mout_clkcmu_peric0_bus_p, CLK_CON_MUX_MUX_CLKCMU_PERIS_BUS, 0, 1),
  549. };
  550. static const struct samsung_div_clock top_div_clks[] __initconst = {
  551. /* CMU_TOP_PURECLKCOMP */
  552. DIV(DOUT_SHARED0_DIV3, "dout_shared0_div3", "mout_shared0_pll",
  553. CLK_CON_DIV_PLL_SHARED0_DIV3, 0, 2),
  554. DIV(DOUT_SHARED0_DIV2, "dout_shared0_div2", "mout_shared0_pll",
  555. CLK_CON_DIV_PLL_SHARED0_DIV2, 0, 1),
  556. DIV(DOUT_SHARED1_DIV3, "dout_shared1_div3", "mout_shared1_pll",
  557. CLK_CON_DIV_PLL_SHARED1_DIV3, 0, 2),
  558. DIV(DOUT_SHARED1_DIV2, "dout_shared1_div2", "mout_shared1_pll",
  559. CLK_CON_DIV_PLL_SHARED1_DIV2, 0, 1),
  560. DIV(DOUT_SHARED1_DIV4, "dout_shared1_div4", "dout_shared1_div2",
  561. CLK_CON_DIV_PLL_SHARED1_DIV4, 0, 1),
  562. DIV(DOUT_SHARED2_DIV3, "dout_shared2_div3", "mout_shared2_pll",
  563. CLK_CON_DIV_PLL_SHARED2_DIV3, 0, 2),
  564. DIV(DOUT_SHARED2_DIV2, "dout_shared2_div2", "mout_shared2_pll",
  565. CLK_CON_DIV_PLL_SHARED2_DIV2, 0, 1),
  566. DIV(DOUT_SHARED2_DIV4, "dout_shared2_div4", "dout_shared2_div2",
  567. CLK_CON_DIV_PLL_SHARED2_DIV4, 0, 1),
  568. DIV(DOUT_SHARED4_DIV2, "dout_shared4_div2", "mout_shared4_pll",
  569. CLK_CON_DIV_PLL_SHARED4_DIV2, 0, 1),
  570. DIV(DOUT_SHARED4_DIV4, "dout_shared4_div4", "dout_shared4_div2",
  571. CLK_CON_DIV_PLL_SHARED4_DIV4, 0, 1),
  572. /* BOOST */
  573. DIV(DOUT_CLKCMU_CMU_BOOST, "dout_clkcmu_cmu_boost",
  574. "gout_clkcmu_cmu_boost", CLK_CON_DIV_DIV_CLKCMU_CMU_BOOST, 0, 2),
  575. /* ACC */
  576. DIV(DOUT_CLKCMU_ACC_BUS, "dout_clkcmu_acc_bus", "gout_clkcmu_acc_bus",
  577. CLK_CON_DIV_CLKCMU_ACC_BUS, 0, 4),
  578. /* APM */
  579. DIV(DOUT_CLKCMU_APM_BUS, "dout_clkcmu_apm_bus", "gout_clkcmu_apm_bus",
  580. CLK_CON_DIV_CLKCMU_APM_BUS, 0, 3),
  581. /* AUD */
  582. DIV(DOUT_CLKCMU_AUD_CPU, "dout_clkcmu_aud_cpu", "gout_clkcmu_aud_cpu",
  583. CLK_CON_DIV_CLKCMU_AUD_CPU, 0, 3),
  584. DIV(DOUT_CLKCMU_AUD_BUS, "dout_clkcmu_aud_bus", "gout_clkcmu_aud_bus",
  585. CLK_CON_DIV_CLKCMU_AUD_BUS, 0, 4),
  586. /* BUSC */
  587. DIV(DOUT_CLKCMU_BUSC_BUS, "dout_clkcmu_busc_bus",
  588. "gout_clkcmu_busc_bus", CLK_CON_DIV_CLKCMU_BUSC_BUS, 0, 4),
  589. /* BUSMC */
  590. DIV(DOUT_CLKCMU_BUSMC_BUS, "dout_clkcmu_busmc_bus",
  591. "gout_clkcmu_busmc_bus", CLK_CON_DIV_CLKCMU_BUSMC_BUS, 0, 4),
  592. /* CORE */
  593. DIV(DOUT_CLKCMU_CORE_BUS, "dout_clkcmu_core_bus",
  594. "gout_clkcmu_core_bus", CLK_CON_DIV_CLKCMU_CORE_BUS, 0, 4),
  595. /* CPUCL0 */
  596. DIV(DOUT_CLKCMU_CPUCL0_SWITCH, "dout_clkcmu_cpucl0_switch",
  597. "gout_clkcmu_cpucl0_switch", CLK_CON_DIV_CLKCMU_CPUCL0_SWITCH,
  598. 0, 3),
  599. DIV(DOUT_CLKCMU_CPUCL0_CLUSTER, "dout_clkcmu_cpucl0_cluster",
  600. "gout_clkcmu_cpucl0_cluster", CLK_CON_DIV_CLKCMU_CPUCL0_CLUSTER,
  601. 0, 3),
  602. /* CPUCL1 */
  603. DIV(DOUT_CLKCMU_CPUCL1_SWITCH, "dout_clkcmu_cpucl1_switch",
  604. "gout_clkcmu_cpucl1_switch", CLK_CON_DIV_CLKCMU_CPUCL1_SWITCH,
  605. 0, 3),
  606. DIV(DOUT_CLKCMU_CPUCL1_CLUSTER, "dout_clkcmu_cpucl1_cluster",
  607. "gout_clkcmu_cpucl1_cluster", CLK_CON_DIV_CLKCMU_CPUCL1_CLUSTER,
  608. 0, 3),
  609. /* DPTX */
  610. DIV(DOUT_CLKCMU_DPTX_BUS, "dout_clkcmu_dptx_bus",
  611. "gout_clkcmu_dptx_bus", CLK_CON_DIV_CLKCMU_DPTX_BUS, 0, 4),
  612. DIV(DOUT_CLKCMU_DPTX_DPGTC, "dout_clkcmu_dptx_dpgtc",
  613. "gout_clkcmu_dptx_dpgtc", CLK_CON_DIV_CLKCMU_DPTX_DPGTC, 0, 3),
  614. /* DPUM */
  615. DIV(DOUT_CLKCMU_DPUM_BUS, "dout_clkcmu_dpum_bus",
  616. "gout_clkcmu_dpum_bus", CLK_CON_DIV_CLKCMU_DPUM_BUS, 0, 4),
  617. /* DPUS */
  618. DIV(DOUT_CLKCMU_DPUS0_BUS, "dout_clkcmu_dpus0_bus",
  619. "gout_clkcmu_dpus0_bus", CLK_CON_DIV_CLKCMU_DPUS0_BUS, 0, 4),
  620. DIV(DOUT_CLKCMU_DPUS1_BUS, "dout_clkcmu_dpus1_bus",
  621. "gout_clkcmu_dpus1_bus", CLK_CON_DIV_CLKCMU_DPUS1_BUS, 0, 4),
  622. /* FSYS0 */
  623. DIV(DOUT_CLKCMU_FSYS0_BUS, "dout_clkcmu_fsys0_bus",
  624. "gout_clkcmu_fsys0_bus", CLK_CON_DIV_CLKCMU_FSYS0_BUS, 0, 4),
  625. /* FSYS1 */
  626. DIV(DOUT_CLKCMU_FSYS1_BUS, "dout_clkcmu_fsys1_bus",
  627. "gout_clkcmu_fsys1_bus", CLK_CON_DIV_CLKCMU_FSYS1_BUS, 0, 4),
  628. DIV(DOUT_CLKCMU_FSYS1_USBDRD, "dout_clkcmu_fsys1_usbdrd",
  629. "gout_clkcmu_fsys1_usbdrd", CLK_CON_DIV_CLKCMU_FSYS1_USBDRD, 0, 4),
  630. /* FSYS2 */
  631. DIV(DOUT_CLKCMU_FSYS2_BUS, "dout_clkcmu_fsys2_bus",
  632. "gout_clkcmu_fsys2_bus", CLK_CON_DIV_CLKCMU_FSYS2_BUS, 0, 4),
  633. DIV(DOUT_CLKCMU_FSYS2_UFS_EMBD, "dout_clkcmu_fsys2_ufs_embd",
  634. "gout_clkcmu_fsys2_ufs_embd", CLK_CON_DIV_CLKCMU_FSYS2_UFS_EMBD,
  635. 0, 3),
  636. DIV(DOUT_CLKCMU_FSYS2_ETHERNET, "dout_clkcmu_fsys2_ethernet",
  637. "gout_clkcmu_fsys2_ethernet", CLK_CON_DIV_CLKCMU_FSYS2_ETHERNET,
  638. 0, 3),
  639. /* G2D */
  640. DIV(DOUT_CLKCMU_G2D_G2D, "dout_clkcmu_g2d_g2d", "gout_clkcmu_g2d_g2d",
  641. CLK_CON_DIV_CLKCMU_G2D_G2D, 0, 4),
  642. DIV(DOUT_CLKCMU_G2D_MSCL, "dout_clkcmu_g2d_mscl",
  643. "gout_clkcmu_g2d_mscl", CLK_CON_DIV_CLKCMU_G2D_MSCL, 0, 4),
  644. /* G3D0 */
  645. DIV(DOUT_CLKCMU_G3D00_SWITCH, "dout_clkcmu_g3d00_switch",
  646. "gout_clkcmu_g3d00_switch", CLK_CON_DIV_CLKCMU_G3D00_SWITCH, 0, 3),
  647. DIV(DOUT_CLKCMU_G3D01_SWITCH, "dout_clkcmu_g3d01_switch",
  648. "gout_clkcmu_g3d01_switch", CLK_CON_DIV_CLKCMU_G3D01_SWITCH, 0, 3),
  649. /* G3D1 */
  650. DIV(DOUT_CLKCMU_G3D1_SWITCH, "dout_clkcmu_g3d1_switch",
  651. "gout_clkcmu_g3d1_switch", CLK_CON_DIV_CLKCMU_G3D1_SWITCH, 0, 3),
  652. /* ISPB */
  653. DIV(DOUT_CLKCMU_ISPB_BUS, "dout_clkcmu_ispb_bus",
  654. "gout_clkcmu_ispb_bus", CLK_CON_DIV_CLKCMU_ISPB_BUS, 0, 4),
  655. /* MFC */
  656. DIV(DOUT_CLKCMU_MFC_MFC, "dout_clkcmu_mfc_mfc", "gout_clkcmu_mfc_mfc",
  657. CLK_CON_DIV_CLKCMU_MFC_MFC, 0, 4),
  658. DIV(DOUT_CLKCMU_MFC_WFD, "dout_clkcmu_mfc_wfd", "gout_clkcmu_mfc_wfd",
  659. CLK_CON_DIV_CLKCMU_MFC_WFD, 0, 4),
  660. /* MIF */
  661. DIV(DOUT_CLKCMU_MIF_BUSP, "dout_clkcmu_mif_busp",
  662. "gout_clkcmu_mif_busp", CLK_CON_DIV_CLKCMU_MIF_BUSP, 0, 4),
  663. /* NPU */
  664. DIV(DOUT_CLKCMU_NPU_BUS, "dout_clkcmu_npu_bus", "gout_clkcmu_npu_bus",
  665. CLK_CON_DIV_CLKCMU_NPU_BUS, 0, 4),
  666. /* PERIC0 */
  667. DIV(DOUT_CLKCMU_PERIC0_BUS, "dout_clkcmu_peric0_bus",
  668. "gout_clkcmu_peric0_bus", CLK_CON_DIV_CLKCMU_PERIC0_BUS, 0, 4),
  669. DIV(DOUT_CLKCMU_PERIC0_IP, "dout_clkcmu_peric0_ip",
  670. "gout_clkcmu_peric0_ip", CLK_CON_DIV_CLKCMU_PERIC0_IP, 0, 4),
  671. /* PERIC1 */
  672. DIV(DOUT_CLKCMU_PERIC1_BUS, "dout_clkcmu_peric1_bus",
  673. "gout_clkcmu_peric1_bus", CLK_CON_DIV_CLKCMU_PERIC1_BUS, 0, 4),
  674. DIV(DOUT_CLKCMU_PERIC1_IP, "dout_clkcmu_peric1_ip",
  675. "gout_clkcmu_peric1_ip", CLK_CON_DIV_CLKCMU_PERIC1_IP, 0, 4),
  676. /* PERIS */
  677. DIV(DOUT_CLKCMU_PERIS_BUS, "dout_clkcmu_peris_bus",
  678. "gout_clkcmu_peris_bus", CLK_CON_DIV_CLKCMU_PERIS_BUS, 0, 4),
  679. };
  680. static const struct samsung_fixed_factor_clock top_fixed_factor_clks[] __initconst = {
  681. FFACTOR(DOUT_CLKCMU_FSYS0_PCIE, "dout_clkcmu_fsys0_pcie",
  682. "gout_clkcmu_fsys0_pcie", 1, 4, 0),
  683. };
  684. static const struct samsung_gate_clock top_gate_clks[] __initconst = {
  685. /* BOOST */
  686. GATE(GOUT_CLKCMU_CMU_BOOST, "gout_clkcmu_cmu_boost",
  687. "mout_clkcmu_cmu_boost", CLK_CON_GAT_GATE_CLKCMU_CMU_BOOST,
  688. 21, 0, 0),
  689. GATE(GOUT_CLKCMU_CPUCL0_BOOST, "gout_clkcmu_cpucl0_boost",
  690. "dout_cmu_boost", CLK_CON_GAT_CLKCMU_CMU_CPUCL0_BOOST, 21, 0, 0),
  691. GATE(GOUT_CLKCMU_CPUCL1_BOOST, "gout_clkcmu_cpucl1_boost",
  692. "dout_cmu_boost", CLK_CON_GAT_CLKCMU_CMU_CPUCL1_BOOST, 21, 0, 0),
  693. GATE(GOUT_CLKCMU_CORE_BOOST, "gout_clkcmu_core_boost",
  694. "dout_cmu_boost", CLK_CON_GAT_CLKCMU_CMU_CORE_BOOST, 21, 0, 0),
  695. GATE(GOUT_CLKCMU_BUSC_BOOST, "gout_clkcmu_busc_boost",
  696. "dout_cmu_boost", CLK_CON_GAT_CLKCMU_CMU_BUSC_BOOST, 21, 0, 0),
  697. GATE(GOUT_CLKCMU_BUSMC_BOOST, "gout_clkcmu_busmc_boost",
  698. "dout_cmu_boost", CLK_CON_GAT_CLKCMU_CMU_BUSMC_BOOST, 21, 0, 0),
  699. GATE(GOUT_CLKCMU_MIF_BOOST, "gout_clkcmu_mif_boost", "dout_cmu_boost",
  700. CLK_CON_GAT_CLKCMU_CMU_MIF_BOOST, 21, 0, 0),
  701. /* ACC */
  702. GATE(GOUT_CLKCMU_ACC_BUS, "gout_clkcmu_acc_bus", "mout_clkcmu_acc_bus",
  703. CLK_CON_GAT_GATE_CLKCMU_ACC_BUS, 21, 0, 0),
  704. /* APM */
  705. GATE(GOUT_CLKCMU_APM_BUS, "gout_clkcmu_apm_bus", "mout_clkcmu_apm_bus",
  706. CLK_CON_GAT_GATE_CLKCMU_APM_BUS, 21, CLK_IGNORE_UNUSED, 0),
  707. /* AUD */
  708. GATE(GOUT_CLKCMU_AUD_CPU, "gout_clkcmu_aud_cpu", "mout_clkcmu_aud_cpu",
  709. CLK_CON_GAT_GATE_CLKCMU_AUD_CPU, 21, 0, 0),
  710. GATE(GOUT_CLKCMU_AUD_BUS, "gout_clkcmu_aud_bus", "mout_clkcmu_aud_bus",
  711. CLK_CON_GAT_GATE_CLKCMU_AUD_BUS, 21, 0, 0),
  712. /* BUSC */
  713. GATE(GOUT_CLKCMU_BUSC_BUS, "gout_clkcmu_busc_bus",
  714. "mout_clkcmu_busc_bus", CLK_CON_GAT_GATE_CLKCMU_BUSC_BUS, 21,
  715. CLK_IS_CRITICAL, 0),
  716. /* BUSMC */
  717. GATE(GOUT_CLKCMU_BUSMC_BUS, "gout_clkcmu_busmc_bus",
  718. "mout_clkcmu_busmc_bus", CLK_CON_GAT_GATE_CLKCMU_BUSMC_BUS, 21,
  719. CLK_IS_CRITICAL, 0),
  720. /* CORE */
  721. GATE(GOUT_CLKCMU_CORE_BUS, "gout_clkcmu_core_bus",
  722. "mout_clkcmu_core_bus", CLK_CON_GAT_GATE_CLKCMU_CORE_BUS,
  723. 21, 0, 0),
  724. /* CPUCL0 */
  725. GATE(GOUT_CLKCMU_CPUCL0_SWITCH, "gout_clkcmu_cpucl0_switch",
  726. "mout_clkcmu_cpucl0_switch",
  727. CLK_CON_GAT_GATE_CLKCMU_CPUCL0_SWITCH, 21, CLK_IGNORE_UNUSED, 0),
  728. GATE(GOUT_CLKCMU_CPUCL0_CLUSTER, "gout_clkcmu_cpucl0_cluster",
  729. "mout_clkcmu_cpucl0_cluster",
  730. CLK_CON_GAT_GATE_CLKCMU_CPUCL0_CLUSTER, 21, CLK_IGNORE_UNUSED, 0),
  731. /* CPUCL1 */
  732. GATE(GOUT_CLKCMU_CPUCL1_SWITCH, "gout_clkcmu_cpucl1_switch",
  733. "mout_clkcmu_cpucl1_switch",
  734. CLK_CON_GAT_GATE_CLKCMU_CPUCL1_SWITCH, 21, CLK_IGNORE_UNUSED, 0),
  735. GATE(GOUT_CLKCMU_CPUCL1_CLUSTER, "gout_clkcmu_cpucl1_cluster",
  736. "mout_clkcmu_cpucl1_cluster",
  737. CLK_CON_GAT_GATE_CLKCMU_CPUCL1_CLUSTER, 21, CLK_IGNORE_UNUSED, 0),
  738. /* DPTX */
  739. GATE(GOUT_CLKCMU_DPTX_BUS, "gout_clkcmu_dptx_bus",
  740. "mout_clkcmu_dptx_bus", CLK_CON_GAT_GATE_CLKCMU_DPTX_BUS,
  741. 21, 0, 0),
  742. GATE(GOUT_CLKCMU_DPTX_DPGTC, "gout_clkcmu_dptx_dpgtc",
  743. "mout_clkcmu_dptx_dpgtc", CLK_CON_GAT_GATE_CLKCMU_DPTX_DPGTC,
  744. 21, 0, 0),
  745. /* DPUM */
  746. GATE(GOUT_CLKCMU_DPUM_BUS, "gout_clkcmu_dpum_bus",
  747. "mout_clkcmu_dpum_bus", CLK_CON_GAT_GATE_CLKCMU_DPUM_BUS,
  748. 21, 0, 0),
  749. /* DPUS */
  750. GATE(GOUT_CLKCMU_DPUS0_BUS, "gout_clkcmu_dpus0_bus",
  751. "mout_clkcmu_dpus0_bus", CLK_CON_GAT_GATE_CLKCMU_DPUS0_BUS,
  752. 21, 0, 0),
  753. GATE(GOUT_CLKCMU_DPUS1_BUS, "gout_clkcmu_dpus1_bus",
  754. "mout_clkcmu_dpus1_bus", CLK_CON_GAT_GATE_CLKCMU_DPUS1_BUS,
  755. 21, 0, 0),
  756. /* FSYS0 */
  757. GATE(GOUT_CLKCMU_FSYS0_BUS, "gout_clkcmu_fsys0_bus",
  758. "mout_clkcmu_fsys0_bus", CLK_CON_GAT_GATE_CLKCMU_FSYS0_BUS,
  759. 21, 0, 0),
  760. GATE(GOUT_CLKCMU_FSYS0_PCIE, "gout_clkcmu_fsys0_pcie",
  761. "mout_clkcmu_fsys0_pcie", CLK_CON_GAT_GATE_CLKCMU_FSYS0_PCIE,
  762. 21, 0, 0),
  763. /* FSYS1 */
  764. GATE(GOUT_CLKCMU_FSYS1_BUS, "gout_clkcmu_fsys1_bus",
  765. "mout_clkcmu_fsys1_bus", CLK_CON_GAT_GATE_CLKCMU_FSYS1_BUS,
  766. 21, 0, 0),
  767. GATE(GOUT_CLKCMU_FSYS1_USBDRD, "gout_clkcmu_fsys1_usbdrd",
  768. "mout_clkcmu_fsys1_usbdrd", CLK_CON_GAT_GATE_CLKCMU_FSYS1_USBDRD,
  769. 21, 0, 0),
  770. GATE(GOUT_CLKCMU_FSYS1_MMC_CARD, "gout_clkcmu_fsys1_mmc_card",
  771. "mout_clkcmu_fsys1_mmc_card",
  772. CLK_CON_GAT_GATE_CLKCMU_FSYS1_MMC_CARD, 21, 0, 0),
  773. /* FSYS2 */
  774. GATE(GOUT_CLKCMU_FSYS2_BUS, "gout_clkcmu_fsys2_bus",
  775. "mout_clkcmu_fsys2_bus", CLK_CON_GAT_GATE_CLKCMU_FSYS2_BUS,
  776. 21, 0, 0),
  777. GATE(GOUT_CLKCMU_FSYS2_UFS_EMBD, "gout_clkcmu_fsys2_ufs_embd",
  778. "mout_clkcmu_fsys2_ufs_embd",
  779. CLK_CON_GAT_GATE_CLKCMU_FSYS2_UFS_EMBD, 21, 0, 0),
  780. GATE(GOUT_CLKCMU_FSYS2_ETHERNET, "gout_clkcmu_fsys2_ethernet",
  781. "mout_clkcmu_fsys2_ethernet",
  782. CLK_CON_GAT_GATE_CLKCMU_FSYS2_ETHERNET, 21, 0, 0),
  783. /* G2D */
  784. GATE(GOUT_CLKCMU_G2D_G2D, "gout_clkcmu_g2d_g2d",
  785. "mout_clkcmu_g2d_g2d", CLK_CON_GAT_GATE_CLKCMU_G2D_G2D, 21, 0, 0),
  786. GATE(GOUT_CLKCMU_G2D_MSCL, "gout_clkcmu_g2d_mscl",
  787. "mout_clkcmu_g2d_mscl", CLK_CON_GAT_GATE_CLKCMU_G2D_MSCL,
  788. 21, 0, 0),
  789. /* G3D0 */
  790. GATE(GOUT_CLKCMU_G3D00_SWITCH, "gout_clkcmu_g3d00_switch",
  791. "mout_clkcmu_g3d00_switch", CLK_CON_GAT_GATE_CLKCMU_G3D00_SWITCH,
  792. 21, 0, 0),
  793. GATE(GOUT_CLKCMU_G3D01_SWITCH, "gout_clkcmu_g3d01_switch",
  794. "mout_clkcmu_g3d01_switch", CLK_CON_GAT_GATE_CLKCMU_G3D01_SWITCH,
  795. 21, 0, 0),
  796. /* G3D1 */
  797. GATE(GOUT_CLKCMU_G3D1_SWITCH, "gout_clkcmu_g3d1_switch",
  798. "mout_clkcmu_g3d1_switch", CLK_CON_GAT_GATE_CLKCMU_G3D1_SWITCH,
  799. 21, 0, 0),
  800. /* ISPB */
  801. GATE(GOUT_CLKCMU_ISPB_BUS, "gout_clkcmu_ispb_bus",
  802. "mout_clkcmu_ispb_bus", CLK_CON_GAT_GATE_CLKCMU_ISPB_BUS,
  803. 21, 0, 0),
  804. /* MFC */
  805. GATE(GOUT_CLKCMU_MFC_MFC, "gout_clkcmu_mfc_mfc", "mout_clkcmu_mfc_mfc",
  806. CLK_CON_GAT_GATE_CLKCMU_MFC_MFC, 21, 0, 0),
  807. GATE(GOUT_CLKCMU_MFC_WFD, "gout_clkcmu_mfc_wfd", "mout_clkcmu_mfc_wfd",
  808. CLK_CON_GAT_GATE_CLKCMU_MFC_WFD, 21, 0, 0),
  809. /* MIF */
  810. GATE(GOUT_CLKCMU_MIF_SWITCH, "gout_clkcmu_mif_switch",
  811. "mout_clkcmu_mif_switch", CLK_CON_GAT_GATE_CLKCMU_MIF_SWITCH,
  812. 21, CLK_IGNORE_UNUSED, 0),
  813. GATE(GOUT_CLKCMU_MIF_BUSP, "gout_clkcmu_mif_busp",
  814. "mout_clkcmu_mif_busp", CLK_CON_GAT_GATE_CLKCMU_MIF_BUSP,
  815. 21, CLK_IGNORE_UNUSED, 0),
  816. /* NPU */
  817. GATE(GOUT_CLKCMU_NPU_BUS, "gout_clkcmu_npu_bus", "mout_clkcmu_npu_bus",
  818. CLK_CON_GAT_GATE_CLKCMU_NPU_BUS, 21, 0, 0),
  819. /* PERIC0 */
  820. GATE(GOUT_CLKCMU_PERIC0_BUS, "gout_clkcmu_peric0_bus",
  821. "mout_clkcmu_peric0_bus", CLK_CON_GAT_GATE_CLKCMU_PERIC0_BUS,
  822. 21, 0, 0),
  823. GATE(GOUT_CLKCMU_PERIC0_IP, "gout_clkcmu_peric0_ip",
  824. "mout_clkcmu_peric0_ip", CLK_CON_GAT_GATE_CLKCMU_PERIC0_IP,
  825. 21, 0, 0),
  826. /* PERIC1 */
  827. GATE(GOUT_CLKCMU_PERIC1_BUS, "gout_clkcmu_peric1_bus",
  828. "mout_clkcmu_peric1_bus", CLK_CON_GAT_GATE_CLKCMU_PERIC1_BUS,
  829. 21, 0, 0),
  830. GATE(GOUT_CLKCMU_PERIC1_IP, "gout_clkcmu_peric1_ip",
  831. "mout_clkcmu_peric1_ip", CLK_CON_GAT_GATE_CLKCMU_PERIC1_IP,
  832. 21, 0, 0),
  833. /* PERIS */
  834. GATE(GOUT_CLKCMU_PERIS_BUS, "gout_clkcmu_peris_bus",
  835. "mout_clkcmu_peris_bus", CLK_CON_GAT_GATE_CLKCMU_PERIS_BUS,
  836. 21, CLK_IGNORE_UNUSED, 0),
  837. };
  838. static const struct samsung_cmu_info top_cmu_info __initconst = {
  839. .pll_clks = top_pll_clks,
  840. .nr_pll_clks = ARRAY_SIZE(top_pll_clks),
  841. .mux_clks = top_mux_clks,
  842. .nr_mux_clks = ARRAY_SIZE(top_mux_clks),
  843. .div_clks = top_div_clks,
  844. .nr_div_clks = ARRAY_SIZE(top_div_clks),
  845. .fixed_factor_clks = top_fixed_factor_clks,
  846. .nr_fixed_factor_clks = ARRAY_SIZE(top_fixed_factor_clks),
  847. .gate_clks = top_gate_clks,
  848. .nr_gate_clks = ARRAY_SIZE(top_gate_clks),
  849. .nr_clk_ids = TOP_NR_CLK,
  850. .clk_regs = top_clk_regs,
  851. .nr_clk_regs = ARRAY_SIZE(top_clk_regs),
  852. };
  853. static void __init exynosautov9_cmu_top_init(struct device_node *np)
  854. {
  855. exynos_arm64_register_cmu(NULL, np, &top_cmu_info);
  856. }
  857. /* Register CMU_TOP early, as it's a dependency for other early domains */
  858. CLK_OF_DECLARE(exynosautov9_cmu_top, "samsung,exynosautov9-cmu-top",
  859. exynosautov9_cmu_top_init);
  860. /* ---- CMU_BUSMC ---------------------------------------------------------- */
  861. /* Register Offset definitions for CMU_BUSMC (0x1b200000) */
  862. #define PLL_CON0_MUX_CLKCMU_BUSMC_BUS_USER 0x0600
  863. #define CLK_CON_DIV_DIV_CLK_BUSMC_BUSP 0x1800
  864. #define CLK_CON_GAT_GOUT_BLK_BUSMC_UID_QE_PDMA0_IPCLKPORT_PCLK 0x2078
  865. #define CLK_CON_GAT_GOUT_BLK_BUSMC_UID_QE_SPDMA_IPCLKPORT_PCLK 0x2080
  866. static const unsigned long busmc_clk_regs[] __initconst = {
  867. PLL_CON0_MUX_CLKCMU_BUSMC_BUS_USER,
  868. CLK_CON_DIV_DIV_CLK_BUSMC_BUSP,
  869. CLK_CON_GAT_GOUT_BLK_BUSMC_UID_QE_PDMA0_IPCLKPORT_PCLK,
  870. CLK_CON_GAT_GOUT_BLK_BUSMC_UID_QE_SPDMA_IPCLKPORT_PCLK,
  871. };
  872. /* List of parent clocks for Muxes in CMU_BUSMC */
  873. PNAME(mout_busmc_bus_user_p) = { "oscclk", "dout_clkcmu_busmc_bus" };
  874. static const struct samsung_mux_clock busmc_mux_clks[] __initconst = {
  875. MUX(CLK_MOUT_BUSMC_BUS_USER, "mout_busmc_bus_user",
  876. mout_busmc_bus_user_p, PLL_CON0_MUX_CLKCMU_BUSMC_BUS_USER, 4, 1),
  877. };
  878. static const struct samsung_div_clock busmc_div_clks[] __initconst = {
  879. DIV(CLK_DOUT_BUSMC_BUSP, "dout_busmc_busp", "mout_busmc_bus_user",
  880. CLK_CON_DIV_DIV_CLK_BUSMC_BUSP, 0, 3),
  881. };
  882. static const struct samsung_gate_clock busmc_gate_clks[] __initconst = {
  883. GATE(CLK_GOUT_BUSMC_PDMA0_PCLK, "gout_busmc_pdma0_pclk",
  884. "dout_busmc_busp",
  885. CLK_CON_GAT_GOUT_BLK_BUSMC_UID_QE_PDMA0_IPCLKPORT_PCLK, 21,
  886. 0, 0),
  887. GATE(CLK_GOUT_BUSMC_SPDMA_PCLK, "gout_busmc_spdma_pclk",
  888. "dout_busmc_busp",
  889. CLK_CON_GAT_GOUT_BLK_BUSMC_UID_QE_SPDMA_IPCLKPORT_PCLK, 21,
  890. 0, 0),
  891. };
  892. static const struct samsung_cmu_info busmc_cmu_info __initconst = {
  893. .mux_clks = busmc_mux_clks,
  894. .nr_mux_clks = ARRAY_SIZE(busmc_mux_clks),
  895. .div_clks = busmc_div_clks,
  896. .nr_div_clks = ARRAY_SIZE(busmc_div_clks),
  897. .gate_clks = busmc_gate_clks,
  898. .nr_gate_clks = ARRAY_SIZE(busmc_gate_clks),
  899. .nr_clk_ids = BUSMC_NR_CLK,
  900. .clk_regs = busmc_clk_regs,
  901. .nr_clk_regs = ARRAY_SIZE(busmc_clk_regs),
  902. .clk_name = "dout_clkcmu_busmc_bus",
  903. };
  904. /* ---- CMU_CORE ----------------------------------------------------------- */
  905. /* Register Offset definitions for CMU_CORE (0x1b030000) */
  906. #define PLL_CON0_MUX_CLKCMU_CORE_BUS_USER 0x0600
  907. #define CLK_CON_MUX_MUX_CORE_CMUREF 0x1000
  908. #define CLK_CON_DIV_DIV_CLK_CORE_BUSP 0x1800
  909. #define CLK_CON_GAT_CLK_BLK_CORE_UID_CCI_IPCLKPORT_CLK 0x2000
  910. #define CLK_CON_GAT_CLK_BLK_CORE_UID_CCI_IPCLKPORT_PCLK 0x2004
  911. #define CLK_CON_GAT_CLK_BLK_CORE_UID_CORE_CMU_CORE_IPCLKPORT_PCLK 0x2008
  912. static const unsigned long core_clk_regs[] __initconst = {
  913. PLL_CON0_MUX_CLKCMU_CORE_BUS_USER,
  914. CLK_CON_MUX_MUX_CORE_CMUREF,
  915. CLK_CON_DIV_DIV_CLK_CORE_BUSP,
  916. CLK_CON_GAT_CLK_BLK_CORE_UID_CCI_IPCLKPORT_CLK,
  917. CLK_CON_GAT_CLK_BLK_CORE_UID_CCI_IPCLKPORT_PCLK,
  918. CLK_CON_GAT_CLK_BLK_CORE_UID_CORE_CMU_CORE_IPCLKPORT_PCLK,
  919. };
  920. /* List of parent clocks for Muxes in CMU_CORE */
  921. PNAME(mout_core_bus_user_p) = { "oscclk", "dout_clkcmu_core_bus" };
  922. static const struct samsung_mux_clock core_mux_clks[] __initconst = {
  923. MUX(CLK_MOUT_CORE_BUS_USER, "mout_core_bus_user", mout_core_bus_user_p,
  924. PLL_CON0_MUX_CLKCMU_CORE_BUS_USER, 4, 1),
  925. };
  926. static const struct samsung_div_clock core_div_clks[] __initconst = {
  927. DIV(CLK_DOUT_CORE_BUSP, "dout_core_busp", "mout_core_bus_user",
  928. CLK_CON_DIV_DIV_CLK_CORE_BUSP, 0, 3),
  929. };
  930. static const struct samsung_gate_clock core_gate_clks[] __initconst = {
  931. GATE(CLK_GOUT_CORE_CCI_CLK, "gout_core_cci_clk", "mout_core_bus_user",
  932. CLK_CON_GAT_CLK_BLK_CORE_UID_CCI_IPCLKPORT_CLK, 21,
  933. CLK_IS_CRITICAL, 0),
  934. GATE(CLK_GOUT_CORE_CCI_PCLK, "gout_core_cci_pclk", "dout_core_busp",
  935. CLK_CON_GAT_CLK_BLK_CORE_UID_CCI_IPCLKPORT_PCLK, 21,
  936. CLK_IS_CRITICAL, 0),
  937. GATE(CLK_GOUT_CORE_CMU_CORE_PCLK, "gout_core_cmu_core_pclk",
  938. "dout_core_busp",
  939. CLK_CON_GAT_CLK_BLK_CORE_UID_CORE_CMU_CORE_IPCLKPORT_PCLK, 21,
  940. CLK_IS_CRITICAL, 0),
  941. };
  942. static const struct samsung_cmu_info core_cmu_info __initconst = {
  943. .mux_clks = core_mux_clks,
  944. .nr_mux_clks = ARRAY_SIZE(core_mux_clks),
  945. .div_clks = core_div_clks,
  946. .nr_div_clks = ARRAY_SIZE(core_div_clks),
  947. .gate_clks = core_gate_clks,
  948. .nr_gate_clks = ARRAY_SIZE(core_gate_clks),
  949. .nr_clk_ids = CORE_NR_CLK,
  950. .clk_regs = core_clk_regs,
  951. .nr_clk_regs = ARRAY_SIZE(core_clk_regs),
  952. .clk_name = "dout_clkcmu_core_bus",
  953. };
  954. /* ---- CMU_FSYS0 ---------------------------------------------------------- */
  955. /* Register Offset definitions for CMU_FSYS2 (0x17700000) */
  956. #define PLL_CON0_MUX_CLKCMU_FSYS0_BUS_USER 0x0600
  957. #define PLL_CON0_MUX_CLKCMU_FSYS0_PCIE_USER 0x0610
  958. #define CLK_CON_GAT_CLK_BLK_FSYS0_UID_FSYS0_CMU_FSYS0_IPCLKPORT_PCLK 0x2000
  959. #define CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_PHY_REFCLK_IN 0x2004
  960. #define CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_PHY_REFCLK_IN 0x2008
  961. #define CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_PHY_REFCLK_IN 0x200c
  962. #define CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_PHY_REFCLK_IN 0x2010
  963. #define CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_PHY_REFCLK_IN 0x2014
  964. #define CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_PHY_REFCLK_IN 0x2018
  965. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_DBI_ACLK 0x205c
  966. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_MSTR_ACLK 0x2060
  967. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_SLV_ACLK 0x2064
  968. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_DBI_ACLK 0x206c
  969. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_MSTR_ACLK 0x2070
  970. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_SLV_ACLK 0x2074
  971. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_PIPE_CLK 0x207c
  972. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_DBI_ACLK 0x2084
  973. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_MSTR_ACLK 0x2088
  974. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_SLV_ACLK 0x208c
  975. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_DBI_ACLK 0x2094
  976. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_MSTR_ACLK 0x2098
  977. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_SLV_ACLK 0x209c
  978. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_PIPE_CLK 0x20a4
  979. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_DBI_ACLK 0x20ac
  980. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_MSTR_ACLK 0x20b0
  981. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_SLV_ACLK 0x20b4
  982. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_DBI_ACLK 0x20bc
  983. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_MSTR_ACLK 0x20c0
  984. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_SLV_ACLK 0x20c4
  985. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_PIPE_CLK 0x20cc
  986. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3A_2L0_CLK 0x20d4
  987. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3A_2L1_CLK 0x20d8
  988. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3A_4L_CLK 0x20dc
  989. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3B_2L0_CLK 0x20e0
  990. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3B_2L1_CLK 0x20e4
  991. #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3B_4L_CLK 0x20e8
  992. static const unsigned long fsys0_clk_regs[] __initconst = {
  993. PLL_CON0_MUX_CLKCMU_FSYS0_BUS_USER,
  994. PLL_CON0_MUX_CLKCMU_FSYS0_PCIE_USER,
  995. CLK_CON_GAT_CLK_BLK_FSYS0_UID_FSYS0_CMU_FSYS0_IPCLKPORT_PCLK,
  996. CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_PHY_REFCLK_IN,
  997. CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_PHY_REFCLK_IN,
  998. CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_PHY_REFCLK_IN,
  999. CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_PHY_REFCLK_IN,
  1000. CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_PHY_REFCLK_IN,
  1001. CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_PHY_REFCLK_IN,
  1002. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_DBI_ACLK,
  1003. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_MSTR_ACLK,
  1004. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_SLV_ACLK,
  1005. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_DBI_ACLK,
  1006. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_MSTR_ACLK,
  1007. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_SLV_ACLK,
  1008. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_PIPE_CLK,
  1009. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_DBI_ACLK,
  1010. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_MSTR_ACLK,
  1011. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_SLV_ACLK,
  1012. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_DBI_ACLK,
  1013. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_MSTR_ACLK,
  1014. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_SLV_ACLK,
  1015. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_PIPE_CLK,
  1016. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_DBI_ACLK,
  1017. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_MSTR_ACLK,
  1018. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_SLV_ACLK,
  1019. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_DBI_ACLK,
  1020. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_MSTR_ACLK,
  1021. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_SLV_ACLK,
  1022. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_PIPE_CLK,
  1023. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3A_2L0_CLK,
  1024. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3A_2L1_CLK,
  1025. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3A_4L_CLK,
  1026. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3B_2L0_CLK,
  1027. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3B_2L1_CLK,
  1028. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3B_4L_CLK,
  1029. };
  1030. /* List of parent clocks for Muxes in CMU_FSYS0 */
  1031. PNAME(mout_fsys0_bus_user_p) = { "oscclk", "dout_clkcmu_fsys0_bus" };
  1032. PNAME(mout_fsys0_pcie_user_p) = { "oscclk", "dout_clkcmu_fsys0_pcie" };
  1033. static const struct samsung_mux_clock fsys0_mux_clks[] __initconst = {
  1034. MUX(CLK_MOUT_FSYS0_BUS_USER, "mout_fsys0_bus_user",
  1035. mout_fsys0_bus_user_p, PLL_CON0_MUX_CLKCMU_FSYS0_BUS_USER, 4, 1),
  1036. MUX(CLK_MOUT_FSYS0_PCIE_USER, "mout_fsys0_pcie_user",
  1037. mout_fsys0_pcie_user_p, PLL_CON0_MUX_CLKCMU_FSYS0_PCIE_USER, 4, 1),
  1038. };
  1039. static const struct samsung_gate_clock fsys0_gate_clks[] __initconst = {
  1040. GATE(CLK_GOUT_FSYS0_BUS_PCLK, "gout_fsys0_bus_pclk",
  1041. "mout_fsys0_bus_user",
  1042. CLK_CON_GAT_CLK_BLK_FSYS0_UID_FSYS0_CMU_FSYS0_IPCLKPORT_PCLK,
  1043. 21, CLK_IGNORE_UNUSED, 0),
  1044. /* Gen3 2L0 */
  1045. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L0_X1_REFCLK,
  1046. "gout_fsys0_pcie_gen3_2l0_x1_refclk", "mout_fsys0_pcie_user",
  1047. CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_PHY_REFCLK_IN,
  1048. 21, 0, 0),
  1049. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L0_X2_REFCLK,
  1050. "gout_fsys0_pcie_gen3_2l0_x2_refclk", "mout_fsys0_pcie_user",
  1051. CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_PHY_REFCLK_IN,
  1052. 21, 0, 0),
  1053. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L0_X1_DBI_ACLK,
  1054. "gout_fsys0_pcie_gen3_2l0_x1_dbi_aclk", "mout_fsys0_bus_user",
  1055. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_DBI_ACLK,
  1056. 21, 0, 0),
  1057. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L0_X1_MSTR_ACLK,
  1058. "gout_fsys0_pcie_gen3_2l0_x1_mstr_aclk", "mout_fsys0_bus_user",
  1059. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_MSTR_ACLK,
  1060. 21, 0, 0),
  1061. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L0_X1_SLV_ACLK,
  1062. "gout_fsys0_pcie_gen3_2l0_x1_slv_aclk", "mout_fsys0_bus_user",
  1063. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_SLV_ACLK,
  1064. 21, 0, 0),
  1065. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L0_X2_DBI_ACLK,
  1066. "gout_fsys0_pcie_gen3_2l0_x2_dbi_aclk", "mout_fsys0_bus_user",
  1067. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_DBI_ACLK,
  1068. 21, 0, 0),
  1069. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L0_X2_MSTR_ACLK,
  1070. "gout_fsys0_pcie_gen3_2l0_x2_mstr_aclk", "mout_fsys0_bus_user",
  1071. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_MSTR_ACLK,
  1072. 21, 0, 0),
  1073. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L0_X2_SLV_ACLK,
  1074. "gout_fsys0_pcie_gen3_2l0_x2_slv_aclk", "mout_fsys0_bus_user",
  1075. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_SLV_ACLK,
  1076. 21, 0, 0),
  1077. GATE(CLK_GOUT_FSYS0_PCIE_GEN3A_2L0_CLK,
  1078. "gout_fsys0_pcie_gen3a_2l0_clk", "mout_fsys0_pcie_user",
  1079. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3A_2L0_CLK,
  1080. 21, 0, 0),
  1081. GATE(CLK_GOUT_FSYS0_PCIE_GEN3B_2L0_CLK,
  1082. "gout_fsys0_pcie_gen3b_2l0_clk", "mout_fsys0_pcie_user",
  1083. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3B_2L0_CLK,
  1084. 21, 0, 0),
  1085. /* Gen3 2L1 */
  1086. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L1_X1_REFCLK,
  1087. "gout_fsys0_pcie_gen3_2l1_x1_refclk", "mout_fsys0_pcie_user",
  1088. CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_PHY_REFCLK_IN,
  1089. 21, 0, 0),
  1090. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L1_X2_REFCLK,
  1091. "gout_fsys0_pcie_gen3_2l1_x2_refclk", "mout_fsys0_pcie_user",
  1092. CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_PHY_REFCLK_IN,
  1093. 21, 0, 0),
  1094. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L1_X1_DBI_ACLK,
  1095. "gout_fsys0_pcie_gen3_2l1_x1_dbi_aclk", "mout_fsys0_bus_user",
  1096. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_DBI_ACLK,
  1097. 21, 0, 0),
  1098. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L1_X1_MSTR_ACLK,
  1099. "gout_fsys0_pcie_gen3_2l1_x1_mstr_aclk", "mout_fsys0_bus_user",
  1100. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_MSTR_ACLK,
  1101. 21, 0, 0),
  1102. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L1_X1_SLV_ACLK,
  1103. "gout_fsys0_pcie_gen3_2l1_x1_slv_aclk", "mout_fsys0_bus_user",
  1104. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_SLV_ACLK,
  1105. 21, 0, 0),
  1106. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L1_X2_DBI_ACLK,
  1107. "gout_fsys0_pcie_gen3_2l1_x2_dbi_aclk", "mout_fsys0_bus_user",
  1108. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_DBI_ACLK,
  1109. 21, 0, 0),
  1110. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L1_X2_MSTR_ACLK,
  1111. "gout_fsys0_pcie_gen3_2l1_x2_mstr_aclk", "mout_fsys0_bus_user",
  1112. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_MSTR_ACLK,
  1113. 21, 0, 0),
  1114. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L1_X2_SLV_ACLK,
  1115. "gout_fsys0_pcie_gen3_2l1_x2_slv_aclk", "mout_fsys0_bus_user",
  1116. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_SLV_ACLK,
  1117. 21, 0, 0),
  1118. GATE(CLK_GOUT_FSYS0_PCIE_GEN3A_2L1_CLK,
  1119. "gout_fsys0_pcie_gen3a_2l1_clk", "mout_fsys0_pcie_user",
  1120. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3A_2L1_CLK,
  1121. 21, 0, 0),
  1122. GATE(CLK_GOUT_FSYS0_PCIE_GEN3B_2L1_CLK,
  1123. "gout_fsys0_pcie_gen3b_2l1_clk", "mout_fsys0_pcie_user",
  1124. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3B_2L1_CLK,
  1125. 21, 0, 0),
  1126. /* Gen3 4L */
  1127. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_4L_X2_REFCLK,
  1128. "gout_fsys0_pcie_gen3_4l_x2_refclk", "mout_fsys0_pcie_user",
  1129. CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_PHY_REFCLK_IN,
  1130. 21, 0, 0),
  1131. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_4L_X4_REFCLK,
  1132. "gout_fsys0_pcie_gen3_4l_x4_refclk", "mout_fsys0_pcie_user",
  1133. CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_PHY_REFCLK_IN,
  1134. 21, 0, 0),
  1135. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_4L_X2_DBI_ACLK,
  1136. "gout_fsys0_pcie_gen3_4l_x2_dbi_aclk", "mout_fsys0_bus_user",
  1137. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_DBI_ACLK,
  1138. 21, 0, 0),
  1139. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_4L_X2_MSTR_ACLK,
  1140. "gout_fsys0_pcie_gen3_4l_x2_mstr_aclk", "mout_fsys0_bus_user",
  1141. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_MSTR_ACLK,
  1142. 21, 0, 0),
  1143. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_4L_X2_SLV_ACLK,
  1144. "gout_fsys0_pcie_gen3_4l_x2_slv_aclk", "mout_fsys0_bus_user",
  1145. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_SLV_ACLK,
  1146. 21, 0, 0),
  1147. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_4L_X4_DBI_ACLK,
  1148. "gout_fsys0_pcie_gen3_4l_x4_dbi_aclk", "mout_fsys0_bus_user",
  1149. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_DBI_ACLK,
  1150. 21, 0, 0),
  1151. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_4L_X4_MSTR_ACLK,
  1152. "gout_fsys0_pcie_gen3_4l_x4_mstr_aclk", "mout_fsys0_bus_user",
  1153. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_MSTR_ACLK,
  1154. 21, 0, 0),
  1155. GATE(CLK_GOUT_FSYS0_PCIE_GEN3_4L_X4_SLV_ACLK,
  1156. "gout_fsys0_pcie_gen3_4l_x4_slv_aclk", "mout_fsys0_bus_user",
  1157. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_SLV_ACLK,
  1158. 21, 0, 0),
  1159. GATE(CLK_GOUT_FSYS0_PCIE_GEN3A_4L_CLK,
  1160. "gout_fsys0_pcie_gen3a_4l_clk", "mout_fsys0_pcie_user",
  1161. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3A_4L_CLK,
  1162. 21, 0, 0),
  1163. GATE(CLK_GOUT_FSYS0_PCIE_GEN3B_4L_CLK,
  1164. "gout_fsys0_pcie_gen3b_4l_clk", "mout_fsys0_pcie_user",
  1165. CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3B_4L_CLK,
  1166. 21, 0, 0),
  1167. };
  1168. static const struct samsung_cmu_info fsys0_cmu_info __initconst = {
  1169. .mux_clks = fsys0_mux_clks,
  1170. .nr_mux_clks = ARRAY_SIZE(fsys0_mux_clks),
  1171. .gate_clks = fsys0_gate_clks,
  1172. .nr_gate_clks = ARRAY_SIZE(fsys0_gate_clks),
  1173. .nr_clk_ids = FSYS0_NR_CLK,
  1174. .clk_regs = fsys0_clk_regs,
  1175. .nr_clk_regs = ARRAY_SIZE(fsys0_clk_regs),
  1176. .clk_name = "dout_clkcmu_fsys0_bus",
  1177. };
  1178. /* ---- CMU_FSYS1 ---------------------------------------------------------- */
  1179. /* Register Offset definitions for CMU_FSYS1 (0x17040000) */
  1180. #define PLL_LOCKTIME_PLL_MMC 0x0000
  1181. #define PLL_CON0_PLL_MMC 0x0100
  1182. #define PLL_CON3_PLL_MMC 0x010c
  1183. #define PLL_CON0_MUX_CLKCMU_FSYS1_BUS_USER 0x0600
  1184. #define PLL_CON0_MUX_CLKCMU_FSYS1_MMC_CARD_USER 0x0610
  1185. #define PLL_CON0_MUX_CLKCMU_FSYS1_USBDRD_USER 0x0620
  1186. #define CLK_CON_MUX_MUX_CLK_FSYS1_MMC_CARD 0x1000
  1187. #define CLK_CON_DIV_DIV_CLK_FSYS1_MMC_CARD 0x1800
  1188. #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_FSYS1_CMU_FSYS1_IPCLKPORT_PCLK 0x2018
  1189. #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_MMC_CARD_IPCLKPORT_SDCLKIN 0x202c
  1190. #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_MMC_CARD_IPCLKPORT_I_ACLK 0x2028
  1191. #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_USB20DRD_0_REF_CLK_40 0x204c
  1192. #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_USB20DRD_1_REF_CLK_40 0x2058
  1193. #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_USB30DRD_0_REF_CLK_40 0x2064
  1194. #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_USB30DRD_1_REF_CLK_40 0x2070
  1195. #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_US_D_USB2_0_IPCLKPORT_ACLK 0x2074
  1196. #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_US_D_USB2_1_IPCLKPORT_ACLK 0x2078
  1197. #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_US_D_USB3_0_IPCLKPORT_ACLK 0x207c
  1198. #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_US_D_USB3_1_IPCLKPORT_ACLK 0x2080
  1199. static const unsigned long fsys1_clk_regs[] __initconst = {
  1200. PLL_CON0_MUX_CLKCMU_FSYS1_BUS_USER,
  1201. };
  1202. static const struct samsung_pll_clock fsys1_pll_clks[] __initconst = {
  1203. PLL(pll_0831x, FOUT_MMC_PLL, "fout_mmc_pll", "oscclk",
  1204. PLL_LOCKTIME_PLL_MMC, PLL_CON3_PLL_MMC, NULL),
  1205. };
  1206. /* List of parent clocks for Muxes in CMU_FSYS1 */
  1207. PNAME(mout_fsys1_bus_user_p) = { "oscclk", "dout_clkcmu_fsys1_bus" };
  1208. PNAME(mout_fsys1_mmc_pll_p) = { "oscclk", "fout_mmc_pll" };
  1209. PNAME(mout_fsys1_mmc_card_user_p) = { "oscclk", "gout_clkcmu_fsys1_mmc_card" };
  1210. PNAME(mout_fsys1_usbdrd_user_p) = { "oscclk", "dout_clkcmu_fsys1_usbdrd" };
  1211. PNAME(mout_fsys1_mmc_card_p) = { "mout_fsys1_mmc_card_user",
  1212. "mout_fsys1_mmc_pll" };
  1213. static const struct samsung_mux_clock fsys1_mux_clks[] __initconst = {
  1214. MUX(CLK_MOUT_FSYS1_BUS_USER, "mout_fsys1_bus_user",
  1215. mout_fsys1_bus_user_p, PLL_CON0_MUX_CLKCMU_FSYS1_BUS_USER, 4, 1),
  1216. MUX(CLK_MOUT_FSYS1_MMC_PLL, "mout_fsys1_mmc_pll", mout_fsys1_mmc_pll_p,
  1217. PLL_CON0_PLL_MMC, 4, 1),
  1218. MUX(CLK_MOUT_FSYS1_MMC_CARD_USER, "mout_fsys1_mmc_card_user",
  1219. mout_fsys1_mmc_card_user_p, PLL_CON0_MUX_CLKCMU_FSYS1_MMC_CARD_USER,
  1220. 4, 1),
  1221. MUX(CLK_MOUT_FSYS1_USBDRD_USER, "mout_fsys1_usbdrd_user",
  1222. mout_fsys1_usbdrd_user_p, PLL_CON0_MUX_CLKCMU_FSYS1_USBDRD_USER,
  1223. 4, 1),
  1224. MUX(CLK_MOUT_FSYS1_MMC_CARD, "mout_fsys1_mmc_card",
  1225. mout_fsys1_mmc_card_p, CLK_CON_MUX_MUX_CLK_FSYS1_MMC_CARD,
  1226. 0, 1),
  1227. };
  1228. static const struct samsung_div_clock fsys1_div_clks[] __initconst = {
  1229. DIV(CLK_DOUT_FSYS1_MMC_CARD, "dout_fsys1_mmc_card",
  1230. "mout_fsys1_mmc_card",
  1231. CLK_CON_DIV_DIV_CLK_FSYS1_MMC_CARD, 0, 9),
  1232. };
  1233. static const struct samsung_gate_clock fsys1_gate_clks[] __initconst = {
  1234. GATE(CLK_GOUT_FSYS1_PCLK, "gout_fsys1_pclk", "mout_fsys1_bus_user",
  1235. CLK_CON_GAT_GOUT_BLK_FSYS1_UID_FSYS1_CMU_FSYS1_IPCLKPORT_PCLK,
  1236. 21, CLK_IGNORE_UNUSED, 0),
  1237. GATE(CLK_GOUT_FSYS1_MMC_CARD_SDCLKIN, "gout_fsys1_mmc_card_sdclkin",
  1238. "dout_fsys1_mmc_card",
  1239. CLK_CON_GAT_GOUT_BLK_FSYS1_UID_MMC_CARD_IPCLKPORT_SDCLKIN,
  1240. 21, CLK_SET_RATE_PARENT, 0),
  1241. GATE(CLK_GOUT_FSYS1_MMC_CARD_ACLK, "gout_fsys1_mmc_card_aclk",
  1242. "dout_fsys1_mmc_card",
  1243. CLK_CON_GAT_GOUT_BLK_FSYS1_UID_MMC_CARD_IPCLKPORT_I_ACLK,
  1244. 21, 0, 0),
  1245. GATE(CLK_GOUT_FSYS1_USB20DRD_0_REFCLK, "gout_fsys1_usb20drd_0_refclk",
  1246. "mout_fsys1_usbdrd_user",
  1247. CLK_CON_GAT_GOUT_BLK_FSYS1_UID_USB20DRD_0_REF_CLK_40,
  1248. 21, 0, 0),
  1249. GATE(CLK_GOUT_FSYS1_USB20DRD_1_REFCLK, "gout_fsys1_usb20drd_1_refclk",
  1250. "mout_fsys1_usbdrd_user",
  1251. CLK_CON_GAT_GOUT_BLK_FSYS1_UID_USB20DRD_1_REF_CLK_40,
  1252. 21, 0, 0),
  1253. GATE(CLK_GOUT_FSYS1_USB30DRD_0_REFCLK, "gout_fsys1_usb30drd_0_refclk",
  1254. "mout_fsys1_usbdrd_user",
  1255. CLK_CON_GAT_GOUT_BLK_FSYS1_UID_USB30DRD_0_REF_CLK_40,
  1256. 21, 0, 0),
  1257. GATE(CLK_GOUT_FSYS1_USB30DRD_1_REFCLK, "gout_fsys1_usb30drd_1_refclk",
  1258. "mout_fsys1_usbdrd_user",
  1259. CLK_CON_GAT_GOUT_BLK_FSYS1_UID_USB30DRD_1_REF_CLK_40,
  1260. 21, 0, 0),
  1261. GATE(CLK_GOUT_FSYS1_USB20_0_ACLK, "gout_fsys1_usb20_0_aclk",
  1262. "mout_fsys1_usbdrd_user",
  1263. CLK_CON_GAT_GOUT_BLK_FSYS1_UID_US_D_USB2_0_IPCLKPORT_ACLK,
  1264. 21, 0, 0),
  1265. GATE(CLK_GOUT_FSYS1_USB20_1_ACLK, "gout_fsys1_usb20_1_aclk",
  1266. "mout_fsys1_usbdrd_user",
  1267. CLK_CON_GAT_GOUT_BLK_FSYS1_UID_US_D_USB2_1_IPCLKPORT_ACLK,
  1268. 21, 0, 0),
  1269. GATE(CLK_GOUT_FSYS1_USB30_0_ACLK, "gout_fsys1_usb30_0_aclk",
  1270. "mout_fsys1_usbdrd_user",
  1271. CLK_CON_GAT_GOUT_BLK_FSYS1_UID_US_D_USB3_0_IPCLKPORT_ACLK,
  1272. 21, 0, 0),
  1273. GATE(CLK_GOUT_FSYS1_USB30_1_ACLK, "gout_fsys1_usb30_1_aclk",
  1274. "mout_fsys1_usbdrd_user",
  1275. CLK_CON_GAT_GOUT_BLK_FSYS1_UID_US_D_USB3_1_IPCLKPORT_ACLK,
  1276. 21, 0, 0),
  1277. };
  1278. static const struct samsung_cmu_info fsys1_cmu_info __initconst = {
  1279. .pll_clks = fsys1_pll_clks,
  1280. .nr_pll_clks = ARRAY_SIZE(fsys1_pll_clks),
  1281. .mux_clks = fsys1_mux_clks,
  1282. .nr_mux_clks = ARRAY_SIZE(fsys1_mux_clks),
  1283. .div_clks = fsys1_div_clks,
  1284. .nr_div_clks = ARRAY_SIZE(fsys1_div_clks),
  1285. .gate_clks = fsys1_gate_clks,
  1286. .nr_gate_clks = ARRAY_SIZE(fsys1_gate_clks),
  1287. .nr_clk_ids = FSYS1_NR_CLK,
  1288. .clk_regs = fsys1_clk_regs,
  1289. .nr_clk_regs = ARRAY_SIZE(fsys1_clk_regs),
  1290. .clk_name = "dout_clkcmu_fsys1_bus",
  1291. };
  1292. /* ---- CMU_FSYS2 ---------------------------------------------------------- */
  1293. /* Register Offset definitions for CMU_FSYS2 (0x17c00000) */
  1294. #define PLL_CON0_MUX_CLKCMU_FSYS2_BUS_USER 0x0600
  1295. #define PLL_CON0_MUX_CLKCMU_FSYS2_UFS_EMBD_USER 0x0620
  1296. #define PLL_CON0_MUX_CLKCMU_FSYS2_ETHERNET_USER 0x0610
  1297. #define CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD0_IPCLKPORT_I_ACLK 0x2098
  1298. #define CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD0_IPCLKPORT_I_CLK_UNIPRO 0x209c
  1299. #define CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD1_IPCLKPORT_I_ACLK 0x20a4
  1300. #define CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD1_IPCLKPORT_I_CLK_UNIPRO 0x20a8
  1301. static const unsigned long fsys2_clk_regs[] __initconst = {
  1302. PLL_CON0_MUX_CLKCMU_FSYS2_BUS_USER,
  1303. PLL_CON0_MUX_CLKCMU_FSYS2_UFS_EMBD_USER,
  1304. PLL_CON0_MUX_CLKCMU_FSYS2_ETHERNET_USER,
  1305. CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD0_IPCLKPORT_I_ACLK,
  1306. CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD0_IPCLKPORT_I_CLK_UNIPRO,
  1307. CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD1_IPCLKPORT_I_ACLK,
  1308. CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD1_IPCLKPORT_I_CLK_UNIPRO,
  1309. };
  1310. /* List of parent clocks for Muxes in CMU_FSYS2 */
  1311. PNAME(mout_fsys2_bus_user_p) = { "oscclk", "dout_clkcmu_fsys2_bus" };
  1312. PNAME(mout_fsys2_ufs_embd_user_p) = { "oscclk", "dout_clkcmu_fsys2_ufs_embd" };
  1313. PNAME(mout_fsys2_ethernet_user_p) = { "oscclk", "dout_clkcmu_fsys2_ethernet" };
  1314. static const struct samsung_mux_clock fsys2_mux_clks[] __initconst = {
  1315. MUX(CLK_MOUT_FSYS2_BUS_USER, "mout_fsys2_bus_user",
  1316. mout_fsys2_bus_user_p, PLL_CON0_MUX_CLKCMU_FSYS2_BUS_USER, 4, 1),
  1317. MUX(CLK_MOUT_FSYS2_UFS_EMBD_USER, "mout_fsys2_ufs_embd_user",
  1318. mout_fsys2_ufs_embd_user_p,
  1319. PLL_CON0_MUX_CLKCMU_FSYS2_UFS_EMBD_USER, 4, 1),
  1320. MUX(CLK_MOUT_FSYS2_ETHERNET_USER, "mout_fsys2_ethernet_user",
  1321. mout_fsys2_ethernet_user_p,
  1322. PLL_CON0_MUX_CLKCMU_FSYS2_ETHERNET_USER, 4, 1),
  1323. };
  1324. static const struct samsung_gate_clock fsys2_gate_clks[] __initconst = {
  1325. GATE(CLK_GOUT_FSYS2_UFS_EMBD0_ACLK, "gout_fsys2_ufs_embd0_aclk",
  1326. "mout_fsys2_ufs_embd_user",
  1327. CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD0_IPCLKPORT_I_ACLK, 21,
  1328. 0, 0),
  1329. GATE(CLK_GOUT_FSYS2_UFS_EMBD0_UNIPRO, "gout_fsys2_ufs_embd0_unipro",
  1330. "mout_fsys2_ufs_embd_user",
  1331. CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD0_IPCLKPORT_I_CLK_UNIPRO,
  1332. 21, 0, 0),
  1333. GATE(CLK_GOUT_FSYS2_UFS_EMBD1_ACLK, "gout_fsys2_ufs_embd1_aclk",
  1334. "mout_fsys2_ufs_embd_user",
  1335. CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD1_IPCLKPORT_I_ACLK, 21,
  1336. 0, 0),
  1337. GATE(CLK_GOUT_FSYS2_UFS_EMBD1_UNIPRO, "gout_fsys2_ufs_embd1_unipro",
  1338. "mout_fsys2_ufs_embd_user",
  1339. CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD1_IPCLKPORT_I_CLK_UNIPRO,
  1340. 21, 0, 0),
  1341. };
  1342. static const struct samsung_cmu_info fsys2_cmu_info __initconst = {
  1343. .mux_clks = fsys2_mux_clks,
  1344. .nr_mux_clks = ARRAY_SIZE(fsys2_mux_clks),
  1345. .gate_clks = fsys2_gate_clks,
  1346. .nr_gate_clks = ARRAY_SIZE(fsys2_gate_clks),
  1347. .nr_clk_ids = FSYS2_NR_CLK,
  1348. .clk_regs = fsys2_clk_regs,
  1349. .nr_clk_regs = ARRAY_SIZE(fsys2_clk_regs),
  1350. .clk_name = "dout_clkcmu_fsys2_bus",
  1351. };
  1352. /* ---- CMU_PERIC0 --------------------------------------------------------- */
  1353. /* Register Offset definitions for CMU_PERIC0 (0x10200000) */
  1354. #define PLL_CON0_MUX_CLKCMU_PERIC0_BUS_USER 0x0600
  1355. #define PLL_CON0_MUX_CLKCMU_PERIC0_IP_USER 0x0610
  1356. #define CLK_CON_MUX_MUX_CLK_PERIC0_USI00_USI 0x1000
  1357. #define CLK_CON_MUX_MUX_CLK_PERIC0_USI01_USI 0x1004
  1358. #define CLK_CON_MUX_MUX_CLK_PERIC0_USI02_USI 0x1008
  1359. #define CLK_CON_MUX_MUX_CLK_PERIC0_USI03_USI 0x100c
  1360. #define CLK_CON_MUX_MUX_CLK_PERIC0_USI04_USI 0x1010
  1361. #define CLK_CON_MUX_MUX_CLK_PERIC0_USI05_USI 0x1014
  1362. #define CLK_CON_MUX_MUX_CLK_PERIC0_USI_I2C 0x1018
  1363. #define CLK_CON_DIV_DIV_CLK_PERIC0_USI00_USI 0x1800
  1364. #define CLK_CON_DIV_DIV_CLK_PERIC0_USI01_USI 0x1804
  1365. #define CLK_CON_DIV_DIV_CLK_PERIC0_USI02_USI 0x1808
  1366. #define CLK_CON_DIV_DIV_CLK_PERIC0_USI03_USI 0x180c
  1367. #define CLK_CON_DIV_DIV_CLK_PERIC0_USI04_USI 0x1810
  1368. #define CLK_CON_DIV_DIV_CLK_PERIC0_USI05_USI 0x1814
  1369. #define CLK_CON_DIV_DIV_CLK_PERIC0_USI_I2C 0x1818
  1370. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_0 0x2014
  1371. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_1 0x2018
  1372. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_2 0x2024
  1373. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_3 0x2028
  1374. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_4 0x202c
  1375. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_5 0x2030
  1376. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_6 0x2034
  1377. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_7 0x2038
  1378. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_8 0x203c
  1379. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_9 0x2040
  1380. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_10 0x201c
  1381. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_11 0x2020
  1382. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_0 0x2044
  1383. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_1 0x2048
  1384. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_2 0x2058
  1385. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_3 0x205c
  1386. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_4 0x2060
  1387. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_5 0x2064
  1388. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_6 0x2068
  1389. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_7 0x206c
  1390. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_8 0x2070
  1391. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_9 0x2074
  1392. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_10 0x204c
  1393. #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_11 0x2050
  1394. static const unsigned long peric0_clk_regs[] __initconst = {
  1395. PLL_CON0_MUX_CLKCMU_PERIC0_BUS_USER,
  1396. PLL_CON0_MUX_CLKCMU_PERIC0_IP_USER,
  1397. CLK_CON_MUX_MUX_CLK_PERIC0_USI00_USI,
  1398. CLK_CON_MUX_MUX_CLK_PERIC0_USI01_USI,
  1399. CLK_CON_MUX_MUX_CLK_PERIC0_USI02_USI,
  1400. CLK_CON_MUX_MUX_CLK_PERIC0_USI03_USI,
  1401. CLK_CON_MUX_MUX_CLK_PERIC0_USI04_USI,
  1402. CLK_CON_MUX_MUX_CLK_PERIC0_USI05_USI,
  1403. CLK_CON_MUX_MUX_CLK_PERIC0_USI_I2C,
  1404. CLK_CON_DIV_DIV_CLK_PERIC0_USI00_USI,
  1405. CLK_CON_DIV_DIV_CLK_PERIC0_USI01_USI,
  1406. CLK_CON_DIV_DIV_CLK_PERIC0_USI02_USI,
  1407. CLK_CON_DIV_DIV_CLK_PERIC0_USI03_USI,
  1408. CLK_CON_DIV_DIV_CLK_PERIC0_USI04_USI,
  1409. CLK_CON_DIV_DIV_CLK_PERIC0_USI05_USI,
  1410. CLK_CON_DIV_DIV_CLK_PERIC0_USI_I2C,
  1411. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_0,
  1412. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_1,
  1413. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_2,
  1414. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_3,
  1415. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_4,
  1416. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_5,
  1417. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_6,
  1418. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_7,
  1419. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_8,
  1420. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_9,
  1421. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_10,
  1422. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_11,
  1423. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_0,
  1424. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_1,
  1425. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_2,
  1426. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_3,
  1427. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_4,
  1428. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_7,
  1429. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_5,
  1430. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_6,
  1431. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_8,
  1432. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_9,
  1433. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_10,
  1434. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_11,
  1435. };
  1436. /* List of parent clocks for Muxes in CMU_PERIC0 */
  1437. PNAME(mout_peric0_bus_user_p) = { "oscclk", "dout_clkcmu_peric0_bus" };
  1438. PNAME(mout_peric0_ip_user_p) = { "oscclk", "dout_clkcmu_peric0_ip" };
  1439. PNAME(mout_peric0_usi_p) = { "oscclk", "mout_peric0_ip_user" };
  1440. static const struct samsung_mux_clock peric0_mux_clks[] __initconst = {
  1441. MUX(CLK_MOUT_PERIC0_BUS_USER, "mout_peric0_bus_user",
  1442. mout_peric0_bus_user_p, PLL_CON0_MUX_CLKCMU_PERIC0_BUS_USER, 4, 1),
  1443. MUX(CLK_MOUT_PERIC0_IP_USER, "mout_peric0_ip_user",
  1444. mout_peric0_ip_user_p, PLL_CON0_MUX_CLKCMU_PERIC0_IP_USER, 4, 1),
  1445. /* USI00 ~ USI05 */
  1446. MUX(CLK_MOUT_PERIC0_USI00_USI, "mout_peric0_usi00_usi",
  1447. mout_peric0_usi_p, CLK_CON_MUX_MUX_CLK_PERIC0_USI00_USI, 0, 1),
  1448. MUX(CLK_MOUT_PERIC0_USI01_USI, "mout_peric0_usi01_usi",
  1449. mout_peric0_usi_p, CLK_CON_MUX_MUX_CLK_PERIC0_USI01_USI, 0, 1),
  1450. MUX(CLK_MOUT_PERIC0_USI02_USI, "mout_peric0_usi02_usi",
  1451. mout_peric0_usi_p, CLK_CON_MUX_MUX_CLK_PERIC0_USI02_USI, 0, 1),
  1452. MUX(CLK_MOUT_PERIC0_USI03_USI, "mout_peric0_usi03_usi",
  1453. mout_peric0_usi_p, CLK_CON_MUX_MUX_CLK_PERIC0_USI03_USI, 0, 1),
  1454. MUX(CLK_MOUT_PERIC0_USI04_USI, "mout_peric0_usi04_usi",
  1455. mout_peric0_usi_p, CLK_CON_MUX_MUX_CLK_PERIC0_USI04_USI, 0, 1),
  1456. MUX(CLK_MOUT_PERIC0_USI05_USI, "mout_peric0_usi05_usi",
  1457. mout_peric0_usi_p, CLK_CON_MUX_MUX_CLK_PERIC0_USI05_USI, 0, 1),
  1458. /* USI_I2C */
  1459. MUX(CLK_MOUT_PERIC0_USI_I2C, "mout_peric0_usi_i2c",
  1460. mout_peric0_usi_p, CLK_CON_MUX_MUX_CLK_PERIC0_USI_I2C, 0, 1),
  1461. };
  1462. static const struct samsung_div_clock peric0_div_clks[] __initconst = {
  1463. /* USI00 ~ USI05 */
  1464. DIV(CLK_DOUT_PERIC0_USI00_USI, "dout_peric0_usi00_usi",
  1465. "mout_peric0_usi00_usi", CLK_CON_DIV_DIV_CLK_PERIC0_USI00_USI,
  1466. 0, 4),
  1467. DIV(CLK_DOUT_PERIC0_USI01_USI, "dout_peric0_usi01_usi",
  1468. "mout_peric0_usi01_usi", CLK_CON_DIV_DIV_CLK_PERIC0_USI01_USI,
  1469. 0, 4),
  1470. DIV(CLK_DOUT_PERIC0_USI02_USI, "dout_peric0_usi02_usi",
  1471. "mout_peric0_usi02_usi", CLK_CON_DIV_DIV_CLK_PERIC0_USI02_USI,
  1472. 0, 4),
  1473. DIV(CLK_DOUT_PERIC0_USI03_USI, "dout_peric0_usi03_usi",
  1474. "mout_peric0_usi03_usi", CLK_CON_DIV_DIV_CLK_PERIC0_USI03_USI,
  1475. 0, 4),
  1476. DIV(CLK_DOUT_PERIC0_USI04_USI, "dout_peric0_usi04_usi",
  1477. "mout_peric0_usi04_usi", CLK_CON_DIV_DIV_CLK_PERIC0_USI04_USI,
  1478. 0, 4),
  1479. DIV(CLK_DOUT_PERIC0_USI05_USI, "dout_peric0_usi05_usi",
  1480. "mout_peric0_usi05_usi", CLK_CON_DIV_DIV_CLK_PERIC0_USI05_USI,
  1481. 0, 4),
  1482. /* USI_I2C */
  1483. DIV(CLK_DOUT_PERIC0_USI_I2C, "dout_peric0_usi_i2c",
  1484. "mout_peric0_usi_i2c", CLK_CON_DIV_DIV_CLK_PERIC0_USI_I2C, 0, 4),
  1485. };
  1486. static const struct samsung_gate_clock peric0_gate_clks[] __initconst = {
  1487. /* IPCLK */
  1488. GATE(CLK_GOUT_PERIC0_IPCLK_0, "gout_peric0_ipclk_0",
  1489. "dout_peric0_usi00_usi",
  1490. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_0,
  1491. 21, 0, 0),
  1492. GATE(CLK_GOUT_PERIC0_IPCLK_1, "gout_peric0_ipclk_1",
  1493. "dout_peric0_usi_i2c",
  1494. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_1,
  1495. 21, 0, 0),
  1496. GATE(CLK_GOUT_PERIC0_IPCLK_2, "gout_peric0_ipclk_2",
  1497. "dout_peric0_usi01_usi",
  1498. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_2,
  1499. 21, 0, 0),
  1500. GATE(CLK_GOUT_PERIC0_IPCLK_3, "gout_peric0_ipclk_3",
  1501. "dout_peric0_usi_i2c",
  1502. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_3,
  1503. 21, 0, 0),
  1504. GATE(CLK_GOUT_PERIC0_IPCLK_4, "gout_peric0_ipclk_4",
  1505. "dout_peric0_usi02_usi",
  1506. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_4,
  1507. 21, 0, 0),
  1508. GATE(CLK_GOUT_PERIC0_IPCLK_5, "gout_peric0_ipclk_5",
  1509. "dout_peric0_usi_i2c",
  1510. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_5,
  1511. 21, 0, 0),
  1512. GATE(CLK_GOUT_PERIC0_IPCLK_6, "gout_peric0_ipclk_6",
  1513. "dout_peric0_usi03_usi",
  1514. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_6,
  1515. 21, 0, 0),
  1516. GATE(CLK_GOUT_PERIC0_IPCLK_7, "gout_peric0_ipclk_7",
  1517. "dout_peric0_usi_i2c",
  1518. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_7,
  1519. 21, 0, 0),
  1520. GATE(CLK_GOUT_PERIC0_IPCLK_8, "gout_peric0_ipclk_8",
  1521. "dout_peric0_usi04_usi",
  1522. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_8,
  1523. 21, 0, 0),
  1524. GATE(CLK_GOUT_PERIC0_IPCLK_9, "gout_peric0_ipclk_9",
  1525. "dout_peric0_usi_i2c",
  1526. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_9,
  1527. 21, 0, 0),
  1528. GATE(CLK_GOUT_PERIC0_IPCLK_10, "gout_peric0_ipclk_10",
  1529. "dout_peric0_usi05_usi",
  1530. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_10,
  1531. 21, 0, 0),
  1532. GATE(CLK_GOUT_PERIC0_IPCLK_11, "gout_peric0_ipclk_11",
  1533. "dout_peric0_usi_i2c",
  1534. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_11,
  1535. 21, 0, 0),
  1536. /* PCLK */
  1537. GATE(CLK_GOUT_PERIC0_PCLK_0, "gout_peric0_pclk_0",
  1538. "mout_peric0_bus_user",
  1539. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_0,
  1540. 21, 0, 0),
  1541. GATE(CLK_GOUT_PERIC0_PCLK_1, "gout_peric0_pclk_1",
  1542. "mout_peric0_bus_user",
  1543. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_1,
  1544. 21, 0, 0),
  1545. GATE(CLK_GOUT_PERIC0_PCLK_2, "gout_peric0_pclk_2",
  1546. "mout_peric0_bus_user",
  1547. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_2,
  1548. 21, 0, 0),
  1549. GATE(CLK_GOUT_PERIC0_PCLK_3, "gout_peric0_pclk_3",
  1550. "mout_peric0_bus_user",
  1551. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_3,
  1552. 21, 0, 0),
  1553. GATE(CLK_GOUT_PERIC0_PCLK_4, "gout_peric0_pclk_4",
  1554. "mout_peric0_bus_user",
  1555. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_4,
  1556. 21, 0, 0),
  1557. GATE(CLK_GOUT_PERIC0_PCLK_5, "gout_peric0_pclk_5",
  1558. "mout_peric0_bus_user",
  1559. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_5,
  1560. 21, 0, 0),
  1561. GATE(CLK_GOUT_PERIC0_PCLK_6, "gout_peric0_pclk_6",
  1562. "mout_peric0_bus_user",
  1563. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_6,
  1564. 21, 0, 0),
  1565. GATE(CLK_GOUT_PERIC0_PCLK_7, "gout_peric0_pclk_7",
  1566. "mout_peric0_bus_user",
  1567. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_7,
  1568. 21, 0, 0),
  1569. GATE(CLK_GOUT_PERIC0_PCLK_8, "gout_peric0_pclk_8",
  1570. "mout_peric0_bus_user",
  1571. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_8,
  1572. 21, 0, 0),
  1573. GATE(CLK_GOUT_PERIC0_PCLK_9, "gout_peric0_pclk_9",
  1574. "mout_peric0_bus_user",
  1575. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_9,
  1576. 21, 0, 0),
  1577. GATE(CLK_GOUT_PERIC0_PCLK_10, "gout_peric0_pclk_10",
  1578. "mout_peric0_bus_user",
  1579. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_10,
  1580. 21, 0, 0),
  1581. GATE(CLK_GOUT_PERIC0_PCLK_11, "gout_peric0_pclk_11",
  1582. "mout_peric0_bus_user",
  1583. CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_11,
  1584. 21, 0, 0),
  1585. };
  1586. static const struct samsung_cmu_info peric0_cmu_info __initconst = {
  1587. .mux_clks = peric0_mux_clks,
  1588. .nr_mux_clks = ARRAY_SIZE(peric0_mux_clks),
  1589. .div_clks = peric0_div_clks,
  1590. .nr_div_clks = ARRAY_SIZE(peric0_div_clks),
  1591. .gate_clks = peric0_gate_clks,
  1592. .nr_gate_clks = ARRAY_SIZE(peric0_gate_clks),
  1593. .nr_clk_ids = PERIC0_NR_CLK,
  1594. .clk_regs = peric0_clk_regs,
  1595. .nr_clk_regs = ARRAY_SIZE(peric0_clk_regs),
  1596. .clk_name = "dout_clkcmu_peric0_bus",
  1597. };
  1598. /* ---- CMU_PERIC1 --------------------------------------------------------- */
  1599. /* Register Offset definitions for CMU_PERIC1 (0x10800000) */
  1600. #define PLL_CON0_MUX_CLKCMU_PERIC1_BUS_USER 0x0600
  1601. #define PLL_CON0_MUX_CLKCMU_PERIC1_IP_USER 0x0610
  1602. #define CLK_CON_MUX_MUX_CLK_PERIC1_USI06_USI 0x1000
  1603. #define CLK_CON_MUX_MUX_CLK_PERIC1_USI07_USI 0x1004
  1604. #define CLK_CON_MUX_MUX_CLK_PERIC1_USI08_USI 0x1008
  1605. #define CLK_CON_MUX_MUX_CLK_PERIC1_USI09_USI 0x100c
  1606. #define CLK_CON_MUX_MUX_CLK_PERIC1_USI10_USI 0x1010
  1607. #define CLK_CON_MUX_MUX_CLK_PERIC1_USI11_USI 0x1014
  1608. #define CLK_CON_MUX_MUX_CLK_PERIC1_USI_I2C 0x1018
  1609. #define CLK_CON_DIV_DIV_CLK_PERIC1_USI06_USI 0x1800
  1610. #define CLK_CON_DIV_DIV_CLK_PERIC1_USI07_USI 0x1804
  1611. #define CLK_CON_DIV_DIV_CLK_PERIC1_USI08_USI 0x1808
  1612. #define CLK_CON_DIV_DIV_CLK_PERIC1_USI09_USI 0x180c
  1613. #define CLK_CON_DIV_DIV_CLK_PERIC1_USI10_USI 0x1810
  1614. #define CLK_CON_DIV_DIV_CLK_PERIC1_USI11_USI 0x1814
  1615. #define CLK_CON_DIV_DIV_CLK_PERIC1_USI_I2C 0x1818
  1616. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_0 0x2014
  1617. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_1 0x2018
  1618. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_2 0x2024
  1619. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_3 0x2028
  1620. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_4 0x202c
  1621. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_5 0x2030
  1622. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_6 0x2034
  1623. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_7 0x2038
  1624. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_8 0x203c
  1625. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_9 0x2040
  1626. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_10 0x201c
  1627. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_11 0x2020
  1628. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_0 0x2044
  1629. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_1 0x2048
  1630. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_2 0x2054
  1631. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_3 0x2058
  1632. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_4 0x205c
  1633. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_5 0x2060
  1634. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_6 0x2064
  1635. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_7 0x2068
  1636. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_8 0x206c
  1637. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_9 0x2070
  1638. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_10 0x204c
  1639. #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_11 0x2050
  1640. static const unsigned long peric1_clk_regs[] __initconst = {
  1641. PLL_CON0_MUX_CLKCMU_PERIC1_BUS_USER,
  1642. PLL_CON0_MUX_CLKCMU_PERIC1_IP_USER,
  1643. CLK_CON_MUX_MUX_CLK_PERIC1_USI06_USI,
  1644. CLK_CON_MUX_MUX_CLK_PERIC1_USI07_USI,
  1645. CLK_CON_MUX_MUX_CLK_PERIC1_USI08_USI,
  1646. CLK_CON_MUX_MUX_CLK_PERIC1_USI09_USI,
  1647. CLK_CON_MUX_MUX_CLK_PERIC1_USI10_USI,
  1648. CLK_CON_MUX_MUX_CLK_PERIC1_USI11_USI,
  1649. CLK_CON_MUX_MUX_CLK_PERIC1_USI_I2C,
  1650. CLK_CON_DIV_DIV_CLK_PERIC1_USI06_USI,
  1651. CLK_CON_DIV_DIV_CLK_PERIC1_USI07_USI,
  1652. CLK_CON_DIV_DIV_CLK_PERIC1_USI08_USI,
  1653. CLK_CON_DIV_DIV_CLK_PERIC1_USI09_USI,
  1654. CLK_CON_DIV_DIV_CLK_PERIC1_USI10_USI,
  1655. CLK_CON_DIV_DIV_CLK_PERIC1_USI11_USI,
  1656. CLK_CON_DIV_DIV_CLK_PERIC1_USI_I2C,
  1657. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_0,
  1658. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_1,
  1659. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_2,
  1660. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_3,
  1661. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_4,
  1662. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_5,
  1663. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_6,
  1664. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_7,
  1665. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_8,
  1666. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_9,
  1667. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_10,
  1668. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_11,
  1669. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_0,
  1670. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_1,
  1671. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_2,
  1672. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_3,
  1673. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_4,
  1674. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_5,
  1675. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_6,
  1676. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_7,
  1677. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_8,
  1678. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_9,
  1679. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_10,
  1680. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_11,
  1681. };
  1682. /* List of parent clocks for Muxes in CMU_PERIC1 */
  1683. PNAME(mout_peric1_bus_user_p) = { "oscclk", "dout_clkcmu_peric1_bus" };
  1684. PNAME(mout_peric1_ip_user_p) = { "oscclk", "dout_clkcmu_peric1_ip" };
  1685. PNAME(mout_peric1_usi_p) = { "oscclk", "mout_peric1_ip_user" };
  1686. static const struct samsung_mux_clock peric1_mux_clks[] __initconst = {
  1687. MUX(CLK_MOUT_PERIC1_BUS_USER, "mout_peric1_bus_user",
  1688. mout_peric1_bus_user_p, PLL_CON0_MUX_CLKCMU_PERIC1_BUS_USER, 4, 1),
  1689. MUX(CLK_MOUT_PERIC1_IP_USER, "mout_peric1_ip_user",
  1690. mout_peric1_ip_user_p, PLL_CON0_MUX_CLKCMU_PERIC1_IP_USER, 4, 1),
  1691. /* USI06 ~ USI11 */
  1692. MUX(CLK_MOUT_PERIC1_USI06_USI, "mout_peric1_usi06_usi",
  1693. mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI06_USI, 0, 1),
  1694. MUX(CLK_MOUT_PERIC1_USI07_USI, "mout_peric1_usi07_usi",
  1695. mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI07_USI, 0, 1),
  1696. MUX(CLK_MOUT_PERIC1_USI08_USI, "mout_peric1_usi08_usi",
  1697. mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI08_USI, 0, 1),
  1698. MUX(CLK_MOUT_PERIC1_USI09_USI, "mout_peric1_usi09_usi",
  1699. mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI09_USI, 0, 1),
  1700. MUX(CLK_MOUT_PERIC1_USI10_USI, "mout_peric1_usi10_usi",
  1701. mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI10_USI, 0, 1),
  1702. MUX(CLK_MOUT_PERIC1_USI11_USI, "mout_peric1_usi11_usi",
  1703. mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI11_USI, 0, 1),
  1704. /* USI_I2C */
  1705. MUX(CLK_MOUT_PERIC1_USI_I2C, "mout_peric1_usi_i2c",
  1706. mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI_I2C, 0, 1),
  1707. };
  1708. static const struct samsung_div_clock peric1_div_clks[] __initconst = {
  1709. /* USI06 ~ USI11 */
  1710. DIV(CLK_DOUT_PERIC1_USI06_USI, "dout_peric1_usi06_usi",
  1711. "mout_peric1_usi06_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI06_USI,
  1712. 0, 4),
  1713. DIV(CLK_DOUT_PERIC1_USI07_USI, "dout_peric1_usi07_usi",
  1714. "mout_peric1_usi07_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI07_USI,
  1715. 0, 4),
  1716. DIV(CLK_DOUT_PERIC1_USI08_USI, "dout_peric1_usi08_usi",
  1717. "mout_peric1_usi08_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI08_USI,
  1718. 0, 4),
  1719. DIV(CLK_DOUT_PERIC1_USI09_USI, "dout_peric1_usi09_usi",
  1720. "mout_peric1_usi09_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI09_USI,
  1721. 0, 4),
  1722. DIV(CLK_DOUT_PERIC1_USI10_USI, "dout_peric1_usi10_usi",
  1723. "mout_peric1_usi10_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI10_USI,
  1724. 0, 4),
  1725. DIV(CLK_DOUT_PERIC1_USI11_USI, "dout_peric1_usi11_usi",
  1726. "mout_peric1_usi11_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI11_USI,
  1727. 0, 4),
  1728. /* USI_I2C */
  1729. DIV(CLK_DOUT_PERIC1_USI_I2C, "dout_peric1_usi_i2c",
  1730. "mout_peric1_usi_i2c", CLK_CON_DIV_DIV_CLK_PERIC1_USI_I2C, 0, 4),
  1731. };
  1732. static const struct samsung_gate_clock peric1_gate_clks[] __initconst = {
  1733. /* IPCLK */
  1734. GATE(CLK_GOUT_PERIC1_IPCLK_0, "gout_peric1_ipclk_0",
  1735. "dout_peric1_usi06_usi",
  1736. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_0,
  1737. 21, 0, 0),
  1738. GATE(CLK_GOUT_PERIC1_IPCLK_1, "gout_peric1_ipclk_1",
  1739. "dout_peric1_usi_i2c",
  1740. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_1,
  1741. 21, 0, 0),
  1742. GATE(CLK_GOUT_PERIC1_IPCLK_2, "gout_peric1_ipclk_2",
  1743. "dout_peric1_usi07_usi",
  1744. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_2,
  1745. 21, 0, 0),
  1746. GATE(CLK_GOUT_PERIC1_IPCLK_3, "gout_peric1_ipclk_3",
  1747. "dout_peric1_usi_i2c",
  1748. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_3,
  1749. 21, 0, 0),
  1750. GATE(CLK_GOUT_PERIC1_IPCLK_4, "gout_peric1_ipclk_4",
  1751. "dout_peric1_usi08_usi",
  1752. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_4,
  1753. 21, 0, 0),
  1754. GATE(CLK_GOUT_PERIC1_IPCLK_5, "gout_peric1_ipclk_5",
  1755. "dout_peric1_usi_i2c",
  1756. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_5,
  1757. 21, 0, 0),
  1758. GATE(CLK_GOUT_PERIC1_IPCLK_6, "gout_peric1_ipclk_6",
  1759. "dout_peric1_usi09_usi",
  1760. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_6,
  1761. 21, 0, 0),
  1762. GATE(CLK_GOUT_PERIC1_IPCLK_7, "gout_peric1_ipclk_7",
  1763. "dout_peric1_usi_i2c",
  1764. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_7,
  1765. 21, 0, 0),
  1766. GATE(CLK_GOUT_PERIC1_IPCLK_8, "gout_peric1_ipclk_8",
  1767. "dout_peric1_usi10_usi",
  1768. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_8,
  1769. 21, 0, 0),
  1770. GATE(CLK_GOUT_PERIC1_IPCLK_9, "gout_peric1_ipclk_9",
  1771. "dout_peric1_usi_i2c",
  1772. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_9,
  1773. 21, 0, 0),
  1774. GATE(CLK_GOUT_PERIC1_IPCLK_10, "gout_peric1_ipclk_10",
  1775. "dout_peric1_usi11_usi",
  1776. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_10,
  1777. 21, 0, 0),
  1778. GATE(CLK_GOUT_PERIC1_IPCLK_11, "gout_peric1_ipclk_11",
  1779. "dout_peric1_usi_i2c",
  1780. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_11,
  1781. 21, 0, 0),
  1782. /* PCLK */
  1783. GATE(CLK_GOUT_PERIC1_PCLK_0, "gout_peric1_pclk_0",
  1784. "mout_peric1_bus_user",
  1785. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_0,
  1786. 21, 0, 0),
  1787. GATE(CLK_GOUT_PERIC1_PCLK_1, "gout_peric1_pclk_1",
  1788. "mout_peric1_bus_user",
  1789. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_1,
  1790. 21, 0, 0),
  1791. GATE(CLK_GOUT_PERIC1_PCLK_2, "gout_peric1_pclk_2",
  1792. "mout_peric1_bus_user",
  1793. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_2,
  1794. 21, 0, 0),
  1795. GATE(CLK_GOUT_PERIC1_PCLK_3, "gout_peric1_pclk_3",
  1796. "mout_peric1_bus_user",
  1797. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_3,
  1798. 21, 0, 0),
  1799. GATE(CLK_GOUT_PERIC1_PCLK_4, "gout_peric1_pclk_4",
  1800. "mout_peric1_bus_user",
  1801. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_4,
  1802. 21, 0, 0),
  1803. GATE(CLK_GOUT_PERIC1_PCLK_5, "gout_peric1_pclk_5",
  1804. "mout_peric1_bus_user",
  1805. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_5,
  1806. 21, 0, 0),
  1807. GATE(CLK_GOUT_PERIC1_PCLK_6, "gout_peric1_pclk_6",
  1808. "mout_peric1_bus_user",
  1809. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_6,
  1810. 21, 0, 0),
  1811. GATE(CLK_GOUT_PERIC1_PCLK_7, "gout_peric1_pclk_7",
  1812. "mout_peric1_bus_user",
  1813. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_7,
  1814. 21, 0, 0),
  1815. GATE(CLK_GOUT_PERIC1_PCLK_8, "gout_peric1_pclk_8",
  1816. "mout_peric1_bus_user",
  1817. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_8,
  1818. 21, 0, 0),
  1819. GATE(CLK_GOUT_PERIC1_PCLK_9, "gout_peric1_pclk_9",
  1820. "mout_peric1_bus_user",
  1821. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_9,
  1822. 21, 0, 0),
  1823. GATE(CLK_GOUT_PERIC1_PCLK_10, "gout_peric1_pclk_10",
  1824. "mout_peric1_bus_user",
  1825. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_10,
  1826. 21, 0, 0),
  1827. GATE(CLK_GOUT_PERIC1_PCLK_11, "gout_peric1_pclk_11",
  1828. "mout_peric1_bus_user",
  1829. CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_11,
  1830. 21, 0, 0),
  1831. };
  1832. static const struct samsung_cmu_info peric1_cmu_info __initconst = {
  1833. .mux_clks = peric1_mux_clks,
  1834. .nr_mux_clks = ARRAY_SIZE(peric1_mux_clks),
  1835. .div_clks = peric1_div_clks,
  1836. .nr_div_clks = ARRAY_SIZE(peric1_div_clks),
  1837. .gate_clks = peric1_gate_clks,
  1838. .nr_gate_clks = ARRAY_SIZE(peric1_gate_clks),
  1839. .nr_clk_ids = PERIC1_NR_CLK,
  1840. .clk_regs = peric1_clk_regs,
  1841. .nr_clk_regs = ARRAY_SIZE(peric1_clk_regs),
  1842. .clk_name = "dout_clkcmu_peric1_bus",
  1843. };
  1844. /* ---- CMU_PERIS ---------------------------------------------------------- */
  1845. /* Register Offset definitions for CMU_PERIS (0x10020000) */
  1846. #define PLL_CON0_MUX_CLKCMU_PERIS_BUS_USER 0x0600
  1847. #define CLK_CON_GAT_GOUT_BLK_PERIS_UID_SYSREG_PERIS_IPCLKPORT_PCLK 0x2058
  1848. #define CLK_CON_GAT_GOUT_BLK_PERIS_UID_WDT_CLUSTER0_IPCLKPORT_PCLK 0x205c
  1849. #define CLK_CON_GAT_GOUT_BLK_PERIS_UID_WDT_CLUSTER1_IPCLKPORT_PCLK 0x2060
  1850. static const unsigned long peris_clk_regs[] __initconst = {
  1851. PLL_CON0_MUX_CLKCMU_PERIS_BUS_USER,
  1852. CLK_CON_GAT_GOUT_BLK_PERIS_UID_SYSREG_PERIS_IPCLKPORT_PCLK,
  1853. CLK_CON_GAT_GOUT_BLK_PERIS_UID_WDT_CLUSTER0_IPCLKPORT_PCLK,
  1854. CLK_CON_GAT_GOUT_BLK_PERIS_UID_WDT_CLUSTER1_IPCLKPORT_PCLK,
  1855. };
  1856. /* List of parent clocks for Muxes in CMU_PERIS */
  1857. PNAME(mout_peris_bus_user_p) = { "oscclk", "dout_clkcmu_peris_bus" };
  1858. static const struct samsung_mux_clock peris_mux_clks[] __initconst = {
  1859. MUX(CLK_MOUT_PERIS_BUS_USER, "mout_peris_bus_user",
  1860. mout_peris_bus_user_p, PLL_CON0_MUX_CLKCMU_PERIS_BUS_USER, 4, 1),
  1861. };
  1862. static const struct samsung_gate_clock peris_gate_clks[] __initconst = {
  1863. GATE(CLK_GOUT_SYSREG_PERIS_PCLK, "gout_sysreg_peris_pclk",
  1864. "mout_peris_bus_user",
  1865. CLK_CON_GAT_GOUT_BLK_PERIS_UID_SYSREG_PERIS_IPCLKPORT_PCLK,
  1866. 21, CLK_IGNORE_UNUSED, 0),
  1867. GATE(CLK_GOUT_WDT_CLUSTER0, "gout_wdt_cluster0", "mout_peris_bus_user",
  1868. CLK_CON_GAT_GOUT_BLK_PERIS_UID_WDT_CLUSTER0_IPCLKPORT_PCLK,
  1869. 21, 0, 0),
  1870. GATE(CLK_GOUT_WDT_CLUSTER1, "gout_wdt_cluster1", "mout_peris_bus_user",
  1871. CLK_CON_GAT_GOUT_BLK_PERIS_UID_WDT_CLUSTER1_IPCLKPORT_PCLK,
  1872. 21, 0, 0),
  1873. };
  1874. static const struct samsung_cmu_info peris_cmu_info __initconst = {
  1875. .mux_clks = peris_mux_clks,
  1876. .nr_mux_clks = ARRAY_SIZE(peris_mux_clks),
  1877. .gate_clks = peris_gate_clks,
  1878. .nr_gate_clks = ARRAY_SIZE(peris_gate_clks),
  1879. .nr_clk_ids = PERIS_NR_CLK,
  1880. .clk_regs = peris_clk_regs,
  1881. .nr_clk_regs = ARRAY_SIZE(peris_clk_regs),
  1882. .clk_name = "dout_clkcmu_peris_bus",
  1883. };
  1884. static int __init exynosautov9_cmu_probe(struct platform_device *pdev)
  1885. {
  1886. const struct samsung_cmu_info *info;
  1887. struct device *dev = &pdev->dev;
  1888. info = of_device_get_match_data(dev);
  1889. exynos_arm64_register_cmu(dev, dev->of_node, info);
  1890. return 0;
  1891. }
  1892. static const struct of_device_id exynosautov9_cmu_of_match[] = {
  1893. {
  1894. .compatible = "samsung,exynosautov9-cmu-busmc",
  1895. .data = &busmc_cmu_info,
  1896. }, {
  1897. .compatible = "samsung,exynosautov9-cmu-core",
  1898. .data = &core_cmu_info,
  1899. }, {
  1900. .compatible = "samsung,exynosautov9-cmu-fsys0",
  1901. .data = &fsys0_cmu_info,
  1902. }, {
  1903. .compatible = "samsung,exynosautov9-cmu-fsys1",
  1904. .data = &fsys1_cmu_info,
  1905. }, {
  1906. .compatible = "samsung,exynosautov9-cmu-fsys2",
  1907. .data = &fsys2_cmu_info,
  1908. }, {
  1909. .compatible = "samsung,exynosautov9-cmu-peric0",
  1910. .data = &peric0_cmu_info,
  1911. }, {
  1912. .compatible = "samsung,exynosautov9-cmu-peric1",
  1913. .data = &peric1_cmu_info,
  1914. }, {
  1915. .compatible = "samsung,exynosautov9-cmu-peris",
  1916. .data = &peris_cmu_info,
  1917. }, {
  1918. },
  1919. };
  1920. static struct platform_driver exynosautov9_cmu_driver __refdata = {
  1921. .driver = {
  1922. .name = "exynosautov9-cmu",
  1923. .of_match_table = exynosautov9_cmu_of_match,
  1924. .suppress_bind_attrs = true,
  1925. },
  1926. .probe = exynosautov9_cmu_probe,
  1927. };
  1928. static int __init exynosautov9_cmu_init(void)
  1929. {
  1930. return platform_driver_register(&exynosautov9_cmu_driver);
  1931. }
  1932. core_initcall(exynosautov9_cmu_init);