mtk_dcm_autogen.c 53 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964
  1. /* Copyright Statement:
  2. *
  3. * This software/firmware and related documentation ("MediaTek Software") are
  4. * protected under relevant copyright laws. The information contained herein
  5. * is confidential and proprietary to MediaTek Inc. and/or its licensors.
  6. * Without the prior written permission of MediaTek inc. and/or its licensors,
  7. * any reproduction, modification, use or disclosure of MediaTek Software,
  8. * and information contained herein, in whole or in part, shall be strictly prohibited.
  9. */
  10. /* MediaTek Inc. (C) 2018. All rights reserved.
  11. *
  12. * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  13. * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  14. * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
  15. * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  16. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  17. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  18. * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  19. * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  20. * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
  21. * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
  22. * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
  23. * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
  24. * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
  25. * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
  26. * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  27. * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  28. * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
  29. * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  30. */
  31. #include <mtk_dcm.h>
  32. #include <debug.h>
  33. #include <stdlib.h>
  34. #include <string.h>
  35. #include <sys/types.h>
  36. #include <arch/arm.h>
  37. #include <arch/arm/mmu.h>
  38. #include <arch/ops.h>
  39. #include <target/board.h>
  40. #include <platform/mt_reg_base.h>
  41. #include <platform/mt_typedefs.h>
  42. #include <platform/sync_write.h>
  43. #include <mtk_dcm_autogen.h>
  44. #define IOMEM(a) (a)
  45. #define __raw_readl(addr) DRV_Reg32(addr)
  46. extern unsigned long mt_secure_call(unsigned long, unsigned long, unsigned long, unsigned long);
  47. #define MTK_SIP_KERNEL_MCSI_NS_ACCESS 0x82000217
  48. #define mcsi_reg_read(offset) \
  49. mt_secure_call(MTK_SIP_KERNEL_MCSI_NS_ACCESS, 0, offset, 0)
  50. #define mcsi_reg_write(val, offset) \
  51. mt_secure_call(MTK_SIP_KERNEL_MCSI_NS_ACCESS, 1, offset, val)
  52. #define reg_read(addr) __raw_readl(addr)
  53. #define reg_write(addr, val) mt_reg_sync_writel((val), ((void *)addr))
  54. #define MCUSYS_SMC_WRITE(addr, val) reg_write(addr, val)
  55. #define MCSI_SMC_WRITE(addr, val) mcsi_reg_write(val, (addr##_PHYS & 0xFFFF))
  56. #define MCSI_SMC_READ(addr) mcsi_reg_read(addr##_PHYS & 0xFFFF)
  57. // ========== autogen code 2019 0128 ====================
  58. #define INFRACFG_AO_INFRA_BUS_DCM_REG0_MASK ((0x1 << 0) | \
  59. (0x1 << 1) | \
  60. (0x1 << 3) | \
  61. (0x1 << 4) | \
  62. (0x1f << 5) | \
  63. (0x1 << 20) | \
  64. (0x1 << 23) | \
  65. (0x1 << 30))
  66. #define INFRACFG_AO_INFRA_BUS_DCM_REG1_MASK ((0x1f << 12) | \
  67. (0x1 << 17) | \
  68. (0x1 << 18))
  69. #define INFRACFG_AO_INFRA_BUS_DCM_REG0_ON ((0x1 << 0) | \
  70. (0x1 << 1) | \
  71. (0x0 << 3) | \
  72. (0x0 << 4) | \
  73. (0x10 << 5) | \
  74. (0x1 << 20) | \
  75. (0x1 << 23) | \
  76. (0x1 << 30))
  77. #define INFRACFG_AO_INFRA_BUS_DCM_REG1_ON ((0x10 << 12) | \
  78. (0x1 << 17) | \
  79. (0x0 << 18))
  80. #define INFRACFG_AO_INFRA_BUS_DCM_REG0_OFF ((0x0 << 0) | \
  81. (0x0 << 1) | \
  82. (0x0 << 3) | \
  83. (0x0 << 4) | \
  84. (0x10 << 5) | \
  85. (0x0 << 20) | \
  86. (0x0 << 23) | \
  87. (0x0 << 30))
  88. #define INFRACFG_AO_INFRA_BUS_DCM_REG1_OFF ((0x10 << 12) | \
  89. (0x0 << 17) | \
  90. (0x1 << 18))
  91. #if 0
  92. static unsigned int infracfg_ao_infra_dcm_rg_sfsel_get(void)
  93. {
  94. return (reg_read(INFRA_BUS_DCM_CTRL) >> 10) & 0x1f;
  95. }
  96. #endif
  97. static void infracfg_ao_infra_dcm_rg_sfsel_set(unsigned int val)
  98. {
  99. reg_write(INFRA_BUS_DCM_CTRL,
  100. (reg_read(INFRA_BUS_DCM_CTRL) &
  101. ~(0x1f << 10)) |
  102. (val & 0x1f) << 10);
  103. }
  104. bool dcm_infracfg_ao_infra_bus_dcm_is_on(void)
  105. {
  106. bool ret = true;
  107. ret &= ((reg_read(INFRA_BUS_DCM_CTRL) &
  108. INFRACFG_AO_INFRA_BUS_DCM_REG0_MASK) ==
  109. (unsigned int) INFRACFG_AO_INFRA_BUS_DCM_REG0_ON);
  110. ret &= ((reg_read(INFRA_AXIMEM_IDLE_BIT_EN_0) &
  111. INFRACFG_AO_INFRA_BUS_DCM_REG1_MASK) ==
  112. (unsigned int) INFRACFG_AO_INFRA_BUS_DCM_REG1_ON);
  113. return ret;
  114. }
  115. void dcm_infracfg_ao_infra_bus_dcm(int on)
  116. {
  117. if (on) {
  118. /* TINFO = "Turn ON DCM 'infracfg_ao_infra_bus_dcm'" */
  119. infracfg_ao_infra_dcm_rg_sfsel_set(0x1);
  120. reg_write(INFRA_BUS_DCM_CTRL,
  121. (reg_read(INFRA_BUS_DCM_CTRL) &
  122. ~INFRACFG_AO_INFRA_BUS_DCM_REG0_MASK) |
  123. INFRACFG_AO_INFRA_BUS_DCM_REG0_ON);
  124. reg_write(INFRA_AXIMEM_IDLE_BIT_EN_0,
  125. (reg_read(INFRA_AXIMEM_IDLE_BIT_EN_0) &
  126. ~INFRACFG_AO_INFRA_BUS_DCM_REG1_MASK) |
  127. INFRACFG_AO_INFRA_BUS_DCM_REG1_ON);
  128. } else {
  129. /* TINFO = "Turn OFF DCM 'infracfg_ao_infra_bus_dcm'" */
  130. infracfg_ao_infra_dcm_rg_sfsel_set(0x1);
  131. reg_write(INFRA_BUS_DCM_CTRL,
  132. (reg_read(INFRA_BUS_DCM_CTRL) &
  133. ~INFRACFG_AO_INFRA_BUS_DCM_REG0_MASK) |
  134. INFRACFG_AO_INFRA_BUS_DCM_REG0_OFF);
  135. reg_write(INFRA_AXIMEM_IDLE_BIT_EN_0,
  136. (reg_read(INFRA_AXIMEM_IDLE_BIT_EN_0) &
  137. ~INFRACFG_AO_INFRA_BUS_DCM_REG1_MASK) |
  138. INFRACFG_AO_INFRA_BUS_DCM_REG1_OFF);
  139. }
  140. }
  141. #define INFRACFG_AO_INFRA_EMI_LOCAL_DCM_REG0_MASK ((0x1 << 27))
  142. #define INFRACFG_AO_INFRA_EMI_LOCAL_DCM_REG0_ON ((0x1 << 27))
  143. #define INFRACFG_AO_INFRA_EMI_LOCAL_DCM_REG0_OFF ((0x0 << 27))
  144. bool dcm_infracfg_ao_infra_emi_local_dcm_is_on(void)
  145. {
  146. bool ret = true;
  147. ret &= ((reg_read(MEM_DCM_CTRL) &
  148. INFRACFG_AO_INFRA_EMI_LOCAL_DCM_REG0_MASK) ==
  149. (unsigned int) INFRACFG_AO_INFRA_EMI_LOCAL_DCM_REG0_ON);
  150. return ret;
  151. }
  152. void dcm_infracfg_ao_infra_emi_local_dcm(int on)
  153. {
  154. if (on) {
  155. /* TINFO = "Turn ON DCM 'infracfg_ao_infra_emi_local_dcm'" */
  156. reg_write(MEM_DCM_CTRL,
  157. (reg_read(MEM_DCM_CTRL) &
  158. ~INFRACFG_AO_INFRA_EMI_LOCAL_DCM_REG0_MASK) |
  159. INFRACFG_AO_INFRA_EMI_LOCAL_DCM_REG0_ON);
  160. } else {
  161. /* TINFO = "Turn OFF DCM 'infracfg_ao_infra_emi_local_dcm'" */
  162. reg_write(MEM_DCM_CTRL,
  163. (reg_read(MEM_DCM_CTRL) &
  164. ~INFRACFG_AO_INFRA_EMI_LOCAL_DCM_REG0_MASK) |
  165. INFRACFG_AO_INFRA_EMI_LOCAL_DCM_REG0_OFF);
  166. }
  167. }
  168. #define INFRACFG_AO_INFRA_RX_P2P_DCM_REG0_MASK ((0xf << 0))
  169. #define INFRACFG_AO_INFRA_RX_P2P_DCM_REG0_ON ((0x0 << 0))
  170. #define INFRACFG_AO_INFRA_RX_P2P_DCM_REG0_OFF ((0xf << 0))
  171. bool dcm_infracfg_ao_infra_rx_p2p_dcm_is_on(void)
  172. {
  173. bool ret = true;
  174. ret &= ((reg_read(P2P_RX_CLK_ON) &
  175. INFRACFG_AO_INFRA_RX_P2P_DCM_REG0_MASK) ==
  176. (unsigned int) INFRACFG_AO_INFRA_RX_P2P_DCM_REG0_ON);
  177. return ret;
  178. }
  179. void dcm_infracfg_ao_infra_rx_p2p_dcm(int on)
  180. {
  181. if (on) {
  182. /* TINFO = "Turn ON DCM 'infracfg_ao_infra_rx_p2p_dcm'" */
  183. reg_write(P2P_RX_CLK_ON,
  184. (reg_read(P2P_RX_CLK_ON) &
  185. ~INFRACFG_AO_INFRA_RX_P2P_DCM_REG0_MASK) |
  186. INFRACFG_AO_INFRA_RX_P2P_DCM_REG0_ON);
  187. } else {
  188. /* TINFO = "Turn OFF DCM 'infracfg_ao_infra_rx_p2p_dcm'" */
  189. reg_write(P2P_RX_CLK_ON,
  190. (reg_read(P2P_RX_CLK_ON) &
  191. ~INFRACFG_AO_INFRA_RX_P2P_DCM_REG0_MASK) |
  192. INFRACFG_AO_INFRA_RX_P2P_DCM_REG0_OFF);
  193. }
  194. }
  195. #define INFRACFG_AO_PERI_BUS_DCM_REG0_MASK ((0x1 << 0) | \
  196. (0x1 << 1) | \
  197. (0x1 << 3) | \
  198. (0x1 << 4) | \
  199. (0x1f << 5) | \
  200. (0x1f << 15) | \
  201. (0x1 << 20) | \
  202. (0x1 << 21))
  203. #define INFRACFG_AO_PERI_BUS_DCM_REG0_ON ((0x1 << 0) | \
  204. (0x1 << 1) | \
  205. (0x0 << 3) | \
  206. (0x0 << 4) | \
  207. (0x1f << 5) | \
  208. (0x1f << 15) | \
  209. (0x1 << 20) | \
  210. (0x1 << 21))
  211. #define INFRACFG_AO_PERI_BUS_DCM_REG0_OFF ((0x0 << 0) | \
  212. (0x0 << 1) | \
  213. (0x0 << 3) | \
  214. (0x0 << 4) | \
  215. (0x1f << 5) | \
  216. (0x0 << 15) | \
  217. (0x0 << 20) | \
  218. (0x0 << 21))
  219. #if 0
  220. static unsigned int infracfg_ao_peri_dcm_rg_sfsel_get(void)
  221. {
  222. return (reg_read(PERI_BUS_DCM_CTRL) >> 10) & 0x1f;
  223. }
  224. #endif
  225. static void infracfg_ao_peri_dcm_rg_sfsel_set(unsigned int val)
  226. {
  227. reg_write(PERI_BUS_DCM_CTRL,
  228. (reg_read(PERI_BUS_DCM_CTRL) &
  229. ~(0x1f << 10)) |
  230. (val & 0x1f) << 10);
  231. }
  232. bool dcm_infracfg_ao_peri_bus_dcm_is_on(void)
  233. {
  234. bool ret = true;
  235. ret &= ((reg_read(PERI_BUS_DCM_CTRL) &
  236. INFRACFG_AO_PERI_BUS_DCM_REG0_MASK) ==
  237. (unsigned int) INFRACFG_AO_PERI_BUS_DCM_REG0_ON);
  238. return ret;
  239. }
  240. void dcm_infracfg_ao_peri_bus_dcm(int on)
  241. {
  242. if (on) {
  243. /* TINFO = "Turn ON DCM 'infracfg_ao_peri_bus_dcm'" */
  244. infracfg_ao_peri_dcm_rg_sfsel_set(0x0);
  245. reg_write(PERI_BUS_DCM_CTRL,
  246. (reg_read(PERI_BUS_DCM_CTRL) &
  247. ~INFRACFG_AO_PERI_BUS_DCM_REG0_MASK) |
  248. INFRACFG_AO_PERI_BUS_DCM_REG0_ON);
  249. } else {
  250. /* TINFO = "Turn OFF DCM 'infracfg_ao_peri_bus_dcm'" */
  251. infracfg_ao_peri_dcm_rg_sfsel_set(0x1f);
  252. reg_write(PERI_BUS_DCM_CTRL,
  253. (reg_read(PERI_BUS_DCM_CTRL) &
  254. ~INFRACFG_AO_PERI_BUS_DCM_REG0_MASK) |
  255. INFRACFG_AO_PERI_BUS_DCM_REG0_OFF);
  256. }
  257. }
  258. #define INFRACFG_AO_PERI_MODULE_DCM_REG0_MASK ((0x1 << 28) | \
  259. (0x1 << 29) | \
  260. (0x1 << 30))
  261. #define INFRACFG_AO_PERI_MODULE_DCM_REG0_ON ((0x1 << 28) | \
  262. (0x1 << 29) | \
  263. (0x1 << 30))
  264. #define INFRACFG_AO_PERI_MODULE_DCM_REG0_OFF ((0x0 << 28) | \
  265. (0x0 << 29) | \
  266. (0x0 << 30))
  267. bool dcm_infracfg_ao_peri_module_dcm_is_on(void)
  268. {
  269. bool ret = true;
  270. ret &= ((reg_read(PERI_BUS_DCM_CTRL) &
  271. INFRACFG_AO_PERI_MODULE_DCM_REG0_MASK) ==
  272. (unsigned int) INFRACFG_AO_PERI_MODULE_DCM_REG0_ON);
  273. return ret;
  274. }
  275. void dcm_infracfg_ao_peri_module_dcm(int on)
  276. {
  277. if (on) {
  278. /* TINFO = "Turn ON DCM 'infracfg_ao_peri_module_dcm'" */
  279. reg_write(PERI_BUS_DCM_CTRL,
  280. (reg_read(PERI_BUS_DCM_CTRL) &
  281. ~INFRACFG_AO_PERI_MODULE_DCM_REG0_MASK) |
  282. INFRACFG_AO_PERI_MODULE_DCM_REG0_ON);
  283. } else {
  284. /* TINFO = "Turn OFF DCM 'infracfg_ao_peri_module_dcm'" */
  285. reg_write(PERI_BUS_DCM_CTRL,
  286. (reg_read(PERI_BUS_DCM_CTRL) &
  287. ~INFRACFG_AO_PERI_MODULE_DCM_REG0_MASK) |
  288. INFRACFG_AO_PERI_MODULE_DCM_REG0_OFF);
  289. }
  290. }
  291. #define INFRACFG_AO_MEM_DCM_EMI_GROUP_REG0_MASK ((0x1 << 1) | \
  292. (0x1 << 2) | \
  293. (0x1 << 3) | \
  294. (0x1 << 4) | \
  295. (0x1 << 5) | \
  296. (0x1 << 6) | \
  297. (0x1 << 10) | \
  298. (0x1 << 12))
  299. #define INFRACFG_AO_MEM_DCM_EMI_GROUP_REG1_MASK ((0xffffffff << 0))
  300. #define INFRACFG_AO_MEM_DCM_EMI_GROUP_REG2_MASK ((0xffffffff << 0))
  301. #define INFRACFG_AO_MEM_DCM_EMI_GROUP_REG3_MASK ((0xffffffff << 0))
  302. #define INFRACFG_AO_MEM_DCM_EMI_GROUP_REG0_ON ((0x1 << 1) | \
  303. (0x1 << 2) | \
  304. (0x1 << 3) | \
  305. (0x1 << 4) | \
  306. (0x1 << 5) | \
  307. (0x1 << 6) | \
  308. (0x1 << 10) | \
  309. (0x1 << 12))
  310. #define INFRACFG_AO_MEM_DCM_EMI_GROUP_REG1_ON ((0x4078c000 << 0))
  311. #define INFRACFG_AO_MEM_DCM_EMI_GROUP_REG2_ON ((0xff << 0))
  312. #define INFRACFG_AO_MEM_DCM_EMI_GROUP_REG3_ON ((0x7 << 0))
  313. #define INFRACFG_AO_MEM_DCM_EMI_GROUP_REG0_OFF ((0x0 << 1) | \
  314. (0x0 << 2) | \
  315. (0x0 << 3) | \
  316. (0x0 << 4) | \
  317. (0x0 << 5) | \
  318. (0x0 << 6) | \
  319. (0x0 << 10) | \
  320. (0x0 << 12))
  321. #define INFRACFG_AO_MEM_DCM_EMI_GROUP_REG1_OFF ((0x4078c000 << 0))
  322. #define INFRACFG_AO_MEM_DCM_EMI_GROUP_REG2_OFF ((0x0 << 0))
  323. #define INFRACFG_AO_MEM_DCM_EMI_GROUP_REG3_OFF ((0x7 << 0))
  324. bool dcm_infracfg_ao_mem_dcm_emi_group_is_on(void)
  325. {
  326. bool ret = true;
  327. ret &= ((reg_read(INFRA_EMI_DCM_CFG0) &
  328. INFRACFG_AO_MEM_DCM_EMI_GROUP_REG0_MASK) ==
  329. (unsigned int) INFRACFG_AO_MEM_DCM_EMI_GROUP_REG0_ON);
  330. ret &= ((reg_read(INFRA_EMI_DCM_CFG1) &
  331. INFRACFG_AO_MEM_DCM_EMI_GROUP_REG1_MASK) ==
  332. (unsigned int) INFRACFG_AO_MEM_DCM_EMI_GROUP_REG1_ON);
  333. ret &= ((reg_read(INFRA_EMI_DCM_CFG3) &
  334. INFRACFG_AO_MEM_DCM_EMI_GROUP_REG2_MASK) ==
  335. (unsigned int) INFRACFG_AO_MEM_DCM_EMI_GROUP_REG2_ON);
  336. ret &= ((reg_read(TOP_CK_ANCHOR_CFG) &
  337. INFRACFG_AO_MEM_DCM_EMI_GROUP_REG3_MASK) ==
  338. (unsigned int) INFRACFG_AO_MEM_DCM_EMI_GROUP_REG3_ON);
  339. return ret;
  340. }
  341. void dcm_infracfg_ao_mem_dcm_emi_group(int on)
  342. {
  343. if (on) {
  344. /* TINFO = "Turn ON DCM 'infracfg_ao_mem_dcm_emi_group'" */
  345. reg_write(INFRA_EMI_DCM_CFG0,
  346. (reg_read(INFRA_EMI_DCM_CFG0) &
  347. ~INFRACFG_AO_MEM_DCM_EMI_GROUP_REG0_MASK) |
  348. INFRACFG_AO_MEM_DCM_EMI_GROUP_REG0_ON);
  349. reg_write(INFRA_EMI_DCM_CFG1,
  350. (reg_read(INFRA_EMI_DCM_CFG1) &
  351. ~INFRACFG_AO_MEM_DCM_EMI_GROUP_REG1_MASK) |
  352. INFRACFG_AO_MEM_DCM_EMI_GROUP_REG1_ON);
  353. reg_write(INFRA_EMI_DCM_CFG3,
  354. (reg_read(INFRA_EMI_DCM_CFG3) &
  355. ~INFRACFG_AO_MEM_DCM_EMI_GROUP_REG2_MASK) |
  356. INFRACFG_AO_MEM_DCM_EMI_GROUP_REG2_ON);
  357. reg_write(TOP_CK_ANCHOR_CFG,
  358. (reg_read(TOP_CK_ANCHOR_CFG) &
  359. ~INFRACFG_AO_MEM_DCM_EMI_GROUP_REG3_MASK) |
  360. INFRACFG_AO_MEM_DCM_EMI_GROUP_REG3_ON);
  361. } else {
  362. /* TINFO = "Turn OFF DCM 'infracfg_ao_mem_dcm_emi_group'" */
  363. reg_write(INFRA_EMI_DCM_CFG0,
  364. (reg_read(INFRA_EMI_DCM_CFG0) &
  365. ~INFRACFG_AO_MEM_DCM_EMI_GROUP_REG0_MASK) |
  366. INFRACFG_AO_MEM_DCM_EMI_GROUP_REG0_OFF);
  367. reg_write(INFRA_EMI_DCM_CFG1,
  368. (reg_read(INFRA_EMI_DCM_CFG1) &
  369. ~INFRACFG_AO_MEM_DCM_EMI_GROUP_REG1_MASK) |
  370. INFRACFG_AO_MEM_DCM_EMI_GROUP_REG1_OFF);
  371. reg_write(INFRA_EMI_DCM_CFG3,
  372. (reg_read(INFRA_EMI_DCM_CFG3) &
  373. ~INFRACFG_AO_MEM_DCM_EMI_GROUP_REG2_MASK) |
  374. INFRACFG_AO_MEM_DCM_EMI_GROUP_REG2_OFF);
  375. reg_write(TOP_CK_ANCHOR_CFG,
  376. (reg_read(TOP_CK_ANCHOR_CFG) &
  377. ~INFRACFG_AO_MEM_DCM_EMI_GROUP_REG3_MASK) |
  378. INFRACFG_AO_MEM_DCM_EMI_GROUP_REG3_OFF);
  379. }
  380. }
  381. #define PWRAP_PMIC_WRAP_REG0_MASK ((0x1 << 0) | \
  382. (0x1 << 1) | \
  383. (0x1 << 2) | \
  384. (0x1 << 3) | \
  385. (0x1 << 4) | \
  386. (0x1 << 5) | \
  387. (0x1 << 6) | \
  388. (0x1 << 7) | \
  389. (0x1 << 8) | \
  390. (0x1 << 9) | \
  391. (0x1 << 10) | \
  392. (0x1 << 11) | \
  393. (0x1 << 12) | \
  394. (0x1 << 13) | \
  395. (0x1 << 14) | \
  396. (0x1 << 15) | \
  397. (0x1 << 16) | \
  398. (0x1 << 17) | \
  399. (0x1 << 18) | \
  400. (0x1 << 19) | \
  401. (0x1 << 20) | \
  402. (0x1 << 21) | \
  403. (0x1 << 22))
  404. #define PWRAP_PMIC_WRAP_REG0_ON ((0x0 << 0) | \
  405. (0x0 << 1) | \
  406. (0x0 << 2) | \
  407. (0x0 << 3) | \
  408. (0x0 << 4) | \
  409. (0x0 << 5) | \
  410. (0x0 << 6) | \
  411. (0x0 << 7) | \
  412. (0x0 << 8) | \
  413. (0x0 << 9) | \
  414. (0x0 << 10) | \
  415. (0x0 << 11) | \
  416. (0x0 << 12) | \
  417. (0x0 << 13) | \
  418. (0x0 << 14) | \
  419. (0x0 << 15) | \
  420. (0x0 << 16) | \
  421. (0x0 << 17) | \
  422. (0x0 << 18) | \
  423. (0x0 << 19) | \
  424. (0x0 << 20) | \
  425. (0x0 << 21) | \
  426. (0x0 << 22))
  427. #define PWRAP_PMIC_WRAP_REG0_OFF ((0x0 << 0) | \
  428. (0x0 << 1) | \
  429. (0x0 << 2) | \
  430. (0x0 << 3) | \
  431. (0x0 << 4) | \
  432. (0x0 << 5) | \
  433. (0x0 << 6) | \
  434. (0x0 << 7) | \
  435. (0x0 << 8) | \
  436. (0x0 << 9) | \
  437. (0x0 << 10) | \
  438. (0x0 << 11) | \
  439. (0x0 << 12) | \
  440. (0x0 << 13) | \
  441. (0x0 << 14) | \
  442. (0x0 << 15) | \
  443. (0x0 << 16) | \
  444. (0x0 << 17) | \
  445. (0x0 << 18) | \
  446. (0x0 << 19) | \
  447. (0x0 << 20) | \
  448. (0x0 << 21) | \
  449. (0x0 << 22))
  450. bool dcm_pwrap_pmic_wrap_is_on(void)
  451. {
  452. bool ret = true;
  453. ret &= ((reg_read(PMIC_WRAP_DCM_EN) &
  454. PWRAP_PMIC_WRAP_REG0_MASK) ==
  455. (unsigned int) PWRAP_PMIC_WRAP_REG0_ON);
  456. return ret;
  457. }
  458. void dcm_pwrap_pmic_wrap(int on)
  459. {
  460. if (on) {
  461. /* TINFO = "Turn ON DCM 'pwrap_pmic_wrap'" */
  462. reg_write(PMIC_WRAP_DCM_EN,
  463. (reg_read(PMIC_WRAP_DCM_EN) &
  464. ~PWRAP_PMIC_WRAP_REG0_MASK) |
  465. PWRAP_PMIC_WRAP_REG0_ON);
  466. } else {
  467. /* TINFO = "Turn OFF DCM 'pwrap_pmic_wrap'" */
  468. reg_write(PMIC_WRAP_DCM_EN,
  469. (reg_read(PMIC_WRAP_DCM_EN) &
  470. ~PWRAP_PMIC_WRAP_REG0_MASK) |
  471. PWRAP_PMIC_WRAP_REG0_OFF);
  472. }
  473. }
  474. #define EMI_EMI_DCM_REG0_MASK ((0xff << 24))
  475. #define EMI_EMI_DCM_REG1_MASK ((0xff << 24))
  476. #define EMI_EMI_DCM_REG2_MASK ((0x1 << 13))
  477. #define EMI_EMI_DCM_REG0_ON ((0x0 << 24))
  478. #define EMI_EMI_DCM_REG1_ON ((0x0 << 24))
  479. #define EMI_EMI_DCM_REG2_ON ((0x0 << 13))
  480. #define EMI_EMI_DCM_REG0_OFF ((0xff << 24))
  481. #define EMI_EMI_DCM_REG1_OFF ((0xff << 24))
  482. #define EMI_EMI_DCM_REG2_OFF ((0x1 << 13))
  483. bool dcm_emi_emi_dcm_is_on(void)
  484. {
  485. bool ret = true;
  486. ret &= ((reg_read(EMI_CONM) &
  487. EMI_EMI_DCM_REG0_MASK) ==
  488. (unsigned int) EMI_EMI_DCM_REG0_ON);
  489. ret &= ((reg_read(EMI_CONN) &
  490. EMI_EMI_DCM_REG1_MASK) ==
  491. (unsigned int) EMI_EMI_DCM_REG1_ON);
  492. ret &= ((reg_read(EMI_THRO_CTRL0) &
  493. EMI_EMI_DCM_REG2_MASK) ==
  494. (unsigned int) EMI_EMI_DCM_REG2_ON);
  495. return ret;
  496. }
  497. void dcm_emi_emi_dcm(int on)
  498. {
  499. if (on) {
  500. /* TINFO = "Turn ON DCM 'emi_emi_dcm'" */
  501. reg_write(EMI_CONM,
  502. (reg_read(EMI_CONM) &
  503. ~EMI_EMI_DCM_REG0_MASK) |
  504. EMI_EMI_DCM_REG0_ON);
  505. reg_write(EMI_CONN,
  506. (reg_read(EMI_CONN) &
  507. ~EMI_EMI_DCM_REG1_MASK) |
  508. EMI_EMI_DCM_REG1_ON);
  509. reg_write(EMI_THRO_CTRL0,
  510. (reg_read(EMI_THRO_CTRL0) &
  511. ~EMI_EMI_DCM_REG2_MASK) |
  512. EMI_EMI_DCM_REG2_ON);
  513. } else {
  514. /* TINFO = "Turn OFF DCM 'emi_emi_dcm'" */
  515. reg_write(EMI_CONM,
  516. (reg_read(EMI_CONM) &
  517. ~EMI_EMI_DCM_REG0_MASK) |
  518. EMI_EMI_DCM_REG0_OFF);
  519. reg_write(EMI_CONN,
  520. (reg_read(EMI_CONN) &
  521. ~EMI_EMI_DCM_REG1_MASK) |
  522. EMI_EMI_DCM_REG1_OFF);
  523. reg_write(EMI_THRO_CTRL0,
  524. (reg_read(EMI_THRO_CTRL0) &
  525. ~EMI_EMI_DCM_REG2_MASK) |
  526. EMI_EMI_DCM_REG2_OFF);
  527. }
  528. }
  529. #define DRAMC_CH0_TOP0_DDRPHY_REG0_MASK ((0x1 << 0) | \
  530. (0x1 << 1) | \
  531. (0x1 << 2) | \
  532. (0x1 << 26) | \
  533. (0x1 << 30) | \
  534. (0x1 << 31))
  535. #define DRAMC_CH0_TOP0_DDRPHY_REG1_MASK ((0x1 << 31))
  536. #define DRAMC_CH0_TOP0_DDRPHY_REG0_ON ((0x1 << 0) | \
  537. (0x1 << 1) | \
  538. (0x1 << 2) | \
  539. (0x0 << 26) | \
  540. (0x1 << 30) | \
  541. (0x1 << 31))
  542. #define DRAMC_CH0_TOP0_DDRPHY_REG1_ON ((0x1 << 31))
  543. #define DRAMC_CH0_TOP0_DDRPHY_REG0_OFF ((0x0 << 0) | \
  544. (0x0 << 1) | \
  545. (0x0 << 2) | \
  546. (0x1 << 26) | \
  547. (0x0 << 30) | \
  548. (0x0 << 31))
  549. #define DRAMC_CH0_TOP0_DDRPHY_REG1_OFF ((0x0 << 31))
  550. bool dcm_dramc_ch0_top0_ddrphy_is_on(void)
  551. {
  552. bool ret = true;
  553. ret &= ((reg_read(DRAMC_CH0_TOP0_DRAMC_PD_CTRL) &
  554. DRAMC_CH0_TOP0_DDRPHY_REG0_MASK) ==
  555. (unsigned int) DRAMC_CH0_TOP0_DDRPHY_REG0_ON);
  556. ret &= ((reg_read(DRAMC_CH0_TOP0_CLKAR) &
  557. DRAMC_CH0_TOP0_DDRPHY_REG1_MASK) ==
  558. (unsigned int) DRAMC_CH0_TOP0_DDRPHY_REG1_ON);
  559. return ret;
  560. }
  561. void dcm_dramc_ch0_top0_ddrphy(int on)
  562. {
  563. if (on) {
  564. /* TINFO = "Turn ON DCM 'dramc_ch0_top0_ddrphy'" */
  565. reg_write(DRAMC_CH0_TOP0_DRAMC_PD_CTRL,
  566. (reg_read(DRAMC_CH0_TOP0_DRAMC_PD_CTRL) &
  567. ~DRAMC_CH0_TOP0_DDRPHY_REG0_MASK) |
  568. DRAMC_CH0_TOP0_DDRPHY_REG0_ON);
  569. reg_write(DRAMC_CH0_TOP0_CLKAR,
  570. (reg_read(DRAMC_CH0_TOP0_CLKAR) &
  571. ~DRAMC_CH0_TOP0_DDRPHY_REG1_MASK) |
  572. DRAMC_CH0_TOP0_DDRPHY_REG1_ON);
  573. } else {
  574. /* TINFO = "Turn OFF DCM 'dramc_ch0_top0_ddrphy'" */
  575. reg_write(DRAMC_CH0_TOP0_DRAMC_PD_CTRL,
  576. (reg_read(DRAMC_CH0_TOP0_DRAMC_PD_CTRL) &
  577. ~DRAMC_CH0_TOP0_DDRPHY_REG0_MASK) |
  578. DRAMC_CH0_TOP0_DDRPHY_REG0_OFF);
  579. reg_write(DRAMC_CH0_TOP0_CLKAR,
  580. (reg_read(DRAMC_CH0_TOP0_CLKAR) &
  581. ~DRAMC_CH0_TOP0_DDRPHY_REG1_MASK) |
  582. DRAMC_CH0_TOP0_DDRPHY_REG1_OFF);
  583. }
  584. }
  585. #define CHN0_EMI_CHN_EMI_DCM_REG0_MASK ((0xff << 24))
  586. #define CHN0_EMI_CHN_EMI_DCM_REG0_ON ((0x0 << 24))
  587. #define CHN0_EMI_CHN_EMI_DCM_REG0_OFF ((0xff << 24))
  588. bool dcm_chn0_emi_chn_emi_dcm_is_on(void)
  589. {
  590. bool ret = true;
  591. ret &= ((reg_read(CHN0_EMI_CHN_EMI_CONB) &
  592. CHN0_EMI_CHN_EMI_DCM_REG0_MASK) ==
  593. (unsigned int) CHN0_EMI_CHN_EMI_DCM_REG0_ON);
  594. return ret;
  595. }
  596. void dcm_chn0_emi_chn_emi_dcm(int on)
  597. {
  598. if (on) {
  599. /* TINFO = "Turn ON DCM 'chn0_emi_chn_emi_dcm'" */
  600. reg_write(CHN0_EMI_CHN_EMI_CONB,
  601. (reg_read(CHN0_EMI_CHN_EMI_CONB) &
  602. ~CHN0_EMI_CHN_EMI_DCM_REG0_MASK) |
  603. CHN0_EMI_CHN_EMI_DCM_REG0_ON);
  604. } else {
  605. /* TINFO = "Turn OFF DCM 'chn0_emi_chn_emi_dcm'" */
  606. reg_write(CHN0_EMI_CHN_EMI_CONB,
  607. (reg_read(CHN0_EMI_CHN_EMI_CONB) &
  608. ~CHN0_EMI_CHN_EMI_DCM_REG0_MASK) |
  609. CHN0_EMI_CHN_EMI_DCM_REG0_OFF);
  610. }
  611. }
  612. #define DRAMC_CH0_TOP5_DDRPHY_REG0_MASK ((0x1 << 8) | \
  613. (0x1 << 9) | \
  614. (0x1 << 10) | \
  615. (0x1 << 11) | \
  616. (0x1 << 12) | \
  617. (0x1 << 13) | \
  618. (0x1 << 14) | \
  619. (0x1 << 15) | \
  620. (0x1 << 16) | \
  621. (0x1 << 17) | \
  622. (0x1 << 19))
  623. #define DRAMC_CH0_TOP5_DDRPHY_REG1_MASK ((0x1 << 6) | \
  624. (0x1 << 7) | \
  625. (0x1 << 26))
  626. #define DRAMC_CH0_TOP5_DDRPHY_REG2_MASK ((0x3 << 0))
  627. #define DRAMC_CH0_TOP5_DDRPHY_REG0_ON ((0x0 << 8) | \
  628. (0x0 << 9) | \
  629. (0x0 << 10) | \
  630. (0x0 << 11) | \
  631. (0x0 << 12) | \
  632. (0x0 << 13) | \
  633. (0x0 << 14) | \
  634. (0x0 << 15) | \
  635. (0x0 << 16) | \
  636. (0x0 << 17) | \
  637. (0x0 << 19))
  638. #define DRAMC_CH0_TOP5_DDRPHY_REG1_ON ((0x0 << 6) | \
  639. (0x0 << 7) | \
  640. (0x0 << 26))
  641. #define DRAMC_CH0_TOP5_DDRPHY_REG2_ON ((0x0 << 0))
  642. #define DRAMC_CH0_TOP5_DDRPHY_REG0_OFF ((0x1 << 8) | \
  643. (0x1 << 9) | \
  644. (0x1 << 10) | \
  645. (0x1 << 11) | \
  646. (0x1 << 12) | \
  647. (0x1 << 13) | \
  648. (0x1 << 14) | \
  649. (0x1 << 15) | \
  650. (0x1 << 16) | \
  651. (0x1 << 17) | \
  652. (0x1 << 19))
  653. #define DRAMC_CH0_TOP5_DDRPHY_REG1_OFF ((0x1 << 6) | \
  654. (0x1 << 7) | \
  655. (0x0 << 26))
  656. #define DRAMC_CH0_TOP5_DDRPHY_REG2_OFF ((0x1 << 0))
  657. #if 0
  658. static unsigned int dramc_ch0_top5_rg_mem_dcm_idle_fsel_get(void)
  659. {
  660. return (reg_read(DRAMC_CH0_TOP5_MISC_CG_CTRL2) >> 21) & 0x1f;
  661. }
  662. #endif
  663. static void dramc_ch0_top5_rg_mem_dcm_idle_fsel_set(unsigned int val)
  664. {
  665. reg_write(DRAMC_CH0_TOP5_MISC_CG_CTRL2,
  666. (reg_read(DRAMC_CH0_TOP5_MISC_CG_CTRL2) &
  667. ~(0x1f << 21)) |
  668. (val & 0x1f) << 21);
  669. }
  670. bool dcm_dramc_ch0_top5_ddrphy_is_on(void)
  671. {
  672. bool ret = true;
  673. ret &= ((reg_read(DRAMC_CH0_TOP5_MISC_CG_CTRL0) &
  674. DRAMC_CH0_TOP5_DDRPHY_REG0_MASK) ==
  675. (unsigned int) DRAMC_CH0_TOP5_DDRPHY_REG0_ON);
  676. ret &= ((reg_read(DRAMC_CH0_TOP5_MISC_CG_CTRL2) &
  677. DRAMC_CH0_TOP5_DDRPHY_REG1_MASK) ==
  678. (unsigned int) DRAMC_CH0_TOP5_DDRPHY_REG1_ON);
  679. ret &= ((reg_read(DRAMC_CH0_TOP5_MISC_CTRL2) &
  680. DRAMC_CH0_TOP5_DDRPHY_REG2_MASK) ==
  681. (unsigned int) DRAMC_CH0_TOP5_DDRPHY_REG2_ON);
  682. return ret;
  683. }
  684. void dcm_dramc_ch0_top5_ddrphy(int on)
  685. {
  686. if (on) {
  687. /* TINFO = "Turn ON DCM 'dramc_ch0_top5_ddrphy'" */
  688. dramc_ch0_top5_rg_mem_dcm_idle_fsel_set(0x8);
  689. reg_write(DRAMC_CH0_TOP5_MISC_CG_CTRL0,
  690. (reg_read(DRAMC_CH0_TOP5_MISC_CG_CTRL0) &
  691. ~DRAMC_CH0_TOP5_DDRPHY_REG0_MASK) |
  692. DRAMC_CH0_TOP5_DDRPHY_REG0_ON);
  693. reg_write(DRAMC_CH0_TOP5_MISC_CG_CTRL2,
  694. (reg_read(DRAMC_CH0_TOP5_MISC_CG_CTRL2) &
  695. ~DRAMC_CH0_TOP5_DDRPHY_REG1_MASK) |
  696. DRAMC_CH0_TOP5_DDRPHY_REG1_ON);
  697. reg_write(DRAMC_CH0_TOP5_MISC_CTRL2,
  698. (reg_read(DRAMC_CH0_TOP5_MISC_CTRL2) &
  699. ~DRAMC_CH0_TOP5_DDRPHY_REG2_MASK) |
  700. DRAMC_CH0_TOP5_DDRPHY_REG2_ON);
  701. } else {
  702. /* TINFO = "Turn OFF DCM 'dramc_ch0_top5_ddrphy'" */
  703. dramc_ch0_top5_rg_mem_dcm_idle_fsel_set(0x0);
  704. reg_write(DRAMC_CH0_TOP5_MISC_CG_CTRL0,
  705. (reg_read(DRAMC_CH0_TOP5_MISC_CG_CTRL0) &
  706. ~DRAMC_CH0_TOP5_DDRPHY_REG0_MASK) |
  707. DRAMC_CH0_TOP5_DDRPHY_REG0_OFF);
  708. reg_write(DRAMC_CH0_TOP5_MISC_CG_CTRL2,
  709. (reg_read(DRAMC_CH0_TOP5_MISC_CG_CTRL2) &
  710. ~DRAMC_CH0_TOP5_DDRPHY_REG1_MASK) |
  711. DRAMC_CH0_TOP5_DDRPHY_REG1_OFF);
  712. reg_write(DRAMC_CH0_TOP5_MISC_CTRL2,
  713. (reg_read(DRAMC_CH0_TOP5_MISC_CTRL2) &
  714. ~DRAMC_CH0_TOP5_DDRPHY_REG2_MASK) |
  715. DRAMC_CH0_TOP5_DDRPHY_REG2_OFF);
  716. }
  717. }
  718. #define DRAMC_CH1_TOP0_DDRPHY_REG0_MASK ((0x1 << 0) | \
  719. (0x1 << 1) | \
  720. (0x1 << 2) | \
  721. (0x1 << 26) | \
  722. (0x1 << 30) | \
  723. (0x1 << 31))
  724. #define DRAMC_CH1_TOP0_DDRPHY_REG1_MASK ((0x1 << 31))
  725. #define DRAMC_CH1_TOP0_DDRPHY_REG0_ON ((0x1 << 0) | \
  726. (0x1 << 1) | \
  727. (0x1 << 2) | \
  728. (0x0 << 26) | \
  729. (0x1 << 30) | \
  730. (0x1 << 31))
  731. #define DRAMC_CH1_TOP0_DDRPHY_REG1_ON ((0x1 << 31))
  732. #define DRAMC_CH1_TOP0_DDRPHY_REG0_OFF ((0x0 << 0) | \
  733. (0x0 << 1) | \
  734. (0x0 << 2) | \
  735. (0x1 << 26) | \
  736. (0x0 << 30) | \
  737. (0x0 << 31))
  738. #define DRAMC_CH1_TOP0_DDRPHY_REG1_OFF ((0x0 << 31))
  739. bool dcm_dramc_ch1_top0_ddrphy_is_on(void)
  740. {
  741. bool ret = true;
  742. ret &= ((reg_read(DRAMC_CH1_TOP0_DRAMC_PD_CTRL) &
  743. DRAMC_CH1_TOP0_DDRPHY_REG0_MASK) ==
  744. (unsigned int) DRAMC_CH1_TOP0_DDRPHY_REG0_ON);
  745. ret &= ((reg_read(DRAMC_CH1_TOP0_CLKAR) &
  746. DRAMC_CH1_TOP0_DDRPHY_REG1_MASK) ==
  747. (unsigned int) DRAMC_CH1_TOP0_DDRPHY_REG1_ON);
  748. return ret;
  749. }
  750. void dcm_dramc_ch1_top0_ddrphy(int on)
  751. {
  752. if (on) {
  753. /* TINFO = "Turn ON DCM 'dramc_ch1_top0_ddrphy'" */
  754. reg_write(DRAMC_CH1_TOP0_DRAMC_PD_CTRL,
  755. (reg_read(DRAMC_CH1_TOP0_DRAMC_PD_CTRL) &
  756. ~DRAMC_CH1_TOP0_DDRPHY_REG0_MASK) |
  757. DRAMC_CH1_TOP0_DDRPHY_REG0_ON);
  758. reg_write(DRAMC_CH1_TOP0_CLKAR,
  759. (reg_read(DRAMC_CH1_TOP0_CLKAR) &
  760. ~DRAMC_CH1_TOP0_DDRPHY_REG1_MASK) |
  761. DRAMC_CH1_TOP0_DDRPHY_REG1_ON);
  762. } else {
  763. /* TINFO = "Turn OFF DCM 'dramc_ch1_top0_ddrphy'" */
  764. reg_write(DRAMC_CH1_TOP0_DRAMC_PD_CTRL,
  765. (reg_read(DRAMC_CH1_TOP0_DRAMC_PD_CTRL) &
  766. ~DRAMC_CH1_TOP0_DDRPHY_REG0_MASK) |
  767. DRAMC_CH1_TOP0_DDRPHY_REG0_OFF);
  768. reg_write(DRAMC_CH1_TOP0_CLKAR,
  769. (reg_read(DRAMC_CH1_TOP0_CLKAR) &
  770. ~DRAMC_CH1_TOP0_DDRPHY_REG1_MASK) |
  771. DRAMC_CH1_TOP0_DDRPHY_REG1_OFF);
  772. }
  773. }
  774. #define DRAMC_CH1_TOP5_DDRPHY_REG0_MASK ((0x1 << 8) | \
  775. (0x1 << 9) | \
  776. (0x1 << 10) | \
  777. (0x1 << 11) | \
  778. (0x1 << 12) | \
  779. (0x1 << 13) | \
  780. (0x1 << 14) | \
  781. (0x1 << 15) | \
  782. (0x1 << 16) | \
  783. (0x1 << 17) | \
  784. (0x1 << 19))
  785. #define DRAMC_CH1_TOP5_DDRPHY_REG1_MASK ((0x1 << 6) | \
  786. (0x1 << 7) | \
  787. (0x1 << 26))
  788. #define DRAMC_CH1_TOP5_DDRPHY_REG2_MASK ((0x3 << 0))
  789. #define DRAMC_CH1_TOP5_DDRPHY_REG0_ON ((0x0 << 8) | \
  790. (0x0 << 9) | \
  791. (0x0 << 10) | \
  792. (0x0 << 11) | \
  793. (0x0 << 12) | \
  794. (0x0 << 13) | \
  795. (0x0 << 14) | \
  796. (0x0 << 15) | \
  797. (0x0 << 16) | \
  798. (0x0 << 17) | \
  799. (0x0 << 19))
  800. #define DRAMC_CH1_TOP5_DDRPHY_REG1_ON ((0x0 << 6) | \
  801. (0x0 << 7) | \
  802. (0x0 << 26))
  803. #define DRAMC_CH1_TOP5_DDRPHY_REG2_ON ((0x0 << 0))
  804. #define DRAMC_CH1_TOP5_DDRPHY_REG0_OFF ((0x1 << 8) | \
  805. (0x1 << 9) | \
  806. (0x1 << 10) | \
  807. (0x1 << 11) | \
  808. (0x1 << 12) | \
  809. (0x1 << 13) | \
  810. (0x1 << 14) | \
  811. (0x1 << 15) | \
  812. (0x1 << 16) | \
  813. (0x1 << 17) | \
  814. (0x1 << 19))
  815. #define DRAMC_CH1_TOP5_DDRPHY_REG1_OFF ((0x1 << 6) | \
  816. (0x1 << 7) | \
  817. (0x0 << 26))
  818. #define DRAMC_CH1_TOP5_DDRPHY_REG2_OFF ((0x1 << 0))
  819. #if 0
  820. static unsigned int dramc_ch1_top5_rg_mem_dcm_idle_fsel_get(void)
  821. {
  822. return (reg_read(DRAMC_CH1_TOP5_MISC_CG_CTRL2) >> 21) & 0x1f;
  823. }
  824. #endif
  825. static void dramc_ch1_top5_rg_mem_dcm_idle_fsel_set(unsigned int val)
  826. {
  827. reg_write(DRAMC_CH1_TOP5_MISC_CG_CTRL2,
  828. (reg_read(DRAMC_CH1_TOP5_MISC_CG_CTRL2) &
  829. ~(0x1f << 21)) |
  830. (val & 0x1f) << 21);
  831. }
  832. bool dcm_dramc_ch1_top5_ddrphy_is_on(void)
  833. {
  834. bool ret = true;
  835. ret &= ((reg_read(DRAMC_CH1_TOP5_MISC_CG_CTRL0) &
  836. DRAMC_CH1_TOP5_DDRPHY_REG0_MASK) ==
  837. (unsigned int) DRAMC_CH1_TOP5_DDRPHY_REG0_ON);
  838. ret &= ((reg_read(DRAMC_CH1_TOP5_MISC_CG_CTRL2) &
  839. DRAMC_CH1_TOP5_DDRPHY_REG1_MASK) ==
  840. (unsigned int) DRAMC_CH1_TOP5_DDRPHY_REG1_ON);
  841. ret &= ((reg_read(DRAMC_CH1_TOP5_MISC_CTRL2) &
  842. DRAMC_CH1_TOP5_DDRPHY_REG2_MASK) ==
  843. (unsigned int) DRAMC_CH1_TOP5_DDRPHY_REG2_ON);
  844. return ret;
  845. }
  846. void dcm_dramc_ch1_top5_ddrphy(int on)
  847. {
  848. if (on) {
  849. /* TINFO = "Turn ON DCM 'dramc_ch1_top5_ddrphy'" */
  850. dramc_ch1_top5_rg_mem_dcm_idle_fsel_set(0x8);
  851. reg_write(DRAMC_CH1_TOP5_MISC_CG_CTRL0,
  852. (reg_read(DRAMC_CH1_TOP5_MISC_CG_CTRL0) &
  853. ~DRAMC_CH1_TOP5_DDRPHY_REG0_MASK) |
  854. DRAMC_CH1_TOP5_DDRPHY_REG0_ON);
  855. reg_write(DRAMC_CH1_TOP5_MISC_CG_CTRL2,
  856. (reg_read(DRAMC_CH1_TOP5_MISC_CG_CTRL2) &
  857. ~DRAMC_CH1_TOP5_DDRPHY_REG1_MASK) |
  858. DRAMC_CH1_TOP5_DDRPHY_REG1_ON);
  859. reg_write(DRAMC_CH1_TOP5_MISC_CTRL2,
  860. (reg_read(DRAMC_CH1_TOP5_MISC_CTRL2) &
  861. ~DRAMC_CH1_TOP5_DDRPHY_REG2_MASK) |
  862. DRAMC_CH1_TOP5_DDRPHY_REG2_ON);
  863. } else {
  864. /* TINFO = "Turn OFF DCM 'dramc_ch1_top5_ddrphy'" */
  865. dramc_ch1_top5_rg_mem_dcm_idle_fsel_set(0x0);
  866. reg_write(DRAMC_CH1_TOP5_MISC_CG_CTRL0,
  867. (reg_read(DRAMC_CH1_TOP5_MISC_CG_CTRL0) &
  868. ~DRAMC_CH1_TOP5_DDRPHY_REG0_MASK) |
  869. DRAMC_CH1_TOP5_DDRPHY_REG0_OFF);
  870. reg_write(DRAMC_CH1_TOP5_MISC_CG_CTRL2,
  871. (reg_read(DRAMC_CH1_TOP5_MISC_CG_CTRL2) &
  872. ~DRAMC_CH1_TOP5_DDRPHY_REG1_MASK) |
  873. DRAMC_CH1_TOP5_DDRPHY_REG1_OFF);
  874. reg_write(DRAMC_CH1_TOP5_MISC_CTRL2,
  875. (reg_read(DRAMC_CH1_TOP5_MISC_CTRL2) &
  876. ~DRAMC_CH1_TOP5_DDRPHY_REG2_MASK) |
  877. DRAMC_CH1_TOP5_DDRPHY_REG2_OFF);
  878. }
  879. }
  880. #define VPU_IOMMU_VPU_MMU_DCM_CFG_REG0_MASK ((0x1 << 0) | \
  881. (0x1 << 1) | \
  882. (0x1 << 2) | \
  883. (0x1 << 3) | \
  884. (0x1 << 4) | \
  885. (0x1 << 5) | \
  886. (0x1 << 6) | \
  887. (0x1 << 7) | \
  888. (0x1 << 8) | \
  889. (0x1 << 9) | \
  890. (0x1 << 10) | \
  891. (0x1 << 11) | \
  892. (0x1 << 12) | \
  893. (0x1 << 13) | \
  894. (0x1 << 14) | \
  895. (0x1 << 15) | \
  896. (0x1 << 16) | \
  897. (0x1 << 17) | \
  898. (0x1 << 18) | \
  899. (0x1 << 19) | \
  900. (0x1 << 20) | \
  901. (0x1 << 21) | \
  902. (0x1 << 22))
  903. #define VPU_IOMMU_VPU_MMU_DCM_CFG_REG0_ON ((0x0 << 0) | \
  904. (0x0 << 1) | \
  905. (0x0 << 2) | \
  906. (0x0 << 3) | \
  907. (0x0 << 4) | \
  908. (0x0 << 5) | \
  909. (0x0 << 6) | \
  910. (0x0 << 7) | \
  911. (0x0 << 8) | \
  912. (0x0 << 9) | \
  913. (0x0 << 10) | \
  914. (0x0 << 11) | \
  915. (0x0 << 12) | \
  916. (0x0 << 13) | \
  917. (0x0 << 14) | \
  918. (0x0 << 15) | \
  919. (0x0 << 16) | \
  920. (0x0 << 17) | \
  921. (0x0 << 18) | \
  922. (0x0 << 19) | \
  923. (0x0 << 20) | \
  924. (0x0 << 21) | \
  925. (0x0 << 22))
  926. #define VPU_IOMMU_VPU_MMU_DCM_CFG_REG0_OFF ((0x1 << 0) | \
  927. (0x1 << 1) | \
  928. (0x1 << 2) | \
  929. (0x1 << 3) | \
  930. (0x1 << 4) | \
  931. (0x1 << 5) | \
  932. (0x1 << 6) | \
  933. (0x1 << 7) | \
  934. (0x1 << 8) | \
  935. (0x1 << 9) | \
  936. (0x1 << 10) | \
  937. (0x1 << 11) | \
  938. (0x1 << 12) | \
  939. (0x1 << 13) | \
  940. (0x1 << 14) | \
  941. (0x1 << 15) | \
  942. (0x1 << 16) | \
  943. (0x1 << 17) | \
  944. (0x1 << 18) | \
  945. (0x1 << 19) | \
  946. (0x1 << 20) | \
  947. (0x1 << 21) | \
  948. (0x1 << 22))
  949. bool dcm_vpu_iommu_vpu_mmu_dcm_cfg_is_on(void)
  950. {
  951. bool ret = true;
  952. ret &= ((reg_read(VPU_MMU_DCM_DIS) &
  953. VPU_IOMMU_VPU_MMU_DCM_CFG_REG0_MASK) ==
  954. (unsigned int) VPU_IOMMU_VPU_MMU_DCM_CFG_REG0_ON);
  955. return ret;
  956. }
  957. void dcm_vpu_iommu_vpu_mmu_dcm_cfg(int on)
  958. {
  959. if (on) {
  960. /* TINFO = "Turn ON DCM 'vpu_iommu_vpu_mmu_dcm_cfg'" */
  961. reg_write(VPU_MMU_DCM_DIS,
  962. (reg_read(VPU_MMU_DCM_DIS) &
  963. ~VPU_IOMMU_VPU_MMU_DCM_CFG_REG0_MASK) |
  964. VPU_IOMMU_VPU_MMU_DCM_CFG_REG0_ON);
  965. } else {
  966. /* TINFO = "Turn OFF DCM 'vpu_iommu_vpu_mmu_dcm_cfg'" */
  967. reg_write(VPU_MMU_DCM_DIS,
  968. (reg_read(VPU_MMU_DCM_DIS) &
  969. ~VPU_IOMMU_VPU_MMU_DCM_CFG_REG0_MASK) |
  970. VPU_IOMMU_VPU_MMU_DCM_CFG_REG0_OFF);
  971. }
  972. }
  973. #define SSPM_SSPM_DCM_REG0_MASK ((0x1 << 8))
  974. #define SSPM_SSPM_DCM_REG1_MASK ((0x1fffff << 0))
  975. #define SSPM_SSPM_DCM_REG0_ON ((0x1 << 8))
  976. #define SSPM_SSPM_DCM_REG1_ON ((0x1fbfff << 0))
  977. #define SSPM_SSPM_DCM_REG0_OFF ((0x0 << 8))
  978. #define SSPM_SSPM_DCM_REG1_OFF ((0x0 << 0))
  979. bool dcm_sspm_sspm_dcm_is_on(void)
  980. {
  981. bool ret = true;
  982. ret &= ((reg_read(SSPM_MCLK_DIV) &
  983. SSPM_SSPM_DCM_REG0_MASK) ==
  984. (unsigned int) SSPM_SSPM_DCM_REG0_ON);
  985. ret &= ((reg_read(SSPM_DCM_CTRL) &
  986. SSPM_SSPM_DCM_REG1_MASK) ==
  987. (unsigned int) SSPM_SSPM_DCM_REG1_ON);
  988. return ret;
  989. }
  990. void dcm_sspm_sspm_dcm(int on)
  991. {
  992. if (on) {
  993. /* TINFO = "Turn ON DCM 'sspm_sspm_dcm'" */
  994. reg_write(SSPM_MCLK_DIV,
  995. (reg_read(SSPM_MCLK_DIV) &
  996. ~SSPM_SSPM_DCM_REG0_MASK) |
  997. SSPM_SSPM_DCM_REG0_ON);
  998. reg_write(SSPM_DCM_CTRL,
  999. (reg_read(SSPM_DCM_CTRL) &
  1000. ~SSPM_SSPM_DCM_REG1_MASK) |
  1001. SSPM_SSPM_DCM_REG1_ON);
  1002. } else {
  1003. /* TINFO = "Turn OFF DCM 'sspm_sspm_dcm'" */
  1004. reg_write(SSPM_MCLK_DIV,
  1005. (reg_read(SSPM_MCLK_DIV) &
  1006. ~SSPM_SSPM_DCM_REG0_MASK) |
  1007. SSPM_SSPM_DCM_REG0_OFF);
  1008. reg_write(SSPM_DCM_CTRL,
  1009. (reg_read(SSPM_DCM_CTRL) &
  1010. ~SSPM_SSPM_DCM_REG1_MASK) |
  1011. SSPM_SSPM_DCM_REG1_OFF);
  1012. }
  1013. }
  1014. #define AUDIO_AUD_MAS_AHB_CK_DCM_REG0_MASK ((0x1 << 29) | \
  1015. (0x1 << 30))
  1016. #define AUDIO_AUD_MAS_AHB_CK_DCM_REG0_ON ((0x1 << 29) | \
  1017. (0x1 << 30))
  1018. #define AUDIO_AUD_MAS_AHB_CK_DCM_REG0_OFF ((0x0 << 29) | \
  1019. (0x0 << 30))
  1020. bool dcm_audio_aud_mas_ahb_ck_dcm_is_on(void)
  1021. {
  1022. bool ret = true;
  1023. ret &= ((reg_read(AUDIO_TOP_CON0) &
  1024. AUDIO_AUD_MAS_AHB_CK_DCM_REG0_MASK) ==
  1025. (unsigned int) AUDIO_AUD_MAS_AHB_CK_DCM_REG0_ON);
  1026. return ret;
  1027. }
  1028. void dcm_audio_aud_mas_ahb_ck_dcm(int on)
  1029. {
  1030. if (on) {
  1031. /* TINFO = "Turn ON DCM 'audio_aud_mas_ahb_ck_dcm'" */
  1032. reg_write(AUDIO_TOP_CON0,
  1033. (reg_read(AUDIO_TOP_CON0) &
  1034. ~AUDIO_AUD_MAS_AHB_CK_DCM_REG0_MASK) |
  1035. AUDIO_AUD_MAS_AHB_CK_DCM_REG0_ON);
  1036. } else {
  1037. /* TINFO = "Turn OFF DCM 'audio_aud_mas_ahb_ck_dcm'" */
  1038. reg_write(AUDIO_TOP_CON0,
  1039. (reg_read(AUDIO_TOP_CON0) &
  1040. ~AUDIO_AUD_MAS_AHB_CK_DCM_REG0_MASK) |
  1041. AUDIO_AUD_MAS_AHB_CK_DCM_REG0_OFF);
  1042. }
  1043. }
  1044. #define MSDC1_DCMEN_DCM_REG0_MASK ((0x1 << 21))
  1045. #define MSDC1_DCMEN_DCM_REG0_ON ((0x0 << 21))
  1046. #define MSDC1_DCMEN_DCM_REG0_OFF ((0x1 << 21))
  1047. bool dcm_msdc1_dcmen_dcm_is_on(void)
  1048. {
  1049. bool ret = true;
  1050. ret &= ((reg_read(MSDC1_PATCH_BIT1) &
  1051. MSDC1_DCMEN_DCM_REG0_MASK) ==
  1052. (unsigned int) MSDC1_DCMEN_DCM_REG0_ON);
  1053. return ret;
  1054. }
  1055. void dcm_msdc1_dcmen_dcm(int on)
  1056. {
  1057. if (on) {
  1058. /* TINFO = "Turn ON DCM 'msdc1_dcmen_dcm'" */
  1059. reg_write(MSDC1_PATCH_BIT1,
  1060. (reg_read(MSDC1_PATCH_BIT1) &
  1061. ~MSDC1_DCMEN_DCM_REG0_MASK) |
  1062. MSDC1_DCMEN_DCM_REG0_ON);
  1063. } else {
  1064. /* TINFO = "Turn OFF DCM 'msdc1_dcmen_dcm'" */
  1065. reg_write(MSDC1_PATCH_BIT1,
  1066. (reg_read(MSDC1_PATCH_BIT1) &
  1067. ~MSDC1_DCMEN_DCM_REG0_MASK) |
  1068. MSDC1_DCMEN_DCM_REG0_OFF);
  1069. }
  1070. }
  1071. #define MSDC1_HGDMACKEN_DCM_REG0_MASK ((0x1 << 23))
  1072. #define MSDC1_HGDMACKEN_DCM_REG0_ON ((0x0 << 23))
  1073. #define MSDC1_HGDMACKEN_DCM_REG0_OFF ((0x1 << 23))
  1074. bool dcm_msdc1_hgdmacken_dcm_is_on(void)
  1075. {
  1076. bool ret = true;
  1077. ret &= ((reg_read(MSDC1_PATCH_BIT1) &
  1078. MSDC1_HGDMACKEN_DCM_REG0_MASK) ==
  1079. (unsigned int) MSDC1_HGDMACKEN_DCM_REG0_ON);
  1080. return ret;
  1081. }
  1082. void dcm_msdc1_hgdmacken_dcm(int on)
  1083. {
  1084. if (on) {
  1085. /* TINFO = "Turn ON DCM 'msdc1_hgdmacken_dcm'" */
  1086. reg_write(MSDC1_PATCH_BIT1,
  1087. (reg_read(MSDC1_PATCH_BIT1) &
  1088. ~MSDC1_HGDMACKEN_DCM_REG0_MASK) |
  1089. MSDC1_HGDMACKEN_DCM_REG0_ON);
  1090. } else {
  1091. /* TINFO = "Turn OFF DCM 'msdc1_hgdmacken_dcm'" */
  1092. reg_write(MSDC1_PATCH_BIT1,
  1093. (reg_read(MSDC1_PATCH_BIT1) &
  1094. ~MSDC1_HGDMACKEN_DCM_REG0_MASK) |
  1095. MSDC1_HGDMACKEN_DCM_REG0_OFF);
  1096. }
  1097. }
  1098. #define MSDC1_MACMDCKEN_DCM_REG0_MASK ((0x1 << 27))
  1099. #define MSDC1_MACMDCKEN_DCM_REG0_ON ((0x0 << 27))
  1100. #define MSDC1_MACMDCKEN_DCM_REG0_OFF ((0x1 << 27))
  1101. bool dcm_msdc1_macmdcken_dcm_is_on(void)
  1102. {
  1103. bool ret = true;
  1104. ret &= ((reg_read(MSDC1_PATCH_BIT1) &
  1105. MSDC1_MACMDCKEN_DCM_REG0_MASK) ==
  1106. (unsigned int) MSDC1_MACMDCKEN_DCM_REG0_ON);
  1107. return ret;
  1108. }
  1109. void dcm_msdc1_macmdcken_dcm(int on)
  1110. {
  1111. if (on) {
  1112. /* TINFO = "Turn ON DCM 'msdc1_macmdcken_dcm'" */
  1113. reg_write(MSDC1_PATCH_BIT1,
  1114. (reg_read(MSDC1_PATCH_BIT1) &
  1115. ~MSDC1_MACMDCKEN_DCM_REG0_MASK) |
  1116. MSDC1_MACMDCKEN_DCM_REG0_ON);
  1117. } else {
  1118. /* TINFO = "Turn OFF DCM 'msdc1_macmdcken_dcm'" */
  1119. reg_write(MSDC1_PATCH_BIT1,
  1120. (reg_read(MSDC1_PATCH_BIT1) &
  1121. ~MSDC1_MACMDCKEN_DCM_REG0_MASK) |
  1122. MSDC1_MACMDCKEN_DCM_REG0_OFF);
  1123. }
  1124. }
  1125. #define MSDC1_MPSCCKEN_DCM_REG0_MASK ((0x1 << 25))
  1126. #define MSDC1_MPSCCKEN_DCM_REG0_ON ((0x0 << 25))
  1127. #define MSDC1_MPSCCKEN_DCM_REG0_OFF ((0x1 << 25))
  1128. bool dcm_msdc1_mpsccken_dcm_is_on(void)
  1129. {
  1130. bool ret = true;
  1131. ret &= ((reg_read(MSDC1_PATCH_BIT1) &
  1132. MSDC1_MPSCCKEN_DCM_REG0_MASK) ==
  1133. (unsigned int) MSDC1_MPSCCKEN_DCM_REG0_ON);
  1134. return ret;
  1135. }
  1136. void dcm_msdc1_mpsccken_dcm(int on)
  1137. {
  1138. if (on) {
  1139. /* TINFO = "Turn ON DCM 'msdc1_mpsccken_dcm'" */
  1140. reg_write(MSDC1_PATCH_BIT1,
  1141. (reg_read(MSDC1_PATCH_BIT1) &
  1142. ~MSDC1_MPSCCKEN_DCM_REG0_MASK) |
  1143. MSDC1_MPSCCKEN_DCM_REG0_ON);
  1144. } else {
  1145. /* TINFO = "Turn OFF DCM 'msdc1_mpsccken_dcm'" */
  1146. reg_write(MSDC1_PATCH_BIT1,
  1147. (reg_read(MSDC1_PATCH_BIT1) &
  1148. ~MSDC1_MPSCCKEN_DCM_REG0_MASK) |
  1149. MSDC1_MPSCCKEN_DCM_REG0_OFF);
  1150. }
  1151. }
  1152. #define MSDC1_MRCTLCKEN_DCM_REG0_MASK ((0x1 << 30))
  1153. #define MSDC1_MRCTLCKEN_DCM_REG0_ON ((0x0 << 30))
  1154. #define MSDC1_MRCTLCKEN_DCM_REG0_OFF ((0x1 << 30))
  1155. bool dcm_msdc1_mrctlcken_dcm_is_on(void)
  1156. {
  1157. bool ret = true;
  1158. ret &= ((reg_read(MSDC1_PATCH_BIT1) &
  1159. MSDC1_MRCTLCKEN_DCM_REG0_MASK) ==
  1160. (unsigned int) MSDC1_MRCTLCKEN_DCM_REG0_ON);
  1161. return ret;
  1162. }
  1163. void dcm_msdc1_mrctlcken_dcm(int on)
  1164. {
  1165. if (on) {
  1166. /* TINFO = "Turn ON DCM 'msdc1_mrctlcken_dcm'" */
  1167. reg_write(MSDC1_PATCH_BIT1,
  1168. (reg_read(MSDC1_PATCH_BIT1) &
  1169. ~MSDC1_MRCTLCKEN_DCM_REG0_MASK) |
  1170. MSDC1_MRCTLCKEN_DCM_REG0_ON);
  1171. } else {
  1172. /* TINFO = "Turn OFF DCM 'msdc1_mrctlcken_dcm'" */
  1173. reg_write(MSDC1_PATCH_BIT1,
  1174. (reg_read(MSDC1_PATCH_BIT1) &
  1175. ~MSDC1_MRCTLCKEN_DCM_REG0_MASK) |
  1176. MSDC1_MRCTLCKEN_DCM_REG0_OFF);
  1177. }
  1178. }
  1179. #define MSDC1_MSDCKEN_DCM_REG0_MASK ((0x1 << 28))
  1180. #define MSDC1_MSDCKEN_DCM_REG0_ON ((0x0 << 28))
  1181. #define MSDC1_MSDCKEN_DCM_REG0_OFF ((0x1 << 28))
  1182. bool dcm_msdc1_msdcken_dcm_is_on(void)
  1183. {
  1184. bool ret = true;
  1185. ret &= ((reg_read(MSDC1_PATCH_BIT1) &
  1186. MSDC1_MSDCKEN_DCM_REG0_MASK) ==
  1187. (unsigned int) MSDC1_MSDCKEN_DCM_REG0_ON);
  1188. return ret;
  1189. }
  1190. void dcm_msdc1_msdcken_dcm(int on)
  1191. {
  1192. if (on) {
  1193. /* TINFO = "Turn ON DCM 'msdc1_msdcken_dcm'" */
  1194. reg_write(MSDC1_PATCH_BIT1,
  1195. (reg_read(MSDC1_PATCH_BIT1) &
  1196. ~MSDC1_MSDCKEN_DCM_REG0_MASK) |
  1197. MSDC1_MSDCKEN_DCM_REG0_ON);
  1198. } else {
  1199. /* TINFO = "Turn OFF DCM 'msdc1_msdcken_dcm'" */
  1200. reg_write(MSDC1_PATCH_BIT1,
  1201. (reg_read(MSDC1_PATCH_BIT1) &
  1202. ~MSDC1_MSDCKEN_DCM_REG0_MASK) |
  1203. MSDC1_MSDCKEN_DCM_REG0_OFF);
  1204. }
  1205. }
  1206. #define MSDC1_MSHBFCKEN_DCM_REG0_MASK ((0x1 << 31))
  1207. #define MSDC1_MSHBFCKEN_DCM_REG0_ON ((0x0 << 31))
  1208. #define MSDC1_MSHBFCKEN_DCM_REG0_OFF ((0x1 << 31))
  1209. bool dcm_msdc1_mshbfcken_dcm_is_on(void)
  1210. {
  1211. bool ret = true;
  1212. ret &= ((reg_read(MSDC1_PATCH_BIT1) &
  1213. MSDC1_MSHBFCKEN_DCM_REG0_MASK) ==
  1214. (unsigned int) MSDC1_MSHBFCKEN_DCM_REG0_ON);
  1215. return ret;
  1216. }
  1217. void dcm_msdc1_mshbfcken_dcm(int on)
  1218. {
  1219. if (on) {
  1220. /* TINFO = "Turn ON DCM 'msdc1_mshbfcken_dcm'" */
  1221. reg_write(MSDC1_PATCH_BIT1,
  1222. (reg_read(MSDC1_PATCH_BIT1) &
  1223. ~MSDC1_MSHBFCKEN_DCM_REG0_MASK) |
  1224. MSDC1_MSHBFCKEN_DCM_REG0_ON);
  1225. } else {
  1226. /* TINFO = "Turn OFF DCM 'msdc1_mshbfcken_dcm'" */
  1227. reg_write(MSDC1_PATCH_BIT1,
  1228. (reg_read(MSDC1_PATCH_BIT1) &
  1229. ~MSDC1_MSHBFCKEN_DCM_REG0_MASK) |
  1230. MSDC1_MSHBFCKEN_DCM_REG0_OFF);
  1231. }
  1232. }
  1233. #define MSDC1_MSPCCKEN_DCM_REG0_MASK ((0x1 << 24))
  1234. #define MSDC1_MSPCCKEN_DCM_REG0_ON ((0x0 << 24))
  1235. #define MSDC1_MSPCCKEN_DCM_REG0_OFF ((0x1 << 24))
  1236. bool dcm_msdc1_mspccken_dcm_is_on(void)
  1237. {
  1238. bool ret = true;
  1239. ret &= ((reg_read(MSDC1_PATCH_BIT1) &
  1240. MSDC1_MSPCCKEN_DCM_REG0_MASK) ==
  1241. (unsigned int) MSDC1_MSPCCKEN_DCM_REG0_ON);
  1242. return ret;
  1243. }
  1244. void dcm_msdc1_mspccken_dcm(int on)
  1245. {
  1246. if (on) {
  1247. /* TINFO = "Turn ON DCM 'msdc1_mspccken_dcm'" */
  1248. reg_write(MSDC1_PATCH_BIT1,
  1249. (reg_read(MSDC1_PATCH_BIT1) &
  1250. ~MSDC1_MSPCCKEN_DCM_REG0_MASK) |
  1251. MSDC1_MSPCCKEN_DCM_REG0_ON);
  1252. } else {
  1253. /* TINFO = "Turn OFF DCM 'msdc1_mspccken_dcm'" */
  1254. reg_write(MSDC1_PATCH_BIT1,
  1255. (reg_read(MSDC1_PATCH_BIT1) &
  1256. ~MSDC1_MSPCCKEN_DCM_REG0_MASK) |
  1257. MSDC1_MSPCCKEN_DCM_REG0_OFF);
  1258. }
  1259. }
  1260. #define MSDC1_MVOLDTCKEN_DCM_REG0_MASK ((0x1 << 26))
  1261. #define MSDC1_MVOLDTCKEN_DCM_REG0_ON ((0x0 << 26))
  1262. #define MSDC1_MVOLDTCKEN_DCM_REG0_OFF ((0x1 << 26))
  1263. bool dcm_msdc1_mvoldtcken_dcm_is_on(void)
  1264. {
  1265. bool ret = true;
  1266. ret &= ((reg_read(MSDC1_PATCH_BIT1) &
  1267. MSDC1_MVOLDTCKEN_DCM_REG0_MASK) ==
  1268. (unsigned int) MSDC1_MVOLDTCKEN_DCM_REG0_ON);
  1269. return ret;
  1270. }
  1271. void dcm_msdc1_mvoldtcken_dcm(int on)
  1272. {
  1273. if (on) {
  1274. /* TINFO = "Turn ON DCM 'msdc1_mvoldtcken_dcm'" */
  1275. reg_write(MSDC1_PATCH_BIT1,
  1276. (reg_read(MSDC1_PATCH_BIT1) &
  1277. ~MSDC1_MVOLDTCKEN_DCM_REG0_MASK) |
  1278. MSDC1_MVOLDTCKEN_DCM_REG0_ON);
  1279. } else {
  1280. /* TINFO = "Turn OFF DCM 'msdc1_mvoldtcken_dcm'" */
  1281. reg_write(MSDC1_PATCH_BIT1,
  1282. (reg_read(MSDC1_PATCH_BIT1) &
  1283. ~MSDC1_MVOLDTCKEN_DCM_REG0_MASK) |
  1284. MSDC1_MVOLDTCKEN_DCM_REG0_OFF);
  1285. }
  1286. }
  1287. #define MSDC1_MWCTLCKEN_DCM_REG0_MASK ((0x1 << 29))
  1288. #define MSDC1_MWCTLCKEN_DCM_REG0_ON ((0x0 << 29))
  1289. #define MSDC1_MWCTLCKEN_DCM_REG0_OFF ((0x1 << 29))
  1290. bool dcm_msdc1_mwctlcken_dcm_is_on(void)
  1291. {
  1292. bool ret = true;
  1293. ret &= ((reg_read(MSDC1_PATCH_BIT1) &
  1294. MSDC1_MWCTLCKEN_DCM_REG0_MASK) ==
  1295. (unsigned int) MSDC1_MWCTLCKEN_DCM_REG0_ON);
  1296. return ret;
  1297. }
  1298. void dcm_msdc1_mwctlcken_dcm(int on)
  1299. {
  1300. if (on) {
  1301. /* TINFO = "Turn ON DCM 'msdc1_mwctlcken_dcm'" */
  1302. reg_write(MSDC1_PATCH_BIT1,
  1303. (reg_read(MSDC1_PATCH_BIT1) &
  1304. ~MSDC1_MWCTLCKEN_DCM_REG0_MASK) |
  1305. MSDC1_MWCTLCKEN_DCM_REG0_ON);
  1306. } else {
  1307. /* TINFO = "Turn OFF DCM 'msdc1_mwctlcken_dcm'" */
  1308. reg_write(MSDC1_PATCH_BIT1,
  1309. (reg_read(MSDC1_PATCH_BIT1) &
  1310. ~MSDC1_MWCTLCKEN_DCM_REG0_MASK) |
  1311. MSDC1_MWCTLCKEN_DCM_REG0_OFF);
  1312. }
  1313. }
  1314. #define MP_CPUSYS_TOP_ADB_DCM_REG0_MASK ((0x1 << 16) | \
  1315. (0x1 << 17) | \
  1316. (0x1 << 18) | \
  1317. (0x1 << 21))
  1318. #define MP_CPUSYS_TOP_ADB_DCM_REG1_MASK ((0x1 << 16) | \
  1319. (0x1 << 17) | \
  1320. (0x1 << 18))
  1321. #define MP_CPUSYS_TOP_ADB_DCM_REG0_ON ((0x1 << 16) | \
  1322. (0x1 << 17) | \
  1323. (0x1 << 18) | \
  1324. (0x1 << 21))
  1325. #define MP_CPUSYS_TOP_ADB_DCM_REG1_ON ((0x1 << 16) | \
  1326. (0x1 << 17) | \
  1327. (0x1 << 18))
  1328. #define MP_CPUSYS_TOP_ADB_DCM_REG0_OFF ((0x0 << 16) | \
  1329. (0x0 << 17) | \
  1330. (0x0 << 18) | \
  1331. (0x0 << 21))
  1332. #define MP_CPUSYS_TOP_ADB_DCM_REG1_OFF ((0x0 << 16) | \
  1333. (0x0 << 17) | \
  1334. (0x0 << 18))
  1335. bool dcm_mp_cpusys_top_adb_dcm_is_on(void)
  1336. {
  1337. bool ret = true;
  1338. ret &= ((reg_read(MP_CPUSYS_TOP_MP_ADB_DCM_CFG4) &
  1339. MP_CPUSYS_TOP_ADB_DCM_REG0_MASK) ==
  1340. (unsigned int) MP_CPUSYS_TOP_ADB_DCM_REG0_ON);
  1341. ret &= ((reg_read(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0) &
  1342. MP_CPUSYS_TOP_ADB_DCM_REG1_MASK) ==
  1343. (unsigned int) MP_CPUSYS_TOP_ADB_DCM_REG1_ON);
  1344. return ret;
  1345. }
  1346. void dcm_mp_cpusys_top_adb_dcm(int on)
  1347. {
  1348. if (on) {
  1349. /* TINFO = "Turn ON DCM 'mp_cpusys_top_adb_dcm'" */
  1350. reg_write(MP_CPUSYS_TOP_MP_ADB_DCM_CFG4,
  1351. (reg_read(MP_CPUSYS_TOP_MP_ADB_DCM_CFG4) &
  1352. ~MP_CPUSYS_TOP_ADB_DCM_REG0_MASK) |
  1353. MP_CPUSYS_TOP_ADB_DCM_REG0_ON);
  1354. reg_write(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0,
  1355. (reg_read(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0) &
  1356. ~MP_CPUSYS_TOP_ADB_DCM_REG1_MASK) |
  1357. MP_CPUSYS_TOP_ADB_DCM_REG1_ON);
  1358. } else {
  1359. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_adb_dcm'" */
  1360. reg_write(MP_CPUSYS_TOP_MP_ADB_DCM_CFG4,
  1361. (reg_read(MP_CPUSYS_TOP_MP_ADB_DCM_CFG4) &
  1362. ~MP_CPUSYS_TOP_ADB_DCM_REG0_MASK) |
  1363. MP_CPUSYS_TOP_ADB_DCM_REG0_OFF);
  1364. reg_write(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0,
  1365. (reg_read(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0) &
  1366. ~MP_CPUSYS_TOP_ADB_DCM_REG1_MASK) |
  1367. MP_CPUSYS_TOP_ADB_DCM_REG1_OFF);
  1368. }
  1369. }
  1370. #define MP_CPUSYS_TOP_APB_DCM_REG0_MASK ((0x1 << 5))
  1371. #define MP_CPUSYS_TOP_APB_DCM_REG1_MASK ((0x1 << 8))
  1372. #define MP_CPUSYS_TOP_APB_DCM_REG2_MASK ((0x1 << 16))
  1373. #define MP_CPUSYS_TOP_APB_DCM_REG0_ON ((0x1 << 5))
  1374. #define MP_CPUSYS_TOP_APB_DCM_REG1_ON ((0x1 << 8))
  1375. #define MP_CPUSYS_TOP_APB_DCM_REG2_ON ((0x1 << 16))
  1376. #define MP_CPUSYS_TOP_APB_DCM_REG0_OFF ((0x0 << 5))
  1377. #define MP_CPUSYS_TOP_APB_DCM_REG1_OFF ((0x0 << 8))
  1378. #define MP_CPUSYS_TOP_APB_DCM_REG2_OFF ((0x0 << 16))
  1379. bool dcm_mp_cpusys_top_apb_dcm_is_on(void)
  1380. {
  1381. bool ret = true;
  1382. ret &= ((reg_read(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0) &
  1383. MP_CPUSYS_TOP_APB_DCM_REG0_MASK) ==
  1384. (unsigned int) MP_CPUSYS_TOP_APB_DCM_REG0_ON);
  1385. ret &= ((reg_read(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0) &
  1386. MP_CPUSYS_TOP_APB_DCM_REG1_MASK) ==
  1387. (unsigned int) MP_CPUSYS_TOP_APB_DCM_REG1_ON);
  1388. ret &= ((reg_read(MP_CPUSYS_TOP_MP0_DCM_CFG0) &
  1389. MP_CPUSYS_TOP_APB_DCM_REG2_MASK) ==
  1390. (unsigned int) MP_CPUSYS_TOP_APB_DCM_REG2_ON);
  1391. return ret;
  1392. }
  1393. void dcm_mp_cpusys_top_apb_dcm(int on)
  1394. {
  1395. if (on) {
  1396. /* TINFO = "Turn ON DCM 'mp_cpusys_top_apb_dcm'" */
  1397. reg_write(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0,
  1398. (reg_read(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0) &
  1399. ~MP_CPUSYS_TOP_APB_DCM_REG0_MASK) |
  1400. MP_CPUSYS_TOP_APB_DCM_REG0_ON);
  1401. reg_write(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0,
  1402. (reg_read(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0) &
  1403. ~MP_CPUSYS_TOP_APB_DCM_REG1_MASK) |
  1404. MP_CPUSYS_TOP_APB_DCM_REG1_ON);
  1405. reg_write(MP_CPUSYS_TOP_MP0_DCM_CFG0,
  1406. (reg_read(MP_CPUSYS_TOP_MP0_DCM_CFG0) &
  1407. ~MP_CPUSYS_TOP_APB_DCM_REG2_MASK) |
  1408. MP_CPUSYS_TOP_APB_DCM_REG2_ON);
  1409. } else {
  1410. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_apb_dcm'" */
  1411. reg_write(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0,
  1412. (reg_read(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0) &
  1413. ~MP_CPUSYS_TOP_APB_DCM_REG0_MASK) |
  1414. MP_CPUSYS_TOP_APB_DCM_REG0_OFF);
  1415. reg_write(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0,
  1416. (reg_read(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0) &
  1417. ~MP_CPUSYS_TOP_APB_DCM_REG1_MASK) |
  1418. MP_CPUSYS_TOP_APB_DCM_REG1_OFF);
  1419. reg_write(MP_CPUSYS_TOP_MP0_DCM_CFG0,
  1420. (reg_read(MP_CPUSYS_TOP_MP0_DCM_CFG0) &
  1421. ~MP_CPUSYS_TOP_APB_DCM_REG2_MASK) |
  1422. MP_CPUSYS_TOP_APB_DCM_REG2_OFF);
  1423. }
  1424. }
  1425. #define MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_MASK ((0x1 << 11) | \
  1426. (0x1 << 24) | \
  1427. (0x1 << 25))
  1428. #define MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_ON ((0x1 << 11) | \
  1429. (0x1 << 24) | \
  1430. (0x1 << 25))
  1431. #define MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_OFF ((0x0 << 11) | \
  1432. (0x0 << 24) | \
  1433. (0x0 << 25))
  1434. bool dcm_mp_cpusys_top_bus_pll_div_dcm_is_on(void)
  1435. {
  1436. bool ret = true;
  1437. ret &= ((reg_read(MP_CPUSYS_TOP_BUS_PLLDIV_CFG) &
  1438. MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_MASK) ==
  1439. (unsigned int) MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_ON);
  1440. return ret;
  1441. }
  1442. void dcm_mp_cpusys_top_bus_pll_div_dcm(int on)
  1443. {
  1444. if (on) {
  1445. /* TINFO = "Turn ON DCM 'mp_cpusys_top_bus_pll_div_dcm'" */
  1446. reg_write(MP_CPUSYS_TOP_BUS_PLLDIV_CFG,
  1447. (reg_read(MP_CPUSYS_TOP_BUS_PLLDIV_CFG) &
  1448. ~MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_MASK) |
  1449. MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_ON);
  1450. } else {
  1451. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_bus_pll_div_dcm'" */
  1452. reg_write(MP_CPUSYS_TOP_BUS_PLLDIV_CFG,
  1453. (reg_read(MP_CPUSYS_TOP_BUS_PLLDIV_CFG) &
  1454. ~MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_MASK) |
  1455. MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_OFF);
  1456. }
  1457. }
  1458. #define MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_MASK ((0x1 << 0))
  1459. #define MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_ON ((0x1 << 0))
  1460. #define MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_OFF ((0x0 << 0))
  1461. bool dcm_mp_cpusys_top_core_stall_dcm_is_on(void)
  1462. {
  1463. bool ret = true;
  1464. ret &= ((reg_read(MP_CPUSYS_TOP_MP0_DCM_CFG7) &
  1465. MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_MASK) ==
  1466. (unsigned int) MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_ON);
  1467. return ret;
  1468. }
  1469. void dcm_mp_cpusys_top_core_stall_dcm(int on)
  1470. {
  1471. if (on) {
  1472. /* TINFO = "Turn ON DCM 'mp_cpusys_top_core_stall_dcm'" */
  1473. reg_write(MP_CPUSYS_TOP_MP0_DCM_CFG7,
  1474. (reg_read(MP_CPUSYS_TOP_MP0_DCM_CFG7) &
  1475. ~MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_MASK) |
  1476. MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_ON);
  1477. } else {
  1478. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_core_stall_dcm'" */
  1479. reg_write(MP_CPUSYS_TOP_MP0_DCM_CFG7,
  1480. (reg_read(MP_CPUSYS_TOP_MP0_DCM_CFG7) &
  1481. ~MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_MASK) |
  1482. MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_OFF);
  1483. }
  1484. }
  1485. #define MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_MASK ((0x1 << 0))
  1486. #define MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_ON ((0x0 << 0))
  1487. #define MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_OFF ((0x1 << 0))
  1488. bool dcm_mp_cpusys_top_cpubiu_dbg_cg_is_on(void)
  1489. {
  1490. bool ret = true;
  1491. ret &= ((reg_read(MP_CPUSYS_TOP_MCSI_CFG2) &
  1492. MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_MASK) ==
  1493. (unsigned int) MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_ON);
  1494. return ret;
  1495. }
  1496. void dcm_mp_cpusys_top_cpubiu_dbg_cg(int on)
  1497. {
  1498. if (on) {
  1499. /* TINFO = "Turn ON DCM 'mp_cpusys_top_cpubiu_dbg_cg'" */
  1500. reg_write(MP_CPUSYS_TOP_MCSI_CFG2,
  1501. (reg_read(MP_CPUSYS_TOP_MCSI_CFG2) &
  1502. ~MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_MASK) |
  1503. MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_ON);
  1504. } else {
  1505. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpubiu_dbg_cg'" */
  1506. reg_write(MP_CPUSYS_TOP_MCSI_CFG2,
  1507. (reg_read(MP_CPUSYS_TOP_MCSI_CFG2) &
  1508. ~MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_MASK) |
  1509. MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_OFF);
  1510. }
  1511. }
  1512. #define MP_CPUSYS_TOP_CPUBIU_DCM_REG0_MASK ((0xffff << 0))
  1513. #define MP_CPUSYS_TOP_CPUBIU_DCM_REG0_ON ((0xffff << 0))
  1514. #define MP_CPUSYS_TOP_CPUBIU_DCM_REG0_OFF ((0x0 << 0))
  1515. bool dcm_mp_cpusys_top_cpubiu_dcm_is_on(void)
  1516. {
  1517. bool ret = true;
  1518. ret &= ((reg_read(MP_CPUSYS_TOP_MCSIC_DCM0) &
  1519. MP_CPUSYS_TOP_CPUBIU_DCM_REG0_MASK) ==
  1520. (unsigned int) MP_CPUSYS_TOP_CPUBIU_DCM_REG0_ON);
  1521. return ret;
  1522. }
  1523. void dcm_mp_cpusys_top_cpubiu_dcm(int on)
  1524. {
  1525. if (on) {
  1526. /* TINFO = "Turn ON DCM 'mp_cpusys_top_cpubiu_dcm'" */
  1527. reg_write(MP_CPUSYS_TOP_MCSIC_DCM0,
  1528. (reg_read(MP_CPUSYS_TOP_MCSIC_DCM0) &
  1529. ~MP_CPUSYS_TOP_CPUBIU_DCM_REG0_MASK) |
  1530. MP_CPUSYS_TOP_CPUBIU_DCM_REG0_ON);
  1531. } else {
  1532. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpubiu_dcm'" */
  1533. reg_write(MP_CPUSYS_TOP_MCSIC_DCM0,
  1534. (reg_read(MP_CPUSYS_TOP_MCSIC_DCM0) &
  1535. ~MP_CPUSYS_TOP_CPUBIU_DCM_REG0_MASK) |
  1536. MP_CPUSYS_TOP_CPUBIU_DCM_REG0_OFF);
  1537. }
  1538. }
  1539. #define MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_MASK ((0x1 << 11) | \
  1540. (0x1 << 24) | \
  1541. (0x1 << 25))
  1542. #define MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_ON ((0x1 << 11) | \
  1543. (0x1 << 24) | \
  1544. (0x1 << 25))
  1545. #define MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_OFF ((0x0 << 11) | \
  1546. (0x0 << 24) | \
  1547. (0x0 << 25))
  1548. bool dcm_mp_cpusys_top_cpu_pll_div_0_dcm_is_on(void)
  1549. {
  1550. bool ret = true;
  1551. ret &= ((reg_read(MP_CPUSYS_TOP_CPU_PLLDIV_CFG0) &
  1552. MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_MASK) ==
  1553. (unsigned int) MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_ON);
  1554. return ret;
  1555. }
  1556. void dcm_mp_cpusys_top_cpu_pll_div_0_dcm(int on)
  1557. {
  1558. if (on) {
  1559. /* TINFO = "Turn ON DCM 'mp_cpusys_top_cpu_pll_div_0_dcm'" */
  1560. reg_write(MP_CPUSYS_TOP_CPU_PLLDIV_CFG0,
  1561. (reg_read(MP_CPUSYS_TOP_CPU_PLLDIV_CFG0) &
  1562. ~MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_MASK) |
  1563. MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_ON);
  1564. } else {
  1565. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpu_pll_div_0_dcm'" */
  1566. reg_write(MP_CPUSYS_TOP_CPU_PLLDIV_CFG0,
  1567. (reg_read(MP_CPUSYS_TOP_CPU_PLLDIV_CFG0) &
  1568. ~MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_MASK) |
  1569. MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_OFF);
  1570. }
  1571. }
  1572. #define MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_MASK ((0x1 << 11) | \
  1573. (0x1 << 24) | \
  1574. (0x1 << 25))
  1575. #define MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_ON ((0x1 << 11) | \
  1576. (0x1 << 24) | \
  1577. (0x1 << 25))
  1578. #define MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_OFF ((0x0 << 11) | \
  1579. (0x0 << 24) | \
  1580. (0x0 << 25))
  1581. bool dcm_mp_cpusys_top_cpu_pll_div_1_dcm_is_on(void)
  1582. {
  1583. bool ret = true;
  1584. ret &= ((reg_read(MP_CPUSYS_TOP_CPU_PLLDIV_CFG1) &
  1585. MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_MASK) ==
  1586. (unsigned int) MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_ON);
  1587. return ret;
  1588. }
  1589. void dcm_mp_cpusys_top_cpu_pll_div_1_dcm(int on)
  1590. {
  1591. if (on) {
  1592. /* TINFO = "Turn ON DCM 'mp_cpusys_top_cpu_pll_div_1_dcm'" */
  1593. reg_write(MP_CPUSYS_TOP_CPU_PLLDIV_CFG1,
  1594. (reg_read(MP_CPUSYS_TOP_CPU_PLLDIV_CFG1) &
  1595. ~MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_MASK) |
  1596. MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_ON);
  1597. } else {
  1598. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpu_pll_div_1_dcm'" */
  1599. reg_write(MP_CPUSYS_TOP_CPU_PLLDIV_CFG1,
  1600. (reg_read(MP_CPUSYS_TOP_CPU_PLLDIV_CFG1) &
  1601. ~MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_MASK) |
  1602. MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_OFF);
  1603. }
  1604. }
  1605. #define MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_MASK ((0x1 << 4))
  1606. #define MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_ON ((0x1 << 4))
  1607. #define MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_OFF ((0x0 << 4))
  1608. bool dcm_mp_cpusys_top_fcm_stall_dcm_is_on(void)
  1609. {
  1610. bool ret = true;
  1611. ret &= ((reg_read(MP_CPUSYS_TOP_MP0_DCM_CFG7) &
  1612. MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_MASK) ==
  1613. (unsigned int) MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_ON);
  1614. return ret;
  1615. }
  1616. void dcm_mp_cpusys_top_fcm_stall_dcm(int on)
  1617. {
  1618. if (on) {
  1619. /* TINFO = "Turn ON DCM 'mp_cpusys_top_fcm_stall_dcm'" */
  1620. reg_write(MP_CPUSYS_TOP_MP0_DCM_CFG7,
  1621. (reg_read(MP_CPUSYS_TOP_MP0_DCM_CFG7) &
  1622. ~MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_MASK) |
  1623. MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_ON);
  1624. } else {
  1625. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_fcm_stall_dcm'" */
  1626. reg_write(MP_CPUSYS_TOP_MP0_DCM_CFG7,
  1627. (reg_read(MP_CPUSYS_TOP_MP0_DCM_CFG7) &
  1628. ~MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_MASK) |
  1629. MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_OFF);
  1630. }
  1631. }
  1632. #define MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_MASK ((0x1 << 31))
  1633. #define MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_ON ((0x1 << 31))
  1634. #define MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_OFF ((0x0 << 31))
  1635. bool dcm_mp_cpusys_top_last_cor_idle_dcm_is_on(void)
  1636. {
  1637. bool ret = true;
  1638. ret &= ((reg_read(MP_CPUSYS_TOP_BUS_PLLDIV_CFG) &
  1639. MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_MASK) ==
  1640. (unsigned int) MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_ON);
  1641. return ret;
  1642. }
  1643. void dcm_mp_cpusys_top_last_cor_idle_dcm(int on)
  1644. {
  1645. if (on) {
  1646. /* TINFO = "Turn ON DCM 'mp_cpusys_top_last_cor_idle_dcm'" */
  1647. reg_write(MP_CPUSYS_TOP_BUS_PLLDIV_CFG,
  1648. (reg_read(MP_CPUSYS_TOP_BUS_PLLDIV_CFG) &
  1649. ~MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_MASK) |
  1650. MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_ON);
  1651. } else {
  1652. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_last_cor_idle_dcm'" */
  1653. reg_write(MP_CPUSYS_TOP_BUS_PLLDIV_CFG,
  1654. (reg_read(MP_CPUSYS_TOP_BUS_PLLDIV_CFG) &
  1655. ~MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_MASK) |
  1656. MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_OFF);
  1657. }
  1658. }
  1659. #define MP_CPUSYS_TOP_MISC_DCM_REG0_MASK ((0x1 << 0) | \
  1660. (0x1 << 1) | \
  1661. (0x1 << 2) | \
  1662. (0x1 << 3) | \
  1663. (0x1 << 4))
  1664. #define MP_CPUSYS_TOP_MISC_DCM_REG0_ON ((0x1 << 0) | \
  1665. (0x1 << 1) | \
  1666. (0x1 << 2) | \
  1667. (0x1 << 3) | \
  1668. (0x1 << 4))
  1669. #define MP_CPUSYS_TOP_MISC_DCM_REG0_OFF ((0x0 << 0) | \
  1670. (0x0 << 1) | \
  1671. (0x0 << 2) | \
  1672. (0x0 << 3) | \
  1673. (0x0 << 4))
  1674. bool dcm_mp_cpusys_top_misc_dcm_is_on(void)
  1675. {
  1676. bool ret = true;
  1677. ret &= ((reg_read(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0) &
  1678. MP_CPUSYS_TOP_MISC_DCM_REG0_MASK) ==
  1679. (unsigned int) MP_CPUSYS_TOP_MISC_DCM_REG0_ON);
  1680. return ret;
  1681. }
  1682. void dcm_mp_cpusys_top_misc_dcm(int on)
  1683. {
  1684. if (on) {
  1685. /* TINFO = "Turn ON DCM 'mp_cpusys_top_misc_dcm'" */
  1686. reg_write(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0,
  1687. (reg_read(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0) &
  1688. ~MP_CPUSYS_TOP_MISC_DCM_REG0_MASK) |
  1689. MP_CPUSYS_TOP_MISC_DCM_REG0_ON);
  1690. } else {
  1691. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_misc_dcm'" */
  1692. reg_write(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0,
  1693. (reg_read(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0) &
  1694. ~MP_CPUSYS_TOP_MISC_DCM_REG0_MASK) |
  1695. MP_CPUSYS_TOP_MISC_DCM_REG0_OFF);
  1696. }
  1697. }
  1698. #define MP_CPUSYS_TOP_MP0_QDCM_REG0_MASK ((0x1 << 0) | \
  1699. (0x1 << 1) | \
  1700. (0x1 << 2) | \
  1701. (0x1 << 3))
  1702. #define MP_CPUSYS_TOP_MP0_QDCM_REG0_ON ((0x1 << 0) | \
  1703. (0x1 << 1) | \
  1704. (0x1 << 2) | \
  1705. (0x1 << 3))
  1706. #define MP_CPUSYS_TOP_MP0_QDCM_REG0_OFF ((0x0 << 0) | \
  1707. (0x0 << 1) | \
  1708. (0x0 << 2) | \
  1709. (0x0 << 3))
  1710. bool dcm_mp_cpusys_top_mp0_qdcm_is_on(void)
  1711. {
  1712. bool ret = true;
  1713. ret &= ((reg_read(MP_CPUSYS_TOP_MP0_DCM_CFG0) &
  1714. MP_CPUSYS_TOP_MP0_QDCM_REG0_MASK) ==
  1715. (unsigned int) MP_CPUSYS_TOP_MP0_QDCM_REG0_ON);
  1716. return ret;
  1717. }
  1718. void dcm_mp_cpusys_top_mp0_qdcm(int on)
  1719. {
  1720. if (on) {
  1721. /* TINFO = "Turn ON DCM 'mp_cpusys_top_mp0_qdcm'" */
  1722. reg_write(MP_CPUSYS_TOP_MP0_DCM_CFG0,
  1723. (reg_read(MP_CPUSYS_TOP_MP0_DCM_CFG0) &
  1724. ~MP_CPUSYS_TOP_MP0_QDCM_REG0_MASK) |
  1725. MP_CPUSYS_TOP_MP0_QDCM_REG0_ON);
  1726. } else {
  1727. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_mp0_qdcm'" */
  1728. reg_write(MP_CPUSYS_TOP_MP0_DCM_CFG0,
  1729. (reg_read(MP_CPUSYS_TOP_MP0_DCM_CFG0) &
  1730. ~MP_CPUSYS_TOP_MP0_QDCM_REG0_MASK) |
  1731. MP_CPUSYS_TOP_MP0_QDCM_REG0_OFF);
  1732. }
  1733. }
  1734. #define CPCCFG_REG_EMI_WFIFO_REG0_MASK ((0x1 << 0) | \
  1735. (0x1 << 2))
  1736. #define CPCCFG_REG_EMI_WFIFO_REG0_ON ((0x1 << 0) | \
  1737. (0x1 << 2))
  1738. #define CPCCFG_REG_EMI_WFIFO_REG0_OFF ((0x0 << 0) | \
  1739. (0x0 << 2))
  1740. bool dcm_cpccfg_reg_emi_wfifo_is_on(void)
  1741. {
  1742. bool ret = true;
  1743. ret &= ((reg_read(CPCCFG_REG_EMI_WFIFO) &
  1744. CPCCFG_REG_EMI_WFIFO_REG0_MASK) ==
  1745. (unsigned int) CPCCFG_REG_EMI_WFIFO_REG0_ON);
  1746. return ret;
  1747. }
  1748. void dcm_cpccfg_reg_emi_wfifo(int on)
  1749. {
  1750. if (on) {
  1751. /* TINFO = "Turn ON DCM 'cpccfg_reg_emi_wfifo'" */
  1752. reg_write(CPCCFG_REG_EMI_WFIFO,
  1753. (reg_read(CPCCFG_REG_EMI_WFIFO) &
  1754. ~CPCCFG_REG_EMI_WFIFO_REG0_MASK) |
  1755. CPCCFG_REG_EMI_WFIFO_REG0_ON);
  1756. } else {
  1757. /* TINFO = "Turn OFF DCM 'cpccfg_reg_emi_wfifo'" */
  1758. reg_write(CPCCFG_REG_EMI_WFIFO,
  1759. (reg_read(CPCCFG_REG_EMI_WFIFO) &
  1760. ~CPCCFG_REG_EMI_WFIFO_REG0_MASK) |
  1761. CPCCFG_REG_EMI_WFIFO_REG0_OFF);
  1762. }
  1763. }