clk-exynos5433.c 209 KB

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