1*e3ec6ff4SXiaoDong Huang /* 2*e3ec6ff4SXiaoDong Huang * Copyright (c) 2024, Rockchip, Inc. All rights reserved. 3*e3ec6ff4SXiaoDong Huang * 4*e3ec6ff4SXiaoDong Huang * SPDX-License-Identifier: BSD-3-Clause 5*e3ec6ff4SXiaoDong Huang */ 6*e3ec6ff4SXiaoDong Huang 7*e3ec6ff4SXiaoDong Huang #ifndef __PMU_H__ 8*e3ec6ff4SXiaoDong Huang #define __PMU_H__ 9*e3ec6ff4SXiaoDong Huang 10*e3ec6ff4SXiaoDong Huang #include <lib/mmio.h> 11*e3ec6ff4SXiaoDong Huang 12*e3ec6ff4SXiaoDong Huang #define PMU0_PWR_CON 0x0000 13*e3ec6ff4SXiaoDong Huang #define PMU0_WAKEUP_INT_CON 0x0008 14*e3ec6ff4SXiaoDong Huang #define PMU0_WAKEUP_INT_ST 0x000c 15*e3ec6ff4SXiaoDong Huang #define PMU0_PMIC_STABLE_CNT_THRES 0x0010 16*e3ec6ff4SXiaoDong Huang #define PMU0_WAKEUP_RST_CLR_CNT_THRES 0x0014 17*e3ec6ff4SXiaoDong Huang #define PMU0_OSC_STABLE_CNT_THRES 0x0018 18*e3ec6ff4SXiaoDong Huang #define PMU0_PWR_CHAIN_STABLE_CON 0x001c 19*e3ec6ff4SXiaoDong Huang #define PMU0_DDR_RET_CON(i) (0x0020 + (i) * 4) 20*e3ec6ff4SXiaoDong Huang #define PMU0_INFO_TX_CON 0x0030 21*e3ec6ff4SXiaoDong Huang 22*e3ec6ff4SXiaoDong Huang #define PMU1_VERSION_ID 0x4000 23*e3ec6ff4SXiaoDong Huang #define PMU1_PWR_CON 0x4004 24*e3ec6ff4SXiaoDong Huang #define PMU1_PWR_FSM 0x4008 25*e3ec6ff4SXiaoDong Huang #define PMU1_INT_MASK_CON 0x400c 26*e3ec6ff4SXiaoDong Huang #define PMU1_WAKEUP_INT_CON 0x4010 27*e3ec6ff4SXiaoDong Huang #define PMU1_WAKEUP_INT_ST 0x4014 28*e3ec6ff4SXiaoDong Huang #define PMU1_WAKEUP_EDGE_CON 0x4018 29*e3ec6ff4SXiaoDong Huang #define PMU1_WAKEUP_EDGE_ST 0x401c 30*e3ec6ff4SXiaoDong Huang #define PMU1_DDR_PWR_CON(i) (0x4020 + (i) * 4) 31*e3ec6ff4SXiaoDong Huang #define PMU1_DDR_PWR_SFTCON(i) (0x4030 + (i) * 4) 32*e3ec6ff4SXiaoDong Huang #define PMU1_DDR_PWR_FSM 0x4040 33*e3ec6ff4SXiaoDong Huang #define PMU1_DDR_PWR_ST 0x4044 34*e3ec6ff4SXiaoDong Huang #define PMU1_CRU_PWR_CON 0x4050 35*e3ec6ff4SXiaoDong Huang #define PMU1_CRU_PWR_SFTCON 0x4054 36*e3ec6ff4SXiaoDong Huang #define PMU1_CRU_PWR_FSM 0x4058 37*e3ec6ff4SXiaoDong Huang #define PMU1_PLLPD_CON(i) (0x4060 + (i) * 4) 38*e3ec6ff4SXiaoDong Huang #define PMU1_PLLPD_SFTCON(i) (0x4068 + (i) * 4) 39*e3ec6ff4SXiaoDong Huang #define PMU1_STABLE_CNT_THRESH 0x4080 40*e3ec6ff4SXiaoDong Huang #define PMU1_OSC_STABLE_CNT_THRESH 0x4084 41*e3ec6ff4SXiaoDong Huang #define PMU1_WAKEUP_RST_CLR_CNT_THRESH 0x4088 42*e3ec6ff4SXiaoDong Huang #define PMU1_PLL_LOCK_CNT_THRESH 0x408c 43*e3ec6ff4SXiaoDong Huang #define PMU1_WAKEUP_TIMEOUT_THRESH 0x4094 44*e3ec6ff4SXiaoDong Huang #define PMU1_PWM_SWITCH_CNT_THRESH 0x4098 45*e3ec6ff4SXiaoDong Huang #define PMU1_SYS_REG(i) (0x4100 + (i) * 4) 46*e3ec6ff4SXiaoDong Huang 47*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_CON1 0x8000 48*e3ec6ff4SXiaoDong Huang #define PMU2_DSU_PWR_CON 0x8004 49*e3ec6ff4SXiaoDong Huang #define PMU2_DSU_PWR_SFTCON 0x8008 50*e3ec6ff4SXiaoDong Huang #define PMU2_DSU_AUTO_PWR_CON 0x800c 51*e3ec6ff4SXiaoDong Huang #define PMU2_CPU_AUTO_PWR_CON(i) (0x8010 + (i) * 4) 52*e3ec6ff4SXiaoDong Huang #define PMU2_CPU_PWR_SFTCON(i) (0x8030 + (i) * 4) 53*e3ec6ff4SXiaoDong Huang #define PMU2_CORE_PWR_CON(i) (0x8050 + (i) * 4) 54*e3ec6ff4SXiaoDong Huang #define PMU2_CORE_PWR_SFTCON(i) (0x8058 + (i) * 4) 55*e3ec6ff4SXiaoDong Huang #define PMU2_CORE_AUTO_PWR_CON(i) (0x8060 + (i) * 4) 56*e3ec6ff4SXiaoDong Huang #define PMU2_CLUSTER_NOC_AUTO_CON 0x8068 57*e3ec6ff4SXiaoDong Huang #define PMU2_CLUSTER_DBG_PWR_CON 0x806c 58*e3ec6ff4SXiaoDong Huang #define PMU2_CLUSTER_IDLE_CON 0x8070 59*e3ec6ff4SXiaoDong Huang #define PMU2_CLUSTER_IDLE_SFTCON 0x8074 60*e3ec6ff4SXiaoDong Huang #define PMU2_CLUSTER_IDLE_ACK 0x8078 61*e3ec6ff4SXiaoDong Huang #define PMU2_CLUSTER_IDLE_ST 0x807c 62*e3ec6ff4SXiaoDong Huang #define PMU2_CLUSTER_ST 0x8080 63*e3ec6ff4SXiaoDong Huang #define PMU2_SCU_PWR_FSM_STATUS(i) (0x8084 + (i) * 4) 64*e3ec6ff4SXiaoDong Huang #define PMU2_CORE_PCHANNEL_STATUS(i) (0x808c + (i) * 4) 65*e3ec6ff4SXiaoDong Huang #define PMU2_CPU_PWR_CHAIN_STABLE_CON 0x8098 66*e3ec6ff4SXiaoDong Huang #define PMU2_CLUSTER_MEMPWR_GATE_SFTCON 0x809c 67*e3ec6ff4SXiaoDong Huang #define PMU2_DSU_STABLE_CNT_THRESH 0x80b0 68*e3ec6ff4SXiaoDong Huang #define PMU2_DSU_PWRUP_CNT_THRESH 0x80b4 69*e3ec6ff4SXiaoDong Huang #define PMU2_DSU_PWRDN_CNT_THRESH 0x80b8 70*e3ec6ff4SXiaoDong Huang #define PMU2_CORE0_STABLE_CNT_THRESH 0x80bc 71*e3ec6ff4SXiaoDong Huang #define PMU2_CORE0_PWRUP_CNT_THRESH 0x80c0 72*e3ec6ff4SXiaoDong Huang #define PMU2_CORE0_PWRDN_CNT_THRESH 0x80c4 73*e3ec6ff4SXiaoDong Huang #define PMU2_CORE1_STABLE_CNT_THRESH 0x80c8 74*e3ec6ff4SXiaoDong Huang #define PMU2_CORE1_PWRUP_CNT_THRESH 0x80cc 75*e3ec6ff4SXiaoDong Huang #define PMU2_CORE1_PWRDN_CNT_THRESH 0x80d0 76*e3ec6ff4SXiaoDong Huang #define PMU2_DBG_RST_CNT_THRESH(i) (0x80d4 + (i) * 4) 77*e3ec6ff4SXiaoDong Huang #define PMU2_BUS_IDLE_CON(i) (0x8100 + (i) * 4) 78*e3ec6ff4SXiaoDong Huang #define PMU2_BUS_IDLE_SFTCON(i) (0x810c + (i) * 4) 79*e3ec6ff4SXiaoDong Huang #define PMU2_BUS_IDLE_ACK(i) (0x8118 + (i) * 4) 80*e3ec6ff4SXiaoDong Huang #define PMU2_BUS_IDLE_ST(i) (0x8120 + (i) * 4) 81*e3ec6ff4SXiaoDong Huang #define PMU2_BIU_AUTO_CON(i) (0x8128 + (i) * 4) 82*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_GATE_CON(i) (0x8140 + (i) * 4) 83*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_GATE_SFTCON(i) (0x814c + (i) * 4) 84*e3ec6ff4SXiaoDong Huang #define PMU2_VOL_GATE_CON(i) (0x8158 + (i) * 4) 85*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_UP_CHAIN_STABLE_CON(i) (0x8164 + (i) * 4) 86*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_DWN_CHAIN_STABLE_CON(i)(0x8170 + (i) * 4) 87*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_STABLE_CHAIN_CNT_THRES 0x817c 88*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_GATE_ST(i) (0x8180 + (i) * 4) 89*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_GATE_FSM 0x8188 90*e3ec6ff4SXiaoDong Huang #define PMU2_VOL_GATE_FAST_CON 0x818c 91*e3ec6ff4SXiaoDong Huang #define PMU2_GPU_PWRUP_CNT 0x8190 92*e3ec6ff4SXiaoDong Huang #define PMU2_GPU_PWRDN_CNT 0x8194 93*e3ec6ff4SXiaoDong Huang #define PMU2_NPU_PWRUP_CNT 0x8198 94*e3ec6ff4SXiaoDong Huang #define PMU2_NPU_PWRDN_CNT 0x819c 95*e3ec6ff4SXiaoDong Huang #define PMU2_MEMPWR_GATE_SFTCON(i) (0x81a0 + (i) * 4) 96*e3ec6ff4SXiaoDong Huang #define PMU2_MEMPWR_MD_GATE_SFTCON(i) (0x81b0 + (i) * 4) 97*e3ec6ff4SXiaoDong Huang #define PMU2_MEMPWR_MD_GATE_STATUS 0x81bc 98*e3ec6ff4SXiaoDong Huang #define PMU2_SUBMEM_PWR_ACK_BYPASS(i) (0x81c0 + (i) * 4) 99*e3ec6ff4SXiaoDong Huang #define PMU2_QCHANNEL_PWR_CON 0x81d0 100*e3ec6ff4SXiaoDong Huang #define PMU2_QCHANNEL_PWR_SFTCON 0x81d4 101*e3ec6ff4SXiaoDong Huang #define PMU2_QCHANNEL_STATUS 0x81d8 102*e3ec6ff4SXiaoDong Huang #define PMU2_DEBUG_INFO_SEL 0x81e0 103*e3ec6ff4SXiaoDong Huang #define PMU2_VOP_SUBPD_STATE 0x81e4 104*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_CHAIN0_ST(i) (0x81e8 + (i) * 4) 105*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_CHAIN1_ST(i) (0x81f0 + (i) * 4) 106*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_MEM_ST(i) (0x81f8 + (i) * 4) 107*e3ec6ff4SXiaoDong Huang #define PMU2_BISR_CON(i) (0x8200 + (i) * 4) 108*e3ec6ff4SXiaoDong Huang #define PMU2_BISR_STATUS(i) (0x8280 + (i) * 4) 109*e3ec6ff4SXiaoDong Huang 110*e3ec6ff4SXiaoDong Huang #define PMU2_QCH_PWR_MSK 0x7f 111*e3ec6ff4SXiaoDong Huang 112*e3ec6ff4SXiaoDong Huang #define PD_CTR_LOOP 500 113*e3ec6ff4SXiaoDong Huang #define PD_CHECK_LOOP 500 114*e3ec6ff4SXiaoDong Huang #define WFEI_CHECK_LOOP 500 115*e3ec6ff4SXiaoDong Huang #define BUS_IDLE_LOOP 1000 116*e3ec6ff4SXiaoDong Huang #define QCH_PWR_LOOP 5000 117*e3ec6ff4SXiaoDong Huang 118*e3ec6ff4SXiaoDong Huang /* PMU1SCRU */ 119*e3ec6ff4SXiaoDong Huang #define PMU1SCRU_GATE_CON(i) (0x800 + (i) * 4) 120*e3ec6ff4SXiaoDong Huang 121*e3ec6ff4SXiaoDong Huang /* PMU_GRF */ 122*e3ec6ff4SXiaoDong Huang #define PMU0_GRF_SOC_CON(i) ((i) * 4) 123*e3ec6ff4SXiaoDong Huang #define PMU0_GRF_OS_REGS(i) (0x80 + ((i) - 8) * 4) 124*e3ec6ff4SXiaoDong Huang #define PMU1_GRF_SOC_CON(i) ((i) * 4) 125*e3ec6ff4SXiaoDong Huang #define PMU0_GRF_IO_RET_CON(i) (0x20 + (i) * 4) 126*e3ec6ff4SXiaoDong Huang 127*e3ec6ff4SXiaoDong Huang /* PMU_SGRF */ 128*e3ec6ff4SXiaoDong Huang #define PMU0_SGRF_SOC_CON(i) ((i) * 4) 129*e3ec6ff4SXiaoDong Huang #define PMU1_SGRF_SOC_CON(i) ((i) * 4) 130*e3ec6ff4SXiaoDong Huang 131*e3ec6ff4SXiaoDong Huang /* sys grf */ 132*e3ec6ff4SXiaoDong Huang #define GRF_CPU_STATUS0 0x0420 133*e3ec6ff4SXiaoDong Huang 134*e3ec6ff4SXiaoDong Huang #define CORES_PM_DISABLE 0x0 135*e3ec6ff4SXiaoDong Huang #define PD_CHECK_LOOP 500 136*e3ec6ff4SXiaoDong Huang #define WFEI_CHECK_LOOP 500 137*e3ec6ff4SXiaoDong Huang 138*e3ec6ff4SXiaoDong Huang /* The ways of cores power domain contorlling */ 139*e3ec6ff4SXiaoDong Huang enum cores_pm_ctr_mode { 140*e3ec6ff4SXiaoDong Huang core_pwr_pd = 0, 141*e3ec6ff4SXiaoDong Huang core_pwr_wfi = 1, 142*e3ec6ff4SXiaoDong Huang core_pwr_wfi_int = 2 143*e3ec6ff4SXiaoDong Huang }; 144*e3ec6ff4SXiaoDong Huang 145*e3ec6ff4SXiaoDong Huang /* PMU0_PWR_CON */ 146*e3ec6ff4SXiaoDong Huang enum pmu0_pwr_con { 147*e3ec6ff4SXiaoDong Huang pmu0_powermode_en = 0, 148*e3ec6ff4SXiaoDong Huang pmu0_pmu1_pwr_bypass = 1, 149*e3ec6ff4SXiaoDong Huang pmu0_pmu1_bus_bypass = 2, 150*e3ec6ff4SXiaoDong Huang pmu0_wkup_bypass = 3, 151*e3ec6ff4SXiaoDong Huang pmu0_pmic_bypass = 4, 152*e3ec6ff4SXiaoDong Huang pmu0_reset_bypass = 5, 153*e3ec6ff4SXiaoDong Huang pmu0_freq_sw_bypass = 6, 154*e3ec6ff4SXiaoDong Huang pmu0_osc_dis_bypass = 7, 155*e3ec6ff4SXiaoDong Huang pmu0_pmu1_pwr_gt_en = 8, 156*e3ec6ff4SXiaoDong Huang pmu0_pmu1_pwr_gt_sft_en = 9, 157*e3ec6ff4SXiaoDong Huang pmu0_pmu1_mem_gt_sft_en = 10, 158*e3ec6ff4SXiaoDong Huang pmu0_pmu1_bus_idle_en = 11, 159*e3ec6ff4SXiaoDong Huang pmu0_pmu1_bus_idle_sft_en = 12, 160*e3ec6ff4SXiaoDong Huang pmu0_pmu1_biu_auto_en = 13, 161*e3ec6ff4SXiaoDong Huang pmu0_pwr_off_io_en = 14, 162*e3ec6ff4SXiaoDong Huang }; 163*e3ec6ff4SXiaoDong Huang 164*e3ec6ff4SXiaoDong Huang /* PMU1_PWR_CON */ 165*e3ec6ff4SXiaoDong Huang enum pmu1_pwr_con { 166*e3ec6ff4SXiaoDong Huang powermode_en = 0, 167*e3ec6ff4SXiaoDong Huang dsu_bypass = 1, 168*e3ec6ff4SXiaoDong Huang bus_bypass = 4, 169*e3ec6ff4SXiaoDong Huang ddr_bypass = 5, 170*e3ec6ff4SXiaoDong Huang pwrdn_bypass = 6, 171*e3ec6ff4SXiaoDong Huang cru_bypass = 7, 172*e3ec6ff4SXiaoDong Huang qch_bypass = 8, 173*e3ec6ff4SXiaoDong Huang core_bypass = 9, 174*e3ec6ff4SXiaoDong Huang cpu_sleep_wfi_dis = 12, 175*e3ec6ff4SXiaoDong Huang }; 176*e3ec6ff4SXiaoDong Huang 177*e3ec6ff4SXiaoDong Huang /* PMU1_DDR_PWR_CON */ 178*e3ec6ff4SXiaoDong Huang enum pmu1_ddr_pwr_con { 179*e3ec6ff4SXiaoDong Huang ddr_sref_en = 0, 180*e3ec6ff4SXiaoDong Huang ddr_sref_a_en = 1, 181*e3ec6ff4SXiaoDong Huang ddrio_ret_en = 2, 182*e3ec6ff4SXiaoDong Huang ddrio_ret_exit_en = 5, 183*e3ec6ff4SXiaoDong Huang ddrio_rstiov_en = 6, 184*e3ec6ff4SXiaoDong Huang ddrio_rstiov_exit_en = 7, 185*e3ec6ff4SXiaoDong Huang ddr_gating_a_en = 8, 186*e3ec6ff4SXiaoDong Huang ddr_gating_c_en = 9, 187*e3ec6ff4SXiaoDong Huang ddr_gating_p_en = 10, 188*e3ec6ff4SXiaoDong Huang }; 189*e3ec6ff4SXiaoDong Huang 190*e3ec6ff4SXiaoDong Huang /* PMU_CRU_PWR_CON */ 191*e3ec6ff4SXiaoDong Huang enum pmu1_cru_pwr_con { 192*e3ec6ff4SXiaoDong Huang alive_32k_en = 0, 193*e3ec6ff4SXiaoDong Huang osc_dis_en = 1, 194*e3ec6ff4SXiaoDong Huang wakeup_rst_en = 2, 195*e3ec6ff4SXiaoDong Huang input_clamp_en = 3, 196*e3ec6ff4SXiaoDong Huang alive_osc_mode_en = 4, 197*e3ec6ff4SXiaoDong Huang power_off_en = 5, 198*e3ec6ff4SXiaoDong Huang pwm_switch_en = 6, 199*e3ec6ff4SXiaoDong Huang pwm_gpio_ioe_en = 7, 200*e3ec6ff4SXiaoDong Huang pwm_switch_io = 8, 201*e3ec6ff4SXiaoDong Huang pd_clk_src_gate_en = 9, 202*e3ec6ff4SXiaoDong Huang }; 203*e3ec6ff4SXiaoDong Huang 204*e3ec6ff4SXiaoDong Huang /* PMU_PLLPD_CON */ 205*e3ec6ff4SXiaoDong Huang enum pmu1_pllpd_con { 206*e3ec6ff4SXiaoDong Huang B0PLL_PD_EN, 207*e3ec6ff4SXiaoDong Huang B1PLL_PD_EN, 208*e3ec6ff4SXiaoDong Huang LPLL_PD_EN, 209*e3ec6ff4SXiaoDong Huang D0APLL_PD_EN, 210*e3ec6ff4SXiaoDong Huang D0BPLL_PD_EN, 211*e3ec6ff4SXiaoDong Huang D1APLL_PD_EN, 212*e3ec6ff4SXiaoDong Huang D1BPLL_PD_EN, 213*e3ec6ff4SXiaoDong Huang D2APLL_PD_EN, 214*e3ec6ff4SXiaoDong Huang D2BPLL_PD_EN, 215*e3ec6ff4SXiaoDong Huang D3APLL_PD_EN, 216*e3ec6ff4SXiaoDong Huang D3BPLL_PD_EN, 217*e3ec6ff4SXiaoDong Huang V0PLL_PD_EN, 218*e3ec6ff4SXiaoDong Huang AUPLL_PD_EN, 219*e3ec6ff4SXiaoDong Huang GPLL_PD_EN, 220*e3ec6ff4SXiaoDong Huang CPLL_PD_EN, 221*e3ec6ff4SXiaoDong Huang NPLL_PD_EN, 222*e3ec6ff4SXiaoDong Huang PPLL_PD_EN = 0, 223*e3ec6ff4SXiaoDong Huang SPLL_PD_EN = 1, 224*e3ec6ff4SXiaoDong Huang }; 225*e3ec6ff4SXiaoDong Huang 226*e3ec6ff4SXiaoDong Huang enum pmu1_wakeup_int { 227*e3ec6ff4SXiaoDong Huang WAKEUP_CPU0_INT_EN, 228*e3ec6ff4SXiaoDong Huang WAKEUP_CPU1_INT_EN, 229*e3ec6ff4SXiaoDong Huang WAKEUP_CPU2_INT_EN, 230*e3ec6ff4SXiaoDong Huang WAKEUP_CPU3_INT_EN, 231*e3ec6ff4SXiaoDong Huang WAKEUP_CPU4_INT_EN, 232*e3ec6ff4SXiaoDong Huang WAKEUP_CPU5_INT_EN, 233*e3ec6ff4SXiaoDong Huang WAKEUP_CPU6_INT_EN, 234*e3ec6ff4SXiaoDong Huang WAKEUP_CPU7_INT_EN, 235*e3ec6ff4SXiaoDong Huang WAKEUP_GPIO0_INT_EN, 236*e3ec6ff4SXiaoDong Huang WAKEUP_SDMMC_EN, 237*e3ec6ff4SXiaoDong Huang WAKEUP_SDIO_EN, 238*e3ec6ff4SXiaoDong Huang WAKEUP_USBDEV_EN, 239*e3ec6ff4SXiaoDong Huang WAKEUP_UART0_EN, 240*e3ec6ff4SXiaoDong Huang WAKEUP_VAD_EN, 241*e3ec6ff4SXiaoDong Huang WAKEUP_TIMER_EN, 242*e3ec6ff4SXiaoDong Huang WAKEUP_SOC_INT_EN, 243*e3ec6ff4SXiaoDong Huang WAKEUP_TIMEROUT_EN, 244*e3ec6ff4SXiaoDong Huang WAKEUP_PMUMCU_CEC_EN = 20, 245*e3ec6ff4SXiaoDong Huang }; 246*e3ec6ff4SXiaoDong Huang 247*e3ec6ff4SXiaoDong Huang enum pmu2_dsu_auto_pwr_con { 248*e3ec6ff4SXiaoDong Huang dsu_pm_en = 0, 249*e3ec6ff4SXiaoDong Huang dsu_pm_int_wakeup_en = 1, 250*e3ec6ff4SXiaoDong Huang dsu_pm_sft_wakeup_en = 3, 251*e3ec6ff4SXiaoDong Huang }; 252*e3ec6ff4SXiaoDong Huang 253*e3ec6ff4SXiaoDong Huang enum pmu2_cpu_auto_pwr_con { 254*e3ec6ff4SXiaoDong Huang cpu_pm_en = 0, 255*e3ec6ff4SXiaoDong Huang cpu_pm_int_wakeup_en = 1, 256*e3ec6ff4SXiaoDong Huang cpu_pm_sft_wakeup_en = 3, 257*e3ec6ff4SXiaoDong Huang }; 258*e3ec6ff4SXiaoDong Huang 259*e3ec6ff4SXiaoDong Huang enum pmu2_core_auto_pwr_con { 260*e3ec6ff4SXiaoDong Huang core_pm_en = 0, 261*e3ec6ff4SXiaoDong Huang core_pm_int_wakeup_en = 1, 262*e3ec6ff4SXiaoDong Huang core_pm_int_wakeup_glb_msk = 2, 263*e3ec6ff4SXiaoDong Huang core_pm_sft_wakeup_en = 3, 264*e3ec6ff4SXiaoDong Huang }; 265*e3ec6ff4SXiaoDong Huang 266*e3ec6ff4SXiaoDong Huang enum pmu2_dsu_power_con { 267*e3ec6ff4SXiaoDong Huang DSU_PWRDN_EN, 268*e3ec6ff4SXiaoDong Huang DSU_PWROFF_EN, 269*e3ec6ff4SXiaoDong Huang BIT_FULL_EN, 270*e3ec6ff4SXiaoDong Huang DSU_RET_EN, 271*e3ec6ff4SXiaoDong Huang CLUSTER_CLK_SRC_GT_EN, 272*e3ec6ff4SXiaoDong Huang }; 273*e3ec6ff4SXiaoDong Huang 274*e3ec6ff4SXiaoDong Huang enum pmu2_core_power_con { 275*e3ec6ff4SXiaoDong Huang CORE_PWRDN_EN, 276*e3ec6ff4SXiaoDong Huang CORE_PWROFF_EN, 277*e3ec6ff4SXiaoDong Huang CORE_CPU_PWRDN_EN, 278*e3ec6ff4SXiaoDong Huang CORE_PWR_CNT_EN, 279*e3ec6ff4SXiaoDong Huang }; 280*e3ec6ff4SXiaoDong Huang 281*e3ec6ff4SXiaoDong Huang enum pmu2_cluster_idle_con { 282*e3ec6ff4SXiaoDong Huang IDLE_REQ_BIGCORE0_EN = 0, 283*e3ec6ff4SXiaoDong Huang IDLE_REQ_BIGCORE1_EN = 2, 284*e3ec6ff4SXiaoDong Huang IDLE_REQ_DSU_EN = 4, 285*e3ec6ff4SXiaoDong Huang IDLE_REQ_LITDSU_EN = 5, 286*e3ec6ff4SXiaoDong Huang IDLE_REQ_ADB400_CORE_QCH_EN = 6, 287*e3ec6ff4SXiaoDong Huang }; 288*e3ec6ff4SXiaoDong Huang 289*e3ec6ff4SXiaoDong Huang enum qos_id { 290*e3ec6ff4SXiaoDong Huang QOS_ISP0_MWO = 0, 291*e3ec6ff4SXiaoDong Huang QOS_ISP0_MRO = 1, 292*e3ec6ff4SXiaoDong Huang QOS_ISP1_MWO = 2, 293*e3ec6ff4SXiaoDong Huang QOS_ISP1_MRO = 3, 294*e3ec6ff4SXiaoDong Huang QOS_VICAP_M0 = 4, 295*e3ec6ff4SXiaoDong Huang QOS_VICAP_M1 = 5, 296*e3ec6ff4SXiaoDong Huang QOS_FISHEYE0 = 6, 297*e3ec6ff4SXiaoDong Huang QOS_FISHEYE1 = 7, 298*e3ec6ff4SXiaoDong Huang QOS_VOP_M0 = 8, 299*e3ec6ff4SXiaoDong Huang QOS_VOP_M1 = 9, 300*e3ec6ff4SXiaoDong Huang QOS_RKVDEC0 = 10, 301*e3ec6ff4SXiaoDong Huang QOS_RKVDEC1 = 11, 302*e3ec6ff4SXiaoDong Huang QOS_AV1 = 12, 303*e3ec6ff4SXiaoDong Huang QOS_RKVENC0_M0RO = 13, 304*e3ec6ff4SXiaoDong Huang QOS_RKVENC0_M1RO = 14, 305*e3ec6ff4SXiaoDong Huang QOS_RKVENC0_M2WO = 15, 306*e3ec6ff4SXiaoDong Huang QOS_RKVENC1_M0RO = 16, 307*e3ec6ff4SXiaoDong Huang QOS_RKVENC1_M1RO = 17, 308*e3ec6ff4SXiaoDong Huang QOS_RKVENC1_M2WO = 18, 309*e3ec6ff4SXiaoDong Huang QOS_DSU_M0 = 19, 310*e3ec6ff4SXiaoDong Huang QOS_DSU_M1 = 20, 311*e3ec6ff4SXiaoDong Huang QOS_DSU_MP = 21, 312*e3ec6ff4SXiaoDong Huang QOS_DEBUG = 22, 313*e3ec6ff4SXiaoDong Huang QOS_GPU_M0 = 23, 314*e3ec6ff4SXiaoDong Huang QOS_GPU_M1 = 24, 315*e3ec6ff4SXiaoDong Huang QOS_GPU_M2 = 25, 316*e3ec6ff4SXiaoDong Huang QOS_GPU_M3 = 26, 317*e3ec6ff4SXiaoDong Huang QOS_NPU1 = 27, 318*e3ec6ff4SXiaoDong Huang QOS_NPU0_MRO = 28, 319*e3ec6ff4SXiaoDong Huang QOS_NPU2 = 29, 320*e3ec6ff4SXiaoDong Huang QOS_NPU0_MWR = 30, 321*e3ec6ff4SXiaoDong Huang QOS_MCU_NPU = 31, 322*e3ec6ff4SXiaoDong Huang QOS_JPEG_DEC = 32, 323*e3ec6ff4SXiaoDong Huang QOS_JPEG_ENC0 = 33, 324*e3ec6ff4SXiaoDong Huang QOS_JPEG_ENC1 = 34, 325*e3ec6ff4SXiaoDong Huang QOS_JPEG_ENC2 = 35, 326*e3ec6ff4SXiaoDong Huang QOS_JPEG_ENC3 = 36, 327*e3ec6ff4SXiaoDong Huang QOS_RGA2_MRO = 37, 328*e3ec6ff4SXiaoDong Huang QOS_RGA2_MWO = 38, 329*e3ec6ff4SXiaoDong Huang QOS_RGA3_0 = 39, 330*e3ec6ff4SXiaoDong Huang QOS_RGA3_1 = 40, 331*e3ec6ff4SXiaoDong Huang QOS_VDPU = 41, 332*e3ec6ff4SXiaoDong Huang QOS_IEP = 42, 333*e3ec6ff4SXiaoDong Huang QOS_HDCP0 = 43, 334*e3ec6ff4SXiaoDong Huang QOS_HDCP1 = 44, 335*e3ec6ff4SXiaoDong Huang QOS_HDMIRX = 45, 336*e3ec6ff4SXiaoDong Huang QOS_GIC600_M0 = 46, 337*e3ec6ff4SXiaoDong Huang QOS_GIC600_M1 = 47, 338*e3ec6ff4SXiaoDong Huang QOS_MMU600PCIE_TCU = 48, 339*e3ec6ff4SXiaoDong Huang QOS_MMU600PHP_TBU = 49, 340*e3ec6ff4SXiaoDong Huang QOS_MMU600PHP_TCU = 50, 341*e3ec6ff4SXiaoDong Huang QOS_USB3_0 = 51, 342*e3ec6ff4SXiaoDong Huang QOS_USB3_1 = 52, 343*e3ec6ff4SXiaoDong Huang QOS_USBHOST_0 = 53, 344*e3ec6ff4SXiaoDong Huang QOS_USBHOST_1 = 54, 345*e3ec6ff4SXiaoDong Huang QOS_EMMC = 55, 346*e3ec6ff4SXiaoDong Huang QOS_FSPI = 56, 347*e3ec6ff4SXiaoDong Huang QOS_SDIO = 57, 348*e3ec6ff4SXiaoDong Huang QOS_DECOM = 58, 349*e3ec6ff4SXiaoDong Huang QOS_DMAC0 = 59, 350*e3ec6ff4SXiaoDong Huang QOS_DMAC1 = 60, 351*e3ec6ff4SXiaoDong Huang QOS_DMAC2 = 61, 352*e3ec6ff4SXiaoDong Huang QOS_GIC600M = 62, 353*e3ec6ff4SXiaoDong Huang QOS_DMA2DDR = 63, 354*e3ec6ff4SXiaoDong Huang QOS_MCU_DDR = 64, 355*e3ec6ff4SXiaoDong Huang QOS_VAD = 65, 356*e3ec6ff4SXiaoDong Huang QOS_MCU_PMU = 66, 357*e3ec6ff4SXiaoDong Huang QOS_CRYPTOS = 67, 358*e3ec6ff4SXiaoDong Huang QOS_CRYPTONS = 68, 359*e3ec6ff4SXiaoDong Huang QOS_DCF = 69, 360*e3ec6ff4SXiaoDong Huang QOS_SDMMC = 70, 361*e3ec6ff4SXiaoDong Huang }; 362*e3ec6ff4SXiaoDong Huang 363*e3ec6ff4SXiaoDong Huang enum pmu2_pdid { 364*e3ec6ff4SXiaoDong Huang PD_GPU = 0, 365*e3ec6ff4SXiaoDong Huang PD_NPU = 1, 366*e3ec6ff4SXiaoDong Huang PD_VCODEC = 2, 367*e3ec6ff4SXiaoDong Huang PD_NPUTOP = 3, 368*e3ec6ff4SXiaoDong Huang PD_NPU1 = 4, 369*e3ec6ff4SXiaoDong Huang PD_NPU2 = 5, 370*e3ec6ff4SXiaoDong Huang PD_VENC0 = 6, 371*e3ec6ff4SXiaoDong Huang PD_VENC1 = 7, 372*e3ec6ff4SXiaoDong Huang PD_RKVDEC0 = 8, 373*e3ec6ff4SXiaoDong Huang PD_RKVDEC1 = 9, 374*e3ec6ff4SXiaoDong Huang PD_VDPU = 10, 375*e3ec6ff4SXiaoDong Huang PD_RGA30 = 11, 376*e3ec6ff4SXiaoDong Huang PD_AV1 = 12, 377*e3ec6ff4SXiaoDong Huang PD_VI = 13, 378*e3ec6ff4SXiaoDong Huang PD_FEC = 14, 379*e3ec6ff4SXiaoDong Huang PD_ISP1 = 15, 380*e3ec6ff4SXiaoDong Huang PD_RGA31 = 16, 381*e3ec6ff4SXiaoDong Huang PD_VOP = 17, 382*e3ec6ff4SXiaoDong Huang PD_VO0 = 18, 383*e3ec6ff4SXiaoDong Huang PD_VO1 = 19, 384*e3ec6ff4SXiaoDong Huang PD_AUDIO = 20, 385*e3ec6ff4SXiaoDong Huang PD_PHP = 21, 386*e3ec6ff4SXiaoDong Huang PD_GMAC = 22, 387*e3ec6ff4SXiaoDong Huang PD_PCIE = 23, 388*e3ec6ff4SXiaoDong Huang PD_NVM = 24, 389*e3ec6ff4SXiaoDong Huang PD_NVM0 = 25, 390*e3ec6ff4SXiaoDong Huang PD_SDIO = 26, 391*e3ec6ff4SXiaoDong Huang PD_USB = 27, 392*e3ec6ff4SXiaoDong Huang PD_SECURE = 28, 393*e3ec6ff4SXiaoDong Huang PD_SDMMC = 29, 394*e3ec6ff4SXiaoDong Huang PD_CRYPTO = 30, 395*e3ec6ff4SXiaoDong Huang PD_CENTER = 31, 396*e3ec6ff4SXiaoDong Huang PD_DDR01 = 32, 397*e3ec6ff4SXiaoDong Huang PD_DDR23 = 33, 398*e3ec6ff4SXiaoDong Huang }; 399*e3ec6ff4SXiaoDong Huang 400*e3ec6ff4SXiaoDong Huang enum pmu2_pd_repair_id { 401*e3ec6ff4SXiaoDong Huang PD_RPR_PMU = 0, 402*e3ec6ff4SXiaoDong Huang PD_RPR_GPU = 1, 403*e3ec6ff4SXiaoDong Huang PD_RPR_NPUTOP = 2, 404*e3ec6ff4SXiaoDong Huang PD_RPR_NPU1 = 3, 405*e3ec6ff4SXiaoDong Huang PD_RPR_NPU2 = 4, 406*e3ec6ff4SXiaoDong Huang PD_RPR_VENC0 = 5, 407*e3ec6ff4SXiaoDong Huang PD_RPR_VENC1 = 6, 408*e3ec6ff4SXiaoDong Huang PD_RPR_RKVDEC0 = 7, 409*e3ec6ff4SXiaoDong Huang PD_RPR_RKVDEC1 = 8, 410*e3ec6ff4SXiaoDong Huang PD_RPR_VDPU = 9, 411*e3ec6ff4SXiaoDong Huang PD_RPR_RGA30 = 10, 412*e3ec6ff4SXiaoDong Huang PD_RPR_AV1 = 11, 413*e3ec6ff4SXiaoDong Huang PD_RPR_VI = 12, 414*e3ec6ff4SXiaoDong Huang PD_RPR_FEC = 13, 415*e3ec6ff4SXiaoDong Huang PD_RPR_ISP1 = 14, 416*e3ec6ff4SXiaoDong Huang PD_RPR_RGA31 = 15, 417*e3ec6ff4SXiaoDong Huang PD_RPR_VOP = 16, 418*e3ec6ff4SXiaoDong Huang PD_RPR_VO0 = 17, 419*e3ec6ff4SXiaoDong Huang PD_RPR_VO1 = 18, 420*e3ec6ff4SXiaoDong Huang PD_RPR_AUDIO = 19, 421*e3ec6ff4SXiaoDong Huang PD_RPR_PHP = 20, 422*e3ec6ff4SXiaoDong Huang PD_RPR_GMAC = 21, 423*e3ec6ff4SXiaoDong Huang PD_RPR_PCIE = 22, 424*e3ec6ff4SXiaoDong Huang PD_RPR_NVM0 = 23, 425*e3ec6ff4SXiaoDong Huang PD_RPR_SDIO = 24, 426*e3ec6ff4SXiaoDong Huang PD_RPR_USB = 25, 427*e3ec6ff4SXiaoDong Huang PD_RPR_SDMMC = 26, 428*e3ec6ff4SXiaoDong Huang PD_RPR_CRYPTO = 27, 429*e3ec6ff4SXiaoDong Huang PD_RPR_CENTER = 28, 430*e3ec6ff4SXiaoDong Huang PD_RPR_DDR01 = 29, 431*e3ec6ff4SXiaoDong Huang PD_RPR_DDR23 = 30, 432*e3ec6ff4SXiaoDong Huang PD_RPR_BUS = 31, 433*e3ec6ff4SXiaoDong Huang }; 434*e3ec6ff4SXiaoDong Huang 435*e3ec6ff4SXiaoDong Huang enum pmu2_bus_id { 436*e3ec6ff4SXiaoDong Huang BUS_ID_GPU = 0, 437*e3ec6ff4SXiaoDong Huang BUS_ID_NPUTOP = 1, 438*e3ec6ff4SXiaoDong Huang BUS_ID_NPU1 = 2, 439*e3ec6ff4SXiaoDong Huang BUS_ID_NPU2 = 3, 440*e3ec6ff4SXiaoDong Huang BUS_ID_RKVENC0 = 4, 441*e3ec6ff4SXiaoDong Huang BUS_ID_RKVENC1 = 5, 442*e3ec6ff4SXiaoDong Huang BUS_ID_RKVDEC0 = 6, 443*e3ec6ff4SXiaoDong Huang BUS_ID_RKVDEC1 = 7, 444*e3ec6ff4SXiaoDong Huang BUS_ID_VDPU = 8, 445*e3ec6ff4SXiaoDong Huang BUS_ID_AV1 = 9, 446*e3ec6ff4SXiaoDong Huang BUS_ID_VI = 10, 447*e3ec6ff4SXiaoDong Huang BUS_ID_ISP = 11, 448*e3ec6ff4SXiaoDong Huang BUS_ID_RGA31 = 12, 449*e3ec6ff4SXiaoDong Huang BUS_ID_VOP = 13, 450*e3ec6ff4SXiaoDong Huang BUS_ID_VOP_CHANNEL = 14, 451*e3ec6ff4SXiaoDong Huang BUS_ID_VO0 = 15, 452*e3ec6ff4SXiaoDong Huang BUS_ID_VO1 = 16, 453*e3ec6ff4SXiaoDong Huang BUS_ID_AUDIO = 17, 454*e3ec6ff4SXiaoDong Huang BUS_ID_NVM = 18, 455*e3ec6ff4SXiaoDong Huang BUS_ID_SDIO = 19, 456*e3ec6ff4SXiaoDong Huang BUS_ID_USB = 20, 457*e3ec6ff4SXiaoDong Huang BUS_ID_PHP = 21, 458*e3ec6ff4SXiaoDong Huang BUS_ID_VO1USBTOP = 22, 459*e3ec6ff4SXiaoDong Huang BUS_ID_SECURE = 23, 460*e3ec6ff4SXiaoDong Huang BUS_ID_SECURE_CENTER_CHANNEL = 24, 461*e3ec6ff4SXiaoDong Huang BUS_ID_SECURE_VO1USB_CHANNEL = 25, 462*e3ec6ff4SXiaoDong Huang BUS_ID_CENTER = 26, 463*e3ec6ff4SXiaoDong Huang BUS_ID_CENTER_CHANNEL = 27, 464*e3ec6ff4SXiaoDong Huang BUS_ID_MSCH0 = 28, 465*e3ec6ff4SXiaoDong Huang BUS_ID_MSCH1 = 29, 466*e3ec6ff4SXiaoDong Huang BUS_ID_MSCH2 = 30, 467*e3ec6ff4SXiaoDong Huang BUS_ID_MSCH3 = 31, 468*e3ec6ff4SXiaoDong Huang BUS_ID_MSCH = 32, 469*e3ec6ff4SXiaoDong Huang BUS_ID_BUS = 33, 470*e3ec6ff4SXiaoDong Huang BUS_ID_TOP = 34, 471*e3ec6ff4SXiaoDong Huang }; 472*e3ec6ff4SXiaoDong Huang 473*e3ec6ff4SXiaoDong Huang enum pmu2_mem_st { 474*e3ec6ff4SXiaoDong Huang PD_NPU_TOP_MEM_ST = 11, 475*e3ec6ff4SXiaoDong Huang PD_NPU1_MEM_ST = 12, 476*e3ec6ff4SXiaoDong Huang PD_NPU2_MEM_ST = 13, 477*e3ec6ff4SXiaoDong Huang PD_VENC0_MEM_ST = 14, 478*e3ec6ff4SXiaoDong Huang PD_VENC1_MEM_ST = 15, 479*e3ec6ff4SXiaoDong Huang PD_RKVDEC0_MEM_ST = 16, 480*e3ec6ff4SXiaoDong Huang PD_RKVDEC1_MEM_ST = 17, 481*e3ec6ff4SXiaoDong Huang PD_RGA30_MEM_ST = 19, 482*e3ec6ff4SXiaoDong Huang PD_AV1_MEM_ST = 20, 483*e3ec6ff4SXiaoDong Huang PD_VI_MEM_ST = 21, 484*e3ec6ff4SXiaoDong Huang PD_FEC_MEM_ST = 22, 485*e3ec6ff4SXiaoDong Huang PD_ISP1_MEM_ST = 23, 486*e3ec6ff4SXiaoDong Huang PD_RGA31_MEM_ST = 24, 487*e3ec6ff4SXiaoDong Huang PD_VOP_MEM_ST = 25, 488*e3ec6ff4SXiaoDong Huang PD_VO0_MEM_ST = 26, 489*e3ec6ff4SXiaoDong Huang PD_VO1_MEM_ST = 27, 490*e3ec6ff4SXiaoDong Huang PD_AUDIO_MEM_ST = 28, 491*e3ec6ff4SXiaoDong Huang PD_PHP_MEM_ST = 29, 492*e3ec6ff4SXiaoDong Huang PD_GMAC_MEM_ST = 30, 493*e3ec6ff4SXiaoDong Huang PD_PCIE_MEM_ST = 31, 494*e3ec6ff4SXiaoDong Huang PD_NVM0_MEM_ST = 33, 495*e3ec6ff4SXiaoDong Huang PD_SDIO_MEM_ST = 34, 496*e3ec6ff4SXiaoDong Huang PD_USB_MEM_ST = 35, 497*e3ec6ff4SXiaoDong Huang PD_SDMMC_MEM_ST = 37, 498*e3ec6ff4SXiaoDong Huang }; 499*e3ec6ff4SXiaoDong Huang 500*e3ec6ff4SXiaoDong Huang enum pmu2_qid { 501*e3ec6ff4SXiaoDong Huang QID_PHPMMU_TBU = 0, 502*e3ec6ff4SXiaoDong Huang QID_PHPMMU_TCU = 1, 503*e3ec6ff4SXiaoDong Huang QID_PCIEMMU_TBU0 = 2, 504*e3ec6ff4SXiaoDong Huang QID_PCIEMU_TCU = 3, 505*e3ec6ff4SXiaoDong Huang QID_PHP_GICITS = 4, 506*e3ec6ff4SXiaoDong Huang QID_BUS_GICITS0 = 5, 507*e3ec6ff4SXiaoDong Huang QID_BUS_GICITS1 = 6, 508*e3ec6ff4SXiaoDong Huang }; 509*e3ec6ff4SXiaoDong Huang 510*e3ec6ff4SXiaoDong Huang /* PMU_DSU_PWR_CON */ 511*e3ec6ff4SXiaoDong Huang enum pmu_dsu_pwr_con { 512*e3ec6ff4SXiaoDong Huang DSU_PWRDN_ENA = 2, 513*e3ec6ff4SXiaoDong Huang DSU_PWROFF_ENA, 514*e3ec6ff4SXiaoDong Huang DSU_RET_ENA = 6, 515*e3ec6ff4SXiaoDong Huang CLUSTER_CLK_SRC_GATE_ENA, 516*e3ec6ff4SXiaoDong Huang DSU_PWR_CON_END 517*e3ec6ff4SXiaoDong Huang }; 518*e3ec6ff4SXiaoDong Huang 519*e3ec6ff4SXiaoDong Huang enum cpu_power_state { 520*e3ec6ff4SXiaoDong Huang CPU_POWER_ON, 521*e3ec6ff4SXiaoDong Huang CPU_POWER_OFF, 522*e3ec6ff4SXiaoDong Huang CPU_EMULATION_OFF, 523*e3ec6ff4SXiaoDong Huang CPU_RETENTION, 524*e3ec6ff4SXiaoDong Huang CPU_DEBUG 525*e3ec6ff4SXiaoDong Huang }; 526*e3ec6ff4SXiaoDong Huang 527*e3ec6ff4SXiaoDong Huang enum dsu_power_state { 528*e3ec6ff4SXiaoDong Huang DSU_POWER_ON, 529*e3ec6ff4SXiaoDong Huang CLUSTER_TRANSFER_IDLE, 530*e3ec6ff4SXiaoDong Huang DSU_POWER_DOWN, 531*e3ec6ff4SXiaoDong Huang DSU_OFF, 532*e3ec6ff4SXiaoDong Huang DSU_WAKEUP, 533*e3ec6ff4SXiaoDong Huang DSU_POWER_UP, 534*e3ec6ff4SXiaoDong Huang CLUSTER_TRANSFER_RESUME, 535*e3ec6ff4SXiaoDong Huang DSU_FUNCTION_RETENTION 536*e3ec6ff4SXiaoDong Huang }; 537*e3ec6ff4SXiaoDong Huang 538*e3ec6ff4SXiaoDong Huang /* PMU2_CLUSTER_STS 0x8080 */ 539*e3ec6ff4SXiaoDong Huang enum pmu2_cluster_sts_bits { 540*e3ec6ff4SXiaoDong Huang pd_cpu0_dwn = 0, 541*e3ec6ff4SXiaoDong Huang pd_cpu1_dwn, 542*e3ec6ff4SXiaoDong Huang pd_cpu2_dwn, 543*e3ec6ff4SXiaoDong Huang pd_cpu3_dwn, 544*e3ec6ff4SXiaoDong Huang pd_cpu4_dwn, 545*e3ec6ff4SXiaoDong Huang pd_cpu5_dwn, 546*e3ec6ff4SXiaoDong Huang pd_cpu6_dwn, 547*e3ec6ff4SXiaoDong Huang pd_cpu7_dwn, 548*e3ec6ff4SXiaoDong Huang pd_core0_dwn, 549*e3ec6ff4SXiaoDong Huang pd_core1_dwn 550*e3ec6ff4SXiaoDong Huang }; 551*e3ec6ff4SXiaoDong Huang 552*e3ec6ff4SXiaoDong Huang #define CLUSTER_STS_NONBOOT_CPUS_DWN 0xfe 553*e3ec6ff4SXiaoDong Huang 554*e3ec6ff4SXiaoDong Huang enum cpu_off_trigger { 555*e3ec6ff4SXiaoDong Huang CPU_OFF_TRIGGER_WFE = 0, 556*e3ec6ff4SXiaoDong Huang CPU_OFF_TRIGGER_REQ_EML, 557*e3ec6ff4SXiaoDong Huang CPU_OFF_TRIGGER_REQ_WFI, 558*e3ec6ff4SXiaoDong Huang CPU_OFF_TRIGGER_REQ_WFI_NBT_CPU, 559*e3ec6ff4SXiaoDong Huang CPU_OFF_TRIGGER_REQ_WFI_NBT_CPU_SRAM 560*e3ec6ff4SXiaoDong Huang }; 561*e3ec6ff4SXiaoDong Huang 562*e3ec6ff4SXiaoDong Huang /***************************************************************************** 563*e3ec6ff4SXiaoDong Huang * power domain on or off 564*e3ec6ff4SXiaoDong Huang *****************************************************************************/ 565*e3ec6ff4SXiaoDong Huang enum pmu_pd_state { 566*e3ec6ff4SXiaoDong Huang pmu_pd_on = 0, 567*e3ec6ff4SXiaoDong Huang pmu_pd_off = 1 568*e3ec6ff4SXiaoDong Huang }; 569*e3ec6ff4SXiaoDong Huang 570*e3ec6ff4SXiaoDong Huang enum bus_state { 571*e3ec6ff4SXiaoDong Huang bus_active, 572*e3ec6ff4SXiaoDong Huang bus_idle, 573*e3ec6ff4SXiaoDong Huang }; 574*e3ec6ff4SXiaoDong Huang 575*e3ec6ff4SXiaoDong Huang #define RK_CPU_STATUS_OFF 0 576*e3ec6ff4SXiaoDong Huang #define RK_CPU_STATUS_ON 1 577*e3ec6ff4SXiaoDong Huang #define RK_CPU_STATUS_BUSY -1 578*e3ec6ff4SXiaoDong Huang 579*e3ec6ff4SXiaoDong Huang #define PD_CTR_LOOP 500 580*e3ec6ff4SXiaoDong Huang #define MAX_WAIT_COUNT 500 581*e3ec6ff4SXiaoDong Huang 582*e3ec6ff4SXiaoDong Huang #define pmu_bus_idle_st(id) \ 583*e3ec6ff4SXiaoDong Huang (!!(mmio_read_32(PMU_BASE + PMU2_BUS_IDLE_ST((id) / 32)) & BIT((id) % 32))) 584*e3ec6ff4SXiaoDong Huang 585*e3ec6ff4SXiaoDong Huang #define pmu_bus_idle_ack(id) \ 586*e3ec6ff4SXiaoDong Huang (!!(mmio_read_32(PMU_BASE + PMU2_BUS_IDLE_ACK((id) / 32)) & BIT((id) % 32))) 587*e3ec6ff4SXiaoDong Huang 588*e3ec6ff4SXiaoDong Huang void pm_pll_wait_lock(uint32_t pll_base); 589*e3ec6ff4SXiaoDong Huang #endif /* __PMU_H__ */ 590