mtk_dcm_autogen.c 51 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074
  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. /* Below from DCM autogen. */
  58. #define INFRACFG_AO_AUDIO_REG0_MASK ((0x1 << 29))
  59. #define INFRACFG_AO_AUDIO_REG0_ON ((0x1 << 29))
  60. #define INFRACFG_AO_AUDIO_REG0_OFF ((0x0 << 29))
  61. bool dcm_infracfg_ao_audio_is_on(void)
  62. {
  63. bool ret = true;
  64. ret &= !!(reg_read(PERI_BUS_DCM_CTRL) &
  65. INFRACFG_AO_AUDIO_REG0_MASK &
  66. INFRACFG_AO_AUDIO_REG0_ON);
  67. return ret;
  68. }
  69. void dcm_infracfg_ao_audio(int on)
  70. {
  71. if (on) {
  72. /* TINFO = "Turn ON DCM 'infracfg_ao_audio'" */
  73. reg_write(PERI_BUS_DCM_CTRL,
  74. (reg_read(PERI_BUS_DCM_CTRL) &
  75. ~INFRACFG_AO_AUDIO_REG0_MASK) |
  76. INFRACFG_AO_AUDIO_REG0_ON);
  77. } else {
  78. /* TINFO = "Turn OFF DCM 'infracfg_ao_audio'" */
  79. reg_write(PERI_BUS_DCM_CTRL,
  80. (reg_read(PERI_BUS_DCM_CTRL) &
  81. ~INFRACFG_AO_AUDIO_REG0_MASK) |
  82. INFRACFG_AO_AUDIO_REG0_OFF);
  83. }
  84. }
  85. #define INFRACFG_AO_DFS_MEM_REG0_MASK ((0x1 << 0) | \
  86. (0x1f << 1) | \
  87. (0x1 << 6) | \
  88. (0x1 << 7) | \
  89. (0x1 << 8) | \
  90. (0x1f << 16) | \
  91. (0x1f << 21) | \
  92. (0x1 << 26))
  93. #define INFRACFG_AO_DFS_MEM_REG0_ON ((0x0 << 0) | \
  94. (0x0 << 1) | \
  95. (0x0 << 6) | \
  96. (0x1 << 7) | \
  97. (0x1 << 8) | \
  98. (0x0 << 16) | \
  99. (0x1f << 21) | \
  100. (0x0 << 26))
  101. #define INFRACFG_AO_DFS_MEM_REG0_OFF ((0x0 << 0) | \
  102. (0x0 << 1) | \
  103. (0x0 << 6) | \
  104. (0x1 << 7) | \
  105. (0x1 << 8) | \
  106. (0x0 << 16) | \
  107. (0x1f << 21) | \
  108. (0x0 << 26))
  109. bool dcm_infracfg_ao_dfs_mem_is_on(void)
  110. {
  111. bool ret = true;
  112. ret &= !!(reg_read(DFS_MEM_DCM_CTRL) &
  113. INFRACFG_AO_DFS_MEM_REG0_MASK &
  114. INFRACFG_AO_DFS_MEM_REG0_ON);
  115. return ret;
  116. }
  117. void dcm_infracfg_ao_dfs_mem(int on)
  118. {
  119. if (on) {
  120. /* TINFO = "Turn ON DCM 'infracfg_ao_dfs_mem'" */
  121. reg_write(DFS_MEM_DCM_CTRL,
  122. (reg_read(DFS_MEM_DCM_CTRL) &
  123. ~INFRACFG_AO_DFS_MEM_REG0_MASK) |
  124. INFRACFG_AO_DFS_MEM_REG0_ON);
  125. } else {
  126. /* TINFO = "Turn OFF DCM 'infracfg_ao_dfs_mem'" */
  127. reg_write(DFS_MEM_DCM_CTRL,
  128. (reg_read(DFS_MEM_DCM_CTRL) &
  129. ~INFRACFG_AO_DFS_MEM_REG0_MASK) |
  130. INFRACFG_AO_DFS_MEM_REG0_OFF);
  131. }
  132. }
  133. #define INFRACFG_AO_ICUSB_REG0_MASK ((0x1 << 28))
  134. #define INFRACFG_AO_ICUSB_REG0_ON ((0x1 << 28))
  135. #define INFRACFG_AO_ICUSB_REG0_OFF ((0x0 << 28))
  136. bool dcm_infracfg_ao_icusb_is_on(void)
  137. {
  138. bool ret = true;
  139. ret &= !!(reg_read(PERI_BUS_DCM_CTRL) &
  140. INFRACFG_AO_ICUSB_REG0_MASK &
  141. INFRACFG_AO_ICUSB_REG0_ON);
  142. return ret;
  143. }
  144. void dcm_infracfg_ao_icusb(int on)
  145. {
  146. if (on) {
  147. /* TINFO = "Turn ON DCM 'infracfg_ao_icusb'" */
  148. reg_write(PERI_BUS_DCM_CTRL,
  149. (reg_read(PERI_BUS_DCM_CTRL) &
  150. ~INFRACFG_AO_ICUSB_REG0_MASK) |
  151. INFRACFG_AO_ICUSB_REG0_ON);
  152. } else {
  153. /* TINFO = "Turn OFF DCM 'infracfg_ao_icusb'" */
  154. reg_write(PERI_BUS_DCM_CTRL,
  155. (reg_read(PERI_BUS_DCM_CTRL) &
  156. ~INFRACFG_AO_ICUSB_REG0_MASK) |
  157. INFRACFG_AO_ICUSB_REG0_OFF);
  158. }
  159. }
  160. #define INFRACFG_AO_INFRA_MD_REG0_MASK ((0x1 << 28))
  161. #define INFRACFG_AO_INFRA_MD_REG0_ON ((0x1 << 28))
  162. #define INFRACFG_AO_INFRA_MD_REG0_OFF ((0x0 << 28))
  163. bool dcm_infracfg_ao_infra_md_is_on(void)
  164. {
  165. bool ret = true;
  166. ret &= !!(reg_read(INFRA_MISC) &
  167. INFRACFG_AO_INFRA_MD_REG0_MASK &
  168. INFRACFG_AO_INFRA_MD_REG0_ON);
  169. return ret;
  170. }
  171. void dcm_infracfg_ao_infra_md(int on)
  172. {
  173. if (on) {
  174. /* TINFO = "Turn ON DCM 'infracfg_ao_infra_md'" */
  175. reg_write(INFRA_MISC,
  176. (reg_read(INFRA_MISC) &
  177. ~INFRACFG_AO_INFRA_MD_REG0_MASK) |
  178. INFRACFG_AO_INFRA_MD_REG0_ON);
  179. } else {
  180. /* TINFO = "Turn OFF DCM 'infracfg_ao_infra_md'" */
  181. reg_write(INFRA_MISC,
  182. (reg_read(INFRA_MISC) &
  183. ~INFRACFG_AO_INFRA_MD_REG0_MASK) |
  184. INFRACFG_AO_INFRA_MD_REG0_OFF);
  185. }
  186. }
  187. /* Align Zion and Bianco, only control bit 27.
  188. #define INFRACFG_AO_INFRA_MEM_REG0_MASK ((0x1 << 0) | \
  189. (0x1f << 1) | \
  190. (0x1 << 6) | \
  191. (0x1 << 7) | \
  192. (0x1 << 8) | \
  193. (0x7f << 9) | \
  194. (0x1f << 16) | \
  195. (0x1f << 21) | \
  196. (0x1 << 26) | \
  197. (0x1 << 27) | \
  198. (0x1 << 28) | \
  199. (0x1 << 29) | \
  200. (0x1 << 31))
  201. #define INFRACFG_AO_INFRA_MEM_REG0_ON ((0x0 << 0) | \
  202. (0x0 << 1) | \
  203. (0x0 << 6) | \
  204. (0x1 << 7) | \
  205. (0x1 << 8) | \
  206. (0x0 << 9) | \
  207. (0x0 << 16) | \
  208. (0x1f << 21) | \
  209. (0x0 << 26) | \
  210. (0x1 << 27) | \
  211. (0x0 << 28) | \
  212. (0x0 << 29) | \
  213. (0x0 << 31))
  214. #define INFRACFG_AO_INFRA_MEM_REG0_OFF ((0x0 << 0) | \
  215. (0x0 << 1) | \
  216. (0x0 << 6) | \
  217. (0x1 << 7) | \
  218. (0x1 << 8) | \
  219. (0x0 << 9) | \
  220. (0x0 << 16) | \
  221. (0x1f << 21) | \
  222. (0x0 << 26) | \
  223. (0x1 << 27) | \
  224. (0x0 << 28) | \
  225. (0x0 << 29) | \
  226. (0x0 << 31))
  227. */
  228. #define INFRACFG_AO_INFRA_MEM_REG0_MASK (0x1 << 27)
  229. #define INFRACFG_AO_INFRA_MEM_REG0_ON (0x1 << 27)
  230. #define INFRACFG_AO_INFRA_MEM_REG0_OFF (0x0 << 27)
  231. bool dcm_infracfg_ao_infra_mem_is_on(void)
  232. {
  233. bool ret = true;
  234. ret &= !!(reg_read(MEM_DCM_CTRL) &
  235. INFRACFG_AO_INFRA_MEM_REG0_MASK &
  236. INFRACFG_AO_INFRA_MEM_REG0_ON);
  237. return ret;
  238. }
  239. void dcm_infracfg_ao_infra_mem(int on)
  240. {
  241. if (on) {
  242. /* TINFO = "Turn ON DCM 'infracfg_ao_infra_mem'" */
  243. reg_write(MEM_DCM_CTRL,
  244. (reg_read(MEM_DCM_CTRL) &
  245. ~INFRACFG_AO_INFRA_MEM_REG0_MASK) |
  246. INFRACFG_AO_INFRA_MEM_REG0_ON);
  247. } else {
  248. /* TINFO = "Turn OFF DCM 'infracfg_ao_infra_mem'" */
  249. reg_write(MEM_DCM_CTRL,
  250. (reg_read(MEM_DCM_CTRL) &
  251. ~INFRACFG_AO_INFRA_MEM_REG0_MASK) |
  252. INFRACFG_AO_INFRA_MEM_REG0_OFF);
  253. }
  254. }
  255. #define INFRACFG_AO_INFRA_PERI_REG0_MASK ((0x1 << 0) | \
  256. (0x1 << 1) | \
  257. (0x1 << 2) | \
  258. (0x1 << 3) | \
  259. (0x1 << 4) | \
  260. (0x1f << 5) | \
  261. (0x1f << 10) | \
  262. (0x1 << 20) | \
  263. (0x1 << 21) | \
  264. (0x1 << 22) | \
  265. (0x1 << 23) | \
  266. (0x1 << 30))
  267. #define INFRACFG_AO_INFRA_PERI_REG1_MASK ((0x1 << 0) | \
  268. (0x1 << 1) | \
  269. (0x1 << 3) | \
  270. (0x1 << 4) | \
  271. (0x1f << 5) | \
  272. (0x1f << 10) | \
  273. (0x1f << 15) | \
  274. (0x1 << 20))
  275. #define INFRACFG_AO_INFRA_PERI_REG0_ON ((0x1 << 0) | \
  276. (0x1 << 1) | \
  277. (0x0 << 2) | \
  278. (0x0 << 3) | \
  279. (0x0 << 4) | \
  280. (0x10 << 5) | \
  281. (0x1 << 10) | \
  282. (0x1 << 20) | \
  283. (0x1 << 21) | \
  284. (0x1 << 22) | \
  285. (0x1 << 23) | \
  286. (0x1 << 30))
  287. #define INFRACFG_AO_INFRA_PERI_REG1_ON ((0x1 << 0) | \
  288. (0x1 << 1) | \
  289. (0x0 << 3) | \
  290. (0x0 << 4) | \
  291. (0x1f << 5) | \
  292. (0x0 << 10) | \
  293. (0x1f << 15) | \
  294. (0x1 << 20))
  295. #define INFRACFG_AO_INFRA_PERI_REG0_OFF ((0x0 << 0) | \
  296. (0x0 << 1) | \
  297. (0x0 << 2) | \
  298. (0x0 << 3) | \
  299. (0x0 << 4) | \
  300. (0x10 << 5) | \
  301. (0x1 << 10) | \
  302. (0x0 << 20) | \
  303. (0x1 << 21) | \
  304. (0x1 << 22) | \
  305. (0x0 << 23) | \
  306. (0x0 << 30))
  307. #define INFRACFG_AO_INFRA_PERI_REG1_OFF ((0x0 << 0) | \
  308. (0x0 << 1) | \
  309. (0x0 << 3) | \
  310. (0x0 << 4) | \
  311. (0x1f << 5) | \
  312. (0x1f << 10) | \
  313. (0x0 << 15) | \
  314. (0x0 << 20))
  315. bool dcm_infracfg_ao_infra_peri_is_on(void)
  316. {
  317. bool ret = true;
  318. ret &= !!(reg_read(INFRA_BUS_DCM_CTRL) &
  319. INFRACFG_AO_INFRA_PERI_REG0_MASK &
  320. INFRACFG_AO_INFRA_PERI_REG0_ON);
  321. ret &= !!(reg_read(PERI_BUS_DCM_CTRL) &
  322. INFRACFG_AO_INFRA_PERI_REG1_MASK &
  323. INFRACFG_AO_INFRA_PERI_REG1_ON);
  324. return ret;
  325. }
  326. void dcm_infracfg_ao_infra_peri(int on)
  327. {
  328. if (on) {
  329. /* TINFO = "Turn ON DCM 'infracfg_ao_infra_peri'" */
  330. reg_write(INFRA_BUS_DCM_CTRL,
  331. (reg_read(INFRA_BUS_DCM_CTRL) &
  332. ~INFRACFG_AO_INFRA_PERI_REG0_MASK) |
  333. INFRACFG_AO_INFRA_PERI_REG0_ON);
  334. reg_write(PERI_BUS_DCM_CTRL,
  335. (reg_read(PERI_BUS_DCM_CTRL) &
  336. ~INFRACFG_AO_INFRA_PERI_REG1_MASK) |
  337. INFRACFG_AO_INFRA_PERI_REG1_ON);
  338. } else {
  339. /* TINFO = "Turn OFF DCM 'infracfg_ao_infra_peri'" */
  340. reg_write(INFRA_BUS_DCM_CTRL,
  341. (reg_read(INFRA_BUS_DCM_CTRL) &
  342. ~INFRACFG_AO_INFRA_PERI_REG0_MASK) |
  343. INFRACFG_AO_INFRA_PERI_REG0_OFF);
  344. reg_write(PERI_BUS_DCM_CTRL,
  345. (reg_read(PERI_BUS_DCM_CTRL) &
  346. ~INFRACFG_AO_INFRA_PERI_REG1_MASK) |
  347. INFRACFG_AO_INFRA_PERI_REG1_OFF);
  348. }
  349. }
  350. #define INFRACFG_AO_P2P_DSI_CSI_REG0_MASK ((0xf << 0))
  351. #define INFRACFG_AO_P2P_DSI_CSI_REG0_ON ((0x0 << 0))
  352. /* TODO: Check why autogen is wrong. */
  353. #define INFRACFG_AO_P2P_DSI_CSI_REG0_OFF ((0xf << 0))
  354. bool dcm_infracfg_ao_p2p_dsi_csi_is_on(void)
  355. {
  356. bool ret = true;
  357. ret &= !!(reg_read(P2P_RX_CLK_ON) &
  358. INFRACFG_AO_P2P_DSI_CSI_REG0_MASK &
  359. INFRACFG_AO_P2P_DSI_CSI_REG0_ON);
  360. return ret;
  361. }
  362. void dcm_infracfg_ao_p2p_dsi_csi(int on)
  363. {
  364. if (on) {
  365. /* TINFO = "Turn ON DCM 'infracfg_ao_p2p_dsi_csi'" */
  366. reg_write(P2P_RX_CLK_ON,
  367. (reg_read(P2P_RX_CLK_ON) &
  368. ~INFRACFG_AO_P2P_DSI_CSI_REG0_MASK) |
  369. INFRACFG_AO_P2P_DSI_CSI_REG0_ON);
  370. } else {
  371. /* TINFO = "Turn OFF DCM 'infracfg_ao_p2p_dsi_csi'" */
  372. reg_write(P2P_RX_CLK_ON,
  373. (reg_read(P2P_RX_CLK_ON) &
  374. ~INFRACFG_AO_P2P_DSI_CSI_REG0_MASK) |
  375. INFRACFG_AO_P2P_DSI_CSI_REG0_OFF);
  376. }
  377. }
  378. #define INFRACFG_AO_PMIC_REG0_MASK ((0x1 << 22) | \
  379. (0x1f << 23))
  380. #define INFRACFG_AO_PMIC_REG0_ON ((0x1 << 22) | \
  381. (0x0 << 23))
  382. #define INFRACFG_AO_PMIC_REG0_OFF ((0x0 << 22) | \
  383. (0x0 << 23))
  384. bool dcm_infracfg_ao_pmic_is_on(void)
  385. {
  386. bool ret = true;
  387. ret &= !!(reg_read(PERI_BUS_DCM_CTRL) &
  388. INFRACFG_AO_PMIC_REG0_MASK &
  389. INFRACFG_AO_PMIC_REG0_ON);
  390. return ret;
  391. }
  392. void dcm_infracfg_ao_pmic(int on)
  393. {
  394. if (on) {
  395. /* TINFO = "Turn ON DCM 'infracfg_ao_pmic'" */
  396. reg_write(PERI_BUS_DCM_CTRL,
  397. (reg_read(PERI_BUS_DCM_CTRL) &
  398. ~INFRACFG_AO_PMIC_REG0_MASK) |
  399. INFRACFG_AO_PMIC_REG0_ON);
  400. } else {
  401. /* TINFO = "Turn OFF DCM 'infracfg_ao_pmic'" */
  402. reg_write(PERI_BUS_DCM_CTRL,
  403. (reg_read(PERI_BUS_DCM_CTRL) &
  404. ~INFRACFG_AO_PMIC_REG0_MASK) |
  405. INFRACFG_AO_PMIC_REG0_OFF);
  406. }
  407. }
  408. #define INFRACFG_AO_SSUSB_REG0_MASK ((0x1 << 31))
  409. #define INFRACFG_AO_SSUSB_REG0_ON ((0x1 << 31))
  410. #define INFRACFG_AO_SSUSB_REG0_OFF ((0x0 << 31))
  411. bool dcm_infracfg_ao_ssusb_is_on(void)
  412. {
  413. bool ret = true;
  414. ret &= !!(reg_read(PERI_BUS_DCM_CTRL) &
  415. INFRACFG_AO_SSUSB_REG0_MASK &
  416. INFRACFG_AO_SSUSB_REG0_ON);
  417. return ret;
  418. }
  419. void dcm_infracfg_ao_ssusb(int on)
  420. {
  421. if (on) {
  422. /* TINFO = "Turn ON DCM 'infracfg_ao_ssusb'" */
  423. reg_write(PERI_BUS_DCM_CTRL,
  424. (reg_read(PERI_BUS_DCM_CTRL) &
  425. ~INFRACFG_AO_SSUSB_REG0_MASK) |
  426. INFRACFG_AO_SSUSB_REG0_ON);
  427. } else {
  428. /* TINFO = "Turn OFF DCM 'infracfg_ao_ssusb'" */
  429. reg_write(PERI_BUS_DCM_CTRL,
  430. (reg_read(PERI_BUS_DCM_CTRL) &
  431. ~INFRACFG_AO_SSUSB_REG0_MASK) |
  432. INFRACFG_AO_SSUSB_REG0_OFF);
  433. }
  434. }
  435. #define INFRACFG_AO_USB_REG0_MASK ((0x1 << 21))
  436. #define INFRACFG_AO_USB_REG0_ON ((0x1 << 21))
  437. #define INFRACFG_AO_USB_REG0_OFF ((0x0 << 21))
  438. bool dcm_infracfg_ao_usb_is_on(void)
  439. {
  440. bool ret = true;
  441. ret &= !!(reg_read(PERI_BUS_DCM_CTRL) &
  442. INFRACFG_AO_USB_REG0_MASK &
  443. INFRACFG_AO_USB_REG0_ON);
  444. return ret;
  445. }
  446. void dcm_infracfg_ao_usb(int on)
  447. {
  448. if (on) {
  449. /* TINFO = "Turn ON DCM 'infracfg_ao_usb'" */
  450. reg_write(PERI_BUS_DCM_CTRL,
  451. (reg_read(PERI_BUS_DCM_CTRL) &
  452. ~INFRACFG_AO_USB_REG0_MASK) |
  453. INFRACFG_AO_USB_REG0_ON);
  454. } else {
  455. /* TINFO = "Turn OFF DCM 'infracfg_ao_usb'" */
  456. reg_write(PERI_BUS_DCM_CTRL,
  457. (reg_read(PERI_BUS_DCM_CTRL) &
  458. ~INFRACFG_AO_USB_REG0_MASK) |
  459. INFRACFG_AO_USB_REG0_OFF);
  460. }
  461. }
  462. #define SECURITY_AO_INFRA_DXCC_REG0_MASK ((0xffff << 0))
  463. #define SECURITY_AO_INFRA_DXCC_REG0_ON ((0x0 << 0))
  464. #define SECURITY_AO_INFRA_DXCC_REG0_OFF ((0xffff << 0))
  465. bool dcm_security_ao_infra_dxcc_is_on(void)
  466. {
  467. bool ret = true;
  468. ret &= !!(reg_read(DXCC_NEW_HWDCM_CFG) &
  469. SECURITY_AO_INFRA_DXCC_REG0_MASK &
  470. SECURITY_AO_INFRA_DXCC_REG0_ON);
  471. return ret;
  472. }
  473. void dcm_security_ao_infra_dxcc(int on)
  474. {
  475. if (on) {
  476. /* TINFO = "Turn ON DCM 'security_ao_infra_dxcc'" */
  477. reg_write(DXCC_NEW_HWDCM_CFG,
  478. (reg_read(DXCC_NEW_HWDCM_CFG) &
  479. ~SECURITY_AO_INFRA_DXCC_REG0_MASK) |
  480. SECURITY_AO_INFRA_DXCC_REG0_ON);
  481. } else {
  482. /* TINFO = "Turn OFF DCM 'security_ao_infra_dxcc'" */
  483. reg_write(DXCC_NEW_HWDCM_CFG,
  484. (reg_read(DXCC_NEW_HWDCM_CFG) &
  485. ~SECURITY_AO_INFRA_DXCC_REG0_MASK) |
  486. SECURITY_AO_INFRA_DXCC_REG0_OFF);
  487. }
  488. }
  489. #define MCUCFG_MCSI_DCM_REG0_MASK ((0xffff << 16))
  490. #define MCUCFG_MCSI_DCM_REG0_ON ((0xffff << 16))
  491. #define MCUCFG_MCSI_DCM_REG0_OFF ((0x0 << 16))
  492. bool dcm_mcucfg_mcsi_dcm_is_on(void)
  493. {
  494. bool ret = true;
  495. ret &= !!(reg_read(MCSIA_DCM_EN) &
  496. MCUCFG_MCSI_DCM_REG0_MASK &
  497. MCUCFG_MCSI_DCM_REG0_ON);
  498. return ret;
  499. }
  500. void dcm_mcucfg_mcsi_dcm(int on)
  501. {
  502. if (on) {
  503. /* TINFO = "Turn ON DCM 'mcucfg_mcsi_dcm'" */
  504. reg_write(MCSIA_DCM_EN,
  505. (reg_read(MCSIA_DCM_EN) &
  506. ~MCUCFG_MCSI_DCM_REG0_MASK) |
  507. MCUCFG_MCSI_DCM_REG0_ON);
  508. } else {
  509. /* TINFO = "Turn OFF DCM 'mcucfg_mcsi_dcm'" */
  510. reg_write(MCSIA_DCM_EN,
  511. (reg_read(MCSIA_DCM_EN) &
  512. ~MCUCFG_MCSI_DCM_REG0_MASK) |
  513. MCUCFG_MCSI_DCM_REG0_OFF);
  514. }
  515. }
  516. #define MP0_CPUCFG_MP0_RGU_DCM_REG0_MASK ((0x1 << 0))
  517. #define MP0_CPUCFG_MP0_RGU_DCM_REG0_ON ((0x1 << 0))
  518. #define MP0_CPUCFG_MP0_RGU_DCM_REG0_OFF ((0x0 << 0))
  519. bool dcm_mp0_cpucfg_mp0_rgu_dcm_is_on(void)
  520. {
  521. bool ret = true;
  522. ret &= !!(reg_read(MP0_CPUCFG_MP0_RGU_DCM_CONFIG) &
  523. MP0_CPUCFG_MP0_RGU_DCM_REG0_MASK &
  524. MP0_CPUCFG_MP0_RGU_DCM_REG0_ON);
  525. return ret;
  526. }
  527. void dcm_mp0_cpucfg_mp0_rgu_dcm(int on)
  528. {
  529. if (on) {
  530. /* TINFO = "Turn ON DCM 'mp0_cpucfg_mp0_rgu_dcm'" */
  531. reg_write(MP0_CPUCFG_MP0_RGU_DCM_CONFIG,
  532. (reg_read(MP0_CPUCFG_MP0_RGU_DCM_CONFIG) &
  533. ~MP0_CPUCFG_MP0_RGU_DCM_REG0_MASK) |
  534. MP0_CPUCFG_MP0_RGU_DCM_REG0_ON);
  535. } else {
  536. /* TINFO = "Turn OFF DCM 'mp0_cpucfg_mp0_rgu_dcm'" */
  537. reg_write(MP0_CPUCFG_MP0_RGU_DCM_CONFIG,
  538. (reg_read(MP0_CPUCFG_MP0_RGU_DCM_CONFIG) &
  539. ~MP0_CPUCFG_MP0_RGU_DCM_REG0_MASK) |
  540. MP0_CPUCFG_MP0_RGU_DCM_REG0_OFF);
  541. }
  542. }
  543. #define MP1_CPUCFG_MP1_RGU_DCM_REG0_MASK ((0x1 << 0))
  544. #define MP1_CPUCFG_MP1_RGU_DCM_REG0_ON ((0x1 << 0))
  545. #define MP1_CPUCFG_MP1_RGU_DCM_REG0_OFF ((0x0 << 0))
  546. bool dcm_mp1_cpucfg_mp1_rgu_dcm_is_on(void)
  547. {
  548. bool ret = true;
  549. ret &= !!(reg_read(MP1_CPUCFG_MP1_RGU_DCM_CONFIG) &
  550. MP1_CPUCFG_MP1_RGU_DCM_REG0_MASK &
  551. MP1_CPUCFG_MP1_RGU_DCM_REG0_ON);
  552. return ret;
  553. }
  554. void dcm_mp1_cpucfg_mp1_rgu_dcm(int on)
  555. {
  556. if (on) {
  557. /* TINFO = "Turn ON DCM 'mp1_cpucfg_mp1_rgu_dcm'" */
  558. reg_write(MP1_CPUCFG_MP1_RGU_DCM_CONFIG,
  559. (reg_read(MP1_CPUCFG_MP1_RGU_DCM_CONFIG) &
  560. ~MP1_CPUCFG_MP1_RGU_DCM_REG0_MASK) |
  561. MP1_CPUCFG_MP1_RGU_DCM_REG0_ON);
  562. } else {
  563. /* TINFO = "Turn OFF DCM 'mp1_cpucfg_mp1_rgu_dcm'" */
  564. reg_write(MP1_CPUCFG_MP1_RGU_DCM_CONFIG,
  565. (reg_read(MP1_CPUCFG_MP1_RGU_DCM_CONFIG) &
  566. ~MP1_CPUCFG_MP1_RGU_DCM_REG0_MASK) |
  567. MP1_CPUCFG_MP1_RGU_DCM_REG0_OFF);
  568. }
  569. }
  570. #define MCU_MISCCFG_ADB400_DCM_REG0_MASK ((0x1 << 0) | \
  571. (0x1 << 1) | \
  572. (0x1 << 2) | \
  573. (0x1 << 3) | \
  574. (0x1 << 4) | \
  575. (0x1 << 5) | \
  576. (0x1 << 6) | \
  577. (0x1 << 11))
  578. #define MCU_MISCCFG_ADB400_DCM_REG0_ON ((0x1 << 0) | \
  579. (0x1 << 1) | \
  580. (0x1 << 2) | \
  581. (0x1 << 3) | \
  582. (0x1 << 4) | \
  583. (0x1 << 5) | \
  584. (0x1 << 6) | \
  585. (0x1 << 11))
  586. #define MCU_MISCCFG_ADB400_DCM_REG0_OFF ((0x0 << 0) | \
  587. (0x0 << 1) | \
  588. (0x0 << 2) | \
  589. (0x0 << 3) | \
  590. (0x0 << 4) | \
  591. (0x0 << 5) | \
  592. (0x0 << 6) | \
  593. (0x0 << 11))
  594. bool dcm_mcu_misccfg_adb400_dcm_is_on(void)
  595. {
  596. bool ret = true;
  597. ret &= !!(reg_read(CCI_ADB400_DCM_CONFIG) &
  598. MCU_MISCCFG_ADB400_DCM_REG0_MASK &
  599. MCU_MISCCFG_ADB400_DCM_REG0_ON);
  600. return ret;
  601. }
  602. void dcm_mcu_misccfg_adb400_dcm(int on)
  603. {
  604. if (on) {
  605. /* TINFO = "Turn ON DCM 'mcu_misccfg_adb400_dcm'" */
  606. reg_write(CCI_ADB400_DCM_CONFIG,
  607. (reg_read(CCI_ADB400_DCM_CONFIG) &
  608. ~MCU_MISCCFG_ADB400_DCM_REG0_MASK) |
  609. MCU_MISCCFG_ADB400_DCM_REG0_ON);
  610. } else {
  611. /* TINFO = "Turn OFF DCM 'mcu_misccfg_adb400_dcm'" */
  612. reg_write(CCI_ADB400_DCM_CONFIG,
  613. (reg_read(CCI_ADB400_DCM_CONFIG) &
  614. ~MCU_MISCCFG_ADB400_DCM_REG0_MASK) |
  615. MCU_MISCCFG_ADB400_DCM_REG0_OFF);
  616. }
  617. }
  618. #define MCU_MISCCFG_BUS_ARM_PLL_DIVIDER_DCM_REG0_MASK ((0x1 << 11))
  619. #define MCU_MISCCFG_BUS_ARM_PLL_DIVIDER_DCM_REG0_ON ((0x1 << 11))
  620. #define MCU_MISCCFG_BUS_ARM_PLL_DIVIDER_DCM_REG0_OFF ((0x0 << 11))
  621. bool dcm_mcu_misccfg_bus_arm_pll_divider_dcm_is_on(void)
  622. {
  623. bool ret = true;
  624. ret &= !!(reg_read(BUS_PLL_DIVIDER_CFG) &
  625. MCU_MISCCFG_BUS_ARM_PLL_DIVIDER_DCM_REG0_MASK &
  626. MCU_MISCCFG_BUS_ARM_PLL_DIVIDER_DCM_REG0_ON);
  627. return ret;
  628. }
  629. void dcm_mcu_misccfg_bus_arm_pll_divider_dcm(int on)
  630. {
  631. if (on) {
  632. /* TINFO = "Turn ON DCM 'mcu_misccfg_bus_arm_pll_divider_dcm'" */
  633. reg_write(BUS_PLL_DIVIDER_CFG,
  634. (reg_read(BUS_PLL_DIVIDER_CFG) &
  635. ~MCU_MISCCFG_BUS_ARM_PLL_DIVIDER_DCM_REG0_MASK) |
  636. MCU_MISCCFG_BUS_ARM_PLL_DIVIDER_DCM_REG0_ON);
  637. } else {
  638. /* TINFO = "Turn OFF DCM 'mcu_misccfg_bus_arm_pll_divider_dcm'" */
  639. reg_write(BUS_PLL_DIVIDER_CFG,
  640. (reg_read(BUS_PLL_DIVIDER_CFG) &
  641. ~MCU_MISCCFG_BUS_ARM_PLL_DIVIDER_DCM_REG0_MASK) |
  642. MCU_MISCCFG_BUS_ARM_PLL_DIVIDER_DCM_REG0_OFF);
  643. }
  644. }
  645. #define MCU_MISCCFG_BUS_SYNC_DCM_REG0_MASK ((0x1 << 0) | \
  646. (0x1 << 1) | \
  647. (0x7f << 2))
  648. #define MCU_MISCCFG_BUS_SYNC_DCM_REG0_ON ((0x1 << 0) | \
  649. (0x0 << 1) | \
  650. (0x0 << 2))
  651. #define MCU_MISCCFG_BUS_SYNC_DCM_REG0_OFF ((0x0 << 0) | \
  652. (0x0 << 1) | \
  653. (0x0 << 2))
  654. bool dcm_mcu_misccfg_bus_sync_dcm_is_on(void)
  655. {
  656. bool ret = true;
  657. ret &= !!(reg_read(SYNC_DCM_CONFIG) &
  658. MCU_MISCCFG_BUS_SYNC_DCM_REG0_MASK &
  659. MCU_MISCCFG_BUS_SYNC_DCM_REG0_ON);
  660. return ret;
  661. }
  662. void dcm_mcu_misccfg_bus_sync_dcm(int on)
  663. {
  664. if (on) {
  665. /* TINFO = "Turn ON DCM 'mcu_misccfg_bus_sync_dcm'" */
  666. reg_write(SYNC_DCM_CONFIG,
  667. (reg_read(SYNC_DCM_CONFIG) &
  668. ~MCU_MISCCFG_BUS_SYNC_DCM_REG0_MASK) |
  669. MCU_MISCCFG_BUS_SYNC_DCM_REG0_ON);
  670. } else {
  671. /* TINFO = "Turn OFF DCM 'mcu_misccfg_bus_sync_dcm'" */
  672. reg_write(SYNC_DCM_CONFIG,
  673. (reg_read(SYNC_DCM_CONFIG) &
  674. ~MCU_MISCCFG_BUS_SYNC_DCM_REG0_MASK) |
  675. MCU_MISCCFG_BUS_SYNC_DCM_REG0_OFF);
  676. }
  677. }
  678. #define MCU_MISCCFG_BUS_CLOCK_DCM_REG0_MASK ((0x1 << 8))
  679. #define MCU_MISCCFG_BUS_CLOCK_DCM_REG0_ON ((0x1 << 8))
  680. #define MCU_MISCCFG_BUS_CLOCK_DCM_REG0_OFF ((0x0 << 8))
  681. bool dcm_mcu_misccfg_bus_clock_dcm_is_on(void)
  682. {
  683. bool ret = true;
  684. ret &= !!(reg_read(CCI_CLK_CTRL) &
  685. MCU_MISCCFG_BUS_CLOCK_DCM_REG0_MASK &
  686. MCU_MISCCFG_BUS_CLOCK_DCM_REG0_ON);
  687. return ret;
  688. }
  689. void dcm_mcu_misccfg_bus_clock_dcm(int on)
  690. {
  691. if (on) {
  692. /* TINFO = "Turn ON DCM 'mcu_misccfg_bus_clock_dcm'" */
  693. reg_write(CCI_CLK_CTRL,
  694. (reg_read(CCI_CLK_CTRL) &
  695. ~MCU_MISCCFG_BUS_CLOCK_DCM_REG0_MASK) |
  696. MCU_MISCCFG_BUS_CLOCK_DCM_REG0_ON);
  697. } else {
  698. /* TINFO = "Turn OFF DCM 'mcu_misccfg_bus_clock_dcm'" */
  699. reg_write(CCI_CLK_CTRL,
  700. (reg_read(CCI_CLK_CTRL) &
  701. ~MCU_MISCCFG_BUS_CLOCK_DCM_REG0_MASK) |
  702. MCU_MISCCFG_BUS_CLOCK_DCM_REG0_OFF);
  703. }
  704. }
  705. #define MCU_MISCCFG_BUS_FABRIC_DCM_REG0_MASK ((0x1 << 0) | \
  706. (0x1 << 1) | \
  707. (0x1 << 2) | \
  708. (0x1 << 3) | \
  709. (0x1 << 4) | \
  710. (0x1 << 5) | \
  711. (0x1 << 6) | \
  712. (0x1 << 7) | \
  713. (0x1 << 8) | \
  714. (0x1 << 9) | \
  715. (0x1 << 10) | \
  716. (0x1 << 11) | \
  717. (0x1 << 12) | \
  718. (0x1 << 16) | \
  719. (0x1 << 17) | \
  720. (0x1 << 18) | \
  721. (0x1 << 19) | \
  722. (0x1 << 20) | \
  723. (0x1 << 21) | \
  724. (0x1 << 22) | \
  725. (0x1 << 23) | \
  726. (0x1 << 24) | \
  727. (0x1 << 25) | \
  728. (0x1 << 26) | \
  729. (0x1 << 27) | \
  730. (0x1 << 28) | \
  731. (0x1 << 29))
  732. #define MCU_MISCCFG_BUS_FABRIC_DCM_REG0_ON ((0x1 << 0) | \
  733. (0x1 << 1) | \
  734. (0x1 << 2) | \
  735. (0x1 << 3) | \
  736. (0x1 << 4) | \
  737. (0x1 << 5) | \
  738. (0x1 << 6) | \
  739. (0x1 << 7) | \
  740. (0x1 << 8) | \
  741. (0x1 << 9) | \
  742. (0x1 << 10) | \
  743. (0x1 << 11) | \
  744. (0x1 << 12) | \
  745. (0x1 << 16) | \
  746. (0x1 << 17) | \
  747. (0x1 << 18) | \
  748. (0x1 << 19) | \
  749. (0x1 << 20) | \
  750. (0x1 << 21) | \
  751. (0x1 << 22) | \
  752. (0x1 << 23) | \
  753. (0x1 << 24) | \
  754. (0x1 << 25) | \
  755. (0x1 << 26) | \
  756. (0x1 << 27) | \
  757. (0x1 << 28) | \
  758. (0x1 << 29))
  759. #define MCU_MISCCFG_BUS_FABRIC_DCM_REG0_OFF ((0x0 << 0) | \
  760. (0x0 << 1) | \
  761. (0x0 << 2) | \
  762. (0x0 << 3) | \
  763. (0x0 << 4) | \
  764. (0x0 << 5) | \
  765. (0x0 << 6) | \
  766. (0x0 << 7) | \
  767. (0x0 << 8) | \
  768. (0x0 << 9) | \
  769. (0x0 << 10) | \
  770. (0x0 << 11) | \
  771. (0x0 << 12) | \
  772. (0x0 << 16) | \
  773. (0x0 << 17) | \
  774. (0x0 << 18) | \
  775. (0x0 << 19) | \
  776. (0x0 << 20) | \
  777. (0x0 << 21) | \
  778. (0x0 << 22) | \
  779. (0x0 << 23) | \
  780. (0x0 << 24) | \
  781. (0x0 << 25) | \
  782. (0x0 << 26) | \
  783. (0x0 << 27) | \
  784. (0x0 << 28) | \
  785. (0x0 << 29))
  786. bool dcm_mcu_misccfg_bus_fabric_dcm_is_on(void)
  787. {
  788. bool ret = true;
  789. ret &= !!(reg_read(BUS_FABRIC_DCM_CTRL) &
  790. MCU_MISCCFG_BUS_FABRIC_DCM_REG0_MASK &
  791. MCU_MISCCFG_BUS_FABRIC_DCM_REG0_ON);
  792. return ret;
  793. }
  794. void dcm_mcu_misccfg_bus_fabric_dcm(int on)
  795. {
  796. if (on) {
  797. /* TINFO = "Turn ON DCM 'mcu_misccfg_bus_fabric_dcm'" */
  798. reg_write(BUS_FABRIC_DCM_CTRL,
  799. (reg_read(BUS_FABRIC_DCM_CTRL) &
  800. ~MCU_MISCCFG_BUS_FABRIC_DCM_REG0_MASK) |
  801. MCU_MISCCFG_BUS_FABRIC_DCM_REG0_ON);
  802. } else {
  803. /* TINFO = "Turn OFF DCM 'mcu_misccfg_bus_fabric_dcm'" */
  804. reg_write(BUS_FABRIC_DCM_CTRL,
  805. (reg_read(BUS_FABRIC_DCM_CTRL) &
  806. ~MCU_MISCCFG_BUS_FABRIC_DCM_REG0_MASK) |
  807. MCU_MISCCFG_BUS_FABRIC_DCM_REG0_OFF);
  808. }
  809. }
  810. #define MCU_MISCCFG_GIC_SYNC_DCM_REG0_MASK ((0x1 << 0))
  811. #define MCU_MISCCFG_GIC_SYNC_DCM_REG0_ON ((0x1 << 0))
  812. #define MCU_MISCCFG_GIC_SYNC_DCM_REG0_OFF ((0x0 << 0))
  813. bool dcm_mcu_misccfg_gic_sync_dcm_is_on(void)
  814. {
  815. bool ret = true;
  816. ret &= !!(reg_read(MP_GIC_RGU_SYNC_DCM) &
  817. MCU_MISCCFG_GIC_SYNC_DCM_REG0_MASK &
  818. MCU_MISCCFG_GIC_SYNC_DCM_REG0_ON);
  819. return ret;
  820. }
  821. void dcm_mcu_misccfg_gic_sync_dcm(int on)
  822. {
  823. if (on) {
  824. /* TINFO = "Turn ON DCM 'mcu_misccfg_gic_sync_dcm'" */
  825. reg_write(MP_GIC_RGU_SYNC_DCM,
  826. (reg_read(MP_GIC_RGU_SYNC_DCM) &
  827. ~MCU_MISCCFG_GIC_SYNC_DCM_REG0_MASK) |
  828. MCU_MISCCFG_GIC_SYNC_DCM_REG0_ON);
  829. } else {
  830. /* TINFO = "Turn OFF DCM 'mcu_misccfg_gic_sync_dcm'" */
  831. reg_write(MP_GIC_RGU_SYNC_DCM,
  832. (reg_read(MP_GIC_RGU_SYNC_DCM) &
  833. ~MCU_MISCCFG_GIC_SYNC_DCM_REG0_MASK) |
  834. MCU_MISCCFG_GIC_SYNC_DCM_REG0_OFF);
  835. }
  836. }
  837. #define MCU_MISCCFG_L2_SHARED_DCM_REG0_MASK ((0x1 << 0))
  838. #define MCU_MISCCFG_L2_SHARED_DCM_REG0_ON ((0x1 << 0))
  839. #define MCU_MISCCFG_L2_SHARED_DCM_REG0_OFF ((0x0 << 0))
  840. bool dcm_mcu_misccfg_l2_shared_dcm_is_on(void)
  841. {
  842. bool ret = true;
  843. ret &= !!(reg_read(L2C_SRAM_CTRL) &
  844. MCU_MISCCFG_L2_SHARED_DCM_REG0_MASK &
  845. MCU_MISCCFG_L2_SHARED_DCM_REG0_ON);
  846. return ret;
  847. }
  848. void dcm_mcu_misccfg_l2_shared_dcm(int on)
  849. {
  850. if (on) {
  851. /* TINFO = "Turn ON DCM 'mcu_misccfg_l2_shared_dcm'" */
  852. reg_write(L2C_SRAM_CTRL,
  853. (reg_read(L2C_SRAM_CTRL) &
  854. ~MCU_MISCCFG_L2_SHARED_DCM_REG0_MASK) |
  855. MCU_MISCCFG_L2_SHARED_DCM_REG0_ON);
  856. } else {
  857. /* TINFO = "Turn OFF DCM 'mcu_misccfg_l2_shared_dcm'" */
  858. reg_write(L2C_SRAM_CTRL,
  859. (reg_read(L2C_SRAM_CTRL) &
  860. ~MCU_MISCCFG_L2_SHARED_DCM_REG0_MASK) |
  861. MCU_MISCCFG_L2_SHARED_DCM_REG0_OFF);
  862. }
  863. }
  864. #define MCU_MISCCFG_MP0_ARM_PLL_DIVIDER_DCM_REG0_MASK ((0x1 << 11) | \
  865. (0x1 << 31))
  866. #define MCU_MISCCFG_MP0_ARM_PLL_DIVIDER_DCM_REG0_ON ((0x1 << 11) | \
  867. (0x0 << 31))
  868. #define MCU_MISCCFG_MP0_ARM_PLL_DIVIDER_DCM_REG0_OFF ((0x0 << 11) | \
  869. (0x0 << 31))
  870. bool dcm_mcu_misccfg_mp0_arm_pll_divider_dcm_is_on(void)
  871. {
  872. bool ret = true;
  873. ret &= !!(reg_read(MP0_PLL_DIVIDER_CFG) &
  874. MCU_MISCCFG_MP0_ARM_PLL_DIVIDER_DCM_REG0_MASK &
  875. MCU_MISCCFG_MP0_ARM_PLL_DIVIDER_DCM_REG0_ON);
  876. return ret;
  877. }
  878. void dcm_mcu_misccfg_mp0_arm_pll_divider_dcm(int on)
  879. {
  880. if (on) {
  881. /* TINFO = "Turn ON DCM 'mcu_misccfg_mp0_arm_pll_divider_dcm'" */
  882. reg_write(MP0_PLL_DIVIDER_CFG,
  883. (reg_read(MP0_PLL_DIVIDER_CFG) &
  884. ~MCU_MISCCFG_MP0_ARM_PLL_DIVIDER_DCM_REG0_MASK) |
  885. MCU_MISCCFG_MP0_ARM_PLL_DIVIDER_DCM_REG0_ON);
  886. } else {
  887. /* TINFO = "Turn OFF DCM 'mcu_misccfg_mp0_arm_pll_divider_dcm'" */
  888. reg_write(MP0_PLL_DIVIDER_CFG,
  889. (reg_read(MP0_PLL_DIVIDER_CFG) &
  890. ~MCU_MISCCFG_MP0_ARM_PLL_DIVIDER_DCM_REG0_MASK) |
  891. MCU_MISCCFG_MP0_ARM_PLL_DIVIDER_DCM_REG0_OFF);
  892. }
  893. }
  894. #define MCU_MISCCFG_MP0_STALL_DCM_REG0_MASK ((0x1f << 0) | \
  895. (0x1 << 7))
  896. #define MCU_MISCCFG_MP0_STALL_DCM_REG0_ON ((0xf << 0) | \
  897. (0x1 << 7))
  898. #define MCU_MISCCFG_MP0_STALL_DCM_REG0_OFF ((0x0 << 0) | \
  899. (0x0 << 7))
  900. bool dcm_mcu_misccfg_mp0_stall_dcm_is_on(void)
  901. {
  902. bool ret = true;
  903. ret &= !!(reg_read(SYNC_DCM_CLUSTER_CONFIG) &
  904. MCU_MISCCFG_MP0_STALL_DCM_REG0_MASK &
  905. MCU_MISCCFG_MP0_STALL_DCM_REG0_ON);
  906. return ret;
  907. }
  908. void dcm_mcu_misccfg_mp0_stall_dcm(int on)
  909. {
  910. if (on) {
  911. /* TINFO = "Turn ON DCM 'mcu_misccfg_mp0_stall_dcm'" */
  912. reg_write(SYNC_DCM_CLUSTER_CONFIG,
  913. (reg_read(SYNC_DCM_CLUSTER_CONFIG) &
  914. ~MCU_MISCCFG_MP0_STALL_DCM_REG0_MASK) |
  915. MCU_MISCCFG_MP0_STALL_DCM_REG0_ON);
  916. } else {
  917. /* TINFO = "Turn OFF DCM 'mcu_misccfg_mp0_stall_dcm'" */
  918. reg_write(SYNC_DCM_CLUSTER_CONFIG,
  919. (reg_read(SYNC_DCM_CLUSTER_CONFIG) &
  920. ~MCU_MISCCFG_MP0_STALL_DCM_REG0_MASK) |
  921. MCU_MISCCFG_MP0_STALL_DCM_REG0_OFF);
  922. }
  923. }
  924. #define MCU_MISCCFG_MP0_SYNC_DCM_ENABLE_REG0_MASK ((0x1 << 10) | \
  925. (0x1 << 11) | \
  926. (0x7f << 12))
  927. #define MCU_MISCCFG_MP0_SYNC_DCM_ENABLE_REG0_ON ((0x1 << 10) | \
  928. (0x0 << 11) | \
  929. (0x0 << 12))
  930. #define MCU_MISCCFG_MP0_SYNC_DCM_ENABLE_REG0_OFF ((0x0 << 10) | \
  931. (0x0 << 11) | \
  932. (0x0 << 12))
  933. bool dcm_mcu_misccfg_mp0_sync_dcm_enable_is_on(void)
  934. {
  935. bool ret = true;
  936. ret &= !!(reg_read(SYNC_DCM_CONFIG) &
  937. MCU_MISCCFG_MP0_SYNC_DCM_ENABLE_REG0_MASK &
  938. MCU_MISCCFG_MP0_SYNC_DCM_ENABLE_REG0_ON);
  939. return ret;
  940. }
  941. void dcm_mcu_misccfg_mp0_sync_dcm_enable(int on)
  942. {
  943. if (on) {
  944. /* TINFO = "Turn ON DCM 'mcu_misccfg_mp0_sync_dcm_enable'" */
  945. reg_write(SYNC_DCM_CONFIG,
  946. (reg_read(SYNC_DCM_CONFIG) &
  947. ~MCU_MISCCFG_MP0_SYNC_DCM_ENABLE_REG0_MASK) |
  948. MCU_MISCCFG_MP0_SYNC_DCM_ENABLE_REG0_ON);
  949. } else {
  950. /* TINFO = "Turn OFF DCM 'mcu_misccfg_mp0_sync_dcm_enable'" */
  951. reg_write(SYNC_DCM_CONFIG,
  952. (reg_read(SYNC_DCM_CONFIG) &
  953. ~MCU_MISCCFG_MP0_SYNC_DCM_ENABLE_REG0_MASK) |
  954. MCU_MISCCFG_MP0_SYNC_DCM_ENABLE_REG0_OFF);
  955. }
  956. }
  957. #define MCU_MISCCFG_MP1_ARM_PLL_DIVIDER_DCM_REG0_MASK ((0x1 << 11) | \
  958. (0x1 << 31))
  959. #define MCU_MISCCFG_MP1_ARM_PLL_DIVIDER_DCM_REG0_ON ((0x1 << 11) | \
  960. (0x0 << 31))
  961. #define MCU_MISCCFG_MP1_ARM_PLL_DIVIDER_DCM_REG0_OFF ((0x0 << 11) | \
  962. (0x0 << 31))
  963. bool dcm_mcu_misccfg_mp1_arm_pll_divider_dcm_is_on(void)
  964. {
  965. bool ret = true;
  966. ret &= !!(reg_read(MP1_PLL_DIVIDER_CFG) &
  967. MCU_MISCCFG_MP1_ARM_PLL_DIVIDER_DCM_REG0_MASK &
  968. MCU_MISCCFG_MP1_ARM_PLL_DIVIDER_DCM_REG0_ON);
  969. return ret;
  970. }
  971. void dcm_mcu_misccfg_mp1_arm_pll_divider_dcm(int on)
  972. {
  973. if (on) {
  974. /* TINFO = "Turn ON DCM 'mcu_misccfg_mp1_arm_pll_divider_dcm'" */
  975. reg_write(MP1_PLL_DIVIDER_CFG,
  976. (reg_read(MP1_PLL_DIVIDER_CFG) &
  977. ~MCU_MISCCFG_MP1_ARM_PLL_DIVIDER_DCM_REG0_MASK) |
  978. MCU_MISCCFG_MP1_ARM_PLL_DIVIDER_DCM_REG0_ON);
  979. } else {
  980. /* TINFO = "Turn OFF DCM 'mcu_misccfg_mp1_arm_pll_divider_dcm'" */
  981. reg_write(MP1_PLL_DIVIDER_CFG,
  982. (reg_read(MP1_PLL_DIVIDER_CFG) &
  983. ~MCU_MISCCFG_MP1_ARM_PLL_DIVIDER_DCM_REG0_MASK) |
  984. MCU_MISCCFG_MP1_ARM_PLL_DIVIDER_DCM_REG0_OFF);
  985. }
  986. }
  987. #define MCU_MISCCFG_MP1_STALL_DCM_REG0_MASK ((0x1f << 8) | \
  988. (0x1 << 15))
  989. #define MCU_MISCCFG_MP1_STALL_DCM_REG0_ON ((0xf << 8) | \
  990. (0x1 << 15))
  991. #define MCU_MISCCFG_MP1_STALL_DCM_REG0_OFF ((0x0 << 8) | \
  992. (0x0 << 15))
  993. bool dcm_mcu_misccfg_mp1_stall_dcm_is_on(void)
  994. {
  995. bool ret = true;
  996. ret &= !!(reg_read(SYNC_DCM_CLUSTER_CONFIG) &
  997. MCU_MISCCFG_MP1_STALL_DCM_REG0_MASK &
  998. MCU_MISCCFG_MP1_STALL_DCM_REG0_ON);
  999. return ret;
  1000. }
  1001. void dcm_mcu_misccfg_mp1_stall_dcm(int on)
  1002. {
  1003. if (on) {
  1004. /* TINFO = "Turn ON DCM 'mcu_misccfg_mp1_stall_dcm'" */
  1005. reg_write(SYNC_DCM_CLUSTER_CONFIG,
  1006. (reg_read(SYNC_DCM_CLUSTER_CONFIG) &
  1007. ~MCU_MISCCFG_MP1_STALL_DCM_REG0_MASK) |
  1008. MCU_MISCCFG_MP1_STALL_DCM_REG0_ON);
  1009. } else {
  1010. /* TINFO = "Turn OFF DCM 'mcu_misccfg_mp1_stall_dcm'" */
  1011. reg_write(SYNC_DCM_CLUSTER_CONFIG,
  1012. (reg_read(SYNC_DCM_CLUSTER_CONFIG) &
  1013. ~MCU_MISCCFG_MP1_STALL_DCM_REG0_MASK) |
  1014. MCU_MISCCFG_MP1_STALL_DCM_REG0_OFF);
  1015. }
  1016. }
  1017. #define MCU_MISCCFG_MP1_SYNC_DCM_ENABLE_REG0_MASK ((0x1 << 20) | \
  1018. (0x1 << 21) | \
  1019. (0x7f << 22))
  1020. #define MCU_MISCCFG_MP1_SYNC_DCM_ENABLE_REG0_ON ((0x1 << 20) | \
  1021. (0x0 << 21) | \
  1022. (0x0 << 22))
  1023. #define MCU_MISCCFG_MP1_SYNC_DCM_ENABLE_REG0_OFF ((0x0 << 20) | \
  1024. (0x0 << 21) | \
  1025. (0x0 << 22))
  1026. bool dcm_mcu_misccfg_mp1_sync_dcm_enable_is_on(void)
  1027. {
  1028. bool ret = true;
  1029. ret &= !!(reg_read(SYNC_DCM_CONFIG) &
  1030. MCU_MISCCFG_MP1_SYNC_DCM_ENABLE_REG0_MASK &
  1031. MCU_MISCCFG_MP1_SYNC_DCM_ENABLE_REG0_ON);
  1032. return ret;
  1033. }
  1034. void dcm_mcu_misccfg_mp1_sync_dcm_enable(int on)
  1035. {
  1036. if (on) {
  1037. /* TINFO = "Turn ON DCM 'mcu_misccfg_mp1_sync_dcm_enable'" */
  1038. reg_write(SYNC_DCM_CONFIG,
  1039. (reg_read(SYNC_DCM_CONFIG) &
  1040. ~MCU_MISCCFG_MP1_SYNC_DCM_ENABLE_REG0_MASK) |
  1041. MCU_MISCCFG_MP1_SYNC_DCM_ENABLE_REG0_ON);
  1042. } else {
  1043. /* TINFO = "Turn OFF DCM 'mcu_misccfg_mp1_sync_dcm_enable'" */
  1044. reg_write(SYNC_DCM_CONFIG,
  1045. (reg_read(SYNC_DCM_CONFIG) &
  1046. ~MCU_MISCCFG_MP1_SYNC_DCM_ENABLE_REG0_MASK) |
  1047. MCU_MISCCFG_MP1_SYNC_DCM_ENABLE_REG0_OFF);
  1048. }
  1049. }
  1050. #define MCU_MISCCFG_MCU_MISC_DCM_REG0_MASK ((0x1 << 0) | \
  1051. (0x1 << 1))
  1052. #define MCU_MISCCFG_MCU_MISC_DCM_REG0_ON ((0x1 << 0) | \
  1053. (0x1 << 1))
  1054. #define MCU_MISCCFG_MCU_MISC_DCM_REG0_OFF ((0x0 << 0) | \
  1055. (0x0 << 1))
  1056. bool dcm_mcu_misccfg_mcu_misc_dcm_is_on(void)
  1057. {
  1058. bool ret = true;
  1059. ret &= !!(reg_read(MCU_MISC_DCM_CTRL) &
  1060. MCU_MISCCFG_MCU_MISC_DCM_REG0_MASK &
  1061. MCU_MISCCFG_MCU_MISC_DCM_REG0_ON);
  1062. return ret;
  1063. }
  1064. void dcm_mcu_misccfg_mcu_misc_dcm(int on)
  1065. {
  1066. if (on) {
  1067. /* TINFO = "Turn ON DCM 'mcu_misccfg_mcu_misc_dcm'" */
  1068. reg_write(MCU_MISC_DCM_CTRL,
  1069. (reg_read(MCU_MISC_DCM_CTRL) &
  1070. ~MCU_MISCCFG_MCU_MISC_DCM_REG0_MASK) |
  1071. MCU_MISCCFG_MCU_MISC_DCM_REG0_ON);
  1072. } else {
  1073. /* TINFO = "Turn OFF DCM 'mcu_misccfg_mcu_misc_dcm'" */
  1074. reg_write(MCU_MISC_DCM_CTRL,
  1075. (reg_read(MCU_MISC_DCM_CTRL) &
  1076. ~MCU_MISCCFG_MCU_MISC_DCM_REG0_MASK) |
  1077. MCU_MISCCFG_MCU_MISC_DCM_REG0_OFF);
  1078. }
  1079. }
  1080. #define CHN0_EMI_DCM_EMI_GROUP_REG0_MASK ((0xff << 24))
  1081. #define CHN0_EMI_DCM_EMI_GROUP_REG0_ON ((0x0 << 24))
  1082. #define CHN0_EMI_DCM_EMI_GROUP_REG0_OFF ((0xff << 24))
  1083. bool dcm_chn0_emi_dcm_emi_group_is_on(void)
  1084. {
  1085. bool ret = true;
  1086. ret &= !!(reg_read(CHN0_EMI_CHN_EMI_CONB) &
  1087. CHN0_EMI_DCM_EMI_GROUP_REG0_MASK &
  1088. CHN0_EMI_DCM_EMI_GROUP_REG0_ON);
  1089. return ret;
  1090. }
  1091. void dcm_chn0_emi_dcm_emi_group(int on)
  1092. {
  1093. if (on) {
  1094. /* TINFO = "Turn ON DCM 'chn0_emi_dcm_emi_group'" */
  1095. reg_write(CHN0_EMI_CHN_EMI_CONB,
  1096. (reg_read(CHN0_EMI_CHN_EMI_CONB) &
  1097. ~CHN0_EMI_DCM_EMI_GROUP_REG0_MASK) |
  1098. CHN0_EMI_DCM_EMI_GROUP_REG0_ON);
  1099. } else {
  1100. /* TINFO = "Turn OFF DCM 'chn0_emi_dcm_emi_group'" */
  1101. reg_write(CHN0_EMI_CHN_EMI_CONB,
  1102. (reg_read(CHN0_EMI_CHN_EMI_CONB) &
  1103. ~CHN0_EMI_DCM_EMI_GROUP_REG0_MASK) |
  1104. CHN0_EMI_DCM_EMI_GROUP_REG0_OFF);
  1105. }
  1106. }
  1107. #define CHN1_EMI_DCM_EMI_GROUP_REG0_MASK ((0xff << 24))
  1108. #define CHN1_EMI_DCM_EMI_GROUP_REG0_ON ((0x0 << 24))
  1109. #define CHN1_EMI_DCM_EMI_GROUP_REG0_OFF ((0xff << 24))
  1110. bool dcm_chn1_emi_dcm_emi_group_is_on(void)
  1111. {
  1112. bool ret = true;
  1113. ret &= !!(reg_read(CHN1_EMI_CHN_EMI_CONB) &
  1114. CHN1_EMI_DCM_EMI_GROUP_REG0_MASK &
  1115. CHN1_EMI_DCM_EMI_GROUP_REG0_ON);
  1116. return ret;
  1117. }
  1118. void dcm_chn1_emi_dcm_emi_group(int on)
  1119. {
  1120. if (on) {
  1121. /* TINFO = "Turn ON DCM 'chn1_emi_dcm_emi_group'" */
  1122. reg_write(CHN1_EMI_CHN_EMI_CONB,
  1123. (reg_read(CHN1_EMI_CHN_EMI_CONB) &
  1124. ~CHN1_EMI_DCM_EMI_GROUP_REG0_MASK) |
  1125. CHN1_EMI_DCM_EMI_GROUP_REG0_ON);
  1126. } else {
  1127. /* TINFO = "Turn OFF DCM 'chn1_emi_dcm_emi_group'" */
  1128. reg_write(CHN1_EMI_CHN_EMI_CONB,
  1129. (reg_read(CHN1_EMI_CHN_EMI_CONB) &
  1130. ~CHN1_EMI_DCM_EMI_GROUP_REG0_MASK) |
  1131. CHN1_EMI_DCM_EMI_GROUP_REG0_OFF);
  1132. }
  1133. }
  1134. #define GCE_GCE_DCM_REG0_MASK ((0xffff << 0))
  1135. #define GCE_GCE_DCM_REG0_ON ((0xffff << 0))
  1136. #define GCE_GCE_DCM_REG0_OFF ((0xffff << 0))
  1137. bool dcm_gce_gce_dcm_is_on(void)
  1138. {
  1139. bool ret = true;
  1140. ret &= !!(reg_read(GCE_CTL_INT0) &
  1141. GCE_GCE_DCM_REG0_MASK &
  1142. GCE_GCE_DCM_REG0_ON);
  1143. return ret;
  1144. }
  1145. void dcm_gce_gce_dcm(int on)
  1146. {
  1147. if (on) {
  1148. /* TINFO = "Turn ON DCM 'gce_gce_dcm'" */
  1149. reg_write(GCE_CTL_INT0,
  1150. (reg_read(GCE_CTL_INT0) &
  1151. ~GCE_GCE_DCM_REG0_MASK) |
  1152. GCE_GCE_DCM_REG0_ON);
  1153. } else {
  1154. /* TINFO = "Turn OFF DCM 'gce_gce_dcm'" */
  1155. reg_write(GCE_CTL_INT0,
  1156. (reg_read(GCE_CTL_INT0) &
  1157. ~GCE_GCE_DCM_REG0_MASK) |
  1158. GCE_GCE_DCM_REG0_OFF);
  1159. }
  1160. }
  1161. #define AUDIO_AUDIO_BUS_REG0_MASK ((0x1 << 29) | \
  1162. (0x1 << 30))
  1163. #define AUDIO_AUDIO_BUS_REG0_ON ((0x1 << 29) | \
  1164. (0x1 << 30))
  1165. #define AUDIO_AUDIO_BUS_REG0_OFF ((0x0 << 29) | \
  1166. (0x0 << 30))
  1167. bool dcm_audio_audio_bus_is_on(void)
  1168. {
  1169. bool ret = true;
  1170. ret &= !!(reg_read(AUDIO_TOP_CON0) &
  1171. AUDIO_AUDIO_BUS_REG0_MASK &
  1172. AUDIO_AUDIO_BUS_REG0_ON);
  1173. return ret;
  1174. }
  1175. void dcm_audio_audio_bus(int on)
  1176. {
  1177. if (on) {
  1178. /* TINFO = "Turn ON DCM 'audio_audio_bus'" */
  1179. reg_write(AUDIO_TOP_CON0,
  1180. (reg_read(AUDIO_TOP_CON0) &
  1181. ~AUDIO_AUDIO_BUS_REG0_MASK) |
  1182. AUDIO_AUDIO_BUS_REG0_ON);
  1183. } else {
  1184. /* TINFO = "Turn OFF DCM 'audio_audio_bus'" */
  1185. reg_write(AUDIO_TOP_CON0,
  1186. (reg_read(AUDIO_TOP_CON0) &
  1187. ~AUDIO_AUDIO_BUS_REG0_MASK) |
  1188. AUDIO_AUDIO_BUS_REG0_OFF);
  1189. }
  1190. }
  1191. #define EFUSEC_EFUSE_DCM_REG0_MASK ((0x1 << 0) | \
  1192. (0x1 << 1) | \
  1193. (0x1 << 2))
  1194. #define EFUSEC_EFUSE_DCM_REG0_ON ((0x1 << 0) | \
  1195. (0x1 << 1) | \
  1196. (0x1 << 2))
  1197. #define EFUSEC_EFUSE_DCM_REG0_OFF ((0x0 << 0) | \
  1198. (0x0 << 1) | \
  1199. (0x0 << 2))
  1200. bool dcm_efusec_efuse_dcm_is_on(void)
  1201. {
  1202. bool ret = true;
  1203. ret &= !!(reg_read(EFUSEC_DCM_ON) &
  1204. EFUSEC_EFUSE_DCM_REG0_MASK &
  1205. EFUSEC_EFUSE_DCM_REG0_ON);
  1206. return ret;
  1207. }
  1208. void dcm_efusec_efuse_dcm(int on)
  1209. {
  1210. if (on) {
  1211. /* TINFO = "Turn ON DCM 'efusec_efuse_dcm'" */
  1212. reg_write(EFUSEC_DCM_ON,
  1213. (reg_read(EFUSEC_DCM_ON) &
  1214. ~EFUSEC_EFUSE_DCM_REG0_MASK) |
  1215. EFUSEC_EFUSE_DCM_REG0_ON);
  1216. } else {
  1217. /* TINFO = "Turn OFF DCM 'efusec_efuse_dcm'" */
  1218. reg_write(EFUSEC_DCM_ON,
  1219. (reg_read(EFUSEC_DCM_ON) &
  1220. ~EFUSEC_EFUSE_DCM_REG0_MASK) |
  1221. EFUSEC_EFUSE_DCM_REG0_OFF);
  1222. }
  1223. }
  1224. #define MFGCFG_MEG_REG0_MASK ((0x1 << 15))
  1225. #define MFGCFG_MEG_REG0_ON ((0x0 << 15))
  1226. #define MFGCFG_MEG_REG0_OFF ((0x0 << 15))
  1227. bool dcm_mfgcfg_meg_is_on(void)
  1228. {
  1229. bool ret = true;
  1230. ret &= !!(reg_read(MFGCFG_MFG_DCM_CON_0) &
  1231. MFGCFG_MEG_REG0_MASK &
  1232. MFGCFG_MEG_REG0_ON);
  1233. return ret;
  1234. }
  1235. void dcm_mfgcfg_meg(int on)
  1236. {
  1237. if (on) {
  1238. /* TINFO = "Turn ON DCM 'mfgcfg_meg'" */
  1239. reg_write(MFGCFG_MFG_DCM_CON_0,
  1240. (reg_read(MFGCFG_MFG_DCM_CON_0) &
  1241. ~MFGCFG_MEG_REG0_MASK) |
  1242. MFGCFG_MEG_REG0_ON);
  1243. } else {
  1244. /* TINFO = "Turn OFF DCM 'mfgcfg_meg'" */
  1245. reg_write(MFGCFG_MFG_DCM_CON_0,
  1246. (reg_read(MFGCFG_MFG_DCM_CON_0) &
  1247. ~MFGCFG_MEG_REG0_MASK) |
  1248. MFGCFG_MEG_REG0_OFF);
  1249. }
  1250. }
  1251. #define MFGCFG_MFG_REG0_MASK ((0x1 << 31))
  1252. #define MFGCFG_MFG_REG0_ON ((0x0 << 31))
  1253. #define MFGCFG_MFG_REG0_OFF ((0x0 << 31))
  1254. bool dcm_mfgcfg_mfg_is_on(void)
  1255. {
  1256. bool ret = true;
  1257. ret &= !!(reg_read(MFGCFG_MFG_DCM_CON_0) &
  1258. MFGCFG_MFG_REG0_MASK &
  1259. MFGCFG_MFG_REG0_ON);
  1260. return ret;
  1261. }
  1262. void dcm_mfgcfg_mfg(int on)
  1263. {
  1264. if (on) {
  1265. /* TINFO = "Turn ON DCM 'mfgcfg_mfg'" */
  1266. reg_write(MFGCFG_MFG_DCM_CON_0,
  1267. (reg_read(MFGCFG_MFG_DCM_CON_0) &
  1268. ~MFGCFG_MFG_REG0_MASK) |
  1269. MFGCFG_MFG_REG0_ON);
  1270. } else {
  1271. /* TINFO = "Turn OFF DCM 'mfgcfg_mfg'" */
  1272. reg_write(MFGCFG_MFG_DCM_CON_0,
  1273. (reg_read(MFGCFG_MFG_DCM_CON_0) &
  1274. ~MFGCFG_MFG_REG0_MASK) |
  1275. MFGCFG_MFG_REG0_OFF);
  1276. }
  1277. }
  1278. #define MMSYS_CONFIG_MMSYS_CONFIG_REG0_MASK ((0x1 << 0) | \
  1279. (0x1 << 1) | \
  1280. (0x1 << 2) | \
  1281. (0x1 << 3) | \
  1282. (0x1 << 4) | \
  1283. (0x1 << 5) | \
  1284. (0x1 << 6) | \
  1285. (0x1 << 7) | \
  1286. (0x1 << 8) | \
  1287. (0x1 << 9) | \
  1288. (0x1 << 10) | \
  1289. (0x1 << 11) | \
  1290. (0x1 << 12) | \
  1291. (0x1 << 13) | \
  1292. (0x1 << 14) | \
  1293. (0x1 << 15) | \
  1294. (0x1 << 16) | \
  1295. (0x1 << 17) | \
  1296. (0x1 << 18) | \
  1297. (0x1 << 19) | \
  1298. (0x1 << 20) | \
  1299. (0x1 << 21) | \
  1300. (0x1 << 22) | \
  1301. (0x1 << 23) | \
  1302. (0x1 << 24) | \
  1303. (0x1 << 25) | \
  1304. (0x1 << 26) | \
  1305. (0x1 << 27) | \
  1306. (0x1 << 28) | \
  1307. (0x1 << 29))
  1308. #define MMSYS_CONFIG_MMSYS_CONFIG_REG1_MASK ((0x1 << 0) | \
  1309. (0x1 << 1) | \
  1310. (0x1 << 2) | \
  1311. (0x1 << 3) | \
  1312. (0x1 << 4) | \
  1313. (0x1 << 5) | \
  1314. (0x1 << 6) | \
  1315. (0x1 << 7) | \
  1316. (0x1 << 8) | \
  1317. (0x1 << 9) | \
  1318. (0x1 << 10) | \
  1319. (0x1 << 11) | \
  1320. (0x1 << 12) | \
  1321. (0x1 << 13) | \
  1322. (0x1 << 14) | \
  1323. (0x1 << 15) | \
  1324. (0x1 << 16) | \
  1325. (0x1 << 17))
  1326. #define MMSYS_CONFIG_MMSYS_CONFIG_REG0_ON ((0x0 << 0) | \
  1327. (0x0 << 1) | \
  1328. (0x0 << 2) | \
  1329. (0x0 << 3) | \
  1330. (0x0 << 4) | \
  1331. (0x0 << 5) | \
  1332. (0x0 << 6) | \
  1333. (0x0 << 7) | \
  1334. (0x0 << 8) | \
  1335. (0x0 << 9) | \
  1336. (0x0 << 10) | \
  1337. (0x0 << 11) | \
  1338. (0x0 << 12) | \
  1339. (0x0 << 13) | \
  1340. (0x0 << 14) | \
  1341. (0x0 << 15) | \
  1342. (0x0 << 16) | \
  1343. (0x0 << 17) | \
  1344. (0x0 << 18) | \
  1345. (0x0 << 19) | \
  1346. (0x0 << 20) | \
  1347. (0x0 << 21) | \
  1348. (0x0 << 22) | \
  1349. (0x0 << 23) | \
  1350. (0x0 << 24) | \
  1351. (0x0 << 25) | \
  1352. (0x0 << 26) | \
  1353. (0x0 << 27) | \
  1354. (0x0 << 28) | \
  1355. (0x0 << 29))
  1356. #define MMSYS_CONFIG_MMSYS_CONFIG_REG1_ON ((0x0 << 0) | \
  1357. (0x0 << 1) | \
  1358. (0x0 << 2) | \
  1359. (0x0 << 3) | \
  1360. (0x0 << 4) | \
  1361. (0x0 << 5) | \
  1362. (0x0 << 6) | \
  1363. (0x0 << 7) | \
  1364. (0x0 << 8) | \
  1365. (0x0 << 9) | \
  1366. (0x0 << 10) | \
  1367. (0x0 << 11) | \
  1368. (0x0 << 12) | \
  1369. (0x0 << 13) | \
  1370. (0x0 << 14) | \
  1371. (0x0 << 15) | \
  1372. (0x0 << 16) | \
  1373. (0x0 << 17))
  1374. #define MMSYS_CONFIG_MMSYS_CONFIG_REG0_OFF ((0x1 << 0) | \
  1375. (0x1 << 1) | \
  1376. (0x1 << 2) | \
  1377. (0x1 << 3) | \
  1378. (0x1 << 4) | \
  1379. (0x1 << 5) | \
  1380. (0x1 << 6) | \
  1381. (0x1 << 7) | \
  1382. (0x1 << 8) | \
  1383. (0x1 << 9) | \
  1384. (0x1 << 10) | \
  1385. (0x1 << 11) | \
  1386. (0x1 << 12) | \
  1387. (0x1 << 13) | \
  1388. (0x1 << 14) | \
  1389. (0x1 << 15) | \
  1390. (0x1 << 16) | \
  1391. (0x1 << 17) | \
  1392. (0x1 << 18) | \
  1393. (0x1 << 19) | \
  1394. (0x1 << 20) | \
  1395. (0x1 << 21) | \
  1396. (0x1 << 22) | \
  1397. (0x1 << 23) | \
  1398. (0x1 << 24) | \
  1399. (0x1 << 25) | \
  1400. (0x1 << 26) | \
  1401. (0x1 << 27) | \
  1402. (0x1 << 28) | \
  1403. (0x1 << 29))
  1404. #define MMSYS_CONFIG_MMSYS_CONFIG_REG1_OFF ((0x1 << 0) | \
  1405. (0x1 << 1) | \
  1406. (0x1 << 2) | \
  1407. (0x1 << 3) | \
  1408. (0x1 << 4) | \
  1409. (0x1 << 5) | \
  1410. (0x1 << 6) | \
  1411. (0x1 << 7) | \
  1412. (0x1 << 8) | \
  1413. (0x1 << 9) | \
  1414. (0x1 << 10) | \
  1415. (0x1 << 11) | \
  1416. (0x1 << 12) | \
  1417. (0x1 << 13) | \
  1418. (0x1 << 14) | \
  1419. (0x1 << 15) | \
  1420. (0x1 << 16) | \
  1421. (0x1 << 17))
  1422. bool dcm_mmsys_config_mmsys_config_is_on(void)
  1423. {
  1424. bool ret = true;
  1425. ret &= !!(reg_read(MMSYS_HW_DCM_1ST_DIS0) &
  1426. MMSYS_CONFIG_MMSYS_CONFIG_REG0_MASK &
  1427. MMSYS_CONFIG_MMSYS_CONFIG_REG0_ON);
  1428. ret &= !!(reg_read(MMSYS_HW_DCM_2ND_DIS0) &
  1429. MMSYS_CONFIG_MMSYS_CONFIG_REG1_MASK &
  1430. MMSYS_CONFIG_MMSYS_CONFIG_REG1_ON);
  1431. return ret;
  1432. }
  1433. void dcm_mmsys_config_mmsys_config(int on)
  1434. {
  1435. if (on) {
  1436. /* TINFO = "Turn ON DCM 'mmsys_config_mmsys_config'" */
  1437. reg_write(MMSYS_HW_DCM_1ST_DIS0,
  1438. (reg_read(MMSYS_HW_DCM_1ST_DIS0) &
  1439. ~MMSYS_CONFIG_MMSYS_CONFIG_REG0_MASK) |
  1440. MMSYS_CONFIG_MMSYS_CONFIG_REG0_ON);
  1441. reg_write(MMSYS_HW_DCM_2ND_DIS0,
  1442. (reg_read(MMSYS_HW_DCM_2ND_DIS0) &
  1443. ~MMSYS_CONFIG_MMSYS_CONFIG_REG1_MASK) |
  1444. MMSYS_CONFIG_MMSYS_CONFIG_REG1_ON);
  1445. } else {
  1446. /* TINFO = "Turn OFF DCM 'mmsys_config_mmsys_config'" */
  1447. reg_write(MMSYS_HW_DCM_1ST_DIS0,
  1448. (reg_read(MMSYS_HW_DCM_1ST_DIS0) &
  1449. ~MMSYS_CONFIG_MMSYS_CONFIG_REG0_MASK) |
  1450. MMSYS_CONFIG_MMSYS_CONFIG_REG0_OFF);
  1451. reg_write(MMSYS_HW_DCM_2ND_DIS0,
  1452. (reg_read(MMSYS_HW_DCM_2ND_DIS0) &
  1453. ~MMSYS_CONFIG_MMSYS_CONFIG_REG1_MASK) |
  1454. MMSYS_CONFIG_MMSYS_CONFIG_REG1_OFF);
  1455. }
  1456. }
  1457. #define SMI_COMMON_SMI_COMM_REG0_MASK ((0x7f << 1))
  1458. #define SMI_COMMON_SMI_COMM_REG0_ON ((0x0 << 1))
  1459. #define SMI_COMMON_SMI_COMM_REG0_OFF ((0x1 << 1))
  1460. bool dcm_smi_common_smi_comm_is_on(void)
  1461. {
  1462. bool ret = true;
  1463. ret &= !!(reg_read(SMI_COMMON_SMI_DCM) &
  1464. SMI_COMMON_SMI_COMM_REG0_MASK &
  1465. SMI_COMMON_SMI_COMM_REG0_ON);
  1466. return ret;
  1467. }
  1468. void dcm_smi_common_smi_comm(int on)
  1469. {
  1470. if (on) {
  1471. /* TINFO = "Turn ON DCM 'smi_common_smi_comm'" */
  1472. reg_write(SMI_COMMON_SMI_DCM,
  1473. (reg_read(SMI_COMMON_SMI_DCM) &
  1474. ~SMI_COMMON_SMI_COMM_REG0_MASK) |
  1475. SMI_COMMON_SMI_COMM_REG0_ON);
  1476. } else {
  1477. /* TINFO = "Turn OFF DCM 'smi_common_smi_comm'" */
  1478. reg_write(SMI_COMMON_SMI_DCM,
  1479. (reg_read(SMI_COMMON_SMI_DCM) &
  1480. ~SMI_COMMON_SMI_COMM_REG0_MASK) |
  1481. SMI_COMMON_SMI_COMM_REG0_OFF);
  1482. }
  1483. }
  1484. #define SMI_LARB0_SMI_LARB0_REG0_MASK ((0x1 << 4) | \
  1485. (0x1 << 5) | \
  1486. (0x1 << 6) | \
  1487. (0x1 << 7) | \
  1488. (0xf << 8) | \
  1489. (0xf << 12))
  1490. #define SMI_LARB0_SMI_LARB0_REG1_MASK ((0x1 << 4) | \
  1491. (0x1 << 5) | \
  1492. (0x1 << 6) | \
  1493. (0x1 << 7) | \
  1494. (0xf << 8) | \
  1495. (0xf << 12))
  1496. #define SMI_LARB0_SMI_LARB0_REG0_ON ((0x1 << 4) | \
  1497. (0x1 << 5) | \
  1498. (0x1 << 6) | \
  1499. (0x1 << 7) | \
  1500. (0xf << 8) | \
  1501. (0xf << 12))
  1502. #define SMI_LARB0_SMI_LARB0_REG1_ON ((0x0 << 4) | \
  1503. (0x0 << 5) | \
  1504. (0x0 << 6) | \
  1505. (0x0 << 7) | \
  1506. (0x0 << 8) | \
  1507. (0x0 << 12))
  1508. #define SMI_LARB0_SMI_LARB0_REG0_OFF ((0x0 << 4) | \
  1509. (0x0 << 5) | \
  1510. (0x0 << 6) | \
  1511. (0x0 << 7) | \
  1512. (0x0 << 8) | \
  1513. (0x0 << 12))
  1514. #define SMI_LARB0_SMI_LARB0_REG1_OFF ((0x1 << 4) | \
  1515. (0x1 << 5) | \
  1516. (0x1 << 6) | \
  1517. (0x1 << 7) | \
  1518. (0xf << 8) | \
  1519. (0xf << 12))
  1520. bool dcm_smi_larb0_smi_larb0_is_on(void)
  1521. {
  1522. bool ret = true;
  1523. ret &= !!(reg_read(SMI_LARB0_CON_SET) &
  1524. SMI_LARB0_SMI_LARB0_REG0_MASK &
  1525. SMI_LARB0_SMI_LARB0_REG0_ON);
  1526. ret &= !!(reg_read(SMI_LARB0_CON_CLR) &
  1527. SMI_LARB0_SMI_LARB0_REG1_MASK &
  1528. SMI_LARB0_SMI_LARB0_REG1_ON);
  1529. return ret;
  1530. }
  1531. void dcm_smi_larb0_smi_larb0(int on)
  1532. {
  1533. if (on) {
  1534. /* TINFO = "Turn ON DCM 'smi_larb0_smi_larb0'" */
  1535. reg_write(SMI_LARB0_CON_SET,
  1536. (reg_read(SMI_LARB0_CON_SET) &
  1537. ~SMI_LARB0_SMI_LARB0_REG0_MASK) |
  1538. SMI_LARB0_SMI_LARB0_REG0_ON);
  1539. reg_write(SMI_LARB0_CON_CLR,
  1540. (reg_read(SMI_LARB0_CON_CLR) &
  1541. ~SMI_LARB0_SMI_LARB0_REG1_MASK) |
  1542. SMI_LARB0_SMI_LARB0_REG1_ON);
  1543. } else {
  1544. /* TINFO = "Turn OFF DCM 'smi_larb0_smi_larb0'" */
  1545. reg_write(SMI_LARB0_CON_SET,
  1546. (reg_read(SMI_LARB0_CON_SET) &
  1547. ~SMI_LARB0_SMI_LARB0_REG0_MASK) |
  1548. SMI_LARB0_SMI_LARB0_REG0_OFF);
  1549. reg_write(SMI_LARB0_CON_CLR,
  1550. (reg_read(SMI_LARB0_CON_CLR) &
  1551. ~SMI_LARB0_SMI_LARB0_REG1_MASK) |
  1552. SMI_LARB0_SMI_LARB0_REG1_OFF);
  1553. }
  1554. }
  1555. #define SMI_LARB2_SMI_LARB2_REG0_MASK ((0x1 << 4) | \
  1556. (0x1 << 5) | \
  1557. (0x1 << 6) | \
  1558. (0x1 << 7) | \
  1559. (0xf << 8) | \
  1560. (0xf << 12))
  1561. #define SMI_LARB2_SMI_LARB2_REG1_MASK ((0x1 << 4) | \
  1562. (0x1 << 5) | \
  1563. (0x1 << 6) | \
  1564. (0x1 << 7) | \
  1565. (0xf << 8) | \
  1566. (0xf << 12))
  1567. #define SMI_LARB2_SMI_LARB2_REG0_ON ((0x1 << 4) | \
  1568. (0x1 << 5) | \
  1569. (0x1 << 6) | \
  1570. (0x1 << 7) | \
  1571. (0xf << 8) | \
  1572. (0xf << 12))
  1573. #define SMI_LARB2_SMI_LARB2_REG1_ON ((0x0 << 4) | \
  1574. (0x0 << 5) | \
  1575. (0x0 << 6) | \
  1576. (0x0 << 7) | \
  1577. (0x0 << 8) | \
  1578. (0x0 << 12))
  1579. #define SMI_LARB2_SMI_LARB2_REG0_OFF ((0x0 << 4) | \
  1580. (0x0 << 5) | \
  1581. (0x0 << 6) | \
  1582. (0x0 << 7) | \
  1583. (0x0 << 8) | \
  1584. (0x0 << 12))
  1585. #define SMI_LARB2_SMI_LARB2_REG1_OFF ((0x1 << 4) | \
  1586. (0x1 << 5) | \
  1587. (0x1 << 6) | \
  1588. (0x1 << 7) | \
  1589. (0xf << 8) | \
  1590. (0xf << 12))
  1591. bool dcm_smi_larb2_smi_larb2_is_on(void)
  1592. {
  1593. bool ret = true;
  1594. ret &= !!(reg_read(SMI_LARB2_CON_SET) &
  1595. SMI_LARB2_SMI_LARB2_REG0_MASK &
  1596. SMI_LARB2_SMI_LARB2_REG0_ON);
  1597. ret &= !!(reg_read(SMI_LARB2_CON_CLR) &
  1598. SMI_LARB2_SMI_LARB2_REG1_MASK &
  1599. SMI_LARB2_SMI_LARB2_REG1_ON);
  1600. return ret;
  1601. }
  1602. void dcm_smi_larb2_smi_larb2(int on)
  1603. {
  1604. if (on) {
  1605. /* TINFO = "Turn ON DCM 'smi_larb2_smi_larb2'" */
  1606. reg_write(SMI_LARB2_CON_SET,
  1607. (reg_read(SMI_LARB2_CON_SET) &
  1608. ~SMI_LARB2_SMI_LARB2_REG0_MASK) |
  1609. SMI_LARB2_SMI_LARB2_REG0_ON);
  1610. reg_write(SMI_LARB2_CON_CLR,
  1611. (reg_read(SMI_LARB2_CON_CLR) &
  1612. ~SMI_LARB2_SMI_LARB2_REG1_MASK) |
  1613. SMI_LARB2_SMI_LARB2_REG1_ON);
  1614. } else {
  1615. /* TINFO = "Turn OFF DCM 'smi_larb2_smi_larb2'" */
  1616. reg_write(SMI_LARB2_CON_SET,
  1617. (reg_read(SMI_LARB2_CON_SET) &
  1618. ~SMI_LARB2_SMI_LARB2_REG0_MASK) |
  1619. SMI_LARB2_SMI_LARB2_REG0_OFF);
  1620. reg_write(SMI_LARB2_CON_CLR,
  1621. (reg_read(SMI_LARB2_CON_CLR) &
  1622. ~SMI_LARB2_SMI_LARB2_REG1_MASK) |
  1623. SMI_LARB2_SMI_LARB2_REG1_OFF);
  1624. }
  1625. }
  1626. #define SMI_LARB1_SMI_LARB1_REG0_MASK ((0x1 << 4) | \
  1627. (0x1 << 5) | \
  1628. (0x1 << 6) | \
  1629. (0x1 << 7) | \
  1630. (0xf << 8) | \
  1631. (0xf << 12))
  1632. #define SMI_LARB1_SMI_LARB1_REG1_MASK ((0x1 << 4) | \
  1633. (0x1 << 5) | \
  1634. (0x1 << 6) | \
  1635. (0x1 << 7) | \
  1636. (0xf << 8) | \
  1637. (0xf << 12))
  1638. #define SMI_LARB1_SMI_LARB1_REG0_ON ((0x1 << 4) | \
  1639. (0x1 << 5) | \
  1640. (0x1 << 6) | \
  1641. (0x1 << 7) | \
  1642. (0xf << 8) | \
  1643. (0xf << 12))
  1644. #define SMI_LARB1_SMI_LARB1_REG1_ON ((0x0 << 4) | \
  1645. (0x0 << 5) | \
  1646. (0x0 << 6) | \
  1647. (0x0 << 7) | \
  1648. (0x0 << 8) | \
  1649. (0x0 << 12))
  1650. #define SMI_LARB1_SMI_LARB1_REG0_OFF ((0x0 << 4) | \
  1651. (0x0 << 5) | \
  1652. (0x0 << 6) | \
  1653. (0x0 << 7) | \
  1654. (0x0 << 8) | \
  1655. (0x0 << 12))
  1656. #define SMI_LARB1_SMI_LARB1_REG1_OFF ((0x1 << 4) | \
  1657. (0x1 << 5) | \
  1658. (0x1 << 6) | \
  1659. (0x1 << 7) | \
  1660. (0xf << 8) | \
  1661. (0xf << 12))
  1662. bool dcm_smi_larb1_smi_larb1_is_on(void)
  1663. {
  1664. bool ret = true;
  1665. ret &= !!(reg_read(SMI_LARB1_CON_SET) &
  1666. SMI_LARB1_SMI_LARB1_REG0_MASK &
  1667. SMI_LARB1_SMI_LARB1_REG0_ON);
  1668. ret &= !!(reg_read(SMI_LARB1_CON_CLR) &
  1669. SMI_LARB1_SMI_LARB1_REG1_MASK &
  1670. SMI_LARB1_SMI_LARB1_REG1_ON);
  1671. return ret;
  1672. }
  1673. void dcm_smi_larb1_smi_larb1(int on)
  1674. {
  1675. if (on) {
  1676. /* TINFO = "Turn ON DCM 'smi_larb1_smi_larb1'" */
  1677. reg_write(SMI_LARB1_CON_SET,
  1678. (reg_read(SMI_LARB1_CON_SET) &
  1679. ~SMI_LARB1_SMI_LARB1_REG0_MASK) |
  1680. SMI_LARB1_SMI_LARB1_REG0_ON);
  1681. reg_write(SMI_LARB1_CON_CLR,
  1682. (reg_read(SMI_LARB1_CON_CLR) &
  1683. ~SMI_LARB1_SMI_LARB1_REG1_MASK) |
  1684. SMI_LARB1_SMI_LARB1_REG1_ON);
  1685. } else {
  1686. /* TINFO = "Turn OFF DCM 'smi_larb1_smi_larb1'" */
  1687. reg_write(SMI_LARB1_CON_SET,
  1688. (reg_read(SMI_LARB1_CON_SET) &
  1689. ~SMI_LARB1_SMI_LARB1_REG0_MASK) |
  1690. SMI_LARB1_SMI_LARB1_REG0_OFF);
  1691. reg_write(SMI_LARB1_CON_CLR,
  1692. (reg_read(SMI_LARB1_CON_CLR) &
  1693. ~SMI_LARB1_SMI_LARB1_REG1_MASK) |
  1694. SMI_LARB1_SMI_LARB1_REG1_OFF);
  1695. }
  1696. }
  1697. #define VENC_VENC_CG_CTRL_REG0_MASK ((0xffffffff << 0))
  1698. #define VENC_VENC_CG_CTRL_REG0_ON ((0xffffffff << 0))
  1699. #define VENC_VENC_CG_CTRL_REG0_OFF ((0x0 << 0))
  1700. bool dcm_venc_venc_cg_ctrl_is_on(void)
  1701. {
  1702. bool ret = true;
  1703. ret &= !!(reg_read(VENC_CLK_CG_CTRL) &
  1704. VENC_VENC_CG_CTRL_REG0_MASK &
  1705. VENC_VENC_CG_CTRL_REG0_ON);
  1706. return ret;
  1707. }
  1708. void dcm_venc_venc_cg_ctrl(int on)
  1709. {
  1710. if (on) {
  1711. /* TINFO = "Turn ON DCM 'venc_venc_cg_ctrl'" */
  1712. reg_write(VENC_CLK_CG_CTRL,
  1713. (reg_read(VENC_CLK_CG_CTRL) &
  1714. ~VENC_VENC_CG_CTRL_REG0_MASK) |
  1715. VENC_VENC_CG_CTRL_REG0_ON);
  1716. } else {
  1717. /* TINFO = "Turn OFF DCM 'venc_venc_cg_ctrl'" */
  1718. reg_write(VENC_CLK_CG_CTRL,
  1719. (reg_read(VENC_CLK_CG_CTRL) &
  1720. ~VENC_VENC_CG_CTRL_REG0_MASK) |
  1721. VENC_VENC_CG_CTRL_REG0_OFF);
  1722. }
  1723. }
  1724. #define VENC_VENC_DCM_CTRL_REG0_MASK ((0x1 << 0))
  1725. #define VENC_VENC_DCM_CTRL_REG0_ON ((0x1 << 0))
  1726. #define VENC_VENC_DCM_CTRL_REG0_OFF ((0x0 << 0))
  1727. bool dcm_venc_venc_dcm_ctrl_is_on(void)
  1728. {
  1729. bool ret = true;
  1730. ret &= !!(reg_read(VENC_CLK_DCM_CTRL) &
  1731. VENC_VENC_DCM_CTRL_REG0_MASK &
  1732. VENC_VENC_DCM_CTRL_REG0_ON);
  1733. return ret;
  1734. }
  1735. void dcm_venc_venc_dcm_ctrl(int on)
  1736. {
  1737. if (on) {
  1738. /* TINFO = "Turn ON DCM 'venc_venc_dcm_ctrl'" */
  1739. reg_write(VENC_CLK_DCM_CTRL,
  1740. (reg_read(VENC_CLK_DCM_CTRL) &
  1741. ~VENC_VENC_DCM_CTRL_REG0_MASK) |
  1742. VENC_VENC_DCM_CTRL_REG0_ON);
  1743. } else {
  1744. /* TINFO = "Turn OFF DCM 'venc_venc_dcm_ctrl'" */
  1745. reg_write(VENC_CLK_DCM_CTRL,
  1746. (reg_read(VENC_CLK_DCM_CTRL) &
  1747. ~VENC_VENC_DCM_CTRL_REG0_MASK) |
  1748. VENC_VENC_DCM_CTRL_REG0_OFF);
  1749. }
  1750. }
  1751. #define JPGENC_JPGENC_REG0_MASK ((0x1 << 0))
  1752. #define JPGENC_JPGENC_REG0_ON ((0x0 << 0))
  1753. #define JPGENC_JPGENC_REG0_OFF ((0x1 << 0))
  1754. bool dcm_jpgenc_jpgenc_is_on(void)
  1755. {
  1756. bool ret = true;
  1757. ret &= !!(reg_read(JPGENC_DCM_CTRL) &
  1758. JPGENC_JPGENC_REG0_MASK &
  1759. JPGENC_JPGENC_REG0_ON);
  1760. return ret;
  1761. }
  1762. void dcm_jpgenc_jpgenc(int on)
  1763. {
  1764. if (on) {
  1765. /* TINFO = "Turn ON DCM 'jpgenc_jpgenc'" */
  1766. reg_write(JPGENC_DCM_CTRL,
  1767. (reg_read(JPGENC_DCM_CTRL) &
  1768. ~JPGENC_JPGENC_REG0_MASK) |
  1769. JPGENC_JPGENC_REG0_ON);
  1770. } else {
  1771. /* TINFO = "Turn OFF DCM 'jpgenc_jpgenc'" */
  1772. reg_write(JPGENC_DCM_CTRL,
  1773. (reg_read(JPGENC_DCM_CTRL) &
  1774. ~JPGENC_JPGENC_REG0_MASK) |
  1775. JPGENC_JPGENC_REG0_OFF);
  1776. }
  1777. }
  1778. #define SMI_LARB3_SMI_LARB3_REG0_MASK ((0x1 << 4) | \
  1779. (0x1 << 5) | \
  1780. (0x1 << 6) | \
  1781. (0x1 << 7) | \
  1782. (0xf << 8) | \
  1783. (0xf << 12))
  1784. #define SMI_LARB3_SMI_LARB3_REG1_MASK ((0x1 << 4) | \
  1785. (0x1 << 5) | \
  1786. (0x1 << 6) | \
  1787. (0x1 << 7) | \
  1788. (0xf << 8) | \
  1789. (0xf << 12))
  1790. #define SMI_LARB3_SMI_LARB3_REG0_ON ((0x1 << 4) | \
  1791. (0x1 << 5) | \
  1792. (0x1 << 6) | \
  1793. (0x1 << 7) | \
  1794. (0xf << 8) | \
  1795. (0xf << 12))
  1796. #define SMI_LARB3_SMI_LARB3_REG1_ON ((0x0 << 4) | \
  1797. (0x0 << 5) | \
  1798. (0x0 << 6) | \
  1799. (0x0 << 7) | \
  1800. (0x0 << 8) | \
  1801. (0x0 << 12))
  1802. #define SMI_LARB3_SMI_LARB3_REG0_OFF ((0x0 << 4) | \
  1803. (0x0 << 5) | \
  1804. (0x0 << 6) | \
  1805. (0x0 << 7) | \
  1806. (0x0 << 8) | \
  1807. (0x0 << 12))
  1808. #define SMI_LARB3_SMI_LARB3_REG1_OFF ((0x1 << 4) | \
  1809. (0x1 << 5) | \
  1810. (0x1 << 6) | \
  1811. (0x1 << 7) | \
  1812. (0xf << 8) | \
  1813. (0xf << 12))
  1814. bool dcm_smi_larb3_smi_larb3_is_on(void)
  1815. {
  1816. bool ret = true;
  1817. ret &= !!(reg_read(SMI_LARB3_CON_SET) &
  1818. SMI_LARB3_SMI_LARB3_REG0_MASK &
  1819. SMI_LARB3_SMI_LARB3_REG0_ON);
  1820. ret &= !!(reg_read(SMI_LARB3_CON_CLR) &
  1821. SMI_LARB3_SMI_LARB3_REG1_MASK &
  1822. SMI_LARB3_SMI_LARB3_REG1_ON);
  1823. return ret;
  1824. }
  1825. void dcm_smi_larb3_smi_larb3(int on)
  1826. {
  1827. if (on) {
  1828. /* TINFO = "Turn ON DCM 'smi_larb3_smi_larb3'" */
  1829. reg_write(SMI_LARB3_CON_SET,
  1830. (reg_read(SMI_LARB3_CON_SET) &
  1831. ~SMI_LARB3_SMI_LARB3_REG0_MASK) |
  1832. SMI_LARB3_SMI_LARB3_REG0_ON);
  1833. reg_write(SMI_LARB3_CON_CLR,
  1834. (reg_read(SMI_LARB3_CON_CLR) &
  1835. ~SMI_LARB3_SMI_LARB3_REG1_MASK) |
  1836. SMI_LARB3_SMI_LARB3_REG1_ON);
  1837. } else {
  1838. /* TINFO = "Turn OFF DCM 'smi_larb3_smi_larb3'" */
  1839. reg_write(SMI_LARB3_CON_SET,
  1840. (reg_read(SMI_LARB3_CON_SET) &
  1841. ~SMI_LARB3_SMI_LARB3_REG0_MASK) |
  1842. SMI_LARB3_SMI_LARB3_REG0_OFF);
  1843. reg_write(SMI_LARB3_CON_CLR,
  1844. (reg_read(SMI_LARB3_CON_CLR) &
  1845. ~SMI_LARB3_SMI_LARB3_REG1_MASK) |
  1846. SMI_LARB3_SMI_LARB3_REG1_OFF);
  1847. }
  1848. }