1*036935a8SXiaoDong Huang /* SPDX-License-Identifier: BSD-3-Clause */ 2*036935a8SXiaoDong Huang /* 3*036935a8SXiaoDong Huang * Copyright (c) 2025, Rockchip Electronics Co., Ltd. 4*036935a8SXiaoDong Huang */ 5*036935a8SXiaoDong Huang 6*036935a8SXiaoDong Huang #ifndef __PMU_H__ 7*036935a8SXiaoDong Huang #define __PMU_H__ 8*036935a8SXiaoDong Huang 9*036935a8SXiaoDong Huang #include <assert.h> 10*036935a8SXiaoDong Huang 11*036935a8SXiaoDong Huang #include <mmio.h> 12*036935a8SXiaoDong Huang 13*036935a8SXiaoDong Huang /* PMU */ 14*036935a8SXiaoDong Huang #define PMU1_OFFSET 0x10000 15*036935a8SXiaoDong Huang #define PMU2_OFFSET 0x20000 16*036935a8SXiaoDong Huang 17*036935a8SXiaoDong Huang #define PMU0_PWR_CON 0x0000 18*036935a8SXiaoDong Huang #define PMU0_PWR_STATUS 0x0004 19*036935a8SXiaoDong Huang #define PMU0_WAKEUP_INT_CON 0x0008 20*036935a8SXiaoDong Huang #define PMU0_WAKEUP_INT_ST 0x000c 21*036935a8SXiaoDong Huang #define PMU0_PMIC_STABLE_CNT_THRES 0x0010 22*036935a8SXiaoDong Huang #define PMU0_WAKEUP_RST_CLR_CNT_THRES 0x0014 23*036935a8SXiaoDong Huang #define PMU0_OSC_STABLE_CNT_THRES 0x0018 24*036935a8SXiaoDong Huang #define PMU0_PWR_C0_STABLE_CON 0x001c 25*036935a8SXiaoDong Huang #define PMU0_DDR_RET_CON(i) (0x0020 + (i) * 4) 26*036935a8SXiaoDong Huang #define PMU0_INFO_TX_CON 0x0030 27*036935a8SXiaoDong Huang 28*036935a8SXiaoDong Huang #define PMU1_VERSION_ID (PMU1_OFFSET + 0x0000) 29*036935a8SXiaoDong Huang #define PMU1_PWR_CON (PMU1_OFFSET + 0x0004) 30*036935a8SXiaoDong Huang #define PMU1_PWR_FSM (PMU1_OFFSET + 0x0008) 31*036935a8SXiaoDong Huang #define PMU1_INT_MASK_CON (PMU1_OFFSET + 0x000c) 32*036935a8SXiaoDong Huang #define PMU1_WAKEUP_INT_CON (PMU1_OFFSET + 0x0010) 33*036935a8SXiaoDong Huang #define PMU1_WAKEUP_INT_ST (PMU1_OFFSET + 0x0014) 34*036935a8SXiaoDong Huang #define PMU1_DDR_PWR_CON(i) (PMU1_OFFSET + 0x0100 + (i) * 4) 35*036935a8SXiaoDong Huang #define PMU1_DDR_PWR_SFTCON(i) (PMU1_OFFSET + 0x0110 + (i) * 4) 36*036935a8SXiaoDong Huang #define PMU1_DDR_AXIPWR_CON(i) (PMU1_OFFSET + 0x0120 + (i) * 4) 37*036935a8SXiaoDong Huang #define PMU1_DDR_AXIPWR_SFTCON(i) (PMU1_OFFSET + 0x0130 + (i) * 4) 38*036935a8SXiaoDong Huang #define PMU1_DDR_PWR_FSM (PMU1_OFFSET + 0x0140) 39*036935a8SXiaoDong Huang #define PMU1_DDR_PWR_ST (PMU1_OFFSET + 0x0144) 40*036935a8SXiaoDong Huang #define PMU1_DDR_AXIPWR_ST (PMU1_OFFSET + 0x0148) 41*036935a8SXiaoDong Huang #define PMU1_CRU_PWR_CON(i) (PMU1_OFFSET + 0x0200 + (i) * 4) 42*036935a8SXiaoDong Huang #define PMU1_CRU_PWR_SFTCON(i) (PMU1_OFFSET + 0x0208 + (i) * 4) 43*036935a8SXiaoDong Huang #define PMU1_CRU_PWR_FSM (PMU1_OFFSET + 0x0210) 44*036935a8SXiaoDong Huang #define PMU1_PLLPD_CON(i) (PMU1_OFFSET + 0x0220 + (i) * 4) 45*036935a8SXiaoDong Huang #define PMU1_PLLPD_SFTCON(i) (PMU1_OFFSET + 0x0228 + (i) * 4) 46*036935a8SXiaoDong Huang #define PMU1_STABLE_CNT_THRESH (PMU1_OFFSET + 0x0300) 47*036935a8SXiaoDong Huang #define PMU1_OSC_STABLE_CNT_THRESH (PMU1_OFFSET + 0x0304) 48*036935a8SXiaoDong Huang #define PMU1_WAKEUP_RST_CLR_CNT_THRESH (PMU1_OFFSET + 0x0308) 49*036935a8SXiaoDong Huang #define PMU1_PLL_LOCK_CNT_THRESH (PMU1_OFFSET + 0x030c) 50*036935a8SXiaoDong Huang #define PMU1_WAKEUP_TIMEOUT_THRESH (PMU1_OFFSET + 0x0310) 51*036935a8SXiaoDong Huang #define PMU1_PWM_SWITCH_CNT_THRESH (PMU1_OFFSET + 0x0314) 52*036935a8SXiaoDong Huang #define PMU1_SLEEP_CNT_THRESH (PMU1_OFFSET + 0x0318) 53*036935a8SXiaoDong Huang #define PMU1_INFO_TX_CON (PMU1_OFFSET + 0x0400) 54*036935a8SXiaoDong Huang 55*036935a8SXiaoDong Huang #define PMU2_SCU0_PWR_CON (PMU2_OFFSET + 0x0000) 56*036935a8SXiaoDong Huang #define PMU2_SCU1_PWR_CON (PMU2_OFFSET + 0x0004) 57*036935a8SXiaoDong Huang #define PMU2_SCU0_PWR_SFTCON (PMU2_OFFSET + 0x0008) 58*036935a8SXiaoDong Huang #define PMU2_SCU1_PWR_SFTCON (PMU2_OFFSET + 0x000c) 59*036935a8SXiaoDong Huang #define PMU2_SCU0_AUTO_PWR_CON (PMU2_OFFSET + 0x0010) 60*036935a8SXiaoDong Huang #define PMU2_SCU1_AUTO_PWR_CON (PMU2_OFFSET + 0x0014) 61*036935a8SXiaoDong Huang #define PMU2_SCU_PWR_FSM_STATUS (PMU2_OFFSET + 0x0018) 62*036935a8SXiaoDong Huang #define PMU2_DBG_PWR_CON(i) (PMU2_OFFSET + 0x001c + (i) * 4) 63*036935a8SXiaoDong Huang #define PMU2_CLUSTER_PWR_ST (PMU2_OFFSET + 0x0024) 64*036935a8SXiaoDong Huang #define PMU2_CLUSTER0_IDLE_CON (PMU2_OFFSET + 0x0028) 65*036935a8SXiaoDong Huang #define PMU2_CLUSTER1_IDLE_CON (PMU2_OFFSET + 0x002c) 66*036935a8SXiaoDong Huang #define PMU2_CLUSTER0_IDLE_SFTCON (PMU2_OFFSET + 0x0030) 67*036935a8SXiaoDong Huang #define PMU2_CLUSTER1_IDLE_SFTCON (PMU2_OFFSET + 0x0034) 68*036935a8SXiaoDong Huang #define PMU2_CLUSTER_IDLE_ACK (PMU2_OFFSET + 0x0038) 69*036935a8SXiaoDong Huang #define PMU2_CLUSTER_IDLE_ST (PMU2_OFFSET + 0x003c) 70*036935a8SXiaoDong Huang #define PMU2_SCU0_PWRUP_CNT_THRESH (PMU2_OFFSET + 0x0040) 71*036935a8SXiaoDong Huang #define PMU2_SCU0_PWRDN_CNT_THRESH (PMU2_OFFSET + 0x0044) 72*036935a8SXiaoDong Huang #define PMU2_SCU0_STABLE_CNT_THRESH (PMU2_OFFSET + 0x0048) 73*036935a8SXiaoDong Huang #define PMU2_SCU1_PWRUP_CNT_THRESH (PMU2_OFFSET + 0x004c) 74*036935a8SXiaoDong Huang #define PMU2_SCU1_PWRDN_CNT_THRESH (PMU2_OFFSET + 0x0050) 75*036935a8SXiaoDong Huang #define PMU2_SCU1_STABLE_CNT_THRESH (PMU2_OFFSET + 0x0054) 76*036935a8SXiaoDong Huang #define PMU2_CPU_AUTO_PWR_CON(i) (PMU2_OFFSET + 0x0080 + ((i)) * 4) 77*036935a8SXiaoDong Huang #define PMU2_CPU_PWR_SFTCON(i) (PMU2_OFFSET + 0x00a0 + ((i)) * 4) 78*036935a8SXiaoDong Huang #define PMU2_CCI_PWR_CON (PMU2_OFFSET + 0x00e0) 79*036935a8SXiaoDong Huang #define PMU2_CCI_PWR_SFTCON (PMU2_OFFSET + 0x00e4) 80*036935a8SXiaoDong Huang #define PMU2_CCI_PWR_ST (PMU2_OFFSET + 0x00e8) 81*036935a8SXiaoDong Huang #define PMU2_CCI_POWER_STATE (PMU2_OFFSET + 0x00ec) 82*036935a8SXiaoDong Huang #define PMU2_BUS_IDLE_CON(i) (PMU2_OFFSET + 0x0100 + (i) * 4) 83*036935a8SXiaoDong Huang #define PMU2_BUS_IDLE_SFTCON(i) (PMU2_OFFSET + 0x0110 + (i) * 4) 84*036935a8SXiaoDong Huang #define PMU2_BUS_IDLE_ACK (PMU2_OFFSET + 0x0120) 85*036935a8SXiaoDong Huang #define PMU2_BUS_IDLE_ST (PMU2_OFFSET + 0x0128) 86*036935a8SXiaoDong Huang #define PMU2_NOC_AUTO_CON(i) (PMU2_OFFSET + 0x0130 + (i) * 4) 87*036935a8SXiaoDong Huang #define PMU2_NOC_AUTO_SFTCON(i) (PMU2_OFFSET + 0x0140 + (i) * 4) 88*036935a8SXiaoDong Huang #define PMU2_BUS_IDLEACK_BYPASS_CON (PMU2_OFFSET + 0x0150) 89*036935a8SXiaoDong Huang #define PMU2_PWR_GATE_CON(i) (PMU2_OFFSET + 0x0200 + (i) * 4) 90*036935a8SXiaoDong Huang #define PMU2_PWR_GATE_SFTCON(i) (PMU2_OFFSET + 0x0210 + (i) * 4) 91*036935a8SXiaoDong Huang #define PMU2_VOL_GATE_SFTCON(i) (PMU2_OFFSET + 0x0220 + (i) * 4) 92*036935a8SXiaoDong Huang #define PMU2_PWR_GATE_ST (PMU2_OFFSET + 0x0230) 93*036935a8SXiaoDong Huang #define PMU2_PWR_GATE_FSM (PMU2_OFFSET + 0x0238) 94*036935a8SXiaoDong Huang #define PMU2_PD_DWN_ACK_STATE(i) (PMU2_OFFSET + 0x0240 + (i) * 4) 95*036935a8SXiaoDong Huang #define PMU2_PD_DWN_LC_ACK_STATE(i) (PMU2_OFFSET + 0x0248 + (i) * 4) 96*036935a8SXiaoDong Huang #define PMU2_PD_DWN_MEM_ACK_STATE(i) (PMU2_OFFSET + 0x0250 + (i) * 4) 97*036935a8SXiaoDong Huang #define PMU2_PWR_UP_C0_STABLE_CON(i) (PMU2_OFFSET + 0x0260 + (i) * 4) 98*036935a8SXiaoDong Huang #define PMU2_PWR_DWN_C0_STABLE_CON(i) (PMU2_OFFSET + 0x0270 + (i) * 4) 99*036935a8SXiaoDong Huang #define PMU2_PWR_STABLE_C0_CNT_THRES (PMU2_OFFSET + 0x027c) 100*036935a8SXiaoDong Huang #define PMU2_FAST_POWER_CON (PMU2_OFFSET + 0x0284) 101*036935a8SXiaoDong Huang #define PMU2_FAST_PWRUP_CNT_THRESH_0 (PMU2_OFFSET + 0x0288) 102*036935a8SXiaoDong Huang #define PMU2_FAST_PWRDN_CNT_THRESH_0 (PMU2_OFFSET + 0x028c) 103*036935a8SXiaoDong Huang #define PMU2_FAST_PWRUP_CNT_THRESH_1 (PMU2_OFFSET + 0x0290) 104*036935a8SXiaoDong Huang #define PMU2_FAST_PWRDN_CNT_THRESH_1 (PMU2_OFFSET + 0x0294) 105*036935a8SXiaoDong Huang #define PMU2_FAST_PWRUP_CNT_THRESH_2 (PMU2_OFFSET + 0x0298) 106*036935a8SXiaoDong Huang #define PMU2_FAST_PWRDN_CNT_THRESH_2 (PMU2_OFFSET + 0x029c) 107*036935a8SXiaoDong Huang #define PMU2_MEM_PWR_GATE_SFTCON(i) (PMU2_OFFSET + 0x0300) 108*036935a8SXiaoDong Huang #define PMU2_SUBMEM_PWR_GATE_SFTCON(i) (PMU2_OFFSET + 0x0310) 109*036935a8SXiaoDong Huang #define PMU2_SUBMEM_PWR_ACK_BYPASS_SFTCON(i) (PMU2_OFFSET + 0x0320) 110*036935a8SXiaoDong Huang #define PMU2_SUBMEM_PWR_GATE_STATUS (PMU2_OFFSET + 0x0328) 111*036935a8SXiaoDong Huang #define PMU2_QCHANNEL_PWR_CON0 (PMU2_OFFSET + 0x0400) 112*036935a8SXiaoDong Huang #define PMU2_QCHANNEL_PWR_SFTCON0 (PMU2_OFFSET + 0x0404) 113*036935a8SXiaoDong Huang #define PMU2_QCHANNEL_STATUS0 (PMU2_OFFSET + 0x0408) 114*036935a8SXiaoDong Huang #define PMU2_C0_PWRACK_BYPASS_CON(i) (PMU2_OFFSET + 0x0380 + (i) * 4) 115*036935a8SXiaoDong Huang #define PMU2_C1_PWRACK_BYPASS_CON(i) (PMU2_OFFSET + 0x0390 + (i) * 4) 116*036935a8SXiaoDong Huang #define PMU2_C2_PWRACK_BYPASS_CON(i) (PMU2_OFFSET + 0x03a0 + (i) * 4) 117*036935a8SXiaoDong Huang #define PMU2_DEBUG_INFO_SEL (PMU2_OFFSET + 0x03f0) 118*036935a8SXiaoDong Huang #define PMU2_BISR_GLB_CON (PMU2_OFFSET + 0x500) 119*036935a8SXiaoDong Huang #define PMU2_BISR_TIMEOUT_THRES (PMU2_OFFSET + 0x504) 120*036935a8SXiaoDong Huang #define PMU2_BISR_PDGEN_CON(i) (PMU2_OFFSET + 0x510 + (i) * 4) 121*036935a8SXiaoDong Huang #define PMU2_BISR_PDGEN_SFTCON(i) (PMU2_OFFSET + 0x520 + (i) * 4) 122*036935a8SXiaoDong Huang #define PMU2_BISR_PDGDONE_CON(i) (PMU2_OFFSET + 0x530 + (i) * 4) 123*036935a8SXiaoDong Huang #define PMU2_BISR_PDGINIT_CON(i) (PMU2_OFFSET + 0x540 + (i) * 4) 124*036935a8SXiaoDong Huang #define PMU2_BISR_PDGDONE_STATUS(i) (PMU2_OFFSET + 0x550 + (i) * 4) 125*036935a8SXiaoDong Huang #define PMU2_BISR_PDGCEDIS_STATUS(i) (PMU2_OFFSET + 0x560 + (i) * 4) 126*036935a8SXiaoDong Huang #define PMU2_BISR_PWR_REPAIR_STATUS(i) (PMU2_OFFSET + 0x570 + (i) * 4) 127*036935a8SXiaoDong Huang 128*036935a8SXiaoDong Huang /* PMU1CRU */ 129*036935a8SXiaoDong Huang #define PMU1CRU_CLKSEL_CON(i) ((i) * 0x4 + 0x300) 130*036935a8SXiaoDong Huang #define PMU1CRU_CLKSEL_CON_CNT 22 131*036935a8SXiaoDong Huang #define PMU1CRU_CLKGATE_CON(i) ((i) * 0x4 + 0x800) 132*036935a8SXiaoDong Huang #define PMU1CRU_CLKGATE_CON_CNT 8 133*036935a8SXiaoDong Huang #define PMU1CRU_SOFTRST_CON(i) ((i) * 0x4 + 0xa00) 134*036935a8SXiaoDong Huang #define PMU1CRU_SOFTRST_CON_CNT 8 135*036935a8SXiaoDong Huang #define PMU1CRU_DEEPSLOW_DET_CON 0xb40 136*036935a8SXiaoDong Huang #define PMU1CRU_DEEPSLOW_DET_ST 0xb44 137*036935a8SXiaoDong Huang 138*036935a8SXiaoDong Huang /* PMU1SCRU */ 139*036935a8SXiaoDong Huang #define PMU1SCRU_CLKSEL_CON(i) ((i) * 0x4 + 0x4000) 140*036935a8SXiaoDong Huang #define PMU1SCRU_CLKSEL_CON_CNT 3 141*036935a8SXiaoDong Huang #define PMU1SCRU_CLKGATE_CON(i) ((i) * 0x4 + 0x4028) 142*036935a8SXiaoDong Huang #define PMU1SCRU_CLKGATE_CON_CNT 3 143*036935a8SXiaoDong Huang #define PMU1SCRU_SOFTRST_CON(i) ((i) * 0x4 + 0x4050) 144*036935a8SXiaoDong Huang #define PMU1SCRU_SOFTRST_CONCNT 3 145*036935a8SXiaoDong Huang 146*036935a8SXiaoDong Huang /* PMU0GRF */ 147*036935a8SXiaoDong Huang #define PMU0GRF_SOC_CON(i) ((i) * 4) 148*036935a8SXiaoDong Huang #define PMU0GRF_IO_RET_CON(i) (0x20 + (i) * 4) 149*036935a8SXiaoDong Huang #define PMU0GRF_OS_REG(i) ((i) * 4) 150*036935a8SXiaoDong Huang 151*036935a8SXiaoDong Huang /* PMU1GRF */ 152*036935a8SXiaoDong Huang #define PMU1GRF_SOC_CON(i) ((i) * 4) 153*036935a8SXiaoDong Huang #define PMU1GRF_SOC_ST 0x60 154*036935a8SXiaoDong Huang #define PMU1GRF_MEM_CON(i) (0x80 + (i) * 4) 155*036935a8SXiaoDong Huang #define PMU1GRF_OS_REG(i) (0x200 + (i) * 4) 156*036935a8SXiaoDong Huang 157*036935a8SXiaoDong Huang #define PMU_MCU_HALT BIT(7) 158*036935a8SXiaoDong Huang #define PMU_MCU_SLEEP BIT(9) 159*036935a8SXiaoDong Huang #define PMU_MCU_DEEPSLEEP BIT(10) 160*036935a8SXiaoDong Huang #define PMU_MCU_STOP_MSK \ 161*036935a8SXiaoDong Huang (PMU_MCU_HALT | PMU_MCU_SLEEP | PMU_MCU_DEEPSLEEP) 162*036935a8SXiaoDong Huang 163*036935a8SXiaoDong Huang #define CORES_PM_DISABLE 0x0 164*036935a8SXiaoDong Huang 165*036935a8SXiaoDong Huang /* pmuioc */ 166*036935a8SXiaoDong Huang #define PMUIO0_IOC_GPIO0A_IOMUX_SEL_L 0x000 167*036935a8SXiaoDong Huang #define PMUIO0_IOC_GPIO0A_IOMUX_SEL_H 0x004 168*036935a8SXiaoDong Huang #define PMUIO0_IOC_GPIO0B_IOMUX_SEL_L 0x008 169*036935a8SXiaoDong Huang 170*036935a8SXiaoDong Huang #define PMUIO1_IOC_GPIO0B_IOMUX_SEL_H 0x000 171*036935a8SXiaoDong Huang #define PMUIO1_IOC_GPIO0C_IOMUX_SEL_L 0x004 172*036935a8SXiaoDong Huang #define PMUIO1_IOC_GPIO0C_IOMUX_SEL_H 0x008 173*036935a8SXiaoDong Huang #define PMUIO1_IOC_GPIO0D_IOMUX_SEL_L 0x00c 174*036935a8SXiaoDong Huang #define PMUIO1_IOC_GPIO0D_IOMUX_SEL_H 0x010 175*036935a8SXiaoDong Huang 176*036935a8SXiaoDong Huang /* PMU_PWR_CON */ 177*036935a8SXiaoDong Huang enum pmu0_pwr_con { 178*036935a8SXiaoDong Huang pmu_powermode0_en = 0, 179*036935a8SXiaoDong Huang pmu_pmu1_pd_byp = 1, 180*036935a8SXiaoDong Huang pmu_pmu1_bus_byp = 2, 181*036935a8SXiaoDong Huang pmu_pmu0_wkup_byp = 3, 182*036935a8SXiaoDong Huang pmu_pmu0_pmic_byp = 4, 183*036935a8SXiaoDong Huang pmu_pmu0_reset_byp = 5, 184*036935a8SXiaoDong Huang pmu_pmu0_freq_switch_byp = 6, 185*036935a8SXiaoDong Huang pmu_pmu0_osc_dis_byp = 7, 186*036935a8SXiaoDong Huang pmu_pmu1_pwrgt = 8, 187*036935a8SXiaoDong Huang pmu_pmu1_pwrgt_sft = 9, 188*036935a8SXiaoDong Huang pmu_pmu1_mempwr_sft_gt = 10, 189*036935a8SXiaoDong Huang pmu_pmu1_idle_en = 11, 190*036935a8SXiaoDong Huang pmu_pmu1_idle_sft_en = 12, 191*036935a8SXiaoDong Huang pmu_pmu1_noc_auto_en = 13, 192*036935a8SXiaoDong Huang pmu_pmu1_off_io_en = 14, 193*036935a8SXiaoDong Huang }; 194*036935a8SXiaoDong Huang 195*036935a8SXiaoDong Huang enum pmu1_pwr_con { 196*036935a8SXiaoDong Huang pmu_powermode_en = 0, 197*036935a8SXiaoDong Huang pmu_scu0_byp = 1, 198*036935a8SXiaoDong Huang pmu_scu1_byp = 2, 199*036935a8SXiaoDong Huang pmu_cci_byp = 3, 200*036935a8SXiaoDong Huang pmu_bus_byp = 4, 201*036935a8SXiaoDong Huang pmu_ddr_byp = 5, 202*036935a8SXiaoDong Huang pmu_pwrgt_byp = 6, 203*036935a8SXiaoDong Huang pmu_cru_byp = 7, 204*036935a8SXiaoDong Huang pmu_qch_byp = 8, 205*036935a8SXiaoDong Huang pmu_wfi_byp = 12, 206*036935a8SXiaoDong Huang pmu_slp_cnt_en = 13, 207*036935a8SXiaoDong Huang }; 208*036935a8SXiaoDong Huang 209*036935a8SXiaoDong Huang enum pmu_wakeup_int { 210*036935a8SXiaoDong Huang pmu_wkup_cpu0_int = 0, 211*036935a8SXiaoDong Huang pmu_wkup_cpu1_int = 1, 212*036935a8SXiaoDong Huang pmu_wkup_cpu2_int = 2, 213*036935a8SXiaoDong Huang pmu_wkup_cpu3_int = 3, 214*036935a8SXiaoDong Huang pmu_wkup_cpu4_int = 4, 215*036935a8SXiaoDong Huang pmu_wkup_cpu5_int = 5, 216*036935a8SXiaoDong Huang pmu_wkup_cpu6_int = 6, 217*036935a8SXiaoDong Huang pmu_wkup_cpu7_int = 7, 218*036935a8SXiaoDong Huang pmu_wkup_gpio0_int = 8, 219*036935a8SXiaoDong Huang pmu_wkup_sdmmc_int = 9, 220*036935a8SXiaoDong Huang pmu_wkup_sdio_int = 10, 221*036935a8SXiaoDong Huang pmu_wkup_usbdev_int = 11, 222*036935a8SXiaoDong Huang pmu_wkup_uart_int = 12, 223*036935a8SXiaoDong Huang pmu_wkup_mcu_int = 13, 224*036935a8SXiaoDong Huang pmu_wkup_timer_int = 14, 225*036935a8SXiaoDong Huang pmu_wkup_sys_int = 15, 226*036935a8SXiaoDong Huang pmu_wkup_pwm_int = 16, 227*036935a8SXiaoDong Huang pmu_wkup_tsadc_int = 17, 228*036935a8SXiaoDong Huang pmu_wkup_hptimer_int = 18, 229*036935a8SXiaoDong Huang pmu_wkup_saradc_int = 19, 230*036935a8SXiaoDong Huang pmu_wkup_timeout = 20, 231*036935a8SXiaoDong Huang }; 232*036935a8SXiaoDong Huang 233*036935a8SXiaoDong Huang /* PMU_DDR_PWR_CON */ 234*036935a8SXiaoDong Huang enum pmu_ddr_pwr_con { 235*036935a8SXiaoDong Huang pmu_ddr_sref_c_en = 0, 236*036935a8SXiaoDong Huang pmu_ddr_ioret_en = 1, 237*036935a8SXiaoDong Huang pmu_ddr_ioret_exit_en = 2, 238*036935a8SXiaoDong Huang pmu_ddr_rstiov_en = 3, 239*036935a8SXiaoDong Huang pmu_ddr_rstiov_exit_en = 4, 240*036935a8SXiaoDong Huang pmu_ddr_gating_c_en = 5, 241*036935a8SXiaoDong Huang pmu_ddr_gating_p_en = 6, 242*036935a8SXiaoDong Huang }; 243*036935a8SXiaoDong Huang 244*036935a8SXiaoDong Huang /* PMU_CRU_PWR_CON0 */ 245*036935a8SXiaoDong Huang enum pmu_cru_pwr_con0 { 246*036935a8SXiaoDong Huang pmu_alive_32k_en = 0, 247*036935a8SXiaoDong Huang pmu_osc_dis_en = 1, 248*036935a8SXiaoDong Huang pmu_wakeup_rst_en = 2, 249*036935a8SXiaoDong Huang pmu_input_clamp_en = 3, 250*036935a8SXiaoDong Huang pmu_alive_osc_mode_en = 4, 251*036935a8SXiaoDong Huang pmu_power_off_en = 5, 252*036935a8SXiaoDong Huang pmu_pwm_switch_en = 6, 253*036935a8SXiaoDong Huang pmu_pwm_gpio_ioe_en = 7, 254*036935a8SXiaoDong Huang pmu_pwm_switch_io = 8, 255*036935a8SXiaoDong Huang pmu_io_sleep_en = 9, 256*036935a8SXiaoDong Huang }; 257*036935a8SXiaoDong Huang 258*036935a8SXiaoDong Huang /* PMU_CRU_PWR_CON1 */ 259*036935a8SXiaoDong Huang enum pmu_cru_pwr_con1 { 260*036935a8SXiaoDong Huang pmu_bus_clksrc_gt_en = 0, 261*036935a8SXiaoDong Huang pmu_vpu_clksrc_gt_en = 1, 262*036935a8SXiaoDong Huang pmu_vo_clksrc_gt_en = 2, 263*036935a8SXiaoDong Huang pmu_gpu_clksrc_gt_en = 3, 264*036935a8SXiaoDong Huang pmu_rkenc_clksrc_gt_en = 4, 265*036935a8SXiaoDong Huang pmu_rkvdec_clksrc_gt_en = 5, 266*036935a8SXiaoDong Huang pmu_core_clksrc_gt_en = 6, 267*036935a8SXiaoDong Huang pmu_ddr_clksrc_gt_en = 7, 268*036935a8SXiaoDong Huang }; 269*036935a8SXiaoDong Huang 270*036935a8SXiaoDong Huang /* PMU_SCU_PWR_CON */ 271*036935a8SXiaoDong Huang enum pmu_scu_pwr_con { 272*036935a8SXiaoDong Huang pmu_l2_flush_en = 0, 273*036935a8SXiaoDong Huang pmu_l2_ilde_en = 1, 274*036935a8SXiaoDong Huang pmu_scu_pd_en = 2, 275*036935a8SXiaoDong Huang pmu_scu_pwroff_en = 3, 276*036935a8SXiaoDong Huang pmu_clst_cpu_pd_en = 5, 277*036935a8SXiaoDong Huang pmu_std_wfi_bypass = 8, 278*036935a8SXiaoDong Huang pmu_std_wfil2_bypass = 9, 279*036935a8SXiaoDong Huang pmu_scu_vol_gt_en = 10, 280*036935a8SXiaoDong Huang }; 281*036935a8SXiaoDong Huang 282*036935a8SXiaoDong Huang /* PMU_PLLPD_CON */ 283*036935a8SXiaoDong Huang enum pmu_pllpd_con { 284*036935a8SXiaoDong Huang pmu_d0apll_pd_en = 0, 285*036935a8SXiaoDong Huang pmu_d0bpll_pd_en = 1, 286*036935a8SXiaoDong Huang pmu_d1apll_pd_en = 2, 287*036935a8SXiaoDong Huang pmu_d1bpll_pd_en = 3, 288*036935a8SXiaoDong Huang pmu_bpll_pd_en = 4, 289*036935a8SXiaoDong Huang pmu_lpll_pd_en = 5, 290*036935a8SXiaoDong Huang pmu_spll_pd_en = 6, 291*036935a8SXiaoDong Huang pmu_gpll_pd_en = 7, 292*036935a8SXiaoDong Huang pmu_cpll_pd_en = 8, 293*036935a8SXiaoDong Huang pmu_ppll_pd_en = 9, 294*036935a8SXiaoDong Huang pmu_aupll_pd_en = 10, 295*036935a8SXiaoDong Huang pmu_vpll_pd_en = 11, 296*036935a8SXiaoDong Huang }; 297*036935a8SXiaoDong Huang 298*036935a8SXiaoDong Huang /* PMU_CLST_PWR_ST */ 299*036935a8SXiaoDong Huang enum pmu_clst_pwr_st { 300*036935a8SXiaoDong Huang pmu_cpu0_wfi = 0, 301*036935a8SXiaoDong Huang pmu_cpu1_wfi = 1, 302*036935a8SXiaoDong Huang pmu_cpu2_wfi = 2, 303*036935a8SXiaoDong Huang pmu_cpu3_wfi = 3, 304*036935a8SXiaoDong Huang pmu_cpu4_wfi = 4, 305*036935a8SXiaoDong Huang pmu_cpu5_wfi = 5, 306*036935a8SXiaoDong Huang pmu_cpu6_wfi = 6, 307*036935a8SXiaoDong Huang pmu_cpu7_wfi = 7, 308*036935a8SXiaoDong Huang pmu_scu0_standbywfil2 = 8, 309*036935a8SXiaoDong Huang pmu_scu1_standbywfil2 = 9, 310*036935a8SXiaoDong Huang pmu_scu0_l2flushdone = 10, 311*036935a8SXiaoDong Huang pmu_scu1_l2flushdone = 11, 312*036935a8SXiaoDong Huang pmu_cpu0_pd_st = 16, 313*036935a8SXiaoDong Huang pmu_cpu1_pd_st = 17, 314*036935a8SXiaoDong Huang pmu_cpu2_pd_st = 18, 315*036935a8SXiaoDong Huang pmu_cpu3_pd_st = 19, 316*036935a8SXiaoDong Huang pmu_cpu4_pd_st = 20, 317*036935a8SXiaoDong Huang pmu_cpu5_pd_st = 21, 318*036935a8SXiaoDong Huang pmu_cpu6_pd_st = 22, 319*036935a8SXiaoDong Huang pmu_cpu7_pd_st = 23, 320*036935a8SXiaoDong Huang pmu_scu0_pd_st = 24, 321*036935a8SXiaoDong Huang pmu_scu1_pd_st = 25, 322*036935a8SXiaoDong Huang }; 323*036935a8SXiaoDong Huang 324*036935a8SXiaoDong Huang /* PMU_CLST_IDLE_CON */ 325*036935a8SXiaoDong Huang enum pmu_clst_idle_con { 326*036935a8SXiaoDong Huang pmu_adb400s_idle_req = 0, 327*036935a8SXiaoDong Huang pmu_clst_biu_idle_req = 1, 328*036935a8SXiaoDong Huang pmu_clst_clk_gt_msk = 2, 329*036935a8SXiaoDong Huang }; 330*036935a8SXiaoDong Huang 331*036935a8SXiaoDong Huang enum cores_pm_ctr_mode { 332*036935a8SXiaoDong Huang core_pwr_pd = 0, 333*036935a8SXiaoDong Huang core_pwr_wfi = 1, 334*036935a8SXiaoDong Huang core_pwr_wfi_int = 2, 335*036935a8SXiaoDong Huang core_pwr_wfi_reset = 3, 336*036935a8SXiaoDong Huang }; 337*036935a8SXiaoDong Huang 338*036935a8SXiaoDong Huang /* PMU_CPUX_AUTO_PWR_CON */ 339*036935a8SXiaoDong Huang enum pmu_cpu_auto_pwr_con { 340*036935a8SXiaoDong Huang pmu_cpu_pm_en = 0, 341*036935a8SXiaoDong Huang pmu_cpu_pm_int_wakeup_en = 1, 342*036935a8SXiaoDong Huang pmu_cpu_pm_dis_int = 2, 343*036935a8SXiaoDong Huang pmu_cpu_pm_sft_wakeup_en = 3, 344*036935a8SXiaoDong Huang }; 345*036935a8SXiaoDong Huang 346*036935a8SXiaoDong Huang enum qos_id { 347*036935a8SXiaoDong Huang qos_decom = 0, 348*036935a8SXiaoDong Huang qos_dmac0 = 1, 349*036935a8SXiaoDong Huang qos_dmac1 = 2, 350*036935a8SXiaoDong Huang qos_dmac2 = 3, 351*036935a8SXiaoDong Huang qos_bus_mcu = 4, 352*036935a8SXiaoDong Huang qos_can0 = 5, 353*036935a8SXiaoDong Huang qos_can1 = 6, 354*036935a8SXiaoDong Huang qos_cci_m0 = 7, 355*036935a8SXiaoDong Huang qos_cci_m1 = 8, 356*036935a8SXiaoDong Huang qos_cci_m2 = 9, 357*036935a8SXiaoDong Huang qos_dap_lite = 10, 358*036935a8SXiaoDong Huang qos_hdcp1 = 11, 359*036935a8SXiaoDong Huang qos_ddr_mcu = 12, 360*036935a8SXiaoDong Huang qos_fspi1 = 13, 361*036935a8SXiaoDong Huang qos_gmac0 = 14, 362*036935a8SXiaoDong Huang qos_gmac1 = 15, 363*036935a8SXiaoDong Huang qos_sdio = 16, 364*036935a8SXiaoDong Huang qos_sdmmc = 17, 365*036935a8SXiaoDong Huang qos_flexbus = 18, 366*036935a8SXiaoDong Huang qos_gpu = 19, 367*036935a8SXiaoDong Huang qos_vepu1 = 20, 368*036935a8SXiaoDong Huang qos_npu_mcu = 21, 369*036935a8SXiaoDong Huang qos_npu_nsp0 = 22, 370*036935a8SXiaoDong Huang qos_npu_nsp1 = 23, 371*036935a8SXiaoDong Huang qos_npu_m0 = 24, 372*036935a8SXiaoDong Huang qos_npu_m1 = 25, 373*036935a8SXiaoDong Huang qos_npu_m0ro = 26, 374*036935a8SXiaoDong Huang qos_npu_m1ro = 27, 375*036935a8SXiaoDong Huang qos_emmc = 28, 376*036935a8SXiaoDong Huang qos_fspi0 = 29, 377*036935a8SXiaoDong Huang qos_mmu0 = 30, 378*036935a8SXiaoDong Huang qos_mmu1 = 31, 379*036935a8SXiaoDong Huang qos_pmu_mcu = 32, 380*036935a8SXiaoDong Huang qos_rkvdec = 33, 381*036935a8SXiaoDong Huang qos_crypto = 34, 382*036935a8SXiaoDong Huang qos_mmu2 = 35, 383*036935a8SXiaoDong Huang qos_ufshc = 36, 384*036935a8SXiaoDong Huang qos_vepu0 = 37, 385*036935a8SXiaoDong Huang qos_isp_mro = 38, 386*036935a8SXiaoDong Huang qos_isp_mwo = 39, 387*036935a8SXiaoDong Huang qos_vicap_m0 = 40, 388*036935a8SXiaoDong Huang qos_vpss_mro = 41, 389*036935a8SXiaoDong Huang qos_vpss_mwo = 42, 390*036935a8SXiaoDong Huang qos_hdcp0 = 43, 391*036935a8SXiaoDong Huang qos_vop_m0 = 44, 392*036935a8SXiaoDong Huang qos_vop_m1ro = 45, 393*036935a8SXiaoDong Huang qos_ebc = 46, 394*036935a8SXiaoDong Huang qos_rga0 = 47, 395*036935a8SXiaoDong Huang qos_rga1 = 48, 396*036935a8SXiaoDong Huang qos_jpeg = 49, 397*036935a8SXiaoDong Huang qos_vdpp = 50, 398*036935a8SXiaoDong Huang qos_dma2ddr = 51, 399*036935a8SXiaoDong Huang }; 400*036935a8SXiaoDong Huang 401*036935a8SXiaoDong Huang enum pmu_bus_id { 402*036935a8SXiaoDong Huang pmu_bus_id_gpu = 0, 403*036935a8SXiaoDong Huang pmu_bus_id_npu0 = 1, 404*036935a8SXiaoDong Huang pmu_bus_id_npu1 = 2, 405*036935a8SXiaoDong Huang pmu_bus_id_nputop = 3, 406*036935a8SXiaoDong Huang pmu_bus_id_npusys = 4, 407*036935a8SXiaoDong Huang pmu_bus_id_vpu = 5, 408*036935a8SXiaoDong Huang pmu_bus_id_vdec = 6, 409*036935a8SXiaoDong Huang pmu_bus_id_vepu0 = 7, 410*036935a8SXiaoDong Huang pmu_bus_id_vepu1 = 8, 411*036935a8SXiaoDong Huang pmu_bus_id_vi = 9, 412*036935a8SXiaoDong Huang pmu_bus_id_usb = 10, 413*036935a8SXiaoDong Huang pmu_bus_id_vo0 = 11, 414*036935a8SXiaoDong Huang pmu_bus_id_vo1 = 12, 415*036935a8SXiaoDong Huang pmu_bus_id_vop = 13, 416*036935a8SXiaoDong Huang pmu_bus_id_vop_nocddrsch = 14, 417*036935a8SXiaoDong Huang pmu_bus_id_php = 15, 418*036935a8SXiaoDong Huang pmu_bus_id_audio = 16, 419*036935a8SXiaoDong Huang pmu_bus_id_gmac = 17, 420*036935a8SXiaoDong Huang pmu_bus_id_nvm = 18, 421*036935a8SXiaoDong Huang pmu_bus_id_center_nocddrsch = 19, 422*036935a8SXiaoDong Huang pmu_bus_id_center_nocmain = 20, 423*036935a8SXiaoDong Huang pmu_bus_id_ddr = 21, 424*036935a8SXiaoDong Huang pmu_bus_id_ddrsch0 = 22, 425*036935a8SXiaoDong Huang pmu_bus_id_ddrsch1 = 23, 426*036935a8SXiaoDong Huang pmu_bus_id_bus = 24, 427*036935a8SXiaoDong Huang pmu_bus_id_secure = 25, 428*036935a8SXiaoDong Huang pmu_bus_id_top = 26, 429*036935a8SXiaoDong Huang pmu_bus_id_vo0vop_chn = 27, 430*036935a8SXiaoDong Huang pmu_bus_id_cci = 28, 431*036935a8SXiaoDong Huang pmu_bus_id_cci_nocddrsch = 29, 432*036935a8SXiaoDong Huang pmu_bus_id_max, 433*036935a8SXiaoDong Huang }; 434*036935a8SXiaoDong Huang 435*036935a8SXiaoDong Huang enum pmu_pd_id { 436*036935a8SXiaoDong Huang pmu_pd_npu = 0, 437*036935a8SXiaoDong Huang pmu_pd_bus = 1, 438*036935a8SXiaoDong Huang pmu_pd_secure = 2, 439*036935a8SXiaoDong Huang pmu_pd_center = 3, 440*036935a8SXiaoDong Huang pmu_pd_ddr = 4, 441*036935a8SXiaoDong Huang pmu_pd_cci = 5, 442*036935a8SXiaoDong Huang pmu_pd_nvm = 6, 443*036935a8SXiaoDong Huang pmu_pd_sd_gmac = 7, 444*036935a8SXiaoDong Huang pmu_pd_audio = 8, 445*036935a8SXiaoDong Huang pmu_pd_php = 9, 446*036935a8SXiaoDong Huang pmu_pd_subphp = 10, 447*036935a8SXiaoDong Huang pmu_pd_vop = 11, 448*036935a8SXiaoDong Huang pmu_pd_vop_smart = 12, 449*036935a8SXiaoDong Huang pmu_pd_vop_clst = 13, 450*036935a8SXiaoDong Huang pmu_pd_vo1 = 14, 451*036935a8SXiaoDong Huang pmu_pd_vo0 = 15, 452*036935a8SXiaoDong Huang pmu_pd_usb = 16, 453*036935a8SXiaoDong Huang pmu_pd_vi = 17, 454*036935a8SXiaoDong Huang pmu_pd_vepu0 = 18, 455*036935a8SXiaoDong Huang pmu_pd_vepu1 = 19, 456*036935a8SXiaoDong Huang pmu_pd_vdec = 20, 457*036935a8SXiaoDong Huang pmu_pd_vpu = 21, 458*036935a8SXiaoDong Huang pmu_pd_nputop = 22, 459*036935a8SXiaoDong Huang pmu_pd_npu0 = 23, 460*036935a8SXiaoDong Huang pmu_pd_npu1 = 24, 461*036935a8SXiaoDong Huang pmu_pd_gpu = 25, 462*036935a8SXiaoDong Huang pmu_pd_id_max, 463*036935a8SXiaoDong Huang }; 464*036935a8SXiaoDong Huang 465*036935a8SXiaoDong Huang enum pmu_vd_id { 466*036935a8SXiaoDong Huang pmu_vd_npu = 0, 467*036935a8SXiaoDong Huang pmu_vd_ddr = 1, 468*036935a8SXiaoDong Huang pmu_vd_cci = 2, 469*036935a8SXiaoDong Huang pmu_vd_gpu = 3, 470*036935a8SXiaoDong Huang }; 471*036935a8SXiaoDong Huang 472*036935a8SXiaoDong Huang enum pmu_bus_state { 473*036935a8SXiaoDong Huang pmu_bus_active = 0, 474*036935a8SXiaoDong Huang pmu_bus_idle = 1, 475*036935a8SXiaoDong Huang }; 476*036935a8SXiaoDong Huang 477*036935a8SXiaoDong Huang enum pmu_pd_state { 478*036935a8SXiaoDong Huang pmu_pd_on = 0, 479*036935a8SXiaoDong Huang pmu_pd_off = 1 480*036935a8SXiaoDong Huang }; 481*036935a8SXiaoDong Huang 482*036935a8SXiaoDong Huang enum pmu_scu_fsm_st { 483*036935a8SXiaoDong Huang pmu_scu_fsm_normal = 0, 484*036935a8SXiaoDong Huang pmu_scu_fsm_cpu_pwr_down = 1, 485*036935a8SXiaoDong Huang pmu_scu_fsm_l2_flush = 2, 486*036935a8SXiaoDong Huang pmu_scu_fsm_l2_idle = 3, 487*036935a8SXiaoDong Huang pmu_scu_fsm_clust_idle = 4, 488*036935a8SXiaoDong Huang pmu_scu_fsm_scu_pwr_down = 5, 489*036935a8SXiaoDong Huang pmu_scu_fsm_sleep = 6, 490*036935a8SXiaoDong Huang pmu_scu_fsm_wkup = 7, 491*036935a8SXiaoDong Huang pmu_scu_fsm_scu_pwr_up = 8, 492*036935a8SXiaoDong Huang pmu_scu_fsm_clust_resume = 9, 493*036935a8SXiaoDong Huang pmu_scu_fsm_cpu_pwr_up = 10, 494*036935a8SXiaoDong Huang }; 495*036935a8SXiaoDong Huang 496*036935a8SXiaoDong Huang #define MAX_MEM_OS_REG_NUM 32 497*036935a8SXiaoDong Huang #define MEM_OS_REG_BASE \ 498*036935a8SXiaoDong Huang (PMUSRAM_BASE + PMUSRAM_RSIZE - MAX_MEM_OS_REG_NUM * 4) 499*036935a8SXiaoDong Huang 500*036935a8SXiaoDong Huang #define PSRAM_SP_TOP MEM_OS_REG_BASE 501*036935a8SXiaoDong Huang 502*036935a8SXiaoDong Huang #define PD_CTR_LOOP 5000 503*036935a8SXiaoDong Huang #define WFEI_CHECK_LOOP 5000 504*036935a8SXiaoDong Huang #define BUS_IDLE_LOOP 1000 505*036935a8SXiaoDong Huang #define NONBOOT_CPUS_OFF_LOOP 500000 506*036935a8SXiaoDong Huang 507*036935a8SXiaoDong Huang #define REBOOT_FLAG 0x5242C300 508*036935a8SXiaoDong Huang #define BOOT_BROM_DOWNLOAD 0xef08a53c 509*036935a8SXiaoDong Huang 510*036935a8SXiaoDong Huang #define BOOTROM_SUSPEND_MAGIC 0x02468ace 511*036935a8SXiaoDong Huang #define BOOTROM_RESUME_MAGIC 0x13579bdf 512*036935a8SXiaoDong Huang #define WARM_BOOT_MAGIC 0x76543210 513*036935a8SXiaoDong Huang #define VALID_GLB_RST_MSK 0xbfff 514*036935a8SXiaoDong Huang 515*036935a8SXiaoDong Huang #define DEFAULT_BOOT_CPU 0 516*036935a8SXiaoDong Huang 517*036935a8SXiaoDong Huang /******************************************************* 518*036935a8SXiaoDong Huang * sleep mode define 519*036935a8SXiaoDong Huang *******************************************************/ 520*036935a8SXiaoDong Huang #define SLP_ARMPD BIT(0) 521*036935a8SXiaoDong Huang #define SLP_ARMOFF BIT(1) 522*036935a8SXiaoDong Huang #define SLP_ARMOFF_DDRPD BIT(2) 523*036935a8SXiaoDong Huang #define SLP_ARMOFF_LOGOFF BIT(3) 524*036935a8SXiaoDong Huang #define SLP_ARMOFF_PMUOFF BIT(4) 525*036935a8SXiaoDong Huang #define SLP_FROM_UBOOT BIT(5) 526*036935a8SXiaoDong Huang 527*036935a8SXiaoDong Huang /* all plls except ddr's pll*/ 528*036935a8SXiaoDong Huang #define SLP_PMU_HW_PLLS_PD BIT(8) 529*036935a8SXiaoDong Huang #define SLP_PMU_PMUALIVE_32K BIT(9) 530*036935a8SXiaoDong Huang #define SLP_PMU_DIS_OSC BIT(10) 531*036935a8SXiaoDong Huang 532*036935a8SXiaoDong Huang #define SLP_CLK_GT BIT(16) 533*036935a8SXiaoDong Huang #define SLP_PMIC_LP BIT(17) 534*036935a8SXiaoDong Huang 535*036935a8SXiaoDong Huang #define SLP_32K_EXT BIT(24) 536*036935a8SXiaoDong Huang #define SLP_TIME_OUT_WKUP BIT(25) 537*036935a8SXiaoDong Huang #define SLP_PMU_DBG BIT(26) 538*036935a8SXiaoDong Huang #define SLP_ARCH_TIMER_RESET BIT(27) 539*036935a8SXiaoDong Huang 540*036935a8SXiaoDong Huang #define PM_INVALID_GPIO 0xffff 541*036935a8SXiaoDong Huang #define MAX_GPIO_POWER_CFG_CNT 10 542*036935a8SXiaoDong Huang #define MAX_VIRTUAL_PWROFF_IRQ_CNT 20 543*036935a8SXiaoDong Huang 544*036935a8SXiaoDong Huang enum { 545*036935a8SXiaoDong Huang RK_PM_VIRT_PWROFF_EN = 0, 546*036935a8SXiaoDong Huang RK_PM_VIRT_PWROFF_IRQ_CFG = 1, 547*036935a8SXiaoDong Huang RK_PM_VIRT_PWROFF_MAX, 548*036935a8SXiaoDong Huang }; 549*036935a8SXiaoDong Huang 550*036935a8SXiaoDong Huang /* sleep pin */ 551*036935a8SXiaoDong Huang #define RKPM_SLEEP_PIN0_EN BIT(0) /* GPIO0_A3 */ 552*036935a8SXiaoDong Huang #define RKPM_SLEEP_PIN1_EN BIT(1) /* GPIO0_A4 */ 553*036935a8SXiaoDong Huang #define RKPM_SLEEP_PIN2_EN BIT(2) /* GPIO0_A5 */ 554*036935a8SXiaoDong Huang 555*036935a8SXiaoDong Huang #define RKPM_SLEEP_PIN0_ACT_LOW BIT(0) /* GPIO0_A3 */ 556*036935a8SXiaoDong Huang #define RKPM_SLEEP_PIN1_ACT_LOW BIT(1) /* GPIO0_A4 */ 557*036935a8SXiaoDong Huang #define RKPM_SLEEP_PIN2_ACT_LOW BIT(2) /* GPIO0_A5 */ 558*036935a8SXiaoDong Huang 559*036935a8SXiaoDong Huang #define pmu_bus_idle_st(id) \ 560*036935a8SXiaoDong Huang (!!(mmio_read_32(PMU_BASE + PMU2_BUS_IDLE_ST) & BIT(id))) 561*036935a8SXiaoDong Huang 562*036935a8SXiaoDong Huang #define pmu_bus_idle_ack(id) \ 563*036935a8SXiaoDong Huang (!!(mmio_read_32(PMU_BASE + PMU2_BUS_IDLE_ACK) & BIT(id))) 564*036935a8SXiaoDong Huang 565*036935a8SXiaoDong Huang static inline uint32_t read_mem_os_reg(uint32_t id) 566*036935a8SXiaoDong Huang { 567*036935a8SXiaoDong Huang assert((id) < MAX_MEM_OS_REG_NUM); 568*036935a8SXiaoDong Huang 569*036935a8SXiaoDong Huang return mmio_read_32(MEM_OS_REG_BASE + 4 * (id)); 570*036935a8SXiaoDong Huang } 571*036935a8SXiaoDong Huang 572*036935a8SXiaoDong Huang static inline void write_mem_os_reg(uint32_t id, uint32_t val) 573*036935a8SXiaoDong Huang { 574*036935a8SXiaoDong Huang assert((id) < MAX_MEM_OS_REG_NUM); 575*036935a8SXiaoDong Huang 576*036935a8SXiaoDong Huang mmio_write_32(MEM_OS_REG_BASE + 4 * (id), val); 577*036935a8SXiaoDong Huang } 578*036935a8SXiaoDong Huang #endif /* __PMU_H__ */ 579