clk-pll.c 76 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942
  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(2);
  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 int clk_pll_enable(struct clk_hw *hw)
  361. {
  362. struct tegra_clk_pll *pll = to_clk_pll(hw);
  363. unsigned long flags = 0;
  364. int ret;
  365. if (pll->lock)
  366. spin_lock_irqsave(pll->lock, flags);
  367. _clk_pll_enable(hw);
  368. ret = clk_pll_wait_for_lock(pll);
  369. if (pll->lock)
  370. spin_unlock_irqrestore(pll->lock, flags);
  371. return ret;
  372. }
  373. static void clk_pll_disable(struct clk_hw *hw)
  374. {
  375. struct tegra_clk_pll *pll = to_clk_pll(hw);
  376. unsigned long flags = 0;
  377. if (pll->lock)
  378. spin_lock_irqsave(pll->lock, flags);
  379. _clk_pll_disable(hw);
  380. if (pll->lock)
  381. spin_unlock_irqrestore(pll->lock, flags);
  382. }
  383. static int _p_div_to_hw(struct clk_hw *hw, u8 p_div)
  384. {
  385. struct tegra_clk_pll *pll = to_clk_pll(hw);
  386. const struct pdiv_map *p_tohw = pll->params->pdiv_tohw;
  387. if (p_tohw) {
  388. while (p_tohw->pdiv) {
  389. if (p_div <= p_tohw->pdiv)
  390. return p_tohw->hw_val;
  391. p_tohw++;
  392. }
  393. return -EINVAL;
  394. }
  395. return -EINVAL;
  396. }
  397. int tegra_pll_p_div_to_hw(struct tegra_clk_pll *pll, u8 p_div)
  398. {
  399. return _p_div_to_hw(&pll->hw, p_div);
  400. }
  401. static int _hw_to_p_div(struct clk_hw *hw, u8 p_div_hw)
  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_hw == p_tohw->hw_val)
  408. return p_tohw->pdiv;
  409. p_tohw++;
  410. }
  411. return -EINVAL;
  412. }
  413. return 1 << p_div_hw;
  414. }
  415. static int _get_table_rate(struct clk_hw *hw,
  416. struct tegra_clk_pll_freq_table *cfg,
  417. unsigned long rate, unsigned long parent_rate)
  418. {
  419. struct tegra_clk_pll *pll = to_clk_pll(hw);
  420. struct tegra_clk_pll_freq_table *sel;
  421. int p;
  422. for (sel = pll->params->freq_table; sel->input_rate != 0; sel++)
  423. if (sel->input_rate == parent_rate &&
  424. sel->output_rate == rate)
  425. break;
  426. if (sel->input_rate == 0)
  427. return -EINVAL;
  428. if (pll->params->pdiv_tohw) {
  429. p = _p_div_to_hw(hw, sel->p);
  430. if (p < 0)
  431. return p;
  432. } else {
  433. p = ilog2(sel->p);
  434. }
  435. cfg->input_rate = sel->input_rate;
  436. cfg->output_rate = sel->output_rate;
  437. cfg->m = sel->m;
  438. cfg->n = sel->n;
  439. cfg->p = p;
  440. cfg->cpcon = sel->cpcon;
  441. cfg->sdm_data = sel->sdm_data;
  442. return 0;
  443. }
  444. static int _calc_rate(struct clk_hw *hw, struct tegra_clk_pll_freq_table *cfg,
  445. unsigned long rate, unsigned long parent_rate)
  446. {
  447. struct tegra_clk_pll *pll = to_clk_pll(hw);
  448. unsigned long cfreq;
  449. u32 p_div = 0;
  450. int ret;
  451. switch (parent_rate) {
  452. case 12000000:
  453. case 26000000:
  454. cfreq = (rate <= 1000000 * 1000) ? 1000000 : 2000000;
  455. break;
  456. case 13000000:
  457. cfreq = (rate <= 1000000 * 1000) ? 1000000 : 2600000;
  458. break;
  459. case 16800000:
  460. case 19200000:
  461. cfreq = (rate <= 1200000 * 1000) ? 1200000 : 2400000;
  462. break;
  463. case 9600000:
  464. case 28800000:
  465. /*
  466. * PLL_P_OUT1 rate is not listed in PLLA table
  467. */
  468. cfreq = parent_rate / (parent_rate / 1000000);
  469. break;
  470. default:
  471. pr_err("%s Unexpected reference rate %lu\n",
  472. __func__, parent_rate);
  473. BUG();
  474. }
  475. /* Raise VCO to guarantee 0.5% accuracy */
  476. for (cfg->output_rate = rate; cfg->output_rate < 200 * cfreq;
  477. cfg->output_rate <<= 1)
  478. p_div++;
  479. cfg->m = parent_rate / cfreq;
  480. cfg->n = cfg->output_rate / cfreq;
  481. cfg->cpcon = OUT_OF_TABLE_CPCON;
  482. if (cfg->m > divm_max(pll) || cfg->n > divn_max(pll) ||
  483. (1 << p_div) > divp_max(pll)
  484. || cfg->output_rate > pll->params->vco_max) {
  485. return -EINVAL;
  486. }
  487. cfg->output_rate >>= p_div;
  488. if (pll->params->pdiv_tohw) {
  489. ret = _p_div_to_hw(hw, 1 << p_div);
  490. if (ret < 0)
  491. return ret;
  492. else
  493. cfg->p = ret;
  494. } else
  495. cfg->p = p_div;
  496. return 0;
  497. }
  498. /*
  499. * SDM (Sigma Delta Modulator) divisor is 16-bit 2's complement signed number
  500. * within (-2^12 ... 2^12-1) range. Represented in PLL data structure as
  501. * unsigned 16-bit value, with "0" divisor mapped to 0xFFFF. Data "0" is used
  502. * to indicate that SDM is disabled.
  503. *
  504. * Effective ndiv value when SDM is enabled: ndiv + 1/2 + sdm_din/2^13
  505. */
  506. static void clk_pll_set_sdm_data(struct clk_hw *hw,
  507. struct tegra_clk_pll_freq_table *cfg)
  508. {
  509. struct tegra_clk_pll *pll = to_clk_pll(hw);
  510. u32 val;
  511. bool enabled;
  512. if (!pll->params->sdm_din_reg)
  513. return;
  514. if (cfg->sdm_data) {
  515. val = pll_readl_sdm_din(pll) & (~sdm_din_mask(pll));
  516. val |= sdin_data_to_din(cfg->sdm_data) & sdm_din_mask(pll);
  517. pll_writel_sdm_din(val, pll);
  518. }
  519. val = pll_readl_sdm_ctrl(pll);
  520. enabled = (val & sdm_en_mask(pll));
  521. if (cfg->sdm_data == 0 && enabled)
  522. val &= ~pll->params->sdm_ctrl_en_mask;
  523. if (cfg->sdm_data != 0 && !enabled)
  524. val |= pll->params->sdm_ctrl_en_mask;
  525. pll_writel_sdm_ctrl(val, pll);
  526. }
  527. static void _update_pll_mnp(struct tegra_clk_pll *pll,
  528. struct tegra_clk_pll_freq_table *cfg)
  529. {
  530. u32 val;
  531. struct tegra_clk_pll_params *params = pll->params;
  532. struct div_nmp *div_nmp = params->div_nmp;
  533. if ((params->flags & (TEGRA_PLLM | TEGRA_PLLMB)) &&
  534. (pll_override_readl(PMC_PLLP_WB0_OVERRIDE, pll) &
  535. PMC_PLLP_WB0_OVERRIDE_PLLM_OVERRIDE)) {
  536. val = pll_override_readl(params->pmc_divp_reg, pll);
  537. val &= ~(divp_mask(pll) << div_nmp->override_divp_shift);
  538. val |= cfg->p << div_nmp->override_divp_shift;
  539. pll_override_writel(val, params->pmc_divp_reg, pll);
  540. val = pll_override_readl(params->pmc_divnm_reg, pll);
  541. val &= ~(divm_mask(pll) << div_nmp->override_divm_shift) |
  542. ~(divn_mask(pll) << div_nmp->override_divn_shift);
  543. val |= (cfg->m << div_nmp->override_divm_shift) |
  544. (cfg->n << div_nmp->override_divn_shift);
  545. pll_override_writel(val, params->pmc_divnm_reg, pll);
  546. } else {
  547. val = pll_readl_base(pll);
  548. val &= ~(divm_mask_shifted(pll) | divn_mask_shifted(pll) |
  549. divp_mask_shifted(pll));
  550. val |= (cfg->m << divm_shift(pll)) |
  551. (cfg->n << divn_shift(pll)) |
  552. (cfg->p << divp_shift(pll));
  553. pll_writel_base(val, pll);
  554. clk_pll_set_sdm_data(&pll->hw, cfg);
  555. }
  556. }
  557. static void _get_pll_mnp(struct tegra_clk_pll *pll,
  558. struct tegra_clk_pll_freq_table *cfg)
  559. {
  560. u32 val;
  561. struct tegra_clk_pll_params *params = pll->params;
  562. struct div_nmp *div_nmp = params->div_nmp;
  563. if ((params->flags & (TEGRA_PLLM | TEGRA_PLLMB)) &&
  564. (pll_override_readl(PMC_PLLP_WB0_OVERRIDE, pll) &
  565. PMC_PLLP_WB0_OVERRIDE_PLLM_OVERRIDE)) {
  566. val = pll_override_readl(params->pmc_divp_reg, pll);
  567. cfg->p = (val >> div_nmp->override_divp_shift) & divp_mask(pll);
  568. val = pll_override_readl(params->pmc_divnm_reg, pll);
  569. cfg->m = (val >> div_nmp->override_divm_shift) & divm_mask(pll);
  570. cfg->n = (val >> div_nmp->override_divn_shift) & divn_mask(pll);
  571. } else {
  572. val = pll_readl_base(pll);
  573. cfg->m = (val >> div_nmp->divm_shift) & divm_mask(pll);
  574. cfg->n = (val >> div_nmp->divn_shift) & divn_mask(pll);
  575. cfg->p = (val >> div_nmp->divp_shift) & divp_mask(pll);
  576. if (pll->params->sdm_din_reg) {
  577. if (sdm_en_mask(pll) & pll_readl_sdm_ctrl(pll)) {
  578. val = pll_readl_sdm_din(pll);
  579. val &= sdm_din_mask(pll);
  580. cfg->sdm_data = sdin_din_to_data(val);
  581. }
  582. }
  583. }
  584. }
  585. static void _update_pll_cpcon(struct tegra_clk_pll *pll,
  586. struct tegra_clk_pll_freq_table *cfg,
  587. unsigned long rate)
  588. {
  589. u32 val;
  590. val = pll_readl_misc(pll);
  591. val &= ~(PLL_MISC_CPCON_MASK << PLL_MISC_CPCON_SHIFT);
  592. val |= cfg->cpcon << PLL_MISC_CPCON_SHIFT;
  593. if (pll->params->flags & TEGRA_PLL_SET_LFCON) {
  594. val &= ~(PLL_MISC_LFCON_MASK << PLL_MISC_LFCON_SHIFT);
  595. if (cfg->n >= PLLDU_LFCON_SET_DIVN)
  596. val |= 1 << PLL_MISC_LFCON_SHIFT;
  597. } else if (pll->params->flags & TEGRA_PLL_SET_DCCON) {
  598. val &= ~(1 << PLL_MISC_DCCON_SHIFT);
  599. if (rate >= (pll->params->vco_max >> 1))
  600. val |= 1 << PLL_MISC_DCCON_SHIFT;
  601. }
  602. pll_writel_misc(val, pll);
  603. }
  604. static void pll_clk_start_ss(struct tegra_clk_pll *pll)
  605. {
  606. if (pll->params->defaults_set && pll->params->ssc_ctrl_reg) {
  607. u32 val = pll_readl(pll->params->ssc_ctrl_reg, pll);
  608. val |= pll->params->ssc_ctrl_en_mask;
  609. pll_writel(val, pll->params->ssc_ctrl_reg, pll);
  610. }
  611. }
  612. static void pll_clk_stop_ss(struct tegra_clk_pll *pll)
  613. {
  614. if (pll->params->defaults_set && pll->params->ssc_ctrl_reg) {
  615. u32 val = pll_readl(pll->params->ssc_ctrl_reg, pll);
  616. val &= ~pll->params->ssc_ctrl_en_mask;
  617. pll_writel(val, pll->params->ssc_ctrl_reg, pll);
  618. }
  619. }
  620. static int _program_pll(struct clk_hw *hw, struct tegra_clk_pll_freq_table *cfg,
  621. unsigned long rate)
  622. {
  623. struct tegra_clk_pll *pll = to_clk_pll(hw);
  624. struct tegra_clk_pll_freq_table old_cfg;
  625. int state, ret = 0;
  626. state = clk_pll_is_enabled(hw);
  627. _get_pll_mnp(pll, &old_cfg);
  628. if (state && pll->params->defaults_set && pll->params->dyn_ramp &&
  629. (cfg->m == old_cfg.m) && (cfg->p == old_cfg.p)) {
  630. ret = pll->params->dyn_ramp(pll, cfg);
  631. if (!ret)
  632. return 0;
  633. }
  634. if (state) {
  635. pll_clk_stop_ss(pll);
  636. _clk_pll_disable(hw);
  637. }
  638. if (!pll->params->defaults_set && pll->params->set_defaults)
  639. pll->params->set_defaults(pll);
  640. _update_pll_mnp(pll, cfg);
  641. if (pll->params->flags & TEGRA_PLL_HAS_CPCON)
  642. _update_pll_cpcon(pll, cfg, rate);
  643. if (state) {
  644. _clk_pll_enable(hw);
  645. ret = clk_pll_wait_for_lock(pll);
  646. pll_clk_start_ss(pll);
  647. }
  648. return ret;
  649. }
  650. static int clk_pll_set_rate(struct clk_hw *hw, unsigned long rate,
  651. unsigned long parent_rate)
  652. {
  653. struct tegra_clk_pll *pll = to_clk_pll(hw);
  654. struct tegra_clk_pll_freq_table cfg, old_cfg;
  655. unsigned long flags = 0;
  656. int ret = 0;
  657. if (pll->params->flags & TEGRA_PLL_FIXED) {
  658. if (rate != pll->params->fixed_rate) {
  659. pr_err("%s: Can not change %s fixed rate %lu to %lu\n",
  660. __func__, clk_hw_get_name(hw),
  661. pll->params->fixed_rate, rate);
  662. return -EINVAL;
  663. }
  664. return 0;
  665. }
  666. if (_get_table_rate(hw, &cfg, rate, parent_rate) &&
  667. pll->params->calc_rate(hw, &cfg, rate, parent_rate)) {
  668. pr_err("%s: Failed to set %s rate %lu\n", __func__,
  669. clk_hw_get_name(hw), rate);
  670. WARN_ON(1);
  671. return -EINVAL;
  672. }
  673. if (pll->lock)
  674. spin_lock_irqsave(pll->lock, flags);
  675. _get_pll_mnp(pll, &old_cfg);
  676. if (pll->params->flags & TEGRA_PLL_VCO_OUT)
  677. cfg.p = old_cfg.p;
  678. if (old_cfg.m != cfg.m || old_cfg.n != cfg.n || old_cfg.p != cfg.p ||
  679. old_cfg.sdm_data != cfg.sdm_data)
  680. ret = _program_pll(hw, &cfg, rate);
  681. if (pll->lock)
  682. spin_unlock_irqrestore(pll->lock, flags);
  683. return ret;
  684. }
  685. static long clk_pll_round_rate(struct clk_hw *hw, unsigned long rate,
  686. unsigned long *prate)
  687. {
  688. struct tegra_clk_pll *pll = to_clk_pll(hw);
  689. struct tegra_clk_pll_freq_table cfg;
  690. if (pll->params->flags & TEGRA_PLL_FIXED) {
  691. /* PLLM/MB are used for memory; we do not change rate */
  692. if (pll->params->flags & (TEGRA_PLLM | TEGRA_PLLMB))
  693. return clk_hw_get_rate(hw);
  694. return pll->params->fixed_rate;
  695. }
  696. if (_get_table_rate(hw, &cfg, rate, *prate) &&
  697. pll->params->calc_rate(hw, &cfg, rate, *prate))
  698. return -EINVAL;
  699. return cfg.output_rate;
  700. }
  701. static unsigned long clk_pll_recalc_rate(struct clk_hw *hw,
  702. unsigned long parent_rate)
  703. {
  704. struct tegra_clk_pll *pll = to_clk_pll(hw);
  705. struct tegra_clk_pll_freq_table cfg;
  706. u32 val;
  707. u64 rate = parent_rate;
  708. int pdiv;
  709. val = pll_readl_base(pll);
  710. if ((pll->params->flags & TEGRA_PLL_BYPASS) && (val & PLL_BASE_BYPASS))
  711. return parent_rate;
  712. if ((pll->params->flags & TEGRA_PLL_FIXED) &&
  713. !(pll->params->flags & (TEGRA_PLLM | TEGRA_PLLMB)) &&
  714. !(val & PLL_BASE_OVERRIDE)) {
  715. struct tegra_clk_pll_freq_table sel;
  716. if (_get_table_rate(hw, &sel, pll->params->fixed_rate,
  717. parent_rate)) {
  718. pr_err("Clock %s has unknown fixed frequency\n",
  719. clk_hw_get_name(hw));
  720. BUG();
  721. }
  722. return pll->params->fixed_rate;
  723. }
  724. _get_pll_mnp(pll, &cfg);
  725. if (pll->params->flags & TEGRA_PLL_VCO_OUT) {
  726. pdiv = 1;
  727. } else {
  728. pdiv = _hw_to_p_div(hw, cfg.p);
  729. if (pdiv < 0) {
  730. WARN(1, "Clock %s has invalid pdiv value : 0x%x\n",
  731. clk_hw_get_name(hw), cfg.p);
  732. pdiv = 1;
  733. }
  734. }
  735. if (pll->params->set_gain)
  736. pll->params->set_gain(&cfg);
  737. cfg.m *= pdiv;
  738. rate *= cfg.n;
  739. do_div(rate, cfg.m);
  740. return rate;
  741. }
  742. static int clk_plle_training(struct tegra_clk_pll *pll)
  743. {
  744. u32 val;
  745. unsigned long timeout;
  746. if (!pll->pmc)
  747. return -ENOSYS;
  748. /*
  749. * PLLE is already disabled, and setup cleared;
  750. * create falling edge on PLLE IDDQ input.
  751. */
  752. val = readl(pll->pmc + PMC_SATA_PWRGT);
  753. val |= PMC_SATA_PWRGT_PLLE_IDDQ_VALUE;
  754. writel(val, pll->pmc + PMC_SATA_PWRGT);
  755. val = readl(pll->pmc + PMC_SATA_PWRGT);
  756. val |= PMC_SATA_PWRGT_PLLE_IDDQ_SWCTL;
  757. writel(val, pll->pmc + PMC_SATA_PWRGT);
  758. val = readl(pll->pmc + PMC_SATA_PWRGT);
  759. val &= ~PMC_SATA_PWRGT_PLLE_IDDQ_VALUE;
  760. writel(val, pll->pmc + PMC_SATA_PWRGT);
  761. val = pll_readl_misc(pll);
  762. timeout = jiffies + msecs_to_jiffies(100);
  763. while (1) {
  764. val = pll_readl_misc(pll);
  765. if (val & PLLE_MISC_READY)
  766. break;
  767. if (time_after(jiffies, timeout)) {
  768. pr_err("%s: timeout waiting for PLLE\n", __func__);
  769. return -EBUSY;
  770. }
  771. udelay(300);
  772. }
  773. return 0;
  774. }
  775. static int clk_plle_enable(struct clk_hw *hw)
  776. {
  777. struct tegra_clk_pll *pll = to_clk_pll(hw);
  778. unsigned long input_rate = clk_hw_get_rate(clk_hw_get_parent(hw));
  779. struct tegra_clk_pll_freq_table sel;
  780. u32 val;
  781. int err;
  782. if (_get_table_rate(hw, &sel, pll->params->fixed_rate, input_rate))
  783. return -EINVAL;
  784. clk_pll_disable(hw);
  785. val = pll_readl_misc(pll);
  786. val &= ~(PLLE_MISC_LOCK_ENABLE | PLLE_MISC_SETUP_MASK);
  787. pll_writel_misc(val, pll);
  788. val = pll_readl_misc(pll);
  789. if (!(val & PLLE_MISC_READY)) {
  790. err = clk_plle_training(pll);
  791. if (err)
  792. return err;
  793. }
  794. if (pll->params->flags & TEGRA_PLLE_CONFIGURE) {
  795. /* configure dividers */
  796. val = pll_readl_base(pll);
  797. val &= ~(divp_mask_shifted(pll) | divn_mask_shifted(pll) |
  798. divm_mask_shifted(pll));
  799. val &= ~(PLLE_BASE_DIVCML_MASK << PLLE_BASE_DIVCML_SHIFT);
  800. val |= sel.m << divm_shift(pll);
  801. val |= sel.n << divn_shift(pll);
  802. val |= sel.p << divp_shift(pll);
  803. val |= sel.cpcon << PLLE_BASE_DIVCML_SHIFT;
  804. pll_writel_base(val, pll);
  805. }
  806. val = pll_readl_misc(pll);
  807. val |= PLLE_MISC_SETUP_VALUE;
  808. val |= PLLE_MISC_LOCK_ENABLE;
  809. pll_writel_misc(val, pll);
  810. val = readl(pll->clk_base + PLLE_SS_CTRL);
  811. val &= ~PLLE_SS_COEFFICIENTS_MASK;
  812. val |= PLLE_SS_DISABLE;
  813. writel(val, pll->clk_base + PLLE_SS_CTRL);
  814. val = pll_readl_base(pll);
  815. val |= (PLL_BASE_BYPASS | PLL_BASE_ENABLE);
  816. pll_writel_base(val, pll);
  817. clk_pll_wait_for_lock(pll);
  818. return 0;
  819. }
  820. static unsigned long clk_plle_recalc_rate(struct clk_hw *hw,
  821. unsigned long parent_rate)
  822. {
  823. struct tegra_clk_pll *pll = to_clk_pll(hw);
  824. u32 val = pll_readl_base(pll);
  825. u32 divn = 0, divm = 0, divp = 0;
  826. u64 rate = parent_rate;
  827. divp = (val >> pll->params->div_nmp->divp_shift) & (divp_mask(pll));
  828. divn = (val >> pll->params->div_nmp->divn_shift) & (divn_mask(pll));
  829. divm = (val >> pll->params->div_nmp->divm_shift) & (divm_mask(pll));
  830. divm *= divp;
  831. rate *= divn;
  832. do_div(rate, divm);
  833. return rate;
  834. }
  835. const struct clk_ops tegra_clk_pll_ops = {
  836. .is_enabled = clk_pll_is_enabled,
  837. .enable = clk_pll_enable,
  838. .disable = clk_pll_disable,
  839. .recalc_rate = clk_pll_recalc_rate,
  840. .round_rate = clk_pll_round_rate,
  841. .set_rate = clk_pll_set_rate,
  842. };
  843. const struct clk_ops tegra_clk_plle_ops = {
  844. .recalc_rate = clk_plle_recalc_rate,
  845. .is_enabled = clk_pll_is_enabled,
  846. .disable = clk_pll_disable,
  847. .enable = clk_plle_enable,
  848. };
  849. /*
  850. * Structure defining the fields for USB UTMI clocks Parameters.
  851. */
  852. struct utmi_clk_param {
  853. /* Oscillator Frequency in Hz */
  854. u32 osc_frequency;
  855. /* UTMIP PLL Enable Delay Count */
  856. u8 enable_delay_count;
  857. /* UTMIP PLL Stable count */
  858. u8 stable_count;
  859. /* UTMIP PLL Active delay count */
  860. u8 active_delay_count;
  861. /* UTMIP PLL Xtal frequency count */
  862. u8 xtal_freq_count;
  863. };
  864. static const struct utmi_clk_param utmi_parameters[] = {
  865. {
  866. .osc_frequency = 13000000, .enable_delay_count = 0x02,
  867. .stable_count = 0x33, .active_delay_count = 0x05,
  868. .xtal_freq_count = 0x7f
  869. }, {
  870. .osc_frequency = 19200000, .enable_delay_count = 0x03,
  871. .stable_count = 0x4b, .active_delay_count = 0x06,
  872. .xtal_freq_count = 0xbb
  873. }, {
  874. .osc_frequency = 12000000, .enable_delay_count = 0x02,
  875. .stable_count = 0x2f, .active_delay_count = 0x04,
  876. .xtal_freq_count = 0x76
  877. }, {
  878. .osc_frequency = 26000000, .enable_delay_count = 0x04,
  879. .stable_count = 0x66, .active_delay_count = 0x09,
  880. .xtal_freq_count = 0xfe
  881. }, {
  882. .osc_frequency = 16800000, .enable_delay_count = 0x03,
  883. .stable_count = 0x41, .active_delay_count = 0x0a,
  884. .xtal_freq_count = 0xa4
  885. }, {
  886. .osc_frequency = 38400000, .enable_delay_count = 0x0,
  887. .stable_count = 0x0, .active_delay_count = 0x6,
  888. .xtal_freq_count = 0x80
  889. },
  890. };
  891. static int clk_pllu_enable(struct clk_hw *hw)
  892. {
  893. struct tegra_clk_pll *pll = to_clk_pll(hw);
  894. struct clk_hw *pll_ref = clk_hw_get_parent(hw);
  895. struct clk_hw *osc = clk_hw_get_parent(pll_ref);
  896. const struct utmi_clk_param *params = NULL;
  897. unsigned long flags = 0, input_rate;
  898. unsigned int i;
  899. int ret = 0;
  900. u32 value;
  901. if (!osc) {
  902. pr_err("%s: failed to get OSC clock\n", __func__);
  903. return -EINVAL;
  904. }
  905. input_rate = clk_hw_get_rate(osc);
  906. if (pll->lock)
  907. spin_lock_irqsave(pll->lock, flags);
  908. _clk_pll_enable(hw);
  909. ret = clk_pll_wait_for_lock(pll);
  910. if (ret < 0)
  911. goto out;
  912. for (i = 0; i < ARRAY_SIZE(utmi_parameters); i++) {
  913. if (input_rate == utmi_parameters[i].osc_frequency) {
  914. params = &utmi_parameters[i];
  915. break;
  916. }
  917. }
  918. if (!params) {
  919. pr_err("%s: unexpected input rate %lu Hz\n", __func__,
  920. input_rate);
  921. ret = -EINVAL;
  922. goto out;
  923. }
  924. value = pll_readl_base(pll);
  925. value &= ~PLLU_BASE_OVERRIDE;
  926. pll_writel_base(value, pll);
  927. value = readl_relaxed(pll->clk_base + UTMIP_PLL_CFG2);
  928. /* Program UTMIP PLL stable and active counts */
  929. value &= ~UTMIP_PLL_CFG2_STABLE_COUNT(~0);
  930. value |= UTMIP_PLL_CFG2_STABLE_COUNT(params->stable_count);
  931. value &= ~UTMIP_PLL_CFG2_ACTIVE_DLY_COUNT(~0);
  932. value |= UTMIP_PLL_CFG2_ACTIVE_DLY_COUNT(params->active_delay_count);
  933. /* Remove power downs from UTMIP PLL control bits */
  934. value &= ~UTMIP_PLL_CFG2_FORCE_PD_SAMP_A_POWERDOWN;
  935. value &= ~UTMIP_PLL_CFG2_FORCE_PD_SAMP_B_POWERDOWN;
  936. value &= ~UTMIP_PLL_CFG2_FORCE_PD_SAMP_C_POWERDOWN;
  937. writel_relaxed(value, pll->clk_base + UTMIP_PLL_CFG2);
  938. value = readl_relaxed(pll->clk_base + UTMIP_PLL_CFG1);
  939. /* Program UTMIP PLL delay and oscillator frequency counts */
  940. value &= ~UTMIP_PLL_CFG1_ENABLE_DLY_COUNT(~0);
  941. value |= UTMIP_PLL_CFG1_ENABLE_DLY_COUNT(params->enable_delay_count);
  942. value &= ~UTMIP_PLL_CFG1_XTAL_FREQ_COUNT(~0);
  943. value |= UTMIP_PLL_CFG1_XTAL_FREQ_COUNT(params->xtal_freq_count);
  944. /* Remove power downs from UTMIP PLL control bits */
  945. value &= ~UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERDOWN;
  946. value &= ~UTMIP_PLL_CFG1_FORCE_PLL_ACTIVE_POWERDOWN;
  947. value &= ~UTMIP_PLL_CFG1_FORCE_PLLU_POWERDOWN;
  948. writel_relaxed(value, pll->clk_base + UTMIP_PLL_CFG1);
  949. out:
  950. if (pll->lock)
  951. spin_unlock_irqrestore(pll->lock, flags);
  952. return ret;
  953. }
  954. static const struct clk_ops tegra_clk_pllu_ops = {
  955. .is_enabled = clk_pll_is_enabled,
  956. .enable = clk_pllu_enable,
  957. .disable = clk_pll_disable,
  958. .recalc_rate = clk_pll_recalc_rate,
  959. };
  960. static int _pll_fixed_mdiv(struct tegra_clk_pll_params *pll_params,
  961. unsigned long parent_rate)
  962. {
  963. u16 mdiv = parent_rate / pll_params->cf_min;
  964. if (pll_params->flags & TEGRA_MDIV_NEW)
  965. return (!pll_params->mdiv_default ? mdiv :
  966. min(mdiv, pll_params->mdiv_default));
  967. if (pll_params->mdiv_default)
  968. return pll_params->mdiv_default;
  969. if (parent_rate > pll_params->cf_max)
  970. return 2;
  971. else
  972. return 1;
  973. }
  974. static int _calc_dynamic_ramp_rate(struct clk_hw *hw,
  975. struct tegra_clk_pll_freq_table *cfg,
  976. unsigned long rate, unsigned long parent_rate)
  977. {
  978. struct tegra_clk_pll *pll = to_clk_pll(hw);
  979. unsigned int p;
  980. int p_div;
  981. if (!rate)
  982. return -EINVAL;
  983. p = DIV_ROUND_UP(pll->params->vco_min, rate);
  984. cfg->m = _pll_fixed_mdiv(pll->params, parent_rate);
  985. cfg->output_rate = rate * p;
  986. cfg->n = cfg->output_rate * cfg->m / parent_rate;
  987. cfg->input_rate = parent_rate;
  988. p_div = _p_div_to_hw(hw, p);
  989. if (p_div < 0)
  990. return p_div;
  991. cfg->p = p_div;
  992. if (cfg->n > divn_max(pll) || cfg->output_rate > pll->params->vco_max)
  993. return -EINVAL;
  994. return 0;
  995. }
  996. #if defined(CONFIG_ARCH_TEGRA_114_SOC) || \
  997. defined(CONFIG_ARCH_TEGRA_124_SOC) || \
  998. defined(CONFIG_ARCH_TEGRA_132_SOC) || \
  999. defined(CONFIG_ARCH_TEGRA_210_SOC)
  1000. u16 tegra_pll_get_fixed_mdiv(struct clk_hw *hw, unsigned long input_rate)
  1001. {
  1002. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1003. return (u16)_pll_fixed_mdiv(pll->params, input_rate);
  1004. }
  1005. static unsigned long _clip_vco_min(unsigned long vco_min,
  1006. unsigned long parent_rate)
  1007. {
  1008. return DIV_ROUND_UP(vco_min, parent_rate) * parent_rate;
  1009. }
  1010. static int _setup_dynamic_ramp(struct tegra_clk_pll_params *pll_params,
  1011. void __iomem *clk_base,
  1012. unsigned long parent_rate)
  1013. {
  1014. u32 val;
  1015. u32 step_a, step_b;
  1016. switch (parent_rate) {
  1017. case 12000000:
  1018. case 13000000:
  1019. case 26000000:
  1020. step_a = 0x2B;
  1021. step_b = 0x0B;
  1022. break;
  1023. case 16800000:
  1024. step_a = 0x1A;
  1025. step_b = 0x09;
  1026. break;
  1027. case 19200000:
  1028. step_a = 0x12;
  1029. step_b = 0x08;
  1030. break;
  1031. default:
  1032. pr_err("%s: Unexpected reference rate %lu\n",
  1033. __func__, parent_rate);
  1034. WARN_ON(1);
  1035. return -EINVAL;
  1036. }
  1037. val = step_a << pll_params->stepa_shift;
  1038. val |= step_b << pll_params->stepb_shift;
  1039. writel_relaxed(val, clk_base + pll_params->dyn_ramp_reg);
  1040. return 0;
  1041. }
  1042. static int _pll_ramp_calc_pll(struct clk_hw *hw,
  1043. struct tegra_clk_pll_freq_table *cfg,
  1044. unsigned long rate, unsigned long parent_rate)
  1045. {
  1046. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1047. int err = 0;
  1048. err = _get_table_rate(hw, cfg, rate, parent_rate);
  1049. if (err < 0)
  1050. err = _calc_dynamic_ramp_rate(hw, cfg, rate, parent_rate);
  1051. else {
  1052. if (cfg->m != _pll_fixed_mdiv(pll->params, parent_rate)) {
  1053. WARN_ON(1);
  1054. err = -EINVAL;
  1055. goto out;
  1056. }
  1057. }
  1058. if (cfg->p > pll->params->max_p)
  1059. err = -EINVAL;
  1060. out:
  1061. return err;
  1062. }
  1063. static int clk_pllxc_set_rate(struct clk_hw *hw, unsigned long rate,
  1064. unsigned long parent_rate)
  1065. {
  1066. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1067. struct tegra_clk_pll_freq_table cfg, old_cfg;
  1068. unsigned long flags = 0;
  1069. int ret;
  1070. ret = _pll_ramp_calc_pll(hw, &cfg, rate, parent_rate);
  1071. if (ret < 0)
  1072. return ret;
  1073. if (pll->lock)
  1074. spin_lock_irqsave(pll->lock, flags);
  1075. _get_pll_mnp(pll, &old_cfg);
  1076. if (pll->params->flags & TEGRA_PLL_VCO_OUT)
  1077. cfg.p = old_cfg.p;
  1078. if (old_cfg.m != cfg.m || old_cfg.n != cfg.n || old_cfg.p != cfg.p)
  1079. ret = _program_pll(hw, &cfg, rate);
  1080. if (pll->lock)
  1081. spin_unlock_irqrestore(pll->lock, flags);
  1082. return ret;
  1083. }
  1084. static long clk_pll_ramp_round_rate(struct clk_hw *hw, unsigned long rate,
  1085. unsigned long *prate)
  1086. {
  1087. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1088. struct tegra_clk_pll_freq_table cfg;
  1089. int ret, p_div;
  1090. u64 output_rate = *prate;
  1091. ret = _pll_ramp_calc_pll(hw, &cfg, rate, *prate);
  1092. if (ret < 0)
  1093. return ret;
  1094. p_div = _hw_to_p_div(hw, cfg.p);
  1095. if (p_div < 0)
  1096. return p_div;
  1097. if (pll->params->set_gain)
  1098. pll->params->set_gain(&cfg);
  1099. output_rate *= cfg.n;
  1100. do_div(output_rate, cfg.m * p_div);
  1101. return output_rate;
  1102. }
  1103. static void _pllcx_strobe(struct tegra_clk_pll *pll)
  1104. {
  1105. u32 val;
  1106. val = pll_readl_misc(pll);
  1107. val |= PLLCX_MISC_STROBE;
  1108. pll_writel_misc(val, pll);
  1109. udelay(2);
  1110. val &= ~PLLCX_MISC_STROBE;
  1111. pll_writel_misc(val, pll);
  1112. }
  1113. static int clk_pllc_enable(struct clk_hw *hw)
  1114. {
  1115. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1116. u32 val;
  1117. int ret;
  1118. unsigned long flags = 0;
  1119. if (pll->lock)
  1120. spin_lock_irqsave(pll->lock, flags);
  1121. _clk_pll_enable(hw);
  1122. udelay(2);
  1123. val = pll_readl_misc(pll);
  1124. val &= ~PLLCX_MISC_RESET;
  1125. pll_writel_misc(val, pll);
  1126. udelay(2);
  1127. _pllcx_strobe(pll);
  1128. ret = clk_pll_wait_for_lock(pll);
  1129. if (pll->lock)
  1130. spin_unlock_irqrestore(pll->lock, flags);
  1131. return ret;
  1132. }
  1133. static void _clk_pllc_disable(struct clk_hw *hw)
  1134. {
  1135. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1136. u32 val;
  1137. _clk_pll_disable(hw);
  1138. val = pll_readl_misc(pll);
  1139. val |= PLLCX_MISC_RESET;
  1140. pll_writel_misc(val, pll);
  1141. udelay(2);
  1142. }
  1143. static void clk_pllc_disable(struct clk_hw *hw)
  1144. {
  1145. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1146. unsigned long flags = 0;
  1147. if (pll->lock)
  1148. spin_lock_irqsave(pll->lock, flags);
  1149. _clk_pllc_disable(hw);
  1150. if (pll->lock)
  1151. spin_unlock_irqrestore(pll->lock, flags);
  1152. }
  1153. static int _pllcx_update_dynamic_coef(struct tegra_clk_pll *pll,
  1154. unsigned long input_rate, u32 n)
  1155. {
  1156. u32 val, n_threshold;
  1157. switch (input_rate) {
  1158. case 12000000:
  1159. n_threshold = 70;
  1160. break;
  1161. case 13000000:
  1162. case 26000000:
  1163. n_threshold = 71;
  1164. break;
  1165. case 16800000:
  1166. n_threshold = 55;
  1167. break;
  1168. case 19200000:
  1169. n_threshold = 48;
  1170. break;
  1171. default:
  1172. pr_err("%s: Unexpected reference rate %lu\n",
  1173. __func__, input_rate);
  1174. return -EINVAL;
  1175. }
  1176. val = pll_readl_misc(pll);
  1177. val &= ~(PLLCX_MISC_SDM_DIV_MASK | PLLCX_MISC_FILT_DIV_MASK);
  1178. val |= n <= n_threshold ?
  1179. PLLCX_MISC_DIV_LOW_RANGE : PLLCX_MISC_DIV_HIGH_RANGE;
  1180. pll_writel_misc(val, pll);
  1181. return 0;
  1182. }
  1183. static int clk_pllc_set_rate(struct clk_hw *hw, unsigned long rate,
  1184. unsigned long parent_rate)
  1185. {
  1186. struct tegra_clk_pll_freq_table cfg, old_cfg;
  1187. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1188. unsigned long flags = 0;
  1189. int state, ret = 0;
  1190. if (pll->lock)
  1191. spin_lock_irqsave(pll->lock, flags);
  1192. ret = _pll_ramp_calc_pll(hw, &cfg, rate, parent_rate);
  1193. if (ret < 0)
  1194. goto out;
  1195. _get_pll_mnp(pll, &old_cfg);
  1196. if (cfg.m != old_cfg.m) {
  1197. WARN_ON(1);
  1198. goto out;
  1199. }
  1200. if (old_cfg.n == cfg.n && old_cfg.p == cfg.p)
  1201. goto out;
  1202. state = clk_pll_is_enabled(hw);
  1203. if (state)
  1204. _clk_pllc_disable(hw);
  1205. ret = _pllcx_update_dynamic_coef(pll, parent_rate, cfg.n);
  1206. if (ret < 0)
  1207. goto out;
  1208. _update_pll_mnp(pll, &cfg);
  1209. if (state)
  1210. ret = clk_pllc_enable(hw);
  1211. out:
  1212. if (pll->lock)
  1213. spin_unlock_irqrestore(pll->lock, flags);
  1214. return ret;
  1215. }
  1216. static long _pllre_calc_rate(struct tegra_clk_pll *pll,
  1217. struct tegra_clk_pll_freq_table *cfg,
  1218. unsigned long rate, unsigned long parent_rate)
  1219. {
  1220. u16 m, n;
  1221. u64 output_rate = parent_rate;
  1222. m = _pll_fixed_mdiv(pll->params, parent_rate);
  1223. n = rate * m / parent_rate;
  1224. output_rate *= n;
  1225. do_div(output_rate, m);
  1226. if (cfg) {
  1227. cfg->m = m;
  1228. cfg->n = n;
  1229. }
  1230. return output_rate;
  1231. }
  1232. static int clk_pllre_set_rate(struct clk_hw *hw, unsigned long rate,
  1233. unsigned long parent_rate)
  1234. {
  1235. struct tegra_clk_pll_freq_table cfg, old_cfg;
  1236. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1237. unsigned long flags = 0;
  1238. int state, ret = 0;
  1239. if (pll->lock)
  1240. spin_lock_irqsave(pll->lock, flags);
  1241. _pllre_calc_rate(pll, &cfg, rate, parent_rate);
  1242. _get_pll_mnp(pll, &old_cfg);
  1243. cfg.p = old_cfg.p;
  1244. if (cfg.m != old_cfg.m || cfg.n != old_cfg.n) {
  1245. state = clk_pll_is_enabled(hw);
  1246. if (state)
  1247. _clk_pll_disable(hw);
  1248. _update_pll_mnp(pll, &cfg);
  1249. if (state) {
  1250. _clk_pll_enable(hw);
  1251. ret = clk_pll_wait_for_lock(pll);
  1252. }
  1253. }
  1254. if (pll->lock)
  1255. spin_unlock_irqrestore(pll->lock, flags);
  1256. return ret;
  1257. }
  1258. static unsigned long clk_pllre_recalc_rate(struct clk_hw *hw,
  1259. unsigned long parent_rate)
  1260. {
  1261. struct tegra_clk_pll_freq_table cfg;
  1262. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1263. u64 rate = parent_rate;
  1264. _get_pll_mnp(pll, &cfg);
  1265. rate *= cfg.n;
  1266. do_div(rate, cfg.m);
  1267. return rate;
  1268. }
  1269. static long clk_pllre_round_rate(struct clk_hw *hw, unsigned long rate,
  1270. unsigned long *prate)
  1271. {
  1272. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1273. return _pllre_calc_rate(pll, NULL, rate, *prate);
  1274. }
  1275. static int clk_plle_tegra114_enable(struct clk_hw *hw)
  1276. {
  1277. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1278. struct tegra_clk_pll_freq_table sel;
  1279. u32 val;
  1280. int ret;
  1281. unsigned long flags = 0;
  1282. unsigned long input_rate = clk_hw_get_rate(clk_hw_get_parent(hw));
  1283. if (_get_table_rate(hw, &sel, pll->params->fixed_rate, input_rate))
  1284. return -EINVAL;
  1285. if (pll->lock)
  1286. spin_lock_irqsave(pll->lock, flags);
  1287. val = pll_readl_base(pll);
  1288. val &= ~BIT(29); /* Disable lock override */
  1289. pll_writel_base(val, pll);
  1290. val = pll_readl(pll->params->aux_reg, pll);
  1291. val |= PLLE_AUX_ENABLE_SWCTL;
  1292. val &= ~PLLE_AUX_SEQ_ENABLE;
  1293. pll_writel(val, pll->params->aux_reg, pll);
  1294. udelay(1);
  1295. val = pll_readl_misc(pll);
  1296. val |= PLLE_MISC_LOCK_ENABLE;
  1297. val |= PLLE_MISC_IDDQ_SW_CTRL;
  1298. val &= ~PLLE_MISC_IDDQ_SW_VALUE;
  1299. val |= PLLE_MISC_PLLE_PTS;
  1300. val &= ~(PLLE_MISC_VREG_BG_CTRL_MASK | PLLE_MISC_VREG_CTRL_MASK);
  1301. pll_writel_misc(val, pll);
  1302. udelay(5);
  1303. val = pll_readl(PLLE_SS_CTRL, pll);
  1304. val |= PLLE_SS_DISABLE;
  1305. pll_writel(val, PLLE_SS_CTRL, pll);
  1306. val = pll_readl_base(pll);
  1307. val &= ~(divp_mask_shifted(pll) | divn_mask_shifted(pll) |
  1308. divm_mask_shifted(pll));
  1309. val &= ~(PLLE_BASE_DIVCML_MASK << PLLE_BASE_DIVCML_SHIFT);
  1310. val |= sel.m << divm_shift(pll);
  1311. val |= sel.n << divn_shift(pll);
  1312. val |= sel.cpcon << PLLE_BASE_DIVCML_SHIFT;
  1313. pll_writel_base(val, pll);
  1314. udelay(1);
  1315. _clk_pll_enable(hw);
  1316. ret = clk_pll_wait_for_lock(pll);
  1317. if (ret < 0)
  1318. goto out;
  1319. val = pll_readl(PLLE_SS_CTRL, pll);
  1320. val &= ~(PLLE_SS_CNTL_CENTER | PLLE_SS_CNTL_INVERT);
  1321. val &= ~PLLE_SS_COEFFICIENTS_MASK;
  1322. val |= PLLE_SS_COEFFICIENTS_VAL_TEGRA114;
  1323. pll_writel(val, PLLE_SS_CTRL, pll);
  1324. val &= ~(PLLE_SS_CNTL_SSC_BYP | PLLE_SS_CNTL_BYPASS_SS);
  1325. pll_writel(val, PLLE_SS_CTRL, pll);
  1326. udelay(1);
  1327. val &= ~PLLE_SS_CNTL_INTERP_RESET;
  1328. pll_writel(val, PLLE_SS_CTRL, pll);
  1329. udelay(1);
  1330. /* Enable hw control of xusb brick pll */
  1331. val = pll_readl_misc(pll);
  1332. val &= ~PLLE_MISC_IDDQ_SW_CTRL;
  1333. pll_writel_misc(val, pll);
  1334. val = pll_readl(pll->params->aux_reg, pll);
  1335. val |= (PLLE_AUX_USE_LOCKDET | PLLE_AUX_SEQ_START_STATE);
  1336. val &= ~(PLLE_AUX_ENABLE_SWCTL | PLLE_AUX_SS_SWCTL);
  1337. pll_writel(val, pll->params->aux_reg, pll);
  1338. udelay(1);
  1339. val |= PLLE_AUX_SEQ_ENABLE;
  1340. pll_writel(val, pll->params->aux_reg, pll);
  1341. val = pll_readl(XUSBIO_PLL_CFG0, pll);
  1342. val |= (XUSBIO_PLL_CFG0_PADPLL_USE_LOCKDET |
  1343. XUSBIO_PLL_CFG0_SEQ_START_STATE);
  1344. val &= ~(XUSBIO_PLL_CFG0_CLK_ENABLE_SWCTL |
  1345. XUSBIO_PLL_CFG0_PADPLL_RESET_SWCTL);
  1346. pll_writel(val, XUSBIO_PLL_CFG0, pll);
  1347. udelay(1);
  1348. val |= XUSBIO_PLL_CFG0_SEQ_ENABLE;
  1349. pll_writel(val, XUSBIO_PLL_CFG0, pll);
  1350. /* Enable hw control of SATA pll */
  1351. val = pll_readl(SATA_PLL_CFG0, pll);
  1352. val &= ~SATA_PLL_CFG0_PADPLL_RESET_SWCTL;
  1353. val |= SATA_PLL_CFG0_PADPLL_USE_LOCKDET;
  1354. val |= SATA_PLL_CFG0_SEQ_START_STATE;
  1355. pll_writel(val, SATA_PLL_CFG0, pll);
  1356. udelay(1);
  1357. val = pll_readl(SATA_PLL_CFG0, pll);
  1358. val |= SATA_PLL_CFG0_SEQ_ENABLE;
  1359. pll_writel(val, SATA_PLL_CFG0, pll);
  1360. out:
  1361. if (pll->lock)
  1362. spin_unlock_irqrestore(pll->lock, flags);
  1363. return ret;
  1364. }
  1365. static void clk_plle_tegra114_disable(struct clk_hw *hw)
  1366. {
  1367. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1368. unsigned long flags = 0;
  1369. u32 val;
  1370. if (pll->lock)
  1371. spin_lock_irqsave(pll->lock, flags);
  1372. _clk_pll_disable(hw);
  1373. val = pll_readl_misc(pll);
  1374. val |= PLLE_MISC_IDDQ_SW_CTRL | PLLE_MISC_IDDQ_SW_VALUE;
  1375. pll_writel_misc(val, pll);
  1376. udelay(1);
  1377. if (pll->lock)
  1378. spin_unlock_irqrestore(pll->lock, flags);
  1379. }
  1380. static int clk_pllu_tegra114_enable(struct clk_hw *hw)
  1381. {
  1382. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1383. const struct utmi_clk_param *params = NULL;
  1384. struct clk *osc = __clk_lookup("osc");
  1385. unsigned long flags = 0, input_rate;
  1386. unsigned int i;
  1387. int ret = 0;
  1388. u32 value;
  1389. if (!osc) {
  1390. pr_err("%s: failed to get OSC clock\n", __func__);
  1391. return -EINVAL;
  1392. }
  1393. input_rate = clk_hw_get_rate(__clk_get_hw(osc));
  1394. if (pll->lock)
  1395. spin_lock_irqsave(pll->lock, flags);
  1396. _clk_pll_enable(hw);
  1397. ret = clk_pll_wait_for_lock(pll);
  1398. if (ret < 0)
  1399. goto out;
  1400. for (i = 0; i < ARRAY_SIZE(utmi_parameters); i++) {
  1401. if (input_rate == utmi_parameters[i].osc_frequency) {
  1402. params = &utmi_parameters[i];
  1403. break;
  1404. }
  1405. }
  1406. if (!params) {
  1407. pr_err("%s: unexpected input rate %lu Hz\n", __func__,
  1408. input_rate);
  1409. ret = -EINVAL;
  1410. goto out;
  1411. }
  1412. value = pll_readl_base(pll);
  1413. value &= ~PLLU_BASE_OVERRIDE;
  1414. pll_writel_base(value, pll);
  1415. value = readl_relaxed(pll->clk_base + UTMIP_PLL_CFG2);
  1416. /* Program UTMIP PLL stable and active counts */
  1417. value &= ~UTMIP_PLL_CFG2_STABLE_COUNT(~0);
  1418. value |= UTMIP_PLL_CFG2_STABLE_COUNT(params->stable_count);
  1419. value &= ~UTMIP_PLL_CFG2_ACTIVE_DLY_COUNT(~0);
  1420. value |= UTMIP_PLL_CFG2_ACTIVE_DLY_COUNT(params->active_delay_count);
  1421. /* Remove power downs from UTMIP PLL control bits */
  1422. value &= ~UTMIP_PLL_CFG2_FORCE_PD_SAMP_A_POWERDOWN;
  1423. value &= ~UTMIP_PLL_CFG2_FORCE_PD_SAMP_B_POWERDOWN;
  1424. value &= ~UTMIP_PLL_CFG2_FORCE_PD_SAMP_C_POWERDOWN;
  1425. writel_relaxed(value, pll->clk_base + UTMIP_PLL_CFG2);
  1426. value = readl_relaxed(pll->clk_base + UTMIP_PLL_CFG1);
  1427. /* Program UTMIP PLL delay and oscillator frequency counts */
  1428. value &= ~UTMIP_PLL_CFG1_ENABLE_DLY_COUNT(~0);
  1429. value |= UTMIP_PLL_CFG1_ENABLE_DLY_COUNT(params->enable_delay_count);
  1430. value &= ~UTMIP_PLL_CFG1_XTAL_FREQ_COUNT(~0);
  1431. value |= UTMIP_PLL_CFG1_XTAL_FREQ_COUNT(params->xtal_freq_count);
  1432. /* Remove power downs from UTMIP PLL control bits */
  1433. value &= ~UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERDOWN;
  1434. value &= ~UTMIP_PLL_CFG1_FORCE_PLL_ACTIVE_POWERDOWN;
  1435. value &= ~UTMIP_PLL_CFG1_FORCE_PLLU_POWERUP;
  1436. value &= ~UTMIP_PLL_CFG1_FORCE_PLLU_POWERDOWN;
  1437. writel_relaxed(value, pll->clk_base + UTMIP_PLL_CFG1);
  1438. /* Setup HW control of UTMIPLL */
  1439. value = readl_relaxed(pll->clk_base + UTMIPLL_HW_PWRDN_CFG0);
  1440. value |= UTMIPLL_HW_PWRDN_CFG0_USE_LOCKDET;
  1441. value &= ~UTMIPLL_HW_PWRDN_CFG0_CLK_ENABLE_SWCTL;
  1442. value |= UTMIPLL_HW_PWRDN_CFG0_SEQ_START_STATE;
  1443. writel_relaxed(value, pll->clk_base + UTMIPLL_HW_PWRDN_CFG0);
  1444. value = readl_relaxed(pll->clk_base + UTMIP_PLL_CFG1);
  1445. value &= ~UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERUP;
  1446. value &= ~UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERDOWN;
  1447. writel_relaxed(value, pll->clk_base + UTMIP_PLL_CFG1);
  1448. udelay(1);
  1449. /*
  1450. * Setup SW override of UTMIPLL assuming USB2.0 ports are assigned
  1451. * to USB2
  1452. */
  1453. value = readl_relaxed(pll->clk_base + UTMIPLL_HW_PWRDN_CFG0);
  1454. value |= UTMIPLL_HW_PWRDN_CFG0_IDDQ_SWCTL;
  1455. value &= ~UTMIPLL_HW_PWRDN_CFG0_IDDQ_OVERRIDE;
  1456. writel_relaxed(value, pll->clk_base + UTMIPLL_HW_PWRDN_CFG0);
  1457. udelay(1);
  1458. /* Enable HW control of UTMIPLL */
  1459. value = readl_relaxed(pll->clk_base + UTMIPLL_HW_PWRDN_CFG0);
  1460. value |= UTMIPLL_HW_PWRDN_CFG0_SEQ_ENABLE;
  1461. writel_relaxed(value, pll->clk_base + UTMIPLL_HW_PWRDN_CFG0);
  1462. out:
  1463. if (pll->lock)
  1464. spin_unlock_irqrestore(pll->lock, flags);
  1465. return ret;
  1466. }
  1467. #endif
  1468. static struct tegra_clk_pll *_tegra_init_pll(void __iomem *clk_base,
  1469. void __iomem *pmc, struct tegra_clk_pll_params *pll_params,
  1470. spinlock_t *lock)
  1471. {
  1472. struct tegra_clk_pll *pll;
  1473. pll = kzalloc(sizeof(*pll), GFP_KERNEL);
  1474. if (!pll)
  1475. return ERR_PTR(-ENOMEM);
  1476. pll->clk_base = clk_base;
  1477. pll->pmc = pmc;
  1478. pll->params = pll_params;
  1479. pll->lock = lock;
  1480. if (!pll_params->div_nmp)
  1481. pll_params->div_nmp = &default_nmp;
  1482. return pll;
  1483. }
  1484. static struct clk *_tegra_clk_register_pll(struct tegra_clk_pll *pll,
  1485. const char *name, const char *parent_name, unsigned long flags,
  1486. const struct clk_ops *ops)
  1487. {
  1488. struct clk_init_data init;
  1489. init.name = name;
  1490. init.ops = ops;
  1491. init.flags = flags;
  1492. init.parent_names = (parent_name ? &parent_name : NULL);
  1493. init.num_parents = (parent_name ? 1 : 0);
  1494. /* Default to _calc_rate if unspecified */
  1495. if (!pll->params->calc_rate) {
  1496. if (pll->params->flags & TEGRA_PLLM)
  1497. pll->params->calc_rate = _calc_dynamic_ramp_rate;
  1498. else
  1499. pll->params->calc_rate = _calc_rate;
  1500. }
  1501. if (pll->params->set_defaults)
  1502. pll->params->set_defaults(pll);
  1503. /* Data in .init is copied by clk_register(), so stack variable OK */
  1504. pll->hw.init = &init;
  1505. return clk_register(NULL, &pll->hw);
  1506. }
  1507. struct clk *tegra_clk_register_pll(const char *name, const char *parent_name,
  1508. void __iomem *clk_base, void __iomem *pmc,
  1509. unsigned long flags, struct tegra_clk_pll_params *pll_params,
  1510. spinlock_t *lock)
  1511. {
  1512. struct tegra_clk_pll *pll;
  1513. struct clk *clk;
  1514. pll_params->flags |= TEGRA_PLL_BYPASS;
  1515. pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
  1516. if (IS_ERR(pll))
  1517. return ERR_CAST(pll);
  1518. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1519. &tegra_clk_pll_ops);
  1520. if (IS_ERR(clk))
  1521. kfree(pll);
  1522. return clk;
  1523. }
  1524. static struct div_nmp pll_e_nmp = {
  1525. .divn_shift = PLLE_BASE_DIVN_SHIFT,
  1526. .divn_width = PLLE_BASE_DIVN_WIDTH,
  1527. .divm_shift = PLLE_BASE_DIVM_SHIFT,
  1528. .divm_width = PLLE_BASE_DIVM_WIDTH,
  1529. .divp_shift = PLLE_BASE_DIVP_SHIFT,
  1530. .divp_width = PLLE_BASE_DIVP_WIDTH,
  1531. };
  1532. struct clk *tegra_clk_register_plle(const char *name, const char *parent_name,
  1533. void __iomem *clk_base, void __iomem *pmc,
  1534. unsigned long flags, struct tegra_clk_pll_params *pll_params,
  1535. spinlock_t *lock)
  1536. {
  1537. struct tegra_clk_pll *pll;
  1538. struct clk *clk;
  1539. pll_params->flags |= TEGRA_PLL_BYPASS;
  1540. if (!pll_params->div_nmp)
  1541. pll_params->div_nmp = &pll_e_nmp;
  1542. pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
  1543. if (IS_ERR(pll))
  1544. return ERR_CAST(pll);
  1545. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1546. &tegra_clk_plle_ops);
  1547. if (IS_ERR(clk))
  1548. kfree(pll);
  1549. return clk;
  1550. }
  1551. struct clk *tegra_clk_register_pllu(const char *name, const char *parent_name,
  1552. void __iomem *clk_base, unsigned long flags,
  1553. struct tegra_clk_pll_params *pll_params, spinlock_t *lock)
  1554. {
  1555. struct tegra_clk_pll *pll;
  1556. struct clk *clk;
  1557. pll_params->flags |= TEGRA_PLLU;
  1558. pll = _tegra_init_pll(clk_base, NULL, pll_params, lock);
  1559. if (IS_ERR(pll))
  1560. return ERR_CAST(pll);
  1561. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1562. &tegra_clk_pllu_ops);
  1563. if (IS_ERR(clk))
  1564. kfree(pll);
  1565. return clk;
  1566. }
  1567. #if defined(CONFIG_ARCH_TEGRA_114_SOC) || \
  1568. defined(CONFIG_ARCH_TEGRA_124_SOC) || \
  1569. defined(CONFIG_ARCH_TEGRA_132_SOC) || \
  1570. defined(CONFIG_ARCH_TEGRA_210_SOC)
  1571. static const struct clk_ops tegra_clk_pllxc_ops = {
  1572. .is_enabled = clk_pll_is_enabled,
  1573. .enable = clk_pll_enable,
  1574. .disable = clk_pll_disable,
  1575. .recalc_rate = clk_pll_recalc_rate,
  1576. .round_rate = clk_pll_ramp_round_rate,
  1577. .set_rate = clk_pllxc_set_rate,
  1578. };
  1579. static const struct clk_ops tegra_clk_pllc_ops = {
  1580. .is_enabled = clk_pll_is_enabled,
  1581. .enable = clk_pllc_enable,
  1582. .disable = clk_pllc_disable,
  1583. .recalc_rate = clk_pll_recalc_rate,
  1584. .round_rate = clk_pll_ramp_round_rate,
  1585. .set_rate = clk_pllc_set_rate,
  1586. };
  1587. static const struct clk_ops tegra_clk_pllre_ops = {
  1588. .is_enabled = clk_pll_is_enabled,
  1589. .enable = clk_pll_enable,
  1590. .disable = clk_pll_disable,
  1591. .recalc_rate = clk_pllre_recalc_rate,
  1592. .round_rate = clk_pllre_round_rate,
  1593. .set_rate = clk_pllre_set_rate,
  1594. };
  1595. static const struct clk_ops tegra_clk_plle_tegra114_ops = {
  1596. .is_enabled = clk_pll_is_enabled,
  1597. .enable = clk_plle_tegra114_enable,
  1598. .disable = clk_plle_tegra114_disable,
  1599. .recalc_rate = clk_pll_recalc_rate,
  1600. };
  1601. static const struct clk_ops tegra_clk_pllu_tegra114_ops = {
  1602. .is_enabled = clk_pll_is_enabled,
  1603. .enable = clk_pllu_tegra114_enable,
  1604. .disable = clk_pll_disable,
  1605. .recalc_rate = clk_pll_recalc_rate,
  1606. };
  1607. struct clk *tegra_clk_register_pllxc(const char *name, const char *parent_name,
  1608. void __iomem *clk_base, void __iomem *pmc,
  1609. unsigned long flags,
  1610. struct tegra_clk_pll_params *pll_params,
  1611. spinlock_t *lock)
  1612. {
  1613. struct tegra_clk_pll *pll;
  1614. struct clk *clk, *parent;
  1615. unsigned long parent_rate;
  1616. u32 val, val_iddq;
  1617. parent = __clk_lookup(parent_name);
  1618. if (!parent) {
  1619. WARN(1, "parent clk %s of %s must be registered first\n",
  1620. parent_name, name);
  1621. return ERR_PTR(-EINVAL);
  1622. }
  1623. if (!pll_params->pdiv_tohw)
  1624. return ERR_PTR(-EINVAL);
  1625. parent_rate = clk_get_rate(parent);
  1626. pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
  1627. if (pll_params->adjust_vco)
  1628. pll_params->vco_min = pll_params->adjust_vco(pll_params,
  1629. parent_rate);
  1630. /*
  1631. * If the pll has a set_defaults callback, it will take care of
  1632. * configuring dynamic ramping and setting IDDQ in that path.
  1633. */
  1634. if (!pll_params->set_defaults) {
  1635. int err;
  1636. err = _setup_dynamic_ramp(pll_params, clk_base, parent_rate);
  1637. if (err)
  1638. return ERR_PTR(err);
  1639. val = readl_relaxed(clk_base + pll_params->base_reg);
  1640. val_iddq = readl_relaxed(clk_base + pll_params->iddq_reg);
  1641. if (val & PLL_BASE_ENABLE)
  1642. WARN_ON(val_iddq & BIT(pll_params->iddq_bit_idx));
  1643. else {
  1644. val_iddq |= BIT(pll_params->iddq_bit_idx);
  1645. writel_relaxed(val_iddq,
  1646. clk_base + pll_params->iddq_reg);
  1647. }
  1648. }
  1649. pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
  1650. if (IS_ERR(pll))
  1651. return ERR_CAST(pll);
  1652. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1653. &tegra_clk_pllxc_ops);
  1654. if (IS_ERR(clk))
  1655. kfree(pll);
  1656. return clk;
  1657. }
  1658. struct clk *tegra_clk_register_pllre(const char *name, const char *parent_name,
  1659. void __iomem *clk_base, void __iomem *pmc,
  1660. unsigned long flags,
  1661. struct tegra_clk_pll_params *pll_params,
  1662. spinlock_t *lock, unsigned long parent_rate)
  1663. {
  1664. u32 val;
  1665. struct tegra_clk_pll *pll;
  1666. struct clk *clk;
  1667. pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
  1668. if (pll_params->adjust_vco)
  1669. pll_params->vco_min = pll_params->adjust_vco(pll_params,
  1670. parent_rate);
  1671. pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
  1672. if (IS_ERR(pll))
  1673. return ERR_CAST(pll);
  1674. /* program minimum rate by default */
  1675. val = pll_readl_base(pll);
  1676. if (val & PLL_BASE_ENABLE)
  1677. WARN_ON(readl_relaxed(clk_base + pll_params->iddq_reg) &
  1678. BIT(pll_params->iddq_bit_idx));
  1679. else {
  1680. int m;
  1681. m = _pll_fixed_mdiv(pll_params, parent_rate);
  1682. val = m << divm_shift(pll);
  1683. val |= (pll_params->vco_min / parent_rate) << divn_shift(pll);
  1684. pll_writel_base(val, pll);
  1685. }
  1686. /* disable lock override */
  1687. val = pll_readl_misc(pll);
  1688. val &= ~BIT(29);
  1689. pll_writel_misc(val, pll);
  1690. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1691. &tegra_clk_pllre_ops);
  1692. if (IS_ERR(clk))
  1693. kfree(pll);
  1694. return clk;
  1695. }
  1696. struct clk *tegra_clk_register_pllm(const char *name, const char *parent_name,
  1697. void __iomem *clk_base, void __iomem *pmc,
  1698. unsigned long flags,
  1699. struct tegra_clk_pll_params *pll_params,
  1700. spinlock_t *lock)
  1701. {
  1702. struct tegra_clk_pll *pll;
  1703. struct clk *clk, *parent;
  1704. unsigned long parent_rate;
  1705. if (!pll_params->pdiv_tohw)
  1706. return ERR_PTR(-EINVAL);
  1707. parent = __clk_lookup(parent_name);
  1708. if (!parent) {
  1709. WARN(1, "parent clk %s of %s must be registered first\n",
  1710. parent_name, name);
  1711. return ERR_PTR(-EINVAL);
  1712. }
  1713. parent_rate = clk_get_rate(parent);
  1714. pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
  1715. if (pll_params->adjust_vco)
  1716. pll_params->vco_min = pll_params->adjust_vco(pll_params,
  1717. parent_rate);
  1718. pll_params->flags |= TEGRA_PLL_BYPASS;
  1719. pll_params->flags |= TEGRA_PLLM;
  1720. pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
  1721. if (IS_ERR(pll))
  1722. return ERR_CAST(pll);
  1723. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1724. &tegra_clk_pll_ops);
  1725. if (IS_ERR(clk))
  1726. kfree(pll);
  1727. return clk;
  1728. }
  1729. struct clk *tegra_clk_register_pllc(const char *name, const char *parent_name,
  1730. void __iomem *clk_base, void __iomem *pmc,
  1731. unsigned long flags,
  1732. struct tegra_clk_pll_params *pll_params,
  1733. spinlock_t *lock)
  1734. {
  1735. struct clk *parent, *clk;
  1736. const struct pdiv_map *p_tohw = pll_params->pdiv_tohw;
  1737. struct tegra_clk_pll *pll;
  1738. struct tegra_clk_pll_freq_table cfg;
  1739. unsigned long parent_rate;
  1740. if (!p_tohw)
  1741. return ERR_PTR(-EINVAL);
  1742. parent = __clk_lookup(parent_name);
  1743. if (!parent) {
  1744. WARN(1, "parent clk %s of %s must be registered first\n",
  1745. parent_name, name);
  1746. return ERR_PTR(-EINVAL);
  1747. }
  1748. parent_rate = clk_get_rate(parent);
  1749. pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
  1750. pll_params->flags |= TEGRA_PLL_BYPASS;
  1751. pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
  1752. if (IS_ERR(pll))
  1753. return ERR_CAST(pll);
  1754. /*
  1755. * Most of PLLC register fields are shadowed, and can not be read
  1756. * directly from PLL h/w. Hence, actual PLLC boot state is unknown.
  1757. * Initialize PLL to default state: disabled, reset; shadow registers
  1758. * loaded with default parameters; dividers are preset for half of
  1759. * minimum VCO rate (the latter assured that shadowed divider settings
  1760. * are within supported range).
  1761. */
  1762. cfg.m = _pll_fixed_mdiv(pll_params, parent_rate);
  1763. cfg.n = cfg.m * pll_params->vco_min / parent_rate;
  1764. while (p_tohw->pdiv) {
  1765. if (p_tohw->pdiv == 2) {
  1766. cfg.p = p_tohw->hw_val;
  1767. break;
  1768. }
  1769. p_tohw++;
  1770. }
  1771. if (!p_tohw->pdiv) {
  1772. WARN_ON(1);
  1773. return ERR_PTR(-EINVAL);
  1774. }
  1775. pll_writel_base(0, pll);
  1776. _update_pll_mnp(pll, &cfg);
  1777. pll_writel_misc(PLLCX_MISC_DEFAULT, pll);
  1778. pll_writel(PLLCX_MISC1_DEFAULT, pll_params->ext_misc_reg[0], pll);
  1779. pll_writel(PLLCX_MISC2_DEFAULT, pll_params->ext_misc_reg[1], pll);
  1780. pll_writel(PLLCX_MISC3_DEFAULT, pll_params->ext_misc_reg[2], pll);
  1781. _pllcx_update_dynamic_coef(pll, parent_rate, cfg.n);
  1782. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1783. &tegra_clk_pllc_ops);
  1784. if (IS_ERR(clk))
  1785. kfree(pll);
  1786. return clk;
  1787. }
  1788. struct clk *tegra_clk_register_plle_tegra114(const char *name,
  1789. const char *parent_name,
  1790. void __iomem *clk_base, unsigned long flags,
  1791. struct tegra_clk_pll_params *pll_params,
  1792. spinlock_t *lock)
  1793. {
  1794. struct tegra_clk_pll *pll;
  1795. struct clk *clk;
  1796. u32 val, val_aux;
  1797. pll = _tegra_init_pll(clk_base, NULL, pll_params, lock);
  1798. if (IS_ERR(pll))
  1799. return ERR_CAST(pll);
  1800. /* ensure parent is set to pll_re_vco */
  1801. val = pll_readl_base(pll);
  1802. val_aux = pll_readl(pll_params->aux_reg, pll);
  1803. if (val & PLL_BASE_ENABLE) {
  1804. if ((val_aux & PLLE_AUX_PLLRE_SEL) ||
  1805. (val_aux & PLLE_AUX_PLLP_SEL))
  1806. WARN(1, "pll_e enabled with unsupported parent %s\n",
  1807. (val_aux & PLLE_AUX_PLLP_SEL) ? "pllp_out0" :
  1808. "pll_re_vco");
  1809. } else {
  1810. val_aux &= ~(PLLE_AUX_PLLRE_SEL | PLLE_AUX_PLLP_SEL);
  1811. pll_writel(val_aux, pll_params->aux_reg, pll);
  1812. }
  1813. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1814. &tegra_clk_plle_tegra114_ops);
  1815. if (IS_ERR(clk))
  1816. kfree(pll);
  1817. return clk;
  1818. }
  1819. struct clk *
  1820. tegra_clk_register_pllu_tegra114(const char *name, const char *parent_name,
  1821. void __iomem *clk_base, unsigned long flags,
  1822. struct tegra_clk_pll_params *pll_params,
  1823. spinlock_t *lock)
  1824. {
  1825. struct tegra_clk_pll *pll;
  1826. struct clk *clk;
  1827. pll_params->flags |= TEGRA_PLLU;
  1828. pll = _tegra_init_pll(clk_base, NULL, pll_params, lock);
  1829. if (IS_ERR(pll))
  1830. return ERR_CAST(pll);
  1831. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1832. &tegra_clk_pllu_tegra114_ops);
  1833. if (IS_ERR(clk))
  1834. kfree(pll);
  1835. return clk;
  1836. }
  1837. #endif
  1838. #if defined(CONFIG_ARCH_TEGRA_124_SOC) || defined(CONFIG_ARCH_TEGRA_132_SOC)
  1839. static const struct clk_ops tegra_clk_pllss_ops = {
  1840. .is_enabled = clk_pll_is_enabled,
  1841. .enable = clk_pll_enable,
  1842. .disable = clk_pll_disable,
  1843. .recalc_rate = clk_pll_recalc_rate,
  1844. .round_rate = clk_pll_ramp_round_rate,
  1845. .set_rate = clk_pllxc_set_rate,
  1846. };
  1847. struct clk *tegra_clk_register_pllss(const char *name, const char *parent_name,
  1848. void __iomem *clk_base, unsigned long flags,
  1849. struct tegra_clk_pll_params *pll_params,
  1850. spinlock_t *lock)
  1851. {
  1852. struct tegra_clk_pll *pll;
  1853. struct clk *clk, *parent;
  1854. struct tegra_clk_pll_freq_table cfg;
  1855. unsigned long parent_rate;
  1856. u32 val, val_iddq;
  1857. int i;
  1858. if (!pll_params->div_nmp)
  1859. return ERR_PTR(-EINVAL);
  1860. parent = __clk_lookup(parent_name);
  1861. if (!parent) {
  1862. WARN(1, "parent clk %s of %s must be registered first\n",
  1863. parent_name, name);
  1864. return ERR_PTR(-EINVAL);
  1865. }
  1866. pll = _tegra_init_pll(clk_base, NULL, pll_params, lock);
  1867. if (IS_ERR(pll))
  1868. return ERR_CAST(pll);
  1869. val = pll_readl_base(pll);
  1870. val &= ~PLLSS_REF_SRC_SEL_MASK;
  1871. pll_writel_base(val, pll);
  1872. parent_rate = clk_get_rate(parent);
  1873. pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
  1874. /* initialize PLL to minimum rate */
  1875. cfg.m = _pll_fixed_mdiv(pll_params, parent_rate);
  1876. cfg.n = cfg.m * pll_params->vco_min / parent_rate;
  1877. for (i = 0; pll_params->pdiv_tohw[i].pdiv; i++)
  1878. ;
  1879. if (!i) {
  1880. kfree(pll);
  1881. return ERR_PTR(-EINVAL);
  1882. }
  1883. cfg.p = pll_params->pdiv_tohw[i-1].hw_val;
  1884. _update_pll_mnp(pll, &cfg);
  1885. pll_writel_misc(PLLSS_MISC_DEFAULT, pll);
  1886. pll_writel(PLLSS_CFG_DEFAULT, pll_params->ext_misc_reg[0], pll);
  1887. pll_writel(PLLSS_CTRL1_DEFAULT, pll_params->ext_misc_reg[1], pll);
  1888. pll_writel(PLLSS_CTRL1_DEFAULT, pll_params->ext_misc_reg[2], pll);
  1889. val = pll_readl_base(pll);
  1890. val_iddq = readl_relaxed(clk_base + pll_params->iddq_reg);
  1891. if (val & PLL_BASE_ENABLE) {
  1892. if (val_iddq & BIT(pll_params->iddq_bit_idx)) {
  1893. WARN(1, "%s is on but IDDQ set\n", name);
  1894. kfree(pll);
  1895. return ERR_PTR(-EINVAL);
  1896. }
  1897. } else {
  1898. val_iddq |= BIT(pll_params->iddq_bit_idx);
  1899. writel_relaxed(val_iddq, clk_base + pll_params->iddq_reg);
  1900. }
  1901. val &= ~PLLSS_LOCK_OVERRIDE;
  1902. pll_writel_base(val, pll);
  1903. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1904. &tegra_clk_pllss_ops);
  1905. if (IS_ERR(clk))
  1906. kfree(pll);
  1907. return clk;
  1908. }
  1909. #endif
  1910. #if defined(CONFIG_ARCH_TEGRA_210_SOC)
  1911. struct clk *tegra_clk_register_pllre_tegra210(const char *name,
  1912. const char *parent_name, void __iomem *clk_base,
  1913. void __iomem *pmc, unsigned long flags,
  1914. struct tegra_clk_pll_params *pll_params,
  1915. spinlock_t *lock, unsigned long parent_rate)
  1916. {
  1917. u32 val;
  1918. struct tegra_clk_pll *pll;
  1919. struct clk *clk;
  1920. pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
  1921. if (pll_params->adjust_vco)
  1922. pll_params->vco_min = pll_params->adjust_vco(pll_params,
  1923. parent_rate);
  1924. pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
  1925. if (IS_ERR(pll))
  1926. return ERR_CAST(pll);
  1927. /* program minimum rate by default */
  1928. val = pll_readl_base(pll);
  1929. if (val & PLL_BASE_ENABLE)
  1930. WARN_ON(readl_relaxed(clk_base + pll_params->iddq_reg) &
  1931. BIT(pll_params->iddq_bit_idx));
  1932. else {
  1933. val = 0x4 << divm_shift(pll);
  1934. val |= 0x41 << divn_shift(pll);
  1935. pll_writel_base(val, pll);
  1936. }
  1937. /* disable lock override */
  1938. val = pll_readl_misc(pll);
  1939. val &= ~BIT(29);
  1940. pll_writel_misc(val, pll);
  1941. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  1942. &tegra_clk_pllre_ops);
  1943. if (IS_ERR(clk))
  1944. kfree(pll);
  1945. return clk;
  1946. }
  1947. static int clk_plle_tegra210_enable(struct clk_hw *hw)
  1948. {
  1949. struct tegra_clk_pll *pll = to_clk_pll(hw);
  1950. struct tegra_clk_pll_freq_table sel;
  1951. u32 val;
  1952. int ret = 0;
  1953. unsigned long flags = 0;
  1954. unsigned long input_rate = clk_hw_get_rate(clk_hw_get_parent(hw));
  1955. if (_get_table_rate(hw, &sel, pll->params->fixed_rate, input_rate))
  1956. return -EINVAL;
  1957. if (pll->lock)
  1958. spin_lock_irqsave(pll->lock, flags);
  1959. val = pll_readl(pll->params->aux_reg, pll);
  1960. if (val & PLLE_AUX_SEQ_ENABLE)
  1961. goto out;
  1962. val = pll_readl_base(pll);
  1963. val &= ~BIT(30); /* Disable lock override */
  1964. pll_writel_base(val, pll);
  1965. val = pll_readl_misc(pll);
  1966. val |= PLLE_MISC_LOCK_ENABLE;
  1967. val |= PLLE_MISC_IDDQ_SW_CTRL;
  1968. val &= ~PLLE_MISC_IDDQ_SW_VALUE;
  1969. val |= PLLE_MISC_PLLE_PTS;
  1970. val &= ~(PLLE_MISC_VREG_BG_CTRL_MASK | PLLE_MISC_VREG_CTRL_MASK);
  1971. pll_writel_misc(val, pll);
  1972. udelay(5);
  1973. val = pll_readl(PLLE_SS_CTRL, pll);
  1974. val |= PLLE_SS_DISABLE;
  1975. pll_writel(val, PLLE_SS_CTRL, pll);
  1976. val = pll_readl_base(pll);
  1977. val &= ~(divp_mask_shifted(pll) | divn_mask_shifted(pll) |
  1978. divm_mask_shifted(pll));
  1979. val &= ~(PLLE_BASE_DIVCML_MASK << PLLE_BASE_DIVCML_SHIFT);
  1980. val |= sel.m << divm_shift(pll);
  1981. val |= sel.n << divn_shift(pll);
  1982. val |= sel.cpcon << PLLE_BASE_DIVCML_SHIFT;
  1983. pll_writel_base(val, pll);
  1984. udelay(1);
  1985. val = pll_readl_base(pll);
  1986. val |= PLLE_BASE_ENABLE;
  1987. pll_writel_base(val, pll);
  1988. ret = clk_pll_wait_for_lock(pll);
  1989. if (ret < 0)
  1990. goto out;
  1991. val = pll_readl(PLLE_SS_CTRL, pll);
  1992. val &= ~(PLLE_SS_CNTL_CENTER | PLLE_SS_CNTL_INVERT);
  1993. val &= ~PLLE_SS_COEFFICIENTS_MASK;
  1994. val |= PLLE_SS_COEFFICIENTS_VAL_TEGRA210;
  1995. pll_writel(val, PLLE_SS_CTRL, pll);
  1996. val &= ~(PLLE_SS_CNTL_SSC_BYP | PLLE_SS_CNTL_BYPASS_SS);
  1997. pll_writel(val, PLLE_SS_CTRL, pll);
  1998. udelay(1);
  1999. val &= ~PLLE_SS_CNTL_INTERP_RESET;
  2000. pll_writel(val, PLLE_SS_CTRL, pll);
  2001. udelay(1);
  2002. val = pll_readl_misc(pll);
  2003. val &= ~PLLE_MISC_IDDQ_SW_CTRL;
  2004. pll_writel_misc(val, pll);
  2005. val = pll_readl(pll->params->aux_reg, pll);
  2006. val |= (PLLE_AUX_USE_LOCKDET | PLLE_AUX_SS_SEQ_INCLUDE);
  2007. val &= ~(PLLE_AUX_ENABLE_SWCTL | PLLE_AUX_SS_SWCTL);
  2008. pll_writel(val, pll->params->aux_reg, pll);
  2009. udelay(1);
  2010. val |= PLLE_AUX_SEQ_ENABLE;
  2011. pll_writel(val, pll->params->aux_reg, pll);
  2012. out:
  2013. if (pll->lock)
  2014. spin_unlock_irqrestore(pll->lock, flags);
  2015. return ret;
  2016. }
  2017. static void clk_plle_tegra210_disable(struct clk_hw *hw)
  2018. {
  2019. struct tegra_clk_pll *pll = to_clk_pll(hw);
  2020. unsigned long flags = 0;
  2021. u32 val;
  2022. if (pll->lock)
  2023. spin_lock_irqsave(pll->lock, flags);
  2024. /* If PLLE HW sequencer is enabled, SW should not disable PLLE */
  2025. val = pll_readl(pll->params->aux_reg, pll);
  2026. if (val & PLLE_AUX_SEQ_ENABLE)
  2027. goto out;
  2028. val = pll_readl_base(pll);
  2029. val &= ~PLLE_BASE_ENABLE;
  2030. pll_writel_base(val, pll);
  2031. val = pll_readl(pll->params->aux_reg, pll);
  2032. val |= PLLE_AUX_ENABLE_SWCTL | PLLE_AUX_SS_SWCTL;
  2033. pll_writel(val, pll->params->aux_reg, pll);
  2034. val = pll_readl_misc(pll);
  2035. val |= PLLE_MISC_IDDQ_SW_CTRL | PLLE_MISC_IDDQ_SW_VALUE;
  2036. pll_writel_misc(val, pll);
  2037. udelay(1);
  2038. out:
  2039. if (pll->lock)
  2040. spin_unlock_irqrestore(pll->lock, flags);
  2041. }
  2042. static int clk_plle_tegra210_is_enabled(struct clk_hw *hw)
  2043. {
  2044. struct tegra_clk_pll *pll = to_clk_pll(hw);
  2045. u32 val;
  2046. val = pll_readl_base(pll);
  2047. return val & PLLE_BASE_ENABLE ? 1 : 0;
  2048. }
  2049. static int clk_pllu_tegra210_enable(struct clk_hw *hw)
  2050. {
  2051. struct tegra_clk_pll *pll = to_clk_pll(hw);
  2052. struct clk_hw *pll_ref = clk_hw_get_parent(hw);
  2053. struct clk_hw *osc = clk_hw_get_parent(pll_ref);
  2054. const struct utmi_clk_param *params = NULL;
  2055. unsigned long flags = 0, input_rate;
  2056. unsigned int i;
  2057. int ret = 0;
  2058. u32 value;
  2059. if (!osc) {
  2060. pr_err("%s: failed to get OSC clock\n", __func__);
  2061. return -EINVAL;
  2062. }
  2063. input_rate = clk_hw_get_rate(osc);
  2064. if (pll->lock)
  2065. spin_lock_irqsave(pll->lock, flags);
  2066. _clk_pll_enable(hw);
  2067. ret = clk_pll_wait_for_lock(pll);
  2068. if (ret < 0)
  2069. goto out;
  2070. for (i = 0; i < ARRAY_SIZE(utmi_parameters); i++) {
  2071. if (input_rate == utmi_parameters[i].osc_frequency) {
  2072. params = &utmi_parameters[i];
  2073. break;
  2074. }
  2075. }
  2076. if (!params) {
  2077. pr_err("%s: unexpected input rate %lu Hz\n", __func__,
  2078. input_rate);
  2079. ret = -EINVAL;
  2080. goto out;
  2081. }
  2082. value = pll_readl_base(pll);
  2083. value &= ~PLLU_BASE_OVERRIDE;
  2084. pll_writel_base(value, pll);
  2085. /* Put PLLU under HW control */
  2086. value = readl_relaxed(pll->clk_base + PLLU_HW_PWRDN_CFG0);
  2087. value |= PLLU_HW_PWRDN_CFG0_IDDQ_PD_INCLUDE |
  2088. PLLU_HW_PWRDN_CFG0_USE_SWITCH_DETECT |
  2089. PLLU_HW_PWRDN_CFG0_USE_LOCKDET;
  2090. value &= ~(PLLU_HW_PWRDN_CFG0_CLK_ENABLE_SWCTL |
  2091. PLLU_HW_PWRDN_CFG0_CLK_SWITCH_SWCTL);
  2092. writel_relaxed(value, pll->clk_base + PLLU_HW_PWRDN_CFG0);
  2093. value = readl_relaxed(pll->clk_base + XUSB_PLL_CFG0);
  2094. value &= ~XUSB_PLL_CFG0_PLLU_LOCK_DLY;
  2095. writel_relaxed(value, pll->clk_base + XUSB_PLL_CFG0);
  2096. udelay(1);
  2097. value = readl_relaxed(pll->clk_base + PLLU_HW_PWRDN_CFG0);
  2098. value |= PLLU_HW_PWRDN_CFG0_SEQ_ENABLE;
  2099. writel_relaxed(value, pll->clk_base + PLLU_HW_PWRDN_CFG0);
  2100. udelay(1);
  2101. /* Disable PLLU clock branch to UTMIPLL since it uses OSC */
  2102. value = pll_readl_base(pll);
  2103. value &= ~PLLU_BASE_CLKENABLE_USB;
  2104. pll_writel_base(value, pll);
  2105. value = readl_relaxed(pll->clk_base + UTMIPLL_HW_PWRDN_CFG0);
  2106. if (value & UTMIPLL_HW_PWRDN_CFG0_SEQ_ENABLE) {
  2107. pr_debug("UTMIPLL already enabled\n");
  2108. goto out;
  2109. }
  2110. value &= ~UTMIPLL_HW_PWRDN_CFG0_IDDQ_OVERRIDE;
  2111. writel_relaxed(value, pll->clk_base + UTMIPLL_HW_PWRDN_CFG0);
  2112. /* Program UTMIP PLL stable and active counts */
  2113. value = readl_relaxed(pll->clk_base + UTMIP_PLL_CFG2);
  2114. value &= ~UTMIP_PLL_CFG2_STABLE_COUNT(~0);
  2115. value |= UTMIP_PLL_CFG2_STABLE_COUNT(params->stable_count);
  2116. value &= ~UTMIP_PLL_CFG2_ACTIVE_DLY_COUNT(~0);
  2117. value |= UTMIP_PLL_CFG2_ACTIVE_DLY_COUNT(params->active_delay_count);
  2118. value |= UTMIP_PLL_CFG2_PHY_XTAL_CLOCKEN;
  2119. writel_relaxed(value, pll->clk_base + UTMIP_PLL_CFG2);
  2120. /* Program UTMIP PLL delay and oscillator frequency counts */
  2121. value = readl_relaxed(pll->clk_base + UTMIP_PLL_CFG1);
  2122. value &= ~UTMIP_PLL_CFG1_ENABLE_DLY_COUNT(~0);
  2123. value |= UTMIP_PLL_CFG1_ENABLE_DLY_COUNT(params->enable_delay_count);
  2124. value &= ~UTMIP_PLL_CFG1_XTAL_FREQ_COUNT(~0);
  2125. value |= UTMIP_PLL_CFG1_XTAL_FREQ_COUNT(params->xtal_freq_count);
  2126. writel_relaxed(value, pll->clk_base + UTMIP_PLL_CFG1);
  2127. /* Remove power downs from UTMIP PLL control bits */
  2128. value = readl_relaxed(pll->clk_base + UTMIP_PLL_CFG1);
  2129. value &= ~UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERDOWN;
  2130. value |= UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERUP;
  2131. writel(value, pll->clk_base + UTMIP_PLL_CFG1);
  2132. udelay(1);
  2133. /* Enable samplers for SNPS, XUSB_HOST, XUSB_DEV */
  2134. value = readl_relaxed(pll->clk_base + UTMIP_PLL_CFG2);
  2135. value |= UTMIP_PLL_CFG2_FORCE_PD_SAMP_A_POWERUP;
  2136. value |= UTMIP_PLL_CFG2_FORCE_PD_SAMP_B_POWERUP;
  2137. value |= UTMIP_PLL_CFG2_FORCE_PD_SAMP_D_POWERUP;
  2138. value &= ~UTMIP_PLL_CFG2_FORCE_PD_SAMP_A_POWERDOWN;
  2139. value &= ~UTMIP_PLL_CFG2_FORCE_PD_SAMP_B_POWERDOWN;
  2140. value &= ~UTMIP_PLL_CFG2_FORCE_PD_SAMP_D_POWERDOWN;
  2141. writel_relaxed(value, pll->clk_base + UTMIP_PLL_CFG2);
  2142. /* Setup HW control of UTMIPLL */
  2143. value = readl_relaxed(pll->clk_base + UTMIP_PLL_CFG1);
  2144. value &= ~UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERUP;
  2145. value &= ~UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERDOWN;
  2146. writel_relaxed(value, pll->clk_base + UTMIP_PLL_CFG1);
  2147. value = readl_relaxed(pll->clk_base + UTMIPLL_HW_PWRDN_CFG0);
  2148. value |= UTMIPLL_HW_PWRDN_CFG0_USE_LOCKDET;
  2149. value &= ~UTMIPLL_HW_PWRDN_CFG0_CLK_ENABLE_SWCTL;
  2150. writel_relaxed(value, pll->clk_base + UTMIPLL_HW_PWRDN_CFG0);
  2151. udelay(1);
  2152. value = readl_relaxed(pll->clk_base + XUSB_PLL_CFG0);
  2153. value &= ~XUSB_PLL_CFG0_UTMIPLL_LOCK_DLY;
  2154. writel_relaxed(value, pll->clk_base + XUSB_PLL_CFG0);
  2155. udelay(1);
  2156. /* Enable HW control of UTMIPLL */
  2157. value = readl_relaxed(pll->clk_base + UTMIPLL_HW_PWRDN_CFG0);
  2158. value |= UTMIPLL_HW_PWRDN_CFG0_SEQ_ENABLE;
  2159. writel_relaxed(value, pll->clk_base + UTMIPLL_HW_PWRDN_CFG0);
  2160. out:
  2161. if (pll->lock)
  2162. spin_unlock_irqrestore(pll->lock, flags);
  2163. return ret;
  2164. }
  2165. static const struct clk_ops tegra_clk_plle_tegra210_ops = {
  2166. .is_enabled = clk_plle_tegra210_is_enabled,
  2167. .enable = clk_plle_tegra210_enable,
  2168. .disable = clk_plle_tegra210_disable,
  2169. .recalc_rate = clk_pll_recalc_rate,
  2170. };
  2171. static const struct clk_ops tegra_clk_pllu_tegra210_ops = {
  2172. .is_enabled = clk_pll_is_enabled,
  2173. .enable = clk_pllu_tegra210_enable,
  2174. .disable = clk_pll_disable,
  2175. .recalc_rate = clk_pllre_recalc_rate,
  2176. };
  2177. struct clk *tegra_clk_register_plle_tegra210(const char *name,
  2178. const char *parent_name,
  2179. void __iomem *clk_base, unsigned long flags,
  2180. struct tegra_clk_pll_params *pll_params,
  2181. spinlock_t *lock)
  2182. {
  2183. struct tegra_clk_pll *pll;
  2184. struct clk *clk;
  2185. u32 val, val_aux;
  2186. pll = _tegra_init_pll(clk_base, NULL, pll_params, lock);
  2187. if (IS_ERR(pll))
  2188. return ERR_CAST(pll);
  2189. /* ensure parent is set to pll_re_vco */
  2190. val = pll_readl_base(pll);
  2191. val_aux = pll_readl(pll_params->aux_reg, pll);
  2192. if (val & PLLE_BASE_ENABLE) {
  2193. if ((val_aux & PLLE_AUX_PLLRE_SEL) ||
  2194. (val_aux & PLLE_AUX_PLLP_SEL))
  2195. WARN(1, "pll_e enabled with unsupported parent %s\n",
  2196. (val_aux & PLLE_AUX_PLLP_SEL) ? "pllp_out0" :
  2197. "pll_re_vco");
  2198. } else {
  2199. val_aux &= ~(PLLE_AUX_PLLRE_SEL | PLLE_AUX_PLLP_SEL);
  2200. pll_writel(val_aux, pll_params->aux_reg, pll);
  2201. }
  2202. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  2203. &tegra_clk_plle_tegra210_ops);
  2204. if (IS_ERR(clk))
  2205. kfree(pll);
  2206. return clk;
  2207. }
  2208. struct clk *tegra_clk_register_pllc_tegra210(const char *name,
  2209. const char *parent_name, void __iomem *clk_base,
  2210. void __iomem *pmc, unsigned long flags,
  2211. struct tegra_clk_pll_params *pll_params,
  2212. spinlock_t *lock)
  2213. {
  2214. struct clk *parent, *clk;
  2215. const struct pdiv_map *p_tohw = pll_params->pdiv_tohw;
  2216. struct tegra_clk_pll *pll;
  2217. unsigned long parent_rate;
  2218. if (!p_tohw)
  2219. return ERR_PTR(-EINVAL);
  2220. parent = __clk_lookup(parent_name);
  2221. if (!parent) {
  2222. WARN(1, "parent clk %s of %s must be registered first\n",
  2223. name, parent_name);
  2224. return ERR_PTR(-EINVAL);
  2225. }
  2226. parent_rate = clk_get_rate(parent);
  2227. pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
  2228. if (pll_params->adjust_vco)
  2229. pll_params->vco_min = pll_params->adjust_vco(pll_params,
  2230. parent_rate);
  2231. pll_params->flags |= TEGRA_PLL_BYPASS;
  2232. pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
  2233. if (IS_ERR(pll))
  2234. return ERR_CAST(pll);
  2235. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  2236. &tegra_clk_pll_ops);
  2237. if (IS_ERR(clk))
  2238. kfree(pll);
  2239. return clk;
  2240. }
  2241. struct clk *tegra_clk_register_pllxc_tegra210(const char *name,
  2242. const char *parent_name, void __iomem *clk_base,
  2243. void __iomem *pmc, unsigned long flags,
  2244. struct tegra_clk_pll_params *pll_params,
  2245. spinlock_t *lock)
  2246. {
  2247. struct tegra_clk_pll *pll;
  2248. struct clk *clk, *parent;
  2249. unsigned long parent_rate;
  2250. parent = __clk_lookup(parent_name);
  2251. if (!parent) {
  2252. WARN(1, "parent clk %s of %s must be registered first\n",
  2253. name, parent_name);
  2254. return ERR_PTR(-EINVAL);
  2255. }
  2256. if (!pll_params->pdiv_tohw)
  2257. return ERR_PTR(-EINVAL);
  2258. parent_rate = clk_get_rate(parent);
  2259. pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
  2260. if (pll_params->adjust_vco)
  2261. pll_params->vco_min = pll_params->adjust_vco(pll_params,
  2262. parent_rate);
  2263. pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
  2264. if (IS_ERR(pll))
  2265. return ERR_CAST(pll);
  2266. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  2267. &tegra_clk_pll_ops);
  2268. if (IS_ERR(clk))
  2269. kfree(pll);
  2270. return clk;
  2271. }
  2272. struct clk *tegra_clk_register_pllss_tegra210(const char *name,
  2273. const char *parent_name, void __iomem *clk_base,
  2274. unsigned long flags,
  2275. struct tegra_clk_pll_params *pll_params,
  2276. spinlock_t *lock)
  2277. {
  2278. struct tegra_clk_pll *pll;
  2279. struct clk *clk, *parent;
  2280. struct tegra_clk_pll_freq_table cfg;
  2281. unsigned long parent_rate;
  2282. u32 val;
  2283. int i;
  2284. if (!pll_params->div_nmp)
  2285. return ERR_PTR(-EINVAL);
  2286. parent = __clk_lookup(parent_name);
  2287. if (!parent) {
  2288. WARN(1, "parent clk %s of %s must be registered first\n",
  2289. name, parent_name);
  2290. return ERR_PTR(-EINVAL);
  2291. }
  2292. pll = _tegra_init_pll(clk_base, NULL, pll_params, lock);
  2293. if (IS_ERR(pll))
  2294. return ERR_CAST(pll);
  2295. val = pll_readl_base(pll);
  2296. val &= ~PLLSS_REF_SRC_SEL_MASK;
  2297. pll_writel_base(val, pll);
  2298. parent_rate = clk_get_rate(parent);
  2299. pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
  2300. if (pll_params->adjust_vco)
  2301. pll_params->vco_min = pll_params->adjust_vco(pll_params,
  2302. parent_rate);
  2303. /* initialize PLL to minimum rate */
  2304. cfg.m = _pll_fixed_mdiv(pll_params, parent_rate);
  2305. cfg.n = cfg.m * pll_params->vco_min / parent_rate;
  2306. for (i = 0; pll_params->pdiv_tohw[i].pdiv; i++)
  2307. ;
  2308. if (!i) {
  2309. kfree(pll);
  2310. return ERR_PTR(-EINVAL);
  2311. }
  2312. cfg.p = pll_params->pdiv_tohw[i-1].hw_val;
  2313. _update_pll_mnp(pll, &cfg);
  2314. pll_writel_misc(PLLSS_MISC_DEFAULT, pll);
  2315. val = pll_readl_base(pll);
  2316. if (val & PLL_BASE_ENABLE) {
  2317. if (val & BIT(pll_params->iddq_bit_idx)) {
  2318. WARN(1, "%s is on but IDDQ set\n", name);
  2319. kfree(pll);
  2320. return ERR_PTR(-EINVAL);
  2321. }
  2322. } else
  2323. val |= BIT(pll_params->iddq_bit_idx);
  2324. val &= ~PLLSS_LOCK_OVERRIDE;
  2325. pll_writel_base(val, pll);
  2326. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  2327. &tegra_clk_pll_ops);
  2328. if (IS_ERR(clk))
  2329. kfree(pll);
  2330. return clk;
  2331. }
  2332. struct clk *tegra_clk_register_pllmb(const char *name, const char *parent_name,
  2333. void __iomem *clk_base, void __iomem *pmc,
  2334. unsigned long flags,
  2335. struct tegra_clk_pll_params *pll_params,
  2336. spinlock_t *lock)
  2337. {
  2338. struct tegra_clk_pll *pll;
  2339. struct clk *clk, *parent;
  2340. unsigned long parent_rate;
  2341. if (!pll_params->pdiv_tohw)
  2342. return ERR_PTR(-EINVAL);
  2343. parent = __clk_lookup(parent_name);
  2344. if (!parent) {
  2345. WARN(1, "parent clk %s of %s must be registered first\n",
  2346. parent_name, name);
  2347. return ERR_PTR(-EINVAL);
  2348. }
  2349. parent_rate = clk_get_rate(parent);
  2350. pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
  2351. if (pll_params->adjust_vco)
  2352. pll_params->vco_min = pll_params->adjust_vco(pll_params,
  2353. parent_rate);
  2354. pll_params->flags |= TEGRA_PLL_BYPASS;
  2355. pll_params->flags |= TEGRA_PLLMB;
  2356. pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
  2357. if (IS_ERR(pll))
  2358. return ERR_CAST(pll);
  2359. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  2360. &tegra_clk_pll_ops);
  2361. if (IS_ERR(clk))
  2362. kfree(pll);
  2363. return clk;
  2364. }
  2365. struct clk *tegra_clk_register_pllu_tegra210(const char *name,
  2366. const char *parent_name, void __iomem *clk_base,
  2367. unsigned long flags, struct tegra_clk_pll_params *pll_params,
  2368. spinlock_t *lock)
  2369. {
  2370. struct tegra_clk_pll *pll;
  2371. struct clk *clk;
  2372. pll_params->flags |= TEGRA_PLLU;
  2373. pll = _tegra_init_pll(clk_base, NULL, pll_params, lock);
  2374. if (IS_ERR(pll))
  2375. return ERR_CAST(pll);
  2376. clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
  2377. &tegra_clk_pllu_tegra210_ops);
  2378. if (IS_ERR(clk))
  2379. kfree(pll);
  2380. return clk;
  2381. }
  2382. #endif