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
read_mem_os_reg(uint32_t id)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
write_mem_os_reg(uint32_t id,uint32_t val)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