mtk_dcm_autogen.c 39 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471
  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) 2015. 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 0x8200028B
  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. // ========== auto gen code 2018 1213 ====================
  58. #define INFRACFG_AO_AUDIO_BUS_REG0_MASK ((0x1 << 29))
  59. #define INFRACFG_AO_AUDIO_BUS_REG0_ON ((0x1 << 29))
  60. #define INFRACFG_AO_AUDIO_BUS_REG0_OFF ((0x0 << 29))
  61. bool dcm_infracfg_ao_audio_bus_is_on(void)
  62. {
  63. bool ret = true;
  64. ret &= ((reg_read(PERI_BUS_DCM_CTRL) &
  65. INFRACFG_AO_AUDIO_BUS_REG0_MASK) ==
  66. (unsigned int) INFRACFG_AO_AUDIO_BUS_REG0_ON);
  67. return ret;
  68. }
  69. void dcm_infracfg_ao_audio_bus(int on)
  70. {
  71. if (on) {
  72. /* TINFO = "Turn ON DCM 'infracfg_ao_audio_bus'" */
  73. reg_write(PERI_BUS_DCM_CTRL,
  74. (reg_read(PERI_BUS_DCM_CTRL) &
  75. ~INFRACFG_AO_AUDIO_BUS_REG0_MASK) |
  76. INFRACFG_AO_AUDIO_BUS_REG0_ON);
  77. } else {
  78. /* TINFO = "Turn OFF DCM 'infracfg_ao_audio_bus'" */
  79. reg_write(PERI_BUS_DCM_CTRL,
  80. (reg_read(PERI_BUS_DCM_CTRL) &
  81. ~INFRACFG_AO_AUDIO_BUS_REG0_MASK) |
  82. INFRACFG_AO_AUDIO_BUS_REG0_OFF);
  83. }
  84. }
  85. #define INFRACFG_AO_ICUSB_BUS_REG0_MASK ((0x1 << 28))
  86. #define INFRACFG_AO_ICUSB_BUS_REG0_ON ((0x1 << 28))
  87. #define INFRACFG_AO_ICUSB_BUS_REG0_OFF ((0x0 << 28))
  88. bool dcm_infracfg_ao_icusb_bus_is_on(void)
  89. {
  90. bool ret = true;
  91. ret &= ((reg_read(PERI_BUS_DCM_CTRL) &
  92. INFRACFG_AO_ICUSB_BUS_REG0_MASK) ==
  93. (unsigned int) INFRACFG_AO_ICUSB_BUS_REG0_ON);
  94. return ret;
  95. }
  96. void dcm_infracfg_ao_icusb_bus(int on)
  97. {
  98. if (on) {
  99. /* TINFO = "Turn ON DCM 'infracfg_ao_icusb_bus'" */
  100. reg_write(PERI_BUS_DCM_CTRL,
  101. (reg_read(PERI_BUS_DCM_CTRL) &
  102. ~INFRACFG_AO_ICUSB_BUS_REG0_MASK) |
  103. INFRACFG_AO_ICUSB_BUS_REG0_ON);
  104. } else {
  105. /* TINFO = "Turn OFF DCM 'infracfg_ao_icusb_bus'" */
  106. reg_write(PERI_BUS_DCM_CTRL,
  107. (reg_read(PERI_BUS_DCM_CTRL) &
  108. ~INFRACFG_AO_ICUSB_BUS_REG0_MASK) |
  109. INFRACFG_AO_ICUSB_BUS_REG0_OFF);
  110. }
  111. }
  112. #define INFRACFG_AO_INFRA_BUS_REG0_MASK ((0x1 << 0) | \
  113. (0x1 << 1) | \
  114. (0x1 << 2) | \
  115. (0x1 << 3) | \
  116. (0x1 << 4) | \
  117. (0x1f << 5) | \
  118. (0x1f << 10) | \
  119. (0x1 << 20) | \
  120. (0x1 << 21) | \
  121. (0x1 << 22) | \
  122. (0x1 << 23) | \
  123. (0x1 << 30))
  124. #define INFRACFG_AO_INFRA_BUS_REG0_ON ((0x1 << 0) | \
  125. (0x1 << 1) | \
  126. (0x0 << 2) | \
  127. (0x0 << 3) | \
  128. (0x0 << 4) | \
  129. (0x10 << 5) | \
  130. (0x1 << 10) | \
  131. (0x1 << 20) | \
  132. (0x1 << 21) | \
  133. (0x1 << 22) | \
  134. (0x1 << 23) | \
  135. (0x1 << 30))
  136. #define INFRACFG_AO_INFRA_BUS_REG0_OFF ((0x0 << 0) | \
  137. (0x0 << 1) | \
  138. (0x0 << 2) | \
  139. (0x0 << 3) | \
  140. (0x0 << 4) | \
  141. (0x10 << 5) | \
  142. (0x1 << 10) | \
  143. (0x0 << 20) | \
  144. (0x1 << 21) | \
  145. (0x1 << 22) | \
  146. (0x0 << 23) | \
  147. (0x0 << 30))
  148. bool dcm_infracfg_ao_infra_bus_is_on(void)
  149. {
  150. bool ret = true;
  151. ret &= ((reg_read(INFRA_BUS_DCM_CTRL) &
  152. INFRACFG_AO_INFRA_BUS_REG0_MASK) ==
  153. (unsigned int) INFRACFG_AO_INFRA_BUS_REG0_ON);
  154. return ret;
  155. }
  156. void dcm_infracfg_ao_infra_bus(int on)
  157. {
  158. if (on) {
  159. /* TINFO = "Turn ON DCM 'infracfg_ao_infra_bus'" */
  160. reg_write(INFRA_BUS_DCM_CTRL,
  161. (reg_read(INFRA_BUS_DCM_CTRL) &
  162. ~INFRACFG_AO_INFRA_BUS_REG0_MASK) |
  163. INFRACFG_AO_INFRA_BUS_REG0_ON);
  164. } else {
  165. /* TINFO = "Turn OFF DCM 'infracfg_ao_infra_bus'" */
  166. reg_write(INFRA_BUS_DCM_CTRL,
  167. (reg_read(INFRA_BUS_DCM_CTRL) &
  168. ~INFRACFG_AO_INFRA_BUS_REG0_MASK) |
  169. INFRACFG_AO_INFRA_BUS_REG0_OFF);
  170. }
  171. }
  172. #define INFRACFG_AO_INFRA_DFS_MEM_REG0_MASK ((0x1 << 0) | \
  173. (0x1f << 1) | \
  174. (0x1 << 6) | \
  175. (0x1 << 7) | \
  176. (0x1 << 8) | \
  177. (0x1f << 16) | \
  178. (0x1f << 21) | \
  179. (0x1 << 26))
  180. #define INFRACFG_AO_INFRA_DFS_MEM_REG0_ON ((0x0 << 0) | \
  181. (0x0 << 1) | \
  182. (0x0 << 6) | \
  183. (0x1 << 7) | \
  184. (0x1 << 8) | \
  185. (0x0 << 16) | \
  186. (0x1f << 21) | \
  187. (0x0 << 26))
  188. #define INFRACFG_AO_INFRA_DFS_MEM_REG0_OFF ((0x0 << 0) | \
  189. (0x0 << 1) | \
  190. (0x0 << 6) | \
  191. (0x1 << 7) | \
  192. (0x1 << 8) | \
  193. (0x0 << 16) | \
  194. (0x1f << 21) | \
  195. (0x0 << 26))
  196. bool dcm_infracfg_ao_infra_dfs_mem_is_on(void)
  197. {
  198. bool ret = true;
  199. ret &= ((reg_read(DFS_MEM_DCM_CTRL) &
  200. INFRACFG_AO_INFRA_DFS_MEM_REG0_MASK) ==
  201. (unsigned int) INFRACFG_AO_INFRA_DFS_MEM_REG0_ON);
  202. return ret;
  203. }
  204. void dcm_infracfg_ao_infra_dfs_mem(int on)
  205. {
  206. if (on) {
  207. /* TINFO = "Turn ON DCM 'infracfg_ao_infra_dfs_mem'" */
  208. reg_write(DFS_MEM_DCM_CTRL,
  209. (reg_read(DFS_MEM_DCM_CTRL) &
  210. ~INFRACFG_AO_INFRA_DFS_MEM_REG0_MASK) |
  211. INFRACFG_AO_INFRA_DFS_MEM_REG0_ON);
  212. } else {
  213. /* TINFO = "Turn OFF DCM 'infracfg_ao_infra_dfs_mem'" */
  214. reg_write(DFS_MEM_DCM_CTRL,
  215. (reg_read(DFS_MEM_DCM_CTRL) &
  216. ~INFRACFG_AO_INFRA_DFS_MEM_REG0_MASK) |
  217. INFRACFG_AO_INFRA_DFS_MEM_REG0_OFF);
  218. }
  219. }
  220. #if 0
  221. #define INFRACFG_AO_INFRA_MEM_REG0_MASK ((0x1 << 0) | \
  222. (0x1f << 1) | \
  223. (0x1 << 6) | \
  224. (0x1 << 7) | \
  225. (0x1 << 8) | \
  226. (0x7f << 9) | \
  227. (0x1f << 16) | \
  228. (0x1f << 21) | \
  229. (0x1 << 26) | \
  230. (0x1 << 27) | \
  231. (0x1 << 28) | \
  232. (0x1 << 29) | \
  233. (0x1 << 31))
  234. #define INFRACFG_AO_INFRA_MEM_REG0_ON ((0x0 << 0) | \
  235. (0x0 << 1) | \
  236. (0x0 << 6) | \
  237. (0x1 << 7) | \
  238. (0x1 << 8) | \
  239. (0x0 << 9) | \
  240. (0x0 << 16) | \
  241. (0x1f << 21) | \
  242. (0x0 << 26) | \
  243. (0x1 << 27) | \
  244. (0x0 << 28) | \
  245. (0x0 << 29) | \
  246. (0x0 << 31))
  247. #define INFRACFG_AO_INFRA_MEM_REG0_OFF ((0x0 << 0) | \
  248. (0x0 << 1) | \
  249. (0x0 << 6) | \
  250. (0x1 << 7) | \
  251. (0x1 << 8) | \
  252. (0x0 << 9) | \
  253. (0x0 << 16) | \
  254. (0x1f << 21) | \
  255. (0x0 << 26) | \
  256. (0x1 << 27) | \
  257. (0x0 << 28) | \
  258. (0x0 << 29) | \
  259. (0x0 << 31))
  260. #endif
  261. #define INFRACFG_AO_INFRA_MEM_REG0_MASK (0x1 << 27)
  262. #define INFRACFG_AO_INFRA_MEM_REG0_ON (0x1 << 27)
  263. #define INFRACFG_AO_INFRA_MEM_REG0_OFF (0x0 << 27)
  264. bool dcm_infracfg_ao_infra_mem_is_on(void)
  265. {
  266. bool ret = true;
  267. ret &= ((reg_read(MEM_DCM_CTRL) &
  268. INFRACFG_AO_INFRA_MEM_REG0_MASK) ==
  269. (unsigned int) INFRACFG_AO_INFRA_MEM_REG0_ON);
  270. return ret;
  271. }
  272. void dcm_infracfg_ao_infra_mem(int on)
  273. {
  274. if (on) {
  275. /* TINFO = "Turn ON DCM 'infracfg_ao_infra_mem'" */
  276. reg_write(MEM_DCM_CTRL,
  277. (reg_read(MEM_DCM_CTRL) &
  278. ~INFRACFG_AO_INFRA_MEM_REG0_MASK) |
  279. INFRACFG_AO_INFRA_MEM_REG0_ON);
  280. } else {
  281. /* TINFO = "Turn OFF DCM 'infracfg_ao_infra_mem'" */
  282. reg_write(MEM_DCM_CTRL,
  283. (reg_read(MEM_DCM_CTRL) &
  284. ~INFRACFG_AO_INFRA_MEM_REG0_MASK) |
  285. INFRACFG_AO_INFRA_MEM_REG0_OFF);
  286. }
  287. }
  288. #define INFRACFG_AO_PERI_BUS_REG0_MASK ((0x1 << 0) | \
  289. (0x1 << 1) | \
  290. (0x1 << 3) | \
  291. (0x1 << 4) | \
  292. (0x1f << 5) | \
  293. (0x1f << 10) | \
  294. (0x1f << 15) | \
  295. (0x1 << 20) | \
  296. (0x1 << 21) | \
  297. (0x1 << 22) | \
  298. (0x1f << 23) | \
  299. (0x1 << 31))
  300. #define INFRACFG_AO_PERI_BUS_REG0_ON ((0x1 << 0) | \
  301. (0x1 << 1) | \
  302. (0x0 << 3) | \
  303. (0x0 << 4) | \
  304. (0x1f << 5) | \
  305. (0x0 << 10) | \
  306. (0x1f << 15) | \
  307. (0x1 << 20) | \
  308. (0x1 << 21) | \
  309. (0x1 << 22) | \
  310. (0x0 << 23) | \
  311. (0x1 << 31))
  312. #define INFRACFG_AO_PERI_BUS_REG0_OFF ((0x0 << 0) | \
  313. (0x0 << 1) | \
  314. (0x0 << 3) | \
  315. (0x0 << 4) | \
  316. (0x1f << 5) | \
  317. (0x1f << 10) | \
  318. (0x0 << 15) | \
  319. (0x0 << 20) | \
  320. (0x0 << 21) | \
  321. (0x0 << 22) | \
  322. (0x0 << 23) | \
  323. (0x0 << 31))
  324. bool dcm_infracfg_ao_peri_bus_is_on(void)
  325. {
  326. bool ret = true;
  327. ret &= ((reg_read(PERI_BUS_DCM_CTRL) &
  328. INFRACFG_AO_PERI_BUS_REG0_MASK) ==
  329. (unsigned int) INFRACFG_AO_PERI_BUS_REG0_ON);
  330. return ret;
  331. }
  332. void dcm_infracfg_ao_peri_bus(int on)
  333. {
  334. if (on) {
  335. /* TINFO = "Turn ON DCM 'infracfg_ao_peri_bus'" */
  336. reg_write(PERI_BUS_DCM_CTRL,
  337. (reg_read(PERI_BUS_DCM_CTRL) &
  338. ~INFRACFG_AO_PERI_BUS_REG0_MASK) |
  339. INFRACFG_AO_PERI_BUS_REG0_ON);
  340. } else {
  341. /* TINFO = "Turn OFF DCM 'infracfg_ao_peri_bus'" */
  342. reg_write(PERI_BUS_DCM_CTRL,
  343. (reg_read(PERI_BUS_DCM_CTRL) &
  344. ~INFRACFG_AO_PERI_BUS_REG0_MASK) |
  345. INFRACFG_AO_PERI_BUS_REG0_OFF);
  346. }
  347. }
  348. #if 0
  349. #define PWRAP_PMIC_WRAP_REG0_MASK ((0x1 << 0) | \
  350. (0x1 << 1) | \
  351. (0x1 << 2) | \
  352. (0x1 << 3) | \
  353. (0x1 << 4) | \
  354. (0x1 << 5) | \
  355. (0x1 << 6) | \
  356. (0x1 << 7) | \
  357. (0x1 << 8) | \
  358. (0x1 << 9) | \
  359. (0x1 << 10) | \
  360. (0x1 << 11) | \
  361. (0x1 << 12) | \
  362. (0x1 << 13) | \
  363. (0x1 << 14) | \
  364. (0x1 << 15) | \
  365. (0x1 << 16) | \
  366. (0x1 << 17) | \
  367. (0x1 << 18) | \
  368. (0x1 << 19) | \
  369. (0x1 << 20) | \
  370. (0x1 << 21) | \
  371. (0x1 << 22))
  372. #define PWRAP_PMIC_WRAP_REG0_ON ((0x0 << 0) | \
  373. (0x0 << 1) | \
  374. (0x0 << 2) | \
  375. (0x0 << 3) | \
  376. (0x0 << 4) | \
  377. (0x0 << 5) | \
  378. (0x0 << 6) | \
  379. (0x0 << 7) | \
  380. (0x0 << 8) | \
  381. (0x0 << 9) | \
  382. (0x0 << 10) | \
  383. (0x0 << 11) | \
  384. (0x0 << 12) | \
  385. (0x0 << 13) | \
  386. (0x0 << 14) | \
  387. (0x0 << 15) | \
  388. (0x0 << 16) | \
  389. (0x0 << 17) | \
  390. (0x0 << 18) | \
  391. (0x0 << 19) | \
  392. (0x0 << 20) | \
  393. (0x0 << 21) | \
  394. (0x0 << 22))
  395. #define PWRAP_PMIC_WRAP_REG0_OFF ((0x0 << 0) | \
  396. (0x0 << 1) | \
  397. (0x0 << 2) | \
  398. (0x0 << 3) | \
  399. (0x0 << 4) | \
  400. (0x0 << 5) | \
  401. (0x0 << 6) | \
  402. (0x0 << 7) | \
  403. (0x0 << 8) | \
  404. (0x0 << 9) | \
  405. (0x0 << 10) | \
  406. (0x0 << 11) | \
  407. (0x0 << 12) | \
  408. (0x0 << 13) | \
  409. (0x0 << 14) | \
  410. (0x0 << 15) | \
  411. (0x0 << 16) | \
  412. (0x0 << 17) | \
  413. (0x0 << 18) | \
  414. (0x0 << 19) | \
  415. (0x0 << 20) | \
  416. (0x0 << 21) | \
  417. (0x0 << 22))
  418. bool dcm_pwrap_pmic_wrap_is_on(void)
  419. {
  420. bool ret = true;
  421. ret &= ((reg_read(PMIC_WRAP_DCM_EN) &
  422. PWRAP_PMIC_WRAP_REG0_MASK) ==
  423. (unsigned int) PWRAP_PMIC_WRAP_REG0_ON);
  424. return ret;
  425. }
  426. void dcm_pwrap_pmic_wrap(int on)
  427. {
  428. if (on) {
  429. /* TINFO = "Turn ON DCM 'pwrap_pmic_wrap'" */
  430. reg_write(PMIC_WRAP_DCM_EN,
  431. (reg_read(PMIC_WRAP_DCM_EN) &
  432. ~PWRAP_PMIC_WRAP_REG0_MASK) |
  433. PWRAP_PMIC_WRAP_REG0_ON);
  434. } else {
  435. /* TINFO = "Turn OFF DCM 'pwrap_pmic_wrap'" */
  436. reg_write(PMIC_WRAP_DCM_EN,
  437. (reg_read(PMIC_WRAP_DCM_EN) &
  438. ~PWRAP_PMIC_WRAP_REG0_MASK) |
  439. PWRAP_PMIC_WRAP_REG0_OFF);
  440. }
  441. }
  442. #endif
  443. #define EMI_EMI_DCM_REG0_MASK ((0xff << 24))
  444. #define EMI_EMI_DCM_REG1_MASK ((0xff << 24))
  445. #define EMI_EMI_DCM_REG0_ON ((0x0 << 24))
  446. #define EMI_EMI_DCM_REG1_ON ((0x0 << 24))
  447. #define EMI_EMI_DCM_REG0_OFF ((0xff << 24))
  448. #define EMI_EMI_DCM_REG1_OFF ((0xff << 24))
  449. bool dcm_emi_emi_dcm_is_on(void)
  450. {
  451. bool ret = true;
  452. ret &= ((reg_read(EMI_CONM) &
  453. EMI_EMI_DCM_REG0_MASK) ==
  454. (unsigned int) EMI_EMI_DCM_REG0_ON);
  455. ret &= ((reg_read(EMI_CONN) &
  456. EMI_EMI_DCM_REG1_MASK) ==
  457. (unsigned int) EMI_EMI_DCM_REG1_ON);
  458. return ret;
  459. }
  460. void dcm_emi_emi_dcm(int on)
  461. {
  462. if (on) {
  463. /* TINFO = "Turn ON DCM 'emi_emi_dcm'" */
  464. reg_write(EMI_CONM,
  465. (reg_read(EMI_CONM) &
  466. ~EMI_EMI_DCM_REG0_MASK) |
  467. EMI_EMI_DCM_REG0_ON);
  468. reg_write(EMI_CONN,
  469. (reg_read(EMI_CONN) &
  470. ~EMI_EMI_DCM_REG1_MASK) |
  471. EMI_EMI_DCM_REG1_ON);
  472. } else {
  473. /* TINFO = "Turn OFF DCM 'emi_emi_dcm'" */
  474. reg_write(EMI_CONM,
  475. (reg_read(EMI_CONM) &
  476. ~EMI_EMI_DCM_REG0_MASK) |
  477. EMI_EMI_DCM_REG0_OFF);
  478. reg_write(EMI_CONN,
  479. (reg_read(EMI_CONN) &
  480. ~EMI_EMI_DCM_REG1_MASK) |
  481. EMI_EMI_DCM_REG1_OFF);
  482. }
  483. }
  484. #define DRAMC_CH0_TOP0_DDRPHY_REG0_MASK ((0x1 << 8) | \
  485. (0x1 << 9) | \
  486. (0x1 << 10) | \
  487. (0x1 << 11) | \
  488. (0x1 << 12) | \
  489. (0x1 << 13) | \
  490. (0x1 << 14) | \
  491. (0x1 << 15) | \
  492. (0x1 << 16) | \
  493. (0x1 << 17) | \
  494. (0x1 << 19))
  495. #define DRAMC_CH0_TOP0_DDRPHY_REG1_MASK ((0x1 << 6) | \
  496. (0x1 << 7) | \
  497. (0x1f << 21) | \
  498. (0x1 << 26))
  499. #define DRAMC_CH0_TOP0_DDRPHY_REG2_MASK ((0x1 << 26) | \
  500. (0x1 << 27))
  501. #define DRAMC_CH0_TOP0_DDRPHY_REG0_ON ((0x0 << 8) | \
  502. (0x0 << 9) | \
  503. (0x0 << 10) | \
  504. (0x0 << 11) | \
  505. (0x0 << 12) | \
  506. (0x0 << 13) | \
  507. (0x0 << 14) | \
  508. (0x0 << 15) | \
  509. (0x0 << 16) | \
  510. (0x0 << 17) | \
  511. (0x0 << 19))
  512. #define DRAMC_CH0_TOP0_DDRPHY_REG1_ON ((0x0 << 6) | \
  513. (0x0 << 7) | \
  514. (0x8 << 21) | \
  515. (0x0 << 26))
  516. #define DRAMC_CH0_TOP0_DDRPHY_REG2_ON ((0x0 << 26) | \
  517. (0x0 << 27))
  518. #define DRAMC_CH0_TOP0_DDRPHY_REG0_OFF ((0x1 << 8) | \
  519. (0x1 << 9) | \
  520. (0x1 << 10) | \
  521. (0x1 << 11) | \
  522. (0x1 << 12) | \
  523. (0x1 << 13) | \
  524. (0x1 << 14) | \
  525. (0x1 << 15) | \
  526. (0x1 << 16) | \
  527. (0x1 << 17) | \
  528. (0x1 << 19))
  529. #define DRAMC_CH0_TOP0_DDRPHY_REG1_OFF ((0x1 << 6) | \
  530. (0x1 << 7) | \
  531. (0x0 << 21) | \
  532. (0x0 << 26))
  533. #define DRAMC_CH0_TOP0_DDRPHY_REG2_OFF ((0x1 << 26) | \
  534. (0x1 << 27))
  535. bool dcm_dramc_ch0_top0_ddrphy_is_on(void)
  536. {
  537. bool ret = true;
  538. ret &= ((reg_read(DRAMC_CH0_TOP0_MISC_CG_CTRL0) &
  539. DRAMC_CH0_TOP0_DDRPHY_REG0_MASK) ==
  540. (unsigned int) DRAMC_CH0_TOP0_DDRPHY_REG0_ON);
  541. ret &= ((reg_read(DRAMC_CH0_TOP0_MISC_CG_CTRL2) &
  542. DRAMC_CH0_TOP0_DDRPHY_REG1_MASK) ==
  543. (unsigned int) DRAMC_CH0_TOP0_DDRPHY_REG1_ON);
  544. ret &= ((reg_read(DRAMC_CH0_TOP0_MISC_CTRL3) &
  545. DRAMC_CH0_TOP0_DDRPHY_REG2_MASK) ==
  546. (unsigned int) DRAMC_CH0_TOP0_DDRPHY_REG2_ON);
  547. return ret;
  548. }
  549. void dcm_dramc_ch0_top0_ddrphy(int on)
  550. {
  551. if (on) {
  552. /* TINFO = "Turn ON DCM 'dramc_ch0_top0_ddrphy'" */
  553. reg_write(DRAMC_CH0_TOP0_MISC_CG_CTRL0,
  554. (reg_read(DRAMC_CH0_TOP0_MISC_CG_CTRL0) &
  555. ~DRAMC_CH0_TOP0_DDRPHY_REG0_MASK) |
  556. DRAMC_CH0_TOP0_DDRPHY_REG0_ON);
  557. reg_write(DRAMC_CH0_TOP0_MISC_CG_CTRL2,
  558. (reg_read(DRAMC_CH0_TOP0_MISC_CG_CTRL2) &
  559. ~DRAMC_CH0_TOP0_DDRPHY_REG1_MASK) |
  560. DRAMC_CH0_TOP0_DDRPHY_REG1_ON);
  561. reg_write(DRAMC_CH0_TOP0_MISC_CTRL3,
  562. (reg_read(DRAMC_CH0_TOP0_MISC_CTRL3) &
  563. ~DRAMC_CH0_TOP0_DDRPHY_REG2_MASK) |
  564. DRAMC_CH0_TOP0_DDRPHY_REG2_ON);
  565. } else {
  566. /* TINFO = "Turn OFF DCM 'dramc_ch0_top0_ddrphy'" */
  567. reg_write(DRAMC_CH0_TOP0_MISC_CG_CTRL0,
  568. (reg_read(DRAMC_CH0_TOP0_MISC_CG_CTRL0) &
  569. ~DRAMC_CH0_TOP0_DDRPHY_REG0_MASK) |
  570. DRAMC_CH0_TOP0_DDRPHY_REG0_OFF);
  571. reg_write(DRAMC_CH0_TOP0_MISC_CG_CTRL2,
  572. (reg_read(DRAMC_CH0_TOP0_MISC_CG_CTRL2) &
  573. ~DRAMC_CH0_TOP0_DDRPHY_REG1_MASK) |
  574. DRAMC_CH0_TOP0_DDRPHY_REG1_OFF);
  575. reg_write(DRAMC_CH0_TOP0_MISC_CTRL3,
  576. (reg_read(DRAMC_CH0_TOP0_MISC_CTRL3) &
  577. ~DRAMC_CH0_TOP0_DDRPHY_REG2_MASK) |
  578. DRAMC_CH0_TOP0_DDRPHY_REG2_OFF);
  579. }
  580. }
  581. #define DRAMC_CH0_TOP1_DRAMC_DCM_REG0_MASK ((0x1 << 0) | \
  582. (0x1 << 1) | \
  583. (0x1 << 2) | \
  584. (0x1 << 26) | \
  585. (0x1 << 30) | \
  586. (0x1 << 31))
  587. #define DRAMC_CH0_TOP1_DRAMC_DCM_REG1_MASK ((0x1 << 31))
  588. #define DRAMC_CH0_TOP1_DRAMC_DCM_REG0_ON ((0x1 << 0) | \
  589. (0x1 << 1) | \
  590. (0x1 << 2) | \
  591. (0x0 << 26) | \
  592. (0x1 << 30) | \
  593. (0x1 << 31))
  594. #define DRAMC_CH0_TOP1_DRAMC_DCM_REG1_ON ((0x1 << 31))
  595. #define DRAMC_CH0_TOP1_DRAMC_DCM_REG0_OFF ((0x0 << 0) | \
  596. (0x0 << 1) | \
  597. (0x0 << 2) | \
  598. (0x1 << 26) | \
  599. (0x0 << 30) | \
  600. (0x0 << 31))
  601. #define DRAMC_CH0_TOP1_DRAMC_DCM_REG1_OFF ((0x0 << 31))
  602. bool dcm_dramc_ch0_top1_dramc_dcm_is_on(void)
  603. {
  604. bool ret = true;
  605. ret &= ((reg_read(DRAMC_CH0_TOP1_DRAMC_PD_CTRL) &
  606. DRAMC_CH0_TOP1_DRAMC_DCM_REG0_MASK) ==
  607. (unsigned int) DRAMC_CH0_TOP1_DRAMC_DCM_REG0_ON);
  608. ret &= ((reg_read(DRAMC_CH0_TOP1_CLKAR) &
  609. DRAMC_CH0_TOP1_DRAMC_DCM_REG1_MASK) ==
  610. (unsigned int) DRAMC_CH0_TOP1_DRAMC_DCM_REG1_ON);
  611. return ret;
  612. }
  613. void dcm_dramc_ch0_top1_dramc_dcm(int on)
  614. {
  615. if (on) {
  616. /* TINFO = "Turn ON DCM 'dramc_ch0_top1_dramc_dcm'" */
  617. reg_write(DRAMC_CH0_TOP1_DRAMC_PD_CTRL,
  618. (reg_read(DRAMC_CH0_TOP1_DRAMC_PD_CTRL) &
  619. ~DRAMC_CH0_TOP1_DRAMC_DCM_REG0_MASK) |
  620. DRAMC_CH0_TOP1_DRAMC_DCM_REG0_ON);
  621. reg_write(DRAMC_CH0_TOP1_CLKAR,
  622. (reg_read(DRAMC_CH0_TOP1_CLKAR) &
  623. ~DRAMC_CH0_TOP1_DRAMC_DCM_REG1_MASK) |
  624. DRAMC_CH0_TOP1_DRAMC_DCM_REG1_ON);
  625. } else {
  626. /* TINFO = "Turn OFF DCM 'dramc_ch0_top1_dramc_dcm'" */
  627. reg_write(DRAMC_CH0_TOP1_DRAMC_PD_CTRL,
  628. (reg_read(DRAMC_CH0_TOP1_DRAMC_PD_CTRL) &
  629. ~DRAMC_CH0_TOP1_DRAMC_DCM_REG0_MASK) |
  630. DRAMC_CH0_TOP1_DRAMC_DCM_REG0_OFF);
  631. reg_write(DRAMC_CH0_TOP1_CLKAR,
  632. (reg_read(DRAMC_CH0_TOP1_CLKAR) &
  633. ~DRAMC_CH0_TOP1_DRAMC_DCM_REG1_MASK) |
  634. DRAMC_CH0_TOP1_DRAMC_DCM_REG1_OFF);
  635. }
  636. }
  637. #define CHN0_EMI_EMI_DCM_REG0_MASK ((0xff << 24))
  638. #define CHN0_EMI_EMI_DCM_REG0_ON ((0x0 << 24))
  639. #define CHN0_EMI_EMI_DCM_REG0_OFF ((0xff << 24))
  640. bool dcm_chn0_emi_emi_dcm_is_on(void)
  641. {
  642. bool ret = true;
  643. ret &= ((reg_read(CHN0_EMI_CHN_EMI_CONB) &
  644. CHN0_EMI_EMI_DCM_REG0_MASK) ==
  645. (unsigned int) CHN0_EMI_EMI_DCM_REG0_ON);
  646. return ret;
  647. }
  648. void dcm_chn0_emi_emi_dcm(int on)
  649. {
  650. if (on) {
  651. /* TINFO = "Turn ON DCM 'chn0_emi_emi_dcm'" */
  652. reg_write(CHN0_EMI_CHN_EMI_CONB,
  653. (reg_read(CHN0_EMI_CHN_EMI_CONB) &
  654. ~CHN0_EMI_EMI_DCM_REG0_MASK) |
  655. CHN0_EMI_EMI_DCM_REG0_ON);
  656. } else {
  657. /* TINFO = "Turn OFF DCM 'chn0_emi_emi_dcm'" */
  658. reg_write(CHN0_EMI_CHN_EMI_CONB,
  659. (reg_read(CHN0_EMI_CHN_EMI_CONB) &
  660. ~CHN0_EMI_EMI_DCM_REG0_MASK) |
  661. CHN0_EMI_EMI_DCM_REG0_OFF);
  662. }
  663. }
  664. #define DRAMC_CH1_TOP0_DDRPHY_REG0_MASK ((0x1 << 8) | \
  665. (0x1 << 9) | \
  666. (0x1 << 10) | \
  667. (0x1 << 11) | \
  668. (0x1 << 12) | \
  669. (0x1 << 13) | \
  670. (0x1 << 14) | \
  671. (0x1 << 15) | \
  672. (0x1 << 16) | \
  673. (0x1 << 17) | \
  674. (0x1 << 19))
  675. #define DRAMC_CH1_TOP0_DDRPHY_REG1_MASK ((0x1 << 6) | \
  676. (0x1 << 7) | \
  677. (0x1f << 21) | \
  678. (0x1 << 26))
  679. #define DRAMC_CH1_TOP0_DDRPHY_REG2_MASK ((0x1 << 26) | \
  680. (0x1 << 27))
  681. #define DRAMC_CH1_TOP0_DDRPHY_REG0_ON ((0x0 << 8) | \
  682. (0x0 << 9) | \
  683. (0x0 << 10) | \
  684. (0x0 << 11) | \
  685. (0x0 << 12) | \
  686. (0x0 << 13) | \
  687. (0x0 << 14) | \
  688. (0x0 << 15) | \
  689. (0x0 << 16) | \
  690. (0x0 << 17) | \
  691. (0x0 << 19))
  692. #define DRAMC_CH1_TOP0_DDRPHY_REG1_ON ((0x0 << 6) | \
  693. (0x0 << 7) | \
  694. (0x8 << 21) | \
  695. (0x0 << 26))
  696. #define DRAMC_CH1_TOP0_DDRPHY_REG2_ON ((0x0 << 26) | \
  697. (0x0 << 27))
  698. #define DRAMC_CH1_TOP0_DDRPHY_REG0_OFF ((0x1 << 8) | \
  699. (0x1 << 9) | \
  700. (0x1 << 10) | \
  701. (0x1 << 11) | \
  702. (0x1 << 12) | \
  703. (0x1 << 13) | \
  704. (0x1 << 14) | \
  705. (0x1 << 15) | \
  706. (0x1 << 16) | \
  707. (0x1 << 17) | \
  708. (0x1 << 19))
  709. #define DRAMC_CH1_TOP0_DDRPHY_REG1_OFF ((0x1 << 6) | \
  710. (0x1 << 7) | \
  711. (0x0 << 21) | \
  712. (0x0 << 26))
  713. #define DRAMC_CH1_TOP0_DDRPHY_REG2_OFF ((0x1 << 26) | \
  714. (0x1 << 27))
  715. bool dcm_dramc_ch1_top0_ddrphy_is_on(void)
  716. {
  717. bool ret = true;
  718. ret &= ((reg_read(DRAMC_CH1_TOP0_MISC_CG_CTRL0) &
  719. DRAMC_CH1_TOP0_DDRPHY_REG0_MASK) ==
  720. (unsigned int) DRAMC_CH1_TOP0_DDRPHY_REG0_ON);
  721. ret &= ((reg_read(DRAMC_CH1_TOP0_MISC_CG_CTRL2) &
  722. DRAMC_CH1_TOP0_DDRPHY_REG1_MASK) ==
  723. (unsigned int) DRAMC_CH1_TOP0_DDRPHY_REG1_ON);
  724. ret &= ((reg_read(DRAMC_CH1_TOP0_MISC_CTRL3) &
  725. DRAMC_CH1_TOP0_DDRPHY_REG2_MASK) ==
  726. (unsigned int) DRAMC_CH1_TOP0_DDRPHY_REG2_ON);
  727. return ret;
  728. }
  729. void dcm_dramc_ch1_top0_ddrphy(int on)
  730. {
  731. if (on) {
  732. /* TINFO = "Turn ON DCM 'dramc_ch1_top0_ddrphy'" */
  733. reg_write(DRAMC_CH1_TOP0_MISC_CG_CTRL0,
  734. (reg_read(DRAMC_CH1_TOP0_MISC_CG_CTRL0) &
  735. ~DRAMC_CH1_TOP0_DDRPHY_REG0_MASK) |
  736. DRAMC_CH1_TOP0_DDRPHY_REG0_ON);
  737. reg_write(DRAMC_CH1_TOP0_MISC_CG_CTRL2,
  738. (reg_read(DRAMC_CH1_TOP0_MISC_CG_CTRL2) &
  739. ~DRAMC_CH1_TOP0_DDRPHY_REG1_MASK) |
  740. DRAMC_CH1_TOP0_DDRPHY_REG1_ON);
  741. reg_write(DRAMC_CH1_TOP0_MISC_CTRL3,
  742. (reg_read(DRAMC_CH1_TOP0_MISC_CTRL3) &
  743. ~DRAMC_CH1_TOP0_DDRPHY_REG2_MASK) |
  744. DRAMC_CH1_TOP0_DDRPHY_REG2_ON);
  745. } else {
  746. /* TINFO = "Turn OFF DCM 'dramc_ch1_top0_ddrphy'" */
  747. reg_write(DRAMC_CH1_TOP0_MISC_CG_CTRL0,
  748. (reg_read(DRAMC_CH1_TOP0_MISC_CG_CTRL0) &
  749. ~DRAMC_CH1_TOP0_DDRPHY_REG0_MASK) |
  750. DRAMC_CH1_TOP0_DDRPHY_REG0_OFF);
  751. reg_write(DRAMC_CH1_TOP0_MISC_CG_CTRL2,
  752. (reg_read(DRAMC_CH1_TOP0_MISC_CG_CTRL2) &
  753. ~DRAMC_CH1_TOP0_DDRPHY_REG1_MASK) |
  754. DRAMC_CH1_TOP0_DDRPHY_REG1_OFF);
  755. reg_write(DRAMC_CH1_TOP0_MISC_CTRL3,
  756. (reg_read(DRAMC_CH1_TOP0_MISC_CTRL3) &
  757. ~DRAMC_CH1_TOP0_DDRPHY_REG2_MASK) |
  758. DRAMC_CH1_TOP0_DDRPHY_REG2_OFF);
  759. }
  760. }
  761. #define DRAMC_CH1_TOP1_DRAMC_DCM_REG0_MASK ((0x1 << 0) | \
  762. (0x1 << 1) | \
  763. (0x1 << 2) | \
  764. (0x1 << 26) | \
  765. (0x1 << 30) | \
  766. (0x1 << 31))
  767. #define DRAMC_CH1_TOP1_DRAMC_DCM_REG1_MASK ((0x1 << 31))
  768. #define DRAMC_CH1_TOP1_DRAMC_DCM_REG0_ON ((0x1 << 0) | \
  769. (0x1 << 1) | \
  770. (0x1 << 2) | \
  771. (0x0 << 26) | \
  772. (0x1 << 30) | \
  773. (0x1 << 31))
  774. #define DRAMC_CH1_TOP1_DRAMC_DCM_REG1_ON ((0x1 << 31))
  775. #define DRAMC_CH1_TOP1_DRAMC_DCM_REG0_OFF ((0x0 << 0) | \
  776. (0x0 << 1) | \
  777. (0x0 << 2) | \
  778. (0x1 << 26) | \
  779. (0x0 << 30) | \
  780. (0x0 << 31))
  781. #define DRAMC_CH1_TOP1_DRAMC_DCM_REG1_OFF ((0x0 << 31))
  782. bool dcm_dramc_ch1_top1_dramc_dcm_is_on(void)
  783. {
  784. bool ret = true;
  785. ret &= ((reg_read(DRAMC_CH1_TOP1_DRAMC_PD_CTRL) &
  786. DRAMC_CH1_TOP1_DRAMC_DCM_REG0_MASK) ==
  787. (unsigned int) DRAMC_CH1_TOP1_DRAMC_DCM_REG0_ON);
  788. ret &= ((reg_read(DRAMC_CH1_TOP1_CLKAR) &
  789. DRAMC_CH1_TOP1_DRAMC_DCM_REG1_MASK) ==
  790. (unsigned int) DRAMC_CH1_TOP1_DRAMC_DCM_REG1_ON);
  791. return ret;
  792. }
  793. void dcm_dramc_ch1_top1_dramc_dcm(int on)
  794. {
  795. if (on) {
  796. /* TINFO = "Turn ON DCM 'dramc_ch1_top1_dramc_dcm'" */
  797. reg_write(DRAMC_CH1_TOP1_DRAMC_PD_CTRL,
  798. (reg_read(DRAMC_CH1_TOP1_DRAMC_PD_CTRL) &
  799. ~DRAMC_CH1_TOP1_DRAMC_DCM_REG0_MASK) |
  800. DRAMC_CH1_TOP1_DRAMC_DCM_REG0_ON);
  801. reg_write(DRAMC_CH1_TOP1_CLKAR,
  802. (reg_read(DRAMC_CH1_TOP1_CLKAR) &
  803. ~DRAMC_CH1_TOP1_DRAMC_DCM_REG1_MASK) |
  804. DRAMC_CH1_TOP1_DRAMC_DCM_REG1_ON);
  805. } else {
  806. /* TINFO = "Turn OFF DCM 'dramc_ch1_top1_dramc_dcm'" */
  807. reg_write(DRAMC_CH1_TOP1_DRAMC_PD_CTRL,
  808. (reg_read(DRAMC_CH1_TOP1_DRAMC_PD_CTRL) &
  809. ~DRAMC_CH1_TOP1_DRAMC_DCM_REG0_MASK) |
  810. DRAMC_CH1_TOP1_DRAMC_DCM_REG0_OFF);
  811. reg_write(DRAMC_CH1_TOP1_CLKAR,
  812. (reg_read(DRAMC_CH1_TOP1_CLKAR) &
  813. ~DRAMC_CH1_TOP1_DRAMC_DCM_REG1_MASK) |
  814. DRAMC_CH1_TOP1_DRAMC_DCM_REG1_OFF);
  815. }
  816. }
  817. #define CHN1_EMI_EMI_DCM_REG0_MASK ((0xff << 24))
  818. #define CHN1_EMI_EMI_DCM_REG0_ON ((0x0 << 24))
  819. #define CHN1_EMI_EMI_DCM_REG0_OFF ((0xff << 24))
  820. bool dcm_chn1_emi_emi_dcm_is_on(void)
  821. {
  822. bool ret = true;
  823. ret &= ((reg_read(CHN1_EMI_CHN_EMI_CONB) &
  824. CHN1_EMI_EMI_DCM_REG0_MASK) ==
  825. (unsigned int) CHN1_EMI_EMI_DCM_REG0_ON);
  826. return ret;
  827. }
  828. void dcm_chn1_emi_emi_dcm(int on)
  829. {
  830. if (on) {
  831. /* TINFO = "Turn ON DCM 'chn1_emi_emi_dcm'" */
  832. reg_write(CHN1_EMI_CHN_EMI_CONB,
  833. (reg_read(CHN1_EMI_CHN_EMI_CONB) &
  834. ~CHN1_EMI_EMI_DCM_REG0_MASK) |
  835. CHN1_EMI_EMI_DCM_REG0_ON);
  836. } else {
  837. /* TINFO = "Turn OFF DCM 'chn1_emi_emi_dcm'" */
  838. reg_write(CHN1_EMI_CHN_EMI_CONB,
  839. (reg_read(CHN1_EMI_CHN_EMI_CONB) &
  840. ~CHN1_EMI_EMI_DCM_REG0_MASK) |
  841. CHN1_EMI_EMI_DCM_REG0_OFF);
  842. }
  843. }
  844. #define MP_CPUSYS_TOP_ADB_DCM_REG0_MASK ((0x1 << 16) | \
  845. (0x1 << 17) | \
  846. (0x1 << 18) | \
  847. (0x1 << 21))
  848. #define MP_CPUSYS_TOP_ADB_DCM_REG1_MASK ((0x1 << 16) | \
  849. (0x1 << 17) | \
  850. (0x1 << 18))
  851. #define MP_CPUSYS_TOP_ADB_DCM_REG0_ON ((0x1 << 16) | \
  852. (0x1 << 17) | \
  853. (0x1 << 18) | \
  854. (0x1 << 21))
  855. #define MP_CPUSYS_TOP_ADB_DCM_REG1_ON ((0x1 << 16) | \
  856. (0x1 << 17) | \
  857. (0x1 << 18))
  858. #define MP_CPUSYS_TOP_ADB_DCM_REG0_OFF ((0x0 << 16) | \
  859. (0x0 << 17) | \
  860. (0x0 << 18) | \
  861. (0x0 << 21))
  862. #define MP_CPUSYS_TOP_ADB_DCM_REG1_OFF ((0x0 << 16) | \
  863. (0x0 << 17) | \
  864. (0x0 << 18))
  865. bool dcm_mp_cpusys_top_adb_dcm_is_on(void)
  866. {
  867. bool ret = true;
  868. ret &= ((reg_read(MP_ADB_DCM_CFG4) &
  869. MP_CPUSYS_TOP_ADB_DCM_REG0_MASK) ==
  870. (unsigned int) MP_CPUSYS_TOP_ADB_DCM_REG0_ON);
  871. ret &= ((reg_read(MCUSYS_DCM_CFG0) &
  872. MP_CPUSYS_TOP_ADB_DCM_REG1_MASK) ==
  873. (unsigned int) MP_CPUSYS_TOP_ADB_DCM_REG1_ON);
  874. return ret;
  875. }
  876. void dcm_mp_cpusys_top_adb_dcm(int on)
  877. {
  878. if (on) {
  879. /* TINFO = "Turn ON DCM 'mp_cpusys_top_adb_dcm'" */
  880. reg_write(MP_ADB_DCM_CFG4,
  881. (reg_read(MP_ADB_DCM_CFG4) &
  882. ~MP_CPUSYS_TOP_ADB_DCM_REG0_MASK) |
  883. MP_CPUSYS_TOP_ADB_DCM_REG0_ON);
  884. reg_write(MCUSYS_DCM_CFG0,
  885. (reg_read(MCUSYS_DCM_CFG0) &
  886. ~MP_CPUSYS_TOP_ADB_DCM_REG1_MASK) |
  887. MP_CPUSYS_TOP_ADB_DCM_REG1_ON);
  888. } else {
  889. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_adb_dcm'" */
  890. reg_write(MP_ADB_DCM_CFG4,
  891. (reg_read(MP_ADB_DCM_CFG4) &
  892. ~MP_CPUSYS_TOP_ADB_DCM_REG0_MASK) |
  893. MP_CPUSYS_TOP_ADB_DCM_REG0_OFF);
  894. reg_write(MCUSYS_DCM_CFG0,
  895. (reg_read(MCUSYS_DCM_CFG0) &
  896. ~MP_CPUSYS_TOP_ADB_DCM_REG1_MASK) |
  897. MP_CPUSYS_TOP_ADB_DCM_REG1_OFF);
  898. }
  899. }
  900. #define MP_CPUSYS_TOP_APB_DCM_REG0_MASK ((0x1 << 5))
  901. #define MP_CPUSYS_TOP_APB_DCM_REG1_MASK ((0x1 << 8))
  902. #define MP_CPUSYS_TOP_APB_DCM_REG2_MASK ((0x1 << 16))
  903. #define MP_CPUSYS_TOP_APB_DCM_REG0_ON ((0x1 << 5))
  904. #define MP_CPUSYS_TOP_APB_DCM_REG1_ON ((0x1 << 8))
  905. #define MP_CPUSYS_TOP_APB_DCM_REG2_ON ((0x1 << 16))
  906. #define MP_CPUSYS_TOP_APB_DCM_REG0_OFF ((0x0 << 5))
  907. #define MP_CPUSYS_TOP_APB_DCM_REG1_OFF ((0x0 << 8))
  908. #define MP_CPUSYS_TOP_APB_DCM_REG2_OFF ((0x0 << 16))
  909. bool dcm_mp_cpusys_top_apb_dcm_is_on(void)
  910. {
  911. bool ret = true;
  912. ret &= ((reg_read(MP_MISC_DCM_CFG0) &
  913. MP_CPUSYS_TOP_APB_DCM_REG0_MASK) ==
  914. (unsigned int) MP_CPUSYS_TOP_APB_DCM_REG0_ON);
  915. ret &= ((reg_read(MCUSYS_DCM_CFG0) &
  916. MP_CPUSYS_TOP_APB_DCM_REG1_MASK) ==
  917. (unsigned int) MP_CPUSYS_TOP_APB_DCM_REG1_ON);
  918. ret &= ((reg_read(MP0_DCM_CFG0) &
  919. MP_CPUSYS_TOP_APB_DCM_REG2_MASK) ==
  920. (unsigned int) MP_CPUSYS_TOP_APB_DCM_REG2_ON);
  921. return ret;
  922. }
  923. void dcm_mp_cpusys_top_apb_dcm(int on)
  924. {
  925. if (on) {
  926. /* TINFO = "Turn ON DCM 'mp_cpusys_top_apb_dcm'" */
  927. reg_write(MP_MISC_DCM_CFG0,
  928. (reg_read(MP_MISC_DCM_CFG0) &
  929. ~MP_CPUSYS_TOP_APB_DCM_REG0_MASK) |
  930. MP_CPUSYS_TOP_APB_DCM_REG0_ON);
  931. reg_write(MCUSYS_DCM_CFG0,
  932. (reg_read(MCUSYS_DCM_CFG0) &
  933. ~MP_CPUSYS_TOP_APB_DCM_REG1_MASK) |
  934. MP_CPUSYS_TOP_APB_DCM_REG1_ON);
  935. reg_write(MP0_DCM_CFG0,
  936. (reg_read(MP0_DCM_CFG0) &
  937. ~MP_CPUSYS_TOP_APB_DCM_REG2_MASK) |
  938. MP_CPUSYS_TOP_APB_DCM_REG2_ON);
  939. } else {
  940. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_apb_dcm'" */
  941. reg_write(MP_MISC_DCM_CFG0,
  942. (reg_read(MP_MISC_DCM_CFG0) &
  943. ~MP_CPUSYS_TOP_APB_DCM_REG0_MASK) |
  944. MP_CPUSYS_TOP_APB_DCM_REG0_OFF);
  945. reg_write(MCUSYS_DCM_CFG0,
  946. (reg_read(MCUSYS_DCM_CFG0) &
  947. ~MP_CPUSYS_TOP_APB_DCM_REG1_MASK) |
  948. MP_CPUSYS_TOP_APB_DCM_REG1_OFF);
  949. reg_write(MP0_DCM_CFG0,
  950. (reg_read(MP0_DCM_CFG0) &
  951. ~MP_CPUSYS_TOP_APB_DCM_REG2_MASK) |
  952. MP_CPUSYS_TOP_APB_DCM_REG2_OFF);
  953. }
  954. }
  955. #define MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_MASK ((0x1 << 11) | \
  956. (0x1 << 24) | \
  957. (0x1 << 25))
  958. #define MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_ON ((0x1 << 11) | \
  959. (0x1 << 24) | \
  960. (0x1 << 25))
  961. #define MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_OFF ((0x0 << 11) | \
  962. (0x0 << 24) | \
  963. (0x0 << 25))
  964. bool dcm_mp_cpusys_top_bus_pll_div_dcm_is_on(void)
  965. {
  966. bool ret = true;
  967. ret &= ((reg_read(BUS_PLLDIV_CFG) &
  968. MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_MASK) ==
  969. (unsigned int) MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_ON);
  970. return ret;
  971. }
  972. void dcm_mp_cpusys_top_bus_pll_div_dcm(int on)
  973. {
  974. if (on) {
  975. /* TINFO = "Turn ON DCM 'mp_cpusys_top_bus_pll_div_dcm'" */
  976. reg_write(BUS_PLLDIV_CFG,
  977. (reg_read(BUS_PLLDIV_CFG) &
  978. ~MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_MASK) |
  979. MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_ON);
  980. } else {
  981. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_bus_pll_div_dcm'" */
  982. reg_write(BUS_PLLDIV_CFG,
  983. (reg_read(BUS_PLLDIV_CFG) &
  984. ~MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_MASK) |
  985. MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_OFF);
  986. }
  987. }
  988. #define MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_MASK ((0x1 << 0))
  989. #define MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_ON ((0x1 << 0))
  990. #define MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_OFF ((0x0 << 0))
  991. bool dcm_mp_cpusys_top_core_stall_dcm_is_on(void)
  992. {
  993. bool ret = true;
  994. ret &= ((reg_read(MP0_DCM_CFG7) &
  995. MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_MASK) ==
  996. (unsigned int) MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_ON);
  997. return ret;
  998. }
  999. void dcm_mp_cpusys_top_core_stall_dcm(int on)
  1000. {
  1001. if (on) {
  1002. /* TINFO = "Turn ON DCM 'mp_cpusys_top_core_stall_dcm'" */
  1003. reg_write(MP0_DCM_CFG7,
  1004. (reg_read(MP0_DCM_CFG7) &
  1005. ~MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_MASK) |
  1006. MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_ON);
  1007. } else {
  1008. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_core_stall_dcm'" */
  1009. reg_write(MP0_DCM_CFG7,
  1010. (reg_read(MP0_DCM_CFG7) &
  1011. ~MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_MASK) |
  1012. MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_OFF);
  1013. }
  1014. }
  1015. #define MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_MASK ((0x1 << 0))
  1016. #define MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_ON ((0x0 << 0))
  1017. #define MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_OFF ((0x1 << 0))
  1018. bool dcm_mp_cpusys_top_cpubiu_dbg_cg_is_on(void)
  1019. {
  1020. bool ret = true;
  1021. ret &= ((reg_read(MCSI_CFG2) &
  1022. MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_MASK) ==
  1023. (unsigned int) MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_ON);
  1024. return ret;
  1025. }
  1026. void dcm_mp_cpusys_top_cpubiu_dbg_cg(int on)
  1027. {
  1028. if (on) {
  1029. /* TINFO = "Turn ON DCM 'mp_cpusys_top_cpubiu_dbg_cg'" */
  1030. reg_write(MCSI_CFG2,
  1031. (reg_read(MCSI_CFG2) &
  1032. ~MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_MASK) |
  1033. MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_ON);
  1034. } else {
  1035. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpubiu_dbg_cg'" */
  1036. reg_write(MCSI_CFG2,
  1037. (reg_read(MCSI_CFG2) &
  1038. ~MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_MASK) |
  1039. MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_OFF);
  1040. }
  1041. }
  1042. #define MP_CPUSYS_TOP_CPUBIU_DCM_REG0_MASK ((0xffff << 0))
  1043. #define MP_CPUSYS_TOP_CPUBIU_DCM_REG0_ON ((0xffff << 0))
  1044. #define MP_CPUSYS_TOP_CPUBIU_DCM_REG0_OFF ((0x0 << 0))
  1045. bool dcm_mp_cpusys_top_cpubiu_dcm_is_on(void)
  1046. {
  1047. bool ret = true;
  1048. ret &= ((reg_read(MCSI_DCM0) &
  1049. MP_CPUSYS_TOP_CPUBIU_DCM_REG0_MASK) ==
  1050. (unsigned int) MP_CPUSYS_TOP_CPUBIU_DCM_REG0_ON);
  1051. return ret;
  1052. }
  1053. void dcm_mp_cpusys_top_cpubiu_dcm(int on)
  1054. {
  1055. if (on) {
  1056. /* TINFO = "Turn ON DCM 'mp_cpusys_top_cpubiu_dcm'" */
  1057. reg_write(MCSI_DCM0,
  1058. (reg_read(MCSI_DCM0) &
  1059. ~MP_CPUSYS_TOP_CPUBIU_DCM_REG0_MASK) |
  1060. MP_CPUSYS_TOP_CPUBIU_DCM_REG0_ON);
  1061. } else {
  1062. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpubiu_dcm'" */
  1063. reg_write(MCSI_DCM0,
  1064. (reg_read(MCSI_DCM0) &
  1065. ~MP_CPUSYS_TOP_CPUBIU_DCM_REG0_MASK) |
  1066. MP_CPUSYS_TOP_CPUBIU_DCM_REG0_OFF);
  1067. }
  1068. }
  1069. #define MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_MASK ((0x1 << 11) | \
  1070. (0x1 << 24) | \
  1071. (0x1 << 25))
  1072. #define MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_ON ((0x1 << 11) | \
  1073. (0x1 << 24) | \
  1074. (0x1 << 25))
  1075. #define MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_OFF ((0x0 << 11) | \
  1076. (0x0 << 24) | \
  1077. (0x0 << 25))
  1078. bool dcm_mp_cpusys_top_cpu_pll_div_0_dcm_is_on(void)
  1079. {
  1080. bool ret = true;
  1081. ret &= ((reg_read(CPU_PLLDIV_CFG0) &
  1082. MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_MASK) ==
  1083. (unsigned int) MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_ON);
  1084. return ret;
  1085. }
  1086. void dcm_mp_cpusys_top_cpu_pll_div_0_dcm(int on)
  1087. {
  1088. if (on) {
  1089. /* TINFO = "Turn ON DCM 'mp_cpusys_top_cpu_pll_div_0_dcm'" */
  1090. reg_write(CPU_PLLDIV_CFG0,
  1091. (reg_read(CPU_PLLDIV_CFG0) &
  1092. ~MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_MASK) |
  1093. MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_ON);
  1094. } else {
  1095. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpu_pll_div_0_dcm'" */
  1096. reg_write(CPU_PLLDIV_CFG0,
  1097. (reg_read(CPU_PLLDIV_CFG0) &
  1098. ~MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_MASK) |
  1099. MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_OFF);
  1100. }
  1101. }
  1102. #define MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_MASK ((0x1 << 11) | \
  1103. (0x1 << 24) | \
  1104. (0x1 << 25))
  1105. #define MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_ON ((0x1 << 11) | \
  1106. (0x1 << 24) | \
  1107. (0x1 << 25))
  1108. #define MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_OFF ((0x0 << 11) | \
  1109. (0x0 << 24) | \
  1110. (0x0 << 25))
  1111. bool dcm_mp_cpusys_top_cpu_pll_div_1_dcm_is_on(void)
  1112. {
  1113. bool ret = true;
  1114. ret &= ((reg_read(CPU_PLLDIV_CFG1) &
  1115. MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_MASK) ==
  1116. (unsigned int) MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_ON);
  1117. return ret;
  1118. }
  1119. void dcm_mp_cpusys_top_cpu_pll_div_1_dcm(int on)
  1120. {
  1121. if (on) {
  1122. /* TINFO = "Turn ON DCM 'mp_cpusys_top_cpu_pll_div_1_dcm'" */
  1123. reg_write(CPU_PLLDIV_CFG1,
  1124. (reg_read(CPU_PLLDIV_CFG1) &
  1125. ~MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_MASK) |
  1126. MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_ON);
  1127. } else {
  1128. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpu_pll_div_1_dcm'" */
  1129. reg_write(CPU_PLLDIV_CFG1,
  1130. (reg_read(CPU_PLLDIV_CFG1) &
  1131. ~MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_MASK) |
  1132. MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_OFF);
  1133. }
  1134. }
  1135. #define MP_CPUSYS_TOP_CPU_PLL_DIV_2_DCM_REG0_MASK ((0x1 << 11) | \
  1136. (0x1 << 24) | \
  1137. (0x1 << 25))
  1138. #define MP_CPUSYS_TOP_CPU_PLL_DIV_2_DCM_REG0_ON ((0x1 << 11) | \
  1139. (0x1 << 24) | \
  1140. (0x1 << 25))
  1141. #define MP_CPUSYS_TOP_CPU_PLL_DIV_2_DCM_REG0_OFF ((0x0 << 11) | \
  1142. (0x0 << 24) | \
  1143. (0x0 << 25))
  1144. bool dcm_mp_cpusys_top_cpu_pll_div_2_dcm_is_on(void)
  1145. {
  1146. bool ret = true;
  1147. ret &= ((reg_read(CPU_PLLDIV_CFG2) &
  1148. MP_CPUSYS_TOP_CPU_PLL_DIV_2_DCM_REG0_MASK) ==
  1149. (unsigned int) MP_CPUSYS_TOP_CPU_PLL_DIV_2_DCM_REG0_ON);
  1150. return ret;
  1151. }
  1152. void dcm_mp_cpusys_top_cpu_pll_div_2_dcm(int on)
  1153. {
  1154. if (on) {
  1155. /* TINFO = "Turn ON DCM 'mp_cpusys_top_cpu_pll_div_2_dcm'" */
  1156. reg_write(CPU_PLLDIV_CFG2,
  1157. (reg_read(CPU_PLLDIV_CFG2) &
  1158. ~MP_CPUSYS_TOP_CPU_PLL_DIV_2_DCM_REG0_MASK) |
  1159. MP_CPUSYS_TOP_CPU_PLL_DIV_2_DCM_REG0_ON);
  1160. } else {
  1161. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpu_pll_div_2_dcm'" */
  1162. reg_write(CPU_PLLDIV_CFG2,
  1163. (reg_read(CPU_PLLDIV_CFG2) &
  1164. ~MP_CPUSYS_TOP_CPU_PLL_DIV_2_DCM_REG0_MASK) |
  1165. MP_CPUSYS_TOP_CPU_PLL_DIV_2_DCM_REG0_OFF);
  1166. }
  1167. }
  1168. #define MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_MASK ((0x1 << 4))
  1169. #define MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_ON ((0x1 << 4))
  1170. #define MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_OFF ((0x0 << 4))
  1171. bool dcm_mp_cpusys_top_fcm_stall_dcm_is_on(void)
  1172. {
  1173. bool ret = true;
  1174. ret &= ((reg_read(MP0_DCM_CFG7) &
  1175. MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_MASK) ==
  1176. (unsigned int) MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_ON);
  1177. return ret;
  1178. }
  1179. void dcm_mp_cpusys_top_fcm_stall_dcm(int on)
  1180. {
  1181. if (on) {
  1182. /* TINFO = "Turn ON DCM 'mp_cpusys_top_fcm_stall_dcm'" */
  1183. reg_write(MP0_DCM_CFG7,
  1184. (reg_read(MP0_DCM_CFG7) &
  1185. ~MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_MASK) |
  1186. MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_ON);
  1187. } else {
  1188. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_fcm_stall_dcm'" */
  1189. reg_write(MP0_DCM_CFG7,
  1190. (reg_read(MP0_DCM_CFG7) &
  1191. ~MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_MASK) |
  1192. MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_OFF);
  1193. }
  1194. }
  1195. #define MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_MASK ((0x1 << 31))
  1196. #define MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_ON ((0x1 << 31))
  1197. #define MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_OFF ((0x0 << 31))
  1198. bool dcm_mp_cpusys_top_last_cor_idle_dcm_is_on(void)
  1199. {
  1200. bool ret = true;
  1201. ret &= ((reg_read(BUS_PLLDIV_CFG) &
  1202. MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_MASK) ==
  1203. (unsigned int) MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_ON);
  1204. return ret;
  1205. }
  1206. void dcm_mp_cpusys_top_last_cor_idle_dcm(int on)
  1207. {
  1208. if (on) {
  1209. /* TINFO = "Turn ON DCM 'mp_cpusys_top_last_cor_idle_dcm'" */
  1210. reg_write(BUS_PLLDIV_CFG,
  1211. (reg_read(BUS_PLLDIV_CFG) &
  1212. ~MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_MASK) |
  1213. MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_ON);
  1214. } else {
  1215. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_last_cor_idle_dcm'" */
  1216. reg_write(BUS_PLLDIV_CFG,
  1217. (reg_read(BUS_PLLDIV_CFG) &
  1218. ~MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_MASK) |
  1219. MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_OFF);
  1220. }
  1221. }
  1222. #define MP_CPUSYS_TOP_MISC_DCM_REG0_MASK ((0x1 << 0) | \
  1223. (0x1 << 1) | \
  1224. (0x1 << 2) | \
  1225. (0x1 << 3) | \
  1226. (0x1 << 4))
  1227. #define MP_CPUSYS_TOP_MISC_DCM_REG0_ON ((0x1 << 0) | \
  1228. (0x1 << 1) | \
  1229. (0x1 << 2) | \
  1230. (0x1 << 3) | \
  1231. (0x1 << 4))
  1232. #define MP_CPUSYS_TOP_MISC_DCM_REG0_OFF ((0x0 << 0) | \
  1233. (0x0 << 1) | \
  1234. (0x0 << 2) | \
  1235. (0x0 << 3) | \
  1236. (0x0 << 4))
  1237. bool dcm_mp_cpusys_top_misc_dcm_is_on(void)
  1238. {
  1239. bool ret = true;
  1240. ret &= ((reg_read(MP_MISC_DCM_CFG0) &
  1241. MP_CPUSYS_TOP_MISC_DCM_REG0_MASK) ==
  1242. (unsigned int) MP_CPUSYS_TOP_MISC_DCM_REG0_ON);
  1243. return ret;
  1244. }
  1245. void dcm_mp_cpusys_top_misc_dcm(int on)
  1246. {
  1247. if (on) {
  1248. /* TINFO = "Turn ON DCM 'mp_cpusys_top_misc_dcm'" */
  1249. reg_write(MP_MISC_DCM_CFG0,
  1250. (reg_read(MP_MISC_DCM_CFG0) &
  1251. ~MP_CPUSYS_TOP_MISC_DCM_REG0_MASK) |
  1252. MP_CPUSYS_TOP_MISC_DCM_REG0_ON);
  1253. } else {
  1254. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_misc_dcm'" */
  1255. reg_write(MP_MISC_DCM_CFG0,
  1256. (reg_read(MP_MISC_DCM_CFG0) &
  1257. ~MP_CPUSYS_TOP_MISC_DCM_REG0_MASK) |
  1258. MP_CPUSYS_TOP_MISC_DCM_REG0_OFF);
  1259. }
  1260. }
  1261. #define MP_CPUSYS_TOP_MP0_QDCM_REG0_MASK ((0x1 << 0) | \
  1262. (0x1 << 1) | \
  1263. (0x1 << 2) | \
  1264. (0x1 << 3))
  1265. #define MP_CPUSYS_TOP_MP0_QDCM_REG0_ON ((0x1 << 0) | \
  1266. (0x1 << 1) | \
  1267. (0x1 << 2) | \
  1268. (0x1 << 3))
  1269. #define MP_CPUSYS_TOP_MP0_QDCM_REG0_OFF ((0x0 << 0) | \
  1270. (0x0 << 1) | \
  1271. (0x0 << 2) | \
  1272. (0x0 << 3))
  1273. bool dcm_mp_cpusys_top_mp0_qdcm_is_on(void)
  1274. {
  1275. bool ret = true;
  1276. ret &= ((reg_read(MP0_DCM_CFG0) &
  1277. MP_CPUSYS_TOP_MP0_QDCM_REG0_MASK) ==
  1278. (unsigned int) MP_CPUSYS_TOP_MP0_QDCM_REG0_ON);
  1279. return ret;
  1280. }
  1281. void dcm_mp_cpusys_top_mp0_qdcm(int on)
  1282. {
  1283. if (on) {
  1284. /* TINFO = "Turn ON DCM 'mp_cpusys_top_mp0_qdcm'" */
  1285. reg_write(MP0_DCM_CFG0,
  1286. (reg_read(MP0_DCM_CFG0) &
  1287. ~MP_CPUSYS_TOP_MP0_QDCM_REG0_MASK) |
  1288. MP_CPUSYS_TOP_MP0_QDCM_REG0_ON);
  1289. } else {
  1290. /* TINFO = "Turn OFF DCM 'mp_cpusys_top_mp0_qdcm'" */
  1291. reg_write(MP0_DCM_CFG0,
  1292. (reg_read(MP0_DCM_CFG0) &
  1293. ~MP_CPUSYS_TOP_MP0_QDCM_REG0_MASK) |
  1294. MP_CPUSYS_TOP_MP0_QDCM_REG0_OFF);
  1295. }
  1296. }
  1297. #define CPCCFG_REG_EMI_WFIFO_REG0_MASK ((0x1 << 0) | \
  1298. (0x1 << 2))
  1299. #define CPCCFG_REG_EMI_WFIFO_REG0_ON ((0x1 << 0) | \
  1300. (0x1 << 2))
  1301. #define CPCCFG_REG_EMI_WFIFO_REG0_OFF ((0x0 << 0) | \
  1302. (0x0 << 2))
  1303. bool dcm_cpccfg_reg_emi_wfifo_is_on(void)
  1304. {
  1305. bool ret = true;
  1306. ret &= ((reg_read(EMI_WFIFO) &
  1307. CPCCFG_REG_EMI_WFIFO_REG0_MASK) ==
  1308. (unsigned int) CPCCFG_REG_EMI_WFIFO_REG0_ON);
  1309. return ret;
  1310. }
  1311. void dcm_cpccfg_reg_emi_wfifo(int on)
  1312. {
  1313. if (on) {
  1314. /* TINFO = "Turn ON DCM 'cpccfg_reg_emi_wfifo'" */
  1315. reg_write(EMI_WFIFO,
  1316. (reg_read(EMI_WFIFO) &
  1317. ~CPCCFG_REG_EMI_WFIFO_REG0_MASK) |
  1318. CPCCFG_REG_EMI_WFIFO_REG0_ON);
  1319. } else {
  1320. /* TINFO = "Turn OFF DCM 'cpccfg_reg_emi_wfifo'" */
  1321. reg_write(EMI_WFIFO,
  1322. (reg_read(EMI_WFIFO) &
  1323. ~CPCCFG_REG_EMI_WFIFO_REG0_MASK) |
  1324. CPCCFG_REG_EMI_WFIFO_REG0_OFF);
  1325. }
  1326. }