clk-exynos5433.c 209 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409
  1. /*
  2. * Copyright (c) 2014 Samsung Electronics Co., Ltd.
  3. * Author: Chanwoo Choi <cw00.choi@samsung.com>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License version 2 as
  7. * published by the Free Software Foundation.
  8. *
  9. * Common Clock Framework support for Exynos5443 SoC.
  10. */
  11. #include <linux/clk-provider.h>
  12. #include <linux/of.h>
  13. #include <linux/of_address.h>
  14. #include <dt-bindings/clock/exynos5433.h>
  15. #include "clk.h"
  16. #include "clk-cpu.h"
  17. #include "clk-pll.h"
  18. /*
  19. * Register offset definitions for CMU_TOP
  20. */
  21. #define ISP_PLL_LOCK 0x0000
  22. #define AUD_PLL_LOCK 0x0004
  23. #define ISP_PLL_CON0 0x0100
  24. #define ISP_PLL_CON1 0x0104
  25. #define ISP_PLL_FREQ_DET 0x0108
  26. #define AUD_PLL_CON0 0x0110
  27. #define AUD_PLL_CON1 0x0114
  28. #define AUD_PLL_CON2 0x0118
  29. #define AUD_PLL_FREQ_DET 0x011c
  30. #define MUX_SEL_TOP0 0x0200
  31. #define MUX_SEL_TOP1 0x0204
  32. #define MUX_SEL_TOP2 0x0208
  33. #define MUX_SEL_TOP3 0x020c
  34. #define MUX_SEL_TOP4 0x0210
  35. #define MUX_SEL_TOP_MSCL 0x0220
  36. #define MUX_SEL_TOP_CAM1 0x0224
  37. #define MUX_SEL_TOP_DISP 0x0228
  38. #define MUX_SEL_TOP_FSYS0 0x0230
  39. #define MUX_SEL_TOP_FSYS1 0x0234
  40. #define MUX_SEL_TOP_PERIC0 0x0238
  41. #define MUX_SEL_TOP_PERIC1 0x023c
  42. #define MUX_ENABLE_TOP0 0x0300
  43. #define MUX_ENABLE_TOP1 0x0304
  44. #define MUX_ENABLE_TOP2 0x0308
  45. #define MUX_ENABLE_TOP3 0x030c
  46. #define MUX_ENABLE_TOP4 0x0310
  47. #define MUX_ENABLE_TOP_MSCL 0x0320
  48. #define MUX_ENABLE_TOP_CAM1 0x0324
  49. #define MUX_ENABLE_TOP_DISP 0x0328
  50. #define MUX_ENABLE_TOP_FSYS0 0x0330
  51. #define MUX_ENABLE_TOP_FSYS1 0x0334
  52. #define MUX_ENABLE_TOP_PERIC0 0x0338
  53. #define MUX_ENABLE_TOP_PERIC1 0x033c
  54. #define MUX_STAT_TOP0 0x0400
  55. #define MUX_STAT_TOP1 0x0404
  56. #define MUX_STAT_TOP2 0x0408
  57. #define MUX_STAT_TOP3 0x040c
  58. #define MUX_STAT_TOP4 0x0410
  59. #define MUX_STAT_TOP_MSCL 0x0420
  60. #define MUX_STAT_TOP_CAM1 0x0424
  61. #define MUX_STAT_TOP_FSYS0 0x0430
  62. #define MUX_STAT_TOP_FSYS1 0x0434
  63. #define MUX_STAT_TOP_PERIC0 0x0438
  64. #define MUX_STAT_TOP_PERIC1 0x043c
  65. #define DIV_TOP0 0x0600
  66. #define DIV_TOP1 0x0604
  67. #define DIV_TOP2 0x0608
  68. #define DIV_TOP3 0x060c
  69. #define DIV_TOP4 0x0610
  70. #define DIV_TOP_MSCL 0x0618
  71. #define DIV_TOP_CAM10 0x061c
  72. #define DIV_TOP_CAM11 0x0620
  73. #define DIV_TOP_FSYS0 0x062c
  74. #define DIV_TOP_FSYS1 0x0630
  75. #define DIV_TOP_FSYS2 0x0634
  76. #define DIV_TOP_PERIC0 0x0638
  77. #define DIV_TOP_PERIC1 0x063c
  78. #define DIV_TOP_PERIC2 0x0640
  79. #define DIV_TOP_PERIC3 0x0644
  80. #define DIV_TOP_PERIC4 0x0648
  81. #define DIV_TOP_PLL_FREQ_DET 0x064c
  82. #define DIV_STAT_TOP0 0x0700
  83. #define DIV_STAT_TOP1 0x0704
  84. #define DIV_STAT_TOP2 0x0708
  85. #define DIV_STAT_TOP3 0x070c
  86. #define DIV_STAT_TOP4 0x0710
  87. #define DIV_STAT_TOP_MSCL 0x0718
  88. #define DIV_STAT_TOP_CAM10 0x071c
  89. #define DIV_STAT_TOP_CAM11 0x0720
  90. #define DIV_STAT_TOP_FSYS0 0x072c
  91. #define DIV_STAT_TOP_FSYS1 0x0730
  92. #define DIV_STAT_TOP_FSYS2 0x0734
  93. #define DIV_STAT_TOP_PERIC0 0x0738
  94. #define DIV_STAT_TOP_PERIC1 0x073c
  95. #define DIV_STAT_TOP_PERIC2 0x0740
  96. #define DIV_STAT_TOP_PERIC3 0x0744
  97. #define DIV_STAT_TOP_PLL_FREQ_DET 0x074c
  98. #define ENABLE_ACLK_TOP 0x0800
  99. #define ENABLE_SCLK_TOP 0x0a00
  100. #define ENABLE_SCLK_TOP_MSCL 0x0a04
  101. #define ENABLE_SCLK_TOP_CAM1 0x0a08
  102. #define ENABLE_SCLK_TOP_DISP 0x0a0c
  103. #define ENABLE_SCLK_TOP_FSYS 0x0a10
  104. #define ENABLE_SCLK_TOP_PERIC 0x0a14
  105. #define ENABLE_IP_TOP 0x0b00
  106. #define ENABLE_CMU_TOP 0x0c00
  107. #define ENABLE_CMU_TOP_DIV_STAT 0x0c04
  108. static const unsigned long top_clk_regs[] __initconst = {
  109. ISP_PLL_LOCK,
  110. AUD_PLL_LOCK,
  111. ISP_PLL_CON0,
  112. ISP_PLL_CON1,
  113. ISP_PLL_FREQ_DET,
  114. AUD_PLL_CON0,
  115. AUD_PLL_CON1,
  116. AUD_PLL_CON2,
  117. AUD_PLL_FREQ_DET,
  118. MUX_SEL_TOP0,
  119. MUX_SEL_TOP1,
  120. MUX_SEL_TOP2,
  121. MUX_SEL_TOP3,
  122. MUX_SEL_TOP4,
  123. MUX_SEL_TOP_MSCL,
  124. MUX_SEL_TOP_CAM1,
  125. MUX_SEL_TOP_DISP,
  126. MUX_SEL_TOP_FSYS0,
  127. MUX_SEL_TOP_FSYS1,
  128. MUX_SEL_TOP_PERIC0,
  129. MUX_SEL_TOP_PERIC1,
  130. MUX_ENABLE_TOP0,
  131. MUX_ENABLE_TOP1,
  132. MUX_ENABLE_TOP2,
  133. MUX_ENABLE_TOP3,
  134. MUX_ENABLE_TOP4,
  135. MUX_ENABLE_TOP_MSCL,
  136. MUX_ENABLE_TOP_CAM1,
  137. MUX_ENABLE_TOP_DISP,
  138. MUX_ENABLE_TOP_FSYS0,
  139. MUX_ENABLE_TOP_FSYS1,
  140. MUX_ENABLE_TOP_PERIC0,
  141. MUX_ENABLE_TOP_PERIC1,
  142. DIV_TOP0,
  143. DIV_TOP1,
  144. DIV_TOP2,
  145. DIV_TOP3,
  146. DIV_TOP4,
  147. DIV_TOP_MSCL,
  148. DIV_TOP_CAM10,
  149. DIV_TOP_CAM11,
  150. DIV_TOP_FSYS0,
  151. DIV_TOP_FSYS1,
  152. DIV_TOP_FSYS2,
  153. DIV_TOP_PERIC0,
  154. DIV_TOP_PERIC1,
  155. DIV_TOP_PERIC2,
  156. DIV_TOP_PERIC3,
  157. DIV_TOP_PERIC4,
  158. DIV_TOP_PLL_FREQ_DET,
  159. ENABLE_ACLK_TOP,
  160. ENABLE_SCLK_TOP,
  161. ENABLE_SCLK_TOP_MSCL,
  162. ENABLE_SCLK_TOP_CAM1,
  163. ENABLE_SCLK_TOP_DISP,
  164. ENABLE_SCLK_TOP_FSYS,
  165. ENABLE_SCLK_TOP_PERIC,
  166. ENABLE_IP_TOP,
  167. ENABLE_CMU_TOP,
  168. ENABLE_CMU_TOP_DIV_STAT,
  169. };
  170. /* list of all parent clock list */
  171. PNAME(mout_aud_pll_p) = { "oscclk", "fout_aud_pll", };
  172. PNAME(mout_isp_pll_p) = { "oscclk", "fout_isp_pll", };
  173. PNAME(mout_aud_pll_user_p) = { "oscclk", "mout_aud_pll", };
  174. PNAME(mout_mphy_pll_user_p) = { "oscclk", "sclk_mphy_pll", };
  175. PNAME(mout_mfc_pll_user_p) = { "oscclk", "sclk_mfc_pll", };
  176. PNAME(mout_bus_pll_user_p) = { "oscclk", "sclk_bus_pll", };
  177. PNAME(mout_bus_pll_user_t_p) = { "oscclk", "mout_bus_pll_user", };
  178. PNAME(mout_mphy_pll_user_t_p) = { "oscclk", "mout_mphy_pll_user", };
  179. PNAME(mout_bus_mfc_pll_user_p) = { "mout_bus_pll_user", "mout_mfc_pll_user",};
  180. PNAME(mout_mfc_bus_pll_user_p) = { "mout_mfc_pll_user", "mout_bus_pll_user",};
  181. PNAME(mout_aclk_cam1_552_b_p) = { "mout_aclk_cam1_552_a",
  182. "mout_mfc_pll_user", };
  183. PNAME(mout_aclk_cam1_552_a_p) = { "mout_isp_pll", "mout_bus_pll_user", };
  184. PNAME(mout_aclk_mfc_400_c_p) = { "mout_aclk_mfc_400_b",
  185. "mout_mphy_pll_user", };
  186. PNAME(mout_aclk_mfc_400_b_p) = { "mout_aclk_mfc_400_a",
  187. "mout_bus_pll_user", };
  188. PNAME(mout_aclk_mfc_400_a_p) = { "mout_mfc_pll_user", "mout_isp_pll", };
  189. PNAME(mout_bus_mphy_pll_user_p) = { "mout_bus_pll_user",
  190. "mout_mphy_pll_user", };
  191. PNAME(mout_aclk_mscl_b_p) = { "mout_aclk_mscl_400_a",
  192. "mout_mphy_pll_user", };
  193. PNAME(mout_aclk_g2d_400_b_p) = { "mout_aclk_g2d_400_a",
  194. "mout_mphy_pll_user", };
  195. PNAME(mout_sclk_jpeg_c_p) = { "mout_sclk_jpeg_b", "mout_mphy_pll_user",};
  196. PNAME(mout_sclk_jpeg_b_p) = { "mout_sclk_jpeg_a", "mout_mfc_pll_user", };
  197. PNAME(mout_sclk_mmc2_b_p) = { "mout_sclk_mmc2_a", "mout_mfc_pll_user",};
  198. PNAME(mout_sclk_mmc1_b_p) = { "mout_sclk_mmc1_a", "mout_mfc_pll_user",};
  199. PNAME(mout_sclk_mmc0_d_p) = { "mout_sclk_mmc0_c", "mout_isp_pll", };
  200. PNAME(mout_sclk_mmc0_c_p) = { "mout_sclk_mmc0_b", "mout_mphy_pll_user",};
  201. PNAME(mout_sclk_mmc0_b_p) = { "mout_sclk_mmc0_a", "mout_mfc_pll_user", };
  202. PNAME(mout_sclk_spdif_p) = { "sclk_audio0", "sclk_audio1",
  203. "oscclk", "ioclk_spdif_extclk", };
  204. PNAME(mout_sclk_audio1_p) = { "ioclk_audiocdclk1", "oscclk",
  205. "mout_aud_pll_user_t",};
  206. PNAME(mout_sclk_audio0_p) = { "ioclk_audiocdclk0", "oscclk",
  207. "mout_aud_pll_user_t",};
  208. PNAME(mout_sclk_hdmi_spdif_p) = { "sclk_audio1", "ioclk_spdif_extclk", };
  209. static const struct samsung_fixed_factor_clock top_fixed_factor_clks[] __initconst = {
  210. FFACTOR(0, "oscclk_efuse_common", "oscclk", 1, 1, 0),
  211. };
  212. static const struct samsung_fixed_rate_clock top_fixed_clks[] __initconst = {
  213. /* Xi2s{0|1}CDCLK input clock for I2S/PCM */
  214. FRATE(0, "ioclk_audiocdclk1", NULL, 0, 100000000),
  215. FRATE(0, "ioclk_audiocdclk0", NULL, 0, 100000000),
  216. /* Xi2s1SDI input clock for SPDIF */
  217. FRATE(0, "ioclk_spdif_extclk", NULL, 0, 100000000),
  218. /* XspiCLK[4:0] input clock for SPI */
  219. FRATE(0, "ioclk_spi4_clk_in", NULL, 0, 50000000),
  220. FRATE(0, "ioclk_spi3_clk_in", NULL, 0, 50000000),
  221. FRATE(0, "ioclk_spi2_clk_in", NULL, 0, 50000000),
  222. FRATE(0, "ioclk_spi1_clk_in", NULL, 0, 50000000),
  223. FRATE(0, "ioclk_spi0_clk_in", NULL, 0, 50000000),
  224. /* Xi2s1SCLK input clock for I2S1_BCLK */
  225. FRATE(0, "ioclk_i2s1_bclk_in", NULL, 0, 12288000),
  226. };
  227. static const struct samsung_mux_clock top_mux_clks[] __initconst = {
  228. /* MUX_SEL_TOP0 */
  229. MUX(CLK_MOUT_AUD_PLL, "mout_aud_pll", mout_aud_pll_p, MUX_SEL_TOP0,
  230. 4, 1),
  231. MUX(CLK_MOUT_ISP_PLL, "mout_isp_pll", mout_isp_pll_p, MUX_SEL_TOP0,
  232. 0, 1),
  233. /* MUX_SEL_TOP1 */
  234. MUX(CLK_MOUT_AUD_PLL_USER_T, "mout_aud_pll_user_t",
  235. mout_aud_pll_user_p, MUX_SEL_TOP1, 12, 1),
  236. MUX(CLK_MOUT_MPHY_PLL_USER, "mout_mphy_pll_user", mout_mphy_pll_user_p,
  237. MUX_SEL_TOP1, 8, 1),
  238. MUX(CLK_MOUT_MFC_PLL_USER, "mout_mfc_pll_user", mout_mfc_pll_user_p,
  239. MUX_SEL_TOP1, 4, 1),
  240. MUX(CLK_MOUT_BUS_PLL_USER, "mout_bus_pll_user", mout_bus_pll_user_p,
  241. MUX_SEL_TOP1, 0, 1),
  242. /* MUX_SEL_TOP2 */
  243. MUX(CLK_MOUT_ACLK_HEVC_400, "mout_aclk_hevc_400",
  244. mout_bus_mfc_pll_user_p, MUX_SEL_TOP2, 28, 1),
  245. MUX(CLK_MOUT_ACLK_CAM1_333, "mout_aclk_cam1_333",
  246. mout_mfc_bus_pll_user_p, MUX_SEL_TOP2, 16, 1),
  247. MUX(CLK_MOUT_ACLK_CAM1_552_B, "mout_aclk_cam1_552_b",
  248. mout_aclk_cam1_552_b_p, MUX_SEL_TOP2, 12, 1),
  249. MUX(CLK_MOUT_ACLK_CAM1_552_A, "mout_aclk_cam1_552_a",
  250. mout_aclk_cam1_552_a_p, MUX_SEL_TOP2, 8, 1),
  251. MUX(CLK_MOUT_ACLK_ISP_DIS_400, "mout_aclk_isp_dis_400",
  252. mout_bus_mfc_pll_user_p, MUX_SEL_TOP2, 4, 1),
  253. MUX(CLK_MOUT_ACLK_ISP_400, "mout_aclk_isp_400",
  254. mout_bus_mfc_pll_user_p, MUX_SEL_TOP2, 0, 1),
  255. /* MUX_SEL_TOP3 */
  256. MUX(CLK_MOUT_ACLK_BUS0_400, "mout_aclk_bus0_400",
  257. mout_bus_mphy_pll_user_p, MUX_SEL_TOP3, 20, 1),
  258. MUX(CLK_MOUT_ACLK_MSCL_400_B, "mout_aclk_mscl_400_b",
  259. mout_aclk_mscl_b_p, MUX_SEL_TOP3, 16, 1),
  260. MUX(CLK_MOUT_ACLK_MSCL_400_A, "mout_aclk_mscl_400_a",
  261. mout_bus_mfc_pll_user_p, MUX_SEL_TOP3, 12, 1),
  262. MUX(CLK_MOUT_ACLK_GSCL_333, "mout_aclk_gscl_333",
  263. mout_mfc_bus_pll_user_p, MUX_SEL_TOP3, 8, 1),
  264. MUX(CLK_MOUT_ACLK_G2D_400_B, "mout_aclk_g2d_400_b",
  265. mout_aclk_g2d_400_b_p, MUX_SEL_TOP3, 4, 1),
  266. MUX(CLK_MOUT_ACLK_G2D_400_A, "mout_aclk_g2d_400_a",
  267. mout_bus_mfc_pll_user_p, MUX_SEL_TOP3, 0, 1),
  268. /* MUX_SEL_TOP4 */
  269. MUX(CLK_MOUT_ACLK_MFC_400_C, "mout_aclk_mfc_400_c",
  270. mout_aclk_mfc_400_c_p, MUX_SEL_TOP4, 8, 1),
  271. MUX(CLK_MOUT_ACLK_MFC_400_B, "mout_aclk_mfc_400_b",
  272. mout_aclk_mfc_400_b_p, MUX_SEL_TOP4, 4, 1),
  273. MUX(CLK_MOUT_ACLK_MFC_400_A, "mout_aclk_mfc_400_a",
  274. mout_aclk_mfc_400_a_p, MUX_SEL_TOP4, 0, 1),
  275. /* MUX_SEL_TOP_MSCL */
  276. MUX(CLK_MOUT_SCLK_JPEG_C, "mout_sclk_jpeg_c", mout_sclk_jpeg_c_p,
  277. MUX_SEL_TOP_MSCL, 8, 1),
  278. MUX(CLK_MOUT_SCLK_JPEG_B, "mout_sclk_jpeg_b", mout_sclk_jpeg_b_p,
  279. MUX_SEL_TOP_MSCL, 4, 1),
  280. MUX(CLK_MOUT_SCLK_JPEG_A, "mout_sclk_jpeg_a", mout_bus_pll_user_t_p,
  281. MUX_SEL_TOP_MSCL, 0, 1),
  282. /* MUX_SEL_TOP_CAM1 */
  283. MUX(CLK_MOUT_SCLK_ISP_SENSOR2, "mout_sclk_isp_sensor2",
  284. mout_bus_pll_user_t_p, MUX_SEL_TOP_CAM1, 24, 1),
  285. MUX(CLK_MOUT_SCLK_ISP_SENSOR1, "mout_sclk_isp_sensor1",
  286. mout_bus_pll_user_t_p, MUX_SEL_TOP_CAM1, 20, 1),
  287. MUX(CLK_MOUT_SCLK_ISP_SENSOR0, "mout_sclk_isp_sensor0",
  288. mout_bus_pll_user_t_p, MUX_SEL_TOP_CAM1, 16, 1),
  289. MUX(CLK_MOUT_SCLK_ISP_UART, "mout_sclk_isp_uart",
  290. mout_bus_pll_user_t_p, MUX_SEL_TOP_CAM1, 8, 1),
  291. MUX(CLK_MOUT_SCLK_ISP_SPI1, "mout_sclk_isp_spi1",
  292. mout_bus_pll_user_t_p, MUX_SEL_TOP_CAM1, 4, 1),
  293. MUX(CLK_MOUT_SCLK_ISP_SPI0, "mout_sclk_isp_spi0",
  294. mout_bus_pll_user_t_p, MUX_SEL_TOP_CAM1, 0, 1),
  295. /* MUX_SEL_TOP_FSYS0 */
  296. MUX(CLK_MOUT_SCLK_MMC2_B, "mout_sclk_mmc2_b", mout_sclk_mmc2_b_p,
  297. MUX_SEL_TOP_FSYS0, 28, 1),
  298. MUX(CLK_MOUT_SCLK_MMC2_A, "mout_sclk_mmc2_a", mout_bus_pll_user_t_p,
  299. MUX_SEL_TOP_FSYS0, 24, 1),
  300. MUX(CLK_MOUT_SCLK_MMC1_B, "mout_sclk_mmc1_b", mout_sclk_mmc1_b_p,
  301. MUX_SEL_TOP_FSYS0, 20, 1),
  302. MUX(CLK_MOUT_SCLK_MMC1_A, "mout_sclk_mmc1_a", mout_bus_pll_user_t_p,
  303. MUX_SEL_TOP_FSYS0, 16, 1),
  304. MUX(CLK_MOUT_SCLK_MMC0_D, "mout_sclk_mmc0_d", mout_sclk_mmc0_d_p,
  305. MUX_SEL_TOP_FSYS0, 12, 1),
  306. MUX(CLK_MOUT_SCLK_MMC0_C, "mout_sclk_mmc0_c", mout_sclk_mmc0_c_p,
  307. MUX_SEL_TOP_FSYS0, 8, 1),
  308. MUX(CLK_MOUT_SCLK_MMC0_B, "mout_sclk_mmc0_b", mout_sclk_mmc0_b_p,
  309. MUX_SEL_TOP_FSYS0, 4, 1),
  310. MUX(CLK_MOUT_SCLK_MMC0_A, "mout_sclk_mmc0_a", mout_bus_pll_user_t_p,
  311. MUX_SEL_TOP_FSYS0, 0, 1),
  312. /* MUX_SEL_TOP_FSYS1 */
  313. MUX(CLK_MOUT_SCLK_PCIE_100, "mout_sclk_pcie_100", mout_bus_pll_user_t_p,
  314. MUX_SEL_TOP_FSYS1, 12, 1),
  315. MUX(CLK_MOUT_SCLK_UFSUNIPRO, "mout_sclk_ufsunipro",
  316. mout_mphy_pll_user_t_p, MUX_SEL_TOP_FSYS1, 8, 1),
  317. MUX(CLK_MOUT_SCLK_USBHOST30, "mout_sclk_usbhost30",
  318. mout_bus_pll_user_t_p, MUX_SEL_TOP_FSYS1, 4, 1),
  319. MUX(CLK_MOUT_SCLK_USBDRD30, "mout_sclk_usbdrd30",
  320. mout_bus_pll_user_t_p, MUX_SEL_TOP_FSYS1, 0, 1),
  321. /* MUX_SEL_TOP_PERIC0 */
  322. MUX(CLK_MOUT_SCLK_SPI4, "mout_sclk_spi4", mout_bus_pll_user_t_p,
  323. MUX_SEL_TOP_PERIC0, 28, 1),
  324. MUX(CLK_MOUT_SCLK_SPI3, "mout_sclk_spi3", mout_bus_pll_user_t_p,
  325. MUX_SEL_TOP_PERIC0, 24, 1),
  326. MUX(CLK_MOUT_SCLK_UART2, "mout_sclk_uart2", mout_bus_pll_user_t_p,
  327. MUX_SEL_TOP_PERIC0, 20, 1),
  328. MUX(CLK_MOUT_SCLK_UART1, "mout_sclk_uart1", mout_bus_pll_user_t_p,
  329. MUX_SEL_TOP_PERIC0, 16, 1),
  330. MUX(CLK_MOUT_SCLK_UART0, "mout_sclk_uart0", mout_bus_pll_user_t_p,
  331. MUX_SEL_TOP_PERIC0, 12, 1),
  332. MUX(CLK_MOUT_SCLK_SPI2, "mout_sclk_spi2", mout_bus_pll_user_t_p,
  333. MUX_SEL_TOP_PERIC0, 8, 1),
  334. MUX(CLK_MOUT_SCLK_SPI1, "mout_sclk_spi1", mout_bus_pll_user_t_p,
  335. MUX_SEL_TOP_PERIC0, 4, 1),
  336. MUX(CLK_MOUT_SCLK_SPI0, "mout_sclk_spi0", mout_bus_pll_user_t_p,
  337. MUX_SEL_TOP_PERIC0, 0, 1),
  338. /* MUX_SEL_TOP_PERIC1 */
  339. MUX(CLK_MOUT_SCLK_SLIMBUS, "mout_sclk_slimbus", mout_aud_pll_user_p,
  340. MUX_SEL_TOP_PERIC1, 16, 1),
  341. MUX(CLK_MOUT_SCLK_SPDIF, "mout_sclk_spdif", mout_sclk_spdif_p,
  342. MUX_SEL_TOP_PERIC1, 12, 2),
  343. MUX(CLK_MOUT_SCLK_AUDIO1, "mout_sclk_audio1", mout_sclk_audio1_p,
  344. MUX_SEL_TOP_PERIC1, 4, 2),
  345. MUX(CLK_MOUT_SCLK_AUDIO0, "mout_sclk_audio0", mout_sclk_audio0_p,
  346. MUX_SEL_TOP_PERIC1, 0, 2),
  347. /* MUX_SEL_TOP_DISP */
  348. MUX(CLK_MOUT_SCLK_HDMI_SPDIF, "mout_sclk_hdmi_spdif",
  349. mout_sclk_hdmi_spdif_p, MUX_SEL_TOP_DISP, 0, 1),
  350. };
  351. static const struct samsung_div_clock top_div_clks[] __initconst = {
  352. /* DIV_TOP0 */
  353. DIV(CLK_DIV_ACLK_CAM1_333, "div_aclk_cam1_333", "mout_aclk_cam1_333",
  354. DIV_TOP0, 28, 3),
  355. DIV(CLK_DIV_ACLK_CAM1_400, "div_aclk_cam1_400", "mout_bus_pll_user",
  356. DIV_TOP0, 24, 3),
  357. DIV(CLK_DIV_ACLK_CAM1_552, "div_aclk_cam1_552", "mout_aclk_cam1_552_b",
  358. DIV_TOP0, 20, 3),
  359. DIV(CLK_DIV_ACLK_CAM0_333, "div_aclk_cam0_333", "mout_mfc_pll_user",
  360. DIV_TOP0, 16, 3),
  361. DIV(CLK_DIV_ACLK_CAM0_400, "div_aclk_cam0_400", "mout_bus_pll_user",
  362. DIV_TOP0, 12, 3),
  363. DIV(CLK_DIV_ACLK_CAM0_552, "div_aclk_cam0_552", "mout_isp_pll",
  364. DIV_TOP0, 8, 3),
  365. DIV(CLK_DIV_ACLK_ISP_DIS_400, "div_aclk_isp_dis_400",
  366. "mout_aclk_isp_dis_400", DIV_TOP0, 4, 4),
  367. DIV(CLK_DIV_ACLK_ISP_400, "div_aclk_isp_400",
  368. "mout_aclk_isp_400", DIV_TOP0, 0, 4),
  369. /* DIV_TOP1 */
  370. DIV(CLK_DIV_ACLK_GSCL_111, "div_aclk_gscl_111", "mout_aclk_gscl_333",
  371. DIV_TOP1, 28, 3),
  372. DIV(CLK_DIV_ACLK_GSCL_333, "div_aclk_gscl_333", "mout_aclk_gscl_333",
  373. DIV_TOP1, 24, 3),
  374. DIV(CLK_DIV_ACLK_HEVC_400, "div_aclk_hevc_400", "mout_aclk_hevc_400",
  375. DIV_TOP1, 20, 3),
  376. DIV(CLK_DIV_ACLK_MFC_400, "div_aclk_mfc_400", "mout_aclk_mfc_400_c",
  377. DIV_TOP1, 12, 3),
  378. DIV(CLK_DIV_ACLK_G2D_266, "div_aclk_g2d_266", "mout_bus_pll_user",
  379. DIV_TOP1, 8, 3),
  380. DIV(CLK_DIV_ACLK_G2D_400, "div_aclk_g2d_400", "mout_aclk_g2d_400_b",
  381. DIV_TOP1, 0, 3),
  382. /* DIV_TOP2 */
  383. DIV(CLK_DIV_ACLK_MSCL_400, "div_aclk_mscl_400", "mout_aclk_mscl_400_b",
  384. DIV_TOP2, 4, 3),
  385. DIV(CLK_DIV_ACLK_FSYS_200, "div_aclk_fsys_200", "mout_bus_pll_user",
  386. DIV_TOP2, 0, 3),
  387. /* DIV_TOP3 */
  388. DIV(CLK_DIV_ACLK_IMEM_SSSX_266, "div_aclk_imem_sssx_266",
  389. "mout_bus_pll_user", DIV_TOP3, 24, 3),
  390. DIV(CLK_DIV_ACLK_IMEM_200, "div_aclk_imem_200",
  391. "mout_bus_pll_user", DIV_TOP3, 20, 3),
  392. DIV(CLK_DIV_ACLK_IMEM_266, "div_aclk_imem_266",
  393. "mout_bus_pll_user", DIV_TOP3, 16, 3),
  394. DIV(CLK_DIV_ACLK_PERIC_66_B, "div_aclk_peric_66_b",
  395. "div_aclk_peric_66_a", DIV_TOP3, 12, 3),
  396. DIV(CLK_DIV_ACLK_PERIC_66_A, "div_aclk_peric_66_a",
  397. "mout_bus_pll_user", DIV_TOP3, 8, 3),
  398. DIV(CLK_DIV_ACLK_PERIS_66_B, "div_aclk_peris_66_b",
  399. "div_aclk_peris_66_a", DIV_TOP3, 4, 3),
  400. DIV(CLK_DIV_ACLK_PERIS_66_A, "div_aclk_peris_66_a",
  401. "mout_bus_pll_user", DIV_TOP3, 0, 3),
  402. /* DIV_TOP4 */
  403. DIV(CLK_DIV_ACLK_G3D_400, "div_aclk_g3d_400", "mout_bus_pll_user",
  404. DIV_TOP4, 8, 3),
  405. DIV(CLK_DIV_ACLK_BUS0_400, "div_aclk_bus0_400", "mout_aclk_bus0_400",
  406. DIV_TOP4, 4, 3),
  407. DIV(CLK_DIV_ACLK_BUS1_400, "div_aclk_bus1_400", "mout_bus_pll_user",
  408. DIV_TOP4, 0, 3),
  409. /* DIV_TOP_MSCL */
  410. DIV(CLK_DIV_SCLK_JPEG, "div_sclk_jpeg", "mout_sclk_jpeg_c",
  411. DIV_TOP_MSCL, 0, 4),
  412. /* DIV_TOP_CAM10 */
  413. DIV(CLK_DIV_SCLK_ISP_UART, "div_sclk_isp_uart", "mout_sclk_isp_uart",
  414. DIV_TOP_CAM10, 24, 5),
  415. DIV(CLK_DIV_SCLK_ISP_SPI1_B, "div_sclk_isp_spi1_b",
  416. "div_sclk_isp_spi1_a", DIV_TOP_CAM10, 16, 8),
  417. DIV(CLK_DIV_SCLK_ISP_SPI1_A, "div_sclk_isp_spi1_a",
  418. "mout_sclk_isp_spi1", DIV_TOP_CAM10, 12, 4),
  419. DIV(CLK_DIV_SCLK_ISP_SPI0_B, "div_sclk_isp_spi0_b",
  420. "div_sclk_isp_spi0_a", DIV_TOP_CAM10, 4, 8),
  421. DIV(CLK_DIV_SCLK_ISP_SPI0_A, "div_sclk_isp_spi0_a",
  422. "mout_sclk_isp_spi0", DIV_TOP_CAM10, 0, 4),
  423. /* DIV_TOP_CAM11 */
  424. DIV(CLK_DIV_SCLK_ISP_SENSOR2_B, "div_sclk_isp_sensor2_b",
  425. "div_sclk_isp_sensor2_a", DIV_TOP_CAM11, 20, 4),
  426. DIV(CLK_DIV_SCLK_ISP_SENSOR2_A, "div_sclk_isp_sensor2_a",
  427. "mout_sclk_isp_sensor2", DIV_TOP_CAM11, 16, 4),
  428. DIV(CLK_DIV_SCLK_ISP_SENSOR1_B, "div_sclk_isp_sensor1_b",
  429. "div_sclk_isp_sensor1_a", DIV_TOP_CAM11, 12, 4),
  430. DIV(CLK_DIV_SCLK_ISP_SENSOR1_A, "div_sclk_isp_sensor1_a",
  431. "mout_sclk_isp_sensor1", DIV_TOP_CAM11, 8, 4),
  432. DIV(CLK_DIV_SCLK_ISP_SENSOR0_B, "div_sclk_isp_sensor0_b",
  433. "div_sclk_isp_sensor0_a", DIV_TOP_CAM11, 4, 4),
  434. DIV(CLK_DIV_SCLK_ISP_SENSOR0_A, "div_sclk_isp_sensor0_a",
  435. "mout_sclk_isp_sensor0", DIV_TOP_CAM11, 0, 4),
  436. /* DIV_TOP_FSYS0 */
  437. DIV(CLK_DIV_SCLK_MMC1_B, "div_sclk_mmc1_b", "div_sclk_mmc1_a",
  438. DIV_TOP_FSYS0, 16, 8),
  439. DIV(CLK_DIV_SCLK_MMC1_A, "div_sclk_mmc1_a", "mout_sclk_mmc1_b",
  440. DIV_TOP_FSYS0, 12, 4),
  441. DIV_F(CLK_DIV_SCLK_MMC0_B, "div_sclk_mmc0_b", "div_sclk_mmc0_a",
  442. DIV_TOP_FSYS0, 4, 8, CLK_SET_RATE_PARENT, 0),
  443. DIV_F(CLK_DIV_SCLK_MMC0_A, "div_sclk_mmc0_a", "mout_sclk_mmc0_d",
  444. DIV_TOP_FSYS0, 0, 4, CLK_SET_RATE_PARENT, 0),
  445. /* DIV_TOP_FSYS1 */
  446. DIV(CLK_DIV_SCLK_MMC2_B, "div_sclk_mmc2_b", "div_sclk_mmc2_a",
  447. DIV_TOP_FSYS1, 4, 8),
  448. DIV(CLK_DIV_SCLK_MMC2_A, "div_sclk_mmc2_a", "mout_sclk_mmc2_b",
  449. DIV_TOP_FSYS1, 0, 4),
  450. /* DIV_TOP_FSYS2 */
  451. DIV(CLK_DIV_SCLK_PCIE_100, "div_sclk_pcie_100", "mout_sclk_pcie_100",
  452. DIV_TOP_FSYS2, 12, 3),
  453. DIV(CLK_DIV_SCLK_USBHOST30, "div_sclk_usbhost30",
  454. "mout_sclk_usbhost30", DIV_TOP_FSYS2, 8, 4),
  455. DIV(CLK_DIV_SCLK_UFSUNIPRO, "div_sclk_ufsunipro",
  456. "mout_sclk_ufsunipro", DIV_TOP_FSYS2, 4, 4),
  457. DIV(CLK_DIV_SCLK_USBDRD30, "div_sclk_usbdrd30", "mout_sclk_usbdrd30",
  458. DIV_TOP_FSYS2, 0, 4),
  459. /* DIV_TOP_PERIC0 */
  460. DIV(CLK_DIV_SCLK_SPI1_B, "div_sclk_spi1_b", "div_sclk_spi1_a",
  461. DIV_TOP_PERIC0, 16, 8),
  462. DIV(CLK_DIV_SCLK_SPI1_A, "div_sclk_spi1_a", "mout_sclk_spi1",
  463. DIV_TOP_PERIC0, 12, 4),
  464. DIV(CLK_DIV_SCLK_SPI0_B, "div_sclk_spi0_b", "div_sclk_spi0_a",
  465. DIV_TOP_PERIC0, 4, 8),
  466. DIV(CLK_DIV_SCLK_SPI0_A, "div_sclk_spi0_a", "mout_sclk_spi0",
  467. DIV_TOP_PERIC0, 0, 4),
  468. /* DIV_TOP_PERIC1 */
  469. DIV(CLK_DIV_SCLK_SPI2_B, "div_sclk_spi2_b", "div_sclk_spi2_a",
  470. DIV_TOP_PERIC1, 4, 8),
  471. DIV(CLK_DIV_SCLK_SPI2_A, "div_sclk_spi2_a", "mout_sclk_spi2",
  472. DIV_TOP_PERIC1, 0, 4),
  473. /* DIV_TOP_PERIC2 */
  474. DIV(CLK_DIV_SCLK_UART2, "div_sclk_uart2", "mout_sclk_uart2",
  475. DIV_TOP_PERIC2, 8, 4),
  476. DIV(CLK_DIV_SCLK_UART1, "div_sclk_uart1", "mout_sclk_uart0",
  477. DIV_TOP_PERIC2, 4, 4),
  478. DIV(CLK_DIV_SCLK_UART0, "div_sclk_uart0", "mout_sclk_uart1",
  479. DIV_TOP_PERIC2, 0, 4),
  480. /* DIV_TOP_PERIC3 */
  481. DIV(CLK_DIV_SCLK_I2S1, "div_sclk_i2s1", "sclk_audio1",
  482. DIV_TOP_PERIC3, 16, 6),
  483. DIV(CLK_DIV_SCLK_PCM1, "div_sclk_pcm1", "sclk_audio1",
  484. DIV_TOP_PERIC3, 8, 8),
  485. DIV(CLK_DIV_SCLK_AUDIO1, "div_sclk_audio1", "mout_sclk_audio1",
  486. DIV_TOP_PERIC3, 4, 4),
  487. DIV(CLK_DIV_SCLK_AUDIO0, "div_sclk_audio0", "mout_sclk_audio0",
  488. DIV_TOP_PERIC3, 0, 4),
  489. /* DIV_TOP_PERIC4 */
  490. DIV(CLK_DIV_SCLK_SPI4_B, "div_sclk_spi4_b", "div_sclk_spi4_a",
  491. DIV_TOP_PERIC4, 16, 8),
  492. DIV(CLK_DIV_SCLK_SPI4_A, "div_sclk_spi4_a", "mout_sclk_spi4",
  493. DIV_TOP_PERIC4, 12, 4),
  494. DIV(CLK_DIV_SCLK_SPI3_B, "div_sclk_spi3_b", "div_sclk_spi3_a",
  495. DIV_TOP_PERIC4, 4, 8),
  496. DIV(CLK_DIV_SCLK_SPI3_A, "div_sclk_spi3_a", "mout_sclk_spi3",
  497. DIV_TOP_PERIC4, 0, 4),
  498. };
  499. static const struct samsung_gate_clock top_gate_clks[] __initconst = {
  500. /* ENABLE_ACLK_TOP */
  501. GATE(CLK_ACLK_G3D_400, "aclk_g3d_400", "div_aclk_g3d_400",
  502. ENABLE_ACLK_TOP, 30, 0, 0),
  503. GATE(CLK_ACLK_IMEM_SSX_266, "aclk_imem_ssx_266",
  504. "div_aclk_imem_sssx_266", ENABLE_ACLK_TOP,
  505. 29, CLK_IGNORE_UNUSED, 0),
  506. GATE(CLK_ACLK_BUS0_400, "aclk_bus0_400", "div_aclk_bus0_400",
  507. ENABLE_ACLK_TOP, 26,
  508. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  509. GATE(CLK_ACLK_BUS1_400, "aclk_bus1_400", "div_aclk_bus1_400",
  510. ENABLE_ACLK_TOP, 25,
  511. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  512. GATE(CLK_ACLK_IMEM_200, "aclk_imem_200", "div_aclk_imem_266",
  513. ENABLE_ACLK_TOP, 24,
  514. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  515. GATE(CLK_ACLK_IMEM_266, "aclk_imem_266", "div_aclk_imem_200",
  516. ENABLE_ACLK_TOP, 23,
  517. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  518. GATE(CLK_ACLK_PERIC_66, "aclk_peric_66", "div_aclk_peric_66_b",
  519. ENABLE_ACLK_TOP, 22,
  520. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  521. GATE(CLK_ACLK_PERIS_66, "aclk_peris_66", "div_aclk_peris_66_b",
  522. ENABLE_ACLK_TOP, 21,
  523. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  524. GATE(CLK_ACLK_MSCL_400, "aclk_mscl_400", "div_aclk_mscl_400",
  525. ENABLE_ACLK_TOP, 19,
  526. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  527. GATE(CLK_ACLK_FSYS_200, "aclk_fsys_200", "div_aclk_fsys_200",
  528. ENABLE_ACLK_TOP, 18,
  529. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  530. GATE(CLK_ACLK_GSCL_111, "aclk_gscl_111", "div_aclk_gscl_111",
  531. ENABLE_ACLK_TOP, 15,
  532. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  533. GATE(CLK_ACLK_GSCL_333, "aclk_gscl_333", "div_aclk_gscl_333",
  534. ENABLE_ACLK_TOP, 14,
  535. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  536. GATE(CLK_ACLK_CAM1_333, "aclk_cam1_333", "div_aclk_cam1_333",
  537. ENABLE_ACLK_TOP, 13,
  538. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  539. GATE(CLK_ACLK_CAM1_400, "aclk_cam1_400", "div_aclk_cam1_400",
  540. ENABLE_ACLK_TOP, 12,
  541. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  542. GATE(CLK_ACLK_CAM1_552, "aclk_cam1_552", "div_aclk_cam1_552",
  543. ENABLE_ACLK_TOP, 11,
  544. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  545. GATE(CLK_ACLK_CAM0_333, "aclk_cam0_333", "div_aclk_cam0_333",
  546. ENABLE_ACLK_TOP, 10,
  547. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  548. GATE(CLK_ACLK_CAM0_400, "aclk_cam0_400", "div_aclk_cam0_400",
  549. ENABLE_ACLK_TOP, 9,
  550. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  551. GATE(CLK_ACLK_CAM0_552, "aclk_cam0_552", "div_aclk_cam0_552",
  552. ENABLE_ACLK_TOP, 8,
  553. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  554. GATE(CLK_ACLK_ISP_DIS_400, "aclk_isp_dis_400", "div_aclk_isp_dis_400",
  555. ENABLE_ACLK_TOP, 7,
  556. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  557. GATE(CLK_ACLK_ISP_400, "aclk_isp_400", "div_aclk_isp_400",
  558. ENABLE_ACLK_TOP, 6,
  559. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  560. GATE(CLK_ACLK_HEVC_400, "aclk_hevc_400", "div_aclk_hevc_400",
  561. ENABLE_ACLK_TOP, 5,
  562. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  563. GATE(CLK_ACLK_MFC_400, "aclk_mfc_400", "div_aclk_mfc_400",
  564. ENABLE_ACLK_TOP, 3,
  565. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  566. GATE(CLK_ACLK_G2D_266, "aclk_g2d_266", "div_aclk_g2d_266",
  567. ENABLE_ACLK_TOP, 2,
  568. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  569. GATE(CLK_ACLK_G2D_400, "aclk_g2d_400", "div_aclk_g2d_400",
  570. ENABLE_ACLK_TOP, 0,
  571. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  572. /* ENABLE_SCLK_TOP_MSCL */
  573. GATE(CLK_SCLK_JPEG_MSCL, "sclk_jpeg_mscl", "div_sclk_jpeg",
  574. ENABLE_SCLK_TOP_MSCL, 0, 0, 0),
  575. /* ENABLE_SCLK_TOP_CAM1 */
  576. GATE(CLK_SCLK_ISP_SENSOR2, "sclk_isp_sensor2", "div_sclk_isp_sensor2_b",
  577. ENABLE_SCLK_TOP_CAM1, 7, 0, 0),
  578. GATE(CLK_SCLK_ISP_SENSOR1, "sclk_isp_sensor1", "div_sclk_isp_sensor1_b",
  579. ENABLE_SCLK_TOP_CAM1, 6, 0, 0),
  580. GATE(CLK_SCLK_ISP_SENSOR0, "sclk_isp_sensor0", "div_sclk_isp_sensor0_b",
  581. ENABLE_SCLK_TOP_CAM1, 5, 0, 0),
  582. GATE(CLK_SCLK_ISP_MCTADC_CAM1, "sclk_isp_mctadc_cam1", "oscclk",
  583. ENABLE_SCLK_TOP_CAM1, 4, 0, 0),
  584. GATE(CLK_SCLK_ISP_UART_CAM1, "sclk_isp_uart_cam1", "div_sclk_isp_uart",
  585. ENABLE_SCLK_TOP_CAM1, 2, 0, 0),
  586. GATE(CLK_SCLK_ISP_SPI1_CAM1, "sclk_isp_spi1_cam1", "div_sclk_isp_spi1_b",
  587. ENABLE_SCLK_TOP_CAM1, 1, 0, 0),
  588. GATE(CLK_SCLK_ISP_SPI0_CAM1, "sclk_isp_spi0_cam1", "div_sclk_isp_spi0_b",
  589. ENABLE_SCLK_TOP_CAM1, 0, 0, 0),
  590. /* ENABLE_SCLK_TOP_DISP */
  591. GATE(CLK_SCLK_HDMI_SPDIF_DISP, "sclk_hdmi_spdif_disp",
  592. "mout_sclk_hdmi_spdif", ENABLE_SCLK_TOP_DISP, 0,
  593. CLK_IGNORE_UNUSED, 0),
  594. /* ENABLE_SCLK_TOP_FSYS */
  595. GATE(CLK_SCLK_PCIE_100_FSYS, "sclk_pcie_100_fsys", "div_sclk_pcie_100",
  596. ENABLE_SCLK_TOP_FSYS, 7, CLK_IGNORE_UNUSED, 0),
  597. GATE(CLK_SCLK_MMC2_FSYS, "sclk_mmc2_fsys", "div_sclk_mmc2_b",
  598. ENABLE_SCLK_TOP_FSYS, 6, CLK_SET_RATE_PARENT, 0),
  599. GATE(CLK_SCLK_MMC1_FSYS, "sclk_mmc1_fsys", "div_sclk_mmc1_b",
  600. ENABLE_SCLK_TOP_FSYS, 5, CLK_SET_RATE_PARENT, 0),
  601. GATE(CLK_SCLK_MMC0_FSYS, "sclk_mmc0_fsys", "div_sclk_mmc0_b",
  602. ENABLE_SCLK_TOP_FSYS, 4, CLK_SET_RATE_PARENT, 0),
  603. GATE(CLK_SCLK_UFSUNIPRO_FSYS, "sclk_ufsunipro_fsys",
  604. "div_sclk_ufsunipro", ENABLE_SCLK_TOP_FSYS,
  605. 3, CLK_SET_RATE_PARENT, 0),
  606. GATE(CLK_SCLK_USBHOST30_FSYS, "sclk_usbhost30_fsys",
  607. "div_sclk_usbhost30", ENABLE_SCLK_TOP_FSYS,
  608. 1, CLK_SET_RATE_PARENT, 0),
  609. GATE(CLK_SCLK_USBDRD30_FSYS, "sclk_usbdrd30_fsys",
  610. "div_sclk_usbdrd30", ENABLE_SCLK_TOP_FSYS,
  611. 0, CLK_SET_RATE_PARENT, 0),
  612. /* ENABLE_SCLK_TOP_PERIC */
  613. GATE(CLK_SCLK_SPI4_PERIC, "sclk_spi4_peric", "div_sclk_spi4_b",
  614. ENABLE_SCLK_TOP_PERIC, 12, CLK_SET_RATE_PARENT, 0),
  615. GATE(CLK_SCLK_SPI3_PERIC, "sclk_spi3_peric", "div_sclk_spi3_b",
  616. ENABLE_SCLK_TOP_PERIC, 11, CLK_SET_RATE_PARENT, 0),
  617. GATE(CLK_SCLK_SPDIF_PERIC, "sclk_spdif_peric", "mout_sclk_spdif",
  618. ENABLE_SCLK_TOP_PERIC, 9, CLK_SET_RATE_PARENT, 0),
  619. GATE(CLK_SCLK_I2S1_PERIC, "sclk_i2s1_peric", "div_sclk_i2s1",
  620. ENABLE_SCLK_TOP_PERIC, 8, CLK_SET_RATE_PARENT, 0),
  621. GATE(CLK_SCLK_PCM1_PERIC, "sclk_pcm1_peric", "div_sclk_pcm1",
  622. ENABLE_SCLK_TOP_PERIC, 7, CLK_SET_RATE_PARENT, 0),
  623. GATE(CLK_SCLK_UART2_PERIC, "sclk_uart2_peric", "div_sclk_uart2",
  624. ENABLE_SCLK_TOP_PERIC, 5, CLK_SET_RATE_PARENT |
  625. CLK_IGNORE_UNUSED, 0),
  626. GATE(CLK_SCLK_UART1_PERIC, "sclk_uart1_peric", "div_sclk_uart1",
  627. ENABLE_SCLK_TOP_PERIC, 4, CLK_SET_RATE_PARENT |
  628. CLK_IGNORE_UNUSED, 0),
  629. GATE(CLK_SCLK_UART0_PERIC, "sclk_uart0_peric", "div_sclk_uart0",
  630. ENABLE_SCLK_TOP_PERIC, 3, CLK_SET_RATE_PARENT |
  631. CLK_IGNORE_UNUSED, 0),
  632. GATE(CLK_SCLK_SPI2_PERIC, "sclk_spi2_peric", "div_sclk_spi2_b",
  633. ENABLE_SCLK_TOP_PERIC, 2, CLK_SET_RATE_PARENT, 0),
  634. GATE(CLK_SCLK_SPI1_PERIC, "sclk_spi1_peric", "div_sclk_spi1_b",
  635. ENABLE_SCLK_TOP_PERIC, 1, CLK_SET_RATE_PARENT, 0),
  636. GATE(CLK_SCLK_SPI0_PERIC, "sclk_spi0_peric", "div_sclk_spi0_b",
  637. ENABLE_SCLK_TOP_PERIC, 0, CLK_SET_RATE_PARENT, 0),
  638. /* MUX_ENABLE_TOP_PERIC1 */
  639. GATE(CLK_SCLK_SLIMBUS, "sclk_slimbus", "mout_sclk_slimbus",
  640. MUX_ENABLE_TOP_PERIC1, 16, 0, 0),
  641. GATE(CLK_SCLK_AUDIO1, "sclk_audio1", "div_sclk_audio1",
  642. MUX_ENABLE_TOP_PERIC1, 4, 0, 0),
  643. GATE(CLK_SCLK_AUDIO0, "sclk_audio0", "div_sclk_audio0",
  644. MUX_ENABLE_TOP_PERIC1, 0, 0, 0),
  645. };
  646. /*
  647. * ATLAS_PLL & APOLLO_PLL & MEM0_PLL & MEM1_PLL & BUS_PLL & MFC_PLL
  648. * & MPHY_PLL & G3D_PLL & DISP_PLL & ISP_PLL
  649. */
  650. static const struct samsung_pll_rate_table exynos5443_pll_rates[] __initconst = {
  651. PLL_35XX_RATE(2500000000U, 625, 6, 0),
  652. PLL_35XX_RATE(2400000000U, 500, 5, 0),
  653. PLL_35XX_RATE(2300000000U, 575, 6, 0),
  654. PLL_35XX_RATE(2200000000U, 550, 6, 0),
  655. PLL_35XX_RATE(2100000000U, 350, 4, 0),
  656. PLL_35XX_RATE(2000000000U, 500, 6, 0),
  657. PLL_35XX_RATE(1900000000U, 475, 6, 0),
  658. PLL_35XX_RATE(1800000000U, 375, 5, 0),
  659. PLL_35XX_RATE(1700000000U, 425, 6, 0),
  660. PLL_35XX_RATE(1600000000U, 400, 6, 0),
  661. PLL_35XX_RATE(1500000000U, 250, 4, 0),
  662. PLL_35XX_RATE(1400000000U, 350, 6, 0),
  663. PLL_35XX_RATE(1332000000U, 222, 4, 0),
  664. PLL_35XX_RATE(1300000000U, 325, 6, 0),
  665. PLL_35XX_RATE(1200000000U, 500, 5, 1),
  666. PLL_35XX_RATE(1100000000U, 550, 6, 1),
  667. PLL_35XX_RATE(1086000000U, 362, 4, 1),
  668. PLL_35XX_RATE(1066000000U, 533, 6, 1),
  669. PLL_35XX_RATE(1000000000U, 500, 6, 1),
  670. PLL_35XX_RATE(933000000U, 311, 4, 1),
  671. PLL_35XX_RATE(921000000U, 307, 4, 1),
  672. PLL_35XX_RATE(900000000U, 375, 5, 1),
  673. PLL_35XX_RATE(825000000U, 275, 4, 1),
  674. PLL_35XX_RATE(800000000U, 400, 6, 1),
  675. PLL_35XX_RATE(733000000U, 733, 12, 1),
  676. PLL_35XX_RATE(700000000U, 175, 3, 1),
  677. PLL_35XX_RATE(667000000U, 222, 4, 1),
  678. PLL_35XX_RATE(633000000U, 211, 4, 1),
  679. PLL_35XX_RATE(600000000U, 500, 5, 2),
  680. PLL_35XX_RATE(552000000U, 460, 5, 2),
  681. PLL_35XX_RATE(550000000U, 550, 6, 2),
  682. PLL_35XX_RATE(543000000U, 362, 4, 2),
  683. PLL_35XX_RATE(533000000U, 533, 6, 2),
  684. PLL_35XX_RATE(500000000U, 500, 6, 2),
  685. PLL_35XX_RATE(444000000U, 370, 5, 2),
  686. PLL_35XX_RATE(420000000U, 350, 5, 2),
  687. PLL_35XX_RATE(400000000U, 400, 6, 2),
  688. PLL_35XX_RATE(350000000U, 350, 6, 2),
  689. PLL_35XX_RATE(333000000U, 222, 4, 2),
  690. PLL_35XX_RATE(300000000U, 500, 5, 3),
  691. PLL_35XX_RATE(266000000U, 532, 6, 3),
  692. PLL_35XX_RATE(200000000U, 400, 6, 3),
  693. PLL_35XX_RATE(166000000U, 332, 6, 3),
  694. PLL_35XX_RATE(160000000U, 320, 6, 3),
  695. PLL_35XX_RATE(133000000U, 532, 6, 4),
  696. PLL_35XX_RATE(100000000U, 400, 6, 4),
  697. { /* sentinel */ }
  698. };
  699. /* AUD_PLL */
  700. static const struct samsung_pll_rate_table exynos5443_aud_pll_rates[] __initconst = {
  701. PLL_36XX_RATE(400000000U, 200, 3, 2, 0),
  702. PLL_36XX_RATE(393216000U, 197, 3, 2, -25690),
  703. PLL_36XX_RATE(384000000U, 128, 2, 2, 0),
  704. PLL_36XX_RATE(368640000U, 246, 4, 2, -15729),
  705. PLL_36XX_RATE(361507200U, 181, 3, 2, -16148),
  706. PLL_36XX_RATE(338688000U, 113, 2, 2, -6816),
  707. PLL_36XX_RATE(294912000U, 98, 1, 3, 19923),
  708. PLL_36XX_RATE(288000000U, 96, 1, 3, 0),
  709. PLL_36XX_RATE(252000000U, 84, 1, 3, 0),
  710. { /* sentinel */ }
  711. };
  712. static const struct samsung_pll_clock top_pll_clks[] __initconst = {
  713. PLL(pll_35xx, CLK_FOUT_ISP_PLL, "fout_isp_pll", "oscclk",
  714. ISP_PLL_LOCK, ISP_PLL_CON0, exynos5443_pll_rates),
  715. PLL(pll_36xx, CLK_FOUT_AUD_PLL, "fout_aud_pll", "oscclk",
  716. AUD_PLL_LOCK, AUD_PLL_CON0, exynos5443_aud_pll_rates),
  717. };
  718. static const struct samsung_cmu_info top_cmu_info __initconst = {
  719. .pll_clks = top_pll_clks,
  720. .nr_pll_clks = ARRAY_SIZE(top_pll_clks),
  721. .mux_clks = top_mux_clks,
  722. .nr_mux_clks = ARRAY_SIZE(top_mux_clks),
  723. .div_clks = top_div_clks,
  724. .nr_div_clks = ARRAY_SIZE(top_div_clks),
  725. .gate_clks = top_gate_clks,
  726. .nr_gate_clks = ARRAY_SIZE(top_gate_clks),
  727. .fixed_clks = top_fixed_clks,
  728. .nr_fixed_clks = ARRAY_SIZE(top_fixed_clks),
  729. .fixed_factor_clks = top_fixed_factor_clks,
  730. .nr_fixed_factor_clks = ARRAY_SIZE(top_fixed_factor_clks),
  731. .nr_clk_ids = TOP_NR_CLK,
  732. .clk_regs = top_clk_regs,
  733. .nr_clk_regs = ARRAY_SIZE(top_clk_regs),
  734. };
  735. static void __init exynos5433_cmu_top_init(struct device_node *np)
  736. {
  737. samsung_cmu_register_one(np, &top_cmu_info);
  738. }
  739. CLK_OF_DECLARE(exynos5433_cmu_top, "samsung,exynos5433-cmu-top",
  740. exynos5433_cmu_top_init);
  741. /*
  742. * Register offset definitions for CMU_CPIF
  743. */
  744. #define MPHY_PLL_LOCK 0x0000
  745. #define MPHY_PLL_CON0 0x0100
  746. #define MPHY_PLL_CON1 0x0104
  747. #define MPHY_PLL_FREQ_DET 0x010c
  748. #define MUX_SEL_CPIF0 0x0200
  749. #define DIV_CPIF 0x0600
  750. #define ENABLE_SCLK_CPIF 0x0a00
  751. static const unsigned long cpif_clk_regs[] __initconst = {
  752. MPHY_PLL_LOCK,
  753. MPHY_PLL_CON0,
  754. MPHY_PLL_CON1,
  755. MPHY_PLL_FREQ_DET,
  756. MUX_SEL_CPIF0,
  757. DIV_CPIF,
  758. ENABLE_SCLK_CPIF,
  759. };
  760. /* list of all parent clock list */
  761. PNAME(mout_mphy_pll_p) = { "oscclk", "fout_mphy_pll", };
  762. static const struct samsung_pll_clock cpif_pll_clks[] __initconst = {
  763. PLL(pll_35xx, CLK_FOUT_MPHY_PLL, "fout_mphy_pll", "oscclk",
  764. MPHY_PLL_LOCK, MPHY_PLL_CON0, exynos5443_pll_rates),
  765. };
  766. static const struct samsung_mux_clock cpif_mux_clks[] __initconst = {
  767. /* MUX_SEL_CPIF0 */
  768. MUX(CLK_MOUT_MPHY_PLL, "mout_mphy_pll", mout_mphy_pll_p, MUX_SEL_CPIF0,
  769. 0, 1),
  770. };
  771. static const struct samsung_div_clock cpif_div_clks[] __initconst = {
  772. /* DIV_CPIF */
  773. DIV(CLK_DIV_SCLK_MPHY, "div_sclk_mphy", "mout_mphy_pll", DIV_CPIF,
  774. 0, 6),
  775. };
  776. static const struct samsung_gate_clock cpif_gate_clks[] __initconst = {
  777. /* ENABLE_SCLK_CPIF */
  778. GATE(CLK_SCLK_MPHY_PLL, "sclk_mphy_pll", "mout_mphy_pll",
  779. ENABLE_SCLK_CPIF, 9, CLK_IGNORE_UNUSED, 0),
  780. GATE(CLK_SCLK_UFS_MPHY, "sclk_ufs_mphy", "div_sclk_mphy",
  781. ENABLE_SCLK_CPIF, 4, 0, 0),
  782. };
  783. static const struct samsung_cmu_info cpif_cmu_info __initconst = {
  784. .pll_clks = cpif_pll_clks,
  785. .nr_pll_clks = ARRAY_SIZE(cpif_pll_clks),
  786. .mux_clks = cpif_mux_clks,
  787. .nr_mux_clks = ARRAY_SIZE(cpif_mux_clks),
  788. .div_clks = cpif_div_clks,
  789. .nr_div_clks = ARRAY_SIZE(cpif_div_clks),
  790. .gate_clks = cpif_gate_clks,
  791. .nr_gate_clks = ARRAY_SIZE(cpif_gate_clks),
  792. .nr_clk_ids = CPIF_NR_CLK,
  793. .clk_regs = cpif_clk_regs,
  794. .nr_clk_regs = ARRAY_SIZE(cpif_clk_regs),
  795. };
  796. static void __init exynos5433_cmu_cpif_init(struct device_node *np)
  797. {
  798. samsung_cmu_register_one(np, &cpif_cmu_info);
  799. }
  800. CLK_OF_DECLARE(exynos5433_cmu_cpif, "samsung,exynos5433-cmu-cpif",
  801. exynos5433_cmu_cpif_init);
  802. /*
  803. * Register offset definitions for CMU_MIF
  804. */
  805. #define MEM0_PLL_LOCK 0x0000
  806. #define MEM1_PLL_LOCK 0x0004
  807. #define BUS_PLL_LOCK 0x0008
  808. #define MFC_PLL_LOCK 0x000c
  809. #define MEM0_PLL_CON0 0x0100
  810. #define MEM0_PLL_CON1 0x0104
  811. #define MEM0_PLL_FREQ_DET 0x010c
  812. #define MEM1_PLL_CON0 0x0110
  813. #define MEM1_PLL_CON1 0x0114
  814. #define MEM1_PLL_FREQ_DET 0x011c
  815. #define BUS_PLL_CON0 0x0120
  816. #define BUS_PLL_CON1 0x0124
  817. #define BUS_PLL_FREQ_DET 0x012c
  818. #define MFC_PLL_CON0 0x0130
  819. #define MFC_PLL_CON1 0x0134
  820. #define MFC_PLL_FREQ_DET 0x013c
  821. #define MUX_SEL_MIF0 0x0200
  822. #define MUX_SEL_MIF1 0x0204
  823. #define MUX_SEL_MIF2 0x0208
  824. #define MUX_SEL_MIF3 0x020c
  825. #define MUX_SEL_MIF4 0x0210
  826. #define MUX_SEL_MIF5 0x0214
  827. #define MUX_SEL_MIF6 0x0218
  828. #define MUX_SEL_MIF7 0x021c
  829. #define MUX_ENABLE_MIF0 0x0300
  830. #define MUX_ENABLE_MIF1 0x0304
  831. #define MUX_ENABLE_MIF2 0x0308
  832. #define MUX_ENABLE_MIF3 0x030c
  833. #define MUX_ENABLE_MIF4 0x0310
  834. #define MUX_ENABLE_MIF5 0x0314
  835. #define MUX_ENABLE_MIF6 0x0318
  836. #define MUX_ENABLE_MIF7 0x031c
  837. #define MUX_STAT_MIF0 0x0400
  838. #define MUX_STAT_MIF1 0x0404
  839. #define MUX_STAT_MIF2 0x0408
  840. #define MUX_STAT_MIF3 0x040c
  841. #define MUX_STAT_MIF4 0x0410
  842. #define MUX_STAT_MIF5 0x0414
  843. #define MUX_STAT_MIF6 0x0418
  844. #define MUX_STAT_MIF7 0x041c
  845. #define DIV_MIF1 0x0604
  846. #define DIV_MIF2 0x0608
  847. #define DIV_MIF3 0x060c
  848. #define DIV_MIF4 0x0610
  849. #define DIV_MIF5 0x0614
  850. #define DIV_MIF_PLL_FREQ_DET 0x0618
  851. #define DIV_STAT_MIF1 0x0704
  852. #define DIV_STAT_MIF2 0x0708
  853. #define DIV_STAT_MIF3 0x070c
  854. #define DIV_STAT_MIF4 0x0710
  855. #define DIV_STAT_MIF5 0x0714
  856. #define DIV_STAT_MIF_PLL_FREQ_DET 0x0718
  857. #define ENABLE_ACLK_MIF0 0x0800
  858. #define ENABLE_ACLK_MIF1 0x0804
  859. #define ENABLE_ACLK_MIF2 0x0808
  860. #define ENABLE_ACLK_MIF3 0x080c
  861. #define ENABLE_PCLK_MIF 0x0900
  862. #define ENABLE_PCLK_MIF_SECURE_DREX0_TZ 0x0904
  863. #define ENABLE_PCLK_MIF_SECURE_DREX1_TZ 0x0908
  864. #define ENABLE_PCLK_MIF_SECURE_MONOTONIC_CNT 0x090c
  865. #define ENABLE_PCLK_MIF_SECURE_RTC 0x0910
  866. #define ENABLE_SCLK_MIF 0x0a00
  867. #define ENABLE_IP_MIF0 0x0b00
  868. #define ENABLE_IP_MIF1 0x0b04
  869. #define ENABLE_IP_MIF2 0x0b08
  870. #define ENABLE_IP_MIF3 0x0b0c
  871. #define ENABLE_IP_MIF_SECURE_DREX0_TZ 0x0b10
  872. #define ENABLE_IP_MIF_SECURE_DREX1_TZ 0x0b14
  873. #define ENABLE_IP_MIF_SECURE_MONOTONIC_CNT 0x0b18
  874. #define ENABLE_IP_MIF_SECURE_RTC 0x0b1c
  875. #define CLKOUT_CMU_MIF 0x0c00
  876. #define CLKOUT_CMU_MIF_DIV_STAT 0x0c04
  877. #define DREX_FREQ_CTRL0 0x1000
  878. #define DREX_FREQ_CTRL1 0x1004
  879. #define PAUSE 0x1008
  880. #define DDRPHY_LOCK_CTRL 0x100c
  881. static const unsigned long mif_clk_regs[] __initconst = {
  882. MEM0_PLL_LOCK,
  883. MEM1_PLL_LOCK,
  884. BUS_PLL_LOCK,
  885. MFC_PLL_LOCK,
  886. MEM0_PLL_CON0,
  887. MEM0_PLL_CON1,
  888. MEM0_PLL_FREQ_DET,
  889. MEM1_PLL_CON0,
  890. MEM1_PLL_CON1,
  891. MEM1_PLL_FREQ_DET,
  892. BUS_PLL_CON0,
  893. BUS_PLL_CON1,
  894. BUS_PLL_FREQ_DET,
  895. MFC_PLL_CON0,
  896. MFC_PLL_CON1,
  897. MFC_PLL_FREQ_DET,
  898. MUX_SEL_MIF0,
  899. MUX_SEL_MIF1,
  900. MUX_SEL_MIF2,
  901. MUX_SEL_MIF3,
  902. MUX_SEL_MIF4,
  903. MUX_SEL_MIF5,
  904. MUX_SEL_MIF6,
  905. MUX_SEL_MIF7,
  906. MUX_ENABLE_MIF0,
  907. MUX_ENABLE_MIF1,
  908. MUX_ENABLE_MIF2,
  909. MUX_ENABLE_MIF3,
  910. MUX_ENABLE_MIF4,
  911. MUX_ENABLE_MIF5,
  912. MUX_ENABLE_MIF6,
  913. MUX_ENABLE_MIF7,
  914. DIV_MIF1,
  915. DIV_MIF2,
  916. DIV_MIF3,
  917. DIV_MIF4,
  918. DIV_MIF5,
  919. DIV_MIF_PLL_FREQ_DET,
  920. ENABLE_ACLK_MIF0,
  921. ENABLE_ACLK_MIF1,
  922. ENABLE_ACLK_MIF2,
  923. ENABLE_ACLK_MIF3,
  924. ENABLE_PCLK_MIF,
  925. ENABLE_PCLK_MIF_SECURE_DREX0_TZ,
  926. ENABLE_PCLK_MIF_SECURE_DREX1_TZ,
  927. ENABLE_PCLK_MIF_SECURE_MONOTONIC_CNT,
  928. ENABLE_PCLK_MIF_SECURE_RTC,
  929. ENABLE_SCLK_MIF,
  930. ENABLE_IP_MIF0,
  931. ENABLE_IP_MIF1,
  932. ENABLE_IP_MIF2,
  933. ENABLE_IP_MIF3,
  934. ENABLE_IP_MIF_SECURE_DREX0_TZ,
  935. ENABLE_IP_MIF_SECURE_DREX1_TZ,
  936. ENABLE_IP_MIF_SECURE_MONOTONIC_CNT,
  937. ENABLE_IP_MIF_SECURE_RTC,
  938. CLKOUT_CMU_MIF,
  939. CLKOUT_CMU_MIF_DIV_STAT,
  940. DREX_FREQ_CTRL0,
  941. DREX_FREQ_CTRL1,
  942. PAUSE,
  943. DDRPHY_LOCK_CTRL,
  944. };
  945. static const struct samsung_pll_clock mif_pll_clks[] __initconst = {
  946. PLL(pll_35xx, CLK_FOUT_MEM0_PLL, "fout_mem0_pll", "oscclk",
  947. MEM0_PLL_LOCK, MEM0_PLL_CON0, exynos5443_pll_rates),
  948. PLL(pll_35xx, CLK_FOUT_MEM1_PLL, "fout_mem1_pll", "oscclk",
  949. MEM1_PLL_LOCK, MEM1_PLL_CON0, exynos5443_pll_rates),
  950. PLL(pll_35xx, CLK_FOUT_BUS_PLL, "fout_bus_pll", "oscclk",
  951. BUS_PLL_LOCK, BUS_PLL_CON0, exynos5443_pll_rates),
  952. PLL(pll_35xx, CLK_FOUT_MFC_PLL, "fout_mfc_pll", "oscclk",
  953. MFC_PLL_LOCK, MFC_PLL_CON0, exynos5443_pll_rates),
  954. };
  955. /* list of all parent clock list */
  956. PNAME(mout_mfc_pll_div2_p) = { "mout_mfc_pll", "dout_mfc_pll", };
  957. PNAME(mout_bus_pll_div2_p) = { "mout_bus_pll", "dout_bus_pll", };
  958. PNAME(mout_mem1_pll_div2_p) = { "mout_mem1_pll", "dout_mem1_pll", };
  959. PNAME(mout_mem0_pll_div2_p) = { "mout_mem0_pll", "dout_mem0_pll", };
  960. PNAME(mout_mfc_pll_p) = { "oscclk", "fout_mfc_pll", };
  961. PNAME(mout_bus_pll_p) = { "oscclk", "fout_bus_pll", };
  962. PNAME(mout_mem1_pll_p) = { "oscclk", "fout_mem1_pll", };
  963. PNAME(mout_mem0_pll_p) = { "oscclk", "fout_mem0_pll", };
  964. PNAME(mout_clk2x_phy_c_p) = { "mout_mem0_pll_div2", "mout_clkm_phy_b", };
  965. PNAME(mout_clk2x_phy_b_p) = { "mout_bus_pll_div2", "mout_clkm_phy_a", };
  966. PNAME(mout_clk2x_phy_a_p) = { "mout_bus_pll_div2", "mout_mfc_pll_div2", };
  967. PNAME(mout_clkm_phy_b_p) = { "mout_mem1_pll_div2", "mout_clkm_phy_a", };
  968. PNAME(mout_aclk_mifnm_200_p) = { "mout_mem0_pll_div2", "div_mif_pre", };
  969. PNAME(mout_aclk_mifnm_400_p) = { "mout_mem1_pll_div2", "mout_bus_pll_div2",};
  970. PNAME(mout_aclk_disp_333_b_p) = { "mout_aclk_disp_333_a",
  971. "mout_bus_pll_div2", };
  972. PNAME(mout_aclk_disp_333_a_p) = { "mout_mfc_pll_div2", "sclk_mphy_pll", };
  973. PNAME(mout_sclk_decon_vclk_c_p) = { "mout_sclk_decon_vclk_b",
  974. "sclk_mphy_pll", };
  975. PNAME(mout_sclk_decon_vclk_b_p) = { "mout_sclk_decon_vclk_a",
  976. "mout_mfc_pll_div2", };
  977. PNAME(mout_sclk_decon_p) = { "oscclk", "mout_bus_pll_div2", };
  978. PNAME(mout_sclk_decon_eclk_c_p) = { "mout_sclk_decon_eclk_b",
  979. "sclk_mphy_pll", };
  980. PNAME(mout_sclk_decon_eclk_b_p) = { "mout_sclk_decon_eclk_a",
  981. "mout_mfc_pll_div2", };
  982. PNAME(mout_sclk_decon_tv_eclk_c_p) = { "mout_sclk_decon_tv_eclk_b",
  983. "sclk_mphy_pll", };
  984. PNAME(mout_sclk_decon_tv_eclk_b_p) = { "mout_sclk_decon_tv_eclk_a",
  985. "mout_mfc_pll_div2", };
  986. PNAME(mout_sclk_dsd_c_p) = { "mout_sclk_dsd_b", "mout_bus_pll_div2", };
  987. PNAME(mout_sclk_dsd_b_p) = { "mout_sclk_dsd_a", "sclk_mphy_pll", };
  988. PNAME(mout_sclk_dsd_a_p) = { "oscclk", "mout_mfc_pll_div2", };
  989. PNAME(mout_sclk_dsim0_c_p) = { "mout_sclk_dsim0_b", "sclk_mphy_pll", };
  990. PNAME(mout_sclk_dsim0_b_p) = { "mout_sclk_dsim0_a", "mout_mfc_pll_div2" };
  991. PNAME(mout_sclk_decon_tv_vclk_c_p) = { "mout_sclk_decon_tv_vclk_b",
  992. "sclk_mphy_pll", };
  993. PNAME(mout_sclk_decon_tv_vclk_b_p) = { "mout_sclk_decon_tv_vclk_a",
  994. "mout_mfc_pll_div2", };
  995. PNAME(mout_sclk_dsim1_c_p) = { "mout_sclk_dsim1_b", "sclk_mphy_pll", };
  996. PNAME(mout_sclk_dsim1_b_p) = { "mout_sclk_dsim1_a", "mout_mfc_pll_div2",};
  997. static const struct samsung_fixed_factor_clock mif_fixed_factor_clks[] __initconst = {
  998. /* dout_{mfc|bus|mem1|mem0}_pll is half fixed rate from parent mux */
  999. FFACTOR(CLK_DOUT_MFC_PLL, "dout_mfc_pll", "mout_mfc_pll", 1, 1, 0),
  1000. FFACTOR(CLK_DOUT_BUS_PLL, "dout_bus_pll", "mout_bus_pll", 1, 1, 0),
  1001. FFACTOR(CLK_DOUT_MEM1_PLL, "dout_mem1_pll", "mout_mem1_pll", 1, 1, 0),
  1002. FFACTOR(CLK_DOUT_MEM0_PLL, "dout_mem0_pll", "mout_mem0_pll", 1, 1, 0),
  1003. };
  1004. static const struct samsung_mux_clock mif_mux_clks[] __initconst = {
  1005. /* MUX_SEL_MIF0 */
  1006. MUX(CLK_MOUT_MFC_PLL_DIV2, "mout_mfc_pll_div2", mout_mfc_pll_div2_p,
  1007. MUX_SEL_MIF0, 28, 1),
  1008. MUX(CLK_MOUT_BUS_PLL_DIV2, "mout_bus_pll_div2", mout_bus_pll_div2_p,
  1009. MUX_SEL_MIF0, 24, 1),
  1010. MUX(CLK_MOUT_MEM1_PLL_DIV2, "mout_mem1_pll_div2", mout_mem1_pll_div2_p,
  1011. MUX_SEL_MIF0, 20, 1),
  1012. MUX(CLK_MOUT_MEM0_PLL_DIV2, "mout_mem0_pll_div2", mout_mem0_pll_div2_p,
  1013. MUX_SEL_MIF0, 16, 1),
  1014. MUX(CLK_MOUT_MFC_PLL, "mout_mfc_pll", mout_mfc_pll_p, MUX_SEL_MIF0,
  1015. 12, 1),
  1016. MUX(CLK_MOUT_BUS_PLL, "mout_bus_pll", mout_bus_pll_p, MUX_SEL_MIF0,
  1017. 8, 1),
  1018. MUX(CLK_MOUT_MEM1_PLL, "mout_mem1_pll", mout_mem1_pll_p, MUX_SEL_MIF0,
  1019. 4, 1),
  1020. MUX(CLK_MOUT_MEM0_PLL, "mout_mem0_pll", mout_mem0_pll_p, MUX_SEL_MIF0,
  1021. 0, 1),
  1022. /* MUX_SEL_MIF1 */
  1023. MUX(CLK_MOUT_CLK2X_PHY_C, "mout_clk2x_phy_c", mout_clk2x_phy_c_p,
  1024. MUX_SEL_MIF1, 24, 1),
  1025. MUX(CLK_MOUT_CLK2X_PHY_B, "mout_clk2x_phy_b", mout_clk2x_phy_b_p,
  1026. MUX_SEL_MIF1, 20, 1),
  1027. MUX(CLK_MOUT_CLK2X_PHY_A, "mout_clk2x_phy_a", mout_clk2x_phy_a_p,
  1028. MUX_SEL_MIF1, 16, 1),
  1029. MUX(CLK_MOUT_CLKM_PHY_C, "mout_clkm_phy_c", mout_clk2x_phy_c_p,
  1030. MUX_SEL_MIF1, 12, 1),
  1031. MUX(CLK_MOUT_CLKM_PHY_B, "mout_clkm_phy_b", mout_clkm_phy_b_p,
  1032. MUX_SEL_MIF1, 8, 1),
  1033. MUX(CLK_MOUT_CLKM_PHY_A, "mout_clkm_phy_a", mout_clk2x_phy_a_p,
  1034. MUX_SEL_MIF1, 4, 1),
  1035. /* MUX_SEL_MIF2 */
  1036. MUX(CLK_MOUT_ACLK_MIFNM_200, "mout_aclk_mifnm_200",
  1037. mout_aclk_mifnm_200_p, MUX_SEL_MIF2, 8, 1),
  1038. MUX(CLK_MOUT_ACLK_MIFNM_400, "mout_aclk_mifnm_400",
  1039. mout_aclk_mifnm_400_p, MUX_SEL_MIF2, 0, 1),
  1040. /* MUX_SEL_MIF3 */
  1041. MUX(CLK_MOUT_ACLK_DISP_333_B, "mout_aclk_disp_333_b",
  1042. mout_aclk_disp_333_b_p, MUX_SEL_MIF3, 4, 1),
  1043. MUX(CLK_MOUT_ACLK_DISP_333_A, "mout_aclk_disp_333_a",
  1044. mout_aclk_disp_333_a_p, MUX_SEL_MIF3, 0, 1),
  1045. /* MUX_SEL_MIF4 */
  1046. MUX(CLK_MOUT_SCLK_DECON_VCLK_C, "mout_sclk_decon_vclk_c",
  1047. mout_sclk_decon_vclk_c_p, MUX_SEL_MIF4, 24, 1),
  1048. MUX(CLK_MOUT_SCLK_DECON_VCLK_B, "mout_sclk_decon_vclk_b",
  1049. mout_sclk_decon_vclk_b_p, MUX_SEL_MIF4, 20, 1),
  1050. MUX(CLK_MOUT_SCLK_DECON_VCLK_A, "mout_sclk_decon_vclk_a",
  1051. mout_sclk_decon_p, MUX_SEL_MIF4, 16, 1),
  1052. MUX(CLK_MOUT_SCLK_DECON_ECLK_C, "mout_sclk_decon_eclk_c",
  1053. mout_sclk_decon_eclk_c_p, MUX_SEL_MIF4, 8, 1),
  1054. MUX(CLK_MOUT_SCLK_DECON_ECLK_B, "mout_sclk_decon_eclk_b",
  1055. mout_sclk_decon_eclk_b_p, MUX_SEL_MIF4, 4, 1),
  1056. MUX(CLK_MOUT_SCLK_DECON_ECLK_A, "mout_sclk_decon_eclk_a",
  1057. mout_sclk_decon_p, MUX_SEL_MIF4, 0, 1),
  1058. /* MUX_SEL_MIF5 */
  1059. MUX(CLK_MOUT_SCLK_DECON_TV_ECLK_C, "mout_sclk_decon_tv_eclk_c",
  1060. mout_sclk_decon_tv_eclk_c_p, MUX_SEL_MIF5, 24, 1),
  1061. MUX(CLK_MOUT_SCLK_DECON_TV_ECLK_B, "mout_sclk_decon_tv_eclk_b",
  1062. mout_sclk_decon_tv_eclk_b_p, MUX_SEL_MIF5, 20, 1),
  1063. MUX(CLK_MOUT_SCLK_DECON_TV_ECLK_A, "mout_sclk_decon_tv_eclk_a",
  1064. mout_sclk_decon_p, MUX_SEL_MIF5, 16, 1),
  1065. MUX(CLK_MOUT_SCLK_DSD_C, "mout_sclk_dsd_c", mout_sclk_dsd_c_p,
  1066. MUX_SEL_MIF5, 8, 1),
  1067. MUX(CLK_MOUT_SCLK_DSD_B, "mout_sclk_dsd_b", mout_sclk_dsd_b_p,
  1068. MUX_SEL_MIF5, 4, 1),
  1069. MUX(CLK_MOUT_SCLK_DSD_A, "mout_sclk_dsd_a", mout_sclk_dsd_a_p,
  1070. MUX_SEL_MIF5, 0, 1),
  1071. /* MUX_SEL_MIF6 */
  1072. MUX(CLK_MOUT_SCLK_DSIM0_C, "mout_sclk_dsim0_c", mout_sclk_dsim0_c_p,
  1073. MUX_SEL_MIF6, 8, 1),
  1074. MUX(CLK_MOUT_SCLK_DSIM0_B, "mout_sclk_dsim0_b", mout_sclk_dsim0_b_p,
  1075. MUX_SEL_MIF6, 4, 1),
  1076. MUX(CLK_MOUT_SCLK_DSIM0_A, "mout_sclk_dsim0_a", mout_sclk_decon_p,
  1077. MUX_SEL_MIF6, 0, 1),
  1078. /* MUX_SEL_MIF7 */
  1079. MUX(CLK_MOUT_SCLK_DECON_TV_VCLK_C, "mout_sclk_decon_tv_vclk_c",
  1080. mout_sclk_decon_tv_vclk_c_p, MUX_SEL_MIF7, 24, 1),
  1081. MUX(CLK_MOUT_SCLK_DECON_TV_VCLK_B, "mout_sclk_decon_tv_vclk_b",
  1082. mout_sclk_decon_tv_vclk_b_p, MUX_SEL_MIF7, 20, 1),
  1083. MUX(CLK_MOUT_SCLK_DECON_TV_VCLK_A, "mout_sclk_decon_tv_vclk_a",
  1084. mout_sclk_decon_p, MUX_SEL_MIF7, 16, 1),
  1085. MUX(CLK_MOUT_SCLK_DSIM1_C, "mout_sclk_dsim1_c", mout_sclk_dsim1_c_p,
  1086. MUX_SEL_MIF7, 8, 1),
  1087. MUX(CLK_MOUT_SCLK_DSIM1_B, "mout_sclk_dsim1_b", mout_sclk_dsim1_b_p,
  1088. MUX_SEL_MIF7, 4, 1),
  1089. MUX(CLK_MOUT_SCLK_DSIM1_A, "mout_sclk_dsim1_a", mout_sclk_decon_p,
  1090. MUX_SEL_MIF7, 0, 1),
  1091. };
  1092. static const struct samsung_div_clock mif_div_clks[] __initconst = {
  1093. /* DIV_MIF1 */
  1094. DIV(CLK_DIV_SCLK_HPM_MIF, "div_sclk_hpm_mif", "div_clk2x_phy",
  1095. DIV_MIF1, 16, 2),
  1096. DIV(CLK_DIV_ACLK_DREX1, "div_aclk_drex1", "div_clk2x_phy", DIV_MIF1,
  1097. 12, 2),
  1098. DIV(CLK_DIV_ACLK_DREX0, "div_aclk_drex0", "div_clk2x_phy", DIV_MIF1,
  1099. 8, 2),
  1100. DIV(CLK_DIV_CLK2XPHY, "div_clk2x_phy", "mout_clk2x_phy_c", DIV_MIF1,
  1101. 4, 4),
  1102. /* DIV_MIF2 */
  1103. DIV(CLK_DIV_ACLK_MIF_266, "div_aclk_mif_266", "mout_bus_pll_div2",
  1104. DIV_MIF2, 20, 3),
  1105. DIV(CLK_DIV_ACLK_MIFND_133, "div_aclk_mifnd_133", "div_mif_pre",
  1106. DIV_MIF2, 16, 4),
  1107. DIV(CLK_DIV_ACLK_MIF_133, "div_aclk_mif_133", "div_mif_pre",
  1108. DIV_MIF2, 12, 4),
  1109. DIV(CLK_DIV_ACLK_MIFNM_200, "div_aclk_mifnm_200",
  1110. "mout_aclk_mifnm_200", DIV_MIF2, 8, 3),
  1111. DIV(CLK_DIV_ACLK_MIF_200, "div_aclk_mif_200", "div_aclk_mif_400",
  1112. DIV_MIF2, 4, 2),
  1113. DIV(CLK_DIV_ACLK_MIF_400, "div_aclk_mif_400", "mout_aclk_mifnm_400",
  1114. DIV_MIF2, 0, 3),
  1115. /* DIV_MIF3 */
  1116. DIV(CLK_DIV_ACLK_BUS2_400, "div_aclk_bus2_400", "div_mif_pre",
  1117. DIV_MIF3, 16, 4),
  1118. DIV(CLK_DIV_ACLK_DISP_333, "div_aclk_disp_333", "mout_aclk_disp_333_b",
  1119. DIV_MIF3, 4, 3),
  1120. DIV(CLK_DIV_ACLK_CPIF_200, "div_aclk_cpif_200", "mout_aclk_mifnm_200",
  1121. DIV_MIF3, 0, 3),
  1122. /* DIV_MIF4 */
  1123. DIV(CLK_DIV_SCLK_DSIM1, "div_sclk_dsim1", "mout_sclk_dsim1_c",
  1124. DIV_MIF4, 24, 4),
  1125. DIV(CLK_DIV_SCLK_DECON_TV_VCLK, "div_sclk_decon_tv_vclk",
  1126. "mout_sclk_decon_tv_vclk_c", DIV_MIF4, 20, 4),
  1127. DIV(CLK_DIV_SCLK_DSIM0, "div_sclk_dsim0", "mout_sclk_dsim0_c",
  1128. DIV_MIF4, 16, 4),
  1129. DIV(CLK_DIV_SCLK_DSD, "div_sclk_dsd", "mout_sclk_dsd_c",
  1130. DIV_MIF4, 12, 4),
  1131. DIV(CLK_DIV_SCLK_DECON_TV_ECLK, "div_sclk_decon_tv_eclk",
  1132. "mout_sclk_decon_tv_eclk_c", DIV_MIF4, 8, 4),
  1133. DIV(CLK_DIV_SCLK_DECON_VCLK, "div_sclk_decon_vclk",
  1134. "mout_sclk_decon_vclk_c", DIV_MIF4, 4, 4),
  1135. DIV(CLK_DIV_SCLK_DECON_ECLK, "div_sclk_decon_eclk",
  1136. "mout_sclk_decon_eclk_c", DIV_MIF4, 0, 4),
  1137. /* DIV_MIF5 */
  1138. DIV(CLK_DIV_MIF_PRE, "div_mif_pre", "mout_bus_pll_div2", DIV_MIF5,
  1139. 0, 3),
  1140. };
  1141. static const struct samsung_gate_clock mif_gate_clks[] __initconst = {
  1142. /* ENABLE_ACLK_MIF0 */
  1143. GATE(CLK_CLK2X_PHY1, "clk2k_phy1", "div_clk2x_phy", ENABLE_ACLK_MIF0,
  1144. 19, CLK_IGNORE_UNUSED, 0),
  1145. GATE(CLK_CLK2X_PHY0, "clk2x_phy0", "div_clk2x_phy", ENABLE_ACLK_MIF0,
  1146. 18, CLK_IGNORE_UNUSED, 0),
  1147. GATE(CLK_CLKM_PHY1, "clkm_phy1", "mout_clkm_phy_c", ENABLE_ACLK_MIF0,
  1148. 17, CLK_IGNORE_UNUSED, 0),
  1149. GATE(CLK_CLKM_PHY0, "clkm_phy0", "mout_clkm_phy_c", ENABLE_ACLK_MIF0,
  1150. 16, CLK_IGNORE_UNUSED, 0),
  1151. GATE(CLK_RCLK_DREX1, "rclk_drex1", "oscclk", ENABLE_ACLK_MIF0,
  1152. 15, CLK_IGNORE_UNUSED, 0),
  1153. GATE(CLK_RCLK_DREX0, "rclk_drex0", "oscclk", ENABLE_ACLK_MIF0,
  1154. 14, CLK_IGNORE_UNUSED, 0),
  1155. GATE(CLK_ACLK_DREX1_TZ, "aclk_drex1_tz", "div_aclk_drex1",
  1156. ENABLE_ACLK_MIF0, 13, CLK_IGNORE_UNUSED, 0),
  1157. GATE(CLK_ACLK_DREX0_TZ, "aclk_drex0_tz", "div_aclk_drex0",
  1158. ENABLE_ACLK_MIF0, 12, CLK_IGNORE_UNUSED, 0),
  1159. GATE(CLK_ACLK_DREX1_PEREV, "aclk_drex1_perev", "div_aclk_drex1",
  1160. ENABLE_ACLK_MIF0, 11, CLK_IGNORE_UNUSED, 0),
  1161. GATE(CLK_ACLK_DREX0_PEREV, "aclk_drex0_perev", "div_aclk_drex0",
  1162. ENABLE_ACLK_MIF0, 10, CLK_IGNORE_UNUSED, 0),
  1163. GATE(CLK_ACLK_DREX1_MEMIF, "aclk_drex1_memif", "div_aclk_drex1",
  1164. ENABLE_ACLK_MIF0, 9, CLK_IGNORE_UNUSED, 0),
  1165. GATE(CLK_ACLK_DREX0_MEMIF, "aclk_drex0_memif", "div_aclk_drex0",
  1166. ENABLE_ACLK_MIF0, 8, CLK_IGNORE_UNUSED, 0),
  1167. GATE(CLK_ACLK_DREX1_SCH, "aclk_drex1_sch", "div_aclk_drex1",
  1168. ENABLE_ACLK_MIF0, 7, CLK_IGNORE_UNUSED, 0),
  1169. GATE(CLK_ACLK_DREX0_SCH, "aclk_drex0_sch", "div_aclk_drex0",
  1170. ENABLE_ACLK_MIF0, 6, CLK_IGNORE_UNUSED, 0),
  1171. GATE(CLK_ACLK_DREX1_BUSIF, "aclk_drex1_busif", "div_aclk_drex1",
  1172. ENABLE_ACLK_MIF0, 5, CLK_IGNORE_UNUSED, 0),
  1173. GATE(CLK_ACLK_DREX0_BUSIF, "aclk_drex0_busif", "div_aclk_drex0",
  1174. ENABLE_ACLK_MIF0, 4, CLK_IGNORE_UNUSED, 0),
  1175. GATE(CLK_ACLK_DREX1_BUSIF_RD, "aclk_drex1_busif_rd", "div_aclk_drex1",
  1176. ENABLE_ACLK_MIF0, 3, CLK_IGNORE_UNUSED, 0),
  1177. GATE(CLK_ACLK_DREX0_BUSIF_RD, "aclk_drex0_busif_rd", "div_aclk_drex0",
  1178. ENABLE_ACLK_MIF0, 2, CLK_IGNORE_UNUSED, 0),
  1179. GATE(CLK_ACLK_DREX1, "aclk_drex1", "div_aclk_drex1",
  1180. ENABLE_ACLK_MIF0, 2, CLK_IGNORE_UNUSED, 0),
  1181. GATE(CLK_ACLK_DREX0, "aclk_drex0", "div_aclk_drex0",
  1182. ENABLE_ACLK_MIF0, 1, CLK_IGNORE_UNUSED, 0),
  1183. /* ENABLE_ACLK_MIF1 */
  1184. GATE(CLK_ACLK_ASYNCAXIS_MIF_IMEM, "aclk_asyncaxis_mif_imem",
  1185. "div_aclk_mif_200", ENABLE_ACLK_MIF1, 28,
  1186. CLK_IGNORE_UNUSED, 0),
  1187. GATE(CLK_ACLK_ASYNCAXIS_NOC_P_CCI, "aclk_asyncaxis_noc_p_cci",
  1188. "div_aclk_mif_200", ENABLE_ACLK_MIF1,
  1189. 27, CLK_IGNORE_UNUSED, 0),
  1190. GATE(CLK_ACLK_ASYNCAXIM_NOC_P_CCI, "aclk_asyncaxim_noc_p_cci",
  1191. "div_aclk_mif_133", ENABLE_ACLK_MIF1,
  1192. 26, CLK_IGNORE_UNUSED, 0),
  1193. GATE(CLK_ACLK_ASYNCAXIS_CP1, "aclk_asyncaxis_cp1",
  1194. "div_aclk_mifnm_200", ENABLE_ACLK_MIF1,
  1195. 25, CLK_IGNORE_UNUSED, 0),
  1196. GATE(CLK_ACLK_ASYNCAXIM_CP1, "aclk_asyncaxim_cp1",
  1197. "div_aclk_drex1", ENABLE_ACLK_MIF1,
  1198. 24, CLK_IGNORE_UNUSED, 0),
  1199. GATE(CLK_ACLK_ASYNCAXIS_CP0, "aclk_asyncaxis_cp0",
  1200. "div_aclk_mifnm_200", ENABLE_ACLK_MIF1,
  1201. 23, CLK_IGNORE_UNUSED, 0),
  1202. GATE(CLK_ACLK_ASYNCAXIM_CP0, "aclk_asyncaxim_cp0",
  1203. "div_aclk_drex0", ENABLE_ACLK_MIF1,
  1204. 22, CLK_IGNORE_UNUSED, 0),
  1205. GATE(CLK_ACLK_ASYNCAXIS_DREX1_3, "aclk_asyncaxis_drex1_3",
  1206. "div_aclk_mif_133", ENABLE_ACLK_MIF1,
  1207. 21, CLK_IGNORE_UNUSED, 0),
  1208. GATE(CLK_ACLK_ASYNCAXIM_DREX1_3, "aclk_asyncaxim_drex1_3",
  1209. "div_aclk_drex1", ENABLE_ACLK_MIF1,
  1210. 20, CLK_IGNORE_UNUSED, 0),
  1211. GATE(CLK_ACLK_ASYNCAXIS_DREX1_1, "aclk_asyncaxis_drex1_1",
  1212. "div_aclk_mif_133", ENABLE_ACLK_MIF1,
  1213. 19, CLK_IGNORE_UNUSED, 0),
  1214. GATE(CLK_ACLK_ASYNCAXIM_DREX1_1, "aclk_asyncaxim_drex1_1",
  1215. "div_aclk_drex1", ENABLE_ACLK_MIF1,
  1216. 18, CLK_IGNORE_UNUSED, 0),
  1217. GATE(CLK_ACLK_ASYNCAXIS_DREX1_0, "aclk_asyncaxis_drex1_0",
  1218. "div_aclk_mif_133", ENABLE_ACLK_MIF1,
  1219. 17, CLK_IGNORE_UNUSED, 0),
  1220. GATE(CLK_ACLK_ASYNCAXIM_DREX1_0, "aclk_asyncaxim_drex1_0",
  1221. "div_aclk_drex1", ENABLE_ACLK_MIF1,
  1222. 16, CLK_IGNORE_UNUSED, 0),
  1223. GATE(CLK_ACLK_ASYNCAXIS_DREX0_3, "aclk_asyncaxis_drex0_3",
  1224. "div_aclk_mif_133", ENABLE_ACLK_MIF1,
  1225. 15, CLK_IGNORE_UNUSED, 0),
  1226. GATE(CLK_ACLK_ASYNCAXIM_DREX0_3, "aclk_asyncaxim_drex0_3",
  1227. "div_aclk_drex0", ENABLE_ACLK_MIF1,
  1228. 14, CLK_IGNORE_UNUSED, 0),
  1229. GATE(CLK_ACLK_ASYNCAXIS_DREX0_1, "aclk_asyncaxis_drex0_1",
  1230. "div_aclk_mif_133", ENABLE_ACLK_MIF1,
  1231. 13, CLK_IGNORE_UNUSED, 0),
  1232. GATE(CLK_ACLK_ASYNCAXIM_DREX0_1, "aclk_asyncaxim_drex0_1",
  1233. "div_aclk_drex0", ENABLE_ACLK_MIF1,
  1234. 12, CLK_IGNORE_UNUSED, 0),
  1235. GATE(CLK_ACLK_ASYNCAXIS_DREX0_0, "aclk_asyncaxis_drex0_0",
  1236. "div_aclk_mif_133", ENABLE_ACLK_MIF1,
  1237. 11, CLK_IGNORE_UNUSED, 0),
  1238. GATE(CLK_ACLK_ASYNCAXIM_DREX0_0, "aclk_asyncaxim_drex0_0",
  1239. "div_aclk_drex0", ENABLE_ACLK_MIF1,
  1240. 10, CLK_IGNORE_UNUSED, 0),
  1241. GATE(CLK_ACLK_AHB2APB_MIF2P, "aclk_ahb2apb_mif2p", "div_aclk_mif_133",
  1242. ENABLE_ACLK_MIF1, 9, CLK_IGNORE_UNUSED, 0),
  1243. GATE(CLK_ACLK_AHB2APB_MIF1P, "aclk_ahb2apb_mif1p", "div_aclk_mif_133",
  1244. ENABLE_ACLK_MIF1, 8, CLK_IGNORE_UNUSED, 0),
  1245. GATE(CLK_ACLK_AHB2APB_MIF0P, "aclk_ahb2apb_mif0p", "div_aclk_mif_133",
  1246. ENABLE_ACLK_MIF1, 7, CLK_IGNORE_UNUSED, 0),
  1247. GATE(CLK_ACLK_IXIU_CCI, "aclk_ixiu_cci", "div_aclk_mif_400",
  1248. ENABLE_ACLK_MIF1, 6, CLK_IGNORE_UNUSED, 0),
  1249. GATE(CLK_ACLK_XIU_MIFSFRX, "aclk_xiu_mifsfrx", "div_aclk_mif_200",
  1250. ENABLE_ACLK_MIF1, 5, CLK_IGNORE_UNUSED, 0),
  1251. GATE(CLK_ACLK_MIFNP_133, "aclk_mifnp_133", "div_aclk_mif_133",
  1252. ENABLE_ACLK_MIF1, 4, CLK_IGNORE_UNUSED, 0),
  1253. GATE(CLK_ACLK_MIFNM_200, "aclk_mifnm_200", "div_aclk_mifnm_200",
  1254. ENABLE_ACLK_MIF1, 3, CLK_IGNORE_UNUSED, 0),
  1255. GATE(CLK_ACLK_MIFND_133, "aclk_mifnd_133", "div_aclk_mifnd_133",
  1256. ENABLE_ACLK_MIF1, 2, CLK_IGNORE_UNUSED, 0),
  1257. GATE(CLK_ACLK_MIFND_400, "aclk_mifnd_400", "div_aclk_mif_400",
  1258. ENABLE_ACLK_MIF1, 1, CLK_IGNORE_UNUSED, 0),
  1259. GATE(CLK_ACLK_CCI, "aclk_cci", "div_aclk_mif_400", ENABLE_ACLK_MIF1,
  1260. 0, CLK_IGNORE_UNUSED, 0),
  1261. /* ENABLE_ACLK_MIF2 */
  1262. GATE(CLK_ACLK_MIFND_266, "aclk_mifnd_266", "div_aclk_mif_266",
  1263. ENABLE_ACLK_MIF2, 20, CLK_IGNORE_UNUSED, 0),
  1264. GATE(CLK_ACLK_PPMU_DREX1S3, "aclk_ppmu_drex1s3", "div_aclk_drex1",
  1265. ENABLE_ACLK_MIF2, 17, CLK_IGNORE_UNUSED, 0),
  1266. GATE(CLK_ACLK_PPMU_DREX1S1, "aclk_ppmu_drex1s1", "div_aclk_drex1",
  1267. ENABLE_ACLK_MIF2, 16, CLK_IGNORE_UNUSED, 0),
  1268. GATE(CLK_ACLK_PPMU_DREX1S0, "aclk_ppmu_drex1s0", "div_aclk_drex1",
  1269. ENABLE_ACLK_MIF2, 15, CLK_IGNORE_UNUSED, 0),
  1270. GATE(CLK_ACLK_PPMU_DREX0S3, "aclk_ppmu_drex0s3", "div_aclk_drex0",
  1271. ENABLE_ACLK_MIF2, 14, CLK_IGNORE_UNUSED, 0),
  1272. GATE(CLK_ACLK_PPMU_DREX0S1, "aclk_ppmu_drex0s1", "div_aclk_drex0",
  1273. ENABLE_ACLK_MIF2, 13, CLK_IGNORE_UNUSED, 0),
  1274. GATE(CLK_ACLK_PPMU_DREX0S0, "aclk_ppmu_drex0s0", "div_aclk_drex0",
  1275. ENABLE_ACLK_MIF2, 12, CLK_IGNORE_UNUSED, 0),
  1276. GATE(CLK_ACLK_AXIDS_CCI_MIFSFRX, "aclk_axids_cci_mifsfrx",
  1277. "div_aclk_mif_200", ENABLE_ACLK_MIF2, 7,
  1278. CLK_IGNORE_UNUSED, 0),
  1279. GATE(CLK_ACLK_AXISYNCDNS_CCI, "aclk_axisyncdns_cci",
  1280. "div_aclk_mif_400", ENABLE_ACLK_MIF2,
  1281. 5, CLK_IGNORE_UNUSED, 0),
  1282. GATE(CLK_ACLK_AXISYNCDN_CCI, "aclk_axisyncdn_cci", "div_aclk_mif_400",
  1283. ENABLE_ACLK_MIF2, 4, CLK_IGNORE_UNUSED, 0),
  1284. GATE(CLK_ACLK_AXISYNCDN_NOC_D, "aclk_axisyncdn_noc_d",
  1285. "div_aclk_mif_200", ENABLE_ACLK_MIF2,
  1286. 3, CLK_IGNORE_UNUSED, 0),
  1287. GATE(CLK_ACLK_ASYNCAPBS_MIF_CSSYS, "aclk_asyncapbs_mif_cssys",
  1288. "div_aclk_mifnd_133", ENABLE_ACLK_MIF2, 0, 0, 0),
  1289. /* ENABLE_ACLK_MIF3 */
  1290. GATE(CLK_ACLK_BUS2_400, "aclk_bus2_400", "div_aclk_bus2_400",
  1291. ENABLE_ACLK_MIF3, 4,
  1292. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  1293. GATE(CLK_ACLK_DISP_333, "aclk_disp_333", "div_aclk_disp_333",
  1294. ENABLE_ACLK_MIF3, 1,
  1295. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  1296. GATE(CLK_ACLK_CPIF_200, "aclk_cpif_200", "div_aclk_cpif_200",
  1297. ENABLE_ACLK_MIF3, 0,
  1298. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  1299. /* ENABLE_PCLK_MIF */
  1300. GATE(CLK_PCLK_PPMU_DREX1S3, "pclk_ppmu_drex1s3", "div_aclk_drex1",
  1301. ENABLE_PCLK_MIF, 29, CLK_IGNORE_UNUSED, 0),
  1302. GATE(CLK_PCLK_PPMU_DREX1S1, "pclk_ppmu_drex1s1", "div_aclk_drex1",
  1303. ENABLE_PCLK_MIF, 28, CLK_IGNORE_UNUSED, 0),
  1304. GATE(CLK_PCLK_PPMU_DREX1S0, "pclk_ppmu_drex1s0", "div_aclk_drex1",
  1305. ENABLE_PCLK_MIF, 27, CLK_IGNORE_UNUSED, 0),
  1306. GATE(CLK_PCLK_PPMU_DREX0S3, "pclk_ppmu_drex0s3", "div_aclk_drex0",
  1307. ENABLE_PCLK_MIF, 26, CLK_IGNORE_UNUSED, 0),
  1308. GATE(CLK_PCLK_PPMU_DREX0S1, "pclk_ppmu_drex0s1", "div_aclk_drex0",
  1309. ENABLE_PCLK_MIF, 25, CLK_IGNORE_UNUSED, 0),
  1310. GATE(CLK_PCLK_PPMU_DREX0S0, "pclk_ppmu_drex0s0", "div_aclk_drex0",
  1311. ENABLE_PCLK_MIF, 24, CLK_IGNORE_UNUSED, 0),
  1312. GATE(CLK_PCLK_ASYNCAXI_NOC_P_CCI, "pclk_asyncaxi_noc_p_cci",
  1313. "div_aclk_mif_133", ENABLE_PCLK_MIF, 21,
  1314. CLK_IGNORE_UNUSED, 0),
  1315. GATE(CLK_PCLK_ASYNCAXI_CP1, "pclk_asyncaxi_cp1", "div_aclk_mif_133",
  1316. ENABLE_PCLK_MIF, 19, 0, 0),
  1317. GATE(CLK_PCLK_ASYNCAXI_CP0, "pclk_asyncaxi_cp0", "div_aclk_mif_133",
  1318. ENABLE_PCLK_MIF, 18, 0, 0),
  1319. GATE(CLK_PCLK_ASYNCAXI_DREX1_3, "pclk_asyncaxi_drex1_3",
  1320. "div_aclk_mif_133", ENABLE_PCLK_MIF, 17, 0, 0),
  1321. GATE(CLK_PCLK_ASYNCAXI_DREX1_1, "pclk_asyncaxi_drex1_1",
  1322. "div_aclk_mif_133", ENABLE_PCLK_MIF, 16, 0, 0),
  1323. GATE(CLK_PCLK_ASYNCAXI_DREX1_0, "pclk_asyncaxi_drex1_0",
  1324. "div_aclk_mif_133", ENABLE_PCLK_MIF, 15, 0, 0),
  1325. GATE(CLK_PCLK_ASYNCAXI_DREX0_3, "pclk_asyncaxi_drex0_3",
  1326. "div_aclk_mif_133", ENABLE_PCLK_MIF, 14, 0, 0),
  1327. GATE(CLK_PCLK_ASYNCAXI_DREX0_1, "pclk_asyncaxi_drex0_1",
  1328. "div_aclk_mif_133", ENABLE_PCLK_MIF, 13, 0, 0),
  1329. GATE(CLK_PCLK_ASYNCAXI_DREX0_0, "pclk_asyncaxi_drex0_0",
  1330. "div_aclk_mif_133", ENABLE_PCLK_MIF, 12, 0, 0),
  1331. GATE(CLK_PCLK_MIFSRVND_133, "pclk_mifsrvnd_133", "div_aclk_mif_133",
  1332. ENABLE_PCLK_MIF, 11, 0, 0),
  1333. GATE(CLK_PCLK_PMU_MIF, "pclk_pmu_mif", "div_aclk_mif_133",
  1334. ENABLE_PCLK_MIF, 10, CLK_IGNORE_UNUSED, 0),
  1335. GATE(CLK_PCLK_SYSREG_MIF, "pclk_sysreg_mif", "div_aclk_mif_133",
  1336. ENABLE_PCLK_MIF, 9, CLK_IGNORE_UNUSED, 0),
  1337. GATE(CLK_PCLK_GPIO_ALIVE, "pclk_gpio_alive", "div_aclk_mif_133",
  1338. ENABLE_PCLK_MIF, 8, CLK_IGNORE_UNUSED, 0),
  1339. GATE(CLK_PCLK_ABB, "pclk_abb", "div_aclk_mif_133",
  1340. ENABLE_PCLK_MIF, 7, 0, 0),
  1341. GATE(CLK_PCLK_PMU_APBIF, "pclk_pmu_apbif", "div_aclk_mif_133",
  1342. ENABLE_PCLK_MIF, 6, CLK_IGNORE_UNUSED, 0),
  1343. GATE(CLK_PCLK_DDR_PHY1, "pclk_ddr_phy1", "div_aclk_mif_133",
  1344. ENABLE_PCLK_MIF, 5, 0, 0),
  1345. GATE(CLK_PCLK_DREX1, "pclk_drex1", "div_aclk_mif_133",
  1346. ENABLE_PCLK_MIF, 3, CLK_IGNORE_UNUSED, 0),
  1347. GATE(CLK_PCLK_DDR_PHY0, "pclk_ddr_phy0", "div_aclk_mif_133",
  1348. ENABLE_PCLK_MIF, 2, 0, 0),
  1349. GATE(CLK_PCLK_DREX0, "pclk_drex0", "div_aclk_mif_133",
  1350. ENABLE_PCLK_MIF, 0, CLK_IGNORE_UNUSED, 0),
  1351. /* ENABLE_PCLK_MIF_SECURE_DREX0_TZ */
  1352. GATE(CLK_PCLK_DREX0_TZ, "pclk_drex0_tz", "div_aclk_mif_133",
  1353. ENABLE_PCLK_MIF_SECURE_DREX0_TZ, 0,
  1354. CLK_IGNORE_UNUSED, 0),
  1355. /* ENABLE_PCLK_MIF_SECURE_DREX1_TZ */
  1356. GATE(CLK_PCLK_DREX1_TZ, "pclk_drex1_tz", "div_aclk_mif_133",
  1357. ENABLE_PCLK_MIF_SECURE_DREX1_TZ, 0,
  1358. CLK_IGNORE_UNUSED, 0),
  1359. /* ENABLE_PCLK_MIF_SECURE_MONOTONIC_CNT */
  1360. GATE(CLK_PCLK_MONOTONIC_CNT, "pclk_monotonic_cnt", "div_aclk_mif_133",
  1361. ENABLE_PCLK_MIF_SECURE_MONOTONIC_CNT, 0, 0, 0),
  1362. /* ENABLE_PCLK_MIF_SECURE_RTC */
  1363. GATE(CLK_PCLK_RTC, "pclk_rtc", "div_aclk_mif_133",
  1364. ENABLE_PCLK_MIF_SECURE_RTC, 0, 0, 0),
  1365. /* ENABLE_SCLK_MIF */
  1366. GATE(CLK_SCLK_DSIM1_DISP, "sclk_dsim1_disp", "div_sclk_dsim1",
  1367. ENABLE_SCLK_MIF, 15, CLK_IGNORE_UNUSED, 0),
  1368. GATE(CLK_SCLK_DECON_TV_VCLK_DISP, "sclk_decon_tv_vclk_disp",
  1369. "div_sclk_decon_tv_vclk", ENABLE_SCLK_MIF,
  1370. 14, CLK_IGNORE_UNUSED, 0),
  1371. GATE(CLK_SCLK_DSIM0_DISP, "sclk_dsim0_disp", "div_sclk_dsim0",
  1372. ENABLE_SCLK_MIF, 9, CLK_IGNORE_UNUSED, 0),
  1373. GATE(CLK_SCLK_DSD_DISP, "sclk_dsd_disp", "div_sclk_dsd",
  1374. ENABLE_SCLK_MIF, 8, CLK_IGNORE_UNUSED, 0),
  1375. GATE(CLK_SCLK_DECON_TV_ECLK_DISP, "sclk_decon_tv_eclk_disp",
  1376. "div_sclk_decon_tv_eclk", ENABLE_SCLK_MIF,
  1377. 7, CLK_IGNORE_UNUSED, 0),
  1378. GATE(CLK_SCLK_DECON_VCLK_DISP, "sclk_decon_vclk_disp",
  1379. "div_sclk_decon_vclk", ENABLE_SCLK_MIF,
  1380. 6, CLK_IGNORE_UNUSED, 0),
  1381. GATE(CLK_SCLK_DECON_ECLK_DISP, "sclk_decon_eclk_disp",
  1382. "div_sclk_decon_eclk", ENABLE_SCLK_MIF,
  1383. 5, CLK_IGNORE_UNUSED, 0),
  1384. GATE(CLK_SCLK_HPM_MIF, "sclk_hpm_mif", "div_sclk_hpm_mif",
  1385. ENABLE_SCLK_MIF, 4,
  1386. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  1387. GATE(CLK_SCLK_MFC_PLL, "sclk_mfc_pll", "mout_mfc_pll_div2",
  1388. ENABLE_SCLK_MIF, 3, CLK_IGNORE_UNUSED, 0),
  1389. GATE(CLK_SCLK_BUS_PLL, "sclk_bus_pll", "mout_bus_pll_div2",
  1390. ENABLE_SCLK_MIF, 2, CLK_IGNORE_UNUSED, 0),
  1391. GATE(CLK_SCLK_BUS_PLL_APOLLO, "sclk_bus_pll_apollo", "sclk_bus_pll",
  1392. ENABLE_SCLK_MIF, 1, CLK_IGNORE_UNUSED, 0),
  1393. GATE(CLK_SCLK_BUS_PLL_ATLAS, "sclk_bus_pll_atlas", "sclk_bus_pll",
  1394. ENABLE_SCLK_MIF, 0, CLK_IGNORE_UNUSED, 0),
  1395. };
  1396. static const struct samsung_cmu_info mif_cmu_info __initconst = {
  1397. .pll_clks = mif_pll_clks,
  1398. .nr_pll_clks = ARRAY_SIZE(mif_pll_clks),
  1399. .mux_clks = mif_mux_clks,
  1400. .nr_mux_clks = ARRAY_SIZE(mif_mux_clks),
  1401. .div_clks = mif_div_clks,
  1402. .nr_div_clks = ARRAY_SIZE(mif_div_clks),
  1403. .gate_clks = mif_gate_clks,
  1404. .nr_gate_clks = ARRAY_SIZE(mif_gate_clks),
  1405. .fixed_factor_clks = mif_fixed_factor_clks,
  1406. .nr_fixed_factor_clks = ARRAY_SIZE(mif_fixed_factor_clks),
  1407. .nr_clk_ids = MIF_NR_CLK,
  1408. .clk_regs = mif_clk_regs,
  1409. .nr_clk_regs = ARRAY_SIZE(mif_clk_regs),
  1410. };
  1411. static void __init exynos5433_cmu_mif_init(struct device_node *np)
  1412. {
  1413. samsung_cmu_register_one(np, &mif_cmu_info);
  1414. }
  1415. CLK_OF_DECLARE(exynos5433_cmu_mif, "samsung,exynos5433-cmu-mif",
  1416. exynos5433_cmu_mif_init);
  1417. /*
  1418. * Register offset definitions for CMU_PERIC
  1419. */
  1420. #define DIV_PERIC 0x0600
  1421. #define DIV_STAT_PERIC 0x0700
  1422. #define ENABLE_ACLK_PERIC 0x0800
  1423. #define ENABLE_PCLK_PERIC0 0x0900
  1424. #define ENABLE_PCLK_PERIC1 0x0904
  1425. #define ENABLE_SCLK_PERIC 0x0A00
  1426. #define ENABLE_IP_PERIC0 0x0B00
  1427. #define ENABLE_IP_PERIC1 0x0B04
  1428. #define ENABLE_IP_PERIC2 0x0B08
  1429. static const unsigned long peric_clk_regs[] __initconst = {
  1430. DIV_PERIC,
  1431. ENABLE_ACLK_PERIC,
  1432. ENABLE_PCLK_PERIC0,
  1433. ENABLE_PCLK_PERIC1,
  1434. ENABLE_SCLK_PERIC,
  1435. ENABLE_IP_PERIC0,
  1436. ENABLE_IP_PERIC1,
  1437. ENABLE_IP_PERIC2,
  1438. };
  1439. static const struct samsung_div_clock peric_div_clks[] __initconst = {
  1440. /* DIV_PERIC */
  1441. DIV(CLK_DIV_SCLK_SCI, "div_sclk_sci", "oscclk", DIV_PERIC, 4, 4),
  1442. DIV(CLK_DIV_SCLK_SC_IN, "div_sclk_sc_in", "oscclk", DIV_PERIC, 0, 4),
  1443. };
  1444. static const struct samsung_gate_clock peric_gate_clks[] __initconst = {
  1445. /* ENABLE_ACLK_PERIC */
  1446. GATE(CLK_ACLK_AHB2APB_PERIC2P, "aclk_ahb2apb_peric2p", "aclk_peric_66",
  1447. ENABLE_ACLK_PERIC, 3, CLK_IGNORE_UNUSED, 0),
  1448. GATE(CLK_ACLK_AHB2APB_PERIC1P, "aclk_ahb2apb_peric1p", "aclk_peric_66",
  1449. ENABLE_ACLK_PERIC, 2, CLK_IGNORE_UNUSED, 0),
  1450. GATE(CLK_ACLK_AHB2APB_PERIC0P, "aclk_ahb2apb_peric0p", "aclk_peric_66",
  1451. ENABLE_ACLK_PERIC, 1, CLK_IGNORE_UNUSED, 0),
  1452. GATE(CLK_ACLK_PERICNP_66, "aclk_pericnp_66", "aclk_peric_66",
  1453. ENABLE_ACLK_PERIC, 0, CLK_IGNORE_UNUSED, 0),
  1454. /* ENABLE_PCLK_PERIC0 */
  1455. GATE(CLK_PCLK_SCI, "pclk_sci", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1456. 31, CLK_SET_RATE_PARENT, 0),
  1457. GATE(CLK_PCLK_GPIO_FINGER, "pclk_gpio_finger", "aclk_peric_66",
  1458. ENABLE_PCLK_PERIC0, 30, CLK_IGNORE_UNUSED, 0),
  1459. GATE(CLK_PCLK_GPIO_ESE, "pclk_gpio_ese", "aclk_peric_66",
  1460. ENABLE_PCLK_PERIC0, 29, CLK_IGNORE_UNUSED, 0),
  1461. GATE(CLK_PCLK_PWM, "pclk_pwm", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1462. 28, CLK_SET_RATE_PARENT, 0),
  1463. GATE(CLK_PCLK_SPDIF, "pclk_spdif", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1464. 26, CLK_SET_RATE_PARENT, 0),
  1465. GATE(CLK_PCLK_PCM1, "pclk_pcm1", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1466. 25, CLK_SET_RATE_PARENT, 0),
  1467. GATE(CLK_PCLK_I2S1, "pclk_i2s", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1468. 24, CLK_SET_RATE_PARENT, 0),
  1469. GATE(CLK_PCLK_SPI2, "pclk_spi2", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1470. 23, CLK_SET_RATE_PARENT, 0),
  1471. GATE(CLK_PCLK_SPI1, "pclk_spi1", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1472. 22, CLK_SET_RATE_PARENT, 0),
  1473. GATE(CLK_PCLK_SPI0, "pclk_spi0", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1474. 21, CLK_SET_RATE_PARENT, 0),
  1475. GATE(CLK_PCLK_ADCIF, "pclk_adcif", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1476. 20, CLK_SET_RATE_PARENT, 0),
  1477. GATE(CLK_PCLK_GPIO_TOUCH, "pclk_gpio_touch", "aclk_peric_66",
  1478. ENABLE_PCLK_PERIC0, 19, CLK_IGNORE_UNUSED, 0),
  1479. GATE(CLK_PCLK_GPIO_NFC, "pclk_gpio_nfc", "aclk_peric_66",
  1480. ENABLE_PCLK_PERIC0, 18, CLK_IGNORE_UNUSED, 0),
  1481. GATE(CLK_PCLK_GPIO_PERIC, "pclk_gpio_peric", "aclk_peric_66",
  1482. ENABLE_PCLK_PERIC0, 17, CLK_IGNORE_UNUSED, 0),
  1483. GATE(CLK_PCLK_PMU_PERIC, "pclk_pmu_peric", "aclk_peric_66",
  1484. ENABLE_PCLK_PERIC0, 16, CLK_SET_RATE_PARENT, 0),
  1485. GATE(CLK_PCLK_SYSREG_PERIC, "pclk_sysreg_peric", "aclk_peric_66",
  1486. ENABLE_PCLK_PERIC0, 15,
  1487. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  1488. GATE(CLK_PCLK_UART2, "pclk_uart2", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1489. 14, CLK_SET_RATE_PARENT, 0),
  1490. GATE(CLK_PCLK_UART1, "pclk_uart1", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1491. 13, CLK_SET_RATE_PARENT, 0),
  1492. GATE(CLK_PCLK_UART0, "pclk_uart0", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1493. 12, CLK_SET_RATE_PARENT, 0),
  1494. GATE(CLK_PCLK_HSI2C3, "pclk_hsi2c3", "aclk_peric_66",
  1495. ENABLE_PCLK_PERIC0, 11, CLK_SET_RATE_PARENT, 0),
  1496. GATE(CLK_PCLK_HSI2C2, "pclk_hsi2c2", "aclk_peric_66",
  1497. ENABLE_PCLK_PERIC0, 10, CLK_SET_RATE_PARENT, 0),
  1498. GATE(CLK_PCLK_HSI2C1, "pclk_hsi2c1", "aclk_peric_66",
  1499. ENABLE_PCLK_PERIC0, 9, CLK_SET_RATE_PARENT, 0),
  1500. GATE(CLK_PCLK_HSI2C0, "pclk_hsi2c0", "aclk_peric_66",
  1501. ENABLE_PCLK_PERIC0, 8, CLK_SET_RATE_PARENT, 0),
  1502. GATE(CLK_PCLK_I2C7, "pclk_i2c7", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1503. 7, CLK_SET_RATE_PARENT, 0),
  1504. GATE(CLK_PCLK_I2C6, "pclk_i2c6", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1505. 6, CLK_SET_RATE_PARENT, 0),
  1506. GATE(CLK_PCLK_I2C5, "pclk_i2c5", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1507. 5, CLK_SET_RATE_PARENT, 0),
  1508. GATE(CLK_PCLK_I2C4, "pclk_i2c4", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1509. 4, CLK_SET_RATE_PARENT, 0),
  1510. GATE(CLK_PCLK_I2C3, "pclk_i2c3", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1511. 3, CLK_SET_RATE_PARENT, 0),
  1512. GATE(CLK_PCLK_I2C2, "pclk_i2c2", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1513. 2, CLK_SET_RATE_PARENT, 0),
  1514. GATE(CLK_PCLK_I2C1, "pclk_i2c1", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1515. 1, CLK_SET_RATE_PARENT, 0),
  1516. GATE(CLK_PCLK_I2C0, "pclk_i2c0", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1517. 0, CLK_SET_RATE_PARENT, 0),
  1518. /* ENABLE_PCLK_PERIC1 */
  1519. GATE(CLK_PCLK_SPI4, "pclk_spi4", "aclk_peric_66", ENABLE_PCLK_PERIC1,
  1520. 9, CLK_SET_RATE_PARENT, 0),
  1521. GATE(CLK_PCLK_SPI3, "pclk_spi3", "aclk_peric_66", ENABLE_PCLK_PERIC1,
  1522. 8, CLK_SET_RATE_PARENT, 0),
  1523. GATE(CLK_PCLK_HSI2C11, "pclk_hsi2c11", "aclk_peric_66",
  1524. ENABLE_PCLK_PERIC1, 7, CLK_SET_RATE_PARENT, 0),
  1525. GATE(CLK_PCLK_HSI2C10, "pclk_hsi2c10", "aclk_peric_66",
  1526. ENABLE_PCLK_PERIC1, 6, CLK_SET_RATE_PARENT, 0),
  1527. GATE(CLK_PCLK_HSI2C9, "pclk_hsi2c9", "aclk_peric_66",
  1528. ENABLE_PCLK_PERIC1, 5, CLK_SET_RATE_PARENT, 0),
  1529. GATE(CLK_PCLK_HSI2C8, "pclk_hsi2c8", "aclk_peric_66",
  1530. ENABLE_PCLK_PERIC1, 4, CLK_SET_RATE_PARENT, 0),
  1531. GATE(CLK_PCLK_HSI2C7, "pclk_hsi2c7", "aclk_peric_66",
  1532. ENABLE_PCLK_PERIC1, 3, CLK_SET_RATE_PARENT, 0),
  1533. GATE(CLK_PCLK_HSI2C6, "pclk_hsi2c6", "aclk_peric_66",
  1534. ENABLE_PCLK_PERIC1, 2, CLK_SET_RATE_PARENT, 0),
  1535. GATE(CLK_PCLK_HSI2C5, "pclk_hsi2c5", "aclk_peric_66",
  1536. ENABLE_PCLK_PERIC1, 1, CLK_SET_RATE_PARENT, 0),
  1537. GATE(CLK_PCLK_HSI2C4, "pclk_hsi2c4", "aclk_peric_66",
  1538. ENABLE_PCLK_PERIC1, 0, CLK_SET_RATE_PARENT, 0),
  1539. /* ENABLE_SCLK_PERIC */
  1540. GATE(CLK_SCLK_IOCLK_SPI4, "sclk_ioclk_spi4", "ioclk_spi4_clk_in",
  1541. ENABLE_SCLK_PERIC, 21, CLK_SET_RATE_PARENT, 0),
  1542. GATE(CLK_SCLK_IOCLK_SPI3, "sclk_ioclk_spi3", "ioclk_spi3_clk_in",
  1543. ENABLE_SCLK_PERIC, 20, CLK_SET_RATE_PARENT, 0),
  1544. GATE(CLK_SCLK_SPI4, "sclk_spi4", "sclk_spi4_peric", ENABLE_SCLK_PERIC,
  1545. 19, CLK_SET_RATE_PARENT, 0),
  1546. GATE(CLK_SCLK_SPI3, "sclk_spi3", "sclk_spi3_peric", ENABLE_SCLK_PERIC,
  1547. 18, CLK_SET_RATE_PARENT, 0),
  1548. GATE(CLK_SCLK_SCI, "sclk_sci", "div_sclk_sci", ENABLE_SCLK_PERIC,
  1549. 17, 0, 0),
  1550. GATE(CLK_SCLK_SC_IN, "sclk_sc_in", "div_sclk_sc_in", ENABLE_SCLK_PERIC,
  1551. 16, 0, 0),
  1552. GATE(CLK_SCLK_PWM, "sclk_pwm", "oscclk", ENABLE_SCLK_PERIC, 15, 0, 0),
  1553. GATE(CLK_SCLK_IOCLK_SPI2, "sclk_ioclk_spi2", "ioclk_spi2_clk_in",
  1554. ENABLE_SCLK_PERIC, 13, CLK_SET_RATE_PARENT, 0),
  1555. GATE(CLK_SCLK_IOCLK_SPI1, "sclk_ioclk_spi1", "ioclk_spi1_clk_in",
  1556. ENABLE_SCLK_PERIC, 12, CLK_SET_RATE_PARENT, 0),
  1557. GATE(CLK_SCLK_IOCLK_SPI0, "sclk_ioclk_spi0", "ioclk_spi0_clk_in",
  1558. ENABLE_SCLK_PERIC, 11, CLK_SET_RATE_PARENT, 0),
  1559. GATE(CLK_SCLK_IOCLK_I2S1_BCLK, "sclk_ioclk_i2s1_bclk",
  1560. "ioclk_i2s1_bclk_in", ENABLE_SCLK_PERIC, 10,
  1561. CLK_SET_RATE_PARENT, 0),
  1562. GATE(CLK_SCLK_SPDIF, "sclk_spdif", "sclk_spdif_peric",
  1563. ENABLE_SCLK_PERIC, 8, CLK_SET_RATE_PARENT, 0),
  1564. GATE(CLK_SCLK_PCM1, "sclk_pcm1", "sclk_pcm1_peric",
  1565. ENABLE_SCLK_PERIC, 7, CLK_SET_RATE_PARENT, 0),
  1566. GATE(CLK_SCLK_I2S1, "sclk_i2s1", "sclk_i2s1_peric",
  1567. ENABLE_SCLK_PERIC, 6, CLK_SET_RATE_PARENT, 0),
  1568. GATE(CLK_SCLK_SPI2, "sclk_spi2", "sclk_spi2_peric", ENABLE_SCLK_PERIC,
  1569. 5, CLK_SET_RATE_PARENT, 0),
  1570. GATE(CLK_SCLK_SPI1, "sclk_spi1", "sclk_spi1_peric", ENABLE_SCLK_PERIC,
  1571. 4, CLK_SET_RATE_PARENT, 0),
  1572. GATE(CLK_SCLK_SPI0, "sclk_spi0", "sclk_spi0_peric", ENABLE_SCLK_PERIC,
  1573. 3, CLK_SET_RATE_PARENT, 0),
  1574. GATE(CLK_SCLK_UART2, "sclk_uart2", "sclk_uart2_peric",
  1575. ENABLE_SCLK_PERIC, 2,
  1576. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  1577. GATE(CLK_SCLK_UART1, "sclk_uart1", "sclk_uart1_peric",
  1578. ENABLE_SCLK_PERIC, 1,
  1579. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  1580. GATE(CLK_SCLK_UART0, "sclk_uart0", "sclk_uart0_peric",
  1581. ENABLE_SCLK_PERIC, 0,
  1582. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  1583. };
  1584. static const struct samsung_cmu_info peric_cmu_info __initconst = {
  1585. .div_clks = peric_div_clks,
  1586. .nr_div_clks = ARRAY_SIZE(peric_div_clks),
  1587. .gate_clks = peric_gate_clks,
  1588. .nr_gate_clks = ARRAY_SIZE(peric_gate_clks),
  1589. .nr_clk_ids = PERIC_NR_CLK,
  1590. .clk_regs = peric_clk_regs,
  1591. .nr_clk_regs = ARRAY_SIZE(peric_clk_regs),
  1592. };
  1593. static void __init exynos5433_cmu_peric_init(struct device_node *np)
  1594. {
  1595. samsung_cmu_register_one(np, &peric_cmu_info);
  1596. }
  1597. CLK_OF_DECLARE(exynos5433_cmu_peric, "samsung,exynos5433-cmu-peric",
  1598. exynos5433_cmu_peric_init);
  1599. /*
  1600. * Register offset definitions for CMU_PERIS
  1601. */
  1602. #define ENABLE_ACLK_PERIS 0x0800
  1603. #define ENABLE_PCLK_PERIS 0x0900
  1604. #define ENABLE_PCLK_PERIS_SECURE_TZPC 0x0904
  1605. #define ENABLE_PCLK_PERIS_SECURE_SECKEY_APBIF 0x0908
  1606. #define ENABLE_PCLK_PERIS_SECURE_CHIPID_APBIF 0x090c
  1607. #define ENABLE_PCLK_PERIS_SECURE_TOPRTC 0x0910
  1608. #define ENABLE_PCLK_PERIS_SECURE_CUSTOM_EFUSE_APBIF 0x0914
  1609. #define ENABLE_PCLK_PERIS_SECURE_ANTIRBK_CNT_APBIF 0x0918
  1610. #define ENABLE_PCLK_PERIS_SECURE_OTP_CON_APBIF 0x091c
  1611. #define ENABLE_SCLK_PERIS 0x0a00
  1612. #define ENABLE_SCLK_PERIS_SECURE_SECKEY 0x0a04
  1613. #define ENABLE_SCLK_PERIS_SECURE_CHIPID 0x0a08
  1614. #define ENABLE_SCLK_PERIS_SECURE_TOPRTC 0x0a0c
  1615. #define ENABLE_SCLK_PERIS_SECURE_CUSTOM_EFUSE 0x0a10
  1616. #define ENABLE_SCLK_PERIS_SECURE_ANTIRBK_CNT 0x0a14
  1617. #define ENABLE_SCLK_PERIS_SECURE_OTP_CON 0x0a18
  1618. #define ENABLE_IP_PERIS0 0x0b00
  1619. #define ENABLE_IP_PERIS1 0x0b04
  1620. #define ENABLE_IP_PERIS_SECURE_TZPC 0x0b08
  1621. #define ENABLE_IP_PERIS_SECURE_SECKEY 0x0b0c
  1622. #define ENABLE_IP_PERIS_SECURE_CHIPID 0x0b10
  1623. #define ENABLE_IP_PERIS_SECURE_TOPRTC 0x0b14
  1624. #define ENABLE_IP_PERIS_SECURE_CUSTOM_EFUSE 0x0b18
  1625. #define ENABLE_IP_PERIS_SECURE_ANTIBRK_CNT 0x0b1c
  1626. #define ENABLE_IP_PERIS_SECURE_OTP_CON 0x0b20
  1627. static const unsigned long peris_clk_regs[] __initconst = {
  1628. ENABLE_ACLK_PERIS,
  1629. ENABLE_PCLK_PERIS,
  1630. ENABLE_PCLK_PERIS_SECURE_TZPC,
  1631. ENABLE_PCLK_PERIS_SECURE_SECKEY_APBIF,
  1632. ENABLE_PCLK_PERIS_SECURE_CHIPID_APBIF,
  1633. ENABLE_PCLK_PERIS_SECURE_TOPRTC,
  1634. ENABLE_PCLK_PERIS_SECURE_CUSTOM_EFUSE_APBIF,
  1635. ENABLE_PCLK_PERIS_SECURE_ANTIRBK_CNT_APBIF,
  1636. ENABLE_PCLK_PERIS_SECURE_OTP_CON_APBIF,
  1637. ENABLE_SCLK_PERIS,
  1638. ENABLE_SCLK_PERIS_SECURE_SECKEY,
  1639. ENABLE_SCLK_PERIS_SECURE_CHIPID,
  1640. ENABLE_SCLK_PERIS_SECURE_TOPRTC,
  1641. ENABLE_SCLK_PERIS_SECURE_CUSTOM_EFUSE,
  1642. ENABLE_SCLK_PERIS_SECURE_ANTIRBK_CNT,
  1643. ENABLE_SCLK_PERIS_SECURE_OTP_CON,
  1644. ENABLE_IP_PERIS0,
  1645. ENABLE_IP_PERIS1,
  1646. ENABLE_IP_PERIS_SECURE_TZPC,
  1647. ENABLE_IP_PERIS_SECURE_SECKEY,
  1648. ENABLE_IP_PERIS_SECURE_CHIPID,
  1649. ENABLE_IP_PERIS_SECURE_TOPRTC,
  1650. ENABLE_IP_PERIS_SECURE_CUSTOM_EFUSE,
  1651. ENABLE_IP_PERIS_SECURE_ANTIBRK_CNT,
  1652. ENABLE_IP_PERIS_SECURE_OTP_CON,
  1653. };
  1654. static const struct samsung_gate_clock peris_gate_clks[] __initconst = {
  1655. /* ENABLE_ACLK_PERIS */
  1656. GATE(CLK_ACLK_AHB2APB_PERIS1P, "aclk_ahb2apb_peris1p", "aclk_peris_66",
  1657. ENABLE_ACLK_PERIS, 2, CLK_IGNORE_UNUSED, 0),
  1658. GATE(CLK_ACLK_AHB2APB_PERIS0P, "aclk_ahb2apb_peris0p", "aclk_peris_66",
  1659. ENABLE_ACLK_PERIS, 1, CLK_IGNORE_UNUSED, 0),
  1660. GATE(CLK_ACLK_PERISNP_66, "aclk_perisnp_66", "aclk_peris_66",
  1661. ENABLE_ACLK_PERIS, 0, CLK_IGNORE_UNUSED, 0),
  1662. /* ENABLE_PCLK_PERIS */
  1663. GATE(CLK_PCLK_HPM_APBIF, "pclk_hpm_apbif", "aclk_peris_66",
  1664. ENABLE_PCLK_PERIS, 30, CLK_IGNORE_UNUSED, 0),
  1665. GATE(CLK_PCLK_TMU1_APBIF, "pclk_tmu1_apbif", "aclk_peris_66",
  1666. ENABLE_PCLK_PERIS, 24, CLK_IGNORE_UNUSED, 0),
  1667. GATE(CLK_PCLK_TMU0_APBIF, "pclk_tmu0_apbif", "aclk_peris_66",
  1668. ENABLE_PCLK_PERIS, 23, CLK_IGNORE_UNUSED, 0),
  1669. GATE(CLK_PCLK_PMU_PERIS, "pclk_pmu_peris", "aclk_peris_66",
  1670. ENABLE_PCLK_PERIS, 22, CLK_IGNORE_UNUSED, 0),
  1671. GATE(CLK_PCLK_SYSREG_PERIS, "pclk_sysreg_peris", "aclk_peris_66",
  1672. ENABLE_PCLK_PERIS, 21, CLK_IGNORE_UNUSED, 0),
  1673. GATE(CLK_PCLK_CMU_TOP_APBIF, "pclk_cmu_top_apbif", "aclk_peris_66",
  1674. ENABLE_PCLK_PERIS, 20, CLK_IGNORE_UNUSED, 0),
  1675. GATE(CLK_PCLK_WDT_APOLLO, "pclk_wdt_apollo", "aclk_peris_66",
  1676. ENABLE_PCLK_PERIS, 17, CLK_IGNORE_UNUSED, 0),
  1677. GATE(CLK_PCLK_WDT_ATLAS, "pclk_wdt_atlas", "aclk_peris_66",
  1678. ENABLE_PCLK_PERIS, 16, CLK_IGNORE_UNUSED, 0),
  1679. GATE(CLK_PCLK_MCT, "pclk_mct", "aclk_peris_66",
  1680. ENABLE_PCLK_PERIS, 15, CLK_IGNORE_UNUSED, 0),
  1681. GATE(CLK_PCLK_HDMI_CEC, "pclk_hdmi_cec", "aclk_peris_66",
  1682. ENABLE_PCLK_PERIS, 14, CLK_IGNORE_UNUSED, 0),
  1683. /* ENABLE_PCLK_PERIS_SECURE_TZPC */
  1684. GATE(CLK_PCLK_TZPC12, "pclk_tzpc12", "aclk_peris_66",
  1685. ENABLE_PCLK_PERIS_SECURE_TZPC, 12, CLK_IGNORE_UNUSED, 0),
  1686. GATE(CLK_PCLK_TZPC11, "pclk_tzpc11", "aclk_peris_66",
  1687. ENABLE_PCLK_PERIS_SECURE_TZPC, 11, CLK_IGNORE_UNUSED, 0),
  1688. GATE(CLK_PCLK_TZPC10, "pclk_tzpc10", "aclk_peris_66",
  1689. ENABLE_PCLK_PERIS_SECURE_TZPC, 10, CLK_IGNORE_UNUSED, 0),
  1690. GATE(CLK_PCLK_TZPC9, "pclk_tzpc9", "aclk_peris_66",
  1691. ENABLE_PCLK_PERIS_SECURE_TZPC, 9, CLK_IGNORE_UNUSED, 0),
  1692. GATE(CLK_PCLK_TZPC8, "pclk_tzpc8", "aclk_peris_66",
  1693. ENABLE_PCLK_PERIS_SECURE_TZPC, 8, CLK_IGNORE_UNUSED, 0),
  1694. GATE(CLK_PCLK_TZPC7, "pclk_tzpc7", "aclk_peris_66",
  1695. ENABLE_PCLK_PERIS_SECURE_TZPC, 7, CLK_IGNORE_UNUSED, 0),
  1696. GATE(CLK_PCLK_TZPC6, "pclk_tzpc6", "aclk_peris_66",
  1697. ENABLE_PCLK_PERIS_SECURE_TZPC, 6, CLK_IGNORE_UNUSED, 0),
  1698. GATE(CLK_PCLK_TZPC5, "pclk_tzpc5", "aclk_peris_66",
  1699. ENABLE_PCLK_PERIS_SECURE_TZPC, 5, CLK_IGNORE_UNUSED, 0),
  1700. GATE(CLK_PCLK_TZPC4, "pclk_tzpc4", "aclk_peris_66",
  1701. ENABLE_PCLK_PERIS_SECURE_TZPC, 4, CLK_IGNORE_UNUSED, 0),
  1702. GATE(CLK_PCLK_TZPC3, "pclk_tzpc3", "aclk_peris_66",
  1703. ENABLE_PCLK_PERIS_SECURE_TZPC, 3, CLK_IGNORE_UNUSED, 0),
  1704. GATE(CLK_PCLK_TZPC2, "pclk_tzpc2", "aclk_peris_66",
  1705. ENABLE_PCLK_PERIS_SECURE_TZPC, 2, CLK_IGNORE_UNUSED, 0),
  1706. GATE(CLK_PCLK_TZPC1, "pclk_tzpc1", "aclk_peris_66",
  1707. ENABLE_PCLK_PERIS_SECURE_TZPC, 1, CLK_IGNORE_UNUSED, 0),
  1708. GATE(CLK_PCLK_TZPC0, "pclk_tzpc0", "aclk_peris_66",
  1709. ENABLE_PCLK_PERIS_SECURE_TZPC, 0, CLK_IGNORE_UNUSED, 0),
  1710. /* ENABLE_PCLK_PERIS_SECURE_SECKEY_APBIF */
  1711. GATE(CLK_PCLK_SECKEY_APBIF, "pclk_seckey_apbif", "aclk_peris_66",
  1712. ENABLE_PCLK_PERIS_SECURE_SECKEY_APBIF, 0, CLK_IGNORE_UNUSED, 0),
  1713. /* ENABLE_PCLK_PERIS_SECURE_CHIPID_APBIF */
  1714. GATE(CLK_PCLK_CHIPID_APBIF, "pclk_chipid_apbif", "aclk_peris_66",
  1715. ENABLE_PCLK_PERIS_SECURE_CHIPID_APBIF, 0, CLK_IGNORE_UNUSED, 0),
  1716. /* ENABLE_PCLK_PERIS_SECURE_TOPRTC */
  1717. GATE(CLK_PCLK_TOPRTC, "pclk_toprtc", "aclk_peris_66",
  1718. ENABLE_PCLK_PERIS_SECURE_TOPRTC, 0, 0, 0),
  1719. /* ENABLE_PCLK_PERIS_SECURE_CUSTOM_EFUSE_APBIF */
  1720. GATE(CLK_PCLK_CUSTOM_EFUSE_APBIF, "pclk_custom_efuse_apbif",
  1721. "aclk_peris_66",
  1722. ENABLE_PCLK_PERIS_SECURE_CUSTOM_EFUSE_APBIF, 0, 0, 0),
  1723. /* ENABLE_PCLK_PERIS_SECURE_ANTIRBK_CNT_APBIF */
  1724. GATE(CLK_PCLK_ANTIRBK_CNT_APBIF, "pclk_antirbk_cnt_apbif",
  1725. "aclk_peris_66",
  1726. ENABLE_PCLK_PERIS_SECURE_ANTIRBK_CNT_APBIF, 0, 0, 0),
  1727. /* ENABLE_PCLK_PERIS_SECURE_OTP_CON_APBIF */
  1728. GATE(CLK_PCLK_OTP_CON_APBIF, "pclk_otp_con_apbif",
  1729. "aclk_peris_66",
  1730. ENABLE_PCLK_PERIS_SECURE_OTP_CON_APBIF, 0, 0, 0),
  1731. /* ENABLE_SCLK_PERIS */
  1732. GATE(CLK_SCLK_ASV_TB, "sclk_asv_tb", "oscclk_efuse_common",
  1733. ENABLE_SCLK_PERIS, 10, 0, 0),
  1734. GATE(CLK_SCLK_TMU1, "sclk_tmu1", "oscclk_efuse_common",
  1735. ENABLE_SCLK_PERIS, 4, 0, 0),
  1736. GATE(CLK_SCLK_TMU0, "sclk_tmu0", "oscclk_efuse_common",
  1737. ENABLE_SCLK_PERIS, 3, 0, 0),
  1738. /* ENABLE_SCLK_PERIS_SECURE_SECKEY */
  1739. GATE(CLK_SCLK_SECKEY, "sclk_seckey", "oscclk_efuse_common",
  1740. ENABLE_SCLK_PERIS_SECURE_SECKEY, 0, CLK_IGNORE_UNUSED, 0),
  1741. /* ENABLE_SCLK_PERIS_SECURE_CHIPID */
  1742. GATE(CLK_SCLK_CHIPID, "sclk_chipid", "oscclk_efuse_common",
  1743. ENABLE_SCLK_PERIS_SECURE_CHIPID, 0, CLK_IGNORE_UNUSED, 0),
  1744. /* ENABLE_SCLK_PERIS_SECURE_TOPRTC */
  1745. GATE(CLK_SCLK_TOPRTC, "sclk_toprtc", "oscclk_efuse_common",
  1746. ENABLE_SCLK_PERIS_SECURE_TOPRTC, 0, 0, 0),
  1747. /* ENABLE_SCLK_PERIS_SECURE_CUSTOM_EFUSE */
  1748. GATE(CLK_SCLK_CUSTOM_EFUSE, "sclk_custom_efuse", "oscclk_efuse_common",
  1749. ENABLE_SCLK_PERIS_SECURE_CUSTOM_EFUSE, 0, 0, 0),
  1750. /* ENABLE_SCLK_PERIS_SECURE_ANTIRBK_CNT */
  1751. GATE(CLK_SCLK_ANTIRBK_CNT, "sclk_antirbk_cnt", "oscclk_efuse_common",
  1752. ENABLE_SCLK_PERIS_SECURE_ANTIRBK_CNT, 0, 0, 0),
  1753. /* ENABLE_SCLK_PERIS_SECURE_OTP_CON */
  1754. GATE(CLK_SCLK_OTP_CON, "sclk_otp_con", "oscclk_efuse_common",
  1755. ENABLE_SCLK_PERIS_SECURE_OTP_CON, 0, 0, 0),
  1756. };
  1757. static const struct samsung_cmu_info peris_cmu_info __initconst = {
  1758. .gate_clks = peris_gate_clks,
  1759. .nr_gate_clks = ARRAY_SIZE(peris_gate_clks),
  1760. .nr_clk_ids = PERIS_NR_CLK,
  1761. .clk_regs = peris_clk_regs,
  1762. .nr_clk_regs = ARRAY_SIZE(peris_clk_regs),
  1763. };
  1764. static void __init exynos5433_cmu_peris_init(struct device_node *np)
  1765. {
  1766. samsung_cmu_register_one(np, &peris_cmu_info);
  1767. }
  1768. CLK_OF_DECLARE(exynos5433_cmu_peris, "samsung,exynos5433-cmu-peris",
  1769. exynos5433_cmu_peris_init);
  1770. /*
  1771. * Register offset definitions for CMU_FSYS
  1772. */
  1773. #define MUX_SEL_FSYS0 0x0200
  1774. #define MUX_SEL_FSYS1 0x0204
  1775. #define MUX_SEL_FSYS2 0x0208
  1776. #define MUX_SEL_FSYS3 0x020c
  1777. #define MUX_SEL_FSYS4 0x0210
  1778. #define MUX_ENABLE_FSYS0 0x0300
  1779. #define MUX_ENABLE_FSYS1 0x0304
  1780. #define MUX_ENABLE_FSYS2 0x0308
  1781. #define MUX_ENABLE_FSYS3 0x030c
  1782. #define MUX_ENABLE_FSYS4 0x0310
  1783. #define MUX_STAT_FSYS0 0x0400
  1784. #define MUX_STAT_FSYS1 0x0404
  1785. #define MUX_STAT_FSYS2 0x0408
  1786. #define MUX_STAT_FSYS3 0x040c
  1787. #define MUX_STAT_FSYS4 0x0410
  1788. #define MUX_IGNORE_FSYS2 0x0508
  1789. #define MUX_IGNORE_FSYS3 0x050c
  1790. #define ENABLE_ACLK_FSYS0 0x0800
  1791. #define ENABLE_ACLK_FSYS1 0x0804
  1792. #define ENABLE_PCLK_FSYS 0x0900
  1793. #define ENABLE_SCLK_FSYS 0x0a00
  1794. #define ENABLE_IP_FSYS0 0x0b00
  1795. #define ENABLE_IP_FSYS1 0x0b04
  1796. /* list of all parent clock list */
  1797. PNAME(mout_sclk_ufs_mphy_user_p) = { "oscclk", "sclk_ufs_mphy", };
  1798. PNAME(mout_aclk_fsys_200_user_p) = { "oscclk", "div_aclk_fsys_200", };
  1799. PNAME(mout_sclk_pcie_100_user_p) = { "oscclk", "sclk_pcie_100_fsys",};
  1800. PNAME(mout_sclk_ufsunipro_user_p) = { "oscclk", "sclk_ufsunipro_fsys",};
  1801. PNAME(mout_sclk_mmc2_user_p) = { "oscclk", "sclk_mmc2_fsys", };
  1802. PNAME(mout_sclk_mmc1_user_p) = { "oscclk", "sclk_mmc1_fsys", };
  1803. PNAME(mout_sclk_mmc0_user_p) = { "oscclk", "sclk_mmc0_fsys", };
  1804. PNAME(mout_sclk_usbhost30_user_p) = { "oscclk", "sclk_usbhost30_fsys",};
  1805. PNAME(mout_sclk_usbdrd30_user_p) = { "oscclk", "sclk_usbdrd30_fsys", };
  1806. PNAME(mout_phyclk_usbhost30_uhost30_pipe_pclk_user_p)
  1807. = { "oscclk", "phyclk_usbhost30_uhost30_pipe_pclk_phy", };
  1808. PNAME(mout_phyclk_usbhost30_uhost30_phyclock_user_p)
  1809. = { "oscclk", "phyclk_usbhost30_uhost30_phyclock_phy", };
  1810. PNAME(mout_phyclk_usbhost20_phy_hsic1_p)
  1811. = { "oscclk", "phyclk_usbhost20_phy_hsic1_phy", };
  1812. PNAME(mout_phyclk_usbhost20_phy_clk48mohci_user_p)
  1813. = { "oscclk", "phyclk_usbhost20_phy_clk48mohci_phy", };
  1814. PNAME(mout_phyclk_usbhost20_phy_phyclock_user_p)
  1815. = { "oscclk", "phyclk_usbhost20_phy_phyclock_phy", };
  1816. PNAME(mout_phyclk_usbhost20_phy_freeclk_user_p)
  1817. = { "oscclk", "phyclk_usbhost20_phy_freeclk_phy", };
  1818. PNAME(mout_phyclk_usbdrd30_udrd30_pipe_pclk_p)
  1819. = { "oscclk", "phyclk_usbdrd30_udrd30_pipe_pclk_phy", };
  1820. PNAME(mout_phyclk_usbdrd30_udrd30_phyclock_user_p)
  1821. = { "oscclk", "phyclk_usbdrd30_udrd30_phyclock_phy", };
  1822. PNAME(mout_phyclk_ufs_rx1_symbol_user_p)
  1823. = { "oscclk", "phyclk_ufs_rx1_symbol_phy", };
  1824. PNAME(mout_phyclk_ufs_rx0_symbol_user_p)
  1825. = { "oscclk", "phyclk_ufs_rx0_symbol_phy", };
  1826. PNAME(mout_phyclk_ufs_tx1_symbol_user_p)
  1827. = { "oscclk", "phyclk_ufs_tx1_symbol_phy", };
  1828. PNAME(mout_phyclk_ufs_tx0_symbol_user_p)
  1829. = { "oscclk", "phyclk_ufs_tx0_symbol_phy", };
  1830. PNAME(mout_phyclk_lli_mphy_to_ufs_user_p)
  1831. = { "oscclk", "phyclk_lli_mphy_to_ufs_phy", };
  1832. PNAME(mout_sclk_mphy_p)
  1833. = { "mout_sclk_ufs_mphy_user",
  1834. "mout_phyclk_lli_mphy_to_ufs_user", };
  1835. static const unsigned long fsys_clk_regs[] __initconst = {
  1836. MUX_SEL_FSYS0,
  1837. MUX_SEL_FSYS1,
  1838. MUX_SEL_FSYS2,
  1839. MUX_SEL_FSYS3,
  1840. MUX_SEL_FSYS4,
  1841. MUX_ENABLE_FSYS0,
  1842. MUX_ENABLE_FSYS1,
  1843. MUX_ENABLE_FSYS2,
  1844. MUX_ENABLE_FSYS3,
  1845. MUX_ENABLE_FSYS4,
  1846. MUX_IGNORE_FSYS2,
  1847. MUX_IGNORE_FSYS3,
  1848. ENABLE_ACLK_FSYS0,
  1849. ENABLE_ACLK_FSYS1,
  1850. ENABLE_PCLK_FSYS,
  1851. ENABLE_SCLK_FSYS,
  1852. ENABLE_IP_FSYS0,
  1853. ENABLE_IP_FSYS1,
  1854. };
  1855. static const struct samsung_fixed_rate_clock fsys_fixed_clks[] __initconst = {
  1856. /* PHY clocks from USBDRD30_PHY */
  1857. FRATE(CLK_PHYCLK_USBDRD30_UDRD30_PHYCLOCK_PHY,
  1858. "phyclk_usbdrd30_udrd30_phyclock_phy", NULL,
  1859. 0, 60000000),
  1860. FRATE(CLK_PHYCLK_USBDRD30_UDRD30_PIPE_PCLK_PHY,
  1861. "phyclk_usbdrd30_udrd30_pipe_pclk_phy", NULL,
  1862. 0, 125000000),
  1863. /* PHY clocks from USBHOST30_PHY */
  1864. FRATE(CLK_PHYCLK_USBHOST30_UHOST30_PHYCLOCK_PHY,
  1865. "phyclk_usbhost30_uhost30_phyclock_phy", NULL,
  1866. 0, 60000000),
  1867. FRATE(CLK_PHYCLK_USBHOST30_UHOST30_PIPE_PCLK_PHY,
  1868. "phyclk_usbhost30_uhost30_pipe_pclk_phy", NULL,
  1869. 0, 125000000),
  1870. /* PHY clocks from USBHOST20_PHY */
  1871. FRATE(CLK_PHYCLK_USBHOST20_PHY_FREECLK_PHY,
  1872. "phyclk_usbhost20_phy_freeclk_phy", NULL, 0, 60000000),
  1873. FRATE(CLK_PHYCLK_USBHOST20_PHY_PHYCLOCK_PHY,
  1874. "phyclk_usbhost20_phy_phyclock_phy", NULL, 0, 60000000),
  1875. FRATE(CLK_PHYCLK_USBHOST20_PHY_CLK48MOHCI_PHY,
  1876. "phyclk_usbhost20_phy_clk48mohci_phy", NULL,
  1877. 0, 48000000),
  1878. FRATE(CLK_PHYCLK_USBHOST20_PHY_HSIC1_PHY,
  1879. "phyclk_usbhost20_phy_hsic1_phy", NULL, 0,
  1880. 60000000),
  1881. /* PHY clocks from UFS_PHY */
  1882. FRATE(CLK_PHYCLK_UFS_TX0_SYMBOL_PHY, "phyclk_ufs_tx0_symbol_phy",
  1883. NULL, 0, 300000000),
  1884. FRATE(CLK_PHYCLK_UFS_RX0_SYMBOL_PHY, "phyclk_ufs_rx0_symbol_phy",
  1885. NULL, 0, 300000000),
  1886. FRATE(CLK_PHYCLK_UFS_TX1_SYMBOL_PHY, "phyclk_ufs_tx1_symbol_phy",
  1887. NULL, 0, 300000000),
  1888. FRATE(CLK_PHYCLK_UFS_RX1_SYMBOL_PHY, "phyclk_ufs_rx1_symbol_phy",
  1889. NULL, 0, 300000000),
  1890. /* PHY clocks from LLI_PHY */
  1891. FRATE(CLK_PHYCLK_LLI_MPHY_TO_UFS_PHY, "phyclk_lli_mphy_to_ufs_phy",
  1892. NULL, 0, 26000000),
  1893. };
  1894. static const struct samsung_mux_clock fsys_mux_clks[] __initconst = {
  1895. /* MUX_SEL_FSYS0 */
  1896. MUX(CLK_MOUT_SCLK_UFS_MPHY_USER, "mout_sclk_ufs_mphy_user",
  1897. mout_sclk_ufs_mphy_user_p, MUX_SEL_FSYS0, 4, 1),
  1898. MUX(CLK_MOUT_ACLK_FSYS_200_USER, "mout_aclk_fsys_200_user",
  1899. mout_aclk_fsys_200_user_p, MUX_SEL_FSYS0, 0, 1),
  1900. /* MUX_SEL_FSYS1 */
  1901. MUX(CLK_MOUT_SCLK_PCIE_100_USER, "mout_sclk_pcie_100_user",
  1902. mout_sclk_pcie_100_user_p, MUX_SEL_FSYS1, 28, 1),
  1903. MUX(CLK_MOUT_SCLK_UFSUNIPRO_USER, "mout_sclk_ufsunipro_user",
  1904. mout_sclk_ufsunipro_user_p, MUX_SEL_FSYS1, 24, 1),
  1905. MUX(CLK_MOUT_SCLK_MMC2_USER, "mout_sclk_mmc2_user",
  1906. mout_sclk_mmc2_user_p, MUX_SEL_FSYS1, 20, 1),
  1907. MUX(CLK_MOUT_SCLK_MMC1_USER, "mout_sclk_mmc1_user",
  1908. mout_sclk_mmc1_user_p, MUX_SEL_FSYS1, 16, 1),
  1909. MUX(CLK_MOUT_SCLK_MMC0_USER, "mout_sclk_mmc0_user",
  1910. mout_sclk_mmc0_user_p, MUX_SEL_FSYS1, 12, 1),
  1911. MUX(CLK_MOUT_SCLK_USBHOST30_USER, "mout_sclk_usbhost30_user",
  1912. mout_sclk_usbhost30_user_p, MUX_SEL_FSYS1, 4, 1),
  1913. MUX(CLK_MOUT_SCLK_USBDRD30_USER, "mout_sclk_usbdrd30_user",
  1914. mout_sclk_usbdrd30_user_p, MUX_SEL_FSYS1, 0, 1),
  1915. /* MUX_SEL_FSYS2 */
  1916. MUX(CLK_MOUT_PHYCLK_USBHOST30_UHOST30_PIPE_PCLK_USER,
  1917. "mout_phyclk_usbhost30_uhost30_pipe_pclk_user",
  1918. mout_phyclk_usbhost30_uhost30_pipe_pclk_user_p,
  1919. MUX_SEL_FSYS2, 28, 1),
  1920. MUX(CLK_MOUT_PHYCLK_USBHOST30_UHOST30_PHYCLOCK_USER,
  1921. "mout_phyclk_usbhost30_uhost30_phyclock_user",
  1922. mout_phyclk_usbhost30_uhost30_phyclock_user_p,
  1923. MUX_SEL_FSYS2, 24, 1),
  1924. MUX(CLK_MOUT_PHYCLK_USBHOST20_PHY_HSIC1_USER,
  1925. "mout_phyclk_usbhost20_phy_hsic1",
  1926. mout_phyclk_usbhost20_phy_hsic1_p,
  1927. MUX_SEL_FSYS2, 20, 1),
  1928. MUX(CLK_MOUT_PHYCLK_USBHOST20_PHY_CLK48MOHCI_USER,
  1929. "mout_phyclk_usbhost20_phy_clk48mohci_user",
  1930. mout_phyclk_usbhost20_phy_clk48mohci_user_p,
  1931. MUX_SEL_FSYS2, 16, 1),
  1932. MUX(CLK_MOUT_PHYCLK_USBHOST20_PHY_PHYCLOCK_USER,
  1933. "mout_phyclk_usbhost20_phy_phyclock_user",
  1934. mout_phyclk_usbhost20_phy_phyclock_user_p,
  1935. MUX_SEL_FSYS2, 12, 1),
  1936. MUX(CLK_MOUT_PHYCLK_USBHOST20_PHY_PHY_FREECLK_USER,
  1937. "mout_phyclk_usbhost20_phy_freeclk_user",
  1938. mout_phyclk_usbhost20_phy_freeclk_user_p,
  1939. MUX_SEL_FSYS2, 8, 1),
  1940. MUX(CLK_MOUT_PHYCLK_USBDRD30_UDRD30_PIPE_PCLK_USER,
  1941. "mout_phyclk_usbdrd30_udrd30_pipe_pclk_user",
  1942. mout_phyclk_usbdrd30_udrd30_pipe_pclk_p,
  1943. MUX_SEL_FSYS2, 4, 1),
  1944. MUX(CLK_MOUT_PHYCLK_USBDRD30_UDRD30_PHYCLOCK_USER,
  1945. "mout_phyclk_usbdrd30_udrd30_phyclock_user",
  1946. mout_phyclk_usbdrd30_udrd30_phyclock_user_p,
  1947. MUX_SEL_FSYS2, 0, 1),
  1948. /* MUX_SEL_FSYS3 */
  1949. MUX(CLK_MOUT_PHYCLK_UFS_RX1_SYMBOL_USER,
  1950. "mout_phyclk_ufs_rx1_symbol_user",
  1951. mout_phyclk_ufs_rx1_symbol_user_p,
  1952. MUX_SEL_FSYS3, 16, 1),
  1953. MUX(CLK_MOUT_PHYCLK_UFS_RX0_SYMBOL_USER,
  1954. "mout_phyclk_ufs_rx0_symbol_user",
  1955. mout_phyclk_ufs_rx0_symbol_user_p,
  1956. MUX_SEL_FSYS3, 12, 1),
  1957. MUX(CLK_MOUT_PHYCLK_UFS_TX1_SYMBOL_USER,
  1958. "mout_phyclk_ufs_tx1_symbol_user",
  1959. mout_phyclk_ufs_tx1_symbol_user_p,
  1960. MUX_SEL_FSYS3, 8, 1),
  1961. MUX(CLK_MOUT_PHYCLK_UFS_TX0_SYMBOL_USER,
  1962. "mout_phyclk_ufs_tx0_symbol_user",
  1963. mout_phyclk_ufs_tx0_symbol_user_p,
  1964. MUX_SEL_FSYS3, 4, 1),
  1965. MUX(CLK_MOUT_PHYCLK_LLI_MPHY_TO_UFS_USER,
  1966. "mout_phyclk_lli_mphy_to_ufs_user",
  1967. mout_phyclk_lli_mphy_to_ufs_user_p,
  1968. MUX_SEL_FSYS3, 0, 1),
  1969. /* MUX_SEL_FSYS4 */
  1970. MUX(CLK_MOUT_SCLK_MPHY, "mout_sclk_mphy", mout_sclk_mphy_p,
  1971. MUX_SEL_FSYS4, 0, 1),
  1972. };
  1973. static const struct samsung_gate_clock fsys_gate_clks[] __initconst = {
  1974. /* ENABLE_ACLK_FSYS0 */
  1975. GATE(CLK_ACLK_PCIE, "aclk_pcie", "mout_aclk_fsys_200_user",
  1976. ENABLE_ACLK_FSYS0, 13, CLK_IGNORE_UNUSED, 0),
  1977. GATE(CLK_ACLK_PDMA1, "aclk_pdma1", "mout_aclk_fsys_200_user",
  1978. ENABLE_ACLK_FSYS0, 11, CLK_IGNORE_UNUSED, 0),
  1979. GATE(CLK_ACLK_TSI, "aclk_tsi", "mout_aclk_fsys_200_user",
  1980. ENABLE_ACLK_FSYS0, 10, CLK_IGNORE_UNUSED, 0),
  1981. GATE(CLK_ACLK_MMC2, "aclk_mmc2", "mout_aclk_fsys_200_user",
  1982. ENABLE_ACLK_FSYS0, 8, CLK_IGNORE_UNUSED, 0),
  1983. GATE(CLK_ACLK_MMC1, "aclk_mmc1", "mout_aclk_fsys_200_user",
  1984. ENABLE_ACLK_FSYS0, 7, CLK_IGNORE_UNUSED, 0),
  1985. GATE(CLK_ACLK_MMC0, "aclk_mmc0", "mout_aclk_fsys_200_user",
  1986. ENABLE_ACLK_FSYS0, 6, CLK_IGNORE_UNUSED, 0),
  1987. GATE(CLK_ACLK_UFS, "aclk_ufs", "mout_aclk_fsys_200_user",
  1988. ENABLE_ACLK_FSYS0, 5, CLK_IGNORE_UNUSED, 0),
  1989. GATE(CLK_ACLK_USBHOST20, "aclk_usbhost20", "mout_aclk_fsys_200_user",
  1990. ENABLE_ACLK_FSYS0, 3, CLK_IGNORE_UNUSED, 0),
  1991. GATE(CLK_ACLK_USBHOST30, "aclk_usbhost30", "mout_aclk_fsys_200_user",
  1992. ENABLE_ACLK_FSYS0, 2, CLK_IGNORE_UNUSED, 0),
  1993. GATE(CLK_ACLK_USBDRD30, "aclk_usbdrd30", "mout_aclk_fsys_200_user",
  1994. ENABLE_ACLK_FSYS0, 1, CLK_IGNORE_UNUSED, 0),
  1995. GATE(CLK_ACLK_PDMA0, "aclk_pdma0", "mout_aclk_fsys_200_user",
  1996. ENABLE_ACLK_FSYS0, 0, CLK_IGNORE_UNUSED, 0),
  1997. /* ENABLE_ACLK_FSYS1 */
  1998. GATE(CLK_ACLK_XIU_FSYSPX, "aclk_xiu_fsyspx", "mout_aclk_fsys_200_user",
  1999. ENABLE_ACLK_FSYS1, 27, CLK_IGNORE_UNUSED, 0),
  2000. GATE(CLK_ACLK_AHB_USBLINKH1, "aclk_ahb_usblinkh1",
  2001. "mout_aclk_fsys_200_user", ENABLE_ACLK_FSYS1,
  2002. 26, CLK_IGNORE_UNUSED, 0),
  2003. GATE(CLK_ACLK_SMMU_PDMA1, "aclk_smmu_pdma1", "mout_aclk_fsys_200_user",
  2004. ENABLE_ACLK_FSYS1, 25, CLK_IGNORE_UNUSED, 0),
  2005. GATE(CLK_ACLK_BTS_PCIE, "aclk_bts_pcie", "mout_aclk_fsys_200_user",
  2006. ENABLE_ACLK_FSYS1, 24, CLK_IGNORE_UNUSED, 0),
  2007. GATE(CLK_ACLK_AXIUS_PDMA1, "aclk_axius_pdma1",
  2008. "mout_aclk_fsys_200_user", ENABLE_ACLK_FSYS1,
  2009. 22, CLK_IGNORE_UNUSED, 0),
  2010. GATE(CLK_ACLK_SMMU_PDMA0, "aclk_smmu_pdma0", "mout_aclk_fsys_200_user",
  2011. ENABLE_ACLK_FSYS1, 17, CLK_IGNORE_UNUSED, 0),
  2012. GATE(CLK_ACLK_BTS_UFS, "aclk_bts_ufs", "mout_aclk_fsys_200_user",
  2013. ENABLE_ACLK_FSYS1, 14, CLK_IGNORE_UNUSED, 0),
  2014. GATE(CLK_ACLK_BTS_USBHOST30, "aclk_bts_usbhost30",
  2015. "mout_aclk_fsys_200_user", ENABLE_ACLK_FSYS1,
  2016. 13, 0, 0),
  2017. GATE(CLK_ACLK_BTS_USBDRD30, "aclk_bts_usbdrd30",
  2018. "mout_aclk_fsys_200_user", ENABLE_ACLK_FSYS1,
  2019. 12, 0, 0),
  2020. GATE(CLK_ACLK_AXIUS_PDMA0, "aclk_axius_pdma0",
  2021. "mout_aclk_fsys_200_user", ENABLE_ACLK_FSYS1,
  2022. 11, CLK_IGNORE_UNUSED, 0),
  2023. GATE(CLK_ACLK_AXIUS_USBHS, "aclk_axius_usbhs",
  2024. "mout_aclk_fsys_200_user", ENABLE_ACLK_FSYS1,
  2025. 10, CLK_IGNORE_UNUSED, 0),
  2026. GATE(CLK_ACLK_AXIUS_FSYSSX, "aclk_axius_fsyssx",
  2027. "mout_aclk_fsys_200_user", ENABLE_ACLK_FSYS1,
  2028. 9, CLK_IGNORE_UNUSED, 0),
  2029. GATE(CLK_ACLK_AHB2APB_FSYSP, "aclk_ahb2apb_fsysp",
  2030. "mout_aclk_fsys_200_user", ENABLE_ACLK_FSYS1,
  2031. 8, CLK_IGNORE_UNUSED, 0),
  2032. GATE(CLK_ACLK_AHB2AXI_USBHS, "aclk_ahb2axi_usbhs",
  2033. "mout_aclk_fsys_200_user", ENABLE_ACLK_FSYS1,
  2034. 7, CLK_IGNORE_UNUSED, 0),
  2035. GATE(CLK_ACLK_AHB_USBLINKH0, "aclk_ahb_usblinkh0",
  2036. "mout_aclk_fsys_200_user", ENABLE_ACLK_FSYS1,
  2037. 6, CLK_IGNORE_UNUSED, 0),
  2038. GATE(CLK_ACLK_AHB_USBHS, "aclk_ahb_usbhs", "mout_aclk_fsys_200_user",
  2039. ENABLE_ACLK_FSYS1, 5, CLK_IGNORE_UNUSED, 0),
  2040. GATE(CLK_ACLK_AHB_FSYSH, "aclk_ahb_fsysh", "mout_aclk_fsys_200_user",
  2041. ENABLE_ACLK_FSYS1, 4, CLK_IGNORE_UNUSED, 0),
  2042. GATE(CLK_ACLK_XIU_FSYSX, "aclk_xiu_fsysx", "mout_aclk_fsys_200_user",
  2043. ENABLE_ACLK_FSYS1, 3, CLK_IGNORE_UNUSED, 0),
  2044. GATE(CLK_ACLK_XIU_FSYSSX, "aclk_xiu_fsyssx", "mout_aclk_fsys_200_user",
  2045. ENABLE_ACLK_FSYS1, 2, CLK_IGNORE_UNUSED, 0),
  2046. GATE(CLK_ACLK_FSYSNP_200, "aclk_fsysnp_200", "mout_aclk_fsys_200_user",
  2047. ENABLE_ACLK_FSYS1, 1, CLK_IGNORE_UNUSED, 0),
  2048. GATE(CLK_ACLK_FSYSND_200, "aclk_fsysnd_200", "mout_aclk_fsys_200_user",
  2049. ENABLE_ACLK_FSYS1, 0, CLK_IGNORE_UNUSED, 0),
  2050. /* ENABLE_PCLK_FSYS */
  2051. GATE(CLK_PCLK_PCIE_CTRL, "pclk_pcie_ctrl", "mout_aclk_fsys_200_user",
  2052. ENABLE_PCLK_FSYS, 17, CLK_IGNORE_UNUSED, 0),
  2053. GATE(CLK_PCLK_SMMU_PDMA1, "pclk_smmu_pdma1", "mout_aclk_fsys_200_user",
  2054. ENABLE_PCLK_FSYS, 16, CLK_IGNORE_UNUSED, 0),
  2055. GATE(CLK_PCLK_PCIE_PHY, "pclk_pcie_phy", "mout_aclk_fsys_200_user",
  2056. ENABLE_PCLK_FSYS, 14, CLK_IGNORE_UNUSED, 0),
  2057. GATE(CLK_PCLK_BTS_PCIE, "pclk_bts_pcie", "mout_aclk_fsys_200_user",
  2058. ENABLE_PCLK_FSYS, 13, CLK_IGNORE_UNUSED, 0),
  2059. GATE(CLK_PCLK_SMMU_PDMA0, "pclk_smmu_pdma0", "mout_aclk_fsys_200_user",
  2060. ENABLE_PCLK_FSYS, 8, CLK_IGNORE_UNUSED, 0),
  2061. GATE(CLK_PCLK_BTS_UFS, "pclk_bts_ufs", "mout_aclk_fsys_200_user",
  2062. ENABLE_PCLK_FSYS, 5, 0, 0),
  2063. GATE(CLK_PCLK_BTS_USBHOST30, "pclk_bts_usbhost30",
  2064. "mout_aclk_fsys_200_user", ENABLE_PCLK_FSYS, 4, 0, 0),
  2065. GATE(CLK_PCLK_BTS_USBDRD30, "pclk_bts_usbdrd30",
  2066. "mout_aclk_fsys_200_user", ENABLE_PCLK_FSYS, 3, 0, 0),
  2067. GATE(CLK_PCLK_GPIO_FSYS, "pclk_gpio_fsys", "mout_aclk_fsys_200_user",
  2068. ENABLE_PCLK_FSYS, 2, CLK_IGNORE_UNUSED, 0),
  2069. GATE(CLK_PCLK_PMU_FSYS, "pclk_pmu_fsys", "mout_aclk_fsys_200_user",
  2070. ENABLE_PCLK_FSYS, 1, CLK_IGNORE_UNUSED, 0),
  2071. GATE(CLK_PCLK_SYSREG_FSYS, "pclk_sysreg_fsys",
  2072. "mout_aclk_fsys_200_user", ENABLE_PCLK_FSYS,
  2073. 0, CLK_IGNORE_UNUSED, 0),
  2074. /* ENABLE_SCLK_FSYS */
  2075. GATE(CLK_SCLK_PCIE_100, "sclk_pcie_100", "mout_sclk_pcie_100_user",
  2076. ENABLE_SCLK_FSYS, 21, 0, 0),
  2077. GATE(CLK_PHYCLK_USBHOST30_UHOST30_PIPE_PCLK,
  2078. "phyclk_usbhost30_uhost30_pipe_pclk",
  2079. "mout_phyclk_usbhost30_uhost30_pipe_pclk_user",
  2080. ENABLE_SCLK_FSYS, 18, 0, 0),
  2081. GATE(CLK_PHYCLK_USBHOST30_UHOST30_PHYCLOCK,
  2082. "phyclk_usbhost30_uhost30_phyclock",
  2083. "mout_phyclk_usbhost30_uhost30_phyclock_user",
  2084. ENABLE_SCLK_FSYS, 17, 0, 0),
  2085. GATE(CLK_PHYCLK_UFS_RX1_SYMBOL, "phyclk_ufs_rx1_symbol",
  2086. "mout_phyclk_ufs_rx1_symbol_user", ENABLE_SCLK_FSYS,
  2087. 16, 0, 0),
  2088. GATE(CLK_PHYCLK_UFS_RX0_SYMBOL, "phyclk_ufs_rx0_symbol",
  2089. "mout_phyclk_ufs_rx0_symbol_user", ENABLE_SCLK_FSYS,
  2090. 15, 0, 0),
  2091. GATE(CLK_PHYCLK_UFS_TX1_SYMBOL, "phyclk_ufs_tx1_symbol",
  2092. "mout_phyclk_ufs_tx1_symbol_user", ENABLE_SCLK_FSYS,
  2093. 14, 0, 0),
  2094. GATE(CLK_PHYCLK_UFS_TX0_SYMBOL, "phyclk_ufs_tx0_symbol",
  2095. "mout_phyclk_ufs_tx0_symbol_user", ENABLE_SCLK_FSYS,
  2096. 13, 0, 0),
  2097. GATE(CLK_PHYCLK_USBHOST20_PHY_HSIC1, "phyclk_usbhost20_phy_hsic1",
  2098. "mout_phyclk_usbhost20_phy_hsic1", ENABLE_SCLK_FSYS,
  2099. 12, 0, 0),
  2100. GATE(CLK_PHYCLK_USBHOST20_PHY_CLK48MOHCI,
  2101. "phyclk_usbhost20_phy_clk48mohci",
  2102. "mout_phyclk_usbhost20_phy_clk48mohci_user",
  2103. ENABLE_SCLK_FSYS, 11, 0, 0),
  2104. GATE(CLK_PHYCLK_USBHOST20_PHY_PHYCLOCK,
  2105. "phyclk_usbhost20_phy_phyclock",
  2106. "mout_phyclk_usbhost20_phy_phyclock_user",
  2107. ENABLE_SCLK_FSYS, 10, 0, 0),
  2108. GATE(CLK_PHYCLK_USBHOST20_PHY_FREECLK,
  2109. "phyclk_usbhost20_phy_freeclk",
  2110. "mout_phyclk_usbhost20_phy_freeclk_user",
  2111. ENABLE_SCLK_FSYS, 9, 0, 0),
  2112. GATE(CLK_PHYCLK_USBDRD30_UDRD30_PIPE_PCLK,
  2113. "phyclk_usbdrd30_udrd30_pipe_pclk",
  2114. "mout_phyclk_usbdrd30_udrd30_pipe_pclk_user",
  2115. ENABLE_SCLK_FSYS, 8, 0, 0),
  2116. GATE(CLK_PHYCLK_USBDRD30_UDRD30_PHYCLOCK,
  2117. "phyclk_usbdrd30_udrd30_phyclock",
  2118. "mout_phyclk_usbdrd30_udrd30_phyclock_user",
  2119. ENABLE_SCLK_FSYS, 7, 0, 0),
  2120. GATE(CLK_SCLK_MPHY, "sclk_mphy", "mout_sclk_mphy",
  2121. ENABLE_SCLK_FSYS, 6, 0, 0),
  2122. GATE(CLK_SCLK_UFSUNIPRO, "sclk_ufsunipro", "mout_sclk_ufsunipro_user",
  2123. ENABLE_SCLK_FSYS, 5, 0, 0),
  2124. GATE(CLK_SCLK_MMC2, "sclk_mmc2", "mout_sclk_mmc2_user",
  2125. ENABLE_SCLK_FSYS, 4, CLK_SET_RATE_PARENT, 0),
  2126. GATE(CLK_SCLK_MMC1, "sclk_mmc1", "mout_sclk_mmc1_user",
  2127. ENABLE_SCLK_FSYS, 3, CLK_SET_RATE_PARENT, 0),
  2128. GATE(CLK_SCLK_MMC0, "sclk_mmc0", "mout_sclk_mmc0_user",
  2129. ENABLE_SCLK_FSYS, 2, CLK_SET_RATE_PARENT, 0),
  2130. GATE(CLK_SCLK_USBHOST30, "sclk_usbhost30", "mout_sclk_usbhost30_user",
  2131. ENABLE_SCLK_FSYS, 1, 0, 0),
  2132. GATE(CLK_SCLK_USBDRD30, "sclk_usbdrd30", "mout_sclk_usbdrd30_user",
  2133. ENABLE_SCLK_FSYS, 0, 0, 0),
  2134. /* ENABLE_IP_FSYS0 */
  2135. GATE(CLK_PCIE, "pcie", "sclk_pcie_100", ENABLE_IP_FSYS0, 17, 0, 0),
  2136. GATE(CLK_PDMA1, "pdma1", "aclk_pdma1", ENABLE_IP_FSYS0, 15, 0, 0),
  2137. GATE(CLK_PDMA0, "pdma0", "aclk_pdma0", ENABLE_IP_FSYS0, 0, 0, 0),
  2138. };
  2139. static const struct samsung_cmu_info fsys_cmu_info __initconst = {
  2140. .mux_clks = fsys_mux_clks,
  2141. .nr_mux_clks = ARRAY_SIZE(fsys_mux_clks),
  2142. .gate_clks = fsys_gate_clks,
  2143. .nr_gate_clks = ARRAY_SIZE(fsys_gate_clks),
  2144. .fixed_clks = fsys_fixed_clks,
  2145. .nr_fixed_clks = ARRAY_SIZE(fsys_fixed_clks),
  2146. .nr_clk_ids = FSYS_NR_CLK,
  2147. .clk_regs = fsys_clk_regs,
  2148. .nr_clk_regs = ARRAY_SIZE(fsys_clk_regs),
  2149. };
  2150. static void __init exynos5433_cmu_fsys_init(struct device_node *np)
  2151. {
  2152. samsung_cmu_register_one(np, &fsys_cmu_info);
  2153. }
  2154. CLK_OF_DECLARE(exynos5433_cmu_fsys, "samsung,exynos5433-cmu-fsys",
  2155. exynos5433_cmu_fsys_init);
  2156. /*
  2157. * Register offset definitions for CMU_G2D
  2158. */
  2159. #define MUX_SEL_G2D0 0x0200
  2160. #define MUX_SEL_ENABLE_G2D0 0x0300
  2161. #define MUX_SEL_STAT_G2D0 0x0400
  2162. #define DIV_G2D 0x0600
  2163. #define DIV_STAT_G2D 0x0700
  2164. #define DIV_ENABLE_ACLK_G2D 0x0800
  2165. #define DIV_ENABLE_ACLK_G2D_SECURE_SMMU_G2D 0x0804
  2166. #define DIV_ENABLE_PCLK_G2D 0x0900
  2167. #define DIV_ENABLE_PCLK_G2D_SECURE_SMMU_G2D 0x0904
  2168. #define DIV_ENABLE_IP_G2D0 0x0b00
  2169. #define DIV_ENABLE_IP_G2D1 0x0b04
  2170. #define DIV_ENABLE_IP_G2D_SECURE_SMMU_G2D 0x0b08
  2171. static const unsigned long g2d_clk_regs[] __initconst = {
  2172. MUX_SEL_G2D0,
  2173. MUX_SEL_ENABLE_G2D0,
  2174. DIV_G2D,
  2175. DIV_ENABLE_ACLK_G2D,
  2176. DIV_ENABLE_ACLK_G2D_SECURE_SMMU_G2D,
  2177. DIV_ENABLE_PCLK_G2D,
  2178. DIV_ENABLE_PCLK_G2D_SECURE_SMMU_G2D,
  2179. DIV_ENABLE_IP_G2D0,
  2180. DIV_ENABLE_IP_G2D1,
  2181. DIV_ENABLE_IP_G2D_SECURE_SMMU_G2D,
  2182. };
  2183. /* list of all parent clock list */
  2184. PNAME(mout_aclk_g2d_266_user_p) = { "oscclk", "aclk_g2d_266", };
  2185. PNAME(mout_aclk_g2d_400_user_p) = { "oscclk", "aclk_g2d_400", };
  2186. static const struct samsung_mux_clock g2d_mux_clks[] __initconst = {
  2187. /* MUX_SEL_G2D0 */
  2188. MUX(CLK_MUX_ACLK_G2D_266_USER, "mout_aclk_g2d_266_user",
  2189. mout_aclk_g2d_266_user_p, MUX_SEL_G2D0, 4, 1),
  2190. MUX(CLK_MUX_ACLK_G2D_400_USER, "mout_aclk_g2d_400_user",
  2191. mout_aclk_g2d_400_user_p, MUX_SEL_G2D0, 0, 1),
  2192. };
  2193. static const struct samsung_div_clock g2d_div_clks[] __initconst = {
  2194. /* DIV_G2D */
  2195. DIV(CLK_DIV_PCLK_G2D, "div_pclk_g2d", "mout_aclk_g2d_266_user",
  2196. DIV_G2D, 0, 2),
  2197. };
  2198. static const struct samsung_gate_clock g2d_gate_clks[] __initconst = {
  2199. /* DIV_ENABLE_ACLK_G2D */
  2200. GATE(CLK_ACLK_SMMU_MDMA1, "aclk_smmu_mdma1", "mout_aclk_g2d_266_user",
  2201. DIV_ENABLE_ACLK_G2D, 12, 0, 0),
  2202. GATE(CLK_ACLK_BTS_MDMA1, "aclk_bts_mdam1", "mout_aclk_g2d_266_user",
  2203. DIV_ENABLE_ACLK_G2D, 11, 0, 0),
  2204. GATE(CLK_ACLK_BTS_G2D, "aclk_bts_g2d", "mout_aclk_g2d_400_user",
  2205. DIV_ENABLE_ACLK_G2D, 10, 0, 0),
  2206. GATE(CLK_ACLK_ALB_G2D, "aclk_alb_g2d", "mout_aclk_g2d_400_user",
  2207. DIV_ENABLE_ACLK_G2D, 9, 0, 0),
  2208. GATE(CLK_ACLK_AXIUS_G2DX, "aclk_axius_g2dx", "mout_aclk_g2d_400_user",
  2209. DIV_ENABLE_ACLK_G2D, 8, 0, 0),
  2210. GATE(CLK_ACLK_ASYNCAXI_SYSX, "aclk_asyncaxi_sysx",
  2211. "mout_aclk_g2d_400_user", DIV_ENABLE_ACLK_G2D,
  2212. 7, 0, 0),
  2213. GATE(CLK_ACLK_AHB2APB_G2D1P, "aclk_ahb2apb_g2d1p", "div_pclk_g2d",
  2214. DIV_ENABLE_ACLK_G2D, 6, CLK_IGNORE_UNUSED, 0),
  2215. GATE(CLK_ACLK_AHB2APB_G2D0P, "aclk_ahb2apb_g2d0p", "div_pclk_g2d",
  2216. DIV_ENABLE_ACLK_G2D, 5, CLK_IGNORE_UNUSED, 0),
  2217. GATE(CLK_ACLK_XIU_G2DX, "aclk_xiu_g2dx", "mout_aclk_g2d_400_user",
  2218. DIV_ENABLE_ACLK_G2D, 4, CLK_IGNORE_UNUSED, 0),
  2219. GATE(CLK_ACLK_G2DNP_133, "aclk_g2dnp_133", "div_pclk_g2d",
  2220. DIV_ENABLE_ACLK_G2D, 3, CLK_IGNORE_UNUSED, 0),
  2221. GATE(CLK_ACLK_G2DND_400, "aclk_g2dnd_400", "mout_aclk_g2d_400_user",
  2222. DIV_ENABLE_ACLK_G2D, 2, CLK_IGNORE_UNUSED, 0),
  2223. GATE(CLK_ACLK_MDMA1, "aclk_mdma1", "mout_aclk_g2d_266_user",
  2224. DIV_ENABLE_ACLK_G2D, 1, 0, 0),
  2225. GATE(CLK_ACLK_G2D, "aclk_g2d", "mout_aclk_g2d_400_user",
  2226. DIV_ENABLE_ACLK_G2D, 0, 0, 0),
  2227. /* DIV_ENABLE_ACLK_G2D_SECURE_SMMU_G2D */
  2228. GATE(CLK_ACLK_SMMU_G2D, "aclk_smmu_g2d", "mout_aclk_g2d_400_user",
  2229. DIV_ENABLE_ACLK_G2D_SECURE_SMMU_G2D, 0, 0, 0),
  2230. /* DIV_ENABLE_PCLK_G2D */
  2231. GATE(CLK_PCLK_SMMU_MDMA1, "pclk_smmu_mdma1", "div_pclk_g2d",
  2232. DIV_ENABLE_PCLK_G2D, 7, 0, 0),
  2233. GATE(CLK_PCLK_BTS_MDMA1, "pclk_bts_mdam1", "div_pclk_g2d",
  2234. DIV_ENABLE_PCLK_G2D, 6, 0, 0),
  2235. GATE(CLK_PCLK_BTS_G2D, "pclk_bts_g2d", "div_pclk_g2d",
  2236. DIV_ENABLE_PCLK_G2D, 5, 0, 0),
  2237. GATE(CLK_PCLK_ALB_G2D, "pclk_alb_g2d", "div_pclk_g2d",
  2238. DIV_ENABLE_PCLK_G2D, 4, 0, 0),
  2239. GATE(CLK_PCLK_ASYNCAXI_SYSX, "pclk_asyncaxi_sysx", "div_pclk_g2d",
  2240. DIV_ENABLE_PCLK_G2D, 3, 0, 0),
  2241. GATE(CLK_PCLK_PMU_G2D, "pclk_pmu_g2d", "div_pclk_g2d",
  2242. DIV_ENABLE_PCLK_G2D, 2, CLK_IGNORE_UNUSED, 0),
  2243. GATE(CLK_PCLK_SYSREG_G2D, "pclk_sysreg_g2d", "div_pclk_g2d",
  2244. DIV_ENABLE_PCLK_G2D, 1, CLK_IGNORE_UNUSED, 0),
  2245. GATE(CLK_PCLK_G2D, "pclk_g2d", "div_pclk_g2d", DIV_ENABLE_PCLK_G2D,
  2246. 0, 0, 0),
  2247. /* DIV_ENABLE_PCLK_G2D_SECURE_SMMU_G2D */
  2248. GATE(CLK_PCLK_SMMU_G2D, "pclk_smmu_g2d", "div_pclk_g2d",
  2249. DIV_ENABLE_PCLK_G2D_SECURE_SMMU_G2D, 0, 0, 0),
  2250. };
  2251. static const struct samsung_cmu_info g2d_cmu_info __initconst = {
  2252. .mux_clks = g2d_mux_clks,
  2253. .nr_mux_clks = ARRAY_SIZE(g2d_mux_clks),
  2254. .div_clks = g2d_div_clks,
  2255. .nr_div_clks = ARRAY_SIZE(g2d_div_clks),
  2256. .gate_clks = g2d_gate_clks,
  2257. .nr_gate_clks = ARRAY_SIZE(g2d_gate_clks),
  2258. .nr_clk_ids = G2D_NR_CLK,
  2259. .clk_regs = g2d_clk_regs,
  2260. .nr_clk_regs = ARRAY_SIZE(g2d_clk_regs),
  2261. };
  2262. static void __init exynos5433_cmu_g2d_init(struct device_node *np)
  2263. {
  2264. samsung_cmu_register_one(np, &g2d_cmu_info);
  2265. }
  2266. CLK_OF_DECLARE(exynos5433_cmu_g2d, "samsung,exynos5433-cmu-g2d",
  2267. exynos5433_cmu_g2d_init);
  2268. /*
  2269. * Register offset definitions for CMU_DISP
  2270. */
  2271. #define DISP_PLL_LOCK 0x0000
  2272. #define DISP_PLL_CON0 0x0100
  2273. #define DISP_PLL_CON1 0x0104
  2274. #define DISP_PLL_FREQ_DET 0x0108
  2275. #define MUX_SEL_DISP0 0x0200
  2276. #define MUX_SEL_DISP1 0x0204
  2277. #define MUX_SEL_DISP2 0x0208
  2278. #define MUX_SEL_DISP3 0x020c
  2279. #define MUX_SEL_DISP4 0x0210
  2280. #define MUX_ENABLE_DISP0 0x0300
  2281. #define MUX_ENABLE_DISP1 0x0304
  2282. #define MUX_ENABLE_DISP2 0x0308
  2283. #define MUX_ENABLE_DISP3 0x030c
  2284. #define MUX_ENABLE_DISP4 0x0310
  2285. #define MUX_STAT_DISP0 0x0400
  2286. #define MUX_STAT_DISP1 0x0404
  2287. #define MUX_STAT_DISP2 0x0408
  2288. #define MUX_STAT_DISP3 0x040c
  2289. #define MUX_STAT_DISP4 0x0410
  2290. #define MUX_IGNORE_DISP2 0x0508
  2291. #define DIV_DISP 0x0600
  2292. #define DIV_DISP_PLL_FREQ_DET 0x0604
  2293. #define DIV_STAT_DISP 0x0700
  2294. #define DIV_STAT_DISP_PLL_FREQ_DET 0x0704
  2295. #define ENABLE_ACLK_DISP0 0x0800
  2296. #define ENABLE_ACLK_DISP1 0x0804
  2297. #define ENABLE_PCLK_DISP 0x0900
  2298. #define ENABLE_SCLK_DISP 0x0a00
  2299. #define ENABLE_IP_DISP0 0x0b00
  2300. #define ENABLE_IP_DISP1 0x0b04
  2301. #define CLKOUT_CMU_DISP 0x0c00
  2302. #define CLKOUT_CMU_DISP_DIV_STAT 0x0c04
  2303. static const unsigned long disp_clk_regs[] __initconst = {
  2304. DISP_PLL_LOCK,
  2305. DISP_PLL_CON0,
  2306. DISP_PLL_CON1,
  2307. DISP_PLL_FREQ_DET,
  2308. MUX_SEL_DISP0,
  2309. MUX_SEL_DISP1,
  2310. MUX_SEL_DISP2,
  2311. MUX_SEL_DISP3,
  2312. MUX_SEL_DISP4,
  2313. MUX_ENABLE_DISP0,
  2314. MUX_ENABLE_DISP1,
  2315. MUX_ENABLE_DISP2,
  2316. MUX_ENABLE_DISP3,
  2317. MUX_ENABLE_DISP4,
  2318. MUX_IGNORE_DISP2,
  2319. DIV_DISP,
  2320. DIV_DISP_PLL_FREQ_DET,
  2321. ENABLE_ACLK_DISP0,
  2322. ENABLE_ACLK_DISP1,
  2323. ENABLE_PCLK_DISP,
  2324. ENABLE_SCLK_DISP,
  2325. ENABLE_IP_DISP0,
  2326. ENABLE_IP_DISP1,
  2327. CLKOUT_CMU_DISP,
  2328. CLKOUT_CMU_DISP_DIV_STAT,
  2329. };
  2330. /* list of all parent clock list */
  2331. PNAME(mout_disp_pll_p) = { "oscclk", "fout_disp_pll", };
  2332. PNAME(mout_sclk_dsim1_user_p) = { "oscclk", "sclk_dsim1_disp", };
  2333. PNAME(mout_sclk_dsim0_user_p) = { "oscclk", "sclk_dsim0_disp", };
  2334. PNAME(mout_sclk_dsd_user_p) = { "oscclk", "sclk_dsd_disp", };
  2335. PNAME(mout_sclk_decon_tv_eclk_user_p) = { "oscclk",
  2336. "sclk_decon_tv_eclk_disp", };
  2337. PNAME(mout_sclk_decon_vclk_user_p) = { "oscclk",
  2338. "sclk_decon_vclk_disp", };
  2339. PNAME(mout_sclk_decon_eclk_user_p) = { "oscclk",
  2340. "sclk_decon_eclk_disp", };
  2341. PNAME(mout_sclk_decon_tv_vlkc_user_p) = { "oscclk",
  2342. "sclk_decon_tv_vclk_disp", };
  2343. PNAME(mout_aclk_disp_333_user_p) = { "oscclk", "aclk_disp_333", };
  2344. PNAME(mout_phyclk_mipidphy1_bitclkdiv8_user_p) = { "oscclk",
  2345. "phyclk_mipidphy1_bitclkdiv8_phy", };
  2346. PNAME(mout_phyclk_mipidphy1_rxclkesc0_user_p) = { "oscclk",
  2347. "phyclk_mipidphy1_rxclkesc0_phy", };
  2348. PNAME(mout_phyclk_mipidphy0_bitclkdiv8_user_p) = { "oscclk",
  2349. "phyclk_mipidphy0_bitclkdiv8_phy", };
  2350. PNAME(mout_phyclk_mipidphy0_rxclkesc0_user_p) = { "oscclk",
  2351. "phyclk_mipidphy0_rxclkesc0_phy", };
  2352. PNAME(mout_phyclk_hdmiphy_tmds_clko_user_p) = { "oscclk",
  2353. "phyclk_hdmiphy_tmds_clko_phy", };
  2354. PNAME(mout_phyclk_hdmiphy_pixel_clko_user_p) = { "oscclk",
  2355. "phyclk_hdmiphy_pixel_clko_phy", };
  2356. PNAME(mout_sclk_dsim0_p) = { "mout_disp_pll",
  2357. "mout_sclk_dsim0_user", };
  2358. PNAME(mout_sclk_decon_tv_eclk_p) = { "mout_disp_pll",
  2359. "mout_sclk_decon_tv_eclk_user", };
  2360. PNAME(mout_sclk_decon_vclk_p) = { "mout_disp_pll",
  2361. "mout_sclk_decon_vclk_user", };
  2362. PNAME(mout_sclk_decon_eclk_p) = { "mout_disp_pll",
  2363. "mout_sclk_decon_eclk_user", };
  2364. PNAME(mout_sclk_dsim1_b_disp_p) = { "mout_sclk_dsim1_a_disp",
  2365. "mout_sclk_dsim1_user", };
  2366. PNAME(mout_sclk_decon_tv_vclk_c_disp_p) = {
  2367. "mout_phyclk_hdmiphy_pixel_clko_user",
  2368. "mout_sclk_decon_tv_vclk_b_disp", };
  2369. PNAME(mout_sclk_decon_tv_vclk_b_disp_p) = { "mout_sclk_decon_tv_vclk_a_disp",
  2370. "mout_sclk_decon_tv_vclk_user", };
  2371. static const struct samsung_pll_clock disp_pll_clks[] __initconst = {
  2372. PLL(pll_35xx, CLK_FOUT_DISP_PLL, "fout_disp_pll", "oscclk",
  2373. DISP_PLL_LOCK, DISP_PLL_CON0, exynos5443_pll_rates),
  2374. };
  2375. static const struct samsung_fixed_factor_clock disp_fixed_factor_clks[] __initconst = {
  2376. /*
  2377. * sclk_rgb_{vclk|tv_vclk} is half clock of sclk_decon_{vclk|tv_vclk}.
  2378. * The divider has fixed value (2) between sclk_rgb_{vclk|tv_vclk}
  2379. * and sclk_decon_{vclk|tv_vclk}.
  2380. */
  2381. FFACTOR(CLK_SCLK_RGB_VCLK, "sclk_rgb_vclk", "sclk_decon_vclk",
  2382. 1, 2, 0),
  2383. FFACTOR(CLK_SCLK_RGB_TV_VCLK, "sclk_rgb_tv_vclk", "sclk_decon_tv_vclk",
  2384. 1, 2, 0),
  2385. };
  2386. static const struct samsung_fixed_rate_clock disp_fixed_clks[] __initconst = {
  2387. /* PHY clocks from MIPI_DPHY1 */
  2388. FRATE(0, "phyclk_mipidphy1_bitclkdiv8_phy", NULL, 0, 188000000),
  2389. FRATE(0, "phyclk_mipidphy1_rxclkesc0_phy", NULL, 0, 100000000),
  2390. /* PHY clocks from MIPI_DPHY0 */
  2391. FRATE(0, "phyclk_mipidphy0_bitclkdiv8_phy", NULL, 0, 188000000),
  2392. FRATE(0, "phyclk_mipidphy0_rxclkesc0_phy", NULL, 0, 100000000),
  2393. /* PHY clocks from HDMI_PHY */
  2394. FRATE(CLK_PHYCLK_HDMIPHY_TMDS_CLKO_PHY, "phyclk_hdmiphy_tmds_clko_phy",
  2395. NULL, 0, 300000000),
  2396. FRATE(CLK_PHYCLK_HDMIPHY_PIXEL_CLKO_PHY, "phyclk_hdmiphy_pixel_clko_phy",
  2397. NULL, 0, 166000000),
  2398. };
  2399. static const struct samsung_mux_clock disp_mux_clks[] __initconst = {
  2400. /* MUX_SEL_DISP0 */
  2401. MUX(CLK_MOUT_DISP_PLL, "mout_disp_pll", mout_disp_pll_p, MUX_SEL_DISP0,
  2402. 0, 1),
  2403. /* MUX_SEL_DISP1 */
  2404. MUX(CLK_MOUT_SCLK_DSIM1_USER, "mout_sclk_dsim1_user",
  2405. mout_sclk_dsim1_user_p, MUX_SEL_DISP1, 28, 1),
  2406. MUX(CLK_MOUT_SCLK_DSIM0_USER, "mout_sclk_dsim0_user",
  2407. mout_sclk_dsim0_user_p, MUX_SEL_DISP1, 24, 1),
  2408. MUX(CLK_MOUT_SCLK_DSD_USER, "mout_sclk_dsd_user", mout_sclk_dsd_user_p,
  2409. MUX_SEL_DISP1, 20, 1),
  2410. MUX(CLK_MOUT_SCLK_DECON_TV_ECLK_USER, "mout_sclk_decon_tv_eclk_user",
  2411. mout_sclk_decon_tv_eclk_user_p, MUX_SEL_DISP1, 16, 1),
  2412. MUX(CLK_MOUT_SCLK_DECON_VCLK_USER, "mout_sclk_decon_vclk_user",
  2413. mout_sclk_decon_vclk_user_p, MUX_SEL_DISP1, 12, 1),
  2414. MUX(CLK_MOUT_SCLK_DECON_ECLK_USER, "mout_sclk_decon_eclk_user",
  2415. mout_sclk_decon_eclk_user_p, MUX_SEL_DISP1, 8, 1),
  2416. MUX(CLK_MOUT_SCLK_DECON_TV_VCLK_USER, "mout_sclk_decon_tv_vclk_user",
  2417. mout_sclk_decon_tv_vlkc_user_p, MUX_SEL_DISP1, 4, 1),
  2418. MUX(CLK_MOUT_ACLK_DISP_333_USER, "mout_aclk_disp_333_user",
  2419. mout_aclk_disp_333_user_p, MUX_SEL_DISP1, 0, 1),
  2420. /* MUX_SEL_DISP2 */
  2421. MUX(CLK_MOUT_PHYCLK_MIPIDPHY1_BITCLKDIV8_USER,
  2422. "mout_phyclk_mipidphy1_bitclkdiv8_user",
  2423. mout_phyclk_mipidphy1_bitclkdiv8_user_p, MUX_SEL_DISP2,
  2424. 20, 1),
  2425. MUX(CLK_MOUT_PHYCLK_MIPIDPHY1_RXCLKESC0_USER,
  2426. "mout_phyclk_mipidphy1_rxclkesc0_user",
  2427. mout_phyclk_mipidphy1_rxclkesc0_user_p, MUX_SEL_DISP2,
  2428. 16, 1),
  2429. MUX(CLK_MOUT_PHYCLK_MIPIDPHY0_BITCLKDIV8_USER,
  2430. "mout_phyclk_mipidphy0_bitclkdiv8_user",
  2431. mout_phyclk_mipidphy0_bitclkdiv8_user_p, MUX_SEL_DISP2,
  2432. 12, 1),
  2433. MUX(CLK_MOUT_PHYCLK_MIPIDPHY0_RXCLKESC0_USER,
  2434. "mout_phyclk_mipidphy0_rxclkesc0_user",
  2435. mout_phyclk_mipidphy0_rxclkesc0_user_p, MUX_SEL_DISP2,
  2436. 8, 1),
  2437. MUX(CLK_MOUT_PHYCLK_HDMIPHY_TMDS_CLKO_USER,
  2438. "mout_phyclk_hdmiphy_tmds_clko_user",
  2439. mout_phyclk_hdmiphy_tmds_clko_user_p, MUX_SEL_DISP2,
  2440. 4, 1),
  2441. MUX(CLK_MOUT_PHYCLK_HDMIPHY_PIXEL_CLKO_USER,
  2442. "mout_phyclk_hdmiphy_pixel_clko_user",
  2443. mout_phyclk_hdmiphy_pixel_clko_user_p, MUX_SEL_DISP2,
  2444. 0, 1),
  2445. /* MUX_SEL_DISP3 */
  2446. MUX(CLK_MOUT_SCLK_DSIM0, "mout_sclk_dsim0", mout_sclk_dsim0_p,
  2447. MUX_SEL_DISP3, 12, 1),
  2448. MUX(CLK_MOUT_SCLK_DECON_TV_ECLK, "mout_sclk_decon_tv_eclk",
  2449. mout_sclk_decon_tv_eclk_p, MUX_SEL_DISP3, 8, 1),
  2450. MUX(CLK_MOUT_SCLK_DECON_VCLK, "mout_sclk_decon_vclk",
  2451. mout_sclk_decon_vclk_p, MUX_SEL_DISP3, 4, 1),
  2452. MUX(CLK_MOUT_SCLK_DECON_ECLK, "mout_sclk_decon_eclk",
  2453. mout_sclk_decon_eclk_p, MUX_SEL_DISP3, 0, 1),
  2454. /* MUX_SEL_DISP4 */
  2455. MUX(CLK_MOUT_SCLK_DSIM1_B_DISP, "mout_sclk_dsim1_b_disp",
  2456. mout_sclk_dsim1_b_disp_p, MUX_SEL_DISP4, 16, 1),
  2457. MUX(CLK_MOUT_SCLK_DSIM1_A_DISP, "mout_sclk_dsim1_a_disp",
  2458. mout_sclk_dsim0_p, MUX_SEL_DISP4, 12, 1),
  2459. MUX(CLK_MOUT_SCLK_DECON_TV_VCLK_C_DISP,
  2460. "mout_sclk_decon_tv_vclk_c_disp",
  2461. mout_sclk_decon_tv_vclk_c_disp_p, MUX_SEL_DISP4, 8, 1),
  2462. MUX(CLK_MOUT_SCLK_DECON_TV_VCLK_B_DISP,
  2463. "mout_sclk_decon_tv_vclk_b_disp",
  2464. mout_sclk_decon_tv_vclk_b_disp_p, MUX_SEL_DISP4, 4, 1),
  2465. MUX(CLK_MOUT_SCLK_DECON_TV_VCLK_A_DISP,
  2466. "mout_sclk_decon_tv_vclk_a_disp",
  2467. mout_sclk_decon_vclk_p, MUX_SEL_DISP4, 0, 1),
  2468. };
  2469. static const struct samsung_div_clock disp_div_clks[] __initconst = {
  2470. /* DIV_DISP */
  2471. DIV(CLK_DIV_SCLK_DSIM1_DISP, "div_sclk_dsim1_disp",
  2472. "mout_sclk_dsim1_b_disp", DIV_DISP, 24, 3),
  2473. DIV(CLK_DIV_SCLK_DECON_TV_VCLK_DISP, "div_sclk_decon_tv_vclk_disp",
  2474. "mout_sclk_decon_tv_vclk_c_disp", DIV_DISP, 20, 3),
  2475. DIV(CLK_DIV_SCLK_DSIM0_DISP, "div_sclk_dsim0_disp", "mout_sclk_dsim0",
  2476. DIV_DISP, 16, 3),
  2477. DIV(CLK_DIV_SCLK_DECON_TV_ECLK_DISP, "div_sclk_decon_tv_eclk_disp",
  2478. "mout_sclk_decon_tv_eclk", DIV_DISP, 12, 3),
  2479. DIV(CLK_DIV_SCLK_DECON_VCLK_DISP, "div_sclk_decon_vclk_disp",
  2480. "mout_sclk_decon_vclk", DIV_DISP, 8, 3),
  2481. DIV(CLK_DIV_SCLK_DECON_ECLK_DISP, "div_sclk_decon_eclk_disp",
  2482. "mout_sclk_decon_eclk", DIV_DISP, 4, 3),
  2483. DIV(CLK_DIV_PCLK_DISP, "div_pclk_disp", "mout_aclk_disp_333_user",
  2484. DIV_DISP, 0, 2),
  2485. };
  2486. static const struct samsung_gate_clock disp_gate_clks[] __initconst = {
  2487. /* ENABLE_ACLK_DISP0 */
  2488. GATE(CLK_ACLK_DECON_TV, "aclk_decon_tv", "mout_aclk_disp_333_user",
  2489. ENABLE_ACLK_DISP0, 2, 0, 0),
  2490. GATE(CLK_ACLK_DECON, "aclk_decon", "mout_aclk_disp_333_user",
  2491. ENABLE_ACLK_DISP0, 0, 0, 0),
  2492. /* ENABLE_ACLK_DISP1 */
  2493. GATE(CLK_ACLK_SMMU_TV1X, "aclk_smmu_tv1x", "mout_aclk_disp_333_user",
  2494. ENABLE_ACLK_DISP1, 25, 0, 0),
  2495. GATE(CLK_ACLK_SMMU_TV0X, "aclk_smmu_tv0x", "mout_aclk_disp_333_user",
  2496. ENABLE_ACLK_DISP1, 24, 0, 0),
  2497. GATE(CLK_ACLK_SMMU_DECON1X, "aclk_smmu_decon1x",
  2498. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 23, 0, 0),
  2499. GATE(CLK_ACLK_SMMU_DECON0X, "aclk_smmu_decon0x",
  2500. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 22, 0, 0),
  2501. GATE(CLK_ACLK_BTS_DECON_TV_M3, "aclk_bts_decon_tv_m3",
  2502. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 21, 0, 0),
  2503. GATE(CLK_ACLK_BTS_DECON_TV_M2, "aclk_bts_decon_tv_m2",
  2504. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 20, 0, 0),
  2505. GATE(CLK_ACLK_BTS_DECON_TV_M1, "aclk_bts_decon_tv_m1",
  2506. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 19, 0, 0),
  2507. GATE(CLK_ACLK_BTS_DECON_TV_M0, "aclk-bts_decon_tv_m0",
  2508. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 18, 0, 0),
  2509. GATE(CLK_ACLK_BTS_DECON_NM4, "aclk_bts_decon_nm4",
  2510. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 17, 0, 0),
  2511. GATE(CLK_ACLK_BTS_DECON_NM3, "aclk_bts_decon_nm3",
  2512. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 16, 0, 0),
  2513. GATE(CLK_ACLK_BTS_DECON_NM2, "aclk_bts_decon_nm2",
  2514. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 15, 0, 0),
  2515. GATE(CLK_ACLK_BTS_DECON_NM1, "aclk_bts_decon_nm1",
  2516. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 14, 0, 0),
  2517. GATE(CLK_ACLK_BTS_DECON_NM0, "aclk_bts_decon_nm0",
  2518. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 13, 0, 0),
  2519. GATE(CLK_ACLK_AHB2APB_DISPSFR2P, "aclk_ahb2apb_dispsfr2p",
  2520. "div_pclk_disp", ENABLE_ACLK_DISP1,
  2521. 12, CLK_IGNORE_UNUSED, 0),
  2522. GATE(CLK_ACLK_AHB2APB_DISPSFR1P, "aclk_ahb2apb_dispsfr1p",
  2523. "div_pclk_disp", ENABLE_ACLK_DISP1,
  2524. 11, CLK_IGNORE_UNUSED, 0),
  2525. GATE(CLK_ACLK_AHB2APB_DISPSFR0P, "aclk_ahb2apb_dispsfr0p",
  2526. "div_pclk_disp", ENABLE_ACLK_DISP1,
  2527. 10, CLK_IGNORE_UNUSED, 0),
  2528. GATE(CLK_ACLK_AHB_DISPH, "aclk_ahb_disph", "div_pclk_disp",
  2529. ENABLE_ACLK_DISP1, 8, CLK_IGNORE_UNUSED, 0),
  2530. GATE(CLK_ACLK_XIU_TV1X, "aclk_xiu_tv1x", "mout_aclk_disp_333_user",
  2531. ENABLE_ACLK_DISP1, 7, 0, 0),
  2532. GATE(CLK_ACLK_XIU_TV0X, "aclk_xiu_tv0x", "mout_aclk_disp_333_user",
  2533. ENABLE_ACLK_DISP1, 6, 0, 0),
  2534. GATE(CLK_ACLK_XIU_DECON1X, "aclk_xiu_decon1x",
  2535. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 5, 0, 0),
  2536. GATE(CLK_ACLK_XIU_DECON0X, "aclk_xiu_decon0x",
  2537. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 4, 0, 0),
  2538. GATE(CLK_ACLK_XIU_DISP1X, "aclk_xiu_disp1x", "mout_aclk_disp_333_user",
  2539. ENABLE_ACLK_DISP1, 3, CLK_IGNORE_UNUSED, 0),
  2540. GATE(CLK_ACLK_XIU_DISPNP_100, "aclk_xiu_dispnp_100", "div_pclk_disp",
  2541. ENABLE_ACLK_DISP1, 2, CLK_IGNORE_UNUSED, 0),
  2542. GATE(CLK_ACLK_DISP1ND_333, "aclk_disp1nd_333",
  2543. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 1,
  2544. CLK_IGNORE_UNUSED, 0),
  2545. GATE(CLK_ACLK_DISP0ND_333, "aclk_disp0nd_333",
  2546. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1,
  2547. 0, CLK_IGNORE_UNUSED, 0),
  2548. /* ENABLE_PCLK_DISP */
  2549. GATE(CLK_PCLK_SMMU_TV1X, "pclk_smmu_tv1x", "div_pclk_disp",
  2550. ENABLE_PCLK_DISP, 23, 0, 0),
  2551. GATE(CLK_PCLK_SMMU_TV0X, "pclk_smmu_tv0x", "div_pclk_disp",
  2552. ENABLE_PCLK_DISP, 22, 0, 0),
  2553. GATE(CLK_PCLK_SMMU_DECON1X, "pclk_smmu_decon1x", "div_pclk_disp",
  2554. ENABLE_PCLK_DISP, 21, 0, 0),
  2555. GATE(CLK_PCLK_SMMU_DECON0X, "pclk_smmu_decon0x", "div_pclk_disp",
  2556. ENABLE_PCLK_DISP, 20, 0, 0),
  2557. GATE(CLK_PCLK_BTS_DECON_TV_M3, "pclk_bts_decon_tv_m3", "div_pclk_disp",
  2558. ENABLE_PCLK_DISP, 19, 0, 0),
  2559. GATE(CLK_PCLK_BTS_DECON_TV_M2, "pclk_bts_decon_tv_m2", "div_pclk_disp",
  2560. ENABLE_PCLK_DISP, 18, 0, 0),
  2561. GATE(CLK_PCLK_BTS_DECON_TV_M1, "pclk_bts_decon_tv_m1", "div_pclk_disp",
  2562. ENABLE_PCLK_DISP, 17, 0, 0),
  2563. GATE(CLK_PCLK_BTS_DECON_TV_M0, "pclk_bts_decon_tv_m0", "div_pclk_disp",
  2564. ENABLE_PCLK_DISP, 16, 0, 0),
  2565. GATE(CLK_PCLK_BTS_DECONM4, "pclk_bts_deconm4", "div_pclk_disp",
  2566. ENABLE_PCLK_DISP, 15, 0, 0),
  2567. GATE(CLK_PCLK_BTS_DECONM3, "pclk_bts_deconm3", "div_pclk_disp",
  2568. ENABLE_PCLK_DISP, 14, 0, 0),
  2569. GATE(CLK_PCLK_BTS_DECONM2, "pclk_bts_deconm2", "div_pclk_disp",
  2570. ENABLE_PCLK_DISP, 13, 0, 0),
  2571. GATE(CLK_PCLK_BTS_DECONM1, "pclk_bts_deconm1", "div_pclk_disp",
  2572. ENABLE_PCLK_DISP, 12, 0, 0),
  2573. GATE(CLK_PCLK_BTS_DECONM0, "pclk_bts_deconm0", "div_pclk_disp",
  2574. ENABLE_PCLK_DISP, 11, 0, 0),
  2575. GATE(CLK_PCLK_MIC1, "pclk_mic1", "div_pclk_disp",
  2576. ENABLE_PCLK_DISP, 10, 0, 0),
  2577. GATE(CLK_PCLK_PMU_DISP, "pclk_pmu_disp", "div_pclk_disp",
  2578. ENABLE_PCLK_DISP, 9, CLK_IGNORE_UNUSED, 0),
  2579. GATE(CLK_PCLK_SYSREG_DISP, "pclk_sysreg_disp", "div_pclk_disp",
  2580. ENABLE_PCLK_DISP, 8, CLK_IGNORE_UNUSED, 0),
  2581. GATE(CLK_PCLK_HDMIPHY, "pclk_hdmiphy", "div_pclk_disp",
  2582. ENABLE_PCLK_DISP, 7, 0, 0),
  2583. GATE(CLK_PCLK_HDMI, "pclk_hdmi", "div_pclk_disp",
  2584. ENABLE_PCLK_DISP, 6, 0, 0),
  2585. GATE(CLK_PCLK_MIC0, "pclk_mic0", "div_pclk_disp",
  2586. ENABLE_PCLK_DISP, 5, 0, 0),
  2587. GATE(CLK_PCLK_DSIM1, "pclk_dsim1", "div_pclk_disp",
  2588. ENABLE_PCLK_DISP, 3, 0, 0),
  2589. GATE(CLK_PCLK_DSIM0, "pclk_dsim0", "div_pclk_disp",
  2590. ENABLE_PCLK_DISP, 2, 0, 0),
  2591. GATE(CLK_PCLK_DECON_TV, "pclk_decon_tv", "div_pclk_disp",
  2592. ENABLE_PCLK_DISP, 1, 0, 0),
  2593. GATE(CLK_PCLK_DECON, "pclk_decon", "div_pclk_disp",
  2594. ENABLE_PCLK_DISP, 0, 0, 0),
  2595. /* ENABLE_SCLK_DISP */
  2596. GATE(CLK_PHYCLK_MIPIDPHY1_BITCLKDIV8, "phyclk_mipidphy1_bitclkdiv8",
  2597. "mout_phyclk_mipidphy1_bitclkdiv8_user",
  2598. ENABLE_SCLK_DISP, 26, 0, 0),
  2599. GATE(CLK_PHYCLK_MIPIDPHY1_RXCLKESC0, "phyclk_mipidphy1_rxclkesc0",
  2600. "mout_phyclk_mipidphy1_rxclkesc0_user",
  2601. ENABLE_SCLK_DISP, 25, 0, 0),
  2602. GATE(CLK_SCLK_RGB_TV_VCLK_TO_DSIM1, "sclk_rgb_tv_vclk_to_dsim1",
  2603. "sclk_rgb_tv_vclk", ENABLE_SCLK_DISP, 24, 0, 0),
  2604. GATE(CLK_SCLK_RGB_TV_VCLK_TO_MIC1, "sclk_rgb_tv_vclk_to_mic1",
  2605. "sclk_rgb_tv_vclk", ENABLE_SCLK_DISP, 23, 0, 0),
  2606. GATE(CLK_SCLK_DSIM1, "sclk_dsim1", "div_sclk_dsim1_disp",
  2607. ENABLE_SCLK_DISP, 22, 0, 0),
  2608. GATE(CLK_SCLK_DECON_TV_VCLK, "sclk_decon_tv_vclk",
  2609. "div_sclk_decon_tv_vclk_disp",
  2610. ENABLE_SCLK_DISP, 21, 0, 0),
  2611. GATE(CLK_PHYCLK_MIPIDPHY0_BITCLKDIV8, "phyclk_mipidphy0_bitclkdiv8",
  2612. "mout_phyclk_mipidphy0_bitclkdiv8_user",
  2613. ENABLE_SCLK_DISP, 15, 0, 0),
  2614. GATE(CLK_PHYCLK_MIPIDPHY0_RXCLKESC0, "phyclk_mipidphy0_rxclkesc0",
  2615. "mout_phyclk_mipidphy0_rxclkesc0_user",
  2616. ENABLE_SCLK_DISP, 14, 0, 0),
  2617. GATE(CLK_PHYCLK_HDMIPHY_TMDS_CLKO, "phyclk_hdmiphy_tmds_clko",
  2618. "mout_phyclk_hdmiphy_tmds_clko_user",
  2619. ENABLE_SCLK_DISP, 13, 0, 0),
  2620. GATE(CLK_PHYCLK_HDMI_PIXEL, "phyclk_hdmi_pixel",
  2621. "sclk_rgb_tv_vclk", ENABLE_SCLK_DISP, 12, 0, 0),
  2622. GATE(CLK_SCLK_RGB_VCLK_TO_SMIES, "sclk_rgb_vclk_to_smies",
  2623. "sclk_rgb_vclk", ENABLE_SCLK_DISP, 11, 0, 0),
  2624. GATE(CLK_SCLK_RGB_VCLK_TO_DSIM0, "sclk_rgb_vclk_to_dsim0",
  2625. "sclk_rgb_vclk", ENABLE_SCLK_DISP, 9, 0, 0),
  2626. GATE(CLK_SCLK_RGB_VCLK_TO_MIC0, "sclk_rgb_vclk_to_mic0",
  2627. "sclk_rgb_vclk", ENABLE_SCLK_DISP, 8, 0, 0),
  2628. GATE(CLK_SCLK_DSD, "sclk_dsd", "mout_sclk_dsd_user",
  2629. ENABLE_SCLK_DISP, 7, 0, 0),
  2630. GATE(CLK_SCLK_HDMI_SPDIF, "sclk_hdmi_spdif", "sclk_hdmi_spdif_disp",
  2631. ENABLE_SCLK_DISP, 6, 0, 0),
  2632. GATE(CLK_SCLK_DSIM0, "sclk_dsim0", "div_sclk_dsim0_disp",
  2633. ENABLE_SCLK_DISP, 5, 0, 0),
  2634. GATE(CLK_SCLK_DECON_TV_ECLK, "sclk_decon_tv_eclk",
  2635. "div_sclk_decon_tv_eclk_disp",
  2636. ENABLE_SCLK_DISP, 4, 0, 0),
  2637. GATE(CLK_SCLK_DECON_VCLK, "sclk_decon_vclk",
  2638. "div_sclk_decon_vclk_disp", ENABLE_SCLK_DISP, 3, 0, 0),
  2639. GATE(CLK_SCLK_DECON_ECLK, "sclk_decon_eclk",
  2640. "div_sclk_decon_eclk_disp", ENABLE_SCLK_DISP, 2, 0, 0),
  2641. };
  2642. static const struct samsung_cmu_info disp_cmu_info __initconst = {
  2643. .pll_clks = disp_pll_clks,
  2644. .nr_pll_clks = ARRAY_SIZE(disp_pll_clks),
  2645. .mux_clks = disp_mux_clks,
  2646. .nr_mux_clks = ARRAY_SIZE(disp_mux_clks),
  2647. .div_clks = disp_div_clks,
  2648. .nr_div_clks = ARRAY_SIZE(disp_div_clks),
  2649. .gate_clks = disp_gate_clks,
  2650. .nr_gate_clks = ARRAY_SIZE(disp_gate_clks),
  2651. .fixed_clks = disp_fixed_clks,
  2652. .nr_fixed_clks = ARRAY_SIZE(disp_fixed_clks),
  2653. .fixed_factor_clks = disp_fixed_factor_clks,
  2654. .nr_fixed_factor_clks = ARRAY_SIZE(disp_fixed_factor_clks),
  2655. .nr_clk_ids = DISP_NR_CLK,
  2656. .clk_regs = disp_clk_regs,
  2657. .nr_clk_regs = ARRAY_SIZE(disp_clk_regs),
  2658. };
  2659. static void __init exynos5433_cmu_disp_init(struct device_node *np)
  2660. {
  2661. samsung_cmu_register_one(np, &disp_cmu_info);
  2662. }
  2663. CLK_OF_DECLARE(exynos5433_cmu_disp, "samsung,exynos5433-cmu-disp",
  2664. exynos5433_cmu_disp_init);
  2665. /*
  2666. * Register offset definitions for CMU_AUD
  2667. */
  2668. #define MUX_SEL_AUD0 0x0200
  2669. #define MUX_SEL_AUD1 0x0204
  2670. #define MUX_ENABLE_AUD0 0x0300
  2671. #define MUX_ENABLE_AUD1 0x0304
  2672. #define MUX_STAT_AUD0 0x0400
  2673. #define DIV_AUD0 0x0600
  2674. #define DIV_AUD1 0x0604
  2675. #define DIV_STAT_AUD0 0x0700
  2676. #define DIV_STAT_AUD1 0x0704
  2677. #define ENABLE_ACLK_AUD 0x0800
  2678. #define ENABLE_PCLK_AUD 0x0900
  2679. #define ENABLE_SCLK_AUD0 0x0a00
  2680. #define ENABLE_SCLK_AUD1 0x0a04
  2681. #define ENABLE_IP_AUD0 0x0b00
  2682. #define ENABLE_IP_AUD1 0x0b04
  2683. static const unsigned long aud_clk_regs[] __initconst = {
  2684. MUX_SEL_AUD0,
  2685. MUX_SEL_AUD1,
  2686. MUX_ENABLE_AUD0,
  2687. MUX_ENABLE_AUD1,
  2688. DIV_AUD0,
  2689. DIV_AUD1,
  2690. ENABLE_ACLK_AUD,
  2691. ENABLE_PCLK_AUD,
  2692. ENABLE_SCLK_AUD0,
  2693. ENABLE_SCLK_AUD1,
  2694. ENABLE_IP_AUD0,
  2695. ENABLE_IP_AUD1,
  2696. };
  2697. /* list of all parent clock list */
  2698. PNAME(mout_aud_pll_user_aud_p) = { "oscclk", "fout_aud_pll", };
  2699. PNAME(mout_sclk_aud_pcm_p) = { "mout_aud_pll_user", "ioclk_audiocdclk0",};
  2700. static const struct samsung_fixed_rate_clock aud_fixed_clks[] __initconst = {
  2701. FRATE(0, "ioclk_jtag_tclk", NULL, 0, 33000000),
  2702. FRATE(0, "ioclk_slimbus_clk", NULL, 0, 25000000),
  2703. FRATE(0, "ioclk_i2s_bclk", NULL, 0, 50000000),
  2704. };
  2705. static const struct samsung_mux_clock aud_mux_clks[] __initconst = {
  2706. /* MUX_SEL_AUD0 */
  2707. MUX(CLK_MOUT_AUD_PLL_USER, "mout_aud_pll_user",
  2708. mout_aud_pll_user_aud_p, MUX_SEL_AUD0, 0, 1),
  2709. /* MUX_SEL_AUD1 */
  2710. MUX(CLK_MOUT_SCLK_AUD_PCM, "mout_sclk_aud_pcm", mout_sclk_aud_pcm_p,
  2711. MUX_SEL_AUD1, 8, 1),
  2712. MUX(CLK_MOUT_SCLK_AUD_I2S, "mout_sclk_aud_i2s", mout_sclk_aud_pcm_p,
  2713. MUX_SEL_AUD1, 0, 1),
  2714. };
  2715. static const struct samsung_div_clock aud_div_clks[] __initconst = {
  2716. /* DIV_AUD0 */
  2717. DIV(CLK_DIV_ATCLK_AUD, "div_atclk_aud", "div_aud_ca5", DIV_AUD0,
  2718. 12, 4),
  2719. DIV(CLK_DIV_PCLK_DBG_AUD, "div_pclk_dbg_aud", "div_aud_ca5", DIV_AUD0,
  2720. 8, 4),
  2721. DIV(CLK_DIV_ACLK_AUD, "div_aclk_aud", "div_aud_ca5", DIV_AUD0,
  2722. 4, 4),
  2723. DIV(CLK_DIV_AUD_CA5, "div_aud_ca5", "mout_aud_pll_user", DIV_AUD0,
  2724. 0, 4),
  2725. /* DIV_AUD1 */
  2726. DIV(CLK_DIV_SCLK_AUD_SLIMBUS, "div_sclk_aud_slimbus",
  2727. "mout_aud_pll_user", DIV_AUD1, 16, 5),
  2728. DIV(CLK_DIV_SCLK_AUD_UART, "div_sclk_aud_uart", "mout_aud_pll_user",
  2729. DIV_AUD1, 12, 4),
  2730. DIV(CLK_DIV_SCLK_AUD_PCM, "div_sclk_aud_pcm", "mout_sclk_aud_pcm",
  2731. DIV_AUD1, 4, 8),
  2732. DIV(CLK_DIV_SCLK_AUD_I2S, "div_sclk_aud_i2s", "mout_sclk_aud_i2s",
  2733. DIV_AUD1, 0, 4),
  2734. };
  2735. static const struct samsung_gate_clock aud_gate_clks[] __initconst = {
  2736. /* ENABLE_ACLK_AUD */
  2737. GATE(CLK_ACLK_INTR_CTRL, "aclk_intr_ctrl", "div_aclk_aud",
  2738. ENABLE_ACLK_AUD, 12, 0, 0),
  2739. GATE(CLK_ACLK_SMMU_LPASSX, "aclk_smmu_lpassx", "div_aclk_aud",
  2740. ENABLE_ACLK_AUD, 7, 0, 0),
  2741. GATE(CLK_ACLK_XIU_LPASSX, "aclk_xiu_lpassx", "div_aclk_aud",
  2742. ENABLE_ACLK_AUD, 0, 4, 0),
  2743. GATE(CLK_ACLK_AUDNP_133, "aclk_audnp_133", "div_aclk_aud",
  2744. ENABLE_ACLK_AUD, 0, 3, 0),
  2745. GATE(CLK_ACLK_AUDND_133, "aclk_audnd_133", "div_aclk_aud",
  2746. ENABLE_ACLK_AUD, 0, 2, 0),
  2747. GATE(CLK_ACLK_SRAMC, "aclk_sramc", "div_aclk_aud", ENABLE_ACLK_AUD,
  2748. 0, 1, 0),
  2749. GATE(CLK_ACLK_DMAC, "aclk_dmac", "div_aclk_aud", ENABLE_ACLK_AUD,
  2750. 0, CLK_IGNORE_UNUSED, 0),
  2751. /* ENABLE_PCLK_AUD */
  2752. GATE(CLK_PCLK_WDT1, "pclk_wdt1", "div_aclk_aud", ENABLE_PCLK_AUD,
  2753. 13, 0, 0),
  2754. GATE(CLK_PCLK_WDT0, "pclk_wdt0", "div_aclk_aud", ENABLE_PCLK_AUD,
  2755. 12, 0, 0),
  2756. GATE(CLK_PCLK_SFR1, "pclk_sfr1", "div_aclk_aud", ENABLE_PCLK_AUD,
  2757. 11, 0, 0),
  2758. GATE(CLK_PCLK_SMMU_LPASSX, "pclk_smmu_lpassx", "div_aclk_aud",
  2759. ENABLE_PCLK_AUD, 10, 0, 0),
  2760. GATE(CLK_PCLK_GPIO_AUD, "pclk_gpio_aud", "div_aclk_aud",
  2761. ENABLE_PCLK_AUD, 9, CLK_IGNORE_UNUSED, 0),
  2762. GATE(CLK_PCLK_PMU_AUD, "pclk_pmu_aud", "div_aclk_aud",
  2763. ENABLE_PCLK_AUD, 8, CLK_IGNORE_UNUSED, 0),
  2764. GATE(CLK_PCLK_SYSREG_AUD, "pclk_sysreg_aud", "div_aclk_aud",
  2765. ENABLE_PCLK_AUD, 7, CLK_IGNORE_UNUSED, 0),
  2766. GATE(CLK_PCLK_AUD_SLIMBUS, "pclk_aud_slimbus", "div_aclk_aud",
  2767. ENABLE_PCLK_AUD, 6, 0, 0),
  2768. GATE(CLK_PCLK_AUD_UART, "pclk_aud_uart", "div_aclk_aud",
  2769. ENABLE_PCLK_AUD, 5, 0, 0),
  2770. GATE(CLK_PCLK_AUD_PCM, "pclk_aud_pcm", "div_aclk_aud",
  2771. ENABLE_PCLK_AUD, 4, 0, 0),
  2772. GATE(CLK_PCLK_AUD_I2S, "pclk_aud_i2s", "div_aclk_aud",
  2773. ENABLE_PCLK_AUD, 3, 0, 0),
  2774. GATE(CLK_PCLK_TIMER, "pclk_timer", "div_aclk_aud", ENABLE_PCLK_AUD,
  2775. 2, 0, 0),
  2776. GATE(CLK_PCLK_SFR0_CTRL, "pclk_sfr0_ctrl", "div_aclk_aud",
  2777. ENABLE_PCLK_AUD, 0, 0, 0),
  2778. /* ENABLE_SCLK_AUD0 */
  2779. GATE(CLK_ATCLK_AUD, "atclk_aud", "div_atclk_aud", ENABLE_SCLK_AUD0,
  2780. 2, CLK_IGNORE_UNUSED, 0),
  2781. GATE(CLK_PCLK_DBG_AUD, "pclk_dbg_aud", "div_pclk_dbg_aud",
  2782. ENABLE_SCLK_AUD0, 1, 0, 0),
  2783. GATE(CLK_SCLK_AUD_CA5, "sclk_aud_ca5", "div_aud_ca5", ENABLE_SCLK_AUD0,
  2784. 0, 0, 0),
  2785. /* ENABLE_SCLK_AUD1 */
  2786. GATE(CLK_SCLK_JTAG_TCK, "sclk_jtag_tck", "ioclk_jtag_tclk",
  2787. ENABLE_SCLK_AUD1, 6, 0, 0),
  2788. GATE(CLK_SCLK_SLIMBUS_CLKIN, "sclk_slimbus_clkin", "ioclk_slimbus_clk",
  2789. ENABLE_SCLK_AUD1, 5, 0, 0),
  2790. GATE(CLK_SCLK_AUD_SLIMBUS, "sclk_aud_slimbus", "div_sclk_aud_slimbus",
  2791. ENABLE_SCLK_AUD1, 4, 0, 0),
  2792. GATE(CLK_SCLK_AUD_UART, "sclk_aud_uart", "div_sclk_aud_uart",
  2793. ENABLE_SCLK_AUD1, 3, CLK_IGNORE_UNUSED, 0),
  2794. GATE(CLK_SCLK_AUD_PCM, "sclk_aud_pcm", "div_sclk_aud_pcm",
  2795. ENABLE_SCLK_AUD1, 2, 0, 0),
  2796. GATE(CLK_SCLK_I2S_BCLK, "sclk_i2s_bclk", "ioclk_i2s_bclk",
  2797. ENABLE_SCLK_AUD1, 1, CLK_IGNORE_UNUSED, 0),
  2798. GATE(CLK_SCLK_AUD_I2S, "sclk_aud_i2s", "div_sclk_aud_i2s",
  2799. ENABLE_SCLK_AUD1, 0, CLK_IGNORE_UNUSED, 0),
  2800. };
  2801. static const struct samsung_cmu_info aud_cmu_info __initconst = {
  2802. .mux_clks = aud_mux_clks,
  2803. .nr_mux_clks = ARRAY_SIZE(aud_mux_clks),
  2804. .div_clks = aud_div_clks,
  2805. .nr_div_clks = ARRAY_SIZE(aud_div_clks),
  2806. .gate_clks = aud_gate_clks,
  2807. .nr_gate_clks = ARRAY_SIZE(aud_gate_clks),
  2808. .fixed_clks = aud_fixed_clks,
  2809. .nr_fixed_clks = ARRAY_SIZE(aud_fixed_clks),
  2810. .nr_clk_ids = AUD_NR_CLK,
  2811. .clk_regs = aud_clk_regs,
  2812. .nr_clk_regs = ARRAY_SIZE(aud_clk_regs),
  2813. };
  2814. static void __init exynos5433_cmu_aud_init(struct device_node *np)
  2815. {
  2816. samsung_cmu_register_one(np, &aud_cmu_info);
  2817. }
  2818. CLK_OF_DECLARE(exynos5433_cmu_aud, "samsung,exynos5433-cmu-aud",
  2819. exynos5433_cmu_aud_init);
  2820. /*
  2821. * Register offset definitions for CMU_BUS{0|1|2}
  2822. */
  2823. #define DIV_BUS 0x0600
  2824. #define DIV_STAT_BUS 0x0700
  2825. #define ENABLE_ACLK_BUS 0x0800
  2826. #define ENABLE_PCLK_BUS 0x0900
  2827. #define ENABLE_IP_BUS0 0x0b00
  2828. #define ENABLE_IP_BUS1 0x0b04
  2829. #define MUX_SEL_BUS2 0x0200 /* Only for CMU_BUS2 */
  2830. #define MUX_ENABLE_BUS2 0x0300 /* Only for CMU_BUS2 */
  2831. #define MUX_STAT_BUS2 0x0400 /* Only for CMU_BUS2 */
  2832. /* list of all parent clock list */
  2833. PNAME(mout_aclk_bus2_400_p) = { "oscclk", "aclk_bus2_400", };
  2834. #define CMU_BUS_COMMON_CLK_REGS \
  2835. DIV_BUS, \
  2836. ENABLE_ACLK_BUS, \
  2837. ENABLE_PCLK_BUS, \
  2838. ENABLE_IP_BUS0, \
  2839. ENABLE_IP_BUS1
  2840. static const unsigned long bus01_clk_regs[] __initconst = {
  2841. CMU_BUS_COMMON_CLK_REGS,
  2842. };
  2843. static const unsigned long bus2_clk_regs[] __initconst = {
  2844. MUX_SEL_BUS2,
  2845. MUX_ENABLE_BUS2,
  2846. CMU_BUS_COMMON_CLK_REGS,
  2847. };
  2848. static const struct samsung_div_clock bus0_div_clks[] __initconst = {
  2849. /* DIV_BUS0 */
  2850. DIV(CLK_DIV_PCLK_BUS_133, "div_pclk_bus0_133", "aclk_bus0_400",
  2851. DIV_BUS, 0, 3),
  2852. };
  2853. /* CMU_BUS0 clocks */
  2854. static const struct samsung_gate_clock bus0_gate_clks[] __initconst = {
  2855. /* ENABLE_ACLK_BUS0 */
  2856. GATE(CLK_ACLK_AHB2APB_BUSP, "aclk_ahb2apb_bus0p", "div_pclk_bus0_133",
  2857. ENABLE_ACLK_BUS, 4, CLK_IGNORE_UNUSED, 0),
  2858. GATE(CLK_ACLK_BUSNP_133, "aclk_bus0np_133", "div_pclk_bus0_133",
  2859. ENABLE_ACLK_BUS, 2, CLK_IGNORE_UNUSED, 0),
  2860. GATE(CLK_ACLK_BUSND_400, "aclk_bus0nd_400", "aclk_bus0_400",
  2861. ENABLE_ACLK_BUS, 0, CLK_IGNORE_UNUSED, 0),
  2862. /* ENABLE_PCLK_BUS0 */
  2863. GATE(CLK_PCLK_BUSSRVND_133, "pclk_bus0srvnd_133", "div_pclk_bus0_133",
  2864. ENABLE_PCLK_BUS, 2, 0, 0),
  2865. GATE(CLK_PCLK_PMU_BUS, "pclk_pmu_bus0", "div_pclk_bus0_133",
  2866. ENABLE_PCLK_BUS, 1, CLK_IGNORE_UNUSED, 0),
  2867. GATE(CLK_PCLK_SYSREG_BUS, "pclk_sysreg_bus0", "div_pclk_bus0_133",
  2868. ENABLE_PCLK_BUS, 0, CLK_IGNORE_UNUSED, 0),
  2869. };
  2870. /* CMU_BUS1 clocks */
  2871. static const struct samsung_div_clock bus1_div_clks[] __initconst = {
  2872. /* DIV_BUS1 */
  2873. DIV(CLK_DIV_PCLK_BUS_133, "div_pclk_bus1_133", "aclk_bus1_400",
  2874. DIV_BUS, 0, 3),
  2875. };
  2876. static const struct samsung_gate_clock bus1_gate_clks[] __initconst = {
  2877. /* ENABLE_ACLK_BUS1 */
  2878. GATE(CLK_ACLK_AHB2APB_BUSP, "aclk_ahb2apb_bus1p", "div_pclk_bus1_133",
  2879. ENABLE_ACLK_BUS, 4, CLK_IGNORE_UNUSED, 0),
  2880. GATE(CLK_ACLK_BUSNP_133, "aclk_bus1np_133", "div_pclk_bus1_133",
  2881. ENABLE_ACLK_BUS, 2, CLK_IGNORE_UNUSED, 0),
  2882. GATE(CLK_ACLK_BUSND_400, "aclk_bus1nd_400", "aclk_bus1_400",
  2883. ENABLE_ACLK_BUS, 0, CLK_IGNORE_UNUSED, 0),
  2884. /* ENABLE_PCLK_BUS1 */
  2885. GATE(CLK_PCLK_BUSSRVND_133, "pclk_bus1srvnd_133", "div_pclk_bus1_133",
  2886. ENABLE_PCLK_BUS, 2, 0, 0),
  2887. GATE(CLK_PCLK_PMU_BUS, "pclk_pmu_bus1", "div_pclk_bus1_133",
  2888. ENABLE_PCLK_BUS, 1, CLK_IGNORE_UNUSED, 0),
  2889. GATE(CLK_PCLK_SYSREG_BUS, "pclk_sysreg_bus1", "div_pclk_bus1_133",
  2890. ENABLE_PCLK_BUS, 0, CLK_IGNORE_UNUSED, 0),
  2891. };
  2892. /* CMU_BUS2 clocks */
  2893. static const struct samsung_mux_clock bus2_mux_clks[] __initconst = {
  2894. /* MUX_SEL_BUS2 */
  2895. MUX(CLK_MOUT_ACLK_BUS2_400_USER, "mout_aclk_bus2_400_user",
  2896. mout_aclk_bus2_400_p, MUX_SEL_BUS2, 0, 1),
  2897. };
  2898. static const struct samsung_div_clock bus2_div_clks[] __initconst = {
  2899. /* DIV_BUS2 */
  2900. DIV(CLK_DIV_PCLK_BUS_133, "div_pclk_bus2_133",
  2901. "mout_aclk_bus2_400_user", DIV_BUS, 0, 3),
  2902. };
  2903. static const struct samsung_gate_clock bus2_gate_clks[] __initconst = {
  2904. /* ENABLE_ACLK_BUS2 */
  2905. GATE(CLK_ACLK_AHB2APB_BUSP, "aclk_ahb2apb_bus2p", "div_pclk_bus2_133",
  2906. ENABLE_ACLK_BUS, 3, CLK_IGNORE_UNUSED, 0),
  2907. GATE(CLK_ACLK_BUSNP_133, "aclk_bus2np_133", "div_pclk_bus2_133",
  2908. ENABLE_ACLK_BUS, 2, CLK_IGNORE_UNUSED, 0),
  2909. GATE(CLK_ACLK_BUS2BEND_400, "aclk_bus2bend_400",
  2910. "mout_aclk_bus2_400_user", ENABLE_ACLK_BUS,
  2911. 1, CLK_IGNORE_UNUSED, 0),
  2912. GATE(CLK_ACLK_BUS2RTND_400, "aclk_bus2rtnd_400",
  2913. "mout_aclk_bus2_400_user", ENABLE_ACLK_BUS,
  2914. 0, CLK_IGNORE_UNUSED, 0),
  2915. /* ENABLE_PCLK_BUS2 */
  2916. GATE(CLK_PCLK_BUSSRVND_133, "pclk_bus2srvnd_133", "div_pclk_bus2_133",
  2917. ENABLE_PCLK_BUS, 2, 0, 0),
  2918. GATE(CLK_PCLK_PMU_BUS, "pclk_pmu_bus2", "div_pclk_bus2_133",
  2919. ENABLE_PCLK_BUS, 1, CLK_IGNORE_UNUSED, 0),
  2920. GATE(CLK_PCLK_SYSREG_BUS, "pclk_sysreg_bus2", "div_pclk_bus2_133",
  2921. ENABLE_PCLK_BUS, 0, CLK_IGNORE_UNUSED, 0),
  2922. };
  2923. #define CMU_BUS_INFO_CLKS(id) \
  2924. .div_clks = bus##id##_div_clks, \
  2925. .nr_div_clks = ARRAY_SIZE(bus##id##_div_clks), \
  2926. .gate_clks = bus##id##_gate_clks, \
  2927. .nr_gate_clks = ARRAY_SIZE(bus##id##_gate_clks), \
  2928. .nr_clk_ids = BUSx_NR_CLK
  2929. static const struct samsung_cmu_info bus0_cmu_info __initconst = {
  2930. CMU_BUS_INFO_CLKS(0),
  2931. .clk_regs = bus01_clk_regs,
  2932. .nr_clk_regs = ARRAY_SIZE(bus01_clk_regs),
  2933. };
  2934. static const struct samsung_cmu_info bus1_cmu_info __initconst = {
  2935. CMU_BUS_INFO_CLKS(1),
  2936. .clk_regs = bus01_clk_regs,
  2937. .nr_clk_regs = ARRAY_SIZE(bus01_clk_regs),
  2938. };
  2939. static const struct samsung_cmu_info bus2_cmu_info __initconst = {
  2940. CMU_BUS_INFO_CLKS(2),
  2941. .mux_clks = bus2_mux_clks,
  2942. .nr_mux_clks = ARRAY_SIZE(bus2_mux_clks),
  2943. .clk_regs = bus2_clk_regs,
  2944. .nr_clk_regs = ARRAY_SIZE(bus2_clk_regs),
  2945. };
  2946. #define exynos5433_cmu_bus_init(id) \
  2947. static void __init exynos5433_cmu_bus##id##_init(struct device_node *np)\
  2948. { \
  2949. samsung_cmu_register_one(np, &bus##id##_cmu_info); \
  2950. } \
  2951. CLK_OF_DECLARE(exynos5433_cmu_bus##id, \
  2952. "samsung,exynos5433-cmu-bus"#id, \
  2953. exynos5433_cmu_bus##id##_init)
  2954. exynos5433_cmu_bus_init(0);
  2955. exynos5433_cmu_bus_init(1);
  2956. exynos5433_cmu_bus_init(2);
  2957. /*
  2958. * Register offset definitions for CMU_G3D
  2959. */
  2960. #define G3D_PLL_LOCK 0x0000
  2961. #define G3D_PLL_CON0 0x0100
  2962. #define G3D_PLL_CON1 0x0104
  2963. #define G3D_PLL_FREQ_DET 0x010c
  2964. #define MUX_SEL_G3D 0x0200
  2965. #define MUX_ENABLE_G3D 0x0300
  2966. #define MUX_STAT_G3D 0x0400
  2967. #define DIV_G3D 0x0600
  2968. #define DIV_G3D_PLL_FREQ_DET 0x0604
  2969. #define DIV_STAT_G3D 0x0700
  2970. #define DIV_STAT_G3D_PLL_FREQ_DET 0x0704
  2971. #define ENABLE_ACLK_G3D 0x0800
  2972. #define ENABLE_PCLK_G3D 0x0900
  2973. #define ENABLE_SCLK_G3D 0x0a00
  2974. #define ENABLE_IP_G3D0 0x0b00
  2975. #define ENABLE_IP_G3D1 0x0b04
  2976. #define CLKOUT_CMU_G3D 0x0c00
  2977. #define CLKOUT_CMU_G3D_DIV_STAT 0x0c04
  2978. #define CLK_STOPCTRL 0x1000
  2979. static const unsigned long g3d_clk_regs[] __initconst = {
  2980. G3D_PLL_LOCK,
  2981. G3D_PLL_CON0,
  2982. G3D_PLL_CON1,
  2983. G3D_PLL_FREQ_DET,
  2984. MUX_SEL_G3D,
  2985. MUX_ENABLE_G3D,
  2986. DIV_G3D,
  2987. DIV_G3D_PLL_FREQ_DET,
  2988. ENABLE_ACLK_G3D,
  2989. ENABLE_PCLK_G3D,
  2990. ENABLE_SCLK_G3D,
  2991. ENABLE_IP_G3D0,
  2992. ENABLE_IP_G3D1,
  2993. CLKOUT_CMU_G3D,
  2994. CLKOUT_CMU_G3D_DIV_STAT,
  2995. CLK_STOPCTRL,
  2996. };
  2997. /* list of all parent clock list */
  2998. PNAME(mout_aclk_g3d_400_p) = { "mout_g3d_pll", "aclk_g3d_400", };
  2999. PNAME(mout_g3d_pll_p) = { "oscclk", "fout_g3d_pll", };
  3000. static const struct samsung_pll_clock g3d_pll_clks[] __initconst = {
  3001. PLL(pll_35xx, CLK_FOUT_G3D_PLL, "fout_g3d_pll", "oscclk",
  3002. G3D_PLL_LOCK, G3D_PLL_CON0, exynos5443_pll_rates),
  3003. };
  3004. static const struct samsung_mux_clock g3d_mux_clks[] __initconst = {
  3005. /* MUX_SEL_G3D */
  3006. MUX_F(CLK_MOUT_ACLK_G3D_400, "mout_aclk_g3d_400", mout_aclk_g3d_400_p,
  3007. MUX_SEL_G3D, 8, 1, CLK_SET_RATE_PARENT, 0),
  3008. MUX_F(CLK_MOUT_G3D_PLL, "mout_g3d_pll", mout_g3d_pll_p,
  3009. MUX_SEL_G3D, 0, 1, CLK_SET_RATE_PARENT, 0),
  3010. };
  3011. static const struct samsung_div_clock g3d_div_clks[] __initconst = {
  3012. /* DIV_G3D */
  3013. DIV(CLK_DIV_SCLK_HPM_G3D, "div_sclk_hpm_g3d", "mout_g3d_pll", DIV_G3D,
  3014. 8, 2),
  3015. DIV(CLK_DIV_PCLK_G3D, "div_pclk_g3d", "div_aclk_g3d", DIV_G3D,
  3016. 4, 3),
  3017. DIV_F(CLK_DIV_ACLK_G3D, "div_aclk_g3d", "mout_aclk_g3d_400", DIV_G3D,
  3018. 0, 3, CLK_SET_RATE_PARENT, 0),
  3019. };
  3020. static const struct samsung_gate_clock g3d_gate_clks[] __initconst = {
  3021. /* ENABLE_ACLK_G3D */
  3022. GATE(CLK_ACLK_BTS_G3D1, "aclk_bts_g3d1", "div_aclk_g3d",
  3023. ENABLE_ACLK_G3D, 7, 0, 0),
  3024. GATE(CLK_ACLK_BTS_G3D0, "aclk_bts_g3d0", "div_aclk_g3d",
  3025. ENABLE_ACLK_G3D, 6, 0, 0),
  3026. GATE(CLK_ACLK_ASYNCAPBS_G3D, "aclk_asyncapbs_g3d", "div_pclk_g3d",
  3027. ENABLE_ACLK_G3D, 5, CLK_IGNORE_UNUSED, 0),
  3028. GATE(CLK_ACLK_ASYNCAPBM_G3D, "aclk_asyncapbm_g3d", "div_aclk_g3d",
  3029. ENABLE_ACLK_G3D, 4, CLK_IGNORE_UNUSED, 0),
  3030. GATE(CLK_ACLK_AHB2APB_G3DP, "aclk_ahb2apb_g3dp", "div_pclk_g3d",
  3031. ENABLE_ACLK_G3D, 3, CLK_IGNORE_UNUSED, 0),
  3032. GATE(CLK_ACLK_G3DNP_150, "aclk_g3dnp_150", "div_pclk_g3d",
  3033. ENABLE_ACLK_G3D, 2, CLK_IGNORE_UNUSED, 0),
  3034. GATE(CLK_ACLK_G3DND_600, "aclk_g3dnd_600", "div_aclk_g3d",
  3035. ENABLE_ACLK_G3D, 1, CLK_IGNORE_UNUSED, 0),
  3036. GATE(CLK_ACLK_G3D, "aclk_g3d", "div_aclk_g3d",
  3037. ENABLE_ACLK_G3D, 0, CLK_SET_RATE_PARENT, 0),
  3038. /* ENABLE_PCLK_G3D */
  3039. GATE(CLK_PCLK_BTS_G3D1, "pclk_bts_g3d1", "div_pclk_g3d",
  3040. ENABLE_PCLK_G3D, 3, 0, 0),
  3041. GATE(CLK_PCLK_BTS_G3D0, "pclk_bts_g3d0", "div_pclk_g3d",
  3042. ENABLE_PCLK_G3D, 2, 0, 0),
  3043. GATE(CLK_PCLK_PMU_G3D, "pclk_pmu_g3d", "div_pclk_g3d",
  3044. ENABLE_PCLK_G3D, 1, CLK_IGNORE_UNUSED, 0),
  3045. GATE(CLK_PCLK_SYSREG_G3D, "pclk_sysreg_g3d", "div_pclk_g3d",
  3046. ENABLE_PCLK_G3D, 0, CLK_IGNORE_UNUSED, 0),
  3047. /* ENABLE_SCLK_G3D */
  3048. GATE(CLK_SCLK_HPM_G3D, "sclk_hpm_g3d", "div_sclk_hpm_g3d",
  3049. ENABLE_SCLK_G3D, 0, 0, 0),
  3050. };
  3051. static const struct samsung_cmu_info g3d_cmu_info __initconst = {
  3052. .pll_clks = g3d_pll_clks,
  3053. .nr_pll_clks = ARRAY_SIZE(g3d_pll_clks),
  3054. .mux_clks = g3d_mux_clks,
  3055. .nr_mux_clks = ARRAY_SIZE(g3d_mux_clks),
  3056. .div_clks = g3d_div_clks,
  3057. .nr_div_clks = ARRAY_SIZE(g3d_div_clks),
  3058. .gate_clks = g3d_gate_clks,
  3059. .nr_gate_clks = ARRAY_SIZE(g3d_gate_clks),
  3060. .nr_clk_ids = G3D_NR_CLK,
  3061. .clk_regs = g3d_clk_regs,
  3062. .nr_clk_regs = ARRAY_SIZE(g3d_clk_regs),
  3063. };
  3064. static void __init exynos5433_cmu_g3d_init(struct device_node *np)
  3065. {
  3066. samsung_cmu_register_one(np, &g3d_cmu_info);
  3067. }
  3068. CLK_OF_DECLARE(exynos5433_cmu_g3d, "samsung,exynos5433-cmu-g3d",
  3069. exynos5433_cmu_g3d_init);
  3070. /*
  3071. * Register offset definitions for CMU_GSCL
  3072. */
  3073. #define MUX_SEL_GSCL 0x0200
  3074. #define MUX_ENABLE_GSCL 0x0300
  3075. #define MUX_STAT_GSCL 0x0400
  3076. #define ENABLE_ACLK_GSCL 0x0800
  3077. #define ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL0 0x0804
  3078. #define ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL1 0x0808
  3079. #define ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL2 0x080c
  3080. #define ENABLE_PCLK_GSCL 0x0900
  3081. #define ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL0 0x0904
  3082. #define ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL1 0x0908
  3083. #define ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL2 0x090c
  3084. #define ENABLE_IP_GSCL0 0x0b00
  3085. #define ENABLE_IP_GSCL1 0x0b04
  3086. #define ENABLE_IP_GSCL_SECURE_SMMU_GSCL0 0x0b08
  3087. #define ENABLE_IP_GSCL_SECURE_SMMU_GSCL1 0x0b0c
  3088. #define ENABLE_IP_GSCL_SECURE_SMMU_GSCL2 0x0b10
  3089. static const unsigned long gscl_clk_regs[] __initconst = {
  3090. MUX_SEL_GSCL,
  3091. MUX_ENABLE_GSCL,
  3092. ENABLE_ACLK_GSCL,
  3093. ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL0,
  3094. ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL1,
  3095. ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL2,
  3096. ENABLE_PCLK_GSCL,
  3097. ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL0,
  3098. ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL1,
  3099. ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL2,
  3100. ENABLE_IP_GSCL0,
  3101. ENABLE_IP_GSCL1,
  3102. ENABLE_IP_GSCL_SECURE_SMMU_GSCL0,
  3103. ENABLE_IP_GSCL_SECURE_SMMU_GSCL1,
  3104. ENABLE_IP_GSCL_SECURE_SMMU_GSCL2,
  3105. };
  3106. /* list of all parent clock list */
  3107. PNAME(aclk_gscl_111_user_p) = { "oscclk", "aclk_gscl_111", };
  3108. PNAME(aclk_gscl_333_user_p) = { "oscclk", "aclk_gscl_333", };
  3109. static const struct samsung_mux_clock gscl_mux_clks[] __initconst = {
  3110. /* MUX_SEL_GSCL */
  3111. MUX(CLK_MOUT_ACLK_GSCL_111_USER, "mout_aclk_gscl_111_user",
  3112. aclk_gscl_111_user_p, MUX_SEL_GSCL, 4, 1),
  3113. MUX(CLK_MOUT_ACLK_GSCL_333_USER, "mout_aclk_gscl_333_user",
  3114. aclk_gscl_333_user_p, MUX_SEL_GSCL, 0, 1),
  3115. };
  3116. static const struct samsung_gate_clock gscl_gate_clks[] __initconst = {
  3117. /* ENABLE_ACLK_GSCL */
  3118. GATE(CLK_ACLK_BTS_GSCL2, "aclk_bts_gscl2", "mout_aclk_gscl_333_user",
  3119. ENABLE_ACLK_GSCL, 11, 0, 0),
  3120. GATE(CLK_ACLK_BTS_GSCL1, "aclk_bts_gscl1", "mout_aclk_gscl_333_user",
  3121. ENABLE_ACLK_GSCL, 10, 0, 0),
  3122. GATE(CLK_ACLK_BTS_GSCL0, "aclk_bts_gscl0", "mout_aclk_gscl_333_user",
  3123. ENABLE_ACLK_GSCL, 9, 0, 0),
  3124. GATE(CLK_ACLK_AHB2APB_GSCLP, "aclk_ahb2apb_gsclp",
  3125. "mout_aclk_gscl_111_user", ENABLE_ACLK_GSCL,
  3126. 8, CLK_IGNORE_UNUSED, 0),
  3127. GATE(CLK_ACLK_XIU_GSCLX, "aclk_xiu_gsclx", "mout_aclk_gscl_333_user",
  3128. ENABLE_ACLK_GSCL, 7, 0, 0),
  3129. GATE(CLK_ACLK_GSCLNP_111, "aclk_gsclnp_111", "mout_aclk_gscl_111_user",
  3130. ENABLE_ACLK_GSCL, 6, CLK_IGNORE_UNUSED, 0),
  3131. GATE(CLK_ACLK_GSCLRTND_333, "aclk_gsclrtnd_333",
  3132. "mout_aclk_gscl_333_user", ENABLE_ACLK_GSCL, 5,
  3133. CLK_IGNORE_UNUSED, 0),
  3134. GATE(CLK_ACLK_GSCLBEND_333, "aclk_gsclbend_333",
  3135. "mout_aclk_gscl_333_user", ENABLE_ACLK_GSCL, 4,
  3136. CLK_IGNORE_UNUSED, 0),
  3137. GATE(CLK_ACLK_GSD, "aclk_gsd", "mout_aclk_gscl_333_user",
  3138. ENABLE_ACLK_GSCL, 3, 0, 0),
  3139. GATE(CLK_ACLK_GSCL2, "aclk_gscl2", "mout_aclk_gscl_333_user",
  3140. ENABLE_ACLK_GSCL, 2, 0, 0),
  3141. GATE(CLK_ACLK_GSCL1, "aclk_gscl1", "mout_aclk_gscl_333_user",
  3142. ENABLE_ACLK_GSCL, 1, 0, 0),
  3143. GATE(CLK_ACLK_GSCL0, "aclk_gscl0", "mout_aclk_gscl_333_user",
  3144. ENABLE_ACLK_GSCL, 0, 0, 0),
  3145. /* ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL0 */
  3146. GATE(CLK_ACLK_SMMU_GSCL0, "aclk_smmu_gscl0", "mout_aclk_gscl_333_user",
  3147. ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL0, 0, 0, 0),
  3148. /* ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL1 */
  3149. GATE(CLK_ACLK_SMMU_GSCL1, "aclk_smmu_gscl1", "mout_aclk_gscl_333_user",
  3150. ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL1, 0, 0, 0),
  3151. /* ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL2 */
  3152. GATE(CLK_ACLK_SMMU_GSCL2, "aclk_smmu_gscl2", "mout_aclk_gscl_333_user",
  3153. ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL2, 0, 0, 0),
  3154. /* ENABLE_PCLK_GSCL */
  3155. GATE(CLK_PCLK_BTS_GSCL2, "pclk_bts_gscl2", "mout_aclk_gscl_111_user",
  3156. ENABLE_PCLK_GSCL, 7, 0, 0),
  3157. GATE(CLK_PCLK_BTS_GSCL1, "pclk_bts_gscl1", "mout_aclk_gscl_111_user",
  3158. ENABLE_PCLK_GSCL, 6, 0, 0),
  3159. GATE(CLK_PCLK_BTS_GSCL0, "pclk_bts_gscl0", "mout_aclk_gscl_111_user",
  3160. ENABLE_PCLK_GSCL, 5, 0, 0),
  3161. GATE(CLK_PCLK_PMU_GSCL, "pclk_pmu_gscl", "mout_aclk_gscl_111_user",
  3162. ENABLE_PCLK_GSCL, 4, CLK_IGNORE_UNUSED, 0),
  3163. GATE(CLK_PCLK_SYSREG_GSCL, "pclk_sysreg_gscl",
  3164. "mout_aclk_gscl_111_user", ENABLE_PCLK_GSCL,
  3165. 3, CLK_IGNORE_UNUSED, 0),
  3166. GATE(CLK_PCLK_GSCL2, "pclk_gscl2", "mout_aclk_gscl_111_user",
  3167. ENABLE_PCLK_GSCL, 2, 0, 0),
  3168. GATE(CLK_PCLK_GSCL1, "pclk_gscl1", "mout_aclk_gscl_111_user",
  3169. ENABLE_PCLK_GSCL, 1, 0, 0),
  3170. GATE(CLK_PCLK_GSCL0, "pclk_gscl0", "mout_aclk_gscl_111_user",
  3171. ENABLE_PCLK_GSCL, 0, 0, 0),
  3172. /* ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL0 */
  3173. GATE(CLK_PCLK_SMMU_GSCL0, "pclk_smmu_gscl0", "mout_aclk_gscl_111_user",
  3174. ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL0, 0, 0, 0),
  3175. /* ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL1 */
  3176. GATE(CLK_PCLK_SMMU_GSCL1, "pclk_smmu_gscl1", "mout_aclk_gscl_111_user",
  3177. ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL1, 0, 0, 0),
  3178. /* ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL2 */
  3179. GATE(CLK_PCLK_SMMU_GSCL2, "pclk_smmu_gscl2", "mout_aclk_gscl_111_user",
  3180. ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL2, 0, 0, 0),
  3181. };
  3182. static const struct samsung_cmu_info gscl_cmu_info __initconst = {
  3183. .mux_clks = gscl_mux_clks,
  3184. .nr_mux_clks = ARRAY_SIZE(gscl_mux_clks),
  3185. .gate_clks = gscl_gate_clks,
  3186. .nr_gate_clks = ARRAY_SIZE(gscl_gate_clks),
  3187. .nr_clk_ids = GSCL_NR_CLK,
  3188. .clk_regs = gscl_clk_regs,
  3189. .nr_clk_regs = ARRAY_SIZE(gscl_clk_regs),
  3190. };
  3191. static void __init exynos5433_cmu_gscl_init(struct device_node *np)
  3192. {
  3193. samsung_cmu_register_one(np, &gscl_cmu_info);
  3194. }
  3195. CLK_OF_DECLARE(exynos5433_cmu_gscl, "samsung,exynos5433-cmu-gscl",
  3196. exynos5433_cmu_gscl_init);
  3197. /*
  3198. * Register offset definitions for CMU_APOLLO
  3199. */
  3200. #define APOLLO_PLL_LOCK 0x0000
  3201. #define APOLLO_PLL_CON0 0x0100
  3202. #define APOLLO_PLL_CON1 0x0104
  3203. #define APOLLO_PLL_FREQ_DET 0x010c
  3204. #define MUX_SEL_APOLLO0 0x0200
  3205. #define MUX_SEL_APOLLO1 0x0204
  3206. #define MUX_SEL_APOLLO2 0x0208
  3207. #define MUX_ENABLE_APOLLO0 0x0300
  3208. #define MUX_ENABLE_APOLLO1 0x0304
  3209. #define MUX_ENABLE_APOLLO2 0x0308
  3210. #define MUX_STAT_APOLLO0 0x0400
  3211. #define MUX_STAT_APOLLO1 0x0404
  3212. #define MUX_STAT_APOLLO2 0x0408
  3213. #define DIV_APOLLO0 0x0600
  3214. #define DIV_APOLLO1 0x0604
  3215. #define DIV_APOLLO_PLL_FREQ_DET 0x0608
  3216. #define DIV_STAT_APOLLO0 0x0700
  3217. #define DIV_STAT_APOLLO1 0x0704
  3218. #define DIV_STAT_APOLLO_PLL_FREQ_DET 0x0708
  3219. #define ENABLE_ACLK_APOLLO 0x0800
  3220. #define ENABLE_PCLK_APOLLO 0x0900
  3221. #define ENABLE_SCLK_APOLLO 0x0a00
  3222. #define ENABLE_IP_APOLLO0 0x0b00
  3223. #define ENABLE_IP_APOLLO1 0x0b04
  3224. #define CLKOUT_CMU_APOLLO 0x0c00
  3225. #define CLKOUT_CMU_APOLLO_DIV_STAT 0x0c04
  3226. #define ARMCLK_STOPCTRL 0x1000
  3227. #define APOLLO_PWR_CTRL 0x1020
  3228. #define APOLLO_PWR_CTRL2 0x1024
  3229. #define APOLLO_INTR_SPREAD_ENABLE 0x1080
  3230. #define APOLLO_INTR_SPREAD_USE_STANDBYWFI 0x1084
  3231. #define APOLLO_INTR_SPREAD_BLOCKING_DURATION 0x1088
  3232. static const unsigned long apollo_clk_regs[] __initconst = {
  3233. APOLLO_PLL_LOCK,
  3234. APOLLO_PLL_CON0,
  3235. APOLLO_PLL_CON1,
  3236. APOLLO_PLL_FREQ_DET,
  3237. MUX_SEL_APOLLO0,
  3238. MUX_SEL_APOLLO1,
  3239. MUX_SEL_APOLLO2,
  3240. MUX_ENABLE_APOLLO0,
  3241. MUX_ENABLE_APOLLO1,
  3242. MUX_ENABLE_APOLLO2,
  3243. DIV_APOLLO0,
  3244. DIV_APOLLO1,
  3245. DIV_APOLLO_PLL_FREQ_DET,
  3246. ENABLE_ACLK_APOLLO,
  3247. ENABLE_PCLK_APOLLO,
  3248. ENABLE_SCLK_APOLLO,
  3249. ENABLE_IP_APOLLO0,
  3250. ENABLE_IP_APOLLO1,
  3251. CLKOUT_CMU_APOLLO,
  3252. CLKOUT_CMU_APOLLO_DIV_STAT,
  3253. ARMCLK_STOPCTRL,
  3254. APOLLO_PWR_CTRL,
  3255. APOLLO_PWR_CTRL2,
  3256. APOLLO_INTR_SPREAD_ENABLE,
  3257. APOLLO_INTR_SPREAD_USE_STANDBYWFI,
  3258. APOLLO_INTR_SPREAD_BLOCKING_DURATION,
  3259. };
  3260. /* list of all parent clock list */
  3261. PNAME(mout_apollo_pll_p) = { "oscclk", "fout_apollo_pll", };
  3262. PNAME(mout_bus_pll_apollo_user_p) = { "oscclk", "sclk_bus_pll_apollo", };
  3263. PNAME(mout_apollo_p) = { "mout_apollo_pll",
  3264. "mout_bus_pll_apollo_user", };
  3265. static const struct samsung_pll_clock apollo_pll_clks[] __initconst = {
  3266. PLL(pll_35xx, CLK_FOUT_APOLLO_PLL, "fout_apollo_pll", "oscclk",
  3267. APOLLO_PLL_LOCK, APOLLO_PLL_CON0, exynos5443_pll_rates),
  3268. };
  3269. static const struct samsung_mux_clock apollo_mux_clks[] __initconst = {
  3270. /* MUX_SEL_APOLLO0 */
  3271. MUX_F(CLK_MOUT_APOLLO_PLL, "mout_apollo_pll", mout_apollo_pll_p,
  3272. MUX_SEL_APOLLO0, 0, 1, CLK_SET_RATE_PARENT |
  3273. CLK_RECALC_NEW_RATES, 0),
  3274. /* MUX_SEL_APOLLO1 */
  3275. MUX(CLK_MOUT_BUS_PLL_APOLLO_USER, "mout_bus_pll_apollo_user",
  3276. mout_bus_pll_apollo_user_p, MUX_SEL_APOLLO1, 0, 1),
  3277. /* MUX_SEL_APOLLO2 */
  3278. MUX_F(CLK_MOUT_APOLLO, "mout_apollo", mout_apollo_p, MUX_SEL_APOLLO2,
  3279. 0, 1, CLK_SET_RATE_PARENT, 0),
  3280. };
  3281. static const struct samsung_div_clock apollo_div_clks[] __initconst = {
  3282. /* DIV_APOLLO0 */
  3283. DIV_F(CLK_DIV_CNTCLK_APOLLO, "div_cntclk_apollo", "div_apollo2",
  3284. DIV_APOLLO0, 24, 3, CLK_GET_RATE_NOCACHE,
  3285. CLK_DIVIDER_READ_ONLY),
  3286. DIV_F(CLK_DIV_PCLK_DBG_APOLLO, "div_pclk_dbg_apollo", "div_apollo2",
  3287. DIV_APOLLO0, 20, 3, CLK_GET_RATE_NOCACHE,
  3288. CLK_DIVIDER_READ_ONLY),
  3289. DIV_F(CLK_DIV_ATCLK_APOLLO, "div_atclk_apollo", "div_apollo2",
  3290. DIV_APOLLO0, 16, 3, CLK_GET_RATE_NOCACHE,
  3291. CLK_DIVIDER_READ_ONLY),
  3292. DIV_F(CLK_DIV_PCLK_APOLLO, "div_pclk_apollo", "div_apollo2",
  3293. DIV_APOLLO0, 12, 3, CLK_GET_RATE_NOCACHE,
  3294. CLK_DIVIDER_READ_ONLY),
  3295. DIV_F(CLK_DIV_ACLK_APOLLO, "div_aclk_apollo", "div_apollo2",
  3296. DIV_APOLLO0, 8, 3, CLK_GET_RATE_NOCACHE,
  3297. CLK_DIVIDER_READ_ONLY),
  3298. DIV_F(CLK_DIV_APOLLO2, "div_apollo2", "div_apollo1",
  3299. DIV_APOLLO0, 4, 3, CLK_SET_RATE_PARENT, 0),
  3300. DIV_F(CLK_DIV_APOLLO1, "div_apollo1", "mout_apollo",
  3301. DIV_APOLLO0, 0, 3, CLK_SET_RATE_PARENT, 0),
  3302. /* DIV_APOLLO1 */
  3303. DIV_F(CLK_DIV_SCLK_HPM_APOLLO, "div_sclk_hpm_apollo", "mout_apollo",
  3304. DIV_APOLLO1, 4, 3, CLK_GET_RATE_NOCACHE,
  3305. CLK_DIVIDER_READ_ONLY),
  3306. DIV_F(CLK_DIV_APOLLO_PLL, "div_apollo_pll", "mout_apollo",
  3307. DIV_APOLLO1, 0, 3, CLK_GET_RATE_NOCACHE,
  3308. CLK_DIVIDER_READ_ONLY),
  3309. };
  3310. static const struct samsung_gate_clock apollo_gate_clks[] __initconst = {
  3311. /* ENABLE_ACLK_APOLLO */
  3312. GATE(CLK_ACLK_ASATBSLV_APOLLO_3_CSSYS, "aclk_asatbslv_apollo_3_cssys",
  3313. "div_atclk_apollo", ENABLE_ACLK_APOLLO,
  3314. 6, CLK_IGNORE_UNUSED, 0),
  3315. GATE(CLK_ACLK_ASATBSLV_APOLLO_2_CSSYS, "aclk_asatbslv_apollo_2_cssys",
  3316. "div_atclk_apollo", ENABLE_ACLK_APOLLO,
  3317. 5, CLK_IGNORE_UNUSED, 0),
  3318. GATE(CLK_ACLK_ASATBSLV_APOLLO_1_CSSYS, "aclk_asatbslv_apollo_1_cssys",
  3319. "div_atclk_apollo", ENABLE_ACLK_APOLLO,
  3320. 4, CLK_IGNORE_UNUSED, 0),
  3321. GATE(CLK_ACLK_ASATBSLV_APOLLO_0_CSSYS, "aclk_asatbslv_apollo_0_cssys",
  3322. "div_atclk_apollo", ENABLE_ACLK_APOLLO,
  3323. 3, CLK_IGNORE_UNUSED, 0),
  3324. GATE(CLK_ACLK_ASYNCACES_APOLLO_CCI, "aclk_asyncaces_apollo_cci",
  3325. "div_aclk_apollo", ENABLE_ACLK_APOLLO,
  3326. 2, CLK_IGNORE_UNUSED, 0),
  3327. GATE(CLK_ACLK_AHB2APB_APOLLOP, "aclk_ahb2apb_apollop",
  3328. "div_pclk_apollo", ENABLE_ACLK_APOLLO,
  3329. 1, CLK_IGNORE_UNUSED, 0),
  3330. GATE(CLK_ACLK_APOLLONP_200, "aclk_apollonp_200",
  3331. "div_pclk_apollo", ENABLE_ACLK_APOLLO,
  3332. 0, CLK_IGNORE_UNUSED, 0),
  3333. /* ENABLE_PCLK_APOLLO */
  3334. GATE(CLK_PCLK_ASAPBMST_CSSYS_APOLLO, "pclk_asapbmst_cssys_apollo",
  3335. "div_pclk_dbg_apollo", ENABLE_PCLK_APOLLO,
  3336. 2, CLK_IGNORE_UNUSED, 0),
  3337. GATE(CLK_PCLK_PMU_APOLLO, "pclk_pmu_apollo", "div_pclk_apollo",
  3338. ENABLE_PCLK_APOLLO, 1, CLK_IGNORE_UNUSED, 0),
  3339. GATE(CLK_PCLK_SYSREG_APOLLO, "pclk_sysreg_apollo",
  3340. "div_pclk_apollo", ENABLE_PCLK_APOLLO,
  3341. 0, CLK_IGNORE_UNUSED, 0),
  3342. /* ENABLE_SCLK_APOLLO */
  3343. GATE(CLK_CNTCLK_APOLLO, "cntclk_apollo", "div_cntclk_apollo",
  3344. ENABLE_SCLK_APOLLO, 3, CLK_IGNORE_UNUSED, 0),
  3345. GATE(CLK_SCLK_HPM_APOLLO, "sclk_hpm_apollo", "div_sclk_hpm_apollo",
  3346. ENABLE_SCLK_APOLLO, 1, CLK_IGNORE_UNUSED, 0),
  3347. };
  3348. #define E5433_APOLLO_DIV0(cntclk, pclk_dbg, atclk, pclk, aclk) \
  3349. (((cntclk) << 24) | ((pclk_dbg) << 20) | ((atclk) << 16) | \
  3350. ((pclk) << 12) | ((aclk) << 8))
  3351. #define E5433_APOLLO_DIV1(hpm, copy) \
  3352. (((hpm) << 4) | ((copy) << 0))
  3353. static const struct exynos_cpuclk_cfg_data exynos5433_apolloclk_d[] __initconst = {
  3354. { 1300000, E5433_APOLLO_DIV0(3, 7, 7, 7, 2), E5433_APOLLO_DIV1(7, 1), },
  3355. { 1200000, E5433_APOLLO_DIV0(3, 7, 7, 7, 2), E5433_APOLLO_DIV1(7, 1), },
  3356. { 1100000, E5433_APOLLO_DIV0(3, 7, 7, 7, 2), E5433_APOLLO_DIV1(7, 1), },
  3357. { 1000000, E5433_APOLLO_DIV0(3, 7, 7, 7, 2), E5433_APOLLO_DIV1(7, 1), },
  3358. { 900000, E5433_APOLLO_DIV0(3, 7, 7, 7, 2), E5433_APOLLO_DIV1(7, 1), },
  3359. { 800000, E5433_APOLLO_DIV0(3, 7, 7, 7, 2), E5433_APOLLO_DIV1(7, 1), },
  3360. { 700000, E5433_APOLLO_DIV0(3, 7, 7, 7, 2), E5433_APOLLO_DIV1(7, 1), },
  3361. { 600000, E5433_APOLLO_DIV0(3, 7, 7, 7, 1), E5433_APOLLO_DIV1(7, 1), },
  3362. { 500000, E5433_APOLLO_DIV0(3, 7, 7, 7, 1), E5433_APOLLO_DIV1(7, 1), },
  3363. { 400000, E5433_APOLLO_DIV0(3, 7, 7, 7, 1), E5433_APOLLO_DIV1(7, 1), },
  3364. { 0 },
  3365. };
  3366. static void __init exynos5433_cmu_apollo_init(struct device_node *np)
  3367. {
  3368. void __iomem *reg_base;
  3369. struct samsung_clk_provider *ctx;
  3370. reg_base = of_iomap(np, 0);
  3371. if (!reg_base) {
  3372. panic("%s: failed to map registers\n", __func__);
  3373. return;
  3374. }
  3375. ctx = samsung_clk_init(np, reg_base, APOLLO_NR_CLK);
  3376. if (!ctx) {
  3377. panic("%s: unable to allocate ctx\n", __func__);
  3378. return;
  3379. }
  3380. samsung_clk_register_pll(ctx, apollo_pll_clks,
  3381. ARRAY_SIZE(apollo_pll_clks), reg_base);
  3382. samsung_clk_register_mux(ctx, apollo_mux_clks,
  3383. ARRAY_SIZE(apollo_mux_clks));
  3384. samsung_clk_register_div(ctx, apollo_div_clks,
  3385. ARRAY_SIZE(apollo_div_clks));
  3386. samsung_clk_register_gate(ctx, apollo_gate_clks,
  3387. ARRAY_SIZE(apollo_gate_clks));
  3388. exynos_register_cpu_clock(ctx, CLK_SCLK_APOLLO, "apolloclk",
  3389. mout_apollo_p[0], mout_apollo_p[1], 0x200,
  3390. exynos5433_apolloclk_d, ARRAY_SIZE(exynos5433_apolloclk_d),
  3391. CLK_CPU_HAS_E5433_REGS_LAYOUT);
  3392. samsung_clk_sleep_init(reg_base, apollo_clk_regs,
  3393. ARRAY_SIZE(apollo_clk_regs));
  3394. samsung_clk_of_add_provider(np, ctx);
  3395. }
  3396. CLK_OF_DECLARE(exynos5433_cmu_apollo, "samsung,exynos5433-cmu-apollo",
  3397. exynos5433_cmu_apollo_init);
  3398. /*
  3399. * Register offset definitions for CMU_ATLAS
  3400. */
  3401. #define ATLAS_PLL_LOCK 0x0000
  3402. #define ATLAS_PLL_CON0 0x0100
  3403. #define ATLAS_PLL_CON1 0x0104
  3404. #define ATLAS_PLL_FREQ_DET 0x010c
  3405. #define MUX_SEL_ATLAS0 0x0200
  3406. #define MUX_SEL_ATLAS1 0x0204
  3407. #define MUX_SEL_ATLAS2 0x0208
  3408. #define MUX_ENABLE_ATLAS0 0x0300
  3409. #define MUX_ENABLE_ATLAS1 0x0304
  3410. #define MUX_ENABLE_ATLAS2 0x0308
  3411. #define MUX_STAT_ATLAS0 0x0400
  3412. #define MUX_STAT_ATLAS1 0x0404
  3413. #define MUX_STAT_ATLAS2 0x0408
  3414. #define DIV_ATLAS0 0x0600
  3415. #define DIV_ATLAS1 0x0604
  3416. #define DIV_ATLAS_PLL_FREQ_DET 0x0608
  3417. #define DIV_STAT_ATLAS0 0x0700
  3418. #define DIV_STAT_ATLAS1 0x0704
  3419. #define DIV_STAT_ATLAS_PLL_FREQ_DET 0x0708
  3420. #define ENABLE_ACLK_ATLAS 0x0800
  3421. #define ENABLE_PCLK_ATLAS 0x0900
  3422. #define ENABLE_SCLK_ATLAS 0x0a00
  3423. #define ENABLE_IP_ATLAS0 0x0b00
  3424. #define ENABLE_IP_ATLAS1 0x0b04
  3425. #define CLKOUT_CMU_ATLAS 0x0c00
  3426. #define CLKOUT_CMU_ATLAS_DIV_STAT 0x0c04
  3427. #define ARMCLK_STOPCTRL 0x1000
  3428. #define ATLAS_PWR_CTRL 0x1020
  3429. #define ATLAS_PWR_CTRL2 0x1024
  3430. #define ATLAS_INTR_SPREAD_ENABLE 0x1080
  3431. #define ATLAS_INTR_SPREAD_USE_STANDBYWFI 0x1084
  3432. #define ATLAS_INTR_SPREAD_BLOCKING_DURATION 0x1088
  3433. static const unsigned long atlas_clk_regs[] __initconst = {
  3434. ATLAS_PLL_LOCK,
  3435. ATLAS_PLL_CON0,
  3436. ATLAS_PLL_CON1,
  3437. ATLAS_PLL_FREQ_DET,
  3438. MUX_SEL_ATLAS0,
  3439. MUX_SEL_ATLAS1,
  3440. MUX_SEL_ATLAS2,
  3441. MUX_ENABLE_ATLAS0,
  3442. MUX_ENABLE_ATLAS1,
  3443. MUX_ENABLE_ATLAS2,
  3444. DIV_ATLAS0,
  3445. DIV_ATLAS1,
  3446. DIV_ATLAS_PLL_FREQ_DET,
  3447. ENABLE_ACLK_ATLAS,
  3448. ENABLE_PCLK_ATLAS,
  3449. ENABLE_SCLK_ATLAS,
  3450. ENABLE_IP_ATLAS0,
  3451. ENABLE_IP_ATLAS1,
  3452. CLKOUT_CMU_ATLAS,
  3453. CLKOUT_CMU_ATLAS_DIV_STAT,
  3454. ARMCLK_STOPCTRL,
  3455. ATLAS_PWR_CTRL,
  3456. ATLAS_PWR_CTRL2,
  3457. ATLAS_INTR_SPREAD_ENABLE,
  3458. ATLAS_INTR_SPREAD_USE_STANDBYWFI,
  3459. ATLAS_INTR_SPREAD_BLOCKING_DURATION,
  3460. };
  3461. /* list of all parent clock list */
  3462. PNAME(mout_atlas_pll_p) = { "oscclk", "fout_atlas_pll", };
  3463. PNAME(mout_bus_pll_atlas_user_p) = { "oscclk", "sclk_bus_pll_atlas", };
  3464. PNAME(mout_atlas_p) = { "mout_atlas_pll",
  3465. "mout_bus_pll_atlas_user", };
  3466. static const struct samsung_pll_clock atlas_pll_clks[] __initconst = {
  3467. PLL(pll_35xx, CLK_FOUT_ATLAS_PLL, "fout_atlas_pll", "oscclk",
  3468. ATLAS_PLL_LOCK, ATLAS_PLL_CON0, exynos5443_pll_rates),
  3469. };
  3470. static const struct samsung_mux_clock atlas_mux_clks[] __initconst = {
  3471. /* MUX_SEL_ATLAS0 */
  3472. MUX_F(CLK_MOUT_ATLAS_PLL, "mout_atlas_pll", mout_atlas_pll_p,
  3473. MUX_SEL_ATLAS0, 0, 1, CLK_SET_RATE_PARENT |
  3474. CLK_RECALC_NEW_RATES, 0),
  3475. /* MUX_SEL_ATLAS1 */
  3476. MUX(CLK_MOUT_BUS_PLL_ATLAS_USER, "mout_bus_pll_atlas_user",
  3477. mout_bus_pll_atlas_user_p, MUX_SEL_ATLAS1, 0, 1),
  3478. /* MUX_SEL_ATLAS2 */
  3479. MUX_F(CLK_MOUT_ATLAS, "mout_atlas", mout_atlas_p, MUX_SEL_ATLAS2,
  3480. 0, 1, CLK_SET_RATE_PARENT, 0),
  3481. };
  3482. static const struct samsung_div_clock atlas_div_clks[] __initconst = {
  3483. /* DIV_ATLAS0 */
  3484. DIV_F(CLK_DIV_CNTCLK_ATLAS, "div_cntclk_atlas", "div_atlas2",
  3485. DIV_ATLAS0, 24, 3, CLK_GET_RATE_NOCACHE,
  3486. CLK_DIVIDER_READ_ONLY),
  3487. DIV_F(CLK_DIV_PCLK_DBG_ATLAS, "div_pclk_dbg_atlas", "div_atclk_atlas",
  3488. DIV_ATLAS0, 20, 3, CLK_GET_RATE_NOCACHE,
  3489. CLK_DIVIDER_READ_ONLY),
  3490. DIV_F(CLK_DIV_ATCLK_ATLASO, "div_atclk_atlas", "div_atlas2",
  3491. DIV_ATLAS0, 16, 3, CLK_GET_RATE_NOCACHE,
  3492. CLK_DIVIDER_READ_ONLY),
  3493. DIV_F(CLK_DIV_PCLK_ATLAS, "div_pclk_atlas", "div_atlas2",
  3494. DIV_ATLAS0, 12, 3, CLK_GET_RATE_NOCACHE,
  3495. CLK_DIVIDER_READ_ONLY),
  3496. DIV_F(CLK_DIV_ACLK_ATLAS, "div_aclk_atlas", "div_atlas2",
  3497. DIV_ATLAS0, 8, 3, CLK_GET_RATE_NOCACHE,
  3498. CLK_DIVIDER_READ_ONLY),
  3499. DIV_F(CLK_DIV_ATLAS2, "div_atlas2", "div_atlas1",
  3500. DIV_ATLAS0, 4, 3, CLK_SET_RATE_PARENT, 0),
  3501. DIV_F(CLK_DIV_ATLAS1, "div_atlas1", "mout_atlas",
  3502. DIV_ATLAS0, 0, 3, CLK_SET_RATE_PARENT, 0),
  3503. /* DIV_ATLAS1 */
  3504. DIV_F(CLK_DIV_SCLK_HPM_ATLAS, "div_sclk_hpm_atlas", "mout_atlas",
  3505. DIV_ATLAS1, 4, 3, CLK_GET_RATE_NOCACHE,
  3506. CLK_DIVIDER_READ_ONLY),
  3507. DIV_F(CLK_DIV_ATLAS_PLL, "div_atlas_pll", "mout_atlas",
  3508. DIV_ATLAS1, 0, 3, CLK_GET_RATE_NOCACHE,
  3509. CLK_DIVIDER_READ_ONLY),
  3510. };
  3511. static const struct samsung_gate_clock atlas_gate_clks[] __initconst = {
  3512. /* ENABLE_ACLK_ATLAS */
  3513. GATE(CLK_ACLK_ATB_AUD_CSSYS, "aclk_atb_aud_cssys",
  3514. "div_atclk_atlas", ENABLE_ACLK_ATLAS,
  3515. 9, CLK_IGNORE_UNUSED, 0),
  3516. GATE(CLK_ACLK_ATB_APOLLO3_CSSYS, "aclk_atb_apollo3_cssys",
  3517. "div_atclk_atlas", ENABLE_ACLK_ATLAS,
  3518. 8, CLK_IGNORE_UNUSED, 0),
  3519. GATE(CLK_ACLK_ATB_APOLLO2_CSSYS, "aclk_atb_apollo2_cssys",
  3520. "div_atclk_atlas", ENABLE_ACLK_ATLAS,
  3521. 7, CLK_IGNORE_UNUSED, 0),
  3522. GATE(CLK_ACLK_ATB_APOLLO1_CSSYS, "aclk_atb_apollo1_cssys",
  3523. "div_atclk_atlas", ENABLE_ACLK_ATLAS,
  3524. 6, CLK_IGNORE_UNUSED, 0),
  3525. GATE(CLK_ACLK_ATB_APOLLO0_CSSYS, "aclk_atb_apollo0_cssys",
  3526. "div_atclk_atlas", ENABLE_ACLK_ATLAS,
  3527. 5, CLK_IGNORE_UNUSED, 0),
  3528. GATE(CLK_ACLK_ASYNCAHBS_CSSYS_SSS, "aclk_asyncahbs_cssys_sss",
  3529. "div_atclk_atlas", ENABLE_ACLK_ATLAS,
  3530. 4, CLK_IGNORE_UNUSED, 0),
  3531. GATE(CLK_ACLK_ASYNCAXIS_CSSYS_CCIX, "aclk_asyncaxis_cssys_ccix",
  3532. "div_pclk_dbg_atlas", ENABLE_ACLK_ATLAS,
  3533. 3, CLK_IGNORE_UNUSED, 0),
  3534. GATE(CLK_ACLK_ASYNCACES_ATLAS_CCI, "aclk_asyncaces_atlas_cci",
  3535. "div_aclk_atlas", ENABLE_ACLK_ATLAS,
  3536. 2, CLK_IGNORE_UNUSED, 0),
  3537. GATE(CLK_ACLK_AHB2APB_ATLASP, "aclk_ahb2apb_atlasp", "div_pclk_atlas",
  3538. ENABLE_ACLK_ATLAS, 1, CLK_IGNORE_UNUSED, 0),
  3539. GATE(CLK_ACLK_ATLASNP_200, "aclk_atlasnp_200", "div_pclk_atlas",
  3540. ENABLE_ACLK_ATLAS, 0, CLK_IGNORE_UNUSED, 0),
  3541. /* ENABLE_PCLK_ATLAS */
  3542. GATE(CLK_PCLK_ASYNCAPB_AUD_CSSYS, "pclk_asyncapb_aud_cssys",
  3543. "div_pclk_dbg_atlas", ENABLE_PCLK_ATLAS,
  3544. 5, CLK_IGNORE_UNUSED, 0),
  3545. GATE(CLK_PCLK_ASYNCAPB_ISP_CSSYS, "pclk_asyncapb_isp_cssys",
  3546. "div_pclk_dbg_atlas", ENABLE_PCLK_ATLAS,
  3547. 4, CLK_IGNORE_UNUSED, 0),
  3548. GATE(CLK_PCLK_ASYNCAPB_APOLLO_CSSYS, "pclk_asyncapb_apollo_cssys",
  3549. "div_pclk_dbg_atlas", ENABLE_PCLK_ATLAS,
  3550. 3, CLK_IGNORE_UNUSED, 0),
  3551. GATE(CLK_PCLK_PMU_ATLAS, "pclk_pmu_atlas", "div_pclk_atlas",
  3552. ENABLE_PCLK_ATLAS, 2, CLK_IGNORE_UNUSED, 0),
  3553. GATE(CLK_PCLK_SYSREG_ATLAS, "pclk_sysreg_atlas", "div_pclk_atlas",
  3554. ENABLE_PCLK_ATLAS, 1, CLK_IGNORE_UNUSED, 0),
  3555. GATE(CLK_PCLK_SECJTAG, "pclk_secjtag", "div_pclk_dbg_atlas",
  3556. ENABLE_PCLK_ATLAS, 0, CLK_IGNORE_UNUSED, 0),
  3557. /* ENABLE_SCLK_ATLAS */
  3558. GATE(CLK_CNTCLK_ATLAS, "cntclk_atlas", "div_cntclk_atlas",
  3559. ENABLE_SCLK_ATLAS, 10, CLK_IGNORE_UNUSED, 0),
  3560. GATE(CLK_SCLK_HPM_ATLAS, "sclk_hpm_atlas", "div_sclk_hpm_atlas",
  3561. ENABLE_SCLK_ATLAS, 7, CLK_IGNORE_UNUSED, 0),
  3562. GATE(CLK_TRACECLK, "traceclk", "div_atclk_atlas",
  3563. ENABLE_SCLK_ATLAS, 6, CLK_IGNORE_UNUSED, 0),
  3564. GATE(CLK_CTMCLK, "ctmclk", "div_atclk_atlas",
  3565. ENABLE_SCLK_ATLAS, 5, CLK_IGNORE_UNUSED, 0),
  3566. GATE(CLK_HCLK_CSSYS, "hclk_cssys", "div_atclk_atlas",
  3567. ENABLE_SCLK_ATLAS, 4, CLK_IGNORE_UNUSED, 0),
  3568. GATE(CLK_PCLK_DBG_CSSYS, "pclk_dbg_cssys", "div_pclk_dbg_atlas",
  3569. ENABLE_SCLK_ATLAS, 3, CLK_IGNORE_UNUSED, 0),
  3570. GATE(CLK_PCLK_DBG, "pclk_dbg", "div_pclk_dbg_atlas",
  3571. ENABLE_SCLK_ATLAS, 2, CLK_IGNORE_UNUSED, 0),
  3572. GATE(CLK_ATCLK, "atclk", "div_atclk_atlas",
  3573. ENABLE_SCLK_ATLAS, 1, CLK_IGNORE_UNUSED, 0),
  3574. };
  3575. #define E5433_ATLAS_DIV0(cntclk, pclk_dbg, atclk, pclk, aclk) \
  3576. (((cntclk) << 24) | ((pclk_dbg) << 20) | ((atclk) << 16) | \
  3577. ((pclk) << 12) | ((aclk) << 8))
  3578. #define E5433_ATLAS_DIV1(hpm, copy) \
  3579. (((hpm) << 4) | ((copy) << 0))
  3580. static const struct exynos_cpuclk_cfg_data exynos5433_atlasclk_d[] __initconst = {
  3581. { 1900000, E5433_ATLAS_DIV0(7, 7, 7, 7, 4), E5433_ATLAS_DIV1(7, 1), },
  3582. { 1800000, E5433_ATLAS_DIV0(7, 7, 7, 7, 4), E5433_ATLAS_DIV1(7, 1), },
  3583. { 1700000, E5433_ATLAS_DIV0(7, 7, 7, 7, 4), E5433_ATLAS_DIV1(7, 1), },
  3584. { 1600000, E5433_ATLAS_DIV0(7, 7, 7, 7, 4), E5433_ATLAS_DIV1(7, 1), },
  3585. { 1500000, E5433_ATLAS_DIV0(7, 7, 7, 7, 3), E5433_ATLAS_DIV1(7, 1), },
  3586. { 1400000, E5433_ATLAS_DIV0(7, 7, 7, 7, 3), E5433_ATLAS_DIV1(7, 1), },
  3587. { 1300000, E5433_ATLAS_DIV0(7, 7, 7, 7, 3), E5433_ATLAS_DIV1(7, 1), },
  3588. { 1200000, E5433_ATLAS_DIV0(7, 7, 7, 7, 3), E5433_ATLAS_DIV1(7, 1), },
  3589. { 1100000, E5433_ATLAS_DIV0(7, 7, 7, 7, 3), E5433_ATLAS_DIV1(7, 1), },
  3590. { 1000000, E5433_ATLAS_DIV0(7, 7, 7, 7, 3), E5433_ATLAS_DIV1(7, 1), },
  3591. { 900000, E5433_ATLAS_DIV0(7, 7, 7, 7, 2), E5433_ATLAS_DIV1(7, 1), },
  3592. { 800000, E5433_ATLAS_DIV0(7, 7, 7, 7, 2), E5433_ATLAS_DIV1(7, 1), },
  3593. { 700000, E5433_ATLAS_DIV0(7, 7, 7, 7, 2), E5433_ATLAS_DIV1(7, 1), },
  3594. { 600000, E5433_ATLAS_DIV0(7, 7, 7, 7, 2), E5433_ATLAS_DIV1(7, 1), },
  3595. { 500000, E5433_ATLAS_DIV0(7, 7, 7, 7, 2), E5433_ATLAS_DIV1(7, 1), },
  3596. { 0 },
  3597. };
  3598. static void __init exynos5433_cmu_atlas_init(struct device_node *np)
  3599. {
  3600. void __iomem *reg_base;
  3601. struct samsung_clk_provider *ctx;
  3602. reg_base = of_iomap(np, 0);
  3603. if (!reg_base) {
  3604. panic("%s: failed to map registers\n", __func__);
  3605. return;
  3606. }
  3607. ctx = samsung_clk_init(np, reg_base, ATLAS_NR_CLK);
  3608. if (!ctx) {
  3609. panic("%s: unable to allocate ctx\n", __func__);
  3610. return;
  3611. }
  3612. samsung_clk_register_pll(ctx, atlas_pll_clks,
  3613. ARRAY_SIZE(atlas_pll_clks), reg_base);
  3614. samsung_clk_register_mux(ctx, atlas_mux_clks,
  3615. ARRAY_SIZE(atlas_mux_clks));
  3616. samsung_clk_register_div(ctx, atlas_div_clks,
  3617. ARRAY_SIZE(atlas_div_clks));
  3618. samsung_clk_register_gate(ctx, atlas_gate_clks,
  3619. ARRAY_SIZE(atlas_gate_clks));
  3620. exynos_register_cpu_clock(ctx, CLK_SCLK_ATLAS, "atlasclk",
  3621. mout_atlas_p[0], mout_atlas_p[1], 0x200,
  3622. exynos5433_atlasclk_d, ARRAY_SIZE(exynos5433_atlasclk_d),
  3623. CLK_CPU_HAS_E5433_REGS_LAYOUT);
  3624. samsung_clk_sleep_init(reg_base, atlas_clk_regs,
  3625. ARRAY_SIZE(atlas_clk_regs));
  3626. samsung_clk_of_add_provider(np, ctx);
  3627. }
  3628. CLK_OF_DECLARE(exynos5433_cmu_atlas, "samsung,exynos5433-cmu-atlas",
  3629. exynos5433_cmu_atlas_init);
  3630. /*
  3631. * Register offset definitions for CMU_MSCL
  3632. */
  3633. #define MUX_SEL_MSCL0 0x0200
  3634. #define MUX_SEL_MSCL1 0x0204
  3635. #define MUX_ENABLE_MSCL0 0x0300
  3636. #define MUX_ENABLE_MSCL1 0x0304
  3637. #define MUX_STAT_MSCL0 0x0400
  3638. #define MUX_STAT_MSCL1 0x0404
  3639. #define DIV_MSCL 0x0600
  3640. #define DIV_STAT_MSCL 0x0700
  3641. #define ENABLE_ACLK_MSCL 0x0800
  3642. #define ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER0 0x0804
  3643. #define ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER1 0x0808
  3644. #define ENABLE_ACLK_MSCL_SECURE_SMMU_JPEG 0x080c
  3645. #define ENABLE_PCLK_MSCL 0x0900
  3646. #define ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER0 0x0904
  3647. #define ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER1 0x0908
  3648. #define ENABLE_PCLK_MSCL_SECURE_SMMU_JPEG 0x090c
  3649. #define ENABLE_SCLK_MSCL 0x0a00
  3650. #define ENABLE_IP_MSCL0 0x0b00
  3651. #define ENABLE_IP_MSCL1 0x0b04
  3652. #define ENABLE_IP_MSCL_SECURE_SMMU_M2MSCALER0 0x0b08
  3653. #define ENABLE_IP_MSCL_SECURE_SMMU_M2MSCALER1 0x0b0c
  3654. #define ENABLE_IP_MSCL_SECURE_SMMU_JPEG 0x0b10
  3655. static const unsigned long mscl_clk_regs[] __initconst = {
  3656. MUX_SEL_MSCL0,
  3657. MUX_SEL_MSCL1,
  3658. MUX_ENABLE_MSCL0,
  3659. MUX_ENABLE_MSCL1,
  3660. DIV_MSCL,
  3661. ENABLE_ACLK_MSCL,
  3662. ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER0,
  3663. ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER1,
  3664. ENABLE_ACLK_MSCL_SECURE_SMMU_JPEG,
  3665. ENABLE_PCLK_MSCL,
  3666. ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER0,
  3667. ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER1,
  3668. ENABLE_PCLK_MSCL_SECURE_SMMU_JPEG,
  3669. ENABLE_SCLK_MSCL,
  3670. ENABLE_IP_MSCL0,
  3671. ENABLE_IP_MSCL1,
  3672. ENABLE_IP_MSCL_SECURE_SMMU_M2MSCALER0,
  3673. ENABLE_IP_MSCL_SECURE_SMMU_M2MSCALER1,
  3674. ENABLE_IP_MSCL_SECURE_SMMU_JPEG,
  3675. };
  3676. /* list of all parent clock list */
  3677. PNAME(mout_sclk_jpeg_user_p) = { "oscclk", "sclk_jpeg_mscl", };
  3678. PNAME(mout_aclk_mscl_400_user_p) = { "oscclk", "aclk_mscl_400", };
  3679. PNAME(mout_sclk_jpeg_p) = { "mout_sclk_jpeg_user",
  3680. "mout_aclk_mscl_400_user", };
  3681. static const struct samsung_mux_clock mscl_mux_clks[] __initconst = {
  3682. /* MUX_SEL_MSCL0 */
  3683. MUX(CLK_MOUT_SCLK_JPEG_USER, "mout_sclk_jpeg_user",
  3684. mout_sclk_jpeg_user_p, MUX_SEL_MSCL0, 4, 1),
  3685. MUX(CLK_MOUT_ACLK_MSCL_400_USER, "mout_aclk_mscl_400_user",
  3686. mout_aclk_mscl_400_user_p, MUX_SEL_MSCL0, 0, 1),
  3687. /* MUX_SEL_MSCL1 */
  3688. MUX(CLK_MOUT_SCLK_JPEG, "mout_sclk_jpeg", mout_sclk_jpeg_p,
  3689. MUX_SEL_MSCL1, 0, 1),
  3690. };
  3691. static const struct samsung_div_clock mscl_div_clks[] __initconst = {
  3692. /* DIV_MSCL */
  3693. DIV(CLK_DIV_PCLK_MSCL, "div_pclk_mscl", "mout_aclk_mscl_400_user",
  3694. DIV_MSCL, 0, 3),
  3695. };
  3696. static const struct samsung_gate_clock mscl_gate_clks[] __initconst = {
  3697. /* ENABLE_ACLK_MSCL */
  3698. GATE(CLK_ACLK_BTS_JPEG, "aclk_bts_jpeg", "mout_aclk_mscl_400_user",
  3699. ENABLE_ACLK_MSCL, 9, 0, 0),
  3700. GATE(CLK_ACLK_BTS_M2MSCALER1, "aclk_bts_m2mscaler1",
  3701. "mout_aclk_mscl_400_user", ENABLE_ACLK_MSCL, 8, 0, 0),
  3702. GATE(CLK_ACLK_BTS_M2MSCALER0, "aclk_bts_m2mscaler0",
  3703. "mout_aclk_mscl_400_user", ENABLE_ACLK_MSCL, 7, 0, 0),
  3704. GATE(CLK_ACLK_AHB2APB_MSCL0P, "aclk_abh2apb_mscl0p", "div_pclk_mscl",
  3705. ENABLE_ACLK_MSCL, 6, CLK_IGNORE_UNUSED, 0),
  3706. GATE(CLK_ACLK_XIU_MSCLX, "aclk_xiu_msclx", "mout_aclk_mscl_400_user",
  3707. ENABLE_ACLK_MSCL, 5, CLK_IGNORE_UNUSED, 0),
  3708. GATE(CLK_ACLK_MSCLNP_100, "aclk_msclnp_100", "div_pclk_mscl",
  3709. ENABLE_ACLK_MSCL, 4, CLK_IGNORE_UNUSED, 0),
  3710. GATE(CLK_ACLK_MSCLND_400, "aclk_msclnd_400", "mout_aclk_mscl_400_user",
  3711. ENABLE_ACLK_MSCL, 3, CLK_IGNORE_UNUSED, 0),
  3712. GATE(CLK_ACLK_JPEG, "aclk_jpeg", "mout_aclk_mscl_400_user",
  3713. ENABLE_ACLK_MSCL, 2, 0, 0),
  3714. GATE(CLK_ACLK_M2MSCALER1, "aclk_m2mscaler1", "mout_aclk_mscl_400_user",
  3715. ENABLE_ACLK_MSCL, 1, 0, 0),
  3716. GATE(CLK_ACLK_M2MSCALER0, "aclk_m2mscaler0", "mout_aclk_mscl_400_user",
  3717. ENABLE_ACLK_MSCL, 0, 0, 0),
  3718. /* ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER0 */
  3719. GATE(CLK_ACLK_SMMU_M2MSCALER0, "aclk_smmu_m2mscaler0",
  3720. "mout_aclk_mscl_400_user",
  3721. ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER0,
  3722. 0, CLK_IGNORE_UNUSED, 0),
  3723. /* ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER1 */
  3724. GATE(CLK_ACLK_SMMU_M2MSCALER1, "aclk_smmu_m2mscaler1",
  3725. "mout_aclk_mscl_400_user",
  3726. ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER1,
  3727. 0, CLK_IGNORE_UNUSED, 0),
  3728. /* ENABLE_ACLK_MSCL_SECURE_SMMU_JPEG */
  3729. GATE(CLK_ACLK_SMMU_JPEG, "aclk_smmu_jpeg", "mout_aclk_mscl_400_user",
  3730. ENABLE_ACLK_MSCL_SECURE_SMMU_JPEG,
  3731. 0, CLK_IGNORE_UNUSED, 0),
  3732. /* ENABLE_PCLK_MSCL */
  3733. GATE(CLK_PCLK_BTS_JPEG, "pclk_bts_jpeg", "div_pclk_mscl",
  3734. ENABLE_PCLK_MSCL, 7, 0, 0),
  3735. GATE(CLK_PCLK_BTS_M2MSCALER1, "pclk_bts_m2mscaler1", "div_pclk_mscl",
  3736. ENABLE_PCLK_MSCL, 6, 0, 0),
  3737. GATE(CLK_PCLK_BTS_M2MSCALER0, "pclk_bts_m2mscaler0", "div_pclk_mscl",
  3738. ENABLE_PCLK_MSCL, 5, 0, 0),
  3739. GATE(CLK_PCLK_PMU_MSCL, "pclk_pmu_mscl", "div_pclk_mscl",
  3740. ENABLE_PCLK_MSCL, 4, CLK_IGNORE_UNUSED, 0),
  3741. GATE(CLK_PCLK_SYSREG_MSCL, "pclk_sysreg_mscl", "div_pclk_mscl",
  3742. ENABLE_PCLK_MSCL, 3, CLK_IGNORE_UNUSED, 0),
  3743. GATE(CLK_PCLK_JPEG, "pclk_jpeg", "div_pclk_mscl",
  3744. ENABLE_PCLK_MSCL, 2, 0, 0),
  3745. GATE(CLK_PCLK_M2MSCALER1, "pclk_m2mscaler1", "div_pclk_mscl",
  3746. ENABLE_PCLK_MSCL, 1, 0, 0),
  3747. GATE(CLK_PCLK_M2MSCALER0, "pclk_m2mscaler0", "div_pclk_mscl",
  3748. ENABLE_PCLK_MSCL, 0, 0, 0),
  3749. /* ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER0 */
  3750. GATE(CLK_PCLK_SMMU_M2MSCALER0, "pclk_smmu_m2mscaler0", "div_pclk_mscl",
  3751. ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER0,
  3752. 0, CLK_IGNORE_UNUSED, 0),
  3753. /* ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER1 */
  3754. GATE(CLK_PCLK_SMMU_M2MSCALER1, "pclk_smmu_m2mscaler1", "div_pclk_mscl",
  3755. ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER1,
  3756. 0, CLK_IGNORE_UNUSED, 0),
  3757. /* ENABLE_PCLK_MSCL_SECURE_SMMU_JPEG */
  3758. GATE(CLK_PCLK_SMMU_JPEG, "pclk_smmu_jpeg", "div_pclk_mscl",
  3759. ENABLE_PCLK_MSCL_SECURE_SMMU_JPEG,
  3760. 0, CLK_IGNORE_UNUSED, 0),
  3761. /* ENABLE_SCLK_MSCL */
  3762. GATE(CLK_SCLK_JPEG, "sclk_jpeg", "mout_sclk_jpeg", ENABLE_SCLK_MSCL, 0,
  3763. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  3764. };
  3765. static const struct samsung_cmu_info mscl_cmu_info __initconst = {
  3766. .mux_clks = mscl_mux_clks,
  3767. .nr_mux_clks = ARRAY_SIZE(mscl_mux_clks),
  3768. .div_clks = mscl_div_clks,
  3769. .nr_div_clks = ARRAY_SIZE(mscl_div_clks),
  3770. .gate_clks = mscl_gate_clks,
  3771. .nr_gate_clks = ARRAY_SIZE(mscl_gate_clks),
  3772. .nr_clk_ids = MSCL_NR_CLK,
  3773. .clk_regs = mscl_clk_regs,
  3774. .nr_clk_regs = ARRAY_SIZE(mscl_clk_regs),
  3775. };
  3776. static void __init exynos5433_cmu_mscl_init(struct device_node *np)
  3777. {
  3778. samsung_cmu_register_one(np, &mscl_cmu_info);
  3779. }
  3780. CLK_OF_DECLARE(exynos5433_cmu_mscl, "samsung,exynos5433-cmu-mscl",
  3781. exynos5433_cmu_mscl_init);
  3782. /*
  3783. * Register offset definitions for CMU_MFC
  3784. */
  3785. #define MUX_SEL_MFC 0x0200
  3786. #define MUX_ENABLE_MFC 0x0300
  3787. #define MUX_STAT_MFC 0x0400
  3788. #define DIV_MFC 0x0600
  3789. #define DIV_STAT_MFC 0x0700
  3790. #define ENABLE_ACLK_MFC 0x0800
  3791. #define ENABLE_ACLK_MFC_SECURE_SMMU_MFC 0x0804
  3792. #define ENABLE_PCLK_MFC 0x0900
  3793. #define ENABLE_PCLK_MFC_SECURE_SMMU_MFC 0x0904
  3794. #define ENABLE_IP_MFC0 0x0b00
  3795. #define ENABLE_IP_MFC1 0x0b04
  3796. #define ENABLE_IP_MFC_SECURE_SMMU_MFC 0x0b08
  3797. static const unsigned long mfc_clk_regs[] __initconst = {
  3798. MUX_SEL_MFC,
  3799. MUX_ENABLE_MFC,
  3800. DIV_MFC,
  3801. ENABLE_ACLK_MFC,
  3802. ENABLE_ACLK_MFC_SECURE_SMMU_MFC,
  3803. ENABLE_PCLK_MFC,
  3804. ENABLE_PCLK_MFC_SECURE_SMMU_MFC,
  3805. ENABLE_IP_MFC0,
  3806. ENABLE_IP_MFC1,
  3807. ENABLE_IP_MFC_SECURE_SMMU_MFC,
  3808. };
  3809. PNAME(mout_aclk_mfc_400_user_p) = { "oscclk", "aclk_mfc_400", };
  3810. static const struct samsung_mux_clock mfc_mux_clks[] __initconst = {
  3811. /* MUX_SEL_MFC */
  3812. MUX(CLK_MOUT_ACLK_MFC_400_USER, "mout_aclk_mfc_400_user",
  3813. mout_aclk_mfc_400_user_p, MUX_SEL_MFC, 0, 0),
  3814. };
  3815. static const struct samsung_div_clock mfc_div_clks[] __initconst = {
  3816. /* DIV_MFC */
  3817. DIV(CLK_DIV_PCLK_MFC, "div_pclk_mfc", "mout_aclk_mfc_400_user",
  3818. DIV_MFC, 0, 2),
  3819. };
  3820. static const struct samsung_gate_clock mfc_gate_clks[] __initconst = {
  3821. /* ENABLE_ACLK_MFC */
  3822. GATE(CLK_ACLK_BTS_MFC_1, "aclk_bts_mfc_1", "mout_aclk_mfc_400_user",
  3823. ENABLE_ACLK_MFC, 6, 0, 0),
  3824. GATE(CLK_ACLK_BTS_MFC_0, "aclk_bts_mfc_0", "mout_aclk_mfc_400_user",
  3825. ENABLE_ACLK_MFC, 5, 0, 0),
  3826. GATE(CLK_ACLK_AHB2APB_MFCP, "aclk_ahb2apb_mfcp", "div_pclk_mfc",
  3827. ENABLE_ACLK_MFC, 4, CLK_IGNORE_UNUSED, 0),
  3828. GATE(CLK_ACLK_XIU_MFCX, "aclk_xiu_mfcx", "mout_aclk_mfc_400_user",
  3829. ENABLE_ACLK_MFC, 3, CLK_IGNORE_UNUSED, 0),
  3830. GATE(CLK_ACLK_MFCNP_100, "aclk_mfcnp_100", "div_pclk_mfc",
  3831. ENABLE_ACLK_MFC, 2, CLK_IGNORE_UNUSED, 0),
  3832. GATE(CLK_ACLK_MFCND_400, "aclk_mfcnd_400", "mout_aclk_mfc_400_user",
  3833. ENABLE_ACLK_MFC, 1, CLK_IGNORE_UNUSED, 0),
  3834. GATE(CLK_ACLK_MFC, "aclk_mfc", "mout_aclk_mfc_400_user",
  3835. ENABLE_ACLK_MFC, 0, 0, 0),
  3836. /* ENABLE_ACLK_MFC_SECURE_SMMU_MFC */
  3837. GATE(CLK_ACLK_SMMU_MFC_1, "aclk_smmu_mfc_1", "mout_aclk_mfc_400_user",
  3838. ENABLE_ACLK_MFC_SECURE_SMMU_MFC,
  3839. 1, CLK_IGNORE_UNUSED, 0),
  3840. GATE(CLK_ACLK_SMMU_MFC_0, "aclk_smmu_mfc_0", "mout_aclk_mfc_400_user",
  3841. ENABLE_ACLK_MFC_SECURE_SMMU_MFC,
  3842. 0, CLK_IGNORE_UNUSED, 0),
  3843. /* ENABLE_PCLK_MFC */
  3844. GATE(CLK_PCLK_BTS_MFC_1, "pclk_bts_mfc_1", "div_pclk_mfc",
  3845. ENABLE_PCLK_MFC, 4, 0, 0),
  3846. GATE(CLK_PCLK_BTS_MFC_0, "pclk_bts_mfc_0", "div_pclk_mfc",
  3847. ENABLE_PCLK_MFC, 3, 0, 0),
  3848. GATE(CLK_PCLK_PMU_MFC, "pclk_pmu_mfc", "div_pclk_mfc",
  3849. ENABLE_PCLK_MFC, 2, CLK_IGNORE_UNUSED, 0),
  3850. GATE(CLK_PCLK_SYSREG_MFC, "pclk_sysreg_mfc", "div_pclk_mfc",
  3851. ENABLE_PCLK_MFC, 1, CLK_IGNORE_UNUSED, 0),
  3852. GATE(CLK_PCLK_MFC, "pclk_mfc", "div_pclk_mfc",
  3853. ENABLE_PCLK_MFC, 4, CLK_IGNORE_UNUSED, 0),
  3854. /* ENABLE_PCLK_MFC_SECURE_SMMU_MFC */
  3855. GATE(CLK_PCLK_SMMU_MFC_1, "pclk_smmu_mfc_1", "div_pclk_mfc",
  3856. ENABLE_PCLK_MFC_SECURE_SMMU_MFC,
  3857. 1, CLK_IGNORE_UNUSED, 0),
  3858. GATE(CLK_PCLK_SMMU_MFC_0, "pclk_smmu_mfc_0", "div_pclk_mfc",
  3859. ENABLE_PCLK_MFC_SECURE_SMMU_MFC,
  3860. 0, CLK_IGNORE_UNUSED, 0),
  3861. };
  3862. static const struct samsung_cmu_info mfc_cmu_info __initconst = {
  3863. .mux_clks = mfc_mux_clks,
  3864. .nr_mux_clks = ARRAY_SIZE(mfc_mux_clks),
  3865. .div_clks = mfc_div_clks,
  3866. .nr_div_clks = ARRAY_SIZE(mfc_div_clks),
  3867. .gate_clks = mfc_gate_clks,
  3868. .nr_gate_clks = ARRAY_SIZE(mfc_gate_clks),
  3869. .nr_clk_ids = MFC_NR_CLK,
  3870. .clk_regs = mfc_clk_regs,
  3871. .nr_clk_regs = ARRAY_SIZE(mfc_clk_regs),
  3872. };
  3873. static void __init exynos5433_cmu_mfc_init(struct device_node *np)
  3874. {
  3875. samsung_cmu_register_one(np, &mfc_cmu_info);
  3876. }
  3877. CLK_OF_DECLARE(exynos5433_cmu_mfc, "samsung,exynos5433-cmu-mfc",
  3878. exynos5433_cmu_mfc_init);
  3879. /*
  3880. * Register offset definitions for CMU_HEVC
  3881. */
  3882. #define MUX_SEL_HEVC 0x0200
  3883. #define MUX_ENABLE_HEVC 0x0300
  3884. #define MUX_STAT_HEVC 0x0400
  3885. #define DIV_HEVC 0x0600
  3886. #define DIV_STAT_HEVC 0x0700
  3887. #define ENABLE_ACLK_HEVC 0x0800
  3888. #define ENABLE_ACLK_HEVC_SECURE_SMMU_HEVC 0x0804
  3889. #define ENABLE_PCLK_HEVC 0x0900
  3890. #define ENABLE_PCLK_HEVC_SECURE_SMMU_HEVC 0x0904
  3891. #define ENABLE_IP_HEVC0 0x0b00
  3892. #define ENABLE_IP_HEVC1 0x0b04
  3893. #define ENABLE_IP_HEVC_SECURE_SMMU_HEVC 0x0b08
  3894. static const unsigned long hevc_clk_regs[] __initconst = {
  3895. MUX_SEL_HEVC,
  3896. MUX_ENABLE_HEVC,
  3897. DIV_HEVC,
  3898. ENABLE_ACLK_HEVC,
  3899. ENABLE_ACLK_HEVC_SECURE_SMMU_HEVC,
  3900. ENABLE_PCLK_HEVC,
  3901. ENABLE_PCLK_HEVC_SECURE_SMMU_HEVC,
  3902. ENABLE_IP_HEVC0,
  3903. ENABLE_IP_HEVC1,
  3904. ENABLE_IP_HEVC_SECURE_SMMU_HEVC,
  3905. };
  3906. PNAME(mout_aclk_hevc_400_user_p) = { "oscclk", "aclk_hevc_400", };
  3907. static const struct samsung_mux_clock hevc_mux_clks[] __initconst = {
  3908. /* MUX_SEL_HEVC */
  3909. MUX(CLK_MOUT_ACLK_HEVC_400_USER, "mout_aclk_hevc_400_user",
  3910. mout_aclk_hevc_400_user_p, MUX_SEL_HEVC, 0, 0),
  3911. };
  3912. static const struct samsung_div_clock hevc_div_clks[] __initconst = {
  3913. /* DIV_HEVC */
  3914. DIV(CLK_DIV_PCLK_HEVC, "div_pclk_hevc", "mout_aclk_hevc_400_user",
  3915. DIV_HEVC, 0, 2),
  3916. };
  3917. static const struct samsung_gate_clock hevc_gate_clks[] __initconst = {
  3918. /* ENABLE_ACLK_HEVC */
  3919. GATE(CLK_ACLK_BTS_HEVC_1, "aclk_bts_hevc_1", "mout_aclk_hevc_400_user",
  3920. ENABLE_ACLK_HEVC, 6, 0, 0),
  3921. GATE(CLK_ACLK_BTS_HEVC_0, "aclk_bts_hevc_0", "mout_aclk_hevc_400_user",
  3922. ENABLE_ACLK_HEVC, 5, 0, 0),
  3923. GATE(CLK_ACLK_AHB2APB_HEVCP, "aclk_ahb2apb_hevcp", "div_pclk_hevc",
  3924. ENABLE_ACLK_HEVC, 4, CLK_IGNORE_UNUSED, 0),
  3925. GATE(CLK_ACLK_XIU_HEVCX, "aclk_xiu_hevcx", "mout_aclk_hevc_400_user",
  3926. ENABLE_ACLK_HEVC, 3, CLK_IGNORE_UNUSED, 0),
  3927. GATE(CLK_ACLK_HEVCNP_100, "aclk_hevcnp_100", "div_pclk_hevc",
  3928. ENABLE_ACLK_HEVC, 2, CLK_IGNORE_UNUSED, 0),
  3929. GATE(CLK_ACLK_HEVCND_400, "aclk_hevcnd_400", "mout_aclk_hevc_400_user",
  3930. ENABLE_ACLK_HEVC, 1, CLK_IGNORE_UNUSED, 0),
  3931. GATE(CLK_ACLK_HEVC, "aclk_hevc", "mout_aclk_hevc_400_user",
  3932. ENABLE_ACLK_HEVC, 0, 0, 0),
  3933. /* ENABLE_ACLK_HEVC_SECURE_SMMU_HEVC */
  3934. GATE(CLK_ACLK_SMMU_HEVC_1, "aclk_smmu_hevc_1",
  3935. "mout_aclk_hevc_400_user",
  3936. ENABLE_ACLK_HEVC_SECURE_SMMU_HEVC,
  3937. 1, CLK_IGNORE_UNUSED, 0),
  3938. GATE(CLK_ACLK_SMMU_HEVC_0, "aclk_smmu_hevc_0",
  3939. "mout_aclk_hevc_400_user",
  3940. ENABLE_ACLK_HEVC_SECURE_SMMU_HEVC,
  3941. 0, CLK_IGNORE_UNUSED, 0),
  3942. /* ENABLE_PCLK_HEVC */
  3943. GATE(CLK_PCLK_BTS_HEVC_1, "pclk_bts_hevc_1", "div_pclk_hevc",
  3944. ENABLE_PCLK_HEVC, 4, 0, 0),
  3945. GATE(CLK_PCLK_BTS_HEVC_0, "pclk_bts_hevc_0", "div_pclk_hevc",
  3946. ENABLE_PCLK_HEVC, 3, 0, 0),
  3947. GATE(CLK_PCLK_PMU_HEVC, "pclk_pmu_hevc", "div_pclk_hevc",
  3948. ENABLE_PCLK_HEVC, 2, CLK_IGNORE_UNUSED, 0),
  3949. GATE(CLK_PCLK_SYSREG_HEVC, "pclk_sysreg_hevc", "div_pclk_hevc",
  3950. ENABLE_PCLK_HEVC, 1, CLK_IGNORE_UNUSED, 0),
  3951. GATE(CLK_PCLK_HEVC, "pclk_hevc", "div_pclk_hevc",
  3952. ENABLE_PCLK_HEVC, 4, CLK_IGNORE_UNUSED, 0),
  3953. /* ENABLE_PCLK_HEVC_SECURE_SMMU_HEVC */
  3954. GATE(CLK_PCLK_SMMU_HEVC_1, "pclk_smmu_hevc_1", "div_pclk_hevc",
  3955. ENABLE_PCLK_HEVC_SECURE_SMMU_HEVC,
  3956. 1, CLK_IGNORE_UNUSED, 0),
  3957. GATE(CLK_PCLK_SMMU_HEVC_0, "pclk_smmu_hevc_0", "div_pclk_hevc",
  3958. ENABLE_PCLK_HEVC_SECURE_SMMU_HEVC,
  3959. 0, CLK_IGNORE_UNUSED, 0),
  3960. };
  3961. static const struct samsung_cmu_info hevc_cmu_info __initconst = {
  3962. .mux_clks = hevc_mux_clks,
  3963. .nr_mux_clks = ARRAY_SIZE(hevc_mux_clks),
  3964. .div_clks = hevc_div_clks,
  3965. .nr_div_clks = ARRAY_SIZE(hevc_div_clks),
  3966. .gate_clks = hevc_gate_clks,
  3967. .nr_gate_clks = ARRAY_SIZE(hevc_gate_clks),
  3968. .nr_clk_ids = HEVC_NR_CLK,
  3969. .clk_regs = hevc_clk_regs,
  3970. .nr_clk_regs = ARRAY_SIZE(hevc_clk_regs),
  3971. };
  3972. static void __init exynos5433_cmu_hevc_init(struct device_node *np)
  3973. {
  3974. samsung_cmu_register_one(np, &hevc_cmu_info);
  3975. }
  3976. CLK_OF_DECLARE(exynos5433_cmu_hevc, "samsung,exynos5433-cmu-hevc",
  3977. exynos5433_cmu_hevc_init);
  3978. /*
  3979. * Register offset definitions for CMU_ISP
  3980. */
  3981. #define MUX_SEL_ISP 0x0200
  3982. #define MUX_ENABLE_ISP 0x0300
  3983. #define MUX_STAT_ISP 0x0400
  3984. #define DIV_ISP 0x0600
  3985. #define DIV_STAT_ISP 0x0700
  3986. #define ENABLE_ACLK_ISP0 0x0800
  3987. #define ENABLE_ACLK_ISP1 0x0804
  3988. #define ENABLE_ACLK_ISP2 0x0808
  3989. #define ENABLE_PCLK_ISP 0x0900
  3990. #define ENABLE_SCLK_ISP 0x0a00
  3991. #define ENABLE_IP_ISP0 0x0b00
  3992. #define ENABLE_IP_ISP1 0x0b04
  3993. #define ENABLE_IP_ISP2 0x0b08
  3994. #define ENABLE_IP_ISP3 0x0b0c
  3995. static const unsigned long isp_clk_regs[] __initconst = {
  3996. MUX_SEL_ISP,
  3997. MUX_ENABLE_ISP,
  3998. DIV_ISP,
  3999. ENABLE_ACLK_ISP0,
  4000. ENABLE_ACLK_ISP1,
  4001. ENABLE_ACLK_ISP2,
  4002. ENABLE_PCLK_ISP,
  4003. ENABLE_SCLK_ISP,
  4004. ENABLE_IP_ISP0,
  4005. ENABLE_IP_ISP1,
  4006. ENABLE_IP_ISP2,
  4007. ENABLE_IP_ISP3,
  4008. };
  4009. PNAME(mout_aclk_isp_dis_400_user_p) = { "oscclk", "aclk_isp_dis_400", };
  4010. PNAME(mout_aclk_isp_400_user_p) = { "oscclk", "aclk_isp_400", };
  4011. static const struct samsung_mux_clock isp_mux_clks[] __initconst = {
  4012. /* MUX_SEL_ISP */
  4013. MUX(CLK_MOUT_ACLK_ISP_DIS_400_USER, "mout_aclk_isp_dis_400_user",
  4014. mout_aclk_isp_dis_400_user_p, MUX_SEL_ISP, 4, 0),
  4015. MUX(CLK_MOUT_ACLK_ISP_400_USER, "mout_aclk_isp_400_user",
  4016. mout_aclk_isp_400_user_p, MUX_SEL_ISP, 0, 0),
  4017. };
  4018. static const struct samsung_div_clock isp_div_clks[] __initconst = {
  4019. /* DIV_ISP */
  4020. DIV(CLK_DIV_PCLK_ISP_DIS, "div_pclk_isp_dis",
  4021. "mout_aclk_isp_dis_400_user", DIV_ISP, 12, 3),
  4022. DIV(CLK_DIV_PCLK_ISP, "div_pclk_isp", "mout_aclk_isp_400_user",
  4023. DIV_ISP, 8, 3),
  4024. DIV(CLK_DIV_ACLK_ISP_D_200, "div_aclk_isp_d_200",
  4025. "mout_aclk_isp_400_user", DIV_ISP, 4, 3),
  4026. DIV(CLK_DIV_ACLK_ISP_C_200, "div_aclk_isp_c_200",
  4027. "mout_aclk_isp_400_user", DIV_ISP, 0, 3),
  4028. };
  4029. static const struct samsung_gate_clock isp_gate_clks[] __initconst = {
  4030. /* ENABLE_ACLK_ISP0 */
  4031. GATE(CLK_ACLK_ISP_D_GLUE, "aclk_isp_d_glue", "mout_aclk_isp_400_user",
  4032. ENABLE_ACLK_ISP0, 6, CLK_IGNORE_UNUSED, 0),
  4033. GATE(CLK_ACLK_SCALERP, "aclk_scalerp", "mout_aclk_isp_400_user",
  4034. ENABLE_ACLK_ISP0, 5, 0, 0),
  4035. GATE(CLK_ACLK_3DNR, "aclk_3dnr", "mout_aclk_isp_400_user",
  4036. ENABLE_ACLK_ISP0, 4, 0, 0),
  4037. GATE(CLK_ACLK_DIS, "aclk_dis", "mout_aclk_isp_dis_400_user",
  4038. ENABLE_ACLK_ISP0, 3, 0, 0),
  4039. GATE(CLK_ACLK_SCALERC, "aclk_scalerc", "mout_aclk_isp_400_user",
  4040. ENABLE_ACLK_ISP0, 2, 0, 0),
  4041. GATE(CLK_ACLK_DRC, "aclk_drc", "mout_aclk_isp_400_user",
  4042. ENABLE_ACLK_ISP0, 1, 0, 0),
  4043. GATE(CLK_ACLK_ISP, "aclk_isp", "mout_aclk_isp_400_user",
  4044. ENABLE_ACLK_ISP0, 0, 0, 0),
  4045. /* ENABLE_ACLK_ISP1 */
  4046. GATE(CLK_ACLK_AXIUS_SCALERP, "aclk_axius_scalerp",
  4047. "mout_aclk_isp_400_user", ENABLE_ACLK_ISP1,
  4048. 17, CLK_IGNORE_UNUSED, 0),
  4049. GATE(CLK_ACLK_AXIUS_SCALERC, "aclk_axius_scalerc",
  4050. "mout_aclk_isp_400_user", ENABLE_ACLK_ISP1,
  4051. 16, CLK_IGNORE_UNUSED, 0),
  4052. GATE(CLK_ACLK_AXIUS_DRC, "aclk_axius_drc",
  4053. "mout_aclk_isp_400_user", ENABLE_ACLK_ISP1,
  4054. 15, CLK_IGNORE_UNUSED, 0),
  4055. GATE(CLK_ACLK_ASYNCAHBM_ISP2P, "aclk_asyncahbm_isp2p",
  4056. "div_pclk_isp", ENABLE_ACLK_ISP1,
  4057. 14, CLK_IGNORE_UNUSED, 0),
  4058. GATE(CLK_ACLK_ASYNCAHBM_ISP1P, "aclk_asyncahbm_isp1p",
  4059. "div_pclk_isp", ENABLE_ACLK_ISP1,
  4060. 13, CLK_IGNORE_UNUSED, 0),
  4061. GATE(CLK_ACLK_ASYNCAXIS_DIS1, "aclk_asyncaxis_dis1",
  4062. "mout_aclk_isp_dis_400_user", ENABLE_ACLK_ISP1,
  4063. 12, CLK_IGNORE_UNUSED, 0),
  4064. GATE(CLK_ACLK_ASYNCAXIS_DIS0, "aclk_asyncaxis_dis0",
  4065. "mout_aclk_isp_dis_400_user", ENABLE_ACLK_ISP1,
  4066. 11, CLK_IGNORE_UNUSED, 0),
  4067. GATE(CLK_ACLK_ASYNCAXIM_DIS1, "aclk_asyncaxim_dis1",
  4068. "mout_aclk_isp_400_user", ENABLE_ACLK_ISP1,
  4069. 10, CLK_IGNORE_UNUSED, 0),
  4070. GATE(CLK_ACLK_ASYNCAXIM_DIS0, "aclk_asyncaxim_dis0",
  4071. "mout_aclk_isp_400_user", ENABLE_ACLK_ISP1,
  4072. 9, CLK_IGNORE_UNUSED, 0),
  4073. GATE(CLK_ACLK_ASYNCAXIM_ISP2P, "aclk_asyncaxim_isp2p",
  4074. "div_aclk_isp_d_200", ENABLE_ACLK_ISP1,
  4075. 8, CLK_IGNORE_UNUSED, 0),
  4076. GATE(CLK_ACLK_ASYNCAXIM_ISP1P, "aclk_asyncaxim_isp1p",
  4077. "div_aclk_isp_c_200", ENABLE_ACLK_ISP1,
  4078. 7, CLK_IGNORE_UNUSED, 0),
  4079. GATE(CLK_ACLK_AHB2APB_ISP2P, "aclk_ahb2apb_isp2p", "div_pclk_isp",
  4080. ENABLE_ACLK_ISP1, 6, CLK_IGNORE_UNUSED, 0),
  4081. GATE(CLK_ACLK_AHB2APB_ISP1P, "aclk_ahb2apb_isp1p", "div_pclk_isp",
  4082. ENABLE_ACLK_ISP1, 5, CLK_IGNORE_UNUSED, 0),
  4083. GATE(CLK_ACLK_AXI2APB_ISP2P, "aclk_axi2apb_isp2p",
  4084. "div_aclk_isp_d_200", ENABLE_ACLK_ISP1,
  4085. 4, CLK_IGNORE_UNUSED, 0),
  4086. GATE(CLK_ACLK_AXI2APB_ISP1P, "aclk_axi2apb_isp1p",
  4087. "div_aclk_isp_c_200", ENABLE_ACLK_ISP1,
  4088. 3, CLK_IGNORE_UNUSED, 0),
  4089. GATE(CLK_ACLK_XIU_ISPEX1, "aclk_xiu_ispex1", "mout_aclk_isp_400_user",
  4090. ENABLE_ACLK_ISP1, 2, CLK_IGNORE_UNUSED, 0),
  4091. GATE(CLK_ACLK_XIU_ISPEX0, "aclk_xiu_ispex0", "mout_aclk_isp_400_user",
  4092. ENABLE_ACLK_ISP1, 1, CLK_IGNORE_UNUSED, 0),
  4093. GATE(CLK_ACLK_ISPND_400, "aclk_ispnd_400", "mout_aclk_isp_400_user",
  4094. ENABLE_ACLK_ISP1, 1, CLK_IGNORE_UNUSED, 0),
  4095. /* ENABLE_ACLK_ISP2 */
  4096. GATE(CLK_ACLK_SMMU_SCALERP, "aclk_smmu_scalerp",
  4097. "mout_aclk_isp_400_user", ENABLE_ACLK_ISP2,
  4098. 13, CLK_IGNORE_UNUSED, 0),
  4099. GATE(CLK_ACLK_SMMU_3DNR, "aclk_smmu_3dnr", "mout_aclk_isp_400_user",
  4100. ENABLE_ACLK_ISP2, 12, CLK_IGNORE_UNUSED, 0),
  4101. GATE(CLK_ACLK_SMMU_DIS1, "aclk_smmu_dis1", "mout_aclk_isp_400_user",
  4102. ENABLE_ACLK_ISP2, 11, CLK_IGNORE_UNUSED, 0),
  4103. GATE(CLK_ACLK_SMMU_DIS0, "aclk_smmu_dis0", "mout_aclk_isp_400_user",
  4104. ENABLE_ACLK_ISP2, 10, CLK_IGNORE_UNUSED, 0),
  4105. GATE(CLK_ACLK_SMMU_SCALERC, "aclk_smmu_scalerc",
  4106. "mout_aclk_isp_400_user", ENABLE_ACLK_ISP2,
  4107. 9, CLK_IGNORE_UNUSED, 0),
  4108. GATE(CLK_ACLK_SMMU_DRC, "aclk_smmu_drc", "mout_aclk_isp_400_user",
  4109. ENABLE_ACLK_ISP2, 8, CLK_IGNORE_UNUSED, 0),
  4110. GATE(CLK_ACLK_SMMU_ISP, "aclk_smmu_isp", "mout_aclk_isp_400_user",
  4111. ENABLE_ACLK_ISP2, 7, CLK_IGNORE_UNUSED, 0),
  4112. GATE(CLK_ACLK_BTS_SCALERP, "aclk_bts_scalerp",
  4113. "mout_aclk_isp_400_user", ENABLE_ACLK_ISP2,
  4114. 6, CLK_IGNORE_UNUSED, 0),
  4115. GATE(CLK_ACLK_BTS_3DR, "aclk_bts_3dnr", "mout_aclk_isp_400_user",
  4116. ENABLE_ACLK_ISP2, 5, CLK_IGNORE_UNUSED, 0),
  4117. GATE(CLK_ACLK_BTS_DIS1, "aclk_bts_dis1", "mout_aclk_isp_400_user",
  4118. ENABLE_ACLK_ISP2, 4, CLK_IGNORE_UNUSED, 0),
  4119. GATE(CLK_ACLK_BTS_DIS0, "aclk_bts_dis0", "mout_aclk_isp_400_user",
  4120. ENABLE_ACLK_ISP2, 3, CLK_IGNORE_UNUSED, 0),
  4121. GATE(CLK_ACLK_BTS_SCALERC, "aclk_bts_scalerc",
  4122. "mout_aclk_isp_400_user", ENABLE_ACLK_ISP2,
  4123. 2, CLK_IGNORE_UNUSED, 0),
  4124. GATE(CLK_ACLK_BTS_DRC, "aclk_bts_drc", "mout_aclk_isp_400_user",
  4125. ENABLE_ACLK_ISP2, 1, CLK_IGNORE_UNUSED, 0),
  4126. GATE(CLK_ACLK_BTS_ISP, "aclk_bts_isp", "mout_aclk_isp_400_user",
  4127. ENABLE_ACLK_ISP2, 0, CLK_IGNORE_UNUSED, 0),
  4128. /* ENABLE_PCLK_ISP */
  4129. GATE(CLK_PCLK_SMMU_SCALERP, "pclk_smmu_scalerp", "div_aclk_isp_d_200",
  4130. ENABLE_PCLK_ISP, 25, CLK_IGNORE_UNUSED, 0),
  4131. GATE(CLK_PCLK_SMMU_3DNR, "pclk_smmu_3dnr", "div_aclk_isp_d_200",
  4132. ENABLE_PCLK_ISP, 24, CLK_IGNORE_UNUSED, 0),
  4133. GATE(CLK_PCLK_SMMU_DIS1, "pclk_smmu_dis1", "div_aclk_isp_d_200",
  4134. ENABLE_PCLK_ISP, 23, CLK_IGNORE_UNUSED, 0),
  4135. GATE(CLK_PCLK_SMMU_DIS0, "pclk_smmu_dis0", "div_aclk_isp_d_200",
  4136. ENABLE_PCLK_ISP, 22, CLK_IGNORE_UNUSED, 0),
  4137. GATE(CLK_PCLK_SMMU_SCALERC, "pclk_smmu_scalerc", "div_aclk_isp_c_200",
  4138. ENABLE_PCLK_ISP, 21, CLK_IGNORE_UNUSED, 0),
  4139. GATE(CLK_PCLK_SMMU_DRC, "pclk_smmu_drc", "div_aclk_isp_c_200",
  4140. ENABLE_PCLK_ISP, 20, CLK_IGNORE_UNUSED, 0),
  4141. GATE(CLK_PCLK_SMMU_ISP, "pclk_smmu_isp", "div_aclk_isp_c_200",
  4142. ENABLE_PCLK_ISP, 19, CLK_IGNORE_UNUSED, 0),
  4143. GATE(CLK_PCLK_BTS_SCALERP, "pclk_bts_scalerp", "div_pclk_isp",
  4144. ENABLE_PCLK_ISP, 18, CLK_IGNORE_UNUSED, 0),
  4145. GATE(CLK_PCLK_BTS_3DNR, "pclk_bts_3dnr", "div_pclk_isp",
  4146. ENABLE_PCLK_ISP, 17, CLK_IGNORE_UNUSED, 0),
  4147. GATE(CLK_PCLK_BTS_DIS1, "pclk_bts_dis1", "div_pclk_isp",
  4148. ENABLE_PCLK_ISP, 16, CLK_IGNORE_UNUSED, 0),
  4149. GATE(CLK_PCLK_BTS_DIS0, "pclk_bts_dis0", "div_pclk_isp",
  4150. ENABLE_PCLK_ISP, 15, CLK_IGNORE_UNUSED, 0),
  4151. GATE(CLK_PCLK_BTS_SCALERC, "pclk_bts_scalerc", "div_pclk_isp",
  4152. ENABLE_PCLK_ISP, 14, CLK_IGNORE_UNUSED, 0),
  4153. GATE(CLK_PCLK_BTS_DRC, "pclk_bts_drc", "div_pclk_isp",
  4154. ENABLE_PCLK_ISP, 13, CLK_IGNORE_UNUSED, 0),
  4155. GATE(CLK_PCLK_BTS_ISP, "pclk_bts_isp", "div_pclk_isp",
  4156. ENABLE_PCLK_ISP, 12, CLK_IGNORE_UNUSED, 0),
  4157. GATE(CLK_PCLK_ASYNCAXI_DIS1, "pclk_asyncaxi_dis1", "div_pclk_isp",
  4158. ENABLE_PCLK_ISP, 11, CLK_IGNORE_UNUSED, 0),
  4159. GATE(CLK_PCLK_ASYNCAXI_DIS0, "pclk_asyncaxi_dis0", "div_pclk_isp",
  4160. ENABLE_PCLK_ISP, 10, CLK_IGNORE_UNUSED, 0),
  4161. GATE(CLK_PCLK_PMU_ISP, "pclk_pmu_isp", "div_pclk_isp",
  4162. ENABLE_PCLK_ISP, 9, CLK_IGNORE_UNUSED, 0),
  4163. GATE(CLK_PCLK_SYSREG_ISP, "pclk_sysreg_isp", "div_pclk_isp",
  4164. ENABLE_PCLK_ISP, 8, CLK_IGNORE_UNUSED, 0),
  4165. GATE(CLK_PCLK_CMU_ISP_LOCAL, "pclk_cmu_isp_local",
  4166. "div_aclk_isp_c_200", ENABLE_PCLK_ISP,
  4167. 7, CLK_IGNORE_UNUSED, 0),
  4168. GATE(CLK_PCLK_SCALERP, "pclk_scalerp", "div_aclk_isp_d_200",
  4169. ENABLE_PCLK_ISP, 6, CLK_IGNORE_UNUSED, 0),
  4170. GATE(CLK_PCLK_3DNR, "pclk_3dnr", "div_aclk_isp_d_200",
  4171. ENABLE_PCLK_ISP, 5, CLK_IGNORE_UNUSED, 0),
  4172. GATE(CLK_PCLK_DIS_CORE, "pclk_dis_core", "div_pclk_isp_dis",
  4173. ENABLE_PCLK_ISP, 4, CLK_IGNORE_UNUSED, 0),
  4174. GATE(CLK_PCLK_DIS, "pclk_dis", "div_aclk_isp_d_200",
  4175. ENABLE_PCLK_ISP, 3, CLK_IGNORE_UNUSED, 0),
  4176. GATE(CLK_PCLK_SCALERC, "pclk_scalerc", "div_aclk_isp_c_200",
  4177. ENABLE_PCLK_ISP, 2, CLK_IGNORE_UNUSED, 0),
  4178. GATE(CLK_PCLK_DRC, "pclk_drc", "div_aclk_isp_c_200",
  4179. ENABLE_PCLK_ISP, 1, CLK_IGNORE_UNUSED, 0),
  4180. GATE(CLK_PCLK_ISP, "pclk_isp", "div_aclk_isp_c_200",
  4181. ENABLE_PCLK_ISP, 0, CLK_IGNORE_UNUSED, 0),
  4182. /* ENABLE_SCLK_ISP */
  4183. GATE(CLK_SCLK_PIXELASYNCS_DIS, "sclk_pixelasyncs_dis",
  4184. "mout_aclk_isp_dis_400_user", ENABLE_SCLK_ISP,
  4185. 5, CLK_IGNORE_UNUSED, 0),
  4186. GATE(CLK_SCLK_PIXELASYNCM_DIS, "sclk_pixelasyncm_dis",
  4187. "mout_aclk_isp_dis_400_user", ENABLE_SCLK_ISP,
  4188. 4, CLK_IGNORE_UNUSED, 0),
  4189. GATE(CLK_SCLK_PIXELASYNCS_SCALERP, "sclk_pixelasyncs_scalerp",
  4190. "mout_aclk_isp_400_user", ENABLE_SCLK_ISP,
  4191. 3, CLK_IGNORE_UNUSED, 0),
  4192. GATE(CLK_SCLK_PIXELASYNCM_ISPD, "sclk_pixelasyncm_ispd",
  4193. "mout_aclk_isp_400_user", ENABLE_SCLK_ISP,
  4194. 2, CLK_IGNORE_UNUSED, 0),
  4195. GATE(CLK_SCLK_PIXELASYNCS_ISPC, "sclk_pixelasyncs_ispc",
  4196. "mout_aclk_isp_400_user", ENABLE_SCLK_ISP,
  4197. 1, CLK_IGNORE_UNUSED, 0),
  4198. GATE(CLK_SCLK_PIXELASYNCM_ISPC, "sclk_pixelasyncm_ispc",
  4199. "mout_aclk_isp_400_user", ENABLE_SCLK_ISP,
  4200. 0, CLK_IGNORE_UNUSED, 0),
  4201. };
  4202. static const struct samsung_cmu_info isp_cmu_info __initconst = {
  4203. .mux_clks = isp_mux_clks,
  4204. .nr_mux_clks = ARRAY_SIZE(isp_mux_clks),
  4205. .div_clks = isp_div_clks,
  4206. .nr_div_clks = ARRAY_SIZE(isp_div_clks),
  4207. .gate_clks = isp_gate_clks,
  4208. .nr_gate_clks = ARRAY_SIZE(isp_gate_clks),
  4209. .nr_clk_ids = ISP_NR_CLK,
  4210. .clk_regs = isp_clk_regs,
  4211. .nr_clk_regs = ARRAY_SIZE(isp_clk_regs),
  4212. };
  4213. static void __init exynos5433_cmu_isp_init(struct device_node *np)
  4214. {
  4215. samsung_cmu_register_one(np, &isp_cmu_info);
  4216. }
  4217. CLK_OF_DECLARE(exynos5433_cmu_isp, "samsung,exynos5433-cmu-isp",
  4218. exynos5433_cmu_isp_init);
  4219. /*
  4220. * Register offset definitions for CMU_CAM0
  4221. */
  4222. #define MUX_SEL_CAM00 0x0200
  4223. #define MUX_SEL_CAM01 0x0204
  4224. #define MUX_SEL_CAM02 0x0208
  4225. #define MUX_SEL_CAM03 0x020c
  4226. #define MUX_SEL_CAM04 0x0210
  4227. #define MUX_ENABLE_CAM00 0x0300
  4228. #define MUX_ENABLE_CAM01 0x0304
  4229. #define MUX_ENABLE_CAM02 0x0308
  4230. #define MUX_ENABLE_CAM03 0x030c
  4231. #define MUX_ENABLE_CAM04 0x0310
  4232. #define MUX_STAT_CAM00 0x0400
  4233. #define MUX_STAT_CAM01 0x0404
  4234. #define MUX_STAT_CAM02 0x0408
  4235. #define MUX_STAT_CAM03 0x040c
  4236. #define MUX_STAT_CAM04 0x0410
  4237. #define MUX_IGNORE_CAM01 0x0504
  4238. #define DIV_CAM00 0x0600
  4239. #define DIV_CAM01 0x0604
  4240. #define DIV_CAM02 0x0608
  4241. #define DIV_CAM03 0x060c
  4242. #define DIV_STAT_CAM00 0x0700
  4243. #define DIV_STAT_CAM01 0x0704
  4244. #define DIV_STAT_CAM02 0x0708
  4245. #define DIV_STAT_CAM03 0x070c
  4246. #define ENABLE_ACLK_CAM00 0X0800
  4247. #define ENABLE_ACLK_CAM01 0X0804
  4248. #define ENABLE_ACLK_CAM02 0X0808
  4249. #define ENABLE_PCLK_CAM0 0X0900
  4250. #define ENABLE_SCLK_CAM0 0X0a00
  4251. #define ENABLE_IP_CAM00 0X0b00
  4252. #define ENABLE_IP_CAM01 0X0b04
  4253. #define ENABLE_IP_CAM02 0X0b08
  4254. #define ENABLE_IP_CAM03 0X0b0C
  4255. static const unsigned long cam0_clk_regs[] __initconst = {
  4256. MUX_SEL_CAM00,
  4257. MUX_SEL_CAM01,
  4258. MUX_SEL_CAM02,
  4259. MUX_SEL_CAM03,
  4260. MUX_SEL_CAM04,
  4261. MUX_ENABLE_CAM00,
  4262. MUX_ENABLE_CAM01,
  4263. MUX_ENABLE_CAM02,
  4264. MUX_ENABLE_CAM03,
  4265. MUX_ENABLE_CAM04,
  4266. MUX_IGNORE_CAM01,
  4267. DIV_CAM00,
  4268. DIV_CAM01,
  4269. DIV_CAM02,
  4270. DIV_CAM03,
  4271. ENABLE_ACLK_CAM00,
  4272. ENABLE_ACLK_CAM01,
  4273. ENABLE_ACLK_CAM02,
  4274. ENABLE_PCLK_CAM0,
  4275. ENABLE_SCLK_CAM0,
  4276. ENABLE_IP_CAM00,
  4277. ENABLE_IP_CAM01,
  4278. ENABLE_IP_CAM02,
  4279. ENABLE_IP_CAM03,
  4280. };
  4281. PNAME(mout_aclk_cam0_333_user_p) = { "oscclk", "aclk_cam0_333", };
  4282. PNAME(mout_aclk_cam0_400_user_p) = { "oscclk", "aclk_cam0_400", };
  4283. PNAME(mout_aclk_cam0_552_user_p) = { "oscclk", "aclk_cam0_552", };
  4284. PNAME(mout_phyclk_rxbyteclkhs0_s4_user_p) = { "oscclk",
  4285. "phyclk_rxbyteclkhs0_s4_phy", };
  4286. PNAME(mout_phyclk_rxbyteclkhs0_s2a_user_p) = { "oscclk",
  4287. "phyclk_rxbyteclkhs0_s2a_phy", };
  4288. PNAME(mout_aclk_lite_d_b_p) = { "mout_aclk_lite_d_a",
  4289. "mout_aclk_cam0_333_user", };
  4290. PNAME(mout_aclk_lite_d_a_p) = { "mout_aclk_cam0_552_user",
  4291. "mout_aclk_cam0_400_user", };
  4292. PNAME(mout_aclk_lite_b_b_p) = { "mout_aclk_lite_b_a",
  4293. "mout_aclk_cam0_333_user", };
  4294. PNAME(mout_aclk_lite_b_a_p) = { "mout_aclk_cam0_552_user",
  4295. "mout_aclk_cam0_400_user", };
  4296. PNAME(mout_aclk_lite_a_b_p) = { "mout_aclk_lite_a_a",
  4297. "mout_aclk_cam0_333_user", };
  4298. PNAME(mout_aclk_lite_a_a_p) = { "mout_aclk_cam0_552_user",
  4299. "mout_aclk_cam0_400_user", };
  4300. PNAME(mout_aclk_cam0_400_p) = { "mout_aclk_cam0_400_user",
  4301. "mout_aclk_cam0_333_user", };
  4302. PNAME(mout_aclk_csis1_b_p) = { "mout_aclk_csis1_a",
  4303. "mout_aclk_cam0_333_user" };
  4304. PNAME(mout_aclk_csis1_a_p) = { "mout_aclk_cam0_552_user",
  4305. "mout_aclk_cam0_400_user", };
  4306. PNAME(mout_aclk_csis0_b_p) = { "mout_aclk_csis0_a",
  4307. "mout_aclk_cam0_333_user", };
  4308. PNAME(mout_aclk_csis0_a_p) = { "mout_aclk_cam0_552_user",
  4309. "mout_aclk-cam0_400_user", };
  4310. PNAME(mout_aclk_3aa1_b_p) = { "mout_aclk_3aa1_a",
  4311. "mout_aclk_cam0_333_user", };
  4312. PNAME(mout_aclk_3aa1_a_p) = { "mout_aclk_cam0_552_user",
  4313. "mout_aclk_cam0_400_user", };
  4314. PNAME(mout_aclk_3aa0_b_p) = { "mout_aclk_3aa0_a",
  4315. "mout_aclk_cam0_333_user", };
  4316. PNAME(mout_aclk_3aa0_a_p) = { "mout_aclk_cam0_552_user",
  4317. "mout_aclk_cam0_400_user", };
  4318. PNAME(mout_sclk_lite_freecnt_c_p) = { "mout_sclk_lite_freecnt_b",
  4319. "div_pclk_lite_d", };
  4320. PNAME(mout_sclk_lite_freecnt_b_p) = { "mout_sclk_lite_freecnt_a",
  4321. "div_pclk_pixelasync_lite_c", };
  4322. PNAME(mout_sclk_lite_freecnt_a_p) = { "div_pclk_lite_a",
  4323. "div_pclk_lite_b", };
  4324. PNAME(mout_sclk_pixelasync_lite_c_b_p) = { "mout_sclk_pixelasync_lite_c_a",
  4325. "mout_aclk_cam0_333_user", };
  4326. PNAME(mout_sclk_pixelasync_lite_c_a_p) = { "mout_aclk_cam0_552_user",
  4327. "mout_aclk_cam0_400_user", };
  4328. PNAME(mout_sclk_pixelasync_lite_c_init_b_p) = {
  4329. "mout_sclk_pixelasync_lite_c_init_a",
  4330. "mout_aclk_cam0_400_user", };
  4331. PNAME(mout_sclk_pixelasync_lite_c_init_a_p) = {
  4332. "mout_aclk_cam0_552_user",
  4333. "mout_aclk_cam0_400_user", };
  4334. static const struct samsung_fixed_rate_clock cam0_fixed_clks[] __initconst = {
  4335. FRATE(CLK_PHYCLK_RXBYTEECLKHS0_S4_PHY, "phyclk_rxbyteclkhs0_s4_phy",
  4336. NULL, 0, 100000000),
  4337. FRATE(CLK_PHYCLK_RXBYTEECLKHS0_S2A_PHY, "phyclk_rxbyteclkhs0_s2a_phy",
  4338. NULL, 0, 100000000),
  4339. };
  4340. static const struct samsung_mux_clock cam0_mux_clks[] __initconst = {
  4341. /* MUX_SEL_CAM00 */
  4342. MUX(CLK_MOUT_ACLK_CAM0_333_USER, "mout_aclk_cam0_333_user",
  4343. mout_aclk_cam0_333_user_p, MUX_SEL_CAM00, 8, 1),
  4344. MUX(CLK_MOUT_ACLK_CAM0_400_USER, "mout_aclk_cam0_400_user",
  4345. mout_aclk_cam0_400_user_p, MUX_SEL_CAM00, 4, 1),
  4346. MUX(CLK_MOUT_ACLK_CAM0_552_USER, "mout_aclk_cam0_552_user",
  4347. mout_aclk_cam0_552_user_p, MUX_SEL_CAM00, 0, 1),
  4348. /* MUX_SEL_CAM01 */
  4349. MUX(CLK_MOUT_PHYCLK_RXBYTECLKHS0_S4_USER,
  4350. "mout_phyclk_rxbyteclkhs0_s4_user",
  4351. mout_phyclk_rxbyteclkhs0_s4_user_p,
  4352. MUX_SEL_CAM01, 4, 1),
  4353. MUX(CLK_MOUT_PHYCLK_RXBYTECLKHS0_S2A_USER,
  4354. "mout_phyclk_rxbyteclkhs0_s2a_user",
  4355. mout_phyclk_rxbyteclkhs0_s2a_user_p,
  4356. MUX_SEL_CAM01, 0, 1),
  4357. /* MUX_SEL_CAM02 */
  4358. MUX(CLK_MOUT_ACLK_LITE_D_B, "mout_aclk_lite_d_b", mout_aclk_lite_d_b_p,
  4359. MUX_SEL_CAM02, 24, 1),
  4360. MUX(CLK_MOUT_ACLK_LITE_D_A, "mout_aclk_lite_d_a", mout_aclk_lite_d_a_p,
  4361. MUX_SEL_CAM02, 20, 1),
  4362. MUX(CLK_MOUT_ACLK_LITE_B_B, "mout_aclk_lite_b_b", mout_aclk_lite_b_b_p,
  4363. MUX_SEL_CAM02, 16, 1),
  4364. MUX(CLK_MOUT_ACLK_LITE_B_A, "mout_aclk_lite_b_a", mout_aclk_lite_b_a_p,
  4365. MUX_SEL_CAM02, 12, 1),
  4366. MUX(CLK_MOUT_ACLK_LITE_A_B, "mout_aclk_lite_a_b", mout_aclk_lite_a_b_p,
  4367. MUX_SEL_CAM02, 8, 1),
  4368. MUX(CLK_MOUT_ACLK_LITE_A_A, "mout_aclk_lite_a_a", mout_aclk_lite_a_a_p,
  4369. MUX_SEL_CAM02, 4, 1),
  4370. MUX(CLK_MOUT_ACLK_CAM0_400, "mout_aclk_cam0_400", mout_aclk_cam0_400_p,
  4371. MUX_SEL_CAM02, 0, 1),
  4372. /* MUX_SEL_CAM03 */
  4373. MUX(CLK_MOUT_ACLK_CSIS1_B, "mout_aclk_csis1_b", mout_aclk_csis1_b_p,
  4374. MUX_SEL_CAM03, 28, 1),
  4375. MUX(CLK_MOUT_ACLK_CSIS1_A, "mout_aclk_csis1_a", mout_aclk_csis1_a_p,
  4376. MUX_SEL_CAM03, 24, 1),
  4377. MUX(CLK_MOUT_ACLK_CSIS0_B, "mout_aclk_csis0_b", mout_aclk_csis0_b_p,
  4378. MUX_SEL_CAM03, 20, 1),
  4379. MUX(CLK_MOUT_ACLK_CSIS0_A, "mout_aclk_csis0_a", mout_aclk_csis0_a_p,
  4380. MUX_SEL_CAM03, 16, 1),
  4381. MUX(CLK_MOUT_ACLK_3AA1_B, "mout_aclk_3aa1_b", mout_aclk_3aa1_b_p,
  4382. MUX_SEL_CAM03, 12, 1),
  4383. MUX(CLK_MOUT_ACLK_3AA1_A, "mout_aclk_3aa1_a", mout_aclk_3aa1_a_p,
  4384. MUX_SEL_CAM03, 8, 1),
  4385. MUX(CLK_MOUT_ACLK_3AA0_B, "mout_aclk_3aa0_b", mout_aclk_3aa0_b_p,
  4386. MUX_SEL_CAM03, 4, 1),
  4387. MUX(CLK_MOUT_ACLK_3AA0_A, "mout_aclk_3aa0_a", mout_aclk_3aa0_a_p,
  4388. MUX_SEL_CAM03, 0, 1),
  4389. /* MUX_SEL_CAM04 */
  4390. MUX(CLK_MOUT_SCLK_LITE_FREECNT_C, "mout_sclk_lite_freecnt_c",
  4391. mout_sclk_lite_freecnt_c_p, MUX_SEL_CAM04, 24, 1),
  4392. MUX(CLK_MOUT_SCLK_LITE_FREECNT_B, "mout_sclk_lite_freecnt_b",
  4393. mout_sclk_lite_freecnt_b_p, MUX_SEL_CAM04, 20, 1),
  4394. MUX(CLK_MOUT_SCLK_LITE_FREECNT_A, "mout_sclk_lite_freecnt_a",
  4395. mout_sclk_lite_freecnt_a_p, MUX_SEL_CAM04, 16, 1),
  4396. MUX(CLK_MOUT_SCLK_PIXELASYNC_LITE_C_B, "mout_sclk_pixelasync_lite_c_b",
  4397. mout_sclk_pixelasync_lite_c_b_p, MUX_SEL_CAM04, 12, 1),
  4398. MUX(CLK_MOUT_SCLK_PIXELASYNC_LITE_C_A, "mout_sclk_pixelasync_lite_c_a",
  4399. mout_sclk_pixelasync_lite_c_a_p, MUX_SEL_CAM04, 8, 1),
  4400. MUX(CLK_MOUT_SCLK_PIXELASYNC_LITE_C_INIT_B,
  4401. "mout_sclk_pixelasync_lite_c_init_b",
  4402. mout_sclk_pixelasync_lite_c_init_b_p,
  4403. MUX_SEL_CAM04, 4, 1),
  4404. MUX(CLK_MOUT_SCLK_PIXELASYNC_LITE_C_INIT_A,
  4405. "mout_sclk_pixelasync_lite_c_init_a",
  4406. mout_sclk_pixelasync_lite_c_init_a_p,
  4407. MUX_SEL_CAM04, 0, 1),
  4408. };
  4409. static const struct samsung_div_clock cam0_div_clks[] __initconst = {
  4410. /* DIV_CAM00 */
  4411. DIV(CLK_DIV_PCLK_CAM0_50, "div_pclk_cam0_50", "div_aclk_cam0_200",
  4412. DIV_CAM00, 8, 2),
  4413. DIV(CLK_DIV_ACLK_CAM0_200, "div_aclk_cam0_200", "mout_aclk_cam0_400",
  4414. DIV_CAM00, 4, 3),
  4415. DIV(CLK_DIV_ACLK_CAM0_BUS_400, "div_aclk_cam0_bus_400",
  4416. "mout_aclk_cam0_400", DIV_CAM00, 0, 3),
  4417. /* DIV_CAM01 */
  4418. DIV(CLK_DIV_PCLK_LITE_D, "div_pclk_lite_d", "div_aclk_lite_d",
  4419. DIV_CAM01, 20, 2),
  4420. DIV(CLK_DIV_ACLK_LITE_D, "div_aclk_lite_d", "mout_aclk_lite_d_b",
  4421. DIV_CAM01, 16, 3),
  4422. DIV(CLK_DIV_PCLK_LITE_B, "div_pclk_lite_b", "div_aclk_lite_b",
  4423. DIV_CAM01, 12, 2),
  4424. DIV(CLK_DIV_ACLK_LITE_B, "div_aclk_lite_b", "mout_aclk_lite_b_b",
  4425. DIV_CAM01, 8, 3),
  4426. DIV(CLK_DIV_PCLK_LITE_A, "div_pclk_lite_a", "div_aclk_lite_a",
  4427. DIV_CAM01, 4, 2),
  4428. DIV(CLK_DIV_ACLK_LITE_A, "div_aclk_lite_a", "mout_aclk_lite_a_b",
  4429. DIV_CAM01, 0, 3),
  4430. /* DIV_CAM02 */
  4431. DIV(CLK_DIV_ACLK_CSIS1, "div_aclk_csis1", "mout_aclk_csis1_b",
  4432. DIV_CAM02, 20, 3),
  4433. DIV(CLK_DIV_ACLK_CSIS0, "div_aclk_csis0", "mout_aclk_csis0_b",
  4434. DIV_CAM02, 16, 3),
  4435. DIV(CLK_DIV_PCLK_3AA1, "div_pclk_3aa1", "div_aclk_3aa1",
  4436. DIV_CAM02, 12, 2),
  4437. DIV(CLK_DIV_ACLK_3AA1, "div_aclk_3aa1", "mout_aclk_3aa1_b",
  4438. DIV_CAM02, 8, 3),
  4439. DIV(CLK_DIV_PCLK_3AA0, "div_pclk_3aa0", "div_aclk_3aa0",
  4440. DIV_CAM02, 4, 2),
  4441. DIV(CLK_DIV_ACLK_3AA0, "div_aclk_3aa0", "mout_aclk_3aa0_b",
  4442. DIV_CAM02, 0, 3),
  4443. /* DIV_CAM03 */
  4444. DIV(CLK_DIV_SCLK_PIXELASYNC_LITE_C, "div_sclk_pixelasync_lite_c",
  4445. "mout_sclk_pixelasync_lite_c_b", DIV_CAM03, 8, 3),
  4446. DIV(CLK_DIV_PCLK_PIXELASYNC_LITE_C, "div_pclk_pixelasync_lite_c",
  4447. "div_sclk_pixelasync_lite_c_init", DIV_CAM03, 4, 2),
  4448. DIV(CLK_DIV_SCLK_PIXELASYNC_LITE_C_INIT,
  4449. "div_sclk_pixelasync_lite_c_init",
  4450. "mout_sclk_pixelasync_lite_c_init_b", DIV_CAM03, 0, 3),
  4451. };
  4452. static const struct samsung_gate_clock cam0_gate_clks[] __initconst = {
  4453. /* ENABLE_ACLK_CAM00 */
  4454. GATE(CLK_ACLK_CSIS1, "aclk_csis1", "div_aclk_csis1", ENABLE_ACLK_CAM00,
  4455. 6, 0, 0),
  4456. GATE(CLK_ACLK_CSIS0, "aclk_csis0", "div_aclk_csis0", ENABLE_ACLK_CAM00,
  4457. 5, 0, 0),
  4458. GATE(CLK_ACLK_3AA1, "aclk_3aa1", "div_aclk_3aa1", ENABLE_ACLK_CAM00,
  4459. 4, 0, 0),
  4460. GATE(CLK_ACLK_3AA0, "aclk_3aa0", "div_aclk_3aa0", ENABLE_ACLK_CAM00,
  4461. 3, 0, 0),
  4462. GATE(CLK_ACLK_LITE_D, "aclk_lite_d", "div_aclk_lite_d",
  4463. ENABLE_ACLK_CAM00, 2, 0, 0),
  4464. GATE(CLK_ACLK_LITE_B, "aclk_lite_b", "div_aclk_lite_b",
  4465. ENABLE_ACLK_CAM00, 1, 0, 0),
  4466. GATE(CLK_ACLK_LITE_A, "aclk_lite_a", "div_aclk_lite_a",
  4467. ENABLE_ACLK_CAM00, 0, 0, 0),
  4468. /* ENABLE_ACLK_CAM01 */
  4469. GATE(CLK_ACLK_AHBSYNCDN, "aclk_ahbsyncdn", "div_aclk_cam0_200",
  4470. ENABLE_ACLK_CAM01, 31, CLK_IGNORE_UNUSED, 0),
  4471. GATE(CLK_ACLK_AXIUS_LITE_D, "aclk_axius_lite_d", "div_aclk_cam0_bus_400",
  4472. ENABLE_ACLK_CAM01, 30, CLK_IGNORE_UNUSED, 0),
  4473. GATE(CLK_ACLK_AXIUS_LITE_B, "aclk_axius_lite_b", "div_aclk_cam0_bus_400",
  4474. ENABLE_ACLK_CAM01, 29, CLK_IGNORE_UNUSED, 0),
  4475. GATE(CLK_ACLK_AXIUS_LITE_A, "aclk_axius_lite_a", "div_aclk_cam0_bus_400",
  4476. ENABLE_ACLK_CAM01, 28, CLK_IGNORE_UNUSED, 0),
  4477. GATE(CLK_ACLK_ASYNCAPBM_3AA1, "aclk_asyncapbm_3aa1", "div_pclk_3aa1",
  4478. ENABLE_ACLK_CAM01, 27, CLK_IGNORE_UNUSED, 0),
  4479. GATE(CLK_ACLK_ASYNCAPBS_3AA1, "aclk_asyncapbs_3aa1", "div_aclk_3aa1",
  4480. ENABLE_ACLK_CAM01, 26, CLK_IGNORE_UNUSED, 0),
  4481. GATE(CLK_ACLK_ASYNCAPBM_3AA0, "aclk_asyncapbm_3aa0", "div_pclk_3aa0",
  4482. ENABLE_ACLK_CAM01, 25, CLK_IGNORE_UNUSED, 0),
  4483. GATE(CLK_ACLK_ASYNCAPBS_3AA0, "aclk_asyncapbs_3aa0", "div_aclk_3aa0",
  4484. ENABLE_ACLK_CAM01, 24, CLK_IGNORE_UNUSED, 0),
  4485. GATE(CLK_ACLK_ASYNCAPBM_LITE_D, "aclk_asyncapbm_lite_d",
  4486. "div_pclk_lite_d", ENABLE_ACLK_CAM01,
  4487. 23, CLK_IGNORE_UNUSED, 0),
  4488. GATE(CLK_ACLK_ASYNCAPBS_LITE_D, "aclk_asyncapbs_lite_d",
  4489. "div_aclk_cam0_200", ENABLE_ACLK_CAM01,
  4490. 22, CLK_IGNORE_UNUSED, 0),
  4491. GATE(CLK_ACLK_ASYNCAPBM_LITE_B, "aclk_asyncapbm_lite_b",
  4492. "div_pclk_lite_b", ENABLE_ACLK_CAM01,
  4493. 21, CLK_IGNORE_UNUSED, 0),
  4494. GATE(CLK_ACLK_ASYNCAPBS_LITE_B, "aclk_asyncapbs_lite_b",
  4495. "div_aclk_cam0_200", ENABLE_ACLK_CAM01,
  4496. 20, CLK_IGNORE_UNUSED, 0),
  4497. GATE(CLK_ACLK_ASYNCAPBM_LITE_A, "aclk_asyncapbm_lite_a",
  4498. "div_pclk_lite_a", ENABLE_ACLK_CAM01,
  4499. 19, CLK_IGNORE_UNUSED, 0),
  4500. GATE(CLK_ACLK_ASYNCAPBS_LITE_A, "aclk_asyncapbs_lite_a",
  4501. "div_aclk_cam0_200", ENABLE_ACLK_CAM01,
  4502. 18, CLK_IGNORE_UNUSED, 0),
  4503. GATE(CLK_ACLK_ASYNCAXIM_ISP0P, "aclk_asyncaxim_isp0p",
  4504. "div_aclk_cam0_200", ENABLE_ACLK_CAM01,
  4505. 17, CLK_IGNORE_UNUSED, 0),
  4506. GATE(CLK_ACLK_ASYNCAXIM_3AA1, "aclk_asyncaxim_3aa1",
  4507. "div_aclk_cam0_bus_400", ENABLE_ACLK_CAM01,
  4508. 16, CLK_IGNORE_UNUSED, 0),
  4509. GATE(CLK_ACLK_ASYNCAXIS_3AA1, "aclk_asyncaxis_3aa1",
  4510. "div_aclk_3aa1", ENABLE_ACLK_CAM01,
  4511. 15, CLK_IGNORE_UNUSED, 0),
  4512. GATE(CLK_ACLK_ASYNCAXIM_3AA0, "aclk_asyncaxim_3aa0",
  4513. "div_aclk_cam0_bus_400", ENABLE_ACLK_CAM01,
  4514. 14, CLK_IGNORE_UNUSED, 0),
  4515. GATE(CLK_ACLK_ASYNCAXIS_3AA0, "aclk_asyncaxis_3aa0",
  4516. "div_aclk_3aa0", ENABLE_ACLK_CAM01,
  4517. 13, CLK_IGNORE_UNUSED, 0),
  4518. GATE(CLK_ACLK_ASYNCAXIM_LITE_D, "aclk_asyncaxim_lite_d",
  4519. "div_aclk_cam0_bus_400", ENABLE_ACLK_CAM01,
  4520. 12, CLK_IGNORE_UNUSED, 0),
  4521. GATE(CLK_ACLK_ASYNCAXIS_LITE_D, "aclk_asyncaxis_lite_d",
  4522. "div_aclk_lite_d", ENABLE_ACLK_CAM01,
  4523. 11, CLK_IGNORE_UNUSED, 0),
  4524. GATE(CLK_ACLK_ASYNCAXIM_LITE_B, "aclk_asyncaxim_lite_b",
  4525. "div_aclk_cam0_bus_400", ENABLE_ACLK_CAM01,
  4526. 10, CLK_IGNORE_UNUSED, 0),
  4527. GATE(CLK_ACLK_ASYNCAXIS_LITE_B, "aclk_asyncaxis_lite_b",
  4528. "div_aclk_lite_b", ENABLE_ACLK_CAM01,
  4529. 9, CLK_IGNORE_UNUSED, 0),
  4530. GATE(CLK_ACLK_ASYNCAXIM_LITE_A, "aclk_asyncaxim_lite_a",
  4531. "div_aclk_cam0_bus_400", ENABLE_ACLK_CAM01,
  4532. 8, CLK_IGNORE_UNUSED, 0),
  4533. GATE(CLK_ACLK_ASYNCAXIS_LITE_A, "aclk_asyncaxis_lite_a",
  4534. "div_aclk_lite_a", ENABLE_ACLK_CAM01,
  4535. 7, CLK_IGNORE_UNUSED, 0),
  4536. GATE(CLK_ACLK_AHB2APB_ISPSFRP, "aclk_ahb2apb_ispsfrp",
  4537. "div_pclk_cam0_50", ENABLE_ACLK_CAM01,
  4538. 6, CLK_IGNORE_UNUSED, 0),
  4539. GATE(CLK_ACLK_AXI2APB_ISP0P, "aclk_axi2apb_isp0p", "div_aclk_cam0_200",
  4540. ENABLE_ACLK_CAM01, 5, CLK_IGNORE_UNUSED, 0),
  4541. GATE(CLK_ACLK_AXI2AHB_ISP0P, "aclk_axi2ahb_isp0p", "div_aclk_cam0_200",
  4542. ENABLE_ACLK_CAM01, 4, CLK_IGNORE_UNUSED, 0),
  4543. GATE(CLK_ACLK_XIU_IS0X, "aclk_xiu_is0x", "div_aclk_cam0_200",
  4544. ENABLE_ACLK_CAM01, 3, CLK_IGNORE_UNUSED, 0),
  4545. GATE(CLK_ACLK_XIU_ISP0EX, "aclk_xiu_isp0ex", "div_aclk_cam0_bus_400",
  4546. ENABLE_ACLK_CAM01, 2, CLK_IGNORE_UNUSED, 0),
  4547. GATE(CLK_ACLK_CAM0NP_276, "aclk_cam0np_276", "div_aclk_cam0_200",
  4548. ENABLE_ACLK_CAM01, 1, CLK_IGNORE_UNUSED, 0),
  4549. GATE(CLK_ACLK_CAM0ND_400, "aclk_cam0nd_400", "div_aclk_cam0_bus_400",
  4550. ENABLE_ACLK_CAM01, 0, CLK_IGNORE_UNUSED, 0),
  4551. /* ENABLE_ACLK_CAM02 */
  4552. GATE(CLK_ACLK_SMMU_3AA1, "aclk_smmu_3aa1", "div_aclk_cam0_bus_400",
  4553. ENABLE_ACLK_CAM02, 9, CLK_IGNORE_UNUSED, 0),
  4554. GATE(CLK_ACLK_SMMU_3AA0, "aclk_smmu_3aa0", "div_aclk_cam0_bus_400",
  4555. ENABLE_ACLK_CAM02, 8, CLK_IGNORE_UNUSED, 0),
  4556. GATE(CLK_ACLK_SMMU_LITE_D, "aclk_smmu_lite_d", "div_aclk_cam0_bus_400",
  4557. ENABLE_ACLK_CAM02, 7, CLK_IGNORE_UNUSED, 0),
  4558. GATE(CLK_ACLK_SMMU_LITE_B, "aclk_smmu_lite_b", "div_aclk_cam0_bus_400",
  4559. ENABLE_ACLK_CAM02, 6, CLK_IGNORE_UNUSED, 0),
  4560. GATE(CLK_ACLK_SMMU_LITE_A, "aclk_smmu_lite_a", "div_aclk_cam0_bus_400",
  4561. ENABLE_ACLK_CAM02, 5, CLK_IGNORE_UNUSED, 0),
  4562. GATE(CLK_ACLK_BTS_3AA1, "aclk_bts_3aa1", "div_aclk_cam0_bus_400",
  4563. ENABLE_ACLK_CAM02, 4, CLK_IGNORE_UNUSED, 0),
  4564. GATE(CLK_ACLK_BTS_3AA0, "aclk_bts_3aa0", "div_aclk_cam0_bus_400",
  4565. ENABLE_ACLK_CAM02, 3, CLK_IGNORE_UNUSED, 0),
  4566. GATE(CLK_ACLK_BTS_LITE_D, "aclk_bts_lite_d", "div_aclk_cam0_bus_400",
  4567. ENABLE_ACLK_CAM02, 2, CLK_IGNORE_UNUSED, 0),
  4568. GATE(CLK_ACLK_BTS_LITE_B, "aclk_bts_lite_b", "div_aclk_cam0_bus_400",
  4569. ENABLE_ACLK_CAM02, 1, CLK_IGNORE_UNUSED, 0),
  4570. GATE(CLK_ACLK_BTS_LITE_A, "aclk_bts_lite_a", "div_aclk_cam0_bus_400",
  4571. ENABLE_ACLK_CAM02, 0, CLK_IGNORE_UNUSED, 0),
  4572. /* ENABLE_PCLK_CAM0 */
  4573. GATE(CLK_PCLK_SMMU_3AA1, "pclk_smmu_3aa1", "div_aclk_cam0_200",
  4574. ENABLE_PCLK_CAM0, 25, CLK_IGNORE_UNUSED, 0),
  4575. GATE(CLK_PCLK_SMMU_3AA0, "pclk_smmu_3aa0", "div_aclk_cam0_200",
  4576. ENABLE_PCLK_CAM0, 24, CLK_IGNORE_UNUSED, 0),
  4577. GATE(CLK_PCLK_SMMU_LITE_D, "pclk_smmu_lite_d", "div_aclk_cam0_200",
  4578. ENABLE_PCLK_CAM0, 23, CLK_IGNORE_UNUSED, 0),
  4579. GATE(CLK_PCLK_SMMU_LITE_B, "pclk_smmu_lite_b", "div_aclk_cam0_200",
  4580. ENABLE_PCLK_CAM0, 22, CLK_IGNORE_UNUSED, 0),
  4581. GATE(CLK_PCLK_SMMU_LITE_A, "pclk_smmu_lite_a", "div_aclk_cam0_200",
  4582. ENABLE_PCLK_CAM0, 21, CLK_IGNORE_UNUSED, 0),
  4583. GATE(CLK_PCLK_BTS_3AA1, "pclk_bts_3aa1", "div_pclk_cam0_50",
  4584. ENABLE_PCLK_CAM0, 20, CLK_IGNORE_UNUSED, 0),
  4585. GATE(CLK_PCLK_BTS_3AA0, "pclk_bts_3aa0", "div_pclk_cam0_50",
  4586. ENABLE_PCLK_CAM0, 19, CLK_IGNORE_UNUSED, 0),
  4587. GATE(CLK_PCLK_BTS_LITE_D, "pclk_bts_lite_d", "div_pclk_cam0_50",
  4588. ENABLE_PCLK_CAM0, 18, CLK_IGNORE_UNUSED, 0),
  4589. GATE(CLK_PCLK_BTS_LITE_B, "pclk_bts_lite_b", "div_pclk_cam0_50",
  4590. ENABLE_PCLK_CAM0, 17, CLK_IGNORE_UNUSED, 0),
  4591. GATE(CLK_PCLK_BTS_LITE_A, "pclk_bts_lite_a", "div_pclk_cam0_50",
  4592. ENABLE_PCLK_CAM0, 16, CLK_IGNORE_UNUSED, 0),
  4593. GATE(CLK_PCLK_ASYNCAXI_CAM1, "pclk_asyncaxi_cam1", "div_pclk_cam0_50",
  4594. ENABLE_PCLK_CAM0, 15, CLK_IGNORE_UNUSED, 0),
  4595. GATE(CLK_PCLK_ASYNCAXI_3AA1, "pclk_asyncaxi_3aa1", "div_pclk_cam0_50",
  4596. ENABLE_PCLK_CAM0, 14, CLK_IGNORE_UNUSED, 0),
  4597. GATE(CLK_PCLK_ASYNCAXI_3AA0, "pclk_asyncaxi_3aa0", "div_pclk_cam0_50",
  4598. ENABLE_PCLK_CAM0, 13, CLK_IGNORE_UNUSED, 0),
  4599. GATE(CLK_PCLK_ASYNCAXI_LITE_D, "pclk_asyncaxi_lite_d",
  4600. "div_pclk_cam0_50", ENABLE_PCLK_CAM0,
  4601. 12, CLK_IGNORE_UNUSED, 0),
  4602. GATE(CLK_PCLK_ASYNCAXI_LITE_B, "pclk_asyncaxi_lite_b",
  4603. "div_pclk_cam0_50", ENABLE_PCLK_CAM0,
  4604. 11, CLK_IGNORE_UNUSED, 0),
  4605. GATE(CLK_PCLK_ASYNCAXI_LITE_A, "pclk_asyncaxi_lite_a",
  4606. "div_pclk_cam0_50", ENABLE_PCLK_CAM0,
  4607. 10, CLK_IGNORE_UNUSED, 0),
  4608. GATE(CLK_PCLK_PMU_CAM0, "pclk_pmu_cam0", "div_pclk_cam0_50",
  4609. ENABLE_PCLK_CAM0, 9, CLK_IGNORE_UNUSED, 0),
  4610. GATE(CLK_PCLK_SYSREG_CAM0, "pclk_sysreg_cam0", "div_pclk_cam0_50",
  4611. ENABLE_PCLK_CAM0, 8, CLK_IGNORE_UNUSED, 0),
  4612. GATE(CLK_PCLK_CMU_CAM0_LOCAL, "pclk_cmu_cam0_local",
  4613. "div_aclk_cam0_200", ENABLE_PCLK_CAM0,
  4614. 7, CLK_IGNORE_UNUSED, 0),
  4615. GATE(CLK_PCLK_CSIS1, "pclk_csis1", "div_aclk_cam0_200",
  4616. ENABLE_PCLK_CAM0, 6, CLK_IGNORE_UNUSED, 0),
  4617. GATE(CLK_PCLK_CSIS0, "pclk_csis0", "div_aclk_cam0_200",
  4618. ENABLE_PCLK_CAM0, 5, CLK_IGNORE_UNUSED, 0),
  4619. GATE(CLK_PCLK_3AA1, "pclk_3aa1", "div_pclk_3aa1",
  4620. ENABLE_PCLK_CAM0, 4, CLK_IGNORE_UNUSED, 0),
  4621. GATE(CLK_PCLK_3AA0, "pclk_3aa0", "div_pclk_3aa0",
  4622. ENABLE_PCLK_CAM0, 3, CLK_IGNORE_UNUSED, 0),
  4623. GATE(CLK_PCLK_LITE_D, "pclk_lite_d", "div_pclk_lite_d",
  4624. ENABLE_PCLK_CAM0, 2, CLK_IGNORE_UNUSED, 0),
  4625. GATE(CLK_PCLK_LITE_B, "pclk_lite_b", "div_pclk_lite_b",
  4626. ENABLE_PCLK_CAM0, 1, CLK_IGNORE_UNUSED, 0),
  4627. GATE(CLK_PCLK_LITE_A, "pclk_lite_a", "div_pclk_lite_a",
  4628. ENABLE_PCLK_CAM0, 0, CLK_IGNORE_UNUSED, 0),
  4629. /* ENABLE_SCLK_CAM0 */
  4630. GATE(CLK_PHYCLK_RXBYTECLKHS0_S4, "phyclk_rxbyteclkhs0_s4",
  4631. "mout_phyclk_rxbyteclkhs0_s4_user",
  4632. ENABLE_SCLK_CAM0, 8, 0, 0),
  4633. GATE(CLK_PHYCLK_RXBYTECLKHS0_S2A, "phyclk_rxbyteclkhs0_s2a",
  4634. "mout_phyclk_rxbyteclkhs0_s2a_user",
  4635. ENABLE_SCLK_CAM0, 7, 0, 0),
  4636. GATE(CLK_SCLK_LITE_FREECNT, "sclk_lite_freecnt",
  4637. "mout_sclk_lite_freecnt_c", ENABLE_SCLK_CAM0, 6, 0, 0),
  4638. GATE(CLK_SCLK_PIXELASYNCM_3AA1, "sclk_pixelasycm_3aa1",
  4639. "div_aclk_3aa1", ENABLE_SCLK_CAM0, 5, 0, 0),
  4640. GATE(CLK_SCLK_PIXELASYNCM_3AA0, "sclk_pixelasycm_3aa0",
  4641. "div_aclk_3aa0", ENABLE_SCLK_CAM0, 4, 0, 0),
  4642. GATE(CLK_SCLK_PIXELASYNCS_3AA0, "sclk_pixelasycs_3aa0",
  4643. "div_aclk_3aa0", ENABLE_SCLK_CAM0, 3, 0, 0),
  4644. GATE(CLK_SCLK_PIXELASYNCM_LITE_C, "sclk_pixelasyncm_lite_c",
  4645. "div_sclk_pixelasync_lite_c",
  4646. ENABLE_SCLK_CAM0, 2, 0, 0),
  4647. GATE(CLK_SCLK_PIXELASYNCM_LITE_C_INIT, "sclk_pixelasyncm_lite_c_init",
  4648. "div_sclk_pixelasync_lite_c_init",
  4649. ENABLE_SCLK_CAM0, 1, 0, 0),
  4650. GATE(CLK_SCLK_PIXELASYNCS_LITE_C_INIT, "sclk_pixelasyncs_lite_c_init",
  4651. "div_sclk_pixelasync_lite_c",
  4652. ENABLE_SCLK_CAM0, 0, 0, 0),
  4653. };
  4654. static const struct samsung_cmu_info cam0_cmu_info __initconst = {
  4655. .mux_clks = cam0_mux_clks,
  4656. .nr_mux_clks = ARRAY_SIZE(cam0_mux_clks),
  4657. .div_clks = cam0_div_clks,
  4658. .nr_div_clks = ARRAY_SIZE(cam0_div_clks),
  4659. .gate_clks = cam0_gate_clks,
  4660. .nr_gate_clks = ARRAY_SIZE(cam0_gate_clks),
  4661. .fixed_clks = cam0_fixed_clks,
  4662. .nr_fixed_clks = ARRAY_SIZE(cam0_fixed_clks),
  4663. .nr_clk_ids = CAM0_NR_CLK,
  4664. .clk_regs = cam0_clk_regs,
  4665. .nr_clk_regs = ARRAY_SIZE(cam0_clk_regs),
  4666. };
  4667. static void __init exynos5433_cmu_cam0_init(struct device_node *np)
  4668. {
  4669. samsung_cmu_register_one(np, &cam0_cmu_info);
  4670. }
  4671. CLK_OF_DECLARE(exynos5433_cmu_cam0, "samsung,exynos5433-cmu-cam0",
  4672. exynos5433_cmu_cam0_init);
  4673. /*
  4674. * Register offset definitions for CMU_CAM1
  4675. */
  4676. #define MUX_SEL_CAM10 0x0200
  4677. #define MUX_SEL_CAM11 0x0204
  4678. #define MUX_SEL_CAM12 0x0208
  4679. #define MUX_ENABLE_CAM10 0x0300
  4680. #define MUX_ENABLE_CAM11 0x0304
  4681. #define MUX_ENABLE_CAM12 0x0308
  4682. #define MUX_STAT_CAM10 0x0400
  4683. #define MUX_STAT_CAM11 0x0404
  4684. #define MUX_STAT_CAM12 0x0408
  4685. #define MUX_IGNORE_CAM11 0x0504
  4686. #define DIV_CAM10 0x0600
  4687. #define DIV_CAM11 0x0604
  4688. #define DIV_STAT_CAM10 0x0700
  4689. #define DIV_STAT_CAM11 0x0704
  4690. #define ENABLE_ACLK_CAM10 0X0800
  4691. #define ENABLE_ACLK_CAM11 0X0804
  4692. #define ENABLE_ACLK_CAM12 0X0808
  4693. #define ENABLE_PCLK_CAM1 0X0900
  4694. #define ENABLE_SCLK_CAM1 0X0a00
  4695. #define ENABLE_IP_CAM10 0X0b00
  4696. #define ENABLE_IP_CAM11 0X0b04
  4697. #define ENABLE_IP_CAM12 0X0b08
  4698. static const unsigned long cam1_clk_regs[] __initconst = {
  4699. MUX_SEL_CAM10,
  4700. MUX_SEL_CAM11,
  4701. MUX_SEL_CAM12,
  4702. MUX_ENABLE_CAM10,
  4703. MUX_ENABLE_CAM11,
  4704. MUX_ENABLE_CAM12,
  4705. MUX_IGNORE_CAM11,
  4706. DIV_CAM10,
  4707. DIV_CAM11,
  4708. ENABLE_ACLK_CAM10,
  4709. ENABLE_ACLK_CAM11,
  4710. ENABLE_ACLK_CAM12,
  4711. ENABLE_PCLK_CAM1,
  4712. ENABLE_SCLK_CAM1,
  4713. ENABLE_IP_CAM10,
  4714. ENABLE_IP_CAM11,
  4715. ENABLE_IP_CAM12,
  4716. };
  4717. PNAME(mout_sclk_isp_uart_user_p) = { "oscclk", "sclk_isp_uart_cam1", };
  4718. PNAME(mout_sclk_isp_spi1_user_p) = { "oscclk", "sclk_isp_spi1_cam1", };
  4719. PNAME(mout_sclk_isp_spi0_user_p) = { "oscclk", "sclk_isp_spi0_cam1", };
  4720. PNAME(mout_aclk_cam1_333_user_p) = { "oscclk", "aclk_cam1_333", };
  4721. PNAME(mout_aclk_cam1_400_user_p) = { "oscclk", "aclk_cam1_400", };
  4722. PNAME(mout_aclk_cam1_552_user_p) = { "oscclk", "aclk_cam1_552", };
  4723. PNAME(mout_phyclk_rxbyteclkhs0_s2b_user_p) = { "oscclk",
  4724. "phyclk_rxbyteclkhs0_s2b_phy", };
  4725. PNAME(mout_aclk_csis2_b_p) = { "mout_aclk_csis2_a",
  4726. "mout_aclk_cam1_333_user", };
  4727. PNAME(mout_aclk_csis2_a_p) = { "mout_aclk_cam1_552_user",
  4728. "mout_aclk_cam1_400_user", };
  4729. PNAME(mout_aclk_fd_b_p) = { "mout_aclk_fd_a",
  4730. "mout_aclk_cam1_333_user", };
  4731. PNAME(mout_aclk_fd_a_p) = { "mout_aclk_cam1_552_user",
  4732. "mout_aclk_cam1_400_user", };
  4733. PNAME(mout_aclk_lite_c_b_p) = { "mout_aclk_lite_c_a",
  4734. "mout_aclk_cam1_333_user", };
  4735. PNAME(mout_aclk_lite_c_a_p) = { "mout_aclk_cam1_552_user",
  4736. "mout_aclk_cam1_400_user", };
  4737. static const struct samsung_fixed_rate_clock cam1_fixed_clks[] __initconst = {
  4738. FRATE(CLK_PHYCLK_RXBYTEECLKHS0_S2B, "phyclk_rxbyteclkhs0_s2b_phy", NULL,
  4739. 0, 100000000),
  4740. };
  4741. static const struct samsung_mux_clock cam1_mux_clks[] __initconst = {
  4742. /* MUX_SEL_CAM10 */
  4743. MUX(CLK_MOUT_SCLK_ISP_UART_USER, "mout_sclk_isp_uart_user",
  4744. mout_sclk_isp_uart_user_p, MUX_SEL_CAM10, 20, 1),
  4745. MUX(CLK_MOUT_SCLK_ISP_SPI1_USER, "mout_sclk_isp_spi1_user",
  4746. mout_sclk_isp_spi1_user_p, MUX_SEL_CAM10, 16, 1),
  4747. MUX(CLK_MOUT_SCLK_ISP_SPI0_USER, "mout_sclk_isp_spi0_user",
  4748. mout_sclk_isp_spi0_user_p, MUX_SEL_CAM10, 12, 1),
  4749. MUX(CLK_MOUT_ACLK_CAM1_333_USER, "mout_aclk_cam1_333_user",
  4750. mout_aclk_cam1_333_user_p, MUX_SEL_CAM10, 8, 1),
  4751. MUX(CLK_MOUT_ACLK_CAM1_400_USER, "mout_aclk_cam1_400_user",
  4752. mout_aclk_cam1_400_user_p, MUX_SEL_CAM10, 4, 1),
  4753. MUX(CLK_MOUT_ACLK_CAM1_552_USER, "mout_aclk_cam1_552_user",
  4754. mout_aclk_cam1_552_user_p, MUX_SEL_CAM10, 0, 1),
  4755. /* MUX_SEL_CAM11 */
  4756. MUX(CLK_MOUT_PHYCLK_RXBYTECLKHS0_S2B_USER,
  4757. "mout_phyclk_rxbyteclkhs0_s2b_user",
  4758. mout_phyclk_rxbyteclkhs0_s2b_user_p,
  4759. MUX_SEL_CAM11, 0, 1),
  4760. /* MUX_SEL_CAM12 */
  4761. MUX(CLK_MOUT_ACLK_CSIS2_B, "mout_aclk_csis2_b", mout_aclk_csis2_b_p,
  4762. MUX_SEL_CAM12, 20, 1),
  4763. MUX(CLK_MOUT_ACLK_CSIS2_A, "mout_aclk_csis2_a", mout_aclk_csis2_a_p,
  4764. MUX_SEL_CAM12, 16, 1),
  4765. MUX(CLK_MOUT_ACLK_FD_B, "mout_aclk_fd_b", mout_aclk_fd_b_p,
  4766. MUX_SEL_CAM12, 12, 1),
  4767. MUX(CLK_MOUT_ACLK_FD_A, "mout_aclk_fd_a", mout_aclk_fd_a_p,
  4768. MUX_SEL_CAM12, 8, 1),
  4769. MUX(CLK_MOUT_ACLK_LITE_C_B, "mout_aclk_lite_c_b", mout_aclk_lite_c_b_p,
  4770. MUX_SEL_CAM12, 4, 1),
  4771. MUX(CLK_MOUT_ACLK_LITE_C_A, "mout_aclk_lite_c_a", mout_aclk_lite_c_a_p,
  4772. MUX_SEL_CAM12, 0, 1),
  4773. };
  4774. static const struct samsung_div_clock cam1_div_clks[] __initconst = {
  4775. /* DIV_CAM10 */
  4776. DIV(CLK_DIV_SCLK_ISP_MPWM, "div_sclk_isp_mpwm",
  4777. "div_pclk_cam1_83", DIV_CAM10, 16, 2),
  4778. DIV(CLK_DIV_PCLK_CAM1_83, "div_pclk_cam1_83",
  4779. "mout_aclk_cam1_333_user", DIV_CAM10, 12, 2),
  4780. DIV(CLK_DIV_PCLK_CAM1_166, "div_pclk_cam1_166",
  4781. "mout_aclk_cam1_333_user", DIV_CAM10, 8, 2),
  4782. DIV(CLK_DIV_PCLK_DBG_CAM1, "div_pclk_dbg_cam1",
  4783. "mout_aclk_cam1_552_user", DIV_CAM10, 4, 3),
  4784. DIV(CLK_DIV_ATCLK_CAM1, "div_atclk_cam1", "mout_aclk_cam1_552_user",
  4785. DIV_CAM10, 0, 3),
  4786. /* DIV_CAM11 */
  4787. DIV(CLK_DIV_ACLK_CSIS2, "div_aclk_csis2", "mout_aclk_csis2_b",
  4788. DIV_CAM11, 16, 3),
  4789. DIV(CLK_DIV_PCLK_FD, "div_pclk_fd", "div_aclk_fd", DIV_CAM11, 12, 2),
  4790. DIV(CLK_DIV_ACLK_FD, "div_aclk_fd", "mout_aclk_fd_b", DIV_CAM11, 8, 3),
  4791. DIV(CLK_DIV_PCLK_LITE_C, "div_pclk_lite_c", "div_aclk_lite_c",
  4792. DIV_CAM11, 4, 2),
  4793. DIV(CLK_DIV_ACLK_LITE_C, "div_aclk_lite_c", "mout_aclk_lite_c_b",
  4794. DIV_CAM11, 0, 3),
  4795. };
  4796. static const struct samsung_gate_clock cam1_gate_clks[] __initconst = {
  4797. /* ENABLE_ACLK_CAM10 */
  4798. GATE(CLK_ACLK_ISP_GIC, "aclk_isp_gic", "mout_aclk_cam1_333_user",
  4799. ENABLE_ACLK_CAM10, 4, 0, 0),
  4800. GATE(CLK_ACLK_FD, "aclk_fd", "div_aclk_fd",
  4801. ENABLE_ACLK_CAM10, 3, 0, 0),
  4802. GATE(CLK_ACLK_LITE_C, "aclk_lite_c", "div_aclk_lite_c",
  4803. ENABLE_ACLK_CAM10, 1, 0, 0),
  4804. GATE(CLK_ACLK_CSIS2, "aclk_csis2", "div_aclk_csis2",
  4805. ENABLE_ACLK_CAM10, 0, 0, 0),
  4806. /* ENABLE_ACLK_CAM11 */
  4807. GATE(CLK_ACLK_ASYNCAPBM_FD, "aclk_asyncapbm_fd", "div_pclk_fd",
  4808. ENABLE_ACLK_CAM11, 29, CLK_IGNORE_UNUSED, 0),
  4809. GATE(CLK_ACLK_ASYNCAPBS_FD, "aclk_asyncapbs_fd", "div_pclk_cam1_166",
  4810. ENABLE_ACLK_CAM11, 28, CLK_IGNORE_UNUSED, 0),
  4811. GATE(CLK_ACLK_ASYNCAPBM_LITE_C, "aclk_asyncapbm_lite_c",
  4812. "div_pclk_lite_c", ENABLE_ACLK_CAM11,
  4813. 27, CLK_IGNORE_UNUSED, 0),
  4814. GATE(CLK_ACLK_ASYNCAPBS_LITE_C, "aclk_asyncapbs_lite_c",
  4815. "div_pclk_cam1_166", ENABLE_ACLK_CAM11,
  4816. 26, CLK_IGNORE_UNUSED, 0),
  4817. GATE(CLK_ACLK_ASYNCAHBS_SFRISP2H2, "aclk_asyncahbs_sfrisp2h2",
  4818. "div_pclk_cam1_83", ENABLE_ACLK_CAM11,
  4819. 25, CLK_IGNORE_UNUSED, 0),
  4820. GATE(CLK_ACLK_ASYNCAHBS_SFRISP2H1, "aclk_asyncahbs_sfrisp2h1",
  4821. "div_pclk_cam1_83", ENABLE_ACLK_CAM11,
  4822. 24, CLK_IGNORE_UNUSED, 0),
  4823. GATE(CLK_ACLK_ASYNCAXIM_CA5, "aclk_asyncaxim_ca5",
  4824. "mout_aclk_cam1_333_user", ENABLE_ACLK_CAM11,
  4825. 23, CLK_IGNORE_UNUSED, 0),
  4826. GATE(CLK_ACLK_ASYNCAXIS_CA5, "aclk_asyncaxis_ca5",
  4827. "mout_aclk_cam1_552_user", ENABLE_ACLK_CAM11,
  4828. 22, CLK_IGNORE_UNUSED, 0),
  4829. GATE(CLK_ACLK_ASYNCAXIS_ISPX2, "aclk_asyncaxis_ispx2",
  4830. "mout_aclk_cam1_333_user", ENABLE_ACLK_CAM11,
  4831. 21, CLK_IGNORE_UNUSED, 0),
  4832. GATE(CLK_ACLK_ASYNCAXIS_ISPX1, "aclk_asyncaxis_ispx1",
  4833. "mout_aclk_cam1_333_user", ENABLE_ACLK_CAM11,
  4834. 20, CLK_IGNORE_UNUSED, 0),
  4835. GATE(CLK_ACLK_ASYNCAXIS_ISPX0, "aclk_asyncaxis_ispx0",
  4836. "mout_aclk_cam1_333_user", ENABLE_ACLK_CAM11,
  4837. 19, CLK_IGNORE_UNUSED, 0),
  4838. GATE(CLK_ACLK_ASYNCAXIM_ISPEX, "aclk_asyncaxim_ispex",
  4839. "mout_aclk_cam1_400_user", ENABLE_ACLK_CAM11,
  4840. 18, CLK_IGNORE_UNUSED, 0),
  4841. GATE(CLK_ACLK_ASYNCAXIM_ISP3P, "aclk_asyncaxim_isp3p",
  4842. "mout_aclk_cam1_400_user", ENABLE_ACLK_CAM11,
  4843. 17, CLK_IGNORE_UNUSED, 0),
  4844. GATE(CLK_ACLK_ASYNCAXIS_ISP3P, "aclk_asyncaxis_isp3p",
  4845. "mout_aclk_cam1_333_user", ENABLE_ACLK_CAM11,
  4846. 16, CLK_IGNORE_UNUSED, 0),
  4847. GATE(CLK_ACLK_ASYNCAXIM_FD, "aclk_asyncaxim_fd",
  4848. "mout_aclk_cam1_400_user", ENABLE_ACLK_CAM11,
  4849. 15, CLK_IGNORE_UNUSED, 0),
  4850. GATE(CLK_ACLK_ASYNCAXIS_FD, "aclk_asyncaxis_fd", "div_aclk_fd",
  4851. ENABLE_ACLK_CAM11, 14, CLK_IGNORE_UNUSED, 0),
  4852. GATE(CLK_ACLK_ASYNCAXIM_LITE_C, "aclk_asyncaxim_lite_c",
  4853. "mout_aclk_cam1_400_user", ENABLE_ACLK_CAM11,
  4854. 13, CLK_IGNORE_UNUSED, 0),
  4855. GATE(CLK_ACLK_ASYNCAXIS_LITE_C, "aclk_asyncaxis_lite_c",
  4856. "div_aclk_lite_c", ENABLE_ACLK_CAM11,
  4857. 12, CLK_IGNORE_UNUSED, 0),
  4858. GATE(CLK_ACLK_AHB2APB_ISP5P, "aclk_ahb2apb_isp5p", "div_pclk_cam1_83",
  4859. ENABLE_ACLK_CAM11, 11, CLK_IGNORE_UNUSED, 0),
  4860. GATE(CLK_ACLK_AHB2APB_ISP3P, "aclk_ahb2apb_isp3p", "div_pclk_cam1_83",
  4861. ENABLE_ACLK_CAM11, 10, CLK_IGNORE_UNUSED, 0),
  4862. GATE(CLK_ACLK_AXI2APB_ISP3P, "aclk_axi2apb_isp3p",
  4863. "mout_aclk_cam1_333_user", ENABLE_ACLK_CAM11,
  4864. 9, CLK_IGNORE_UNUSED, 0),
  4865. GATE(CLK_ACLK_AHB_SFRISP2H, "aclk_ahb_sfrisp2h", "div_pclk_cam1_83",
  4866. ENABLE_ACLK_CAM11, 8, CLK_IGNORE_UNUSED, 0),
  4867. GATE(CLK_ACLK_AXI_ISP_HX_R, "aclk_axi_isp_hx_r", "div_pclk_cam1_166",
  4868. ENABLE_ACLK_CAM11, 7, CLK_IGNORE_UNUSED, 0),
  4869. GATE(CLK_ACLK_AXI_ISP_CX_R, "aclk_axi_isp_cx_r", "div_pclk_cam1_166",
  4870. ENABLE_ACLK_CAM11, 6, CLK_IGNORE_UNUSED, 0),
  4871. GATE(CLK_ACLK_AXI_ISP_HX, "aclk_axi_isp_hx", "mout_aclk_cam1_333_user",
  4872. ENABLE_ACLK_CAM11, 5, CLK_IGNORE_UNUSED, 0),
  4873. GATE(CLK_ACLK_AXI_ISP_CX, "aclk_axi_isp_cx", "mout_aclk_cam1_333_user",
  4874. ENABLE_ACLK_CAM11, 4, CLK_IGNORE_UNUSED, 0),
  4875. GATE(CLK_ACLK_XIU_ISPX, "aclk_xiu_ispx", "mout_aclk_cam1_333_user",
  4876. ENABLE_ACLK_CAM11, 3, CLK_IGNORE_UNUSED, 0),
  4877. GATE(CLK_ACLK_XIU_ISPEX, "aclk_xiu_ispex", "mout_aclk_cam1_400_user",
  4878. ENABLE_ACLK_CAM11, 2, CLK_IGNORE_UNUSED, 0),
  4879. GATE(CLK_ACLK_CAM1NP_333, "aclk_cam1np_333", "mout_aclk_cam1_333_user",
  4880. ENABLE_ACLK_CAM11, 1, CLK_IGNORE_UNUSED, 0),
  4881. GATE(CLK_ACLK_CAM1ND_400, "aclk_cam1nd_400", "mout_aclk_cam1_400_user",
  4882. ENABLE_ACLK_CAM11, 0, CLK_IGNORE_UNUSED, 0),
  4883. /* ENABLE_ACLK_CAM12 */
  4884. GATE(CLK_ACLK_SMMU_ISPCPU, "aclk_smmu_ispcpu",
  4885. "mout_aclk_cam1_400_user", ENABLE_ACLK_CAM12,
  4886. 10, CLK_IGNORE_UNUSED, 0),
  4887. GATE(CLK_ACLK_SMMU_FD, "aclk_smmu_fd", "mout_aclk_cam1_400_user",
  4888. ENABLE_ACLK_CAM12, 9, CLK_IGNORE_UNUSED, 0),
  4889. GATE(CLK_ACLK_SMMU_LITE_C, "aclk_smmu_lite_c",
  4890. "mout_aclk_cam1_400_user", ENABLE_ACLK_CAM12,
  4891. 8, CLK_IGNORE_UNUSED, 0),
  4892. GATE(CLK_ACLK_BTS_ISP3P, "aclk_bts_isp3p", "mout_aclk_cam1_400_user",
  4893. ENABLE_ACLK_CAM12, 7, CLK_IGNORE_UNUSED, 0),
  4894. GATE(CLK_ACLK_BTS_FD, "aclk_bts_fd", "mout_aclk_cam1_400_user",
  4895. ENABLE_ACLK_CAM12, 6, CLK_IGNORE_UNUSED, 0),
  4896. GATE(CLK_ACLK_BTS_LITE_C, "aclk_bts_lite_c", "mout_aclk_cam1_400_user",
  4897. ENABLE_ACLK_CAM12, 5, CLK_IGNORE_UNUSED, 0),
  4898. GATE(CLK_ACLK_AHBDN_SFRISP2H, "aclk_ahbdn_sfrisp2h",
  4899. "mout_aclk_cam1_333_user", ENABLE_ACLK_CAM12,
  4900. 4, CLK_IGNORE_UNUSED, 0),
  4901. GATE(CLK_ACLK_AHBDN_ISP5P, "aclk_aclk-shbdn_isp5p",
  4902. "mout_aclk_cam1_333_user", ENABLE_ACLK_CAM12,
  4903. 3, CLK_IGNORE_UNUSED, 0),
  4904. GATE(CLK_ACLK_AXIUS_ISP3P, "aclk_axius_isp3p",
  4905. "mout_aclk_cam1_400_user", ENABLE_ACLK_CAM12,
  4906. 2, CLK_IGNORE_UNUSED, 0),
  4907. GATE(CLK_ACLK_AXIUS_FD, "aclk_axius_fd", "mout_aclk_cam1_400_user",
  4908. ENABLE_ACLK_CAM12, 1, CLK_IGNORE_UNUSED, 0),
  4909. GATE(CLK_ACLK_AXIUS_LITE_C, "aclk_axius_lite_c",
  4910. "mout_aclk_cam1_400_user", ENABLE_ACLK_CAM12,
  4911. 0, CLK_IGNORE_UNUSED, 0),
  4912. /* ENABLE_PCLK_CAM1 */
  4913. GATE(CLK_PCLK_SMMU_ISPCPU, "pclk_smmu_ispcpu", "div_pclk_cam1_166",
  4914. ENABLE_PCLK_CAM1, 27, CLK_IGNORE_UNUSED, 0),
  4915. GATE(CLK_PCLK_SMMU_FD, "pclk_smmu_fd", "div_pclk_cam1_166",
  4916. ENABLE_PCLK_CAM1, 26, CLK_IGNORE_UNUSED, 0),
  4917. GATE(CLK_PCLK_SMMU_LITE_C, "pclk_smmu_lite_c", "div_pclk_cam1_166",
  4918. ENABLE_PCLK_CAM1, 25, CLK_IGNORE_UNUSED, 0),
  4919. GATE(CLK_PCLK_BTS_ISP3P, "pclk_bts_isp3p", "div_pclk_cam1_83",
  4920. ENABLE_PCLK_CAM1, 24, CLK_IGNORE_UNUSED, 0),
  4921. GATE(CLK_PCLK_BTS_FD, "pclk_bts_fd", "div_pclk_cam1_83",
  4922. ENABLE_PCLK_CAM1, 23, CLK_IGNORE_UNUSED, 0),
  4923. GATE(CLK_PCLK_BTS_LITE_C, "pclk_bts_lite_c", "div_pclk_cam1_83",
  4924. ENABLE_PCLK_CAM1, 22, CLK_IGNORE_UNUSED, 0),
  4925. GATE(CLK_PCLK_ASYNCAXIM_CA5, "pclk_asyncaxim_ca5", "div_pclk_cam1_166",
  4926. ENABLE_PCLK_CAM1, 21, CLK_IGNORE_UNUSED, 0),
  4927. GATE(CLK_PCLK_ASYNCAXIM_ISPEX, "pclk_asyncaxim_ispex",
  4928. "div_pclk_cam1_83", ENABLE_PCLK_CAM1,
  4929. 20, CLK_IGNORE_UNUSED, 0),
  4930. GATE(CLK_PCLK_ASYNCAXIM_ISP3P, "pclk_asyncaxim_isp3p",
  4931. "div_pclk_cam1_83", ENABLE_PCLK_CAM1,
  4932. 19, CLK_IGNORE_UNUSED, 0),
  4933. GATE(CLK_PCLK_ASYNCAXIM_FD, "pclk_asyncaxim_fd", "div_pclk_cam1_83",
  4934. ENABLE_PCLK_CAM1, 18, CLK_IGNORE_UNUSED, 0),
  4935. GATE(CLK_PCLK_ASYNCAXIM_LITE_C, "pclk_asyncaxim_lite_c",
  4936. "div_pclk_cam1_83", ENABLE_PCLK_CAM1,
  4937. 17, CLK_IGNORE_UNUSED, 0),
  4938. GATE(CLK_PCLK_PMU_CAM1, "pclk_pmu_cam1", "div_pclk_cam1_83",
  4939. ENABLE_PCLK_CAM1, 16, CLK_IGNORE_UNUSED, 0),
  4940. GATE(CLK_PCLK_SYSREG_CAM1, "pclk_sysreg_cam1", "div_pclk_cam1_83",
  4941. ENABLE_PCLK_CAM1, 15, CLK_IGNORE_UNUSED, 0),
  4942. GATE(CLK_PCLK_CMU_CAM1_LOCAL, "pclk_cmu_cam1_local",
  4943. "div_pclk_cam1_166", ENABLE_PCLK_CAM1,
  4944. 14, CLK_IGNORE_UNUSED, 0),
  4945. GATE(CLK_PCLK_ISP_MCTADC, "pclk_isp_mctadc", "div_pclk_cam1_83",
  4946. ENABLE_PCLK_CAM1, 13, CLK_IGNORE_UNUSED, 0),
  4947. GATE(CLK_PCLK_ISP_WDT, "pclk_isp_wdt", "div_pclk_cam1_83",
  4948. ENABLE_PCLK_CAM1, 12, CLK_IGNORE_UNUSED, 0),
  4949. GATE(CLK_PCLK_ISP_PWM, "pclk_isp_pwm", "div_pclk_cam1_83",
  4950. ENABLE_PCLK_CAM1, 11, CLK_IGNORE_UNUSED, 0),
  4951. GATE(CLK_PCLK_ISP_UART, "pclk_isp_uart", "div_pclk_cam1_83",
  4952. ENABLE_PCLK_CAM1, 10, CLK_IGNORE_UNUSED, 0),
  4953. GATE(CLK_PCLK_ISP_MCUCTL, "pclk_isp_mcuctl", "div_pclk_cam1_83",
  4954. ENABLE_PCLK_CAM1, 9, CLK_IGNORE_UNUSED, 0),
  4955. GATE(CLK_PCLK_ISP_SPI1, "pclk_isp_spi1", "div_pclk_cam1_83",
  4956. ENABLE_PCLK_CAM1, 8, CLK_IGNORE_UNUSED, 0),
  4957. GATE(CLK_PCLK_ISP_SPI0, "pclk_isp_spi0", "div_pclk_cam1_83",
  4958. ENABLE_PCLK_CAM1, 7, CLK_IGNORE_UNUSED, 0),
  4959. GATE(CLK_PCLK_ISP_I2C2, "pclk_isp_i2c2", "div_pclk_cam1_83",
  4960. ENABLE_PCLK_CAM1, 6, CLK_IGNORE_UNUSED, 0),
  4961. GATE(CLK_PCLK_ISP_I2C1, "pclk_isp_i2c1", "div_pclk_cam1_83",
  4962. ENABLE_PCLK_CAM1, 5, CLK_IGNORE_UNUSED, 0),
  4963. GATE(CLK_PCLK_ISP_I2C0, "pclk_isp_i2c0", "div_pclk_cam1_83",
  4964. ENABLE_PCLK_CAM1, 4, CLK_IGNORE_UNUSED, 0),
  4965. GATE(CLK_PCLK_ISP_MPWM, "pclk_isp_mpwm", "div_pclk_cam1_83",
  4966. ENABLE_PCLK_CAM1, 3, CLK_IGNORE_UNUSED, 0),
  4967. GATE(CLK_PCLK_FD, "pclk_fd", "div_pclk_fd",
  4968. ENABLE_PCLK_CAM1, 3, CLK_IGNORE_UNUSED, 0),
  4969. GATE(CLK_PCLK_LITE_C, "pclk_lite_c", "div_pclk_lite_c",
  4970. ENABLE_PCLK_CAM1, 1, CLK_IGNORE_UNUSED, 0),
  4971. GATE(CLK_PCLK_CSIS2, "pclk_csis2", "div_pclk_cam1_166",
  4972. ENABLE_PCLK_CAM1, 0, CLK_IGNORE_UNUSED, 0),
  4973. /* ENABLE_SCLK_CAM1 */
  4974. GATE(CLK_SCLK_ISP_I2C2, "sclk_isp_i2c2", "oscclk", ENABLE_SCLK_CAM1,
  4975. 15, 0, 0),
  4976. GATE(CLK_SCLK_ISP_I2C1, "sclk_isp_i2c1", "oscclk", ENABLE_SCLK_CAM1,
  4977. 14, 0, 0),
  4978. GATE(CLK_SCLK_ISP_I2C0, "sclk_isp_i2c0", "oscclk", ENABLE_SCLK_CAM1,
  4979. 13, 0, 0),
  4980. GATE(CLK_SCLK_ISP_PWM, "sclk_isp_pwm", "oscclk", ENABLE_SCLK_CAM1,
  4981. 12, 0, 0),
  4982. GATE(CLK_PHYCLK_RXBYTECLKHS0_S2B, "phyclk_rxbyteclkhs0_s2b",
  4983. "mout_phyclk_rxbyteclkhs0_s2b_user",
  4984. ENABLE_SCLK_CAM1, 11, 0, 0),
  4985. GATE(CLK_SCLK_LITE_C_FREECNT, "sclk_lite_c_freecnt", "div_pclk_lite_c",
  4986. ENABLE_SCLK_CAM1, 10, 0, 0),
  4987. GATE(CLK_SCLK_PIXELASYNCM_FD, "sclk_pixelasyncm_fd", "div_aclk_fd",
  4988. ENABLE_SCLK_CAM1, 9, 0, 0),
  4989. GATE(CLK_SCLK_ISP_MCTADC, "sclk_isp_mctadc", "sclk_isp_mctadc_cam1",
  4990. ENABLE_SCLK_CAM1, 7, 0, 0),
  4991. GATE(CLK_SCLK_ISP_UART, "sclk_isp_uart", "mout_sclk_isp_uart_user",
  4992. ENABLE_SCLK_CAM1, 6, 0, 0),
  4993. GATE(CLK_SCLK_ISP_SPI1, "sclk_isp_spi1", "mout_sclk_isp_spi1_user",
  4994. ENABLE_SCLK_CAM1, 5, 0, 0),
  4995. GATE(CLK_SCLK_ISP_SPI0, "sclk_isp_spi0", "mout_sclk_isp_spi0_user",
  4996. ENABLE_SCLK_CAM1, 4, 0, 0),
  4997. GATE(CLK_SCLK_ISP_MPWM, "sclk_isp_mpwm", "div_sclk_isp_mpwm",
  4998. ENABLE_SCLK_CAM1, 3, 0, 0),
  4999. GATE(CLK_PCLK_DBG_ISP, "sclk_dbg_isp", "div_pclk_dbg_cam1",
  5000. ENABLE_SCLK_CAM1, 2, 0, 0),
  5001. GATE(CLK_ATCLK_ISP, "atclk_isp", "div_atclk_cam1",
  5002. ENABLE_SCLK_CAM1, 1, 0, 0),
  5003. GATE(CLK_SCLK_ISP_CA5, "sclk_isp_ca5", "mout_aclk_cam1_552_user",
  5004. ENABLE_SCLK_CAM1, 0, 0, 0),
  5005. };
  5006. static const struct samsung_cmu_info cam1_cmu_info __initconst = {
  5007. .mux_clks = cam1_mux_clks,
  5008. .nr_mux_clks = ARRAY_SIZE(cam1_mux_clks),
  5009. .div_clks = cam1_div_clks,
  5010. .nr_div_clks = ARRAY_SIZE(cam1_div_clks),
  5011. .gate_clks = cam1_gate_clks,
  5012. .nr_gate_clks = ARRAY_SIZE(cam1_gate_clks),
  5013. .fixed_clks = cam1_fixed_clks,
  5014. .nr_fixed_clks = ARRAY_SIZE(cam1_fixed_clks),
  5015. .nr_clk_ids = CAM1_NR_CLK,
  5016. .clk_regs = cam1_clk_regs,
  5017. .nr_clk_regs = ARRAY_SIZE(cam1_clk_regs),
  5018. };
  5019. static void __init exynos5433_cmu_cam1_init(struct device_node *np)
  5020. {
  5021. samsung_cmu_register_one(np, &cam1_cmu_info);
  5022. }
  5023. CLK_OF_DECLARE(exynos5433_cmu_cam1, "samsung,exynos5433-cmu-cam1",
  5024. exynos5433_cmu_cam1_init);