1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2021, MediaTek Inc. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #include <lib/mmio.h> 8*91f16700Schasinglulu #include <lib/utils_def.h> 9*91f16700Schasinglulu #include <mtk_dcm_utils.h> 10*91f16700Schasinglulu 11*91f16700Schasinglulu #define MP_CPUSYS_TOP_ADB_DCM_REG0_MASK (BIT(16) | \ 12*91f16700Schasinglulu BIT(17) | \ 13*91f16700Schasinglulu BIT(18) | \ 14*91f16700Schasinglulu BIT(21)) 15*91f16700Schasinglulu #define MP_CPUSYS_TOP_ADB_DCM_REG1_MASK (BIT(16) | \ 16*91f16700Schasinglulu BIT(17) | \ 17*91f16700Schasinglulu BIT(18)) 18*91f16700Schasinglulu #define MP_CPUSYS_TOP_ADB_DCM_REG0_ON (BIT(16) | \ 19*91f16700Schasinglulu BIT(17) | \ 20*91f16700Schasinglulu BIT(18) | \ 21*91f16700Schasinglulu BIT(21)) 22*91f16700Schasinglulu #define MP_CPUSYS_TOP_ADB_DCM_REG1_ON (BIT(16) | \ 23*91f16700Schasinglulu BIT(17) | \ 24*91f16700Schasinglulu BIT(18)) 25*91f16700Schasinglulu #define MP_CPUSYS_TOP_ADB_DCM_REG0_OFF ((0x0 << 16) | \ 26*91f16700Schasinglulu (0x0 << 17) | \ 27*91f16700Schasinglulu (0x0 << 18) | \ 28*91f16700Schasinglulu (0x0 << 21)) 29*91f16700Schasinglulu #define MP_CPUSYS_TOP_ADB_DCM_REG1_OFF ((0x0 << 16) | \ 30*91f16700Schasinglulu (0x0 << 17) | \ 31*91f16700Schasinglulu (0x0 << 18)) 32*91f16700Schasinglulu 33*91f16700Schasinglulu bool dcm_mp_cpusys_top_adb_dcm_is_on(void) 34*91f16700Schasinglulu { 35*91f16700Schasinglulu bool ret = true; 36*91f16700Schasinglulu 37*91f16700Schasinglulu ret &= ((mmio_read_32(MP_CPUSYS_TOP_MP_ADB_DCM_CFG4) & 38*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG0_MASK) == 39*91f16700Schasinglulu (unsigned int) MP_CPUSYS_TOP_ADB_DCM_REG0_ON); 40*91f16700Schasinglulu ret &= ((mmio_read_32(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0) & 41*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG1_MASK) == 42*91f16700Schasinglulu (unsigned int) MP_CPUSYS_TOP_ADB_DCM_REG1_ON); 43*91f16700Schasinglulu 44*91f16700Schasinglulu return ret; 45*91f16700Schasinglulu } 46*91f16700Schasinglulu 47*91f16700Schasinglulu void dcm_mp_cpusys_top_adb_dcm(bool on) 48*91f16700Schasinglulu { 49*91f16700Schasinglulu if (on) { 50*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_adb_dcm'" */ 51*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP_ADB_DCM_CFG4, 52*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG0_MASK, 53*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG0_ON); 54*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0, 55*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG1_MASK, 56*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG1_ON); 57*91f16700Schasinglulu } else { 58*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_adb_dcm'" */ 59*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP_ADB_DCM_CFG4, 60*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG0_MASK, 61*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG0_OFF); 62*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0, 63*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG1_MASK, 64*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG1_OFF); 65*91f16700Schasinglulu } 66*91f16700Schasinglulu } 67*91f16700Schasinglulu 68*91f16700Schasinglulu #define MP_CPUSYS_TOP_APB_DCM_REG0_MASK (BIT(5)) 69*91f16700Schasinglulu #define MP_CPUSYS_TOP_APB_DCM_REG1_MASK (BIT(8)) 70*91f16700Schasinglulu #define MP_CPUSYS_TOP_APB_DCM_REG2_MASK (BIT(16)) 71*91f16700Schasinglulu #define MP_CPUSYS_TOP_APB_DCM_REG0_ON (BIT(5)) 72*91f16700Schasinglulu #define MP_CPUSYS_TOP_APB_DCM_REG1_ON (BIT(8)) 73*91f16700Schasinglulu #define MP_CPUSYS_TOP_APB_DCM_REG2_ON (BIT(16)) 74*91f16700Schasinglulu #define MP_CPUSYS_TOP_APB_DCM_REG0_OFF ((0x0 << 5)) 75*91f16700Schasinglulu #define MP_CPUSYS_TOP_APB_DCM_REG1_OFF ((0x0 << 8)) 76*91f16700Schasinglulu #define MP_CPUSYS_TOP_APB_DCM_REG2_OFF ((0x0 << 16)) 77*91f16700Schasinglulu 78*91f16700Schasinglulu bool dcm_mp_cpusys_top_apb_dcm_is_on(void) 79*91f16700Schasinglulu { 80*91f16700Schasinglulu bool ret = true; 81*91f16700Schasinglulu 82*91f16700Schasinglulu ret &= ((mmio_read_32(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0) & 83*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG0_MASK) == 84*91f16700Schasinglulu (unsigned int) MP_CPUSYS_TOP_APB_DCM_REG0_ON); 85*91f16700Schasinglulu ret &= ((mmio_read_32(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0) & 86*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG1_MASK) == 87*91f16700Schasinglulu (unsigned int) MP_CPUSYS_TOP_APB_DCM_REG1_ON); 88*91f16700Schasinglulu ret &= ((mmio_read_32(MP_CPUSYS_TOP_MP0_DCM_CFG0) & 89*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG2_MASK) == 90*91f16700Schasinglulu (unsigned int) MP_CPUSYS_TOP_APB_DCM_REG2_ON); 91*91f16700Schasinglulu 92*91f16700Schasinglulu return ret; 93*91f16700Schasinglulu } 94*91f16700Schasinglulu 95*91f16700Schasinglulu void dcm_mp_cpusys_top_apb_dcm(bool on) 96*91f16700Schasinglulu { 97*91f16700Schasinglulu if (on) { 98*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_apb_dcm'" */ 99*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0, 100*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG0_MASK, 101*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG0_ON); 102*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0, 103*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG1_MASK, 104*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG1_ON); 105*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP0_DCM_CFG0, 106*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG2_MASK, 107*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG2_ON); 108*91f16700Schasinglulu } else { 109*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_apb_dcm'" */ 110*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0, 111*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG0_MASK, 112*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG0_OFF); 113*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0, 114*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG1_MASK, 115*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG1_OFF); 116*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP0_DCM_CFG0, 117*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG2_MASK, 118*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG2_OFF); 119*91f16700Schasinglulu } 120*91f16700Schasinglulu } 121*91f16700Schasinglulu 122*91f16700Schasinglulu #define MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_MASK (BIT(11) | \ 123*91f16700Schasinglulu BIT(24) | \ 124*91f16700Schasinglulu BIT(25)) 125*91f16700Schasinglulu #define MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_ON (BIT(11) | \ 126*91f16700Schasinglulu BIT(24) | \ 127*91f16700Schasinglulu BIT(25)) 128*91f16700Schasinglulu #define MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_OFF ((0x0 << 11) | \ 129*91f16700Schasinglulu (0x0 << 24) | \ 130*91f16700Schasinglulu (0x0 << 25)) 131*91f16700Schasinglulu 132*91f16700Schasinglulu bool dcm_mp_cpusys_top_bus_pll_div_dcm_is_on(void) 133*91f16700Schasinglulu { 134*91f16700Schasinglulu bool ret = true; 135*91f16700Schasinglulu 136*91f16700Schasinglulu ret &= ((mmio_read_32(MP_CPUSYS_TOP_BUS_PLLDIV_CFG) & 137*91f16700Schasinglulu MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_MASK) == 138*91f16700Schasinglulu (unsigned int) MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_ON); 139*91f16700Schasinglulu 140*91f16700Schasinglulu return ret; 141*91f16700Schasinglulu } 142*91f16700Schasinglulu 143*91f16700Schasinglulu void dcm_mp_cpusys_top_bus_pll_div_dcm(bool on) 144*91f16700Schasinglulu { 145*91f16700Schasinglulu if (on) { 146*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_bus_pll_div_dcm'" */ 147*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_BUS_PLLDIV_CFG, 148*91f16700Schasinglulu MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_MASK, 149*91f16700Schasinglulu MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_ON); 150*91f16700Schasinglulu } else { 151*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_bus_pll_div_dcm'" */ 152*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_BUS_PLLDIV_CFG, 153*91f16700Schasinglulu MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_MASK, 154*91f16700Schasinglulu MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_OFF); 155*91f16700Schasinglulu } 156*91f16700Schasinglulu } 157*91f16700Schasinglulu 158*91f16700Schasinglulu #define MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_MASK (BIT(0)) 159*91f16700Schasinglulu #define MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_ON (BIT(0)) 160*91f16700Schasinglulu #define MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_OFF ((0x0 << 0)) 161*91f16700Schasinglulu 162*91f16700Schasinglulu bool dcm_mp_cpusys_top_core_stall_dcm_is_on(void) 163*91f16700Schasinglulu { 164*91f16700Schasinglulu bool ret = true; 165*91f16700Schasinglulu 166*91f16700Schasinglulu ret &= ((mmio_read_32(MP_CPUSYS_TOP_MP0_DCM_CFG7) & 167*91f16700Schasinglulu MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_MASK) == 168*91f16700Schasinglulu (unsigned int) MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_ON); 169*91f16700Schasinglulu 170*91f16700Schasinglulu return ret; 171*91f16700Schasinglulu } 172*91f16700Schasinglulu 173*91f16700Schasinglulu void dcm_mp_cpusys_top_core_stall_dcm(bool on) 174*91f16700Schasinglulu { 175*91f16700Schasinglulu if (on) { 176*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_core_stall_dcm'" */ 177*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP0_DCM_CFG7, 178*91f16700Schasinglulu MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_MASK, 179*91f16700Schasinglulu MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_ON); 180*91f16700Schasinglulu } else { 181*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_core_stall_dcm'" */ 182*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP0_DCM_CFG7, 183*91f16700Schasinglulu MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_MASK, 184*91f16700Schasinglulu MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_OFF); 185*91f16700Schasinglulu } 186*91f16700Schasinglulu } 187*91f16700Schasinglulu 188*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_MASK (BIT(0)) 189*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_ON ((0x0 << 0)) 190*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_OFF (BIT(0)) 191*91f16700Schasinglulu 192*91f16700Schasinglulu bool dcm_mp_cpusys_top_cpubiu_dbg_cg_is_on(void) 193*91f16700Schasinglulu { 194*91f16700Schasinglulu bool ret = true; 195*91f16700Schasinglulu 196*91f16700Schasinglulu ret &= ((mmio_read_32(MP_CPUSYS_TOP_MCSI_CFG2) & 197*91f16700Schasinglulu MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_MASK) == 198*91f16700Schasinglulu (unsigned int) MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_ON); 199*91f16700Schasinglulu 200*91f16700Schasinglulu return ret; 201*91f16700Schasinglulu } 202*91f16700Schasinglulu 203*91f16700Schasinglulu void dcm_mp_cpusys_top_cpubiu_dbg_cg(bool on) 204*91f16700Schasinglulu { 205*91f16700Schasinglulu if (on) { 206*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_cpubiu_dbg_cg'" */ 207*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MCSI_CFG2, 208*91f16700Schasinglulu MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_MASK, 209*91f16700Schasinglulu MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_ON); 210*91f16700Schasinglulu } else { 211*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpubiu_dbg_cg'" */ 212*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MCSI_CFG2, 213*91f16700Schasinglulu MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_MASK, 214*91f16700Schasinglulu MP_CPUSYS_TOP_CPUBIU_DBG_CG_REG0_OFF); 215*91f16700Schasinglulu } 216*91f16700Schasinglulu } 217*91f16700Schasinglulu 218*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPUBIU_DCM_REG0_MASK ((0xffff << 0)) 219*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPUBIU_DCM_REG0_ON ((0xffff << 0)) 220*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPUBIU_DCM_REG0_OFF ((0x0 << 0)) 221*91f16700Schasinglulu 222*91f16700Schasinglulu bool dcm_mp_cpusys_top_cpubiu_dcm_is_on(void) 223*91f16700Schasinglulu { 224*91f16700Schasinglulu bool ret = true; 225*91f16700Schasinglulu 226*91f16700Schasinglulu ret &= ((mmio_read_32(MP_CPUSYS_TOP_MCSIC_DCM0) & 227*91f16700Schasinglulu MP_CPUSYS_TOP_CPUBIU_DCM_REG0_MASK) == 228*91f16700Schasinglulu (unsigned int) MP_CPUSYS_TOP_CPUBIU_DCM_REG0_ON); 229*91f16700Schasinglulu 230*91f16700Schasinglulu return ret; 231*91f16700Schasinglulu } 232*91f16700Schasinglulu 233*91f16700Schasinglulu void dcm_mp_cpusys_top_cpubiu_dcm(bool on) 234*91f16700Schasinglulu { 235*91f16700Schasinglulu if (on) { 236*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_cpubiu_dcm'" */ 237*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MCSIC_DCM0, 238*91f16700Schasinglulu MP_CPUSYS_TOP_CPUBIU_DCM_REG0_MASK, 239*91f16700Schasinglulu MP_CPUSYS_TOP_CPUBIU_DCM_REG0_ON); 240*91f16700Schasinglulu } else { 241*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpubiu_dcm'" */ 242*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MCSIC_DCM0, 243*91f16700Schasinglulu MP_CPUSYS_TOP_CPUBIU_DCM_REG0_MASK, 244*91f16700Schasinglulu MP_CPUSYS_TOP_CPUBIU_DCM_REG0_OFF); 245*91f16700Schasinglulu } 246*91f16700Schasinglulu } 247*91f16700Schasinglulu 248*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_MASK (BIT(11) | \ 249*91f16700Schasinglulu BIT(24) | \ 250*91f16700Schasinglulu BIT(25)) 251*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_ON (BIT(11) | \ 252*91f16700Schasinglulu BIT(24) | \ 253*91f16700Schasinglulu BIT(25)) 254*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_OFF ((0x0 << 11) | \ 255*91f16700Schasinglulu (0x0 << 24) | \ 256*91f16700Schasinglulu (0x0 << 25)) 257*91f16700Schasinglulu 258*91f16700Schasinglulu bool dcm_mp_cpusys_top_cpu_pll_div_0_dcm_is_on(void) 259*91f16700Schasinglulu { 260*91f16700Schasinglulu bool ret = true; 261*91f16700Schasinglulu 262*91f16700Schasinglulu ret &= ((mmio_read_32(MP_CPUSYS_TOP_CPU_PLLDIV_CFG0) & 263*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_MASK) == 264*91f16700Schasinglulu (unsigned int) MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_ON); 265*91f16700Schasinglulu 266*91f16700Schasinglulu return ret; 267*91f16700Schasinglulu } 268*91f16700Schasinglulu 269*91f16700Schasinglulu void dcm_mp_cpusys_top_cpu_pll_div_0_dcm(bool on) 270*91f16700Schasinglulu { 271*91f16700Schasinglulu if (on) { 272*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_cpu_pll_div_0_dcm'" */ 273*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_CPU_PLLDIV_CFG0, 274*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_MASK, 275*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_ON); 276*91f16700Schasinglulu } else { 277*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpu_pll_div_0_dcm'" */ 278*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_CPU_PLLDIV_CFG0, 279*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_MASK, 280*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_OFF); 281*91f16700Schasinglulu } 282*91f16700Schasinglulu } 283*91f16700Schasinglulu 284*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_MASK (BIT(11) | \ 285*91f16700Schasinglulu BIT(24) | \ 286*91f16700Schasinglulu BIT(25)) 287*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_ON (BIT(11) | \ 288*91f16700Schasinglulu BIT(24) | \ 289*91f16700Schasinglulu BIT(25)) 290*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_OFF ((0x0 << 11) | \ 291*91f16700Schasinglulu (0x0 << 24) | \ 292*91f16700Schasinglulu (0x0 << 25)) 293*91f16700Schasinglulu 294*91f16700Schasinglulu bool dcm_mp_cpusys_top_cpu_pll_div_1_dcm_is_on(void) 295*91f16700Schasinglulu { 296*91f16700Schasinglulu bool ret = true; 297*91f16700Schasinglulu 298*91f16700Schasinglulu ret &= ((mmio_read_32(MP_CPUSYS_TOP_CPU_PLLDIV_CFG1) & 299*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_MASK) == 300*91f16700Schasinglulu (unsigned int) MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_ON); 301*91f16700Schasinglulu 302*91f16700Schasinglulu return ret; 303*91f16700Schasinglulu } 304*91f16700Schasinglulu 305*91f16700Schasinglulu void dcm_mp_cpusys_top_cpu_pll_div_1_dcm(bool on) 306*91f16700Schasinglulu { 307*91f16700Schasinglulu if (on) { 308*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_cpu_pll_div_1_dcm'" */ 309*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_CPU_PLLDIV_CFG1, 310*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_MASK, 311*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_ON); 312*91f16700Schasinglulu } else { 313*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpu_pll_div_1_dcm'" */ 314*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_CPU_PLLDIV_CFG1, 315*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_MASK, 316*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_OFF); 317*91f16700Schasinglulu } 318*91f16700Schasinglulu } 319*91f16700Schasinglulu 320*91f16700Schasinglulu #define MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_MASK (BIT(4)) 321*91f16700Schasinglulu #define MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_ON (BIT(4)) 322*91f16700Schasinglulu #define MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_OFF ((0x0 << 4)) 323*91f16700Schasinglulu 324*91f16700Schasinglulu bool dcm_mp_cpusys_top_fcm_stall_dcm_is_on(void) 325*91f16700Schasinglulu { 326*91f16700Schasinglulu bool ret = true; 327*91f16700Schasinglulu 328*91f16700Schasinglulu ret &= ((mmio_read_32(MP_CPUSYS_TOP_MP0_DCM_CFG7) & 329*91f16700Schasinglulu MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_MASK) == 330*91f16700Schasinglulu (unsigned int) MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_ON); 331*91f16700Schasinglulu 332*91f16700Schasinglulu return ret; 333*91f16700Schasinglulu } 334*91f16700Schasinglulu 335*91f16700Schasinglulu void dcm_mp_cpusys_top_fcm_stall_dcm(bool on) 336*91f16700Schasinglulu { 337*91f16700Schasinglulu if (on) { 338*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_fcm_stall_dcm'" */ 339*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP0_DCM_CFG7, 340*91f16700Schasinglulu MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_MASK, 341*91f16700Schasinglulu MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_ON); 342*91f16700Schasinglulu } else { 343*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_fcm_stall_dcm'" */ 344*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP0_DCM_CFG7, 345*91f16700Schasinglulu MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_MASK, 346*91f16700Schasinglulu MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_OFF); 347*91f16700Schasinglulu } 348*91f16700Schasinglulu } 349*91f16700Schasinglulu 350*91f16700Schasinglulu #define MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_MASK (BIT(31)) 351*91f16700Schasinglulu #define MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_ON (BIT(31)) 352*91f16700Schasinglulu #define MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_OFF ((0x0 << 31)) 353*91f16700Schasinglulu 354*91f16700Schasinglulu bool dcm_mp_cpusys_top_last_cor_idle_dcm_is_on(void) 355*91f16700Schasinglulu { 356*91f16700Schasinglulu bool ret = true; 357*91f16700Schasinglulu 358*91f16700Schasinglulu ret &= ((mmio_read_32(MP_CPUSYS_TOP_BUS_PLLDIV_CFG) & 359*91f16700Schasinglulu MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_MASK) == 360*91f16700Schasinglulu (unsigned int) MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_ON); 361*91f16700Schasinglulu 362*91f16700Schasinglulu return ret; 363*91f16700Schasinglulu } 364*91f16700Schasinglulu 365*91f16700Schasinglulu void dcm_mp_cpusys_top_last_cor_idle_dcm(bool on) 366*91f16700Schasinglulu { 367*91f16700Schasinglulu if (on) { 368*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_last_cor_idle_dcm'" */ 369*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_BUS_PLLDIV_CFG, 370*91f16700Schasinglulu MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_MASK, 371*91f16700Schasinglulu MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_ON); 372*91f16700Schasinglulu } else { 373*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_last_cor_idle_dcm'" */ 374*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_BUS_PLLDIV_CFG, 375*91f16700Schasinglulu MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_MASK, 376*91f16700Schasinglulu MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_OFF); 377*91f16700Schasinglulu } 378*91f16700Schasinglulu } 379*91f16700Schasinglulu 380*91f16700Schasinglulu #define MP_CPUSYS_TOP_MISC_DCM_REG0_MASK (BIT(0) | \ 381*91f16700Schasinglulu BIT(1) | \ 382*91f16700Schasinglulu BIT(2) | \ 383*91f16700Schasinglulu BIT(3) | \ 384*91f16700Schasinglulu BIT(4)) 385*91f16700Schasinglulu #define MP_CPUSYS_TOP_MISC_DCM_REG0_ON (BIT(0) | \ 386*91f16700Schasinglulu BIT(1) | \ 387*91f16700Schasinglulu BIT(2) | \ 388*91f16700Schasinglulu BIT(3) | \ 389*91f16700Schasinglulu BIT(4)) 390*91f16700Schasinglulu #define MP_CPUSYS_TOP_MISC_DCM_REG0_OFF ((0x0 << 0) | \ 391*91f16700Schasinglulu (0x0 << 1) | \ 392*91f16700Schasinglulu (0x0 << 2) | \ 393*91f16700Schasinglulu (0x0 << 3) | \ 394*91f16700Schasinglulu (0x0 << 4)) 395*91f16700Schasinglulu 396*91f16700Schasinglulu bool dcm_mp_cpusys_top_misc_dcm_is_on(void) 397*91f16700Schasinglulu { 398*91f16700Schasinglulu bool ret = true; 399*91f16700Schasinglulu 400*91f16700Schasinglulu ret &= ((mmio_read_32(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0) & 401*91f16700Schasinglulu MP_CPUSYS_TOP_MISC_DCM_REG0_MASK) == 402*91f16700Schasinglulu (unsigned int) MP_CPUSYS_TOP_MISC_DCM_REG0_ON); 403*91f16700Schasinglulu 404*91f16700Schasinglulu return ret; 405*91f16700Schasinglulu } 406*91f16700Schasinglulu 407*91f16700Schasinglulu void dcm_mp_cpusys_top_misc_dcm(bool on) 408*91f16700Schasinglulu { 409*91f16700Schasinglulu if (on) { 410*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_misc_dcm'" */ 411*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0, 412*91f16700Schasinglulu MP_CPUSYS_TOP_MISC_DCM_REG0_MASK, 413*91f16700Schasinglulu MP_CPUSYS_TOP_MISC_DCM_REG0_ON); 414*91f16700Schasinglulu } else { 415*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_misc_dcm'" */ 416*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0, 417*91f16700Schasinglulu MP_CPUSYS_TOP_MISC_DCM_REG0_MASK, 418*91f16700Schasinglulu MP_CPUSYS_TOP_MISC_DCM_REG0_OFF); 419*91f16700Schasinglulu } 420*91f16700Schasinglulu } 421*91f16700Schasinglulu 422*91f16700Schasinglulu #define MP_CPUSYS_TOP_MP0_QDCM_REG0_MASK (BIT(0) | \ 423*91f16700Schasinglulu BIT(1) | \ 424*91f16700Schasinglulu BIT(2) | \ 425*91f16700Schasinglulu BIT(3)) 426*91f16700Schasinglulu #define MP_CPUSYS_TOP_MP0_QDCM_REG0_ON (BIT(0) | \ 427*91f16700Schasinglulu BIT(1) | \ 428*91f16700Schasinglulu BIT(2) | \ 429*91f16700Schasinglulu BIT(3)) 430*91f16700Schasinglulu #define MP_CPUSYS_TOP_MP0_QDCM_REG0_OFF ((0x0 << 0) | \ 431*91f16700Schasinglulu (0x0 << 1) | \ 432*91f16700Schasinglulu (0x0 << 2) | \ 433*91f16700Schasinglulu (0x0 << 3)) 434*91f16700Schasinglulu 435*91f16700Schasinglulu bool dcm_mp_cpusys_top_mp0_qdcm_is_on(void) 436*91f16700Schasinglulu { 437*91f16700Schasinglulu bool ret = true; 438*91f16700Schasinglulu 439*91f16700Schasinglulu ret &= ((mmio_read_32(MP_CPUSYS_TOP_MP0_DCM_CFG0) & 440*91f16700Schasinglulu MP_CPUSYS_TOP_MP0_QDCM_REG0_MASK) == 441*91f16700Schasinglulu (unsigned int) MP_CPUSYS_TOP_MP0_QDCM_REG0_ON); 442*91f16700Schasinglulu 443*91f16700Schasinglulu return ret; 444*91f16700Schasinglulu } 445*91f16700Schasinglulu 446*91f16700Schasinglulu void dcm_mp_cpusys_top_mp0_qdcm(bool on) 447*91f16700Schasinglulu { 448*91f16700Schasinglulu if (on) { 449*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_mp0_qdcm'" */ 450*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP0_DCM_CFG0, 451*91f16700Schasinglulu MP_CPUSYS_TOP_MP0_QDCM_REG0_MASK, 452*91f16700Schasinglulu MP_CPUSYS_TOP_MP0_QDCM_REG0_ON); 453*91f16700Schasinglulu } else { 454*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_mp0_qdcm'" */ 455*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP0_DCM_CFG0, 456*91f16700Schasinglulu MP_CPUSYS_TOP_MP0_QDCM_REG0_MASK, 457*91f16700Schasinglulu MP_CPUSYS_TOP_MP0_QDCM_REG0_OFF); 458*91f16700Schasinglulu } 459*91f16700Schasinglulu } 460*91f16700Schasinglulu 461*91f16700Schasinglulu #define CPCCFG_REG_EMI_WFIFO_REG0_MASK (BIT(0) | BIT(2)) 462*91f16700Schasinglulu #define CPCCFG_REG_EMI_WFIFO_REG0_ON (BIT(0) | BIT(2)) 463*91f16700Schasinglulu #define CPCCFG_REG_EMI_WFIFO_REG0_OFF ((0x0 << 0) | (0x0 << 2)) 464*91f16700Schasinglulu 465*91f16700Schasinglulu bool dcm_cpccfg_reg_emi_wfifo_is_on(void) 466*91f16700Schasinglulu { 467*91f16700Schasinglulu bool ret = true; 468*91f16700Schasinglulu 469*91f16700Schasinglulu ret &= ((mmio_read_32(CPCCFG_REG_EMI_WFIFO) & 470*91f16700Schasinglulu CPCCFG_REG_EMI_WFIFO_REG0_MASK) == 471*91f16700Schasinglulu (unsigned int) CPCCFG_REG_EMI_WFIFO_REG0_ON); 472*91f16700Schasinglulu 473*91f16700Schasinglulu return ret; 474*91f16700Schasinglulu } 475*91f16700Schasinglulu 476*91f16700Schasinglulu void dcm_cpccfg_reg_emi_wfifo(bool on) 477*91f16700Schasinglulu { 478*91f16700Schasinglulu if (on) { 479*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'cpccfg_reg_emi_wfifo'" */ 480*91f16700Schasinglulu mmio_clrsetbits_32(CPCCFG_REG_EMI_WFIFO, 481*91f16700Schasinglulu CPCCFG_REG_EMI_WFIFO_REG0_MASK, 482*91f16700Schasinglulu CPCCFG_REG_EMI_WFIFO_REG0_ON); 483*91f16700Schasinglulu } else { 484*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'cpccfg_reg_emi_wfifo'" */ 485*91f16700Schasinglulu mmio_clrsetbits_32(CPCCFG_REG_EMI_WFIFO, 486*91f16700Schasinglulu CPCCFG_REG_EMI_WFIFO_REG0_MASK, 487*91f16700Schasinglulu CPCCFG_REG_EMI_WFIFO_REG0_OFF); 488*91f16700Schasinglulu } 489*91f16700Schasinglulu } 490*91f16700Schasinglulu 491