clk-pll.c 69 KB

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