clk-pll.c 70 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2012, 2013, NVIDIA CORPORATION. All rights reserved.
  4. */
  5. #include <linux/slab.h>
  6. #include <linux/io.h>
  7. #include <linux/delay.h>
  8. #include <linux/err.h>
  9. #include <linux/clk.h>
  10. #include <linux/clk-provider.h>
  11. #include "clk.h"
  12. #define PLL_BASE_BYPASS BIT(31)
  13. #define PLL_BASE_ENABLE BIT(30)
  14. #define PLL_BASE_REF_ENABLE BIT(29)
  15. #define PLL_BASE_OVERRIDE BIT(28)
  16. #define PLL_BASE_DIVP_SHIFT 20
  17. #define PLL_BASE_DIVP_WIDTH 3
  18. #define PLL_BASE_DIVN_SHIFT 8
  19. #define PLL_BASE_DIVN_WIDTH 10
  20. #define PLL_BASE_DIVM_SHIFT 0
  21. #define PLL_BASE_DIVM_WIDTH 5
  22. #define PLLU_POST_DIVP_MASK 0x1
  23. #define PLL_MISC_DCCON_SHIFT 20
  24. #define PLL_MISC_CPCON_SHIFT 8
  25. #define PLL_MISC_CPCON_WIDTH 4
  26. #define PLL_MISC_CPCON_MASK ((1 << PLL_MISC_CPCON_WIDTH) - 1)
  27. #define PLL_MISC_LFCON_SHIFT 4
  28. #define PLL_MISC_LFCON_WIDTH 4
  29. #define PLL_MISC_LFCON_MASK ((1 << PLL_MISC_LFCON_WIDTH) - 1)
  30. #define PLL_MISC_VCOCON_SHIFT 0
  31. #define PLL_MISC_VCOCON_WIDTH 4
  32. #define PLL_MISC_VCOCON_MASK ((1 << PLL_MISC_VCOCON_WIDTH) - 1)
  33. #define OUT_OF_TABLE_CPCON 8
  34. #define PMC_PLLP_WB0_OVERRIDE 0xf8
  35. #define PMC_PLLP_WB0_OVERRIDE_PLLM_ENABLE BIT(12)
  36. #define PMC_PLLP_WB0_OVERRIDE_PLLM_OVERRIDE BIT(11)
  37. #define PLL_POST_LOCK_DELAY 50
  38. #define PLLDU_LFCON_SET_DIVN 600
  39. #define PLLE_BASE_DIVCML_SHIFT 24
  40. #define PLLE_BASE_DIVCML_MASK 0xf
  41. #define PLLE_BASE_DIVP_SHIFT 16
  42. #define PLLE_BASE_DIVP_WIDTH 6
  43. #define PLLE_BASE_DIVN_SHIFT 8
  44. #define PLLE_BASE_DIVN_WIDTH 8
  45. #define PLLE_BASE_DIVM_SHIFT 0
  46. #define PLLE_BASE_DIVM_WIDTH 8
  47. #define PLLE_BASE_ENABLE BIT(31)
  48. #define PLLE_MISC_SETUP_BASE_SHIFT 16
  49. #define PLLE_MISC_SETUP_BASE_MASK (0xffff << PLLE_MISC_SETUP_BASE_SHIFT)
  50. #define PLLE_MISC_LOCK_ENABLE BIT(9)
  51. #define PLLE_MISC_READY BIT(15)
  52. #define PLLE_MISC_SETUP_EX_SHIFT 2
  53. #define PLLE_MISC_SETUP_EX_MASK (3 << PLLE_MISC_SETUP_EX_SHIFT)
  54. #define PLLE_MISC_SETUP_MASK (PLLE_MISC_SETUP_BASE_MASK | \
  55. PLLE_MISC_SETUP_EX_MASK)
  56. #define PLLE_MISC_SETUP_VALUE (7 << PLLE_MISC_SETUP_BASE_SHIFT)
  57. #define PLLE_SS_CTRL 0x68
  58. #define PLLE_SS_CNTL_BYPASS_SS BIT(10)
  59. #define PLLE_SS_CNTL_INTERP_RESET BIT(11)
  60. #define PLLE_SS_CNTL_SSC_BYP BIT(12)
  61. #define PLLE_SS_CNTL_CENTER BIT(14)
  62. #define PLLE_SS_CNTL_INVERT BIT(15)
  63. #define PLLE_SS_DISABLE (PLLE_SS_CNTL_BYPASS_SS | PLLE_SS_CNTL_INTERP_RESET |\
  64. PLLE_SS_CNTL_SSC_BYP)
  65. #define PLLE_SS_MAX_MASK 0x1ff
  66. #define PLLE_SS_MAX_VAL_TEGRA114 0x25
  67. #define PLLE_SS_MAX_VAL_TEGRA210 0x21
  68. #define PLLE_SS_INC_MASK (0xff << 16)
  69. #define PLLE_SS_INC_VAL (0x1 << 16)
  70. #define PLLE_SS_INCINTRV_MASK (0x3f << 24)
  71. #define PLLE_SS_INCINTRV_VAL_TEGRA114 (0x20 << 24)
  72. #define PLLE_SS_INCINTRV_VAL_TEGRA210 (0x23 << 24)
  73. #define PLLE_SS_COEFFICIENTS_MASK \
  74. (PLLE_SS_MAX_MASK | PLLE_SS_INC_MASK | PLLE_SS_INCINTRV_MASK)
  75. #define PLLE_SS_COEFFICIENTS_VAL_TEGRA114 \
  76. (PLLE_SS_MAX_VAL_TEGRA114 | PLLE_SS_INC_VAL |\
  77. PLLE_SS_INCINTRV_VAL_TEGRA114)
  78. #define PLLE_SS_COEFFICIENTS_VAL_TEGRA210 \
  79. (PLLE_SS_MAX_VAL_TEGRA210 | PLLE_SS_INC_VAL |\
  80. PLLE_SS_INCINTRV_VAL_TEGRA210)
  81. #define PLLE_AUX_PLLP_SEL BIT(2)
  82. #define PLLE_AUX_USE_LOCKDET BIT(3)
  83. #define PLLE_AUX_ENABLE_SWCTL BIT(4)
  84. #define PLLE_AUX_SS_SWCTL BIT(6)
  85. #define PLLE_AUX_SEQ_ENABLE BIT(24)
  86. #define PLLE_AUX_SEQ_START_STATE BIT(25)
  87. #define PLLE_AUX_PLLRE_SEL BIT(28)
  88. #define PLLE_AUX_SS_SEQ_INCLUDE BIT(31)
  89. #define XUSBIO_PLL_CFG0 0x51c
  90. #define XUSBIO_PLL_CFG0_PADPLL_RESET_SWCTL BIT(0)
  91. #define XUSBIO_PLL_CFG0_CLK_ENABLE_SWCTL BIT(2)
  92. #define XUSBIO_PLL_CFG0_PADPLL_USE_LOCKDET BIT(6)
  93. #define XUSBIO_PLL_CFG0_SEQ_ENABLE BIT(24)
  94. #define XUSBIO_PLL_CFG0_SEQ_START_STATE BIT(25)
  95. #define SATA_PLL_CFG0 0x490
  96. #define SATA_PLL_CFG0_PADPLL_RESET_SWCTL BIT(0)
  97. #define SATA_PLL_CFG0_PADPLL_USE_LOCKDET BIT(2)
  98. #define SATA_PLL_CFG0_SEQ_ENABLE BIT(24)
  99. #define SATA_PLL_CFG0_SEQ_START_STATE BIT(25)
  100. #define PLLE_MISC_PLLE_PTS BIT(8)
  101. #define PLLE_MISC_IDDQ_SW_VALUE BIT(13)
  102. #define PLLE_MISC_IDDQ_SW_CTRL BIT(14)
  103. #define PLLE_MISC_VREG_BG_CTRL_SHIFT 4
  104. #define PLLE_MISC_VREG_BG_CTRL_MASK (3 << PLLE_MISC_VREG_BG_CTRL_SHIFT)
  105. #define PLLE_MISC_VREG_CTRL_SHIFT 2
  106. #define PLLE_MISC_VREG_CTRL_MASK (2 << PLLE_MISC_VREG_CTRL_SHIFT)
  107. #define PLLCX_MISC_STROBE BIT(31)
  108. #define PLLCX_MISC_RESET BIT(30)
  109. #define PLLCX_MISC_SDM_DIV_SHIFT 28
  110. #define PLLCX_MISC_SDM_DIV_MASK (0x3 << PLLCX_MISC_SDM_DIV_SHIFT)
  111. #define PLLCX_MISC_FILT_DIV_SHIFT 26
  112. #define PLLCX_MISC_FILT_DIV_MASK (0x3 << PLLCX_MISC_FILT_DIV_SHIFT)
  113. #define PLLCX_MISC_ALPHA_SHIFT 18
  114. #define PLLCX_MISC_DIV_LOW_RANGE \
  115. ((0x1 << PLLCX_MISC_SDM_DIV_SHIFT) | \
  116. (0x1 << PLLCX_MISC_FILT_DIV_SHIFT))
  117. #define PLLCX_MISC_DIV_HIGH_RANGE \
  118. ((0x2 << PLLCX_MISC_SDM_DIV_SHIFT) | \
  119. (0x2 << PLLCX_MISC_FILT_DIV_SHIFT))
  120. #define PLLCX_MISC_COEF_LOW_RANGE \
  121. ((0x14 << PLLCX_MISC_KA_SHIFT) | (0x38 << PLLCX_MISC_KB_SHIFT))
  122. #define PLLCX_MISC_KA_SHIFT 2
  123. #define PLLCX_MISC_KB_SHIFT 9
  124. #define PLLCX_MISC_DEFAULT (PLLCX_MISC_COEF_LOW_RANGE | \
  125. (0x19 << PLLCX_MISC_ALPHA_SHIFT) | \
  126. PLLCX_MISC_DIV_LOW_RANGE | \
  127. PLLCX_MISC_RESET)
  128. #define PLLCX_MISC1_DEFAULT 0x000d2308
  129. #define PLLCX_MISC2_DEFAULT 0x30211200
  130. #define PLLCX_MISC3_DEFAULT 0x200
  131. #define PMC_SATA_PWRGT 0x1ac
  132. #define PMC_SATA_PWRGT_PLLE_IDDQ_VALUE BIT(5)
  133. #define PMC_SATA_PWRGT_PLLE_IDDQ_SWCTL BIT(4)
  134. #define PLLSS_MISC_KCP 0
  135. #define PLLSS_MISC_KVCO 0
  136. #define PLLSS_MISC_SETUP 0
  137. #define PLLSS_EN_SDM 0
  138. #define PLLSS_EN_SSC 0
  139. #define PLLSS_EN_DITHER2 0
  140. #define PLLSS_EN_DITHER 1
  141. #define PLLSS_SDM_RESET 0
  142. #define PLLSS_CLAMP 0
  143. #define PLLSS_SDM_SSC_MAX 0
  144. #define PLLSS_SDM_SSC_MIN 0
  145. #define PLLSS_SDM_SSC_STEP 0
  146. #define PLLSS_SDM_DIN 0
  147. #define PLLSS_MISC_DEFAULT ((PLLSS_MISC_KCP << 25) | \
  148. (PLLSS_MISC_KVCO << 24) | \
  149. PLLSS_MISC_SETUP)
  150. #define PLLSS_CFG_DEFAULT ((PLLSS_EN_SDM << 31) | \
  151. (PLLSS_EN_SSC << 30) | \
  152. (PLLSS_EN_DITHER2 << 29) | \
  153. (PLLSS_EN_DITHER << 28) | \
  154. (PLLSS_SDM_RESET) << 27 | \
  155. (PLLSS_CLAMP << 22))
  156. #define PLLSS_CTRL1_DEFAULT \
  157. ((PLLSS_SDM_SSC_MAX << 16) | PLLSS_SDM_SSC_MIN)
  158. #define PLLSS_CTRL2_DEFAULT \
  159. ((PLLSS_SDM_SSC_STEP << 16) | PLLSS_SDM_DIN)
  160. #define PLLSS_LOCK_OVERRIDE BIT(24)
  161. #define PLLSS_REF_SRC_SEL_SHIFT 25
  162. #define PLLSS_REF_SRC_SEL_MASK (3 << PLLSS_REF_SRC_SEL_SHIFT)
  163. #define UTMIP_PLL_CFG1 0x484
  164. #define UTMIP_PLL_CFG1_XTAL_FREQ_COUNT(x) (((x) & 0xfff) << 0)
  165. #define UTMIP_PLL_CFG1_ENABLE_DLY_COUNT(x) (((x) & 0x1f) << 27)
  166. #define UTMIP_PLL_CFG1_FORCE_PLL_ACTIVE_POWERDOWN BIT(12)
  167. #define UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERDOWN BIT(14)
  168. #define UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERUP BIT(15)
  169. #define UTMIP_PLL_CFG1_FORCE_PLLU_POWERDOWN BIT(16)
  170. #define UTMIP_PLL_CFG1_FORCE_PLLU_POWERUP BIT(17)
  171. #define UTMIP_PLL_CFG2 0x488
  172. #define UTMIP_PLL_CFG2_STABLE_COUNT(x) (((x) & 0xfff) << 6)
  173. #define UTMIP_PLL_CFG2_ACTIVE_DLY_COUNT(x) (((x) & 0x3f) << 18)
  174. #define UTMIP_PLL_CFG2_FORCE_PD_SAMP_A_POWERDOWN BIT(0)
  175. #define UTMIP_PLL_CFG2_FORCE_PD_SAMP_A_POWERUP BIT(1)
  176. #define UTMIP_PLL_CFG2_FORCE_PD_SAMP_B_POWERDOWN BIT(2)
  177. #define UTMIP_PLL_CFG2_FORCE_PD_SAMP_B_POWERUP BIT(3)
  178. #define UTMIP_PLL_CFG2_FORCE_PD_SAMP_C_POWERDOWN BIT(4)
  179. #define UTMIP_PLL_CFG2_FORCE_PD_SAMP_C_POWERUP BIT(5)
  180. #define UTMIP_PLL_CFG2_FORCE_PD_SAMP_D_POWERDOWN BIT(24)
  181. #define UTMIP_PLL_CFG2_FORCE_PD_SAMP_D_POWERUP BIT(25)
  182. #define UTMIP_PLL_CFG2_PHY_XTAL_CLOCKEN BIT(30)
  183. #define UTMIPLL_HW_PWRDN_CFG0 0x52c
  184. #define UTMIPLL_HW_PWRDN_CFG0_IDDQ_SWCTL BIT(0)
  185. #define UTMIPLL_HW_PWRDN_CFG0_IDDQ_OVERRIDE BIT(1)
  186. #define UTMIPLL_HW_PWRDN_CFG0_CLK_ENABLE_SWCTL BIT(2)
  187. #define UTMIPLL_HW_PWRDN_CFG0_SEQ_IN_SWCTL BIT(4)
  188. #define UTMIPLL_HW_PWRDN_CFG0_SEQ_RESET_INPUT_VALUE BIT(5)
  189. #define UTMIPLL_HW_PWRDN_CFG0_USE_LOCKDET BIT(6)
  190. #define UTMIPLL_HW_PWRDN_CFG0_SEQ_ENABLE BIT(24)
  191. #define UTMIPLL_HW_PWRDN_CFG0_SEQ_START_STATE BIT(25)
  192. #define PLLU_HW_PWRDN_CFG0 0x530
  193. #define PLLU_HW_PWRDN_CFG0_CLK_SWITCH_SWCTL BIT(0)
  194. #define PLLU_HW_PWRDN_CFG0_CLK_ENABLE_SWCTL BIT(2)
  195. #define PLLU_HW_PWRDN_CFG0_USE_LOCKDET BIT(6)
  196. #define PLLU_HW_PWRDN_CFG0_USE_SWITCH_DETECT BIT(7)
  197. #define PLLU_HW_PWRDN_CFG0_SEQ_ENABLE BIT(24)
  198. #define PLLU_HW_PWRDN_CFG0_IDDQ_PD_INCLUDE BIT(28)
  199. #define XUSB_PLL_CFG0 0x534
  200. #define XUSB_PLL_CFG0_UTMIPLL_LOCK_DLY 0x3ff
  201. #define XUSB_PLL_CFG0_PLLU_LOCK_DLY (0x3ff << 14)
  202. #define PLLU_BASE_CLKENABLE_USB BIT(21)
  203. #define PLLU_BASE_OVERRIDE BIT(24)
  204. #define pll_readl(offset, p) readl_relaxed(p->clk_base + offset)
  205. #define pll_readl_base(p) pll_readl(p->params->base_reg, p)
  206. #define pll_readl_misc(p) pll_readl(p->params->misc_reg, p)
  207. #define pll_override_readl(offset, p) readl_relaxed(p->pmc + offset)
  208. #define pll_readl_sdm_din(p) pll_readl(p->params->sdm_din_reg, p)
  209. #define pll_readl_sdm_ctrl(p) pll_readl(p->params->sdm_ctrl_reg, p)
  210. #define pll_writel(val, offset, p) writel_relaxed(val, p->clk_base + offset)
  211. #define pll_writel_base(val, p) pll_writel(val, p->params->base_reg, p)
  212. #define pll_writel_misc(val, p) pll_writel(val, p->params->misc_reg, p)
  213. #define pll_override_writel(val, offset, p) writel(val, p->pmc + offset)
  214. #define pll_writel_sdm_din(val, p) pll_writel(val, p->params->sdm_din_reg, p)
  215. #define pll_writel_sdm_ctrl(val, p) pll_writel(val, p->params->sdm_ctrl_reg, p)
  216. #define mask(w) ((1 << (w)) - 1)
  217. #define divm_mask(p) mask(p->params->div_nmp->divm_width)
  218. #define divn_mask(p) mask(p->params->div_nmp->divn_width)
  219. #define divp_mask(p) (p->params->flags & TEGRA_PLLU ? PLLU_POST_DIVP_MASK :\
  220. mask(p->params->div_nmp->divp_width))
  221. #define sdm_din_mask(p) p->params->sdm_din_mask
  222. #define sdm_en_mask(p) p->params->sdm_ctrl_en_mask
  223. #define divm_shift(p) (p)->params->div_nmp->divm_shift
  224. #define divn_shift(p) (p)->params->div_nmp->divn_shift
  225. #define divp_shift(p) (p)->params->div_nmp->divp_shift
  226. #define divm_mask_shifted(p) (divm_mask(p) << divm_shift(p))
  227. #define divn_mask_shifted(p) (divn_mask(p) << divn_shift(p))
  228. #define divp_mask_shifted(p) (divp_mask(p) << divp_shift(p))
  229. #define divm_max(p) (divm_mask(p))
  230. #define divn_max(p) (divn_mask(p))
  231. #define divp_max(p) (1 << (divp_mask(p)))
  232. #define sdin_din_to_data(din) ((u16)((din) ? : 0xFFFFU))
  233. #define sdin_data_to_din(dat) (((dat) == 0xFFFFU) ? 0 : (s16)dat)
  234. static struct div_nmp default_nmp = {
  235. .divn_shift = PLL_BASE_DIVN_SHIFT,
  236. .divn_width = PLL_BASE_DIVN_WIDTH,
  237. .divm_shift = PLL_BASE_DIVM_SHIFT,
  238. .divm_width = PLL_BASE_DIVM_WIDTH,
  239. .divp_shift = PLL_BASE_DIVP_SHIFT,
  240. .divp_width = PLL_BASE_DIVP_WIDTH,
  241. };
  242. static void clk_pll_enable_lock(struct tegra_clk_pll *pll)
  243. {
  244. u32 val;
  245. if (!(pll->params->flags & TEGRA_PLL_USE_LOCK))
  246. return;
  247. if (!(pll->params->flags & TEGRA_PLL_HAS_LOCK_ENABLE))
  248. return;
  249. val = pll_readl_misc(pll);
  250. val |= BIT(pll->params->lock_enable_bit_idx);
  251. pll_writel_misc(val, pll);
  252. }
  253. static int clk_pll_wait_for_lock(struct tegra_clk_pll *pll)
  254. {
  255. int i;
  256. u32 val, lock_mask;
  257. void __iomem *lock_addr;
  258. if (!(pll->params->flags & TEGRA_PLL_USE_LOCK)) {
  259. udelay(pll->params->lock_delay);
  260. return 0;
  261. }
  262. lock_addr = pll->clk_base;
  263. if (pll->params->flags & TEGRA_PLL_LOCK_MISC)
  264. lock_addr += pll->params->misc_reg;
  265. else
  266. lock_addr += pll->params->base_reg;
  267. lock_mask = pll->params->lock_mask;
  268. for (i = 0; i < pll->params->lock_delay; i++) {
  269. val = readl_relaxed(lock_addr);
  270. if ((val & lock_mask) == lock_mask) {
  271. udelay(PLL_POST_LOCK_DELAY);
  272. return 0;
  273. }
  274. udelay(2); /* timeout = 2 * lock time */
  275. }
  276. pr_err("%s: Timed out waiting for pll %s lock\n", __func__,
  277. clk_hw_get_name(&pll->hw));
  278. return -1;
  279. }
  280. int tegra_pll_wait_for_lock(struct tegra_clk_pll *pll)
  281. {
  282. return clk_pll_wait_for_lock(pll);
  283. }
  284. static bool pllm_clk_is_gated_by_pmc(struct tegra_clk_pll *pll)
  285. {
  286. u32 val = readl_relaxed(pll->pmc + PMC_PLLP_WB0_OVERRIDE);
  287. return (val & PMC_PLLP_WB0_OVERRIDE_PLLM_OVERRIDE) &&
  288. !(val & PMC_PLLP_WB0_OVERRIDE_PLLM_ENABLE);
  289. }
  290. static int clk_pll_is_enabled(struct clk_hw *hw)
  291. {
  292. struct tegra_clk_pll *pll = to_clk_pll(hw);
  293. u32 val;
  294. /*
  295. * Power Management Controller (PMC) can override the PLLM clock
  296. * settings, including the enable-state. The PLLM is enabled when
  297. * PLLM's CaR state is ON and when PLLM isn't gated by PMC.
  298. */
  299. if ((pll->params->flags & TEGRA_PLLM) && pllm_clk_is_gated_by_pmc(pll))
  300. return 0;
  301. val = pll_readl_base(pll);
  302. return val & PLL_BASE_ENABLE ? 1 : 0;
  303. }
  304. static void _clk_pll_enable(struct clk_hw *hw)
  305. {
  306. struct tegra_clk_pll *pll = to_clk_pll(hw);
  307. u32 val;
  308. if (pll->params->iddq_reg) {
  309. val = pll_readl(pll->params->iddq_reg, pll);
  310. val &= ~BIT(pll->params->iddq_bit_idx);
  311. pll_writel(val, pll->params->iddq_reg, pll);
  312. udelay(5);
  313. }
  314. if (pll->params->reset_reg) {
  315. val = pll_readl(pll->params->reset_reg, pll);
  316. val &= ~BIT(pll->params->reset_bit_idx);
  317. pll_writel(val, pll->params->reset_reg, pll);
  318. }
  319. clk_pll_enable_lock(pll);
  320. val = pll_readl_base(pll);
  321. if (pll->params->flags & TEGRA_PLL_BYPASS)
  322. val &= ~PLL_BASE_BYPASS;
  323. val |= PLL_BASE_ENABLE;
  324. pll_writel_base(val, pll);
  325. if (pll->params->flags & TEGRA_PLLM) {
  326. val = readl_relaxed(pll->pmc + PMC_PLLP_WB0_OVERRIDE);
  327. val |= PMC_PLLP_WB0_OVERRIDE_PLLM_ENABLE;
  328. writel_relaxed(val, pll->pmc + PMC_PLLP_WB0_OVERRIDE);
  329. }
  330. }
  331. static void _clk_pll_disable(struct clk_hw *hw)
  332. {
  333. struct tegra_clk_pll *pll = to_clk_pll(hw);
  334. u32 val;
  335. val = pll_readl_base(pll);
  336. if (pll->params->flags & TEGRA_PLL_BYPASS)
  337. val &= ~PLL_BASE_BYPASS;
  338. val &= ~PLL_BASE_ENABLE;
  339. pll_writel_base(val, pll);
  340. if (pll->params->flags & TEGRA_PLLM) {
  341. val = readl_relaxed(pll->pmc + PMC_PLLP_WB0_OVERRIDE);
  342. val &= ~PMC_PLLP_WB0_OVERRIDE_PLLM_ENABLE;
  343. writel_relaxed(val, pll->pmc + PMC_PLLP_WB0_OVERRIDE);
  344. }
  345. if (pll->params->reset_reg) {
  346. val = pll_readl(pll->params->reset_reg, pll);
  347. val |= BIT(pll->params->reset_bit_idx);
  348. pll_writel(val, pll->params->reset_reg, pll);
  349. }
  350. if (pll->params->iddq_reg) {
  351. val = pll_readl(pll->params->iddq_reg, pll);
  352. val |= BIT(pll->params->iddq_bit_idx);
  353. pll_writel(val, pll->params->iddq_reg, pll);
  354. udelay(2);
  355. }
  356. }
  357. static void pll_clk_start_ss(struct tegra_clk_pll *pll)
  358. {
  359. if (pll->params->defaults_set && pll->params->ssc_ctrl_reg) {
  360. u32 val = pll_readl(pll->params->ssc_ctrl_reg, pll);
  361. val |= pll->params->ssc_ctrl_en_mask;
  362. pll_writel(val, pll->params->ssc_ctrl_reg, pll);
  363. }
  364. }
  365. static void pll_clk_stop_ss(struct tegra_clk_pll *pll)
  366. {
  367. if (pll->params->defaults_set && pll->params->ssc_ctrl_reg) {
  368. u32 val = pll_readl(pll->params->ssc_ctrl_reg, pll);
  369. val &= ~pll->params->ssc_ctrl_en_mask;
  370. pll_writel(val, pll->params->ssc_ctrl_reg, pll);
  371. }
  372. }
  373. static int clk_pll_enable(struct clk_hw *hw)
  374. {
  375. struct tegra_clk_pll *pll = to_clk_pll(hw);
  376. unsigned long flags = 0;
  377. int ret;
  378. if (clk_pll_is_enabled(hw))
  379. return 0;
  380. if (pll->lock)
  381. spin_lock_irqsave(pll->lock, flags);
  382. _clk_pll_enable(hw);
  383. ret = clk_pll_wait_for_lock(pll);
  384. pll_clk_start_ss(pll);
  385. if (pll->lock)
  386. spin_unlock_irqrestore(pll->lock, flags);
  387. return ret;
  388. }
  389. static void clk_pll_disable(struct clk_hw *hw)
  390. {
  391. struct tegra_clk_pll *pll = to_clk_pll(hw);
  392. unsigned long flags = 0;
  393. if (pll->lock)
  394. spin_lock_irqsave(pll->lock, flags);
  395. pll_clk_stop_ss(pll);
  396. _clk_pll_disable(hw);
  397. if (pll->lock)
  398. spin_unlock_irqrestore(pll->lock, flags);
  399. }
  400. static int _p_div_to_hw(struct clk_hw *hw, u8 p_div)
  401. {
  402. struct tegra_clk_pll *pll = to_clk_pll(hw);
  403. const struct pdiv_map *p_tohw = pll->params->pdiv_tohw;
  404. if (p_tohw) {
  405. while (p_tohw->pdiv) {
  406. if (p_div <= p_tohw->pdiv)
  407. return p_tohw->hw_val;
  408. p_tohw++;
  409. }
  410. return -EINVAL;
  411. }
  412. return -EINVAL;
  413. }
  414. int tegra_pll_p_div_to_hw(struct tegra_clk_pll *pll, u8 p_div)
  415. {
  416. return _p_div_to_hw(&pll->hw, p_div);
  417. }
  418. static int _hw_to_p_div(struct clk_hw *hw, u8 p_div_hw)
  419. {
  420. struct tegra_clk_pll *pll = to_clk_pll(hw);
  421. const struct pdiv_map *p_tohw = pll->params->pdiv_tohw;
  422. if (p_tohw) {
  423. while (p_tohw->pdiv) {
  424. if (p_div_hw == p_tohw->hw_val)
  425. return p_tohw->pdiv;
  426. p_tohw++;
  427. }
  428. return -EINVAL;
  429. }
  430. return 1 << p_div_hw;
  431. }
  432. static int _get_table_rate(struct clk_hw *hw,
  433. struct tegra_clk_pll_freq_table *cfg,
  434. unsigned long rate, unsigned long parent_rate)
  435. {
  436. struct tegra_clk_pll *pll = to_clk_pll(hw);
  437. struct tegra_clk_pll_freq_table *sel;
  438. int p;
  439. for (sel = pll->params->freq_table; sel->input_rate != 0; sel++)
  440. if (sel->input_rate == parent_rate &&
  441. sel->output_rate == rate)
  442. break;
  443. if (sel->input_rate == 0)
  444. return -EINVAL;
  445. if (pll->params->pdiv_tohw) {
  446. p = _p_div_to_hw(hw, sel->p);
  447. if (p < 0)
  448. return p;
  449. } else {
  450. p = ilog2(sel->p);
  451. }
  452. cfg->input_rate = sel->input_rate;
  453. cfg->output_rate = sel->output_rate;
  454. cfg->m = sel->m;
  455. cfg->n = sel->n;
  456. cfg->p = p;
  457. cfg->cpcon = sel->cpcon;
  458. cfg->sdm_data = sel->sdm_data;
  459. return 0;
  460. }
  461. static int _calc_rate(struct clk_hw *hw, struct tegra_clk_pll_freq_table *cfg,
  462. unsigned long rate, unsigned long parent_rate)
  463. {
  464. struct tegra_clk_pll *pll = to_clk_pll(hw);
  465. unsigned long cfreq;
  466. u32 p_div = 0;
  467. int ret;
  468. if (!rate)
  469. return -EINVAL;
  470. switch (parent_rate) {
  471. case 12000000:
  472. case 26000000:
  473. cfreq = (rate <= 1000000 * 1000) ? 1000000 : 2000000;
  474. break;
  475. case 13000000:
  476. cfreq = (rate <= 1000000 * 1000) ? 1000000 : 2600000;
  477. break;
  478. case 16800000:
  479. case 19200000:
  480. cfreq = (rate <= 1200000 * 1000) ? 1200000 : 2400000;
  481. break;
  482. case 9600000:
  483. case 28800000:
  484. /*
  485. * PLL_P_OUT1 rate is not listed in PLLA table
  486. */
  487. cfreq = parent_rate / (parent_rate / 1000000);
  488. break;
  489. default:
  490. pr_err("%s Unexpected reference rate %lu\n",
  491. __func__, parent_rate);
  492. BUG();
  493. }
  494. /* Raise VCO to guarantee 0.5% accuracy */
  495. for (cfg->output_rate = rate; cfg->output_rate < 200 * cfreq;
  496. cfg->output_rate <<= 1)
  497. p_div++;
  498. cfg->m = parent_rate / cfreq;
  499. cfg->n = cfg->output_rate / cfreq;
  500. cfg->cpcon = OUT_OF_TABLE_CPCON;
  501. if (cfg->m == 0 || cfg->m > divm_max(pll) ||
  502. cfg->n > divn_max(pll) || (1 << p_div) > divp_max(pll) ||
  503. cfg->output_rate > pll->params->vco_max) {
  504. return -EINVAL;
  505. }
  506. cfg->output_rate = cfg->n * DIV_ROUND_UP(parent_rate, cfg->m);
  507. cfg->output_rate >>= p_div;
  508. if (pll->params->pdiv_tohw) {
  509. ret = _p_div_to_hw(hw, 1 << p_div);
  510. if (ret < 0)
  511. return ret;
  512. else
  513. cfg->p = ret;
  514. } else
  515. cfg->p = p_div;
  516. return 0;
  517. }
  518. /*
  519. * SDM (Sigma Delta Modulator) divisor is 16-bit 2's complement signed number
  520. * within (-2^12 ... 2^12-1) range. Represented in PLL data structure as
  521. * unsigned 16-bit value, with "0" divisor mapped to 0xFFFF. Data "0" is used
  522. * to indicate that SDM is disabled.
  523. *
  524. * Effective ndiv value when SDM is enabled: ndiv + 1/2 + sdm_din/2^13
  525. */
  526. static void clk_pll_set_sdm_data(struct clk_hw *hw,
  527. struct tegra_clk_pll_freq_table *cfg)
  528. {
  529. struct tegra_clk_pll *pll = to_clk_pll(hw);
  530. u32 val;
  531. bool enabled;
  532. if (!pll->params->sdm_din_reg)
  533. return;
  534. if (cfg->sdm_data) {
  535. val = pll_readl_sdm_din(pll) & (~sdm_din_mask(pll));
  536. val |= sdin_data_to_din(cfg->sdm_data) & sdm_din_mask(pll);
  537. pll_writel_sdm_din(val, pll);
  538. }
  539. val = pll_readl_sdm_ctrl(pll);
  540. enabled = (val & sdm_en_mask(pll));
  541. if (cfg->sdm_data == 0 && enabled)
  542. val &= ~pll->params->sdm_ctrl_en_mask;
  543. if (cfg->sdm_data != 0 && !enabled)
  544. val |= pll->params->sdm_ctrl_en_mask;
  545. pll_writel_sdm_ctrl(val, pll);
  546. }
  547. static void _update_pll_mnp(struct tegra_clk_pll *pll,
  548. struct tegra_clk_pll_freq_table *cfg)
  549. {
  550. u32 val;
  551. struct tegra_clk_pll_params *params = pll->params;
  552. struct div_nmp *div_nmp = params->div_nmp;
  553. if ((params->flags & (TEGRA_PLLM | TEGRA_PLLMB)) &&
  554. (pll_override_readl(PMC_PLLP_WB0_OVERRIDE, pll) &
  555. PMC_PLLP_WB0_OVERRIDE_PLLM_OVERRIDE)) {
  556. val = pll_override_readl(params->pmc_divp_reg, pll);
  557. val &= ~(divp_mask(pll) << div_nmp->override_divp_shift);
  558. val |= cfg->p << div_nmp->override_divp_shift;
  559. pll_override_writel(val, params->pmc_divp_reg, pll);
  560. val = pll_override_readl(params->pmc_divnm_reg, pll);
  561. val &= ~((divm_mask(pll) << div_nmp->override_divm_shift) |
  562. (divn_mask(pll) << div_nmp->override_divn_shift));
  563. val |= (cfg->m << div_nmp->override_divm_shift) |
  564. (cfg->n << div_nmp->override_divn_shift);
  565. pll_override_writel(val, params->pmc_divnm_reg, pll);
  566. } else {
  567. val = pll_readl_base(pll);
  568. val &= ~(divm_mask_shifted(pll) | divn_mask_shifted(pll) |
  569. divp_mask_shifted(pll));
  570. val |= (cfg->m << divm_shift(pll)) |
  571. (cfg->n << divn_shift(pll)) |
  572. (cfg->p << divp_shift(pll));
  573. pll_writel_base(val, pll);
  574. clk_pll_set_sdm_data(&pll->hw, cfg);
  575. }
  576. }
  577. static void _get_pll_mnp(struct tegra_clk_pll *pll,
  578. struct tegra_clk_pll_freq_table *cfg)
  579. {
  580. u32 val;
  581. struct tegra_clk_pll_params *params = pll->params;
  582. struct div_nmp *div_nmp = params->div_nmp;
  583. *cfg = (struct tegra_clk_pll_freq_table) { };
  584. if ((params->flags & (TEGRA_PLLM | TEGRA_PLLMB)) &&
  585. (pll_override_readl(PMC_PLLP_WB0_OVERRIDE, pll) &
  586. PMC_PLLP_WB0_OVERRIDE_PLLM_OVERRIDE)) {
  587. val = pll_override_readl(params->pmc_divp_reg, pll);
  588. cfg->p = (val >> div_nmp->override_divp_shift) & divp_mask(pll);
  589. val = pll_override_readl(params->pmc_divnm_reg, pll);
  590. cfg->m = (val >> div_nmp->override_divm_shift) & divm_mask(pll);
  591. cfg->n = (val >> div_nmp->override_divn_shift) & divn_mask(pll);
  592. } else {
  593. val = pll_readl_base(pll);
  594. cfg->m = (val >> div_nmp->divm_shift) & divm_mask(pll);
  595. cfg->n = (val >> div_nmp->divn_shift) & divn_mask(pll);
  596. cfg->p = (val >> div_nmp->divp_shift) & divp_mask(pll);
  597. if (pll->params->sdm_din_reg) {
  598. if (sdm_en_mask(pll) & pll_readl_sdm_ctrl(pll)) {
  599. val = pll_readl_sdm_din(pll);
  600. val &= sdm_din_mask(pll);
  601. cfg->sdm_data = sdin_din_to_data(val);
  602. }
  603. }
  604. }
  605. }
  606. static void _update_pll_cpcon(struct tegra_clk_pll *pll,
  607. struct tegra_clk_pll_freq_table *cfg,
  608. unsigned long rate)
  609. {
  610. u32 val;
  611. val = pll_readl_misc(pll);
  612. val &= ~(PLL_MISC_CPCON_MASK << PLL_MISC_CPCON_SHIFT);
  613. val |= cfg->cpcon << PLL_MISC_CPCON_SHIFT;
  614. if (pll->params->flags & TEGRA_PLL_SET_LFCON) {
  615. val &= ~(PLL_MISC_LFCON_MASK << PLL_MISC_LFCON_SHIFT);
  616. if (cfg->n >= PLLDU_LFCON_SET_DIVN)
  617. val |= 1 << PLL_MISC_LFCON_SHIFT;
  618. } else if (pll->params->flags & TEGRA_PLL_SET_DCCON) {
  619. val &= ~(1 << PLL_MISC_DCCON_SHIFT);
  620. if (rate >= (pll->params->vco_max >> 1))
  621. val |= 1 << PLL_MISC_DCCON_SHIFT;
  622. }
  623. pll_writel_misc(val, pll);
  624. }
  625. static int _program_pll(struct clk_hw *hw, struct tegra_clk_pll_freq_table *cfg,
  626. unsigned long rate)
  627. {
  628. struct tegra_clk_pll *pll = to_clk_pll(hw);
  629. struct tegra_clk_pll_freq_table old_cfg;
  630. int state, ret = 0;
  631. state = clk_pll_is_enabled(hw);
  632. if (state && pll->params->pre_rate_change) {
  633. ret = pll->params->pre_rate_change();
  634. if (WARN_ON(ret))
  635. return ret;
  636. }
  637. _get_pll_mnp(pll, &old_cfg);
  638. if (state && pll->params->defaults_set && pll->params->dyn_ramp &&
  639. (cfg->m == old_cfg.m) && (cfg->p == old_cfg.p)) {
  640. ret = pll->params->dyn_ramp(pll, cfg);
  641. if (!ret)
  642. goto done;
  643. }
  644. if (state) {
  645. pll_clk_stop_ss(pll);
  646. _clk_pll_disable(hw);
  647. }
  648. if (!pll->params->defaults_set && pll->params->set_defaults)
  649. pll->params->set_defaults(pll);
  650. _update_pll_mnp(pll, cfg);
  651. if (pll->params->flags & TEGRA_PLL_HAS_CPCON)
  652. _update_pll_cpcon(pll, cfg, rate);
  653. if (state) {
  654. _clk_pll_enable(hw);
  655. ret = clk_pll_wait_for_lock(pll);
  656. pll_clk_start_ss(pll);
  657. }
  658. done:
  659. if (state && pll->params->post_rate_change)
  660. pll->params->post_rate_change();
  661. return ret;
  662. }
  663. static int clk_pll_set_rate(struct clk_hw *hw, unsigned long rate,
  664. unsigned long parent_rate)
  665. {
  666. struct tegra_clk_pll *pll = to_clk_pll(hw);
  667. struct tegra_clk_pll_freq_table cfg, old_cfg;
  668. unsigned long flags = 0;
  669. int ret = 0;
  670. if (pll->params->flags & TEGRA_PLL_FIXED) {
  671. if (rate != pll->params->fixed_rate) {
  672. pr_err("%s: Can not change %s fixed rate %lu to %lu\n",
  673. __func__, clk_hw_get_name(hw),
  674. pll->params->fixed_rate, rate);
  675. return -EINVAL;
  676. }
  677. return 0;
  678. }
  679. if (_get_table_rate(hw, &cfg, rate, parent_rate) &&
  680. pll->params->calc_rate(hw, &cfg, rate, parent_rate)) {
  681. pr_err("%s: Failed to set %s rate %lu\n", __func__,
  682. clk_hw_get_name(hw), rate);
  683. WARN_ON(1);
  684. return -EINVAL;
  685. }
  686. if (pll->lock)
  687. spin_lock_irqsave(pll->lock, flags);
  688. _get_pll_mnp(pll, &old_cfg);
  689. if (pll->params->flags & TEGRA_PLL_VCO_OUT)
  690. cfg.p = old_cfg.p;
  691. if (old_cfg.m != cfg.m || old_cfg.n != cfg.n || old_cfg.p != cfg.p ||
  692. old_cfg.sdm_data != cfg.sdm_data)
  693. ret = _program_pll(hw, &cfg, rate);
  694. if (pll->lock)
  695. spin_unlock_irqrestore(pll->lock, flags);
  696. return ret;
  697. }
  698. static int clk_pll_determine_rate(struct clk_hw *hw,
  699. struct clk_rate_request *req)
  700. {
  701. struct tegra_clk_pll *pll = to_clk_pll(hw);
  702. struct tegra_clk_pll_freq_table cfg;
  703. if (pll->params->flags & TEGRA_PLL_FIXED) {
  704. /* PLLM/MB are used for memory; we do not change rate */
  705. if (pll->params->flags & (TEGRA_PLLM | TEGRA_PLLMB))
  706. req->rate = clk_hw_get_rate(hw);
  707. else
  708. req->rate = pll->params->fixed_rate;
  709. return 0;
  710. }
  711. if (_get_table_rate(hw, &cfg, req->rate, req->best_parent_rate) &&
  712. pll->params->calc_rate(hw, &cfg, req->rate, req->best_parent_rate))
  713. return -EINVAL;
  714. req->rate = cfg.output_rate;
  715. return 0;
  716. }
  717. static unsigned long clk_pll_recalc_rate(struct clk_hw *hw,
  718. unsigned long parent_rate)
  719. {
  720. struct tegra_clk_pll *pll = to_clk_pll(hw);
  721. struct tegra_clk_pll_freq_table cfg;
  722. u32 val;
  723. u64 rate = parent_rate;
  724. int pdiv;
  725. val = pll_readl_base(pll);
  726. if ((pll->params->flags & TEGRA_PLL_BYPASS) && (val & PLL_BASE_BYPASS))
  727. return parent_rate;
  728. if ((pll->params->flags & TEGRA_PLL_FIXED) &&
  729. !(pll->params->flags & (TEGRA_PLLM | TEGRA_PLLMB)) &&
  730. !(val & PLL_BASE_OVERRIDE)) {
  731. struct tegra_clk_pll_freq_table sel;
  732. if (_get_table_rate(hw, &sel, pll->params->fixed_rate,
  733. parent_rate)) {
  734. pr_err("Clock %s has unknown fixed frequency\n",
  735. clk_hw_get_name(hw));
  736. BUG();
  737. }
  738. return pll->params->fixed_rate;
  739. }
  740. _get_pll_mnp(pll, &cfg);
  741. if (pll->params->flags & TEGRA_PLL_VCO_OUT) {
  742. pdiv = 1;
  743. } else {
  744. pdiv = _hw_to_p_div(hw, cfg.p);
  745. if (pdiv < 0) {
  746. WARN(1, "Clock %s has invalid pdiv value : 0x%x\n",
  747. clk_hw_get_name(hw), cfg.p);
  748. pdiv = 1;
  749. }
  750. }
  751. if (pll->params->set_gain)
  752. pll->params->set_gain(&cfg);
  753. cfg.m *= pdiv;
  754. rate *= cfg.n;
  755. do_div(rate, cfg.m);
  756. return rate;
  757. }
  758. static int clk_plle_training(struct tegra_clk_pll *pll)
  759. {
  760. u32 val;
  761. unsigned long timeout;
  762. if (!pll->pmc)
  763. return -ENOSYS;
  764. /*
  765. * PLLE is already disabled, and setup cleared;
  766. * create falling edge on PLLE IDDQ input.
  767. */
  768. val = readl(pll->pmc + PMC_SATA_PWRGT);
  769. val |= PMC_SATA_PWRGT_PLLE_IDDQ_VALUE;
  770. writel(val, pll->pmc + PMC_SATA_PWRGT);
  771. val = readl(pll->pmc + PMC_SATA_PWRGT);
  772. val |= PMC_SATA_PWRGT_PLLE_IDDQ_SWCTL;
  773. writel(val, pll->pmc + PMC_SATA_PWRGT);
  774. val = readl(pll->pmc + PMC_SATA_PWRGT);
  775. val &= ~PMC_SATA_PWRGT_PLLE_IDDQ_VALUE;
  776. writel(val, pll->pmc + PMC_SATA_PWRGT);
  777. val = pll_readl_misc(pll);
  778. timeout = jiffies + msecs_to_jiffies(100);
  779. while (1) {
  780. val = pll_readl_misc(pll);
  781. if (val & PLLE_MISC_READY)
  782. break;
  783. if (time_after(jiffies, timeout)) {
  784. pr_err("%s: timeout waiting for PLLE\n", __func__);
  785. return -EBUSY;
  786. }
  787. udelay(300);
  788. }
  789. return 0;
  790. }
  791. static int clk_plle_enable(struct clk_hw *hw)
  792. {
  793. struct tegra_clk_pll *pll = to_clk_pll(hw);
  794. struct tegra_clk_pll_freq_table sel;
  795. unsigned long input_rate;
  796. u32 val;
  797. int err;
  798. if (clk_pll_is_enabled(hw))
  799. return 0;
  800. input_rate = clk_hw_get_rate(clk_hw_get_parent(hw));
  801. if (_get_table_rate(hw, &sel, pll->params->fixed_rate, input_rate))
  802. return -EINVAL;
  803. clk_pll_disable(hw);
  804. val = pll_readl_misc(pll);
  805. val &= ~(PLLE_MISC_LOCK_ENABLE | PLLE_MISC_SETUP_MASK);
  806. pll_writel_misc(val, pll);
  807. val = pll_readl_misc(pll);
  808. if (!(val & PLLE_MISC_READY)) {
  809. err = clk_plle_training(pll);
  810. if (err)
  811. return err;
  812. }
  813. if (pll->params->flags & TEGRA_PLLE_CONFIGURE) {
  814. /* configure dividers */
  815. val = pll_readl_base(pll);
  816. val &= ~(divp_mask_shifted(pll) | divn_mask_shifted(pll) |
  817. divm_mask_shifted(pll));
  818. val &= ~(PLLE_BASE_DIVCML_MASK << PLLE_BASE_DIVCML_SHIFT);
  819. val |= sel.m << divm_shift(pll);
  820. val |= sel.n << divn_shift(pll);
  821. val |= sel.p << divp_shift(pll);
  822. val |= sel.cpcon << PLLE_BASE_DIVCML_SHIFT;
  823. pll_writel_base(val, pll);
  824. }
  825. val = pll_readl_misc(pll);
  826. val |= PLLE_MISC_SETUP_VALUE;
  827. val |= PLLE_MISC_LOCK_ENABLE;
  828. pll_writel_misc(val, pll);
  829. val = readl(pll->clk_base + PLLE_SS_CTRL);
  830. val &= ~PLLE_SS_COEFFICIENTS_MASK;
  831. val |= PLLE_SS_DISABLE;
  832. writel(val, pll->clk_base + PLLE_SS_CTRL);
  833. val = pll_readl_base(pll);
  834. val |= (PLL_BASE_BYPASS | PLL_BASE_ENABLE);
  835. pll_writel_base(val, pll);
  836. clk_pll_wait_for_lock(pll);
  837. return 0;
  838. }
  839. static unsigned long clk_plle_recalc_rate(struct clk_hw *hw,
  840. unsigned long parent_rate)
  841. {
  842. struct tegra_clk_pll *pll = to_clk_pll(hw);
  843. u32 val = pll_readl_base(pll);
  844. u32 divn = 0, divm = 0, divp = 0;
  845. u64 rate = parent_rate;
  846. divp = (val >> pll->params->div_nmp->divp_shift) & (divp_mask(pll));
  847. divn = (val >> pll->params->div_nmp->divn_shift) & (divn_mask(pll));
  848. divm = (val >> pll->params->div_nmp->divm_shift) & (divm_mask(pll));
  849. divm *= divp;
  850. rate *= divn;
  851. do_div(rate, divm);
  852. return rate;
  853. }
  854. static void tegra_clk_pll_restore_context(struct clk_hw *hw)
  855. {
  856. struct tegra_clk_pll *pll = to_clk_pll(hw);
  857. struct clk_hw *parent = clk_hw_get_parent(hw);
  858. unsigned long parent_rate = clk_hw_get_rate(parent);
  859. unsigned long rate = clk_hw_get_rate(hw);
  860. if (clk_pll_is_enabled(hw))
  861. return;
  862. if (pll->params->set_defaults)
  863. pll->params->set_defaults(pll);
  864. clk_pll_set_rate(hw, rate, parent_rate);
  865. if (!__clk_get_enable_count(hw->clk))
  866. clk_pll_disable(hw);
  867. else
  868. clk_pll_enable(hw);
  869. }
  870. const struct clk_ops tegra_clk_pll_ops = {
  871. .is_enabled = clk_pll_is_enabled,
  872. .enable = clk_pll_enable,
  873. .disable = clk_pll_disable,
  874. .recalc_rate = clk_pll_recalc_rate,
  875. .determine_rate = clk_pll_determine_rate,
  876. .set_rate = clk_pll_set_rate,
  877. .restore_context = tegra_clk_pll_restore_context,
  878. };
  879. const struct clk_ops tegra_clk_plle_ops = {
  880. .recalc_rate = clk_plle_recalc_rate,
  881. .is_enabled = clk_pll_is_enabled,
  882. .disable = clk_pll_disable,
  883. .enable = clk_plle_enable,
  884. };
  885. /*
  886. * Structure defining the fields for USB UTMI clocks Parameters.
  887. */
  888. struct utmi_clk_param {
  889. /* Oscillator Frequency in Hz */
  890. u32 osc_frequency;
  891. /* UTMIP PLL Enable Delay Count */
  892. u8 enable_delay_count;
  893. /* UTMIP PLL Stable count */
  894. u8 stable_count;
  895. /* UTMIP PLL Active delay count */
  896. u8 active_delay_count;
  897. /* UTMIP PLL Xtal frequency count */
  898. u8 xtal_freq_count;
  899. };
  900. static const struct utmi_clk_param utmi_parameters[] = {
  901. {
  902. .osc_frequency = 13000000, .enable_delay_count = 0x02,
  903. .stable_count = 0x33, .active_delay_count = 0x05,
  904. .xtal_freq_count = 0x7f
  905. }, {
  906. .osc_frequency = 19200000, .enable_delay_count = 0x03,
  907. .stable_count = 0x4b, .active_delay_count = 0x06,
  908. .xtal_freq_count = 0xbb
  909. }, {
  910. .osc_frequency = 12000000, .enable_delay_count = 0x02,
  911. .stable_count = 0x2f, .active_delay_count = 0x04,
  912. .xtal_freq_count = 0x76
  913. }, {
  914. .osc_frequency = 26000000, .enable_delay_count = 0x04,
  915. .stable_count = 0x66, .active_delay_count = 0x09,
  916. .xtal_freq_count = 0xfe
  917. }, {
  918. .osc_frequency = 16800000, .enable_delay_count = 0x03,
  919. .stable_count = 0x41, .active_delay_count = 0x0a,
  920. .xtal_freq_count = 0xa4
  921. }, {
  922. .osc_frequency = 38400000, .enable_delay_count = 0x0,
  923. .stable_count = 0x0, .active_delay_count = 0x6,
  924. .xtal_freq_count = 0x80
  925. },
  926. };
  927. static int clk_pllu_enable(struct clk_hw *hw)
  928. {
  929. struct tegra_clk_pll *pll = to_clk_pll(hw);
  930. struct clk_hw *pll_ref = clk_hw_get_parent(hw);
  931. struct clk_hw *osc = clk_hw_get_parent(pll_ref);
  932. const struct utmi_clk_param *params = NULL;
  933. unsigned long flags = 0, input_rate;
  934. unsigned int i;
  935. int ret = 0;
  936. u32 value;
  937. if (!osc) {
  938. pr_err("%s: failed to get OSC clock\n", __func__);
  939. return -EINVAL;
  940. }
  941. input_rate = clk_hw_get_rate(osc);
  942. if (pll->lock)
  943. spin_lock_irqsave(pll->lock, flags);
  944. if (!clk_pll_is_enabled(hw))
  945. _clk_pll_enable(hw);
  946. ret = clk_pll_wait_for_lock(pll);
  947. if (ret < 0)
  948. goto out;
  949. for (i = 0; i < ARRAY_SIZE(utmi_parameters); i++) {
  950. if (input_rate == utmi_parameters[i].osc_frequency) {
  951. params = &utmi_parameters[i];
  952. break;
  953. }
  954. }
  955. if (!params) {
  956. pr_err("%s: unexpected input rate %lu Hz\n", __func__,
  957. input_rate);
  958. ret = -EINVAL;
  959. goto out;
  960. }
  961. value = pll_readl_base(pll);
  962. value &= ~PLLU_BASE_OVERRIDE;
  963. pll_writel_base(value, pll);
  964. value = readl_relaxed(pll->clk_base + UTMIP_PLL_CFG2);
  965. /* Program UTMIP PLL stable and active counts */
  966. value &= ~UTMIP_PLL_CFG2_STABLE_COUNT(~0);
  967. value |= UTMIP_PLL_CFG2_STABLE_COUNT(params->stable_count);
  968. value &= ~UTMIP_PLL_CFG2_ACTIVE_DLY_COUNT(~0);
  969. value |= UTMIP_PLL_CFG2_ACTIVE_DLY_COUNT(params->active_delay_count);
  970. /* Remove power downs from UTMIP PLL control bits */
  971. value &= ~UTMIP_PLL_CFG2_FORCE_PD_SAMP_A_POWERDOWN;
  972. value &= ~UTMIP_PLL_CFG2_FORCE_PD_SAMP_B_POWERDOWN;
  973. value &= ~UTMIP_PLL_CFG2_FORCE_PD_SAMP_C_POWERDOWN;
  974. writel_relaxed(value, pll->clk_base + UTMIP_PLL_CFG2);
  975. value = readl_relaxed(pll->clk_base + UTMIP_PLL_CFG1);
  976. /* Program UTMIP PLL delay and oscillator frequency counts */
  977. value &= ~UTMIP_PLL_CFG1_ENABLE_DLY_COUNT(~0);
  978. value |= UTMIP_PLL_CFG1_ENABLE_DLY_COUNT(params->enable_delay_count);
  979. value &= ~UTMIP_PLL_CFG1_XTAL_FREQ_COUNT(~0);
  980. value |= UTMIP_PLL_CFG1_XTAL_FREQ_COUNT(params->xtal_freq_count);
  981. /* Remove power downs from UTMIP PLL control bits */
  982. value &= ~UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERDOWN;
  983. value &= ~UTMIP_PLL_CFG1_FORCE_PLL_ACTIVE_POWERDOWN;
  984. value &= ~UTMIP_PLL_CFG1_FORCE_PLLU_POWERDOWN;
  985. writel_relaxed(value, pll->clk_base + UTMIP_PLL_CFG1);
  986. out:
  987. if (pll->lock)
  988. spin_unlock_irqrestore(pll->lock, flags);
  989. return ret;
  990. }
  991. static const struct clk_ops tegra_clk_pllu_ops = {
  992. .is_enabled = clk_pll_is_enabled,
  993. .enable = clk_pllu_enable,
  994. .disable = clk_pll_disable,
  995. .recalc_rate = clk_pll_recalc_rate,
  996. .determine_rate = clk_pll_determine_rate,
  997. .set_rate = clk_pll_set_rate,
  998. };
  999. static int _pll_fixed_mdiv(struct tegra_clk_pll_params *pll_params,
  1000. unsigned long parent_rate)
  1001. {
  1002. u16 mdiv = parent_rate / pll_params->cf_min;
  1003. if (pll_params->flags & TEGRA_MDIV_NEW)
  1004. return (!pll_params->mdiv_default ? mdiv :
  1005. min(mdiv, pll_params->mdiv_default));
  1006. if (pll_params->mdiv_default)
  1007. return pll_params->mdiv_default;
  1008. if (parent_rate > pll_params->cf_max)
  1009. return 2;
  1010. else
  1011. return 1;
  1012. }
  1013. static int _calc_dynamic_ramp_rate(struct clk_hw *hw,
  1014. struct tegra_clk_pll_freq_table *cfg,
  1015. unsigned long rate, unsigned long parent_rate)
  1016. {
  1017. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1018. unsigned int p;
  1019. int p_div;
  1020. if (!rate)
  1021. return -EINVAL;
  1022. p = DIV_ROUND_UP(pll->params->vco_min, rate);
  1023. cfg->m = _pll_fixed_mdiv(pll->params, parent_rate);
  1024. cfg->output_rate = rate * p;
  1025. cfg->n = cfg->output_rate * cfg->m / parent_rate;
  1026. cfg->input_rate = parent_rate;
  1027. p_div = _p_div_to_hw(hw, p);
  1028. if (p_div < 0)
  1029. return p_div;
  1030. cfg->p = p_div;
  1031. if (cfg->n > divn_max(pll) || cfg->output_rate > pll->params->vco_max)
  1032. return -EINVAL;
  1033. return 0;
  1034. }
  1035. #if defined(CONFIG_ARCH_TEGRA_114_SOC) || \
  1036. defined(CONFIG_ARCH_TEGRA_124_SOC) || \
  1037. defined(CONFIG_ARCH_TEGRA_132_SOC) || \
  1038. defined(CONFIG_ARCH_TEGRA_210_SOC)
  1039. u16 tegra_pll_get_fixed_mdiv(struct clk_hw *hw, unsigned long input_rate)
  1040. {
  1041. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1042. return (u16)_pll_fixed_mdiv(pll->params, input_rate);
  1043. }
  1044. static unsigned long _clip_vco_min(unsigned long vco_min,
  1045. unsigned long parent_rate)
  1046. {
  1047. return DIV_ROUND_UP(vco_min, parent_rate) * parent_rate;
  1048. }
  1049. static int _setup_dynamic_ramp(struct tegra_clk_pll_params *pll_params,
  1050. void __iomem *clk_base,
  1051. unsigned long parent_rate)
  1052. {
  1053. u32 val;
  1054. u32 step_a, step_b;
  1055. switch (parent_rate) {
  1056. case 12000000:
  1057. case 13000000:
  1058. case 26000000:
  1059. step_a = 0x2B;
  1060. step_b = 0x0B;
  1061. break;
  1062. case 16800000:
  1063. step_a = 0x1A;
  1064. step_b = 0x09;
  1065. break;
  1066. case 19200000:
  1067. step_a = 0x12;
  1068. step_b = 0x08;
  1069. break;
  1070. default:
  1071. pr_err("%s: Unexpected reference rate %lu\n",
  1072. __func__, parent_rate);
  1073. WARN_ON(1);
  1074. return -EINVAL;
  1075. }
  1076. val = step_a << pll_params->stepa_shift;
  1077. val |= step_b << pll_params->stepb_shift;
  1078. writel_relaxed(val, clk_base + pll_params->dyn_ramp_reg);
  1079. return 0;
  1080. }
  1081. static int _pll_ramp_calc_pll(struct clk_hw *hw,
  1082. struct tegra_clk_pll_freq_table *cfg,
  1083. unsigned long rate, unsigned long parent_rate)
  1084. {
  1085. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1086. int err = 0;
  1087. err = _get_table_rate(hw, cfg, rate, parent_rate);
  1088. if (err < 0)
  1089. err = _calc_dynamic_ramp_rate(hw, cfg, rate, parent_rate);
  1090. else {
  1091. if (cfg->m != _pll_fixed_mdiv(pll->params, parent_rate)) {
  1092. WARN_ON(1);
  1093. err = -EINVAL;
  1094. goto out;
  1095. }
  1096. }
  1097. if (cfg->p > pll->params->max_p)
  1098. err = -EINVAL;
  1099. out:
  1100. return err;
  1101. }
  1102. static int clk_pllxc_set_rate(struct clk_hw *hw, unsigned long rate,
  1103. unsigned long parent_rate)
  1104. {
  1105. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1106. struct tegra_clk_pll_freq_table cfg, old_cfg;
  1107. unsigned long flags = 0;
  1108. int ret;
  1109. ret = _pll_ramp_calc_pll(hw, &cfg, rate, parent_rate);
  1110. if (ret < 0)
  1111. return ret;
  1112. if (pll->lock)
  1113. spin_lock_irqsave(pll->lock, flags);
  1114. _get_pll_mnp(pll, &old_cfg);
  1115. if (pll->params->flags & TEGRA_PLL_VCO_OUT)
  1116. cfg.p = old_cfg.p;
  1117. if (old_cfg.m != cfg.m || old_cfg.n != cfg.n || old_cfg.p != cfg.p)
  1118. ret = _program_pll(hw, &cfg, rate);
  1119. if (pll->lock)
  1120. spin_unlock_irqrestore(pll->lock, flags);
  1121. return ret;
  1122. }
  1123. static int clk_pll_ramp_determine_rate(struct clk_hw *hw,
  1124. struct clk_rate_request *req)
  1125. {
  1126. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1127. struct tegra_clk_pll_freq_table cfg;
  1128. int ret, p_div;
  1129. u64 output_rate = req->best_parent_rate;
  1130. ret = _pll_ramp_calc_pll(hw, &cfg, req->rate, req->best_parent_rate);
  1131. if (ret < 0)
  1132. return ret;
  1133. p_div = _hw_to_p_div(hw, cfg.p);
  1134. if (p_div < 0)
  1135. return p_div;
  1136. if (pll->params->set_gain)
  1137. pll->params->set_gain(&cfg);
  1138. output_rate *= cfg.n;
  1139. do_div(output_rate, cfg.m * p_div);
  1140. req->rate = output_rate;
  1141. return 0;
  1142. }
  1143. static void _pllcx_strobe(struct tegra_clk_pll *pll)
  1144. {
  1145. u32 val;
  1146. val = pll_readl_misc(pll);
  1147. val |= PLLCX_MISC_STROBE;
  1148. pll_writel_misc(val, pll);
  1149. udelay(2);
  1150. val &= ~PLLCX_MISC_STROBE;
  1151. pll_writel_misc(val, pll);
  1152. }
  1153. static int clk_pllc_enable(struct clk_hw *hw)
  1154. {
  1155. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1156. u32 val;
  1157. int ret;
  1158. unsigned long flags = 0;
  1159. if (clk_pll_is_enabled(hw))
  1160. return 0;
  1161. if (pll->lock)
  1162. spin_lock_irqsave(pll->lock, flags);
  1163. _clk_pll_enable(hw);
  1164. udelay(2);
  1165. val = pll_readl_misc(pll);
  1166. val &= ~PLLCX_MISC_RESET;
  1167. pll_writel_misc(val, pll);
  1168. udelay(2);
  1169. _pllcx_strobe(pll);
  1170. ret = clk_pll_wait_for_lock(pll);
  1171. if (pll->lock)
  1172. spin_unlock_irqrestore(pll->lock, flags);
  1173. return ret;
  1174. }
  1175. static void _clk_pllc_disable(struct clk_hw *hw)
  1176. {
  1177. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1178. u32 val;
  1179. _clk_pll_disable(hw);
  1180. val = pll_readl_misc(pll);
  1181. val |= PLLCX_MISC_RESET;
  1182. pll_writel_misc(val, pll);
  1183. udelay(2);
  1184. }
  1185. static void clk_pllc_disable(struct clk_hw *hw)
  1186. {
  1187. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1188. unsigned long flags = 0;
  1189. if (pll->lock)
  1190. spin_lock_irqsave(pll->lock, flags);
  1191. _clk_pllc_disable(hw);
  1192. if (pll->lock)
  1193. spin_unlock_irqrestore(pll->lock, flags);
  1194. }
  1195. static int _pllcx_update_dynamic_coef(struct tegra_clk_pll *pll,
  1196. unsigned long input_rate, u32 n)
  1197. {
  1198. u32 val, n_threshold;
  1199. switch (input_rate) {
  1200. case 12000000:
  1201. n_threshold = 70;
  1202. break;
  1203. case 13000000:
  1204. case 26000000:
  1205. n_threshold = 71;
  1206. break;
  1207. case 16800000:
  1208. n_threshold = 55;
  1209. break;
  1210. case 19200000:
  1211. n_threshold = 48;
  1212. break;
  1213. default:
  1214. pr_err("%s: Unexpected reference rate %lu\n",
  1215. __func__, input_rate);
  1216. return -EINVAL;
  1217. }
  1218. val = pll_readl_misc(pll);
  1219. val &= ~(PLLCX_MISC_SDM_DIV_MASK | PLLCX_MISC_FILT_DIV_MASK);
  1220. val |= n <= n_threshold ?
  1221. PLLCX_MISC_DIV_LOW_RANGE : PLLCX_MISC_DIV_HIGH_RANGE;
  1222. pll_writel_misc(val, pll);
  1223. return 0;
  1224. }
  1225. static int clk_pllc_set_rate(struct clk_hw *hw, unsigned long rate,
  1226. unsigned long parent_rate)
  1227. {
  1228. struct tegra_clk_pll_freq_table cfg, old_cfg;
  1229. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1230. unsigned long flags = 0;
  1231. int state, ret = 0;
  1232. if (pll->lock)
  1233. spin_lock_irqsave(pll->lock, flags);
  1234. ret = _pll_ramp_calc_pll(hw, &cfg, rate, parent_rate);
  1235. if (ret < 0)
  1236. goto out;
  1237. _get_pll_mnp(pll, &old_cfg);
  1238. if (cfg.m != old_cfg.m) {
  1239. WARN_ON(1);
  1240. goto out;
  1241. }
  1242. if (old_cfg.n == cfg.n && old_cfg.p == cfg.p)
  1243. goto out;
  1244. state = clk_pll_is_enabled(hw);
  1245. if (state)
  1246. _clk_pllc_disable(hw);
  1247. ret = _pllcx_update_dynamic_coef(pll, parent_rate, cfg.n);
  1248. if (ret < 0)
  1249. goto out;
  1250. _update_pll_mnp(pll, &cfg);
  1251. if (state)
  1252. ret = clk_pllc_enable(hw);
  1253. out:
  1254. if (pll->lock)
  1255. spin_unlock_irqrestore(pll->lock, flags);
  1256. return ret;
  1257. }
  1258. static long _pllre_calc_rate(struct tegra_clk_pll *pll,
  1259. struct tegra_clk_pll_freq_table *cfg,
  1260. unsigned long rate, unsigned long parent_rate)
  1261. {
  1262. u16 m, n;
  1263. u64 output_rate = parent_rate;
  1264. m = _pll_fixed_mdiv(pll->params, parent_rate);
  1265. n = rate * m / parent_rate;
  1266. output_rate *= n;
  1267. do_div(output_rate, m);
  1268. if (cfg) {
  1269. cfg->m = m;
  1270. cfg->n = n;
  1271. }
  1272. return output_rate;
  1273. }
  1274. static int clk_pllre_set_rate(struct clk_hw *hw, unsigned long rate,
  1275. unsigned long parent_rate)
  1276. {
  1277. struct tegra_clk_pll_freq_table cfg, old_cfg;
  1278. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1279. unsigned long flags = 0;
  1280. int state, ret = 0;
  1281. if (pll->lock)
  1282. spin_lock_irqsave(pll->lock, flags);
  1283. _pllre_calc_rate(pll, &cfg, rate, parent_rate);
  1284. _get_pll_mnp(pll, &old_cfg);
  1285. cfg.p = old_cfg.p;
  1286. if (cfg.m != old_cfg.m || cfg.n != old_cfg.n) {
  1287. state = clk_pll_is_enabled(hw);
  1288. if (state)
  1289. _clk_pll_disable(hw);
  1290. _update_pll_mnp(pll, &cfg);
  1291. if (state) {
  1292. _clk_pll_enable(hw);
  1293. ret = clk_pll_wait_for_lock(pll);
  1294. }
  1295. }
  1296. if (pll->lock)
  1297. spin_unlock_irqrestore(pll->lock, flags);
  1298. return ret;
  1299. }
  1300. static unsigned long clk_pllre_recalc_rate(struct clk_hw *hw,
  1301. unsigned long parent_rate)
  1302. {
  1303. struct tegra_clk_pll_freq_table cfg;
  1304. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1305. u64 rate = parent_rate;
  1306. _get_pll_mnp(pll, &cfg);
  1307. rate *= cfg.n;
  1308. do_div(rate, cfg.m);
  1309. return rate;
  1310. }
  1311. static int clk_pllre_determine_rate(struct clk_hw *hw,
  1312. struct clk_rate_request *req)
  1313. {
  1314. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1315. req->rate = _pllre_calc_rate(pll, NULL, req->rate,
  1316. req->best_parent_rate);
  1317. return 0;
  1318. }
  1319. static int clk_plle_tegra114_enable(struct clk_hw *hw)
  1320. {
  1321. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1322. struct tegra_clk_pll_freq_table sel;
  1323. u32 val;
  1324. int ret;
  1325. unsigned long flags = 0;
  1326. unsigned long input_rate;
  1327. input_rate = clk_hw_get_rate(clk_hw_get_parent(hw));
  1328. if (_get_table_rate(hw, &sel, pll->params->fixed_rate, input_rate))
  1329. return -EINVAL;
  1330. if (pll->lock)
  1331. spin_lock_irqsave(pll->lock, flags);
  1332. val = pll_readl_base(pll);
  1333. val &= ~BIT(29); /* Disable lock override */
  1334. pll_writel_base(val, pll);
  1335. val = pll_readl(pll->params->aux_reg, pll);
  1336. val |= PLLE_AUX_ENABLE_SWCTL;
  1337. val &= ~PLLE_AUX_SEQ_ENABLE;
  1338. pll_writel(val, pll->params->aux_reg, pll);
  1339. udelay(1);
  1340. val = pll_readl_misc(pll);
  1341. val |= PLLE_MISC_LOCK_ENABLE;
  1342. val |= PLLE_MISC_IDDQ_SW_CTRL;
  1343. val &= ~PLLE_MISC_IDDQ_SW_VALUE;
  1344. val |= PLLE_MISC_PLLE_PTS;
  1345. val &= ~(PLLE_MISC_VREG_BG_CTRL_MASK | PLLE_MISC_VREG_CTRL_MASK);
  1346. pll_writel_misc(val, pll);
  1347. udelay(5);
  1348. val = pll_readl(PLLE_SS_CTRL, pll);
  1349. val |= PLLE_SS_DISABLE;
  1350. pll_writel(val, PLLE_SS_CTRL, pll);
  1351. val = pll_readl_base(pll);
  1352. val &= ~(divp_mask_shifted(pll) | divn_mask_shifted(pll) |
  1353. divm_mask_shifted(pll));
  1354. val &= ~(PLLE_BASE_DIVCML_MASK << PLLE_BASE_DIVCML_SHIFT);
  1355. val |= sel.m << divm_shift(pll);
  1356. val |= sel.n << divn_shift(pll);
  1357. val |= sel.cpcon << PLLE_BASE_DIVCML_SHIFT;
  1358. pll_writel_base(val, pll);
  1359. udelay(1);
  1360. _clk_pll_enable(hw);
  1361. ret = clk_pll_wait_for_lock(pll);
  1362. if (ret < 0)
  1363. goto out;
  1364. val = pll_readl(PLLE_SS_CTRL, pll);
  1365. val &= ~(PLLE_SS_CNTL_CENTER | PLLE_SS_CNTL_INVERT);
  1366. val &= ~PLLE_SS_COEFFICIENTS_MASK;
  1367. val |= PLLE_SS_COEFFICIENTS_VAL_TEGRA114;
  1368. pll_writel(val, PLLE_SS_CTRL, pll);
  1369. val &= ~(PLLE_SS_CNTL_SSC_BYP | PLLE_SS_CNTL_BYPASS_SS);
  1370. pll_writel(val, PLLE_SS_CTRL, pll);
  1371. udelay(1);
  1372. val &= ~PLLE_SS_CNTL_INTERP_RESET;
  1373. pll_writel(val, PLLE_SS_CTRL, pll);
  1374. udelay(1);
  1375. /* Enable HW control of XUSB brick PLL */
  1376. val = pll_readl_misc(pll);
  1377. val &= ~PLLE_MISC_IDDQ_SW_CTRL;
  1378. pll_writel_misc(val, pll);
  1379. val = pll_readl(pll->params->aux_reg, pll);
  1380. val |= (PLLE_AUX_USE_LOCKDET | PLLE_AUX_SEQ_START_STATE);
  1381. val &= ~(PLLE_AUX_ENABLE_SWCTL | PLLE_AUX_SS_SWCTL);
  1382. pll_writel(val, pll->params->aux_reg, pll);
  1383. udelay(1);
  1384. val |= PLLE_AUX_SEQ_ENABLE;
  1385. pll_writel(val, pll->params->aux_reg, pll);
  1386. val = pll_readl(XUSBIO_PLL_CFG0, pll);
  1387. val |= (XUSBIO_PLL_CFG0_PADPLL_USE_LOCKDET |
  1388. XUSBIO_PLL_CFG0_SEQ_START_STATE);
  1389. val &= ~(XUSBIO_PLL_CFG0_CLK_ENABLE_SWCTL |
  1390. XUSBIO_PLL_CFG0_PADPLL_RESET_SWCTL);
  1391. pll_writel(val, XUSBIO_PLL_CFG0, pll);
  1392. udelay(1);
  1393. val |= XUSBIO_PLL_CFG0_SEQ_ENABLE;
  1394. pll_writel(val, XUSBIO_PLL_CFG0, pll);
  1395. /* Enable HW control of SATA PLL */
  1396. val = pll_readl(SATA_PLL_CFG0, pll);
  1397. val &= ~SATA_PLL_CFG0_PADPLL_RESET_SWCTL;
  1398. val |= SATA_PLL_CFG0_PADPLL_USE_LOCKDET;
  1399. val |= SATA_PLL_CFG0_SEQ_START_STATE;
  1400. pll_writel(val, SATA_PLL_CFG0, pll);
  1401. udelay(1);
  1402. val = pll_readl(SATA_PLL_CFG0, pll);
  1403. val |= SATA_PLL_CFG0_SEQ_ENABLE;
  1404. pll_writel(val, SATA_PLL_CFG0, pll);
  1405. out:
  1406. if (pll->lock)
  1407. spin_unlock_irqrestore(pll->lock, flags);
  1408. return ret;
  1409. }
  1410. static void clk_plle_tegra114_disable(struct clk_hw *hw)
  1411. {
  1412. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1413. unsigned long flags = 0;
  1414. u32 val;
  1415. if (pll->lock)
  1416. spin_lock_irqsave(pll->lock, flags);
  1417. _clk_pll_disable(hw);
  1418. val = pll_readl_misc(pll);
  1419. val |= PLLE_MISC_IDDQ_SW_CTRL | PLLE_MISC_IDDQ_SW_VALUE;
  1420. pll_writel_misc(val, pll);
  1421. udelay(1);
  1422. if (pll->lock)
  1423. spin_unlock_irqrestore(pll->lock, flags);
  1424. }
  1425. static int clk_pllu_tegra114_enable(struct clk_hw *hw)
  1426. {
  1427. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1428. const struct utmi_clk_param *params = NULL;
  1429. struct clk *osc = __clk_lookup("osc");
  1430. unsigned long flags = 0, input_rate;
  1431. unsigned int i;
  1432. int ret = 0;
  1433. u32 value;
  1434. if (!osc) {
  1435. pr_err("%s: failed to get OSC clock\n", __func__);
  1436. return -EINVAL;
  1437. }
  1438. input_rate = clk_hw_get_rate(__clk_get_hw(osc));
  1439. if (pll->lock)
  1440. spin_lock_irqsave(pll->lock, flags);
  1441. if (!clk_pll_is_enabled(hw))
  1442. _clk_pll_enable(hw);
  1443. ret = clk_pll_wait_for_lock(pll);
  1444. if (ret < 0)
  1445. goto out;
  1446. for (i = 0; i < ARRAY_SIZE(utmi_parameters); i++) {
  1447. if (input_rate == utmi_parameters[i].osc_frequency) {
  1448. params = &utmi_parameters[i];
  1449. break;
  1450. }
  1451. }
  1452. if (!params) {
  1453. pr_err("%s: unexpected input rate %lu Hz\n", __func__,
  1454. input_rate);
  1455. ret = -EINVAL;
  1456. goto out;
  1457. }
  1458. value = pll_readl_base(pll);
  1459. value &= ~PLLU_BASE_OVERRIDE;
  1460. pll_writel_base(value, pll);
  1461. value = readl_relaxed(pll->clk_base + UTMIP_PLL_CFG2);
  1462. /* Program UTMIP PLL stable and active counts */
  1463. value &= ~UTMIP_PLL_CFG2_STABLE_COUNT(~0);
  1464. value |= UTMIP_PLL_CFG2_STABLE_COUNT(params->stable_count);
  1465. value &= ~UTMIP_PLL_CFG2_ACTIVE_DLY_COUNT(~0);
  1466. value |= UTMIP_PLL_CFG2_ACTIVE_DLY_COUNT(params->active_delay_count);
  1467. /* Remove power downs from UTMIP PLL control bits */
  1468. value &= ~UTMIP_PLL_CFG2_FORCE_PD_SAMP_A_POWERDOWN;
  1469. value &= ~UTMIP_PLL_CFG2_FORCE_PD_SAMP_B_POWERDOWN;
  1470. value &= ~UTMIP_PLL_CFG2_FORCE_PD_SAMP_C_POWERDOWN;
  1471. writel_relaxed(value, pll->clk_base + UTMIP_PLL_CFG2);
  1472. value = readl_relaxed(pll->clk_base + UTMIP_PLL_CFG1);
  1473. /* Program UTMIP PLL delay and oscillator frequency counts */
  1474. value &= ~UTMIP_PLL_CFG1_ENABLE_DLY_COUNT(~0);
  1475. value |= UTMIP_PLL_CFG1_ENABLE_DLY_COUNT(params->enable_delay_count);
  1476. value &= ~UTMIP_PLL_CFG1_XTAL_FREQ_COUNT(~0);
  1477. value |= UTMIP_PLL_CFG1_XTAL_FREQ_COUNT(params->xtal_freq_count);
  1478. /* Remove power downs from UTMIP PLL control bits */
  1479. value &= ~UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERDOWN;
  1480. value &= ~UTMIP_PLL_CFG1_FORCE_PLL_ACTIVE_POWERDOWN;
  1481. value &= ~UTMIP_PLL_CFG1_FORCE_PLLU_POWERUP;
  1482. value &= ~UTMIP_PLL_CFG1_FORCE_PLLU_POWERDOWN;
  1483. writel_relaxed(value, pll->clk_base + UTMIP_PLL_CFG1);
  1484. /* Setup HW control of UTMIPLL */
  1485. value = readl_relaxed(pll->clk_base + UTMIPLL_HW_PWRDN_CFG0);
  1486. value |= UTMIPLL_HW_PWRDN_CFG0_USE_LOCKDET;
  1487. value &= ~UTMIPLL_HW_PWRDN_CFG0_CLK_ENABLE_SWCTL;
  1488. value |= UTMIPLL_HW_PWRDN_CFG0_SEQ_START_STATE;
  1489. writel_relaxed(value, pll->clk_base + UTMIPLL_HW_PWRDN_CFG0);
  1490. value = readl_relaxed(pll->clk_base + UTMIP_PLL_CFG1);
  1491. value &= ~UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERUP;
  1492. value &= ~UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERDOWN;
  1493. writel_relaxed(value, pll->clk_base + UTMIP_PLL_CFG1);
  1494. udelay(1);
  1495. /*
  1496. * Setup SW override of UTMIPLL assuming USB2.0 ports are assigned
  1497. * to USB2
  1498. */
  1499. value = readl_relaxed(pll->clk_base + UTMIPLL_HW_PWRDN_CFG0);
  1500. value |= UTMIPLL_HW_PWRDN_CFG0_IDDQ_SWCTL;
  1501. value &= ~UTMIPLL_HW_PWRDN_CFG0_IDDQ_OVERRIDE;
  1502. writel_relaxed(value, pll->clk_base + UTMIPLL_HW_PWRDN_CFG0);
  1503. udelay(1);
  1504. /* Enable HW control of UTMIPLL */
  1505. value = readl_relaxed(pll->clk_base + UTMIPLL_HW_PWRDN_CFG0);
  1506. value |= UTMIPLL_HW_PWRDN_CFG0_SEQ_ENABLE;
  1507. writel_relaxed(value, pll->clk_base + UTMIPLL_HW_PWRDN_CFG0);
  1508. out:
  1509. if (pll->lock)
  1510. spin_unlock_irqrestore(pll->lock, flags);
  1511. return ret;
  1512. }
  1513. static void _clk_plle_tegra_init_parent(struct tegra_clk_pll *pll)
  1514. {
  1515. u32 val, val_aux;
  1516. /* ensure parent is set to pll_ref */
  1517. val = pll_readl_base(pll);
  1518. val_aux = pll_readl(pll->params->aux_reg, pll);
  1519. if (val & PLL_BASE_ENABLE) {
  1520. if ((val_aux & PLLE_AUX_PLLRE_SEL) ||
  1521. (val_aux & PLLE_AUX_PLLP_SEL))
  1522. WARN(1, "pll_e enabled with unsupported parent %s\n",
  1523. (val_aux & PLLE_AUX_PLLP_SEL) ? "pllp_out0" :
  1524. "pll_re_vco");
  1525. } else {
  1526. val_aux &= ~(PLLE_AUX_PLLRE_SEL | PLLE_AUX_PLLP_SEL);
  1527. pll_writel(val_aux, pll->params->aux_reg, pll);
  1528. fence_udelay(1, pll->clk_base);
  1529. }
  1530. }
  1531. #endif
  1532. static struct tegra_clk_pll *_tegra_init_pll(void __iomem *clk_base,
  1533. void __iomem *pmc, struct tegra_clk_pll_params *pll_params,
  1534. spinlock_t *lock)
  1535. {
  1536. struct tegra_clk_pll *pll;
  1537. pll = kzalloc_obj(*pll);
  1538. if (!pll)
  1539. return ERR_PTR(-ENOMEM);
  1540. pll->clk_base = clk_base;
  1541. pll->pmc = pmc;
  1542. pll->params = pll_params;
  1543. pll->lock = lock;
  1544. if (!pll_params->div_nmp)
  1545. pll_params->div_nmp = &default_nmp;
  1546. return pll;
  1547. }
  1548. static struct clk *_tegra_clk_register_pll(struct tegra_clk_pll *pll,
  1549. const char *name, const char *parent_name, unsigned long flags,
  1550. const struct clk_ops *ops)
  1551. {
  1552. struct clk_init_data init;
  1553. init.name = name;
  1554. init.ops = ops;
  1555. init.flags = flags;
  1556. init.parent_names = (parent_name ? &parent_name : NULL);
  1557. init.num_parents = (parent_name ? 1 : 0);
  1558. /* Default to _calc_rate if unspecified */
  1559. if (!pll->params->calc_rate) {
  1560. if (pll->params->flags & TEGRA_PLLM)
  1561. pll->params->calc_rate = _calc_dynamic_ramp_rate;
  1562. else
  1563. pll->params->calc_rate = _calc_rate;
  1564. }
  1565. if (pll->params->set_defaults)
  1566. pll->params->set_defaults(pll);
  1567. /* Data in .init is copied by clk_register(), so stack variable OK */
  1568. pll->hw.init = &init;
  1569. return tegra_clk_dev_register(&pll->hw);
  1570. }
  1571. struct clk *tegra_clk_register_pll(const char *name, const char *parent_name,
  1572. void __iomem *clk_base, void __iomem *pmc,
  1573. unsigned long flags, struct tegra_clk_pll_params *pll_params,
  1574. spinlock_t *lock)
  1575. {
  1576. struct tegra_clk_pll *pll;
  1577. struct clk *clk;
  1578. pll_params->flags |= TEGRA_PLL_BYPASS;
  1579. pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
  1580. if (IS_ERR(pll))
  1581. return ERR_CAST(pll);
  1582. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1583. &tegra_clk_pll_ops);
  1584. if (IS_ERR(clk))
  1585. kfree(pll);
  1586. return clk;
  1587. }
  1588. static struct div_nmp pll_e_nmp = {
  1589. .divn_shift = PLLE_BASE_DIVN_SHIFT,
  1590. .divn_width = PLLE_BASE_DIVN_WIDTH,
  1591. .divm_shift = PLLE_BASE_DIVM_SHIFT,
  1592. .divm_width = PLLE_BASE_DIVM_WIDTH,
  1593. .divp_shift = PLLE_BASE_DIVP_SHIFT,
  1594. .divp_width = PLLE_BASE_DIVP_WIDTH,
  1595. };
  1596. struct clk *tegra_clk_register_plle(const char *name, const char *parent_name,
  1597. void __iomem *clk_base, void __iomem *pmc,
  1598. unsigned long flags, struct tegra_clk_pll_params *pll_params,
  1599. spinlock_t *lock)
  1600. {
  1601. struct tegra_clk_pll *pll;
  1602. struct clk *clk;
  1603. pll_params->flags |= TEGRA_PLL_BYPASS;
  1604. if (!pll_params->div_nmp)
  1605. pll_params->div_nmp = &pll_e_nmp;
  1606. pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
  1607. if (IS_ERR(pll))
  1608. return ERR_CAST(pll);
  1609. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1610. &tegra_clk_plle_ops);
  1611. if (IS_ERR(clk))
  1612. kfree(pll);
  1613. return clk;
  1614. }
  1615. struct clk *tegra_clk_register_pllu(const char *name, const char *parent_name,
  1616. void __iomem *clk_base, unsigned long flags,
  1617. struct tegra_clk_pll_params *pll_params, spinlock_t *lock)
  1618. {
  1619. struct tegra_clk_pll *pll;
  1620. struct clk *clk;
  1621. pll_params->flags |= TEGRA_PLLU;
  1622. pll = _tegra_init_pll(clk_base, NULL, pll_params, lock);
  1623. if (IS_ERR(pll))
  1624. return ERR_CAST(pll);
  1625. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1626. &tegra_clk_pllu_ops);
  1627. if (IS_ERR(clk))
  1628. kfree(pll);
  1629. return clk;
  1630. }
  1631. #if defined(CONFIG_ARCH_TEGRA_114_SOC) || \
  1632. defined(CONFIG_ARCH_TEGRA_124_SOC) || \
  1633. defined(CONFIG_ARCH_TEGRA_132_SOC) || \
  1634. defined(CONFIG_ARCH_TEGRA_210_SOC)
  1635. static const struct clk_ops tegra_clk_pllxc_ops = {
  1636. .is_enabled = clk_pll_is_enabled,
  1637. .enable = clk_pll_enable,
  1638. .disable = clk_pll_disable,
  1639. .recalc_rate = clk_pll_recalc_rate,
  1640. .determine_rate = clk_pll_ramp_determine_rate,
  1641. .set_rate = clk_pllxc_set_rate,
  1642. };
  1643. static const struct clk_ops tegra_clk_pllc_ops = {
  1644. .is_enabled = clk_pll_is_enabled,
  1645. .enable = clk_pllc_enable,
  1646. .disable = clk_pllc_disable,
  1647. .recalc_rate = clk_pll_recalc_rate,
  1648. .determine_rate = clk_pll_ramp_determine_rate,
  1649. .set_rate = clk_pllc_set_rate,
  1650. };
  1651. static const struct clk_ops tegra_clk_pllre_ops = {
  1652. .is_enabled = clk_pll_is_enabled,
  1653. .enable = clk_pll_enable,
  1654. .disable = clk_pll_disable,
  1655. .recalc_rate = clk_pllre_recalc_rate,
  1656. .determine_rate = clk_pllre_determine_rate,
  1657. .set_rate = clk_pllre_set_rate,
  1658. };
  1659. static const struct clk_ops tegra_clk_plle_tegra114_ops = {
  1660. .is_enabled = clk_pll_is_enabled,
  1661. .enable = clk_plle_tegra114_enable,
  1662. .disable = clk_plle_tegra114_disable,
  1663. .recalc_rate = clk_pll_recalc_rate,
  1664. };
  1665. static const struct clk_ops tegra_clk_pllu_tegra114_ops = {
  1666. .is_enabled = clk_pll_is_enabled,
  1667. .enable = clk_pllu_tegra114_enable,
  1668. .disable = clk_pll_disable,
  1669. .recalc_rate = clk_pll_recalc_rate,
  1670. };
  1671. struct clk *tegra_clk_register_pllxc(const char *name, const char *parent_name,
  1672. void __iomem *clk_base, void __iomem *pmc,
  1673. unsigned long flags,
  1674. struct tegra_clk_pll_params *pll_params,
  1675. spinlock_t *lock)
  1676. {
  1677. struct tegra_clk_pll *pll;
  1678. struct clk *clk, *parent;
  1679. unsigned long parent_rate;
  1680. u32 val, val_iddq;
  1681. parent = __clk_lookup(parent_name);
  1682. if (!parent) {
  1683. WARN(1, "parent clk %s of %s must be registered first\n",
  1684. parent_name, name);
  1685. return ERR_PTR(-EINVAL);
  1686. }
  1687. if (!pll_params->pdiv_tohw)
  1688. return ERR_PTR(-EINVAL);
  1689. parent_rate = clk_get_rate(parent);
  1690. pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
  1691. if (pll_params->adjust_vco)
  1692. pll_params->vco_min = pll_params->adjust_vco(pll_params,
  1693. parent_rate);
  1694. /*
  1695. * If the pll has a set_defaults callback, it will take care of
  1696. * configuring dynamic ramping and setting IDDQ in that path.
  1697. */
  1698. if (!pll_params->set_defaults) {
  1699. int err;
  1700. err = _setup_dynamic_ramp(pll_params, clk_base, parent_rate);
  1701. if (err)
  1702. return ERR_PTR(err);
  1703. val = readl_relaxed(clk_base + pll_params->base_reg);
  1704. val_iddq = readl_relaxed(clk_base + pll_params->iddq_reg);
  1705. if (val & PLL_BASE_ENABLE)
  1706. WARN_ON(val_iddq & BIT(pll_params->iddq_bit_idx));
  1707. else {
  1708. val_iddq |= BIT(pll_params->iddq_bit_idx);
  1709. writel_relaxed(val_iddq,
  1710. clk_base + pll_params->iddq_reg);
  1711. }
  1712. }
  1713. pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
  1714. if (IS_ERR(pll))
  1715. return ERR_CAST(pll);
  1716. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1717. &tegra_clk_pllxc_ops);
  1718. if (IS_ERR(clk))
  1719. kfree(pll);
  1720. return clk;
  1721. }
  1722. struct clk *tegra_clk_register_pllre(const char *name, const char *parent_name,
  1723. void __iomem *clk_base, void __iomem *pmc,
  1724. unsigned long flags,
  1725. struct tegra_clk_pll_params *pll_params,
  1726. spinlock_t *lock, unsigned long parent_rate)
  1727. {
  1728. u32 val;
  1729. struct tegra_clk_pll *pll;
  1730. struct clk *clk;
  1731. pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
  1732. if (pll_params->adjust_vco)
  1733. pll_params->vco_min = pll_params->adjust_vco(pll_params,
  1734. parent_rate);
  1735. pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
  1736. if (IS_ERR(pll))
  1737. return ERR_CAST(pll);
  1738. /* program minimum rate by default */
  1739. val = pll_readl_base(pll);
  1740. if (val & PLL_BASE_ENABLE)
  1741. WARN_ON(readl_relaxed(clk_base + pll_params->iddq_reg) &
  1742. BIT(pll_params->iddq_bit_idx));
  1743. else {
  1744. int m;
  1745. m = _pll_fixed_mdiv(pll_params, parent_rate);
  1746. val = m << divm_shift(pll);
  1747. val |= (pll_params->vco_min / parent_rate) << divn_shift(pll);
  1748. pll_writel_base(val, pll);
  1749. }
  1750. /* disable lock override */
  1751. val = pll_readl_misc(pll);
  1752. val &= ~BIT(29);
  1753. pll_writel_misc(val, pll);
  1754. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1755. &tegra_clk_pllre_ops);
  1756. if (IS_ERR(clk))
  1757. kfree(pll);
  1758. return clk;
  1759. }
  1760. struct clk *tegra_clk_register_pllm(const char *name, const char *parent_name,
  1761. void __iomem *clk_base, void __iomem *pmc,
  1762. unsigned long flags,
  1763. struct tegra_clk_pll_params *pll_params,
  1764. spinlock_t *lock)
  1765. {
  1766. struct tegra_clk_pll *pll;
  1767. struct clk *clk, *parent;
  1768. unsigned long parent_rate;
  1769. if (!pll_params->pdiv_tohw)
  1770. return ERR_PTR(-EINVAL);
  1771. parent = __clk_lookup(parent_name);
  1772. if (!parent) {
  1773. WARN(1, "parent clk %s of %s must be registered first\n",
  1774. parent_name, name);
  1775. return ERR_PTR(-EINVAL);
  1776. }
  1777. parent_rate = clk_get_rate(parent);
  1778. pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
  1779. if (pll_params->adjust_vco)
  1780. pll_params->vco_min = pll_params->adjust_vco(pll_params,
  1781. parent_rate);
  1782. pll_params->flags |= TEGRA_PLL_BYPASS;
  1783. pll_params->flags |= TEGRA_PLLM;
  1784. pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
  1785. if (IS_ERR(pll))
  1786. return ERR_CAST(pll);
  1787. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1788. &tegra_clk_pll_ops);
  1789. if (IS_ERR(clk))
  1790. kfree(pll);
  1791. return clk;
  1792. }
  1793. struct clk *tegra_clk_register_pllc(const char *name, const char *parent_name,
  1794. void __iomem *clk_base, void __iomem *pmc,
  1795. unsigned long flags,
  1796. struct tegra_clk_pll_params *pll_params,
  1797. spinlock_t *lock)
  1798. {
  1799. struct clk *parent, *clk;
  1800. const struct pdiv_map *p_tohw = pll_params->pdiv_tohw;
  1801. struct tegra_clk_pll *pll;
  1802. struct tegra_clk_pll_freq_table cfg;
  1803. unsigned long parent_rate;
  1804. if (!p_tohw)
  1805. return ERR_PTR(-EINVAL);
  1806. parent = __clk_lookup(parent_name);
  1807. if (!parent) {
  1808. WARN(1, "parent clk %s of %s must be registered first\n",
  1809. parent_name, name);
  1810. return ERR_PTR(-EINVAL);
  1811. }
  1812. parent_rate = clk_get_rate(parent);
  1813. pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
  1814. pll_params->flags |= TEGRA_PLL_BYPASS;
  1815. pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
  1816. if (IS_ERR(pll))
  1817. return ERR_CAST(pll);
  1818. /*
  1819. * Most of PLLC register fields are shadowed, and can not be read
  1820. * directly from PLL h/w. Hence, actual PLLC boot state is unknown.
  1821. * Initialize PLL to default state: disabled, reset; shadow registers
  1822. * loaded with default parameters; dividers are preset for half of
  1823. * minimum VCO rate (the latter assured that shadowed divider settings
  1824. * are within supported range).
  1825. */
  1826. cfg.m = _pll_fixed_mdiv(pll_params, parent_rate);
  1827. cfg.n = cfg.m * pll_params->vco_min / parent_rate;
  1828. while (p_tohw->pdiv) {
  1829. if (p_tohw->pdiv == 2) {
  1830. cfg.p = p_tohw->hw_val;
  1831. break;
  1832. }
  1833. p_tohw++;
  1834. }
  1835. if (!p_tohw->pdiv) {
  1836. WARN_ON(1);
  1837. return ERR_PTR(-EINVAL);
  1838. }
  1839. pll_writel_base(0, pll);
  1840. _update_pll_mnp(pll, &cfg);
  1841. pll_writel_misc(PLLCX_MISC_DEFAULT, pll);
  1842. pll_writel(PLLCX_MISC1_DEFAULT, pll_params->ext_misc_reg[0], pll);
  1843. pll_writel(PLLCX_MISC2_DEFAULT, pll_params->ext_misc_reg[1], pll);
  1844. pll_writel(PLLCX_MISC3_DEFAULT, pll_params->ext_misc_reg[2], pll);
  1845. _pllcx_update_dynamic_coef(pll, parent_rate, cfg.n);
  1846. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1847. &tegra_clk_pllc_ops);
  1848. if (IS_ERR(clk))
  1849. kfree(pll);
  1850. return clk;
  1851. }
  1852. struct clk *tegra_clk_register_plle_tegra114(const char *name,
  1853. const char *parent_name,
  1854. void __iomem *clk_base, unsigned long flags,
  1855. struct tegra_clk_pll_params *pll_params,
  1856. spinlock_t *lock)
  1857. {
  1858. struct tegra_clk_pll *pll;
  1859. struct clk *clk;
  1860. pll = _tegra_init_pll(clk_base, NULL, pll_params, lock);
  1861. if (IS_ERR(pll))
  1862. return ERR_CAST(pll);
  1863. _clk_plle_tegra_init_parent(pll);
  1864. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1865. &tegra_clk_plle_tegra114_ops);
  1866. if (IS_ERR(clk))
  1867. kfree(pll);
  1868. return clk;
  1869. }
  1870. struct clk *
  1871. tegra_clk_register_pllu_tegra114(const char *name, const char *parent_name,
  1872. void __iomem *clk_base, unsigned long flags,
  1873. struct tegra_clk_pll_params *pll_params,
  1874. spinlock_t *lock)
  1875. {
  1876. struct tegra_clk_pll *pll;
  1877. struct clk *clk;
  1878. pll_params->flags |= TEGRA_PLLU;
  1879. pll = _tegra_init_pll(clk_base, NULL, pll_params, lock);
  1880. if (IS_ERR(pll))
  1881. return ERR_CAST(pll);
  1882. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1883. &tegra_clk_pllu_tegra114_ops);
  1884. if (IS_ERR(clk))
  1885. kfree(pll);
  1886. return clk;
  1887. }
  1888. #endif
  1889. #if defined(CONFIG_ARCH_TEGRA_124_SOC) || defined(CONFIG_ARCH_TEGRA_132_SOC) || defined(CONFIG_ARCH_TEGRA_210_SOC)
  1890. static const struct clk_ops tegra_clk_pllss_ops = {
  1891. .is_enabled = clk_pll_is_enabled,
  1892. .enable = clk_pll_enable,
  1893. .disable = clk_pll_disable,
  1894. .recalc_rate = clk_pll_recalc_rate,
  1895. .determine_rate = clk_pll_ramp_determine_rate,
  1896. .set_rate = clk_pllxc_set_rate,
  1897. .restore_context = tegra_clk_pll_restore_context,
  1898. };
  1899. struct clk *tegra_clk_register_pllss(const char *name, const char *parent_name,
  1900. void __iomem *clk_base, unsigned long flags,
  1901. struct tegra_clk_pll_params *pll_params,
  1902. spinlock_t *lock)
  1903. {
  1904. struct tegra_clk_pll *pll;
  1905. struct clk *clk, *parent;
  1906. struct tegra_clk_pll_freq_table cfg;
  1907. unsigned long parent_rate;
  1908. u32 val, val_iddq;
  1909. int i;
  1910. if (!pll_params->div_nmp)
  1911. return ERR_PTR(-EINVAL);
  1912. parent = __clk_lookup(parent_name);
  1913. if (!parent) {
  1914. WARN(1, "parent clk %s of %s must be registered first\n",
  1915. parent_name, name);
  1916. return ERR_PTR(-EINVAL);
  1917. }
  1918. pll = _tegra_init_pll(clk_base, NULL, pll_params, lock);
  1919. if (IS_ERR(pll))
  1920. return ERR_CAST(pll);
  1921. val = pll_readl_base(pll);
  1922. val &= ~PLLSS_REF_SRC_SEL_MASK;
  1923. pll_writel_base(val, pll);
  1924. parent_rate = clk_get_rate(parent);
  1925. pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
  1926. /* initialize PLL to minimum rate */
  1927. cfg.m = _pll_fixed_mdiv(pll_params, parent_rate);
  1928. cfg.n = cfg.m * pll_params->vco_min / parent_rate;
  1929. for (i = 0; pll_params->pdiv_tohw[i].pdiv; i++)
  1930. ;
  1931. if (!i) {
  1932. kfree(pll);
  1933. return ERR_PTR(-EINVAL);
  1934. }
  1935. cfg.p = pll_params->pdiv_tohw[i-1].hw_val;
  1936. _update_pll_mnp(pll, &cfg);
  1937. pll_writel_misc(PLLSS_MISC_DEFAULT, pll);
  1938. pll_writel(PLLSS_CFG_DEFAULT, pll_params->ext_misc_reg[0], pll);
  1939. pll_writel(PLLSS_CTRL1_DEFAULT, pll_params->ext_misc_reg[1], pll);
  1940. pll_writel(PLLSS_CTRL1_DEFAULT, pll_params->ext_misc_reg[2], pll);
  1941. val = pll_readl_base(pll);
  1942. val_iddq = readl_relaxed(clk_base + pll_params->iddq_reg);
  1943. if (val & PLL_BASE_ENABLE) {
  1944. if (val_iddq & BIT(pll_params->iddq_bit_idx)) {
  1945. WARN(1, "%s is on but IDDQ set\n", name);
  1946. kfree(pll);
  1947. return ERR_PTR(-EINVAL);
  1948. }
  1949. } else {
  1950. val_iddq |= BIT(pll_params->iddq_bit_idx);
  1951. writel_relaxed(val_iddq, clk_base + pll_params->iddq_reg);
  1952. }
  1953. val &= ~PLLSS_LOCK_OVERRIDE;
  1954. pll_writel_base(val, pll);
  1955. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1956. &tegra_clk_pllss_ops);
  1957. if (IS_ERR(clk))
  1958. kfree(pll);
  1959. return clk;
  1960. }
  1961. #endif
  1962. #if defined(CONFIG_ARCH_TEGRA_210_SOC)
  1963. struct clk *tegra_clk_register_pllre_tegra210(const char *name,
  1964. const char *parent_name, void __iomem *clk_base,
  1965. void __iomem *pmc, unsigned long flags,
  1966. struct tegra_clk_pll_params *pll_params,
  1967. spinlock_t *lock, unsigned long parent_rate)
  1968. {
  1969. struct tegra_clk_pll *pll;
  1970. struct clk *clk;
  1971. pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
  1972. if (pll_params->adjust_vco)
  1973. pll_params->vco_min = pll_params->adjust_vco(pll_params,
  1974. parent_rate);
  1975. pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
  1976. if (IS_ERR(pll))
  1977. return ERR_CAST(pll);
  1978. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1979. &tegra_clk_pll_ops);
  1980. if (IS_ERR(clk))
  1981. kfree(pll);
  1982. return clk;
  1983. }
  1984. static int clk_plle_tegra210_is_enabled(struct clk_hw *hw)
  1985. {
  1986. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1987. u32 val;
  1988. val = pll_readl_base(pll);
  1989. return val & PLLE_BASE_ENABLE ? 1 : 0;
  1990. }
  1991. static int clk_plle_tegra210_enable(struct clk_hw *hw)
  1992. {
  1993. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1994. struct tegra_clk_pll_freq_table sel;
  1995. u32 val;
  1996. int ret = 0;
  1997. unsigned long flags = 0;
  1998. unsigned long input_rate;
  1999. if (clk_plle_tegra210_is_enabled(hw))
  2000. return 0;
  2001. input_rate = clk_hw_get_rate(clk_hw_get_parent(hw));
  2002. if (_get_table_rate(hw, &sel, pll->params->fixed_rate, input_rate))
  2003. return -EINVAL;
  2004. if (pll->lock)
  2005. spin_lock_irqsave(pll->lock, flags);
  2006. val = pll_readl(pll->params->aux_reg, pll);
  2007. if (val & PLLE_AUX_SEQ_ENABLE)
  2008. goto out;
  2009. val = pll_readl_base(pll);
  2010. val &= ~BIT(30); /* Disable lock override */
  2011. pll_writel_base(val, pll);
  2012. val = pll_readl_misc(pll);
  2013. val |= PLLE_MISC_LOCK_ENABLE;
  2014. val |= PLLE_MISC_IDDQ_SW_CTRL;
  2015. val &= ~PLLE_MISC_IDDQ_SW_VALUE;
  2016. val |= PLLE_MISC_PLLE_PTS;
  2017. val &= ~(PLLE_MISC_VREG_BG_CTRL_MASK | PLLE_MISC_VREG_CTRL_MASK);
  2018. pll_writel_misc(val, pll);
  2019. udelay(5);
  2020. val = pll_readl(PLLE_SS_CTRL, pll);
  2021. val |= PLLE_SS_DISABLE;
  2022. pll_writel(val, PLLE_SS_CTRL, pll);
  2023. val = pll_readl_base(pll);
  2024. val &= ~(divp_mask_shifted(pll) | divn_mask_shifted(pll) |
  2025. divm_mask_shifted(pll));
  2026. val &= ~(PLLE_BASE_DIVCML_MASK << PLLE_BASE_DIVCML_SHIFT);
  2027. val |= sel.m << divm_shift(pll);
  2028. val |= sel.n << divn_shift(pll);
  2029. val |= sel.cpcon << PLLE_BASE_DIVCML_SHIFT;
  2030. pll_writel_base(val, pll);
  2031. udelay(1);
  2032. val = pll_readl_base(pll);
  2033. val |= PLLE_BASE_ENABLE;
  2034. pll_writel_base(val, pll);
  2035. ret = clk_pll_wait_for_lock(pll);
  2036. if (ret < 0)
  2037. goto out;
  2038. val = pll_readl(PLLE_SS_CTRL, pll);
  2039. val &= ~(PLLE_SS_CNTL_CENTER | PLLE_SS_CNTL_INVERT);
  2040. val &= ~PLLE_SS_COEFFICIENTS_MASK;
  2041. val |= PLLE_SS_COEFFICIENTS_VAL_TEGRA210;
  2042. pll_writel(val, PLLE_SS_CTRL, pll);
  2043. val &= ~(PLLE_SS_CNTL_SSC_BYP | PLLE_SS_CNTL_BYPASS_SS);
  2044. pll_writel(val, PLLE_SS_CTRL, pll);
  2045. udelay(1);
  2046. val &= ~PLLE_SS_CNTL_INTERP_RESET;
  2047. pll_writel(val, PLLE_SS_CTRL, pll);
  2048. udelay(1);
  2049. out:
  2050. if (pll->lock)
  2051. spin_unlock_irqrestore(pll->lock, flags);
  2052. return ret;
  2053. }
  2054. static void clk_plle_tegra210_disable(struct clk_hw *hw)
  2055. {
  2056. struct tegra_clk_pll *pll = to_clk_pll(hw);
  2057. unsigned long flags = 0;
  2058. u32 val;
  2059. if (pll->lock)
  2060. spin_lock_irqsave(pll->lock, flags);
  2061. /* If PLLE HW sequencer is enabled, SW should not disable PLLE */
  2062. val = pll_readl(pll->params->aux_reg, pll);
  2063. if (val & PLLE_AUX_SEQ_ENABLE)
  2064. goto out;
  2065. val = pll_readl_base(pll);
  2066. val &= ~PLLE_BASE_ENABLE;
  2067. pll_writel_base(val, pll);
  2068. val = pll_readl(pll->params->aux_reg, pll);
  2069. val |= PLLE_AUX_ENABLE_SWCTL | PLLE_AUX_SS_SWCTL;
  2070. pll_writel(val, pll->params->aux_reg, pll);
  2071. val = pll_readl_misc(pll);
  2072. val |= PLLE_MISC_IDDQ_SW_CTRL | PLLE_MISC_IDDQ_SW_VALUE;
  2073. pll_writel_misc(val, pll);
  2074. udelay(1);
  2075. out:
  2076. if (pll->lock)
  2077. spin_unlock_irqrestore(pll->lock, flags);
  2078. }
  2079. static void tegra_clk_plle_t210_restore_context(struct clk_hw *hw)
  2080. {
  2081. struct tegra_clk_pll *pll = to_clk_pll(hw);
  2082. _clk_plle_tegra_init_parent(pll);
  2083. }
  2084. static const struct clk_ops tegra_clk_plle_tegra210_ops = {
  2085. .is_enabled = clk_plle_tegra210_is_enabled,
  2086. .enable = clk_plle_tegra210_enable,
  2087. .disable = clk_plle_tegra210_disable,
  2088. .recalc_rate = clk_pll_recalc_rate,
  2089. .restore_context = tegra_clk_plle_t210_restore_context,
  2090. };
  2091. struct clk *tegra_clk_register_plle_tegra210(const char *name,
  2092. const char *parent_name,
  2093. void __iomem *clk_base, unsigned long flags,
  2094. struct tegra_clk_pll_params *pll_params,
  2095. spinlock_t *lock)
  2096. {
  2097. struct tegra_clk_pll *pll;
  2098. struct clk *clk;
  2099. pll = _tegra_init_pll(clk_base, NULL, pll_params, lock);
  2100. if (IS_ERR(pll))
  2101. return ERR_CAST(pll);
  2102. _clk_plle_tegra_init_parent(pll);
  2103. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  2104. &tegra_clk_plle_tegra210_ops);
  2105. if (IS_ERR(clk))
  2106. kfree(pll);
  2107. return clk;
  2108. }
  2109. struct clk *tegra_clk_register_pllc_tegra210(const char *name,
  2110. const char *parent_name, void __iomem *clk_base,
  2111. void __iomem *pmc, unsigned long flags,
  2112. struct tegra_clk_pll_params *pll_params,
  2113. spinlock_t *lock)
  2114. {
  2115. struct clk *parent, *clk;
  2116. const struct pdiv_map *p_tohw = pll_params->pdiv_tohw;
  2117. struct tegra_clk_pll *pll;
  2118. unsigned long parent_rate;
  2119. if (!p_tohw)
  2120. return ERR_PTR(-EINVAL);
  2121. parent = __clk_lookup(parent_name);
  2122. if (!parent) {
  2123. WARN(1, "parent clk %s of %s must be registered first\n",
  2124. name, parent_name);
  2125. return ERR_PTR(-EINVAL);
  2126. }
  2127. parent_rate = clk_get_rate(parent);
  2128. pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
  2129. if (pll_params->adjust_vco)
  2130. pll_params->vco_min = pll_params->adjust_vco(pll_params,
  2131. parent_rate);
  2132. pll_params->flags |= TEGRA_PLL_BYPASS;
  2133. pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
  2134. if (IS_ERR(pll))
  2135. return ERR_CAST(pll);
  2136. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  2137. &tegra_clk_pll_ops);
  2138. if (IS_ERR(clk))
  2139. kfree(pll);
  2140. return clk;
  2141. }
  2142. struct clk *tegra_clk_register_pllss_tegra210(const char *name,
  2143. const char *parent_name, void __iomem *clk_base,
  2144. unsigned long flags,
  2145. struct tegra_clk_pll_params *pll_params,
  2146. spinlock_t *lock)
  2147. {
  2148. struct tegra_clk_pll *pll;
  2149. struct clk *clk, *parent;
  2150. unsigned long parent_rate;
  2151. u32 val;
  2152. if (!pll_params->div_nmp)
  2153. return ERR_PTR(-EINVAL);
  2154. parent = __clk_lookup(parent_name);
  2155. if (!parent) {
  2156. WARN(1, "parent clk %s of %s must be registered first\n",
  2157. name, parent_name);
  2158. return ERR_PTR(-EINVAL);
  2159. }
  2160. val = readl_relaxed(clk_base + pll_params->base_reg);
  2161. if (val & PLLSS_REF_SRC_SEL_MASK) {
  2162. WARN(1, "not supported reference clock for %s\n", name);
  2163. return ERR_PTR(-EINVAL);
  2164. }
  2165. parent_rate = clk_get_rate(parent);
  2166. pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
  2167. if (pll_params->adjust_vco)
  2168. pll_params->vco_min = pll_params->adjust_vco(pll_params,
  2169. parent_rate);
  2170. pll_params->flags |= TEGRA_PLL_BYPASS;
  2171. pll = _tegra_init_pll(clk_base, NULL, pll_params, lock);
  2172. if (IS_ERR(pll))
  2173. return ERR_CAST(pll);
  2174. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  2175. &tegra_clk_pll_ops);
  2176. if (IS_ERR(clk))
  2177. kfree(pll);
  2178. return clk;
  2179. }
  2180. struct clk *tegra_clk_register_pllmb(const char *name, const char *parent_name,
  2181. void __iomem *clk_base, void __iomem *pmc,
  2182. unsigned long flags,
  2183. struct tegra_clk_pll_params *pll_params,
  2184. spinlock_t *lock)
  2185. {
  2186. struct tegra_clk_pll *pll;
  2187. struct clk *clk, *parent;
  2188. unsigned long parent_rate;
  2189. if (!pll_params->pdiv_tohw)
  2190. return ERR_PTR(-EINVAL);
  2191. parent = __clk_lookup(parent_name);
  2192. if (!parent) {
  2193. WARN(1, "parent clk %s of %s must be registered first\n",
  2194. parent_name, name);
  2195. return ERR_PTR(-EINVAL);
  2196. }
  2197. parent_rate = clk_get_rate(parent);
  2198. pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
  2199. if (pll_params->adjust_vco)
  2200. pll_params->vco_min = pll_params->adjust_vco(pll_params,
  2201. parent_rate);
  2202. pll_params->flags |= TEGRA_PLL_BYPASS;
  2203. pll_params->flags |= TEGRA_PLLMB;
  2204. pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
  2205. if (IS_ERR(pll))
  2206. return ERR_CAST(pll);
  2207. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  2208. &tegra_clk_pll_ops);
  2209. if (IS_ERR(clk))
  2210. kfree(pll);
  2211. return clk;
  2212. }
  2213. #endif