clock-krypton.c 64 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083
  1. /* Copyright (c) 2013, The Linux Foundation. All rights reserved.
  2. *
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License version 2 and
  5. * only version 2 as published by the Free Software Foundation.
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. * GNU General Public License for more details.
  11. */
  12. #include <linux/kernel.h>
  13. #include <linux/init.h>
  14. #include <linux/err.h>
  15. #include <linux/ctype.h>
  16. #include <linux/io.h>
  17. #include <linux/spinlock.h>
  18. #include <linux/delay.h>
  19. #include <linux/clk.h>
  20. #include <linux/regulator/consumer.h>
  21. #include <linux/iopoll.h>
  22. #include <mach/clk.h>
  23. #include <mach/rpm-regulator-smd.h>
  24. #include <mach/socinfo.h>
  25. #include "clock-local2.h"
  26. #include "clock-pll.h"
  27. #include "clock-rpm.h"
  28. #include "clock-voter.h"
  29. #include "clock.h"
  30. enum {
  31. GCC_BASE,
  32. LPASS_BASE,
  33. APCS_GLB_BASE,
  34. APCS_GCC_BASE,
  35. APCS_ACC_BASE,
  36. N_BASES,
  37. };
  38. static void __iomem *virt_bases[N_BASES];
  39. #define GCC_REG_BASE(x) (void __iomem *)(virt_bases[GCC_BASE] + (x))
  40. #define APCS_GCC_BASE(x) (void __iomem *)(virt_bases[APCS_GCC_BASE] + (x))
  41. /* Mux source select values */
  42. #define xo_source_val 0
  43. #define gpll0_source_val 1
  44. #define gpll1_source_val 4
  45. #define gnd_source_val 5
  46. #define usb3_pipe_clk_source_val 2
  47. #define pcie_pipe_clk_source_val 2
  48. /* Prevent a divider of -1 */
  49. #define FIXDIV(div) (div ? (2 * (div) - 1) : (0))
  50. #define F(f, s, div, m, n) \
  51. { \
  52. .freq_hz = (f), \
  53. .src_clk = &s.c, \
  54. .m_val = (m), \
  55. .n_val = ~((n)-(m)) * !!(n), \
  56. .d_val = ~(n),\
  57. .div_src_val = BVAL(4, 0, (int)(FIXDIV(div))) \
  58. | BVAL(10, 8, s##_source_val), \
  59. }
  60. #define F_EXT_SRC(f, s, div, m, n) \
  61. { \
  62. .freq_hz = (f), \
  63. .m_val = (m), \
  64. .n_val = ~((n)-(m)) * !!(n), \
  65. .d_val = ~(n),\
  66. .div_src_val = BVAL(4, 0, (int)(FIXDIV(div))) \
  67. | BVAL(10, 8, s##_source_val), \
  68. }
  69. #define VDD_DIG_FMAX_MAP1(l1, f1) \
  70. .vdd_class = &vdd_dig, \
  71. .fmax = (unsigned long[VDD_DIG_NUM]) { \
  72. [VDD_DIG_##l1] = (f1), \
  73. }, \
  74. .num_fmax = VDD_DIG_NUM
  75. #define VDD_DIG_FMAX_MAP2(l1, f1, l2, f2) \
  76. .vdd_class = &vdd_dig, \
  77. .fmax = (unsigned long[VDD_DIG_NUM]) { \
  78. [VDD_DIG_##l1] = (f1), \
  79. [VDD_DIG_##l2] = (f2), \
  80. }, \
  81. .num_fmax = VDD_DIG_NUM
  82. #define VDD_DIG_FMAX_MAP3(l1, f1, l2, f2, l3, f3) \
  83. .vdd_class = &vdd_dig, \
  84. .fmax = (unsigned long[VDD_DIG_NUM]) { \
  85. [VDD_DIG_##l1] = (f1), \
  86. [VDD_DIG_##l2] = (f2), \
  87. [VDD_DIG_##l3] = (f3), \
  88. }, \
  89. .num_fmax = VDD_DIG_NUM
  90. enum vdd_dig_levels {
  91. VDD_DIG_NONE,
  92. VDD_DIG_LOW,
  93. VDD_DIG_NOMINAL,
  94. VDD_DIG_HIGH,
  95. VDD_DIG_NUM
  96. };
  97. static int vdd_corner[] = {
  98. RPM_REGULATOR_CORNER_NONE, /* VDD_DIG_NONE */
  99. RPM_REGULATOR_CORNER_SVS_SOC, /* VDD_DIG_LOW */
  100. RPM_REGULATOR_CORNER_NORMAL, /* VDD_DIG_NOMINAL */
  101. RPM_REGULATOR_CORNER_SUPER_TURBO, /* VDD_DIG_HIGH */
  102. };
  103. static DEFINE_VDD_REGULATORS(vdd_dig, VDD_DIG_NUM, 1, vdd_corner, NULL);
  104. #define RPM_MISC_CLK_TYPE 0x306b6c63
  105. #define RPM_BUS_CLK_TYPE 0x316b6c63
  106. #define RPM_MEM_CLK_TYPE 0x326b6c63
  107. #define RPM_QPIC_CLK_TYPE 0x63697071
  108. #define RPM_SMD_KEY_ENABLE 0x62616E45
  109. #define CXO_ID 0x0
  110. #define QDSS_ID 0x1
  111. #define PNOC_ID 0x0
  112. #define SNOC_ID 0x1
  113. #define CNOC_ID 0x2
  114. #define BIMC_ID 0x0
  115. #define QPIC_ID 0x0
  116. #define D0_ID 1
  117. #define D1_ID 2
  118. #define A0_ID 3
  119. #define A1_ID 4
  120. #define A2_ID 5
  121. #define APCS_CLK_DIAG (0x001C)
  122. #define GPLL0_MODE (0x0000)
  123. #define GPLL1_MODE (0x0040)
  124. #define SYS_NOC_USB3_AXI_CBCR (0x0108)
  125. #define MSS_CFG_AHB_CBCR (0x0280)
  126. #define MSS_Q6_BIMC_AXI_CBCR (0x0284)
  127. #define USB_30_BCR (0x03C0)
  128. #define USB30_MASTER_CBCR (0x03C8)
  129. #define USB30_SLEEP_CBCR (0x03CC)
  130. #define USB30_MOCK_UTMI_CBCR (0x03D0)
  131. #define USB30_MASTER_CMD_RCGR (0x03D4)
  132. #define USB30_MOCK_UTMI_CMD_RCGR (0x03E8)
  133. #define USB3_PIPE_CBCR (0x1B90)
  134. #define USB3_AUX_CBCR (0x1B94)
  135. #define USB3_PIPE_CMD_RCGR (0x1B98)
  136. #define USB3_AUX_CMD_RCGR (0x1BC0)
  137. #define USB_HS_HSIC_BCR (0x0400)
  138. #define USB_HSIC_AHB_CBCR (0x0408)
  139. #define USB_HSIC_SYSTEM_CMD_RCGR (0x041C)
  140. #define USB_HSIC_SYSTEM_CBCR (0x040C)
  141. #define USB_HSIC_CMD_RCGR (0x0440)
  142. #define USB_HSIC_CBCR (0x0410)
  143. #define USB_HSIC_IO_CAL_CMD_RCGR (0x0458)
  144. #define USB_HSIC_IO_CAL_CBCR (0x0414)
  145. #define USB_HSIC_IO_CAL_SLEEP_CBCR (0x0418)
  146. #define USB_HSIC_XCVR_FS_CMD_RCGR (0x0424)
  147. #define USB_HSIC_XCVR_FS_CBCR (0x042C)
  148. #define USB_HS_BCR (0x0480)
  149. #define USB_HS_SYSTEM_CBCR (0x0484)
  150. #define USB_HS_AHB_CBCR (0x0488)
  151. #define USB_HS_SYSTEM_CMD_RCGR (0x0490)
  152. #define SDCC2_APPS_CMD_RCGR (0x0510)
  153. #define SDCC2_APPS_CBCR (0x0504)
  154. #define SDCC2_AHB_CBCR (0x0508)
  155. #define SDCC3_APPS_CMD_RCGR (0x0550)
  156. #define SDCC3_APPS_CBCR (0x0544)
  157. #define SDCC3_AHB_CBCR (0x0548)
  158. #define BLSP1_AHB_CBCR (0x05C4)
  159. #define BLSP1_QUP1_SPI_APPS_CBCR (0x0644)
  160. #define BLSP1_QUP1_I2C_APPS_CBCR (0x0648)
  161. #define BLSP1_QUP1_I2C_APPS_CMD_RCGR (0x0660)
  162. #define BLSP1_QUP2_I2C_APPS_CMD_RCGR (0x06E0)
  163. #define BLSP1_QUP3_I2C_APPS_CMD_RCGR (0x0760)
  164. #define BLSP1_QUP4_I2C_APPS_CMD_RCGR (0x07E0)
  165. #define BLSP1_QUP5_I2C_APPS_CMD_RCGR (0x0860)
  166. #define BLSP1_QUP6_I2C_APPS_CMD_RCGR (0x08E0)
  167. #define BLSP1_QUP1_SPI_APPS_CMD_RCGR (0x064C)
  168. #define BLSP1_UART1_APPS_CBCR (0x0684)
  169. #define BLSP1_UART1_APPS_CMD_RCGR (0x068C)
  170. #define BLSP1_QUP2_SPI_APPS_CBCR (0x06C4)
  171. #define BLSP1_QUP2_I2C_APPS_CBCR (0x06C8)
  172. #define BLSP1_QUP2_SPI_APPS_CMD_RCGR (0x06CC)
  173. #define BLSP1_UART2_APPS_CBCR (0x0704)
  174. #define BLSP1_UART2_APPS_CMD_RCGR (0x070C)
  175. #define BLSP1_QUP3_SPI_APPS_CBCR (0x0744)
  176. #define BLSP1_QUP3_I2C_APPS_CBCR (0x0748)
  177. #define BLSP1_QUP3_SPI_APPS_CMD_RCGR (0x074C)
  178. #define BLSP1_UART3_APPS_CBCR (0x0784)
  179. #define BLSP1_UART3_APPS_CMD_RCGR (0x078C)
  180. #define BLSP1_QUP4_SPI_APPS_CBCR (0x07C4)
  181. #define BLSP1_QUP4_I2C_APPS_CBCR (0x07C8)
  182. #define BLSP1_QUP4_SPI_APPS_CMD_RCGR (0x07CC)
  183. #define BLSP1_UART4_APPS_CBCR (0x0804)
  184. #define BLSP1_UART4_APPS_CMD_RCGR (0x080C)
  185. #define BLSP1_QUP5_SPI_APPS_CBCR (0x0844)
  186. #define BLSP1_QUP5_I2C_APPS_CBCR (0x0848)
  187. #define BLSP1_QUP5_SPI_APPS_CMD_RCGR (0x084C)
  188. #define BLSP1_UART5_APPS_CBCR (0x0884)
  189. #define BLSP1_UART5_APPS_CMD_RCGR (0x088C)
  190. #define BLSP1_QUP6_SPI_APPS_CBCR (0x08C4)
  191. #define BLSP1_QUP6_I2C_APPS_CBCR (0x08C8)
  192. #define BLSP1_QUP6_SPI_APPS_CMD_RCGR (0x08CC)
  193. #define BLSP1_UART6_APPS_CBCR (0x0904)
  194. #define BLSP1_UART6_APPS_CMD_RCGR (0x090C)
  195. #define PDM_AHB_CBCR (0x0CC4)
  196. #define PDM2_CBCR (0x0CCC)
  197. #define PDM2_CMD_RCGR (0x0CD0)
  198. #define PRNG_AHB_CBCR (0x0D04)
  199. #define BAM_DMA_AHB_CBCR (0x0D44)
  200. #define BAM_DMA_INACTIVITY_TIMERS_CBCR (0x0D48)
  201. #define BOOT_ROM_AHB_CBCR (0x0E04)
  202. #define RPM_MISC (0x0F24)
  203. #define CE1_CMD_RCGR (0x1050)
  204. #define CE1_CBCR (0x1044)
  205. #define CE1_AXI_CBCR (0x1048)
  206. #define CE1_AHB_CBCR (0x104C)
  207. #define GCC_XO_DIV4_CBCR (0x10C8)
  208. #define LPASS_Q6_AXI_CBCR (0x11C0)
  209. #define APCS_GPLL_ENA_VOTE (0x1480)
  210. #define APCS_CLOCK_BRANCH_ENA_VOTE (0x1484)
  211. #define GCC_DEBUG_CLK_CTL (0x1880)
  212. #define CLOCK_FRQ_MEASURE_CTL (0x1884)
  213. #define CLOCK_FRQ_MEASURE_STATUS (0x1888)
  214. #define PLLTEST_PAD_CFG (0x188C)
  215. #define PCIE_CFG_AHB_CBCR (0x1C04)
  216. #define PCIE_PIPE_CBCR (0x1C08)
  217. #define PCIE_AXI_CBCR (0x1C0C)
  218. #define PCIE_SLEEP_CBCR (0x1C10)
  219. #define PCIE_AXI_MSTR_CBCR (0x1C2C)
  220. #define PCIE_PIPE_CMD_RCGR (0x1C14)
  221. #define PCIE_AUX_CMD_RCGR (0x1E00)
  222. #define Q6SS_AHB_LFABIF_CBCR (0x22000)
  223. #define Q6SS_AHBM_CBCR (0x22004)
  224. DEFINE_CLK_RPM_SMD_BRANCH(xo, xo_a_clk, RPM_MISC_CLK_TYPE, CXO_ID, 19200000);
  225. static unsigned int soft_vote_gpll0;
  226. static struct pll_vote_clk gpll0 = {
  227. .en_reg = (void __iomem *)APCS_GPLL_ENA_VOTE,
  228. .en_mask = BIT(0),
  229. .status_reg = (void __iomem *)GPLL0_MODE,
  230. .status_mask = BIT(31),
  231. .soft_vote = &soft_vote_gpll0,
  232. .soft_vote_mask = PLL_SOFT_VOTE_PRIMARY,
  233. .base = &virt_bases[GCC_BASE],
  234. .c = {
  235. .rate = 600000000,
  236. .parent = &xo.c,
  237. .dbg_name = "gpll0",
  238. .ops = &clk_ops_pll_acpu_vote,
  239. CLK_INIT(gpll0.c),
  240. },
  241. };
  242. /* Don't vote for xo if using this clock to allow xo shutdown */
  243. static struct pll_vote_clk gpll0_ao = {
  244. .en_reg = (void __iomem *)APCS_GPLL_ENA_VOTE,
  245. .en_mask = BIT(0),
  246. .status_reg = (void __iomem *)GPLL0_MODE,
  247. .status_mask = BIT(31),
  248. .soft_vote = &soft_vote_gpll0,
  249. .soft_vote_mask = PLL_SOFT_VOTE_ACPU,
  250. .base = &virt_bases[GCC_BASE],
  251. .c = {
  252. .rate = 600000000,
  253. .dbg_name = "gpll0_ao",
  254. .ops = &clk_ops_pll_acpu_vote,
  255. CLK_INIT(gpll0_ao.c),
  256. },
  257. };
  258. static struct pll_vote_clk gpll1 = {
  259. .en_reg = (void __iomem *)APCS_GPLL_ENA_VOTE,
  260. .en_mask = BIT(1),
  261. .status_reg = (void __iomem *)GPLL1_MODE,
  262. .status_mask = BIT(31),
  263. .base = &virt_bases[GCC_BASE],
  264. .c = {
  265. .rate = 480000000,
  266. .parent = &xo.c,
  267. .dbg_name = "gpll1",
  268. .ops = &clk_ops_pll_vote,
  269. CLK_INIT(gpll1.c),
  270. },
  271. };
  272. static struct clk_freq_tbl ftbl_gcc_usb30_master_clk[] = {
  273. F( 125000000, gpll0, 1, 5, 24),
  274. F_END
  275. };
  276. static struct rcg_clk usb30_master_clk_src = {
  277. .cmd_rcgr_reg = USB30_MASTER_CMD_RCGR,
  278. .set_rate = set_rate_mnd,
  279. .freq_tbl = ftbl_gcc_usb30_master_clk,
  280. .current_freq = &rcg_dummy_freq,
  281. .base = &virt_bases[GCC_BASE],
  282. .c = {
  283. .dbg_name = "usb30_master_clk_src",
  284. .ops = &clk_ops_rcg_mnd,
  285. VDD_DIG_FMAX_MAP1(LOW, 125000000),
  286. CLK_INIT(usb30_master_clk_src.c),
  287. },
  288. };
  289. static struct clk_freq_tbl ftbl_gcc_blsp1_qup1_6_i2c_apps_clk[] = {
  290. F( 19200000, xo, 1, 0, 0),
  291. F_END
  292. };
  293. static struct rcg_clk blsp1_qup1_i2c_apps_clk_src = {
  294. .cmd_rcgr_reg = BLSP1_QUP1_I2C_APPS_CMD_RCGR,
  295. .set_rate = set_rate_hid,
  296. .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
  297. .current_freq = &rcg_dummy_freq,
  298. .base = &virt_bases[GCC_BASE],
  299. .c = {
  300. .dbg_name = "blsp1_qup1_i2c_apps_clk_src",
  301. .ops = &clk_ops_rcg,
  302. VDD_DIG_FMAX_MAP1(LOW, 19200000),
  303. CLK_INIT(blsp1_qup1_i2c_apps_clk_src.c),
  304. },
  305. };
  306. static struct clk_freq_tbl ftbl_gcc_blsp1_qup1_6_spi_apps_clk[] = {
  307. F( 960000, xo, 10, 1, 2),
  308. F( 4800000, xo, 4, 0, 0),
  309. F( 9600000, xo, 2, 0, 0),
  310. F( 15000000, gpll0, 10, 1, 4),
  311. F( 19200000, xo, 1, 0, 0),
  312. F( 25000000, gpll0, 12, 1, 2),
  313. F( 50000000, gpll0, 12, 0, 0),
  314. F_END
  315. };
  316. static struct rcg_clk blsp1_qup1_spi_apps_clk_src = {
  317. .cmd_rcgr_reg = BLSP1_QUP1_SPI_APPS_CMD_RCGR,
  318. .set_rate = set_rate_mnd,
  319. .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
  320. .current_freq = &rcg_dummy_freq,
  321. .base = &virt_bases[GCC_BASE],
  322. .c = {
  323. .dbg_name = "blsp1_qup1_spi_apps_clk_src",
  324. .ops = &clk_ops_rcg_mnd,
  325. VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
  326. CLK_INIT(blsp1_qup1_spi_apps_clk_src.c),
  327. },
  328. };
  329. static struct rcg_clk blsp1_qup2_i2c_apps_clk_src = {
  330. .cmd_rcgr_reg = BLSP1_QUP2_I2C_APPS_CMD_RCGR,
  331. .set_rate = set_rate_hid,
  332. .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
  333. .current_freq = &rcg_dummy_freq,
  334. .base = &virt_bases[GCC_BASE],
  335. .c = {
  336. .dbg_name = "blsp1_qup2_i2c_apps_clk_src",
  337. .ops = &clk_ops_rcg,
  338. VDD_DIG_FMAX_MAP1(LOW, 19200000),
  339. CLK_INIT(blsp1_qup2_i2c_apps_clk_src.c),
  340. },
  341. };
  342. static struct rcg_clk blsp1_qup2_spi_apps_clk_src = {
  343. .cmd_rcgr_reg = BLSP1_QUP2_SPI_APPS_CMD_RCGR,
  344. .set_rate = set_rate_mnd,
  345. .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
  346. .current_freq = &rcg_dummy_freq,
  347. .base = &virt_bases[GCC_BASE],
  348. .c = {
  349. .dbg_name = "blsp1_qup2_spi_apps_clk_src",
  350. .ops = &clk_ops_rcg_mnd,
  351. VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
  352. CLK_INIT(blsp1_qup2_spi_apps_clk_src.c),
  353. },
  354. };
  355. static struct rcg_clk blsp1_qup3_i2c_apps_clk_src = {
  356. .cmd_rcgr_reg = BLSP1_QUP3_I2C_APPS_CMD_RCGR,
  357. .set_rate = set_rate_hid,
  358. .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
  359. .current_freq = &rcg_dummy_freq,
  360. .base = &virt_bases[GCC_BASE],
  361. .c = {
  362. .dbg_name = "blsp1_qup3_i2c_apps_clk_src",
  363. .ops = &clk_ops_rcg,
  364. VDD_DIG_FMAX_MAP1(LOW, 19200000),
  365. CLK_INIT(blsp1_qup3_i2c_apps_clk_src.c),
  366. },
  367. };
  368. static struct rcg_clk blsp1_qup3_spi_apps_clk_src = {
  369. .cmd_rcgr_reg = BLSP1_QUP3_SPI_APPS_CMD_RCGR,
  370. .set_rate = set_rate_mnd,
  371. .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
  372. .current_freq = &rcg_dummy_freq,
  373. .base = &virt_bases[GCC_BASE],
  374. .c = {
  375. .dbg_name = "blsp1_qup3_spi_apps_clk_src",
  376. .ops = &clk_ops_rcg_mnd,
  377. VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
  378. CLK_INIT(blsp1_qup3_spi_apps_clk_src.c),
  379. },
  380. };
  381. static struct rcg_clk blsp1_qup4_i2c_apps_clk_src = {
  382. .cmd_rcgr_reg = BLSP1_QUP4_I2C_APPS_CMD_RCGR,
  383. .set_rate = set_rate_hid,
  384. .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
  385. .current_freq = &rcg_dummy_freq,
  386. .base = &virt_bases[GCC_BASE],
  387. .c = {
  388. .dbg_name = "blsp1_qup4_i2c_apps_clk_src",
  389. .ops = &clk_ops_rcg,
  390. VDD_DIG_FMAX_MAP1(LOW, 19200000),
  391. CLK_INIT(blsp1_qup4_i2c_apps_clk_src.c),
  392. },
  393. };
  394. static struct rcg_clk blsp1_qup4_spi_apps_clk_src = {
  395. .cmd_rcgr_reg = BLSP1_QUP4_SPI_APPS_CMD_RCGR,
  396. .set_rate = set_rate_mnd,
  397. .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
  398. .current_freq = &rcg_dummy_freq,
  399. .base = &virt_bases[GCC_BASE],
  400. .c = {
  401. .dbg_name = "blsp1_qup4_spi_apps_clk_src",
  402. .ops = &clk_ops_rcg_mnd,
  403. VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
  404. CLK_INIT(blsp1_qup4_spi_apps_clk_src.c),
  405. },
  406. };
  407. static struct rcg_clk blsp1_qup5_i2c_apps_clk_src = {
  408. .cmd_rcgr_reg = BLSP1_QUP5_I2C_APPS_CMD_RCGR,
  409. .set_rate = set_rate_hid,
  410. .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
  411. .current_freq = &rcg_dummy_freq,
  412. .base = &virt_bases[GCC_BASE],
  413. .c = {
  414. .dbg_name = "blsp1_qup5_i2c_apps_clk_src",
  415. .ops = &clk_ops_rcg,
  416. VDD_DIG_FMAX_MAP1(LOW, 19200000),
  417. CLK_INIT(blsp1_qup5_i2c_apps_clk_src.c),
  418. },
  419. };
  420. static struct rcg_clk blsp1_qup5_spi_apps_clk_src = {
  421. .cmd_rcgr_reg = BLSP1_QUP5_SPI_APPS_CMD_RCGR,
  422. .set_rate = set_rate_mnd,
  423. .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
  424. .current_freq = &rcg_dummy_freq,
  425. .base = &virt_bases[GCC_BASE],
  426. .c = {
  427. .dbg_name = "blsp1_qup5_spi_apps_clk_src",
  428. .ops = &clk_ops_rcg_mnd,
  429. VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
  430. CLK_INIT(blsp1_qup5_spi_apps_clk_src.c),
  431. },
  432. };
  433. static struct rcg_clk blsp1_qup6_i2c_apps_clk_src = {
  434. .cmd_rcgr_reg = BLSP1_QUP6_I2C_APPS_CMD_RCGR,
  435. .set_rate = set_rate_hid,
  436. .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
  437. .current_freq = &rcg_dummy_freq,
  438. .base = &virt_bases[GCC_BASE],
  439. .c = {
  440. .dbg_name = "blsp1_qup6_i2c_apps_clk_src",
  441. .ops = &clk_ops_rcg,
  442. VDD_DIG_FMAX_MAP1(LOW, 19200000),
  443. CLK_INIT(blsp1_qup6_i2c_apps_clk_src.c),
  444. },
  445. };
  446. static struct rcg_clk blsp1_qup6_spi_apps_clk_src = {
  447. .cmd_rcgr_reg = BLSP1_QUP6_SPI_APPS_CMD_RCGR,
  448. .set_rate = set_rate_mnd,
  449. .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
  450. .current_freq = &rcg_dummy_freq,
  451. .base = &virt_bases[GCC_BASE],
  452. .c = {
  453. .dbg_name = "blsp1_qup6_spi_apps_clk_src",
  454. .ops = &clk_ops_rcg_mnd,
  455. VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
  456. CLK_INIT(blsp1_qup6_spi_apps_clk_src.c),
  457. },
  458. };
  459. static struct clk_freq_tbl ftbl_gcc_blsp1_uart1_6_apps_clk[] = {
  460. F( 3686400, gpll0, 1, 96, 15625),
  461. F( 7372800, gpll0, 1, 192, 15625),
  462. F( 14745600, gpll0, 1, 384, 15625),
  463. F( 16000000, gpll0, 5, 2, 15),
  464. F( 19200000, xo, 1, 0, 0),
  465. F( 24000000, gpll0, 5, 1, 5),
  466. F( 32000000, gpll0, 1, 4, 75),
  467. F( 40000000, gpll0, 15, 0, 0),
  468. F( 46400000, gpll0, 1, 29, 375),
  469. F( 48000000, gpll0, 12.5, 0, 0),
  470. F( 51200000, gpll0, 1, 32, 375),
  471. F( 56000000, gpll0, 1, 7, 75),
  472. F( 58982400, gpll0, 1, 1536, 15625),
  473. F( 60000000, gpll0, 10, 0, 0),
  474. F( 63160000, gpll0, 9.5, 0, 0),
  475. F_END
  476. };
  477. static struct rcg_clk blsp1_uart1_apps_clk_src = {
  478. .cmd_rcgr_reg = BLSP1_UART1_APPS_CMD_RCGR,
  479. .set_rate = set_rate_mnd,
  480. .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
  481. .current_freq = &rcg_dummy_freq,
  482. .base = &virt_bases[GCC_BASE],
  483. .c = {
  484. .dbg_name = "blsp1_uart1_apps_clk_src",
  485. .ops = &clk_ops_rcg_mnd,
  486. VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
  487. CLK_INIT(blsp1_uart1_apps_clk_src.c),
  488. },
  489. };
  490. static struct rcg_clk blsp1_uart2_apps_clk_src = {
  491. .cmd_rcgr_reg = BLSP1_UART2_APPS_CMD_RCGR,
  492. .set_rate = set_rate_mnd,
  493. .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
  494. .current_freq = &rcg_dummy_freq,
  495. .base = &virt_bases[GCC_BASE],
  496. .c = {
  497. .dbg_name = "blsp1_uart2_apps_clk_src",
  498. .ops = &clk_ops_rcg_mnd,
  499. VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
  500. CLK_INIT(blsp1_uart2_apps_clk_src.c),
  501. },
  502. };
  503. static struct rcg_clk blsp1_uart3_apps_clk_src = {
  504. .cmd_rcgr_reg = BLSP1_UART3_APPS_CMD_RCGR,
  505. .set_rate = set_rate_mnd,
  506. .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
  507. .current_freq = &rcg_dummy_freq,
  508. .base = &virt_bases[GCC_BASE],
  509. .c = {
  510. .dbg_name = "blsp1_uart3_apps_clk_src",
  511. .ops = &clk_ops_rcg_mnd,
  512. VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
  513. CLK_INIT(blsp1_uart3_apps_clk_src.c),
  514. },
  515. };
  516. static struct rcg_clk blsp1_uart4_apps_clk_src = {
  517. .cmd_rcgr_reg = BLSP1_UART4_APPS_CMD_RCGR,
  518. .set_rate = set_rate_mnd,
  519. .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
  520. .current_freq = &rcg_dummy_freq,
  521. .base = &virt_bases[GCC_BASE],
  522. .c = {
  523. .dbg_name = "blsp1_uart4_apps_clk_src",
  524. .ops = &clk_ops_rcg_mnd,
  525. VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
  526. CLK_INIT(blsp1_uart4_apps_clk_src.c),
  527. },
  528. };
  529. static struct rcg_clk blsp1_uart5_apps_clk_src = {
  530. .cmd_rcgr_reg = BLSP1_UART5_APPS_CMD_RCGR,
  531. .set_rate = set_rate_mnd,
  532. .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
  533. .current_freq = &rcg_dummy_freq,
  534. .base = &virt_bases[GCC_BASE],
  535. .c = {
  536. .dbg_name = "blsp1_uart5_apps_clk_src",
  537. .ops = &clk_ops_rcg_mnd,
  538. VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
  539. CLK_INIT(blsp1_uart5_apps_clk_src.c),
  540. },
  541. };
  542. static struct rcg_clk blsp1_uart6_apps_clk_src = {
  543. .cmd_rcgr_reg = BLSP1_UART6_APPS_CMD_RCGR,
  544. .set_rate = set_rate_mnd,
  545. .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
  546. .current_freq = &rcg_dummy_freq,
  547. .base = &virt_bases[GCC_BASE],
  548. .c = {
  549. .dbg_name = "blsp1_uart6_apps_clk_src",
  550. .ops = &clk_ops_rcg_mnd,
  551. VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
  552. CLK_INIT(blsp1_uart6_apps_clk_src.c),
  553. },
  554. };
  555. static struct clk_freq_tbl ftbl_gcc_ce1_clk[] = {
  556. F( 50000000, gpll0, 12, 0, 0),
  557. F( 85710000, gpll0, 7, 0, 0),
  558. F( 100000000, gpll0, 6, 0, 0),
  559. F( 171430000, gpll0, 3.5, 0, 0),
  560. F( 200000000, gpll0, 3, 0, 0),
  561. F_END
  562. };
  563. static struct rcg_clk ce1_clk_src = {
  564. .cmd_rcgr_reg = CE1_CMD_RCGR,
  565. .set_rate = set_rate_hid,
  566. .freq_tbl = ftbl_gcc_ce1_clk,
  567. .current_freq = &rcg_dummy_freq,
  568. .base = &virt_bases[GCC_BASE],
  569. .c = {
  570. .dbg_name = "ce1_clk_src",
  571. .ops = &clk_ops_rcg,
  572. VDD_DIG_FMAX_MAP3(LOW, 85710000, NOMINAL, 171430000, HIGH,
  573. 200000000),
  574. CLK_INIT(ce1_clk_src.c),
  575. },
  576. };
  577. static struct clk_freq_tbl ftbl_gcc_pcie_sleep_clk[] = {
  578. F( 1000000, xo, 1, 5, 96),
  579. F_END
  580. };
  581. static struct rcg_clk pcie_aux_clk_src = {
  582. .cmd_rcgr_reg = PCIE_AUX_CMD_RCGR,
  583. .set_rate = set_rate_mnd,
  584. .freq_tbl = ftbl_gcc_pcie_sleep_clk,
  585. .current_freq = &rcg_dummy_freq,
  586. .base = &virt_bases[GCC_BASE],
  587. .c = {
  588. .dbg_name = "pcie_aux_clk_src",
  589. .ops = &clk_ops_rcg_mnd,
  590. VDD_DIG_FMAX_MAP1(LOW, 1000000),
  591. CLK_INIT(pcie_aux_clk_src.c),
  592. },
  593. };
  594. static struct clk_freq_tbl ftbl_gcc_pcie_pipe_clk[] = {
  595. F_EXT_SRC( 62500000, pcie_pipe_clk, 2, 0, 0),
  596. F_EXT_SRC( 125000000, pcie_pipe_clk, 1, 0, 0),
  597. F_END
  598. };
  599. static struct rcg_clk pcie_pipe_clk_src = {
  600. .cmd_rcgr_reg = PCIE_PIPE_CMD_RCGR,
  601. .set_rate = set_rate_hid,
  602. .freq_tbl = ftbl_gcc_pcie_pipe_clk,
  603. .current_freq = &rcg_dummy_freq,
  604. .base = &virt_bases[GCC_BASE],
  605. .c = {
  606. .dbg_name = "pcie_pipe_clk_src",
  607. .ops = &clk_ops_rcg,
  608. VDD_DIG_FMAX_MAP2(LOW, 62500000, NOMINAL, 125000000),
  609. CLK_INIT(pcie_pipe_clk_src.c),
  610. },
  611. };
  612. static struct clk_freq_tbl ftbl_gcc_pdm2_clk[] = {
  613. F( 60000000, gpll0, 10, 0, 0),
  614. F_END
  615. };
  616. static struct rcg_clk pdm2_clk_src = {
  617. .cmd_rcgr_reg = PDM2_CMD_RCGR,
  618. .set_rate = set_rate_hid,
  619. .freq_tbl = ftbl_gcc_pdm2_clk,
  620. .current_freq = &rcg_dummy_freq,
  621. .base = &virt_bases[GCC_BASE],
  622. .c = {
  623. .dbg_name = "pdm2_clk_src",
  624. .ops = &clk_ops_rcg,
  625. VDD_DIG_FMAX_MAP1(LOW, 60000000),
  626. CLK_INIT(pdm2_clk_src.c),
  627. },
  628. };
  629. static struct clk_freq_tbl ftbl_gcc_sdcc2_3_apps_clk[] = {
  630. F( 144000, xo, 16, 3, 25),
  631. F( 400000, xo, 12, 1, 4),
  632. F( 20000000, gpll0, 15, 1, 2),
  633. F( 25000000, gpll0, 12, 1, 2),
  634. F( 50000000, gpll0, 12, 0, 0),
  635. F( 100000000, gpll0, 6, 0, 0),
  636. F( 200000000, gpll0, 3, 0, 0),
  637. F_END
  638. };
  639. static struct rcg_clk sdcc2_apps_clk_src = {
  640. .cmd_rcgr_reg = SDCC2_APPS_CMD_RCGR,
  641. .set_rate = set_rate_mnd,
  642. .freq_tbl = ftbl_gcc_sdcc2_3_apps_clk,
  643. .current_freq = &rcg_dummy_freq,
  644. .base = &virt_bases[GCC_BASE],
  645. .c = {
  646. .dbg_name = "sdcc2_apps_clk_src",
  647. .ops = &clk_ops_rcg_mnd,
  648. VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
  649. CLK_INIT(sdcc2_apps_clk_src.c),
  650. },
  651. };
  652. static struct rcg_clk sdcc3_apps_clk_src = {
  653. .cmd_rcgr_reg = SDCC3_APPS_CMD_RCGR,
  654. .set_rate = set_rate_mnd,
  655. .freq_tbl = ftbl_gcc_sdcc2_3_apps_clk,
  656. .current_freq = &rcg_dummy_freq,
  657. .base = &virt_bases[GCC_BASE],
  658. .c = {
  659. .dbg_name = "sdcc3_apps_clk_src",
  660. .ops = &clk_ops_rcg_mnd,
  661. VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
  662. CLK_INIT(sdcc3_apps_clk_src.c),
  663. },
  664. };
  665. static struct clk_freq_tbl ftbl_gcc_usb3_aux_clk[] = {
  666. F( 1000000, xo, 1, 5, 96),
  667. F_END
  668. };
  669. static struct rcg_clk usb3_aux_clk_src = {
  670. .cmd_rcgr_reg = USB3_AUX_CMD_RCGR,
  671. .set_rate = set_rate_mnd,
  672. .freq_tbl = ftbl_gcc_usb3_aux_clk,
  673. .current_freq = &rcg_dummy_freq,
  674. .base = &virt_bases[GCC_BASE],
  675. .c = {
  676. .dbg_name = "usb3_aux_clk_src",
  677. .ops = &clk_ops_rcg_mnd,
  678. VDD_DIG_FMAX_MAP1(LOW, 1000000),
  679. CLK_INIT(usb3_aux_clk_src.c),
  680. },
  681. };
  682. static struct clk_freq_tbl ftbl_gcc_usb3_pipe_clk[] = {
  683. F_EXT_SRC( 125000000, usb3_pipe_clk, 1, 0, 0),
  684. F_END
  685. };
  686. static struct rcg_clk usb3_pipe_clk_src = {
  687. .cmd_rcgr_reg = USB3_PIPE_CMD_RCGR,
  688. .set_rate = set_rate_hid,
  689. .freq_tbl = ftbl_gcc_usb3_pipe_clk,
  690. .current_freq = &rcg_dummy_freq,
  691. .base = &virt_bases[GCC_BASE],
  692. .c = {
  693. .dbg_name = "usb3_pipe_clk_src",
  694. .ops = &clk_ops_rcg,
  695. VDD_DIG_FMAX_MAP1(LOW, 125000000),
  696. CLK_INIT(usb3_pipe_clk_src.c),
  697. },
  698. };
  699. static struct clk_freq_tbl ftbl_gcc_usb30_mock_utmi_clk[] = {
  700. F( 60000000, gpll0, 10, 0, 0),
  701. F_END
  702. };
  703. static struct rcg_clk usb30_mock_utmi_clk_src = {
  704. .cmd_rcgr_reg = USB30_MOCK_UTMI_CMD_RCGR,
  705. .set_rate = set_rate_hid,
  706. .freq_tbl = ftbl_gcc_usb30_mock_utmi_clk,
  707. .current_freq = &rcg_dummy_freq,
  708. .base = &virt_bases[GCC_BASE],
  709. .c = {
  710. .dbg_name = "usb30_mock_utmi_clk_src",
  711. .ops = &clk_ops_rcg,
  712. VDD_DIG_FMAX_MAP1(LOW, 60000000),
  713. CLK_INIT(usb30_mock_utmi_clk_src.c),
  714. },
  715. };
  716. static struct clk_freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
  717. F( 60000000, gpll0, 10, 0, 0),
  718. F( 75000000, gpll0, 8, 0, 0),
  719. F_END
  720. };
  721. static struct rcg_clk usb_hs_system_clk_src = {
  722. .cmd_rcgr_reg = USB_HS_SYSTEM_CMD_RCGR,
  723. .set_rate = set_rate_hid,
  724. .freq_tbl = ftbl_gcc_usb_hs_system_clk,
  725. .current_freq = &rcg_dummy_freq,
  726. .base = &virt_bases[GCC_BASE],
  727. .c = {
  728. .dbg_name = "usb_hs_system_clk_src",
  729. .ops = &clk_ops_rcg,
  730. VDD_DIG_FMAX_MAP2(LOW, 60000000, NOMINAL, 75000000),
  731. CLK_INIT(usb_hs_system_clk_src.c),
  732. },
  733. };
  734. static struct clk_freq_tbl ftbl_gcc_usb_hsic_clk[] = {
  735. F( 480000000, gpll1, 1, 0, 0),
  736. F_END
  737. };
  738. static struct rcg_clk usb_hsic_clk_src = {
  739. .cmd_rcgr_reg = USB_HSIC_CMD_RCGR,
  740. .set_rate = set_rate_hid,
  741. .freq_tbl = ftbl_gcc_usb_hsic_clk,
  742. .current_freq = &rcg_dummy_freq,
  743. .base = &virt_bases[GCC_BASE],
  744. .c = {
  745. .dbg_name = "usb_hsic_clk_src",
  746. .ops = &clk_ops_rcg,
  747. VDD_DIG_FMAX_MAP1(LOW, 480000000),
  748. CLK_INIT(usb_hsic_clk_src.c),
  749. },
  750. };
  751. static struct clk_freq_tbl ftbl_gcc_usb_hsic_io_cal_clk[] = {
  752. F( 9600000, xo, 2, 0, 0),
  753. F_END
  754. };
  755. static struct rcg_clk usb_hsic_io_cal_clk_src = {
  756. .cmd_rcgr_reg = USB_HSIC_IO_CAL_CMD_RCGR,
  757. .set_rate = set_rate_hid,
  758. .freq_tbl = ftbl_gcc_usb_hsic_io_cal_clk,
  759. .current_freq = &rcg_dummy_freq,
  760. .base = &virt_bases[GCC_BASE],
  761. .c = {
  762. .dbg_name = "usb_hsic_io_cal_clk_src",
  763. .ops = &clk_ops_rcg,
  764. VDD_DIG_FMAX_MAP1(LOW, 9600000),
  765. CLK_INIT(usb_hsic_io_cal_clk_src.c),
  766. },
  767. };
  768. static struct clk_freq_tbl ftbl_gcc_usb_hsic_system_clk[] = {
  769. F( 60000000, gpll0, 10, 0, 0),
  770. F( 75000000, gpll0, 8, 0, 0),
  771. F_END
  772. };
  773. static struct rcg_clk usb_hsic_system_clk_src = {
  774. .cmd_rcgr_reg = USB_HSIC_SYSTEM_CMD_RCGR,
  775. .set_rate = set_rate_hid,
  776. .freq_tbl = ftbl_gcc_usb_hsic_system_clk,
  777. .current_freq = &rcg_dummy_freq,
  778. .base = &virt_bases[GCC_BASE],
  779. .c = {
  780. .dbg_name = "usb_hsic_system_clk_src",
  781. .ops = &clk_ops_rcg,
  782. VDD_DIG_FMAX_MAP2(LOW, 60000000, NOMINAL, 75000000),
  783. CLK_INIT(usb_hsic_system_clk_src.c),
  784. },
  785. };
  786. static struct clk_freq_tbl ftbl_gcc_usb_hsic_xcvr_fs_clk[] = {
  787. F( 60000000, gpll0, 10, 0, 0),
  788. F_END
  789. };
  790. static struct rcg_clk usb_hsic_xcvr_fs_clk_src = {
  791. .cmd_rcgr_reg = USB_HSIC_XCVR_FS_CMD_RCGR,
  792. .set_rate = set_rate_hid,
  793. .freq_tbl = ftbl_gcc_usb_hsic_xcvr_fs_clk,
  794. .current_freq = &rcg_dummy_freq,
  795. .base = &virt_bases[GCC_BASE],
  796. .c = {
  797. .dbg_name = "usb_hsic_xcvr_fs_clk_src",
  798. .ops = &clk_ops_rcg,
  799. VDD_DIG_FMAX_MAP1(LOW, 60000000),
  800. CLK_INIT(usb_hsic_xcvr_fs_clk_src.c),
  801. },
  802. };
  803. DEFINE_CLK_RPM_SMD(bimc_clk, bimc_a_clk, RPM_MEM_CLK_TYPE, BIMC_ID, NULL);
  804. DEFINE_CLK_RPM_SMD(cnoc_clk, cnoc_a_clk, RPM_BUS_CLK_TYPE, CNOC_ID, NULL);
  805. DEFINE_CLK_RPM_SMD(pnoc_clk, pnoc_a_clk, RPM_BUS_CLK_TYPE, PNOC_ID, NULL);
  806. DEFINE_CLK_RPM_SMD_QDSS(qdss_clk, qdss_a_clk, RPM_MISC_CLK_TYPE, QDSS_ID);
  807. DEFINE_CLK_RPM_SMD(qpic_clk, qpic_a_clk, RPM_QPIC_CLK_TYPE, QPIC_ID, NULL);
  808. DEFINE_CLK_RPM_SMD(snoc_clk, snoc_a_clk, RPM_BUS_CLK_TYPE, SNOC_ID, NULL);
  809. static struct local_vote_clk gcc_bam_dma_ahb_clk = {
  810. .cbcr_reg = BAM_DMA_AHB_CBCR,
  811. .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
  812. .en_mask = BIT(12),
  813. .base = &virt_bases[GCC_BASE],
  814. .c = {
  815. .dbg_name = "gcc_bam_dma_ahb_clk",
  816. .ops = &clk_ops_vote,
  817. CLK_INIT(gcc_bam_dma_ahb_clk.c),
  818. },
  819. };
  820. static struct branch_clk gcc_bam_dma_inactivity_timers_clk = {
  821. .cbcr_reg = BAM_DMA_INACTIVITY_TIMERS_CBCR,
  822. .has_sibling = 1,
  823. .base = &virt_bases[GCC_BASE],
  824. .c = {
  825. .dbg_name = "gcc_bam_dma_inactivity_timers_clk",
  826. .ops = &clk_ops_branch,
  827. CLK_INIT(gcc_bam_dma_inactivity_timers_clk.c),
  828. },
  829. };
  830. static struct local_vote_clk gcc_blsp1_ahb_clk = {
  831. .cbcr_reg = BLSP1_AHB_CBCR,
  832. .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
  833. .en_mask = BIT(17),
  834. .base = &virt_bases[GCC_BASE],
  835. .c = {
  836. .dbg_name = "gcc_blsp1_ahb_clk",
  837. .ops = &clk_ops_vote,
  838. CLK_INIT(gcc_blsp1_ahb_clk.c),
  839. },
  840. };
  841. static struct branch_clk gcc_blsp1_qup1_i2c_apps_clk = {
  842. .cbcr_reg = BLSP1_QUP1_I2C_APPS_CBCR,
  843. .has_sibling = 0,
  844. .base = &virt_bases[GCC_BASE],
  845. .c = {
  846. .dbg_name = "gcc_blsp1_qup1_i2c_apps_clk",
  847. .parent = &blsp1_qup1_i2c_apps_clk_src.c,
  848. .ops = &clk_ops_branch,
  849. CLK_INIT(gcc_blsp1_qup1_i2c_apps_clk.c),
  850. },
  851. };
  852. static struct branch_clk gcc_blsp1_qup1_spi_apps_clk = {
  853. .cbcr_reg = BLSP1_QUP1_SPI_APPS_CBCR,
  854. .has_sibling = 0,
  855. .base = &virt_bases[GCC_BASE],
  856. .c = {
  857. .dbg_name = "gcc_blsp1_qup1_spi_apps_clk",
  858. .parent = &blsp1_qup1_spi_apps_clk_src.c,
  859. .ops = &clk_ops_branch,
  860. CLK_INIT(gcc_blsp1_qup1_spi_apps_clk.c),
  861. },
  862. };
  863. static struct branch_clk gcc_blsp1_qup2_i2c_apps_clk = {
  864. .cbcr_reg = BLSP1_QUP2_I2C_APPS_CBCR,
  865. .has_sibling = 0,
  866. .base = &virt_bases[GCC_BASE],
  867. .c = {
  868. .dbg_name = "gcc_blsp1_qup2_i2c_apps_clk",
  869. .parent = &blsp1_qup2_i2c_apps_clk_src.c,
  870. .ops = &clk_ops_branch,
  871. CLK_INIT(gcc_blsp1_qup2_i2c_apps_clk.c),
  872. },
  873. };
  874. static struct branch_clk gcc_blsp1_qup2_spi_apps_clk = {
  875. .cbcr_reg = BLSP1_QUP2_SPI_APPS_CBCR,
  876. .has_sibling = 0,
  877. .base = &virt_bases[GCC_BASE],
  878. .c = {
  879. .dbg_name = "gcc_blsp1_qup2_spi_apps_clk",
  880. .parent = &blsp1_qup2_spi_apps_clk_src.c,
  881. .ops = &clk_ops_branch,
  882. CLK_INIT(gcc_blsp1_qup2_spi_apps_clk.c),
  883. },
  884. };
  885. static struct branch_clk gcc_blsp1_qup3_i2c_apps_clk = {
  886. .cbcr_reg = BLSP1_QUP3_I2C_APPS_CBCR,
  887. .has_sibling = 0,
  888. .base = &virt_bases[GCC_BASE],
  889. .c = {
  890. .dbg_name = "gcc_blsp1_qup3_i2c_apps_clk",
  891. .parent = &blsp1_qup3_i2c_apps_clk_src.c,
  892. .ops = &clk_ops_branch,
  893. CLK_INIT(gcc_blsp1_qup3_i2c_apps_clk.c),
  894. },
  895. };
  896. static struct branch_clk gcc_blsp1_qup3_spi_apps_clk = {
  897. .cbcr_reg = BLSP1_QUP3_SPI_APPS_CBCR,
  898. .has_sibling = 0,
  899. .base = &virt_bases[GCC_BASE],
  900. .c = {
  901. .dbg_name = "gcc_blsp1_qup3_spi_apps_clk",
  902. .parent = &blsp1_qup3_spi_apps_clk_src.c,
  903. .ops = &clk_ops_branch,
  904. CLK_INIT(gcc_blsp1_qup3_spi_apps_clk.c),
  905. },
  906. };
  907. static struct branch_clk gcc_blsp1_qup4_i2c_apps_clk = {
  908. .cbcr_reg = BLSP1_QUP4_I2C_APPS_CBCR,
  909. .has_sibling = 0,
  910. .base = &virt_bases[GCC_BASE],
  911. .c = {
  912. .dbg_name = "gcc_blsp1_qup4_i2c_apps_clk",
  913. .parent = &blsp1_qup4_i2c_apps_clk_src.c,
  914. .ops = &clk_ops_branch,
  915. CLK_INIT(gcc_blsp1_qup4_i2c_apps_clk.c),
  916. },
  917. };
  918. static struct branch_clk gcc_blsp1_qup4_spi_apps_clk = {
  919. .cbcr_reg = BLSP1_QUP4_SPI_APPS_CBCR,
  920. .has_sibling = 0,
  921. .base = &virt_bases[GCC_BASE],
  922. .c = {
  923. .dbg_name = "gcc_blsp1_qup4_spi_apps_clk",
  924. .parent = &blsp1_qup4_spi_apps_clk_src.c,
  925. .ops = &clk_ops_branch,
  926. CLK_INIT(gcc_blsp1_qup4_spi_apps_clk.c),
  927. },
  928. };
  929. static struct branch_clk gcc_blsp1_qup5_i2c_apps_clk = {
  930. .cbcr_reg = BLSP1_QUP5_I2C_APPS_CBCR,
  931. .has_sibling = 0,
  932. .base = &virt_bases[GCC_BASE],
  933. .c = {
  934. .dbg_name = "gcc_blsp1_qup5_i2c_apps_clk",
  935. .parent = &blsp1_qup5_i2c_apps_clk_src.c,
  936. .ops = &clk_ops_branch,
  937. CLK_INIT(gcc_blsp1_qup5_i2c_apps_clk.c),
  938. },
  939. };
  940. static struct branch_clk gcc_blsp1_qup5_spi_apps_clk = {
  941. .cbcr_reg = BLSP1_QUP5_SPI_APPS_CBCR,
  942. .has_sibling = 0,
  943. .base = &virt_bases[GCC_BASE],
  944. .c = {
  945. .dbg_name = "gcc_blsp1_qup5_spi_apps_clk",
  946. .parent = &blsp1_qup5_spi_apps_clk_src.c,
  947. .ops = &clk_ops_branch,
  948. CLK_INIT(gcc_blsp1_qup5_spi_apps_clk.c),
  949. },
  950. };
  951. static struct branch_clk gcc_blsp1_qup6_i2c_apps_clk = {
  952. .cbcr_reg = BLSP1_QUP6_I2C_APPS_CBCR,
  953. .has_sibling = 0,
  954. .base = &virt_bases[GCC_BASE],
  955. .c = {
  956. .dbg_name = "gcc_blsp1_qup6_i2c_apps_clk",
  957. .parent = &blsp1_qup6_i2c_apps_clk_src.c,
  958. .ops = &clk_ops_branch,
  959. CLK_INIT(gcc_blsp1_qup6_i2c_apps_clk.c),
  960. },
  961. };
  962. static struct branch_clk gcc_blsp1_qup6_spi_apps_clk = {
  963. .cbcr_reg = BLSP1_QUP6_SPI_APPS_CBCR,
  964. .has_sibling = 0,
  965. .base = &virt_bases[GCC_BASE],
  966. .c = {
  967. .dbg_name = "gcc_blsp1_qup6_spi_apps_clk",
  968. .parent = &blsp1_qup6_spi_apps_clk_src.c,
  969. .ops = &clk_ops_branch,
  970. CLK_INIT(gcc_blsp1_qup6_spi_apps_clk.c),
  971. },
  972. };
  973. static struct branch_clk gcc_blsp1_uart1_apps_clk = {
  974. .cbcr_reg = BLSP1_UART1_APPS_CBCR,
  975. .has_sibling = 0,
  976. .base = &virt_bases[GCC_BASE],
  977. .c = {
  978. .dbg_name = "gcc_blsp1_uart1_apps_clk",
  979. .parent = &blsp1_uart1_apps_clk_src.c,
  980. .ops = &clk_ops_branch,
  981. CLK_INIT(gcc_blsp1_uart1_apps_clk.c),
  982. },
  983. };
  984. static struct branch_clk gcc_blsp1_uart2_apps_clk = {
  985. .cbcr_reg = BLSP1_UART2_APPS_CBCR,
  986. .has_sibling = 0,
  987. .base = &virt_bases[GCC_BASE],
  988. .c = {
  989. .dbg_name = "gcc_blsp1_uart2_apps_clk",
  990. .parent = &blsp1_uart2_apps_clk_src.c,
  991. .ops = &clk_ops_branch,
  992. CLK_INIT(gcc_blsp1_uart2_apps_clk.c),
  993. },
  994. };
  995. static struct branch_clk gcc_blsp1_uart3_apps_clk = {
  996. .cbcr_reg = BLSP1_UART3_APPS_CBCR,
  997. .has_sibling = 0,
  998. .base = &virt_bases[GCC_BASE],
  999. .c = {
  1000. .dbg_name = "gcc_blsp1_uart3_apps_clk",
  1001. .parent = &blsp1_uart3_apps_clk_src.c,
  1002. .ops = &clk_ops_branch,
  1003. CLK_INIT(gcc_blsp1_uart3_apps_clk.c),
  1004. },
  1005. };
  1006. static struct branch_clk gcc_blsp1_uart4_apps_clk = {
  1007. .cbcr_reg = BLSP1_UART4_APPS_CBCR,
  1008. .has_sibling = 0,
  1009. .base = &virt_bases[GCC_BASE],
  1010. .c = {
  1011. .dbg_name = "gcc_blsp1_uart4_apps_clk",
  1012. .parent = &blsp1_uart4_apps_clk_src.c,
  1013. .ops = &clk_ops_branch,
  1014. CLK_INIT(gcc_blsp1_uart4_apps_clk.c),
  1015. },
  1016. };
  1017. static struct branch_clk gcc_blsp1_uart5_apps_clk = {
  1018. .cbcr_reg = BLSP1_UART5_APPS_CBCR,
  1019. .has_sibling = 0,
  1020. .base = &virt_bases[GCC_BASE],
  1021. .c = {
  1022. .dbg_name = "gcc_blsp1_uart5_apps_clk",
  1023. .parent = &blsp1_uart5_apps_clk_src.c,
  1024. .ops = &clk_ops_branch,
  1025. CLK_INIT(gcc_blsp1_uart5_apps_clk.c),
  1026. },
  1027. };
  1028. static struct branch_clk gcc_blsp1_uart6_apps_clk = {
  1029. .cbcr_reg = BLSP1_UART6_APPS_CBCR,
  1030. .has_sibling = 0,
  1031. .base = &virt_bases[GCC_BASE],
  1032. .c = {
  1033. .dbg_name = "gcc_blsp1_uart6_apps_clk",
  1034. .parent = &blsp1_uart6_apps_clk_src.c,
  1035. .ops = &clk_ops_branch,
  1036. CLK_INIT(gcc_blsp1_uart6_apps_clk.c),
  1037. },
  1038. };
  1039. static struct local_vote_clk gcc_boot_rom_ahb_clk = {
  1040. .cbcr_reg = BOOT_ROM_AHB_CBCR,
  1041. .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
  1042. .en_mask = BIT(10),
  1043. .base = &virt_bases[GCC_BASE],
  1044. .c = {
  1045. .dbg_name = "gcc_boot_rom_ahb_clk",
  1046. .ops = &clk_ops_vote,
  1047. CLK_INIT(gcc_boot_rom_ahb_clk.c),
  1048. },
  1049. };
  1050. static struct local_vote_clk gcc_ce1_ahb_clk = {
  1051. .cbcr_reg = CE1_AHB_CBCR,
  1052. .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
  1053. .en_mask = BIT(3),
  1054. .base = &virt_bases[GCC_BASE],
  1055. .c = {
  1056. .dbg_name = "gcc_ce1_ahb_clk",
  1057. .ops = &clk_ops_vote,
  1058. CLK_INIT(gcc_ce1_ahb_clk.c),
  1059. },
  1060. };
  1061. static struct local_vote_clk gcc_ce1_axi_clk = {
  1062. .cbcr_reg = CE1_AXI_CBCR,
  1063. .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
  1064. .en_mask = BIT(4),
  1065. .base = &virt_bases[GCC_BASE],
  1066. .c = {
  1067. .dbg_name = "gcc_ce1_axi_clk",
  1068. .ops = &clk_ops_vote,
  1069. CLK_INIT(gcc_ce1_axi_clk.c),
  1070. },
  1071. };
  1072. static struct local_vote_clk gcc_ce1_clk = {
  1073. .cbcr_reg = CE1_CBCR,
  1074. .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
  1075. .en_mask = BIT(5),
  1076. .base = &virt_bases[GCC_BASE],
  1077. .c = {
  1078. .dbg_name = "gcc_ce1_clk",
  1079. .ops = &clk_ops_vote,
  1080. CLK_INIT(gcc_ce1_clk.c),
  1081. },
  1082. };
  1083. static struct branch_clk gcc_lpass_q6_axi_clk = {
  1084. .cbcr_reg = LPASS_Q6_AXI_CBCR,
  1085. .has_sibling = 1,
  1086. .base = &virt_bases[GCC_BASE],
  1087. .c = {
  1088. .dbg_name = "gcc_lpass_q6_axi_clk",
  1089. .ops = &clk_ops_branch,
  1090. CLK_INIT(gcc_lpass_q6_axi_clk.c),
  1091. },
  1092. };
  1093. static struct branch_clk gcc_mss_cfg_ahb_clk = {
  1094. .cbcr_reg = MSS_CFG_AHB_CBCR,
  1095. .has_sibling = 1,
  1096. .base = &virt_bases[GCC_BASE],
  1097. .c = {
  1098. .dbg_name = "gcc_mss_cfg_ahb_clk",
  1099. .ops = &clk_ops_branch,
  1100. CLK_INIT(gcc_mss_cfg_ahb_clk.c),
  1101. },
  1102. };
  1103. static struct branch_clk gcc_mss_q6_bimc_axi_clk = {
  1104. .cbcr_reg = MSS_Q6_BIMC_AXI_CBCR,
  1105. .has_sibling = 1,
  1106. .base = &virt_bases[GCC_BASE],
  1107. .c = {
  1108. .dbg_name = "gcc_mss_q6_bimc_axi_clk",
  1109. .ops = &clk_ops_branch,
  1110. CLK_INIT(gcc_mss_q6_bimc_axi_clk.c),
  1111. },
  1112. };
  1113. static struct branch_clk gcc_pcie_axi_clk = {
  1114. .cbcr_reg = PCIE_AXI_CBCR,
  1115. .has_sibling = 1,
  1116. .base = &virt_bases[GCC_BASE],
  1117. .c = {
  1118. .dbg_name = "gcc_pcie_axi_clk",
  1119. .ops = &clk_ops_branch,
  1120. CLK_INIT(gcc_pcie_axi_clk.c),
  1121. },
  1122. };
  1123. static struct branch_clk gcc_pcie_axi_mstr_clk = {
  1124. .cbcr_reg = PCIE_AXI_MSTR_CBCR,
  1125. .has_sibling = 1,
  1126. .base = &virt_bases[GCC_BASE],
  1127. .c = {
  1128. .dbg_name = "gcc_pcie_axi_mstr_clk",
  1129. .ops = &clk_ops_branch,
  1130. CLK_INIT(gcc_pcie_axi_mstr_clk.c),
  1131. },
  1132. };
  1133. static struct branch_clk gcc_pcie_cfg_ahb_clk = {
  1134. .cbcr_reg = PCIE_CFG_AHB_CBCR,
  1135. .has_sibling = 1,
  1136. .base = &virt_bases[GCC_BASE],
  1137. .c = {
  1138. .dbg_name = "gcc_pcie_cfg_ahb_clk",
  1139. .ops = &clk_ops_branch,
  1140. CLK_INIT(gcc_pcie_cfg_ahb_clk.c),
  1141. },
  1142. };
  1143. static struct branch_clk gcc_pcie_pipe_clk = {
  1144. .cbcr_reg = PCIE_PIPE_CBCR,
  1145. .has_sibling = 0,
  1146. .base = &virt_bases[GCC_BASE],
  1147. .c = {
  1148. .dbg_name = "gcc_pcie_pipe_clk",
  1149. .parent = &pcie_pipe_clk_src.c,
  1150. .ops = &clk_ops_branch,
  1151. CLK_INIT(gcc_pcie_pipe_clk.c),
  1152. },
  1153. };
  1154. static struct branch_clk gcc_pcie_sleep_clk = {
  1155. .cbcr_reg = PCIE_SLEEP_CBCR,
  1156. .has_sibling = 0,
  1157. .base = &virt_bases[GCC_BASE],
  1158. .c = {
  1159. .dbg_name = "gcc_pcie_sleep_clk",
  1160. .parent = &pcie_aux_clk_src.c,
  1161. .ops = &clk_ops_branch,
  1162. CLK_INIT(gcc_pcie_sleep_clk.c),
  1163. },
  1164. };
  1165. static struct branch_clk gcc_pdm2_clk = {
  1166. .cbcr_reg = PDM2_CBCR,
  1167. .has_sibling = 0,
  1168. .base = &virt_bases[GCC_BASE],
  1169. .c = {
  1170. .dbg_name = "gcc_pdm2_clk",
  1171. .parent = &pdm2_clk_src.c,
  1172. .ops = &clk_ops_branch,
  1173. CLK_INIT(gcc_pdm2_clk.c),
  1174. },
  1175. };
  1176. static struct branch_clk gcc_pdm_ahb_clk = {
  1177. .cbcr_reg = PDM_AHB_CBCR,
  1178. .has_sibling = 1,
  1179. .base = &virt_bases[GCC_BASE],
  1180. .c = {
  1181. .dbg_name = "gcc_pdm_ahb_clk",
  1182. .ops = &clk_ops_branch,
  1183. CLK_INIT(gcc_pdm_ahb_clk.c),
  1184. },
  1185. };
  1186. static struct local_vote_clk gcc_prng_ahb_clk = {
  1187. .cbcr_reg = PRNG_AHB_CBCR,
  1188. .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
  1189. .en_mask = BIT(13),
  1190. .base = &virt_bases[GCC_BASE],
  1191. .c = {
  1192. .dbg_name = "gcc_prng_ahb_clk",
  1193. .ops = &clk_ops_vote,
  1194. CLK_INIT(gcc_prng_ahb_clk.c),
  1195. },
  1196. };
  1197. static struct branch_clk gcc_sdcc2_ahb_clk = {
  1198. .cbcr_reg = SDCC2_AHB_CBCR,
  1199. .has_sibling = 1,
  1200. .base = &virt_bases[GCC_BASE],
  1201. .c = {
  1202. .dbg_name = "gcc_sdcc2_ahb_clk",
  1203. .ops = &clk_ops_branch,
  1204. CLK_INIT(gcc_sdcc2_ahb_clk.c),
  1205. },
  1206. };
  1207. static struct branch_clk gcc_sdcc2_apps_clk = {
  1208. .cbcr_reg = SDCC2_APPS_CBCR,
  1209. .has_sibling = 0,
  1210. .base = &virt_bases[GCC_BASE],
  1211. .c = {
  1212. .dbg_name = "gcc_sdcc2_apps_clk",
  1213. .parent = &sdcc2_apps_clk_src.c,
  1214. .ops = &clk_ops_branch,
  1215. CLK_INIT(gcc_sdcc2_apps_clk.c),
  1216. },
  1217. };
  1218. static struct branch_clk gcc_sdcc3_ahb_clk = {
  1219. .cbcr_reg = SDCC3_AHB_CBCR,
  1220. .has_sibling = 1,
  1221. .base = &virt_bases[GCC_BASE],
  1222. .c = {
  1223. .dbg_name = "gcc_sdcc3_ahb_clk",
  1224. .ops = &clk_ops_branch,
  1225. CLK_INIT(gcc_sdcc3_ahb_clk.c),
  1226. },
  1227. };
  1228. static struct branch_clk gcc_sdcc3_apps_clk = {
  1229. .cbcr_reg = SDCC3_APPS_CBCR,
  1230. .has_sibling = 0,
  1231. .base = &virt_bases[GCC_BASE],
  1232. .c = {
  1233. .dbg_name = "gcc_sdcc3_apps_clk",
  1234. .parent = &sdcc3_apps_clk_src.c,
  1235. .ops = &clk_ops_branch,
  1236. CLK_INIT(gcc_sdcc3_apps_clk.c),
  1237. },
  1238. };
  1239. static struct branch_clk gcc_sys_noc_usb3_axi_clk = {
  1240. .cbcr_reg = SYS_NOC_USB3_AXI_CBCR,
  1241. .has_sibling = 1,
  1242. .base = &virt_bases[GCC_BASE],
  1243. .c = {
  1244. .dbg_name = "gcc_sys_noc_usb3_axi_clk",
  1245. .parent = &usb30_master_clk_src.c,
  1246. .ops = &clk_ops_branch,
  1247. CLK_INIT(gcc_sys_noc_usb3_axi_clk.c),
  1248. },
  1249. };
  1250. static struct branch_clk gcc_usb3_aux_clk = {
  1251. .cbcr_reg = USB3_AUX_CBCR,
  1252. .has_sibling = 0,
  1253. .base = &virt_bases[GCC_BASE],
  1254. .c = {
  1255. .dbg_name = "gcc_usb3_aux_clk",
  1256. .parent = &usb3_aux_clk_src.c,
  1257. .ops = &clk_ops_branch,
  1258. CLK_INIT(gcc_usb3_aux_clk.c),
  1259. },
  1260. };
  1261. static struct branch_clk gcc_usb3_pipe_clk = {
  1262. .cbcr_reg = USB3_PIPE_CBCR,
  1263. .has_sibling = 0,
  1264. .base = &virt_bases[GCC_BASE],
  1265. .c = {
  1266. .dbg_name = "gcc_usb3_pipe_clk",
  1267. .parent = &usb3_pipe_clk_src.c,
  1268. .ops = &clk_ops_branch,
  1269. CLK_INIT(gcc_usb3_pipe_clk.c),
  1270. },
  1271. };
  1272. static struct branch_clk gcc_usb30_master_clk = {
  1273. .cbcr_reg = USB30_MASTER_CBCR,
  1274. .bcr_reg = USB_30_BCR,
  1275. .has_sibling = 1,
  1276. .base = &virt_bases[GCC_BASE],
  1277. .c = {
  1278. .dbg_name = "gcc_usb30_master_clk",
  1279. .parent = &usb30_master_clk_src.c,
  1280. .ops = &clk_ops_branch,
  1281. CLK_INIT(gcc_usb30_master_clk.c),
  1282. .depends = &gcc_sys_noc_usb3_axi_clk.c,
  1283. },
  1284. };
  1285. static struct branch_clk gcc_usb30_mock_utmi_clk = {
  1286. .cbcr_reg = USB30_MOCK_UTMI_CBCR,
  1287. .has_sibling = 0,
  1288. .base = &virt_bases[GCC_BASE],
  1289. .c = {
  1290. .dbg_name = "gcc_usb30_mock_utmi_clk",
  1291. .parent = &usb30_mock_utmi_clk_src.c,
  1292. .ops = &clk_ops_branch,
  1293. CLK_INIT(gcc_usb30_mock_utmi_clk.c),
  1294. },
  1295. };
  1296. static struct branch_clk gcc_usb30_sleep_clk = {
  1297. .cbcr_reg = USB30_SLEEP_CBCR,
  1298. .has_sibling = 1,
  1299. .base = &virt_bases[GCC_BASE],
  1300. .c = {
  1301. .dbg_name = "gcc_usb30_sleep_clk",
  1302. .ops = &clk_ops_branch,
  1303. CLK_INIT(gcc_usb30_sleep_clk.c),
  1304. },
  1305. };
  1306. static struct branch_clk gcc_usb_hs_ahb_clk = {
  1307. .cbcr_reg = USB_HS_AHB_CBCR,
  1308. .has_sibling = 1,
  1309. .base = &virt_bases[GCC_BASE],
  1310. .c = {
  1311. .dbg_name = "gcc_usb_hs_ahb_clk",
  1312. .ops = &clk_ops_branch,
  1313. CLK_INIT(gcc_usb_hs_ahb_clk.c),
  1314. },
  1315. };
  1316. static struct branch_clk gcc_usb_hs_system_clk = {
  1317. .cbcr_reg = USB_HS_SYSTEM_CBCR,
  1318. .has_sibling = 0,
  1319. .bcr_reg = USB_HS_BCR,
  1320. .base = &virt_bases[GCC_BASE],
  1321. .c = {
  1322. .dbg_name = "gcc_usb_hs_system_clk",
  1323. .parent = &usb_hs_system_clk_src.c,
  1324. .ops = &clk_ops_branch,
  1325. CLK_INIT(gcc_usb_hs_system_clk.c),
  1326. },
  1327. };
  1328. static struct branch_clk gcc_usb_hsic_ahb_clk = {
  1329. .cbcr_reg = USB_HSIC_AHB_CBCR,
  1330. .has_sibling = 1,
  1331. .base = &virt_bases[GCC_BASE],
  1332. .c = {
  1333. .dbg_name = "gcc_usb_hsic_ahb_clk",
  1334. .ops = &clk_ops_branch,
  1335. CLK_INIT(gcc_usb_hsic_ahb_clk.c),
  1336. },
  1337. };
  1338. static struct branch_clk gcc_usb_hsic_clk = {
  1339. .cbcr_reg = USB_HSIC_CBCR,
  1340. .has_sibling = 0,
  1341. .bcr_reg = USB_HS_HSIC_BCR,
  1342. .base = &virt_bases[GCC_BASE],
  1343. .c = {
  1344. .dbg_name = "gcc_usb_hsic_clk",
  1345. .parent = &usb_hsic_clk_src.c,
  1346. .ops = &clk_ops_branch,
  1347. CLK_INIT(gcc_usb_hsic_clk.c),
  1348. },
  1349. };
  1350. static struct branch_clk gcc_usb_hsic_io_cal_clk = {
  1351. .cbcr_reg = USB_HSIC_IO_CAL_CBCR,
  1352. .has_sibling = 0,
  1353. .base = &virt_bases[GCC_BASE],
  1354. .c = {
  1355. .dbg_name = "gcc_usb_hsic_io_cal_clk",
  1356. .parent = &usb_hsic_io_cal_clk_src.c,
  1357. .ops = &clk_ops_branch,
  1358. CLK_INIT(gcc_usb_hsic_io_cal_clk.c),
  1359. },
  1360. };
  1361. static struct branch_clk gcc_usb_hsic_io_cal_sleep_clk = {
  1362. .cbcr_reg = USB_HSIC_IO_CAL_SLEEP_CBCR,
  1363. .has_sibling = 1,
  1364. .base = &virt_bases[GCC_BASE],
  1365. .c = {
  1366. .dbg_name = "gcc_usb_hsic_io_cal_sleep_clk",
  1367. .ops = &clk_ops_branch,
  1368. CLK_INIT(gcc_usb_hsic_io_cal_sleep_clk.c),
  1369. },
  1370. };
  1371. static struct branch_clk gcc_usb_hsic_system_clk = {
  1372. .cbcr_reg = USB_HSIC_SYSTEM_CBCR,
  1373. .has_sibling = 0,
  1374. .bcr_reg = USB_HS_HSIC_BCR,
  1375. .base = &virt_bases[GCC_BASE],
  1376. .c = {
  1377. .dbg_name = "gcc_usb_hsic_system_clk",
  1378. .parent = &usb_hsic_system_clk_src.c,
  1379. .ops = &clk_ops_branch,
  1380. CLK_INIT(gcc_usb_hsic_system_clk.c),
  1381. },
  1382. };
  1383. static struct branch_clk gcc_usb_hsic_xcvr_fs_clk = {
  1384. .cbcr_reg = USB_HSIC_XCVR_FS_CBCR,
  1385. .has_sibling = 0,
  1386. .base = &virt_bases[GCC_BASE],
  1387. .c = {
  1388. .dbg_name = "gcc_usb_hsic_xcvr_fs_clk",
  1389. .parent = &usb_hsic_xcvr_fs_clk_src.c,
  1390. .ops = &clk_ops_branch,
  1391. CLK_INIT(gcc_usb_hsic_xcvr_fs_clk.c),
  1392. },
  1393. };
  1394. static struct branch_clk q6ss_ahb_lfabif_clk = {
  1395. .cbcr_reg = Q6SS_AHB_LFABIF_CBCR,
  1396. .has_sibling = 1,
  1397. .base = &virt_bases[LPASS_BASE],
  1398. .c = {
  1399. .dbg_name = "q6ss_ahb_lfabif_clk",
  1400. .ops = &clk_ops_branch,
  1401. CLK_INIT(q6ss_ahb_lfabif_clk.c),
  1402. },
  1403. };
  1404. static struct branch_clk q6ss_ahbm_clk = {
  1405. .cbcr_reg = Q6SS_AHBM_CBCR,
  1406. .has_sibling = 1,
  1407. .base = &virt_bases[LPASS_BASE],
  1408. .c = {
  1409. .dbg_name = "q6ss_ahbm_clk",
  1410. .ops = &clk_ops_branch,
  1411. CLK_INIT(q6ss_ahbm_clk.c),
  1412. },
  1413. };
  1414. static DEFINE_CLK_VOTER(pnoc_msmbus_clk, &pnoc_clk.c, LONG_MAX);
  1415. static DEFINE_CLK_VOTER(snoc_msmbus_clk, &snoc_clk.c, LONG_MAX);
  1416. static DEFINE_CLK_VOTER(cnoc_msmbus_clk, &cnoc_clk.c, LONG_MAX);
  1417. static DEFINE_CLK_VOTER(pnoc_msmbus_a_clk, &pnoc_a_clk.c, LONG_MAX);
  1418. static DEFINE_CLK_VOTER(snoc_msmbus_a_clk, &snoc_a_clk.c, LONG_MAX);
  1419. static DEFINE_CLK_VOTER(cnoc_msmbus_a_clk, &cnoc_a_clk.c, LONG_MAX);
  1420. static DEFINE_CLK_VOTER(bimc_msmbus_clk, &bimc_clk.c, LONG_MAX);
  1421. static DEFINE_CLK_VOTER(bimc_msmbus_a_clk, &bimc_a_clk.c, LONG_MAX);
  1422. static DEFINE_CLK_VOTER(pnoc_sdcc2_clk, &pnoc_clk.c, LONG_MAX);
  1423. static DEFINE_CLK_VOTER(pnoc_sdcc3_clk, &pnoc_clk.c, LONG_MAX);
  1424. static DEFINE_CLK_VOTER(pnoc_sps_clk, &pnoc_clk.c, LONG_MAX);
  1425. static DEFINE_CLK_BRANCH_VOTER(cxo_pil_lpass_clk, &xo.c);
  1426. static DEFINE_CLK_BRANCH_VOTER(cxo_pil_mss_clk, &xo.c);
  1427. static DEFINE_CLK_MEASURE(a7_m_clk);
  1428. #ifdef CONFIG_DEBUG_FS
  1429. struct measure_mux_entry {
  1430. struct clk *c;
  1431. int base;
  1432. u32 debug_mux;
  1433. };
  1434. struct measure_mux_entry measure_mux[] = {
  1435. {&gcc_mss_cfg_ahb_clk.c, GCC_BASE, 0x0030},
  1436. {&gcc_mss_q6_bimc_axi_clk.c, GCC_BASE, 0x0031},
  1437. {&gcc_usb30_master_clk.c, GCC_BASE, 0x0050},
  1438. {&gcc_usb30_sleep_clk.c, GCC_BASE, 0x0051},
  1439. {&gcc_usb30_mock_utmi_clk.c, GCC_BASE, 0x0052},
  1440. {&gcc_usb3_pipe_clk.c, GCC_BASE, 0x0054},
  1441. {&gcc_usb3_aux_clk.c, GCC_BASE, 0x0055},
  1442. {&gcc_usb_hsic_ahb_clk.c, GCC_BASE, 0x0058},
  1443. {&gcc_usb_hsic_system_clk.c, GCC_BASE, 0x0059},
  1444. {&gcc_usb_hsic_clk.c, GCC_BASE, 0x005a},
  1445. {&gcc_usb_hsic_io_cal_clk.c, GCC_BASE, 0x005b},
  1446. {&gcc_usb_hsic_io_cal_sleep_clk.c, GCC_BASE, 0x005c},
  1447. {&gcc_usb_hsic_xcvr_fs_clk.c, GCC_BASE, 0x005d},
  1448. {&gcc_usb_hs_system_clk.c, GCC_BASE, 0x0060},
  1449. {&gcc_usb_hs_ahb_clk.c, GCC_BASE, 0x0061},
  1450. {&gcc_sdcc2_apps_clk.c, GCC_BASE, 0x0070},
  1451. {&gcc_sdcc2_ahb_clk.c, GCC_BASE, 0x0071},
  1452. {&gcc_sdcc3_apps_clk.c, GCC_BASE, 0x0078},
  1453. {&gcc_sdcc3_ahb_clk.c, GCC_BASE, 0x0079},
  1454. {&gcc_blsp1_ahb_clk.c, GCC_BASE, 0x0088},
  1455. {&gcc_blsp1_qup1_spi_apps_clk.c, GCC_BASE, 0x008a},
  1456. {&gcc_blsp1_qup1_i2c_apps_clk.c, GCC_BASE, 0x008b},
  1457. {&gcc_blsp1_uart1_apps_clk.c, GCC_BASE, 0x008c},
  1458. {&gcc_blsp1_qup2_spi_apps_clk.c, GCC_BASE, 0x008e},
  1459. {&gcc_blsp1_qup2_i2c_apps_clk.c, GCC_BASE, 0x0090},
  1460. {&gcc_blsp1_uart2_apps_clk.c, GCC_BASE, 0x0091},
  1461. {&gcc_blsp1_qup3_spi_apps_clk.c, GCC_BASE, 0x0093},
  1462. {&gcc_blsp1_qup3_i2c_apps_clk.c, GCC_BASE, 0x0094},
  1463. {&gcc_blsp1_uart3_apps_clk.c, GCC_BASE, 0x0095},
  1464. {&gcc_blsp1_qup4_spi_apps_clk.c, GCC_BASE, 0x0098},
  1465. {&gcc_blsp1_qup4_i2c_apps_clk.c, GCC_BASE, 0x0099},
  1466. {&gcc_blsp1_uart4_apps_clk.c, GCC_BASE, 0x009a},
  1467. {&gcc_blsp1_qup5_spi_apps_clk.c, GCC_BASE, 0x009c},
  1468. {&gcc_blsp1_qup5_i2c_apps_clk.c, GCC_BASE, 0x009d},
  1469. {&gcc_blsp1_uart5_apps_clk.c, GCC_BASE, 0x009e},
  1470. {&gcc_blsp1_qup6_spi_apps_clk.c, GCC_BASE, 0x00a1},
  1471. {&gcc_blsp1_qup6_i2c_apps_clk.c, GCC_BASE, 0x00a2},
  1472. {&gcc_blsp1_uart6_apps_clk.c, GCC_BASE, 0x00a3},
  1473. {&gcc_pdm_ahb_clk.c, GCC_BASE, 0x00d0},
  1474. {&gcc_pdm2_clk.c, GCC_BASE, 0x00d2},
  1475. {&gcc_prng_ahb_clk.c, GCC_BASE, 0x00d8},
  1476. {&gcc_bam_dma_ahb_clk.c, GCC_BASE, 0x00e0},
  1477. {&gcc_bam_dma_inactivity_timers_clk.c, GCC_BASE, 0x00e1},
  1478. {&gcc_boot_rom_ahb_clk.c, GCC_BASE, 0x00f8},
  1479. {&gcc_ce1_clk.c, GCC_BASE, 0x0138},
  1480. {&gcc_ce1_axi_clk.c, GCC_BASE, 0x0139},
  1481. {&gcc_ce1_ahb_clk.c, GCC_BASE, 0x013a},
  1482. {&gcc_lpass_q6_axi_clk.c, GCC_BASE, 0x0160},
  1483. {&gcc_pcie_cfg_ahb_clk.c, GCC_BASE, 0x01f0},
  1484. {&gcc_pcie_pipe_clk.c, GCC_BASE, 0x01f1},
  1485. {&gcc_pcie_axi_clk.c, GCC_BASE, 0x01f2},
  1486. {&gcc_pcie_sleep_clk.c, GCC_BASE, 0x01f3},
  1487. {&gcc_pcie_axi_mstr_clk.c, GCC_BASE, 0x01f4},
  1488. {&bimc_clk.c, GCC_BASE, 0x0155},
  1489. {&cnoc_clk.c, GCC_BASE, 0x0008},
  1490. {&pnoc_clk.c, GCC_BASE, 0x0010},
  1491. {&snoc_clk.c, GCC_BASE, 0x0000},
  1492. {&q6ss_ahbm_clk.c, LPASS_BASE, 0x001d},
  1493. {&q6ss_ahb_lfabif_clk.c, LPASS_BASE, 0x001e},
  1494. {&a7_m_clk, APCS_GCC_BASE, 0x3},
  1495. {&dummy_clk, N_BASES, 0x0000},
  1496. };
  1497. static int measure_clk_set_parent(struct clk *c, struct clk *parent)
  1498. {
  1499. struct measure_clk *clk = to_measure_clk(c);
  1500. unsigned long flags;
  1501. u32 regval, clk_sel, i;
  1502. if (!parent)
  1503. return -EINVAL;
  1504. for (i = 0; i < (ARRAY_SIZE(measure_mux) - 1); i++)
  1505. if (measure_mux[i].c == parent)
  1506. break;
  1507. if (measure_mux[i].c == &dummy_clk)
  1508. return -EINVAL;
  1509. spin_lock_irqsave(&local_clock_reg_lock, flags);
  1510. /*
  1511. * Program the test vector, measurement period (sample_ticks)
  1512. * and scaling multiplier.
  1513. */
  1514. clk->sample_ticks = 0x10000;
  1515. clk->multiplier = 1;
  1516. writel_relaxed(0, GCC_REG_BASE(GCC_DEBUG_CLK_CTL));
  1517. switch (measure_mux[i].base) {
  1518. case GCC_BASE:
  1519. clk_sel = measure_mux[i].debug_mux;
  1520. break;
  1521. case APCS_GCC_BASE:
  1522. clk_sel = 0x16A;
  1523. regval = BVAL(5, 3, measure_mux[i].debug_mux);
  1524. writel_relaxed(regval, APCS_GCC_BASE(APCS_CLK_DIAG));
  1525. break;
  1526. default:
  1527. return -EINVAL;
  1528. }
  1529. /* Set debug mux clock index */
  1530. regval = BVAL(9, 0, clk_sel);
  1531. writel_relaxed(regval, GCC_REG_BASE(GCC_DEBUG_CLK_CTL));
  1532. /* Activate debug clock output */
  1533. regval |= BIT(16);
  1534. writel_relaxed(regval, GCC_REG_BASE(GCC_DEBUG_CLK_CTL));
  1535. /* Make sure test vector is set before starting measurements. */
  1536. mb();
  1537. spin_unlock_irqrestore(&local_clock_reg_lock, flags);
  1538. return 0;
  1539. }
  1540. /* Sample clock for 'ticks' reference clock ticks. */
  1541. static u32 run_measurement(unsigned ticks)
  1542. {
  1543. /* Stop counters and set the XO4 counter start value. */
  1544. writel_relaxed(ticks, GCC_REG_BASE(CLOCK_FRQ_MEASURE_CTL));
  1545. /* Wait for timer to become ready. */
  1546. while ((readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS)) &
  1547. BIT(25)) != 0)
  1548. cpu_relax();
  1549. /* Run measurement and wait for completion. */
  1550. writel_relaxed(BIT(20)|ticks, GCC_REG_BASE(CLOCK_FRQ_MEASURE_CTL));
  1551. while ((readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS)) &
  1552. BIT(25)) == 0)
  1553. cpu_relax();
  1554. /* Return measured ticks. */
  1555. return readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS)) &
  1556. BM(24, 0);
  1557. }
  1558. /*
  1559. * Perform a hardware rate measurement for a given clock.
  1560. * FOR DEBUG USE ONLY: Measurements take ~15 ms!
  1561. */
  1562. static unsigned long measure_clk_get_rate(struct clk *c)
  1563. {
  1564. unsigned long flags;
  1565. u32 gcc_xo4_reg_backup;
  1566. u64 raw_count_short, raw_count_full;
  1567. struct measure_clk *clk = to_measure_clk(c);
  1568. unsigned ret;
  1569. ret = clk_prepare_enable(&xo.c);
  1570. if (ret) {
  1571. pr_warning("CXO clock failed to enable. Can't measure\n");
  1572. return 0;
  1573. }
  1574. spin_lock_irqsave(&local_clock_reg_lock, flags);
  1575. /* Enable CXO/4 and RINGOSC branch. */
  1576. gcc_xo4_reg_backup = readl_relaxed(GCC_REG_BASE(GCC_XO_DIV4_CBCR));
  1577. writel_relaxed(0x1, GCC_REG_BASE(GCC_XO_DIV4_CBCR));
  1578. /*
  1579. * The ring oscillator counter will not reset if the measured clock
  1580. * is not running. To detect this, run a short measurement before
  1581. * the full measurement. If the raw results of the two are the same
  1582. * then the clock must be off.
  1583. */
  1584. /* Run a short measurement. (~1 ms) */
  1585. raw_count_short = run_measurement(0x1000);
  1586. /* Run a full measurement. (~14 ms) */
  1587. raw_count_full = run_measurement(clk->sample_ticks);
  1588. writel_relaxed(gcc_xo4_reg_backup, GCC_REG_BASE(GCC_XO_DIV4_CBCR));
  1589. /* Return 0 if the clock is off. */
  1590. if (raw_count_full == raw_count_short) {
  1591. ret = 0;
  1592. } else {
  1593. /* Compute rate in Hz. */
  1594. raw_count_full = ((raw_count_full * 10) + 15) * 4800000;
  1595. do_div(raw_count_full, ((clk->sample_ticks * 10) + 35));
  1596. ret = (raw_count_full * clk->multiplier);
  1597. }
  1598. writel_relaxed(0x51A00, GCC_REG_BASE(PLLTEST_PAD_CFG));
  1599. spin_unlock_irqrestore(&local_clock_reg_lock, flags);
  1600. clk_disable_unprepare(&xo.c);
  1601. return ret;
  1602. }
  1603. #else /* !CONFIG_DEBUG_FS */
  1604. static int measure_clk_set_parent(struct clk *clk, struct clk *parent)
  1605. {
  1606. return -EINVAL;
  1607. }
  1608. static unsigned long measure_clk_get_rate(struct clk *clk)
  1609. {
  1610. return 0;
  1611. }
  1612. #endif /* CONFIG_DEBUG_FS */
  1613. static struct clk_ops clk_ops_measure = {
  1614. .set_parent = measure_clk_set_parent,
  1615. .get_rate = measure_clk_get_rate,
  1616. };
  1617. static struct measure_clk measure_clk = {
  1618. .c = {
  1619. .dbg_name = "measure_clk",
  1620. .ops = &clk_ops_measure,
  1621. CLK_INIT(measure_clk.c),
  1622. },
  1623. .multiplier = 1,
  1624. };
  1625. static struct clk_lookup msm_clocks_krypton[] = {
  1626. CLK_LOOKUP("xo", xo.c, ""),
  1627. CLK_LOOKUP("measure", measure_clk.c, "debug"),
  1628. /* PLLS */
  1629. CLK_LOOKUP("", gpll0.c, ""),
  1630. CLK_LOOKUP("", gpll1.c, ""),
  1631. CLK_LOOKUP("", gpll0_ao.c, ""),
  1632. /* PIL-LPASS */
  1633. CLK_LOOKUP("xo", cxo_pil_lpass_clk.c, "fe200000.qcom,lpass"),
  1634. CLK_LOOKUP("bus_clk", gcc_lpass_q6_axi_clk.c, "fe200000.qcom,lpass"),
  1635. CLK_LOOKUP("core_clk", cxo_pil_lpass_clk.c, "fe200000.qcom,lpass"),
  1636. CLK_LOOKUP("iface_clk", q6ss_ahb_lfabif_clk.c, "fe200000.qcom,lpass"),
  1637. CLK_LOOKUP("reg_clk", q6ss_ahbm_clk.c, "fe200000.qcom,lpass"),
  1638. /* PIL-MODEM */
  1639. CLK_LOOKUP("xo", cxo_pil_mss_clk.c, "fc880000.qcom,mss"),
  1640. CLK_LOOKUP("bus_clk", gcc_mss_q6_bimc_axi_clk.c, "fc880000.qcom,mss"),
  1641. CLK_LOOKUP("iface_clk", gcc_mss_cfg_ahb_clk.c, "fc880000.qcom,mss"),
  1642. CLK_LOOKUP("mem_clk", gcc_boot_rom_ahb_clk.c, "fc880000.qcom,mss"),
  1643. /* SPS */
  1644. CLK_LOOKUP("dma_bam_pclk", gcc_bam_dma_ahb_clk.c, "msm_sps"),
  1645. CLK_LOOKUP("inactivity_clk", gcc_bam_dma_inactivity_timers_clk.c,
  1646. "msm_sps"),
  1647. CLK_LOOKUP("dfab_clk", pnoc_sps_clk.c, "msm_sps"),
  1648. CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f991f000.serial"),
  1649. CLK_LOOKUP("core_clk", gcc_blsp1_uart3_apps_clk.c, "f991f000.serial"),
  1650. CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f9928000.spi"),
  1651. CLK_LOOKUP("core_clk", gcc_blsp1_qup6_spi_apps_clk.c, "f9928000.spi"),
  1652. CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f9925000.i2c"),
  1653. CLK_LOOKUP("core_clk", gcc_blsp1_qup3_i2c_apps_clk.c, "f9925000.i2c"),
  1654. CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f991d000.uart"),
  1655. CLK_LOOKUP("core_clk", gcc_blsp1_uart1_apps_clk.c, "f991d000.uart"),
  1656. CLK_LOOKUP("core_clk", gcc_blsp1_qup1_i2c_apps_clk.c, ""),
  1657. CLK_LOOKUP("core_clk", gcc_blsp1_qup1_spi_apps_clk.c, ""),
  1658. CLK_LOOKUP("core_clk", gcc_blsp1_qup2_i2c_apps_clk.c, ""),
  1659. CLK_LOOKUP("core_clk", gcc_blsp1_qup2_spi_apps_clk.c, ""),
  1660. CLK_LOOKUP("core_clk", gcc_blsp1_qup3_spi_apps_clk.c, ""),
  1661. CLK_LOOKUP("core_clk", gcc_blsp1_qup4_i2c_apps_clk.c, ""),
  1662. CLK_LOOKUP("core_clk", gcc_blsp1_qup4_spi_apps_clk.c, ""),
  1663. CLK_LOOKUP("core_clk", gcc_blsp1_qup5_i2c_apps_clk.c, ""),
  1664. CLK_LOOKUP("core_clk", gcc_blsp1_qup5_spi_apps_clk.c, ""),
  1665. CLK_LOOKUP("core_clk", gcc_blsp1_qup6_i2c_apps_clk.c, ""),
  1666. CLK_LOOKUP("core_clk", gcc_blsp1_qup6_spi_apps_clk.c, ""),
  1667. CLK_LOOKUP("core_clk", gcc_blsp1_uart2_apps_clk.c, ""),
  1668. CLK_LOOKUP("core_clk", gcc_blsp1_uart4_apps_clk.c, ""),
  1669. CLK_LOOKUP("core_clk", gcc_blsp1_uart5_apps_clk.c, ""),
  1670. CLK_LOOKUP("core_clk", gcc_blsp1_uart6_apps_clk.c, ""),
  1671. CLK_LOOKUP("iface_clk", gcc_prng_ahb_clk.c, "f9bff000.qcom,msm-rng"),
  1672. CLK_LOOKUP("core_clk", gcc_pdm2_clk.c, ""),
  1673. CLK_LOOKUP("iface_clk", gcc_pdm_ahb_clk.c, ""),
  1674. CLK_LOOKUP("iface_clk", gcc_sdcc2_ahb_clk.c, "msm_sdcc.2"),
  1675. CLK_LOOKUP("core_clk", gcc_sdcc2_apps_clk.c, "msm_sdcc.2"),
  1676. CLK_LOOKUP("bus_clk", pnoc_sdcc2_clk.c, "msm_sdcc.2"),
  1677. CLK_LOOKUP("iface_clk", gcc_sdcc3_ahb_clk.c, "msm_sdcc.3"),
  1678. CLK_LOOKUP("core_clk", gcc_sdcc3_apps_clk.c, "msm_sdcc.3"),
  1679. CLK_LOOKUP("bus_clk", pnoc_sdcc3_clk.c, "msm_sdcc.3"),
  1680. CLK_LOOKUP("iface_clk", gcc_usb_hs_ahb_clk.c, "f9a55000.usb"),
  1681. CLK_LOOKUP("core_clk", gcc_usb_hs_system_clk.c, "f9a55000.usb"),
  1682. CLK_LOOKUP("iface_clk", gcc_usb_hsic_ahb_clk.c, "msm_hsic_host"),
  1683. CLK_LOOKUP("phy_clk", gcc_usb_hsic_clk.c, "msm_hsic_host"),
  1684. CLK_LOOKUP("cal_clk", gcc_usb_hsic_io_cal_clk.c, "msm_hsic_host"),
  1685. CLK_LOOKUP("core_clk", gcc_usb_hsic_system_clk.c, "msm_hsic_host"),
  1686. CLK_LOOKUP("alt_core_clk", gcc_usb_hsic_xcvr_fs_clk.c, ""),
  1687. CLK_LOOKUP("inactivity_clk", gcc_usb_hsic_io_cal_sleep_clk.c,
  1688. "msm_hsic_host"),
  1689. CLK_LOOKUP("core_clk", gcc_ce1_clk.c, "fd400000.qcom,qcedev"),
  1690. CLK_LOOKUP("iface_clk", gcc_ce1_ahb_clk.c, "fd400000.qcom,qcedev"),
  1691. CLK_LOOKUP("bus_clk", gcc_ce1_axi_clk.c, "fd400000.qcom,qcedev"),
  1692. CLK_LOOKUP("core_clk_src", ce1_clk_src.c, "fd400000.qcom,qcedev"),
  1693. CLK_LOOKUP("core_clk", gcc_ce1_clk.c, "fd400000.qcom,qcrypto"),
  1694. CLK_LOOKUP("iface_clk", gcc_ce1_ahb_clk.c, "fd400000.qcom,qcrypto"),
  1695. CLK_LOOKUP("bus_clk", gcc_ce1_axi_clk.c, "fd400000.qcom,qcrypto"),
  1696. CLK_LOOKUP("core_clk_src", ce1_clk_src.c, "fd400000.qcom,qcrypto"),
  1697. /* RPM and voter clocks */
  1698. CLK_LOOKUP("bus_clk", snoc_clk.c, ""),
  1699. CLK_LOOKUP("bus_clk", pnoc_clk.c, ""),
  1700. CLK_LOOKUP("bus_clk", cnoc_clk.c, ""),
  1701. CLK_LOOKUP("mem_clk", bimc_clk.c, ""),
  1702. CLK_LOOKUP("bus_clk", snoc_a_clk.c, ""),
  1703. CLK_LOOKUP("bus_clk", pnoc_a_clk.c, ""),
  1704. CLK_LOOKUP("bus_clk", cnoc_a_clk.c, ""),
  1705. CLK_LOOKUP("mem_clk", bimc_a_clk.c, ""),
  1706. CLK_LOOKUP("bus_clk", cnoc_msmbus_clk.c, "msm_config_noc"),
  1707. CLK_LOOKUP("bus_a_clk", cnoc_msmbus_a_clk.c, "msm_config_noc"),
  1708. CLK_LOOKUP("bus_clk", snoc_msmbus_clk.c, "msm_sys_noc"),
  1709. CLK_LOOKUP("bus_a_clk", snoc_msmbus_a_clk.c, "msm_sys_noc"),
  1710. CLK_LOOKUP("bus_clk", pnoc_msmbus_clk.c, "msm_periph_noc"),
  1711. CLK_LOOKUP("bus_a_clk", pnoc_msmbus_a_clk.c, "msm_periph_noc"),
  1712. CLK_LOOKUP("mem_clk", bimc_msmbus_clk.c, "msm_bimc"),
  1713. CLK_LOOKUP("mem_a_clk", bimc_msmbus_a_clk.c, "msm_bimc"),
  1714. CLK_LOOKUP("a7_m_clk", a7_m_clk, ""),
  1715. /* CoreSight clocks */
  1716. CLK_LOOKUP("core_clk", qdss_clk.c, "fc322000.tmc"),
  1717. CLK_LOOKUP("core_clk", qdss_clk.c, "fc318000.tpiu"),
  1718. CLK_LOOKUP("core_clk", qdss_clk.c, "fc31c000.replicator"),
  1719. CLK_LOOKUP("core_clk", qdss_clk.c, "fc307000.tmc"),
  1720. CLK_LOOKUP("core_clk", qdss_clk.c, "fc31b000.funnel"),
  1721. CLK_LOOKUP("core_clk", qdss_clk.c, "fc319000.funnel"),
  1722. CLK_LOOKUP("core_clk", qdss_clk.c, "fc31a000.funnel"),
  1723. CLK_LOOKUP("core_clk", qdss_clk.c, "fc321000.stm"),
  1724. CLK_LOOKUP("core_clk", qdss_clk.c, "fc332000.etm"),
  1725. CLK_LOOKUP("core_clk", qdss_clk.c, "fc332000.jtagmm"),
  1726. CLK_LOOKUP("core_clk", qdss_clk.c, "fc308000.cti"),
  1727. CLK_LOOKUP("core_clk", qdss_clk.c, "fc309000.cti"),
  1728. CLK_LOOKUP("core_clk", qdss_clk.c, "fc30a000.cti"),
  1729. CLK_LOOKUP("core_clk", qdss_clk.c, "fc30b000.cti"),
  1730. CLK_LOOKUP("core_clk", qdss_clk.c, "fc30c000.cti"),
  1731. CLK_LOOKUP("core_clk", qdss_clk.c, "fc30d000.cti"),
  1732. CLK_LOOKUP("core_clk", qdss_clk.c, "fc30e000.cti"),
  1733. CLK_LOOKUP("core_clk", qdss_clk.c, "fc30f000.cti"),
  1734. CLK_LOOKUP("core_clk", qdss_clk.c, "fc310000.cti"),
  1735. CLK_LOOKUP("core_clk", qdss_clk.c, "fc333000.cti"),
  1736. CLK_LOOKUP("core_clk", qdss_clk.c, "f9011038.hwevent"),
  1737. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc322000.tmc"),
  1738. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc318000.tpiu"),
  1739. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc31c000.replicator"),
  1740. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc307000.tmc"),
  1741. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc31b000.funnel"),
  1742. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc319000.funnel"),
  1743. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc31a000.funnel"),
  1744. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc321000.stm"),
  1745. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc332000.etm"),
  1746. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc332000.jtagmm"),
  1747. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc308000.cti"),
  1748. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc309000.cti"),
  1749. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30a000.cti"),
  1750. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30b000.cti"),
  1751. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30c000.cti"),
  1752. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30d000.cti"),
  1753. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30e000.cti"),
  1754. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30f000.cti"),
  1755. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc310000.cti"),
  1756. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc333000.cti"),
  1757. CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "f9011038.hwevent"),
  1758. /* Misc rcgs without clients */
  1759. CLK_LOOKUP("", usb30_master_clk_src.c, ""),
  1760. CLK_LOOKUP("", blsp1_qup1_i2c_apps_clk_src.c, ""),
  1761. CLK_LOOKUP("", blsp1_qup1_spi_apps_clk_src.c, ""),
  1762. CLK_LOOKUP("", blsp1_qup2_i2c_apps_clk_src.c, ""),
  1763. CLK_LOOKUP("", blsp1_qup2_spi_apps_clk_src.c, ""),
  1764. CLK_LOOKUP("", blsp1_qup3_i2c_apps_clk_src.c, ""),
  1765. CLK_LOOKUP("", blsp1_qup3_spi_apps_clk_src.c, ""),
  1766. CLK_LOOKUP("", blsp1_qup4_i2c_apps_clk_src.c, ""),
  1767. CLK_LOOKUP("", blsp1_qup4_spi_apps_clk_src.c, ""),
  1768. CLK_LOOKUP("", blsp1_qup5_i2c_apps_clk_src.c, ""),
  1769. CLK_LOOKUP("", blsp1_qup5_spi_apps_clk_src.c, ""),
  1770. CLK_LOOKUP("", blsp1_qup6_i2c_apps_clk_src.c, ""),
  1771. CLK_LOOKUP("", blsp1_qup6_spi_apps_clk_src.c, ""),
  1772. CLK_LOOKUP("", blsp1_uart1_apps_clk_src.c, ""),
  1773. CLK_LOOKUP("", blsp1_uart2_apps_clk_src.c, ""),
  1774. CLK_LOOKUP("", blsp1_uart3_apps_clk_src.c, ""),
  1775. CLK_LOOKUP("", blsp1_uart4_apps_clk_src.c, ""),
  1776. CLK_LOOKUP("", blsp1_uart5_apps_clk_src.c, ""),
  1777. CLK_LOOKUP("", blsp1_uart6_apps_clk_src.c, ""),
  1778. CLK_LOOKUP("", pcie_aux_clk_src.c, ""),
  1779. CLK_LOOKUP("", pcie_pipe_clk_src.c, ""),
  1780. CLK_LOOKUP("", pdm2_clk_src.c, ""),
  1781. CLK_LOOKUP("", sdcc2_apps_clk_src.c, ""),
  1782. CLK_LOOKUP("", sdcc3_apps_clk_src.c, ""),
  1783. CLK_LOOKUP("", usb3_aux_clk_src.c, ""),
  1784. CLK_LOOKUP("", usb3_pipe_clk_src.c, ""),
  1785. CLK_LOOKUP("", usb30_mock_utmi_clk_src.c, ""),
  1786. CLK_LOOKUP("", usb_hs_system_clk_src.c, ""),
  1787. CLK_LOOKUP("", usb_hsic_clk_src.c, ""),
  1788. CLK_LOOKUP("", usb_hsic_io_cal_clk_src.c, ""),
  1789. CLK_LOOKUP("", usb_hsic_system_clk_src.c, ""),
  1790. CLK_LOOKUP("", usb_hsic_xcvr_fs_clk_src.c, ""),
  1791. CLK_LOOKUP("", gcc_pcie_axi_clk.c, ""),
  1792. CLK_LOOKUP("", gcc_pcie_axi_mstr_clk.c, ""),
  1793. CLK_LOOKUP("", gcc_pcie_cfg_ahb_clk.c, ""),
  1794. CLK_LOOKUP("", gcc_pcie_pipe_clk.c, ""),
  1795. CLK_LOOKUP("", gcc_pcie_sleep_clk.c, ""),
  1796. CLK_LOOKUP("", gcc_sys_noc_usb3_axi_clk.c, ""),
  1797. CLK_LOOKUP("", gcc_usb3_aux_clk.c, ""),
  1798. CLK_LOOKUP("", gcc_usb3_pipe_clk.c, ""),
  1799. CLK_LOOKUP("", gcc_usb30_master_clk.c, ""),
  1800. CLK_LOOKUP("", gcc_usb30_mock_utmi_clk.c, ""),
  1801. CLK_LOOKUP("", gcc_usb30_sleep_clk.c, ""),
  1802. };
  1803. static void __init reg_init(void)
  1804. {
  1805. u32 regval;
  1806. /* Vote for GPLL0 to turn on. Needed by acpuclock. */
  1807. regval = readl_relaxed(GCC_REG_BASE(APCS_GPLL_ENA_VOTE));
  1808. regval |= BIT(0);
  1809. writel_relaxed(regval, GCC_REG_BASE(APCS_GPLL_ENA_VOTE));
  1810. }
  1811. static void __init msmkrypton_clock_post_init(void)
  1812. {
  1813. /*
  1814. * Hold an active set vote for CXO; this is because CXO is expected
  1815. * to remain on whenever CPUs aren't power collapsed.
  1816. */
  1817. clk_prepare_enable(&xo_a_clk.c);
  1818. }
  1819. #define GCC_CC_PHYS 0xFC400000
  1820. #define GCC_CC_SIZE SZ_8K
  1821. #define LPASS_CC_PHYS 0xFE000000
  1822. #define LPASS_CC_SIZE SZ_256K
  1823. #define APCS_GLB_PHYS 0xF9010000
  1824. #define APCS_GLB_SIZE 0x38
  1825. #define APCS_GCC_PHYS 0xF9011000
  1826. #define APCS_GCC_SIZE 0x1C
  1827. #define APCS_ACC_PHYS 0xF9008000
  1828. #define APCS_ACC_SIZE 0x40
  1829. static void __init msmkrypton_clock_pre_init(void)
  1830. {
  1831. virt_bases[GCC_BASE] = ioremap(GCC_CC_PHYS, GCC_CC_SIZE);
  1832. if (!virt_bases[GCC_BASE])
  1833. panic("clock-krypton: Unable to ioremap GCC memory!");
  1834. virt_bases[LPASS_BASE] = ioremap(LPASS_CC_PHYS, LPASS_CC_SIZE);
  1835. if (!virt_bases[LPASS_BASE])
  1836. panic("clock-8226: Unable to ioremap LPASS_CC memory!");
  1837. virt_bases[APCS_GLB_BASE] = ioremap(APCS_GLB_PHYS, APCS_GLB_SIZE);
  1838. if (!virt_bases[APCS_GLB_BASE])
  1839. panic("clock-krypton: Unable to ioremap APCS_GLB memory!");
  1840. virt_bases[APCS_GCC_BASE] = ioremap(APCS_GCC_PHYS, APCS_GCC_SIZE);
  1841. if (!virt_bases[APCS_GCC_BASE])
  1842. panic("clock-krypton: Unable to ioremap APCS_GCC memory!");
  1843. virt_bases[APCS_ACC_BASE] = ioremap(APCS_ACC_PHYS, APCS_ACC_SIZE);
  1844. if (!virt_bases[APCS_ACC_BASE])
  1845. panic("clock-krypton: Unable to ioremap APCS_PLL memory!");
  1846. vdd_dig.regulator[0] = regulator_get(NULL, "vdd_dig");
  1847. if (IS_ERR(vdd_dig.regulator[0]))
  1848. panic("clock-krypton: Unable to get the vdd_dig regulator!");
  1849. enable_rpm_scaling();
  1850. reg_init();
  1851. }
  1852. struct clock_init_data msmkrypton_clock_init_data __initdata = {
  1853. .table = msm_clocks_krypton,
  1854. .size = ARRAY_SIZE(msm_clocks_krypton),
  1855. .pre_init = msmkrypton_clock_pre_init,
  1856. .post_init = msmkrypton_clock_post_init,
  1857. };