1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2022, 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(17) 12*91f16700Schasinglulu #define MP_CPUSYS_TOP_ADB_DCM_REG1_MASK (BIT(15) | BIT(16) | BIT(17) | \ 13*91f16700Schasinglulu BIT(18) | BIT(21)) 14*91f16700Schasinglulu #define MP_CPUSYS_TOP_ADB_DCM_REG2_MASK (BIT(15) | BIT(16) | BIT(17) | BIT(18)) 15*91f16700Schasinglulu #define MP_CPUSYS_TOP_ADB_DCM_REG0_ON BIT(17) 16*91f16700Schasinglulu #define MP_CPUSYS_TOP_ADB_DCM_REG1_ON (BIT(15) | BIT(16) | BIT(17) | \ 17*91f16700Schasinglulu BIT(18) | BIT(21)) 18*91f16700Schasinglulu #define MP_CPUSYS_TOP_ADB_DCM_REG2_ON (BIT(15) | BIT(16) | BIT(17) | BIT(18)) 19*91f16700Schasinglulu #define MP_CPUSYS_TOP_ADB_DCM_REG0_OFF (0x0 << 17) 20*91f16700Schasinglulu #define MP_CPUSYS_TOP_ADB_DCM_REG1_OFF ((0x0 << 15) | (0x0 << 16) | \ 21*91f16700Schasinglulu (0x0 << 17) | (0x0 << 18) | \ 22*91f16700Schasinglulu (0x0 << 21)) 23*91f16700Schasinglulu #define MP_CPUSYS_TOP_ADB_DCM_REG2_OFF ((0x0 << 15) | (0x0 << 16) | \ 24*91f16700Schasinglulu (0x0 << 17) | (0x0 << 18)) 25*91f16700Schasinglulu 26*91f16700Schasinglulu bool dcm_mp_cpusys_top_adb_dcm_is_on(void) 27*91f16700Schasinglulu { 28*91f16700Schasinglulu bool ret = true; 29*91f16700Schasinglulu 30*91f16700Schasinglulu ret &= dcm_check_state(MP_CPUSYS_TOP_MP_ADB_DCM_CFG0, 31*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG0_MASK, 32*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG0_ON); 33*91f16700Schasinglulu ret &= dcm_check_state(MP_CPUSYS_TOP_MP_ADB_DCM_CFG4, 34*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG1_MASK, 35*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG1_ON); 36*91f16700Schasinglulu ret &= dcm_check_state(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0, 37*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG2_MASK, 38*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG2_ON); 39*91f16700Schasinglulu 40*91f16700Schasinglulu return ret; 41*91f16700Schasinglulu } 42*91f16700Schasinglulu 43*91f16700Schasinglulu void dcm_mp_cpusys_top_adb_dcm(bool on) 44*91f16700Schasinglulu { 45*91f16700Schasinglulu if (on) { 46*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_adb_dcm'" */ 47*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP_ADB_DCM_CFG0, 48*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG0_MASK, 49*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG0_ON); 50*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP_ADB_DCM_CFG4, 51*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG1_MASK, 52*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG1_ON); 53*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0, 54*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG2_MASK, 55*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG2_ON); 56*91f16700Schasinglulu } else { 57*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_adb_dcm'" */ 58*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP_ADB_DCM_CFG0, 59*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG0_MASK, 60*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG0_OFF); 61*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP_ADB_DCM_CFG4, 62*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG1_MASK, 63*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG1_OFF); 64*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0, 65*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG2_MASK, 66*91f16700Schasinglulu MP_CPUSYS_TOP_ADB_DCM_REG2_OFF); 67*91f16700Schasinglulu } 68*91f16700Schasinglulu } 69*91f16700Schasinglulu 70*91f16700Schasinglulu #define MP_CPUSYS_TOP_APB_DCM_REG0_MASK BIT(5) 71*91f16700Schasinglulu #define MP_CPUSYS_TOP_APB_DCM_REG1_MASK BIT(8) 72*91f16700Schasinglulu #define MP_CPUSYS_TOP_APB_DCM_REG2_MASK BIT(16) 73*91f16700Schasinglulu #define MP_CPUSYS_TOP_APB_DCM_REG0_ON BIT(5) 74*91f16700Schasinglulu #define MP_CPUSYS_TOP_APB_DCM_REG1_ON BIT(8) 75*91f16700Schasinglulu #define MP_CPUSYS_TOP_APB_DCM_REG2_ON BIT(16) 76*91f16700Schasinglulu #define MP_CPUSYS_TOP_APB_DCM_REG0_OFF (0x0 << 5) 77*91f16700Schasinglulu #define MP_CPUSYS_TOP_APB_DCM_REG1_OFF (0x0 << 8) 78*91f16700Schasinglulu #define MP_CPUSYS_TOP_APB_DCM_REG2_OFF (0x0 << 16) 79*91f16700Schasinglulu 80*91f16700Schasinglulu bool dcm_mp_cpusys_top_apb_dcm_is_on(void) 81*91f16700Schasinglulu { 82*91f16700Schasinglulu bool ret = true; 83*91f16700Schasinglulu 84*91f16700Schasinglulu ret &= dcm_check_state(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0, 85*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG0_MASK, 86*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG0_ON); 87*91f16700Schasinglulu ret &= dcm_check_state(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0, 88*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG1_MASK, 89*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG1_ON); 90*91f16700Schasinglulu ret &= dcm_check_state(MP_CPUSYS_TOP_MP0_DCM_CFG0, 91*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG2_MASK, 92*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG2_ON); 93*91f16700Schasinglulu 94*91f16700Schasinglulu return ret; 95*91f16700Schasinglulu } 96*91f16700Schasinglulu 97*91f16700Schasinglulu void dcm_mp_cpusys_top_apb_dcm(bool on) 98*91f16700Schasinglulu { 99*91f16700Schasinglulu if (on) { 100*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_apb_dcm'" */ 101*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0, 102*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG0_MASK, 103*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG0_ON); 104*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0, 105*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG1_MASK, 106*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG1_ON); 107*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP0_DCM_CFG0, 108*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG2_MASK, 109*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG2_ON); 110*91f16700Schasinglulu } else { 111*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_apb_dcm'" */ 112*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0, 113*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG0_MASK, 114*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG0_OFF); 115*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MCUSYS_DCM_CFG0, 116*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG1_MASK, 117*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG1_OFF); 118*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP0_DCM_CFG0, 119*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG2_MASK, 120*91f16700Schasinglulu MP_CPUSYS_TOP_APB_DCM_REG2_OFF); 121*91f16700Schasinglulu } 122*91f16700Schasinglulu } 123*91f16700Schasinglulu 124*91f16700Schasinglulu #define MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_MASK (BIT(11) | BIT(24) | BIT(25)) 125*91f16700Schasinglulu #define MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_ON (BIT(11) | BIT(24) | BIT(25)) 126*91f16700Schasinglulu #define MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_OFF ((0x0 << 11) | \ 127*91f16700Schasinglulu (0x0 << 24) | \ 128*91f16700Schasinglulu (0x0 << 25)) 129*91f16700Schasinglulu 130*91f16700Schasinglulu bool dcm_mp_cpusys_top_bus_pll_div_dcm_is_on(void) 131*91f16700Schasinglulu { 132*91f16700Schasinglulu return dcm_check_state(MP_CPUSYS_TOP_BUS_PLLDIV_CFG, 133*91f16700Schasinglulu MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_MASK, 134*91f16700Schasinglulu MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_ON); 135*91f16700Schasinglulu } 136*91f16700Schasinglulu 137*91f16700Schasinglulu void dcm_mp_cpusys_top_bus_pll_div_dcm(bool on) 138*91f16700Schasinglulu { 139*91f16700Schasinglulu if (on) { 140*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_bus_pll_div_dcm'" */ 141*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_BUS_PLLDIV_CFG, 142*91f16700Schasinglulu MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_MASK, 143*91f16700Schasinglulu MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_ON); 144*91f16700Schasinglulu } else { 145*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_bus_pll_div_dcm'" */ 146*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_BUS_PLLDIV_CFG, 147*91f16700Schasinglulu MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_MASK, 148*91f16700Schasinglulu MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_OFF); 149*91f16700Schasinglulu } 150*91f16700Schasinglulu } 151*91f16700Schasinglulu 152*91f16700Schasinglulu #define MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_MASK BIT(0) 153*91f16700Schasinglulu #define MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_ON BIT(0) 154*91f16700Schasinglulu #define MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_OFF (0x0 << 0) 155*91f16700Schasinglulu 156*91f16700Schasinglulu bool dcm_mp_cpusys_top_core_stall_dcm_is_on(void) 157*91f16700Schasinglulu { 158*91f16700Schasinglulu return dcm_check_state(MP_CPUSYS_TOP_MP0_DCM_CFG7, 159*91f16700Schasinglulu MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_MASK, 160*91f16700Schasinglulu MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_ON); 161*91f16700Schasinglulu } 162*91f16700Schasinglulu 163*91f16700Schasinglulu void dcm_mp_cpusys_top_core_stall_dcm(bool on) 164*91f16700Schasinglulu { 165*91f16700Schasinglulu if (on) { 166*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_core_stall_dcm'" */ 167*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP0_DCM_CFG7, 168*91f16700Schasinglulu MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_MASK, 169*91f16700Schasinglulu MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_ON); 170*91f16700Schasinglulu } else { 171*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_core_stall_dcm'" */ 172*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP0_DCM_CFG7, 173*91f16700Schasinglulu MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_MASK, 174*91f16700Schasinglulu MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_OFF); 175*91f16700Schasinglulu } 176*91f16700Schasinglulu } 177*91f16700Schasinglulu 178*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPUBIU_DCM_REG0_MASK (0xffff << 0) 179*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPUBIU_DCM_REG0_ON (0xffff << 0) 180*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPUBIU_DCM_REG0_OFF (0x0 << 0) 181*91f16700Schasinglulu 182*91f16700Schasinglulu bool dcm_mp_cpusys_top_cpubiu_dcm_is_on(void) 183*91f16700Schasinglulu { 184*91f16700Schasinglulu return dcm_check_state(MP_CPUSYS_TOP_MCSIC_DCM0, 185*91f16700Schasinglulu MP_CPUSYS_TOP_CPUBIU_DCM_REG0_MASK, 186*91f16700Schasinglulu MP_CPUSYS_TOP_CPUBIU_DCM_REG0_ON); 187*91f16700Schasinglulu } 188*91f16700Schasinglulu 189*91f16700Schasinglulu void dcm_mp_cpusys_top_cpubiu_dcm(bool on) 190*91f16700Schasinglulu { 191*91f16700Schasinglulu if (on) { 192*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_cpubiu_dcm'" */ 193*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MCSIC_DCM0, 194*91f16700Schasinglulu MP_CPUSYS_TOP_CPUBIU_DCM_REG0_MASK, 195*91f16700Schasinglulu MP_CPUSYS_TOP_CPUBIU_DCM_REG0_ON); 196*91f16700Schasinglulu } else { 197*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpubiu_dcm'" */ 198*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MCSIC_DCM0, 199*91f16700Schasinglulu MP_CPUSYS_TOP_CPUBIU_DCM_REG0_MASK, 200*91f16700Schasinglulu MP_CPUSYS_TOP_CPUBIU_DCM_REG0_OFF); 201*91f16700Schasinglulu } 202*91f16700Schasinglulu } 203*91f16700Schasinglulu 204*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_MASK (BIT(24) | BIT(25)) 205*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_ON (BIT(24) | BIT(25)) 206*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_OFF ((0x0 << 24) | (0x0 << 25)) 207*91f16700Schasinglulu 208*91f16700Schasinglulu bool dcm_mp_cpusys_top_cpu_pll_div_0_dcm_is_on(void) 209*91f16700Schasinglulu { 210*91f16700Schasinglulu return dcm_check_state(MP_CPUSYS_TOP_CPU_PLLDIV_CFG0, 211*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_MASK, 212*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_ON); 213*91f16700Schasinglulu } 214*91f16700Schasinglulu 215*91f16700Schasinglulu void dcm_mp_cpusys_top_cpu_pll_div_0_dcm(bool on) 216*91f16700Schasinglulu { 217*91f16700Schasinglulu if (on) { 218*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_cpu_pll_div_0_dcm'" */ 219*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_CPU_PLLDIV_CFG0, 220*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_MASK, 221*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_ON); 222*91f16700Schasinglulu } else { 223*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpu_pll_div_0_dcm'" */ 224*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_CPU_PLLDIV_CFG0, 225*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_MASK, 226*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_OFF); 227*91f16700Schasinglulu } 228*91f16700Schasinglulu } 229*91f16700Schasinglulu 230*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_MASK (BIT(24) | BIT(25)) 231*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_ON (BIT(24) | BIT(25)) 232*91f16700Schasinglulu #define MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_OFF ((0x0 << 24) | (0x0 << 25)) 233*91f16700Schasinglulu 234*91f16700Schasinglulu bool dcm_mp_cpusys_top_cpu_pll_div_1_dcm_is_on(void) 235*91f16700Schasinglulu { 236*91f16700Schasinglulu return dcm_check_state(MP_CPUSYS_TOP_CPU_PLLDIV_CFG1, 237*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_MASK, 238*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_ON); 239*91f16700Schasinglulu } 240*91f16700Schasinglulu 241*91f16700Schasinglulu void dcm_mp_cpusys_top_cpu_pll_div_1_dcm(bool on) 242*91f16700Schasinglulu { 243*91f16700Schasinglulu if (on) { 244*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_cpu_pll_div_1_dcm'" */ 245*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_CPU_PLLDIV_CFG1, 246*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_MASK, 247*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_ON); 248*91f16700Schasinglulu } else { 249*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpu_pll_div_1_dcm'" */ 250*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_CPU_PLLDIV_CFG1, 251*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_MASK, 252*91f16700Schasinglulu MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_OFF); 253*91f16700Schasinglulu } 254*91f16700Schasinglulu } 255*91f16700Schasinglulu 256*91f16700Schasinglulu #define MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_MASK BIT(4) 257*91f16700Schasinglulu #define MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_ON BIT(4) 258*91f16700Schasinglulu #define MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_OFF (0x0 << 4) 259*91f16700Schasinglulu 260*91f16700Schasinglulu bool dcm_mp_cpusys_top_fcm_stall_dcm_is_on(void) 261*91f16700Schasinglulu { 262*91f16700Schasinglulu return dcm_check_state(MP_CPUSYS_TOP_MP0_DCM_CFG7, 263*91f16700Schasinglulu MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_MASK, 264*91f16700Schasinglulu MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_ON); 265*91f16700Schasinglulu } 266*91f16700Schasinglulu 267*91f16700Schasinglulu void dcm_mp_cpusys_top_fcm_stall_dcm(bool on) 268*91f16700Schasinglulu { 269*91f16700Schasinglulu if (on) { 270*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_fcm_stall_dcm'" */ 271*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP0_DCM_CFG7, 272*91f16700Schasinglulu MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_MASK, 273*91f16700Schasinglulu MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_ON); 274*91f16700Schasinglulu } else { 275*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_fcm_stall_dcm'" */ 276*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP0_DCM_CFG7, 277*91f16700Schasinglulu MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_MASK, 278*91f16700Schasinglulu MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_OFF); 279*91f16700Schasinglulu } 280*91f16700Schasinglulu } 281*91f16700Schasinglulu 282*91f16700Schasinglulu #define MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_MASK BIT(31) 283*91f16700Schasinglulu #define MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_ON BIT(31) 284*91f16700Schasinglulu #define MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_OFF (0x0U << 31) 285*91f16700Schasinglulu 286*91f16700Schasinglulu bool dcm_mp_cpusys_top_last_cor_idle_dcm_is_on(void) 287*91f16700Schasinglulu { 288*91f16700Schasinglulu return dcm_check_state(MP_CPUSYS_TOP_BUS_PLLDIV_CFG, 289*91f16700Schasinglulu MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_MASK, 290*91f16700Schasinglulu MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_ON); 291*91f16700Schasinglulu } 292*91f16700Schasinglulu 293*91f16700Schasinglulu void dcm_mp_cpusys_top_last_cor_idle_dcm(bool on) 294*91f16700Schasinglulu { 295*91f16700Schasinglulu if (on) { 296*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_last_cor_idle_dcm'" */ 297*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_BUS_PLLDIV_CFG, 298*91f16700Schasinglulu MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_MASK, 299*91f16700Schasinglulu MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_ON); 300*91f16700Schasinglulu } else { 301*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_last_cor_idle_dcm'" */ 302*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_BUS_PLLDIV_CFG, 303*91f16700Schasinglulu MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_MASK, 304*91f16700Schasinglulu MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_OFF); 305*91f16700Schasinglulu } 306*91f16700Schasinglulu } 307*91f16700Schasinglulu 308*91f16700Schasinglulu #define MP_CPUSYS_TOP_MISC_DCM_REG0_MASK (BIT(1) | BIT(4)) 309*91f16700Schasinglulu #define MP_CPUSYS_TOP_MISC_DCM_REG0_ON (BIT(1) | BIT(4)) 310*91f16700Schasinglulu #define MP_CPUSYS_TOP_MISC_DCM_REG0_OFF ((0x0 << 1) | (0x0 << 4)) 311*91f16700Schasinglulu 312*91f16700Schasinglulu bool dcm_mp_cpusys_top_misc_dcm_is_on(void) 313*91f16700Schasinglulu { 314*91f16700Schasinglulu return dcm_check_state(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0, 315*91f16700Schasinglulu MP_CPUSYS_TOP_MISC_DCM_REG0_MASK, 316*91f16700Schasinglulu MP_CPUSYS_TOP_MISC_DCM_REG0_ON); 317*91f16700Schasinglulu } 318*91f16700Schasinglulu 319*91f16700Schasinglulu void dcm_mp_cpusys_top_misc_dcm(bool on) 320*91f16700Schasinglulu { 321*91f16700Schasinglulu if (on) { 322*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_misc_dcm'" */ 323*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0, 324*91f16700Schasinglulu MP_CPUSYS_TOP_MISC_DCM_REG0_MASK, 325*91f16700Schasinglulu MP_CPUSYS_TOP_MISC_DCM_REG0_ON); 326*91f16700Schasinglulu } else { 327*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_misc_dcm'" */ 328*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0, 329*91f16700Schasinglulu MP_CPUSYS_TOP_MISC_DCM_REG0_MASK, 330*91f16700Schasinglulu MP_CPUSYS_TOP_MISC_DCM_REG0_OFF); 331*91f16700Schasinglulu } 332*91f16700Schasinglulu } 333*91f16700Schasinglulu 334*91f16700Schasinglulu #define MP_CPUSYS_TOP_MP0_QDCM_REG0_MASK BIT(3) 335*91f16700Schasinglulu #define MP_CPUSYS_TOP_MP0_QDCM_REG1_MASK (BIT(0) | BIT(1) | BIT(2) | BIT(3)) 336*91f16700Schasinglulu #define MP_CPUSYS_TOP_MP0_QDCM_REG0_ON BIT(3) 337*91f16700Schasinglulu #define MP_CPUSYS_TOP_MP0_QDCM_REG1_ON (BIT(0) | BIT(1) | BIT(2) | BIT(3)) 338*91f16700Schasinglulu #define MP_CPUSYS_TOP_MP0_QDCM_REG0_OFF ((0x0 << 3)) 339*91f16700Schasinglulu #define MP_CPUSYS_TOP_MP0_QDCM_REG1_OFF ((0x0 << 0) | (0x0 << 1) | \ 340*91f16700Schasinglulu (0x0 << 2) | (0x0 << 3)) 341*91f16700Schasinglulu 342*91f16700Schasinglulu bool dcm_mp_cpusys_top_mp0_qdcm_is_on(void) 343*91f16700Schasinglulu { 344*91f16700Schasinglulu bool ret = true; 345*91f16700Schasinglulu 346*91f16700Schasinglulu ret &= dcm_check_state(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0, 347*91f16700Schasinglulu MP_CPUSYS_TOP_MP0_QDCM_REG0_MASK, 348*91f16700Schasinglulu MP_CPUSYS_TOP_MP0_QDCM_REG0_ON); 349*91f16700Schasinglulu ret &= dcm_check_state(MP_CPUSYS_TOP_MP0_DCM_CFG0, 350*91f16700Schasinglulu MP_CPUSYS_TOP_MP0_QDCM_REG1_MASK, 351*91f16700Schasinglulu MP_CPUSYS_TOP_MP0_QDCM_REG1_ON); 352*91f16700Schasinglulu 353*91f16700Schasinglulu return ret; 354*91f16700Schasinglulu } 355*91f16700Schasinglulu 356*91f16700Schasinglulu void dcm_mp_cpusys_top_mp0_qdcm(bool on) 357*91f16700Schasinglulu { 358*91f16700Schasinglulu if (on) { 359*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'mp_cpusys_top_mp0_qdcm'" */ 360*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0, 361*91f16700Schasinglulu MP_CPUSYS_TOP_MP0_QDCM_REG0_MASK, 362*91f16700Schasinglulu MP_CPUSYS_TOP_MP0_QDCM_REG0_ON); 363*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP0_DCM_CFG0, 364*91f16700Schasinglulu MP_CPUSYS_TOP_MP0_QDCM_REG1_MASK, 365*91f16700Schasinglulu MP_CPUSYS_TOP_MP0_QDCM_REG1_ON); 366*91f16700Schasinglulu } else { 367*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'mp_cpusys_top_mp0_qdcm'" */ 368*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP_MISC_DCM_CFG0, 369*91f16700Schasinglulu MP_CPUSYS_TOP_MP0_QDCM_REG0_MASK, 370*91f16700Schasinglulu MP_CPUSYS_TOP_MP0_QDCM_REG0_OFF); 371*91f16700Schasinglulu mmio_clrsetbits_32(MP_CPUSYS_TOP_MP0_DCM_CFG0, 372*91f16700Schasinglulu MP_CPUSYS_TOP_MP0_QDCM_REG1_MASK, 373*91f16700Schasinglulu MP_CPUSYS_TOP_MP0_QDCM_REG1_OFF); 374*91f16700Schasinglulu } 375*91f16700Schasinglulu } 376*91f16700Schasinglulu 377*91f16700Schasinglulu #define CPCCFG_REG_EMI_WFIFO_REG0_MASK (BIT(0) | BIT(1) | BIT(2) | BIT(3)) 378*91f16700Schasinglulu #define CPCCFG_REG_EMI_WFIFO_REG0_ON (BIT(0) | BIT(1) | BIT(2) | BIT(3)) 379*91f16700Schasinglulu #define CPCCFG_REG_EMI_WFIFO_REG0_OFF ((0x0 << 0) | (0x0 << 1) | \ 380*91f16700Schasinglulu (0x0 << 2) | (0x0 << 3)) 381*91f16700Schasinglulu 382*91f16700Schasinglulu bool dcm_cpccfg_reg_emi_wfifo_is_on(void) 383*91f16700Schasinglulu { 384*91f16700Schasinglulu return dcm_check_state(CPCCFG_REG_EMI_WFIFO, 385*91f16700Schasinglulu CPCCFG_REG_EMI_WFIFO_REG0_MASK, 386*91f16700Schasinglulu CPCCFG_REG_EMI_WFIFO_REG0_ON); 387*91f16700Schasinglulu } 388*91f16700Schasinglulu 389*91f16700Schasinglulu void dcm_cpccfg_reg_emi_wfifo(bool on) 390*91f16700Schasinglulu { 391*91f16700Schasinglulu if (on) { 392*91f16700Schasinglulu /* TINFO = "Turn ON DCM 'cpccfg_reg_emi_wfifo'" */ 393*91f16700Schasinglulu mmio_clrsetbits_32(CPCCFG_REG_EMI_WFIFO, 394*91f16700Schasinglulu CPCCFG_REG_EMI_WFIFO_REG0_MASK, 395*91f16700Schasinglulu CPCCFG_REG_EMI_WFIFO_REG0_ON); 396*91f16700Schasinglulu } else { 397*91f16700Schasinglulu /* TINFO = "Turn OFF DCM 'cpccfg_reg_emi_wfifo'" */ 398*91f16700Schasinglulu mmio_clrsetbits_32(CPCCFG_REG_EMI_WFIFO, 399*91f16700Schasinglulu CPCCFG_REG_EMI_WFIFO_REG0_MASK, 400*91f16700Schasinglulu CPCCFG_REG_EMI_WFIFO_REG0_OFF); 401*91f16700Schasinglulu } 402*91f16700Schasinglulu } 403