hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
/*
 * Copyright (c) 2023 Rockchip Electronics Co., Ltd.
 */
 
#ifndef __MACH_ROCKCHIP_RV1106_PM_H
#define __MACH_ROCKCHIP_RV1106_PM_H
 
#define RV1106_WAKEUP_TO_SYSTEM_RESET    0
#define RV1106_HPMCU_FAST_WKUP_TIMEOUT    2000 /* ms */
 
#define RV1106_PERIGRF_OFFSET        0x0
#define RV1106_VENCGRF_OFFSET        0x10000
#define RV1106_NPUGRF_OFFSET        0x18000
#define RV1106_PMUGRF_OFFSET        0x20000
#define RV1106_DDRGRF_OFFSET        0x30000
#define RV1106_COREGRF_OFFSET        0x40000
#define RV1106_VIGRF_OFFSET        0x50000
#define RV1106_VOGRF_OFFSET        0x60000
 
#define RV1106_PERISGRF_OFFSET        0x70000
#define RV1106_VISGRF_OFFSET        0x72000
#define RV1106_NPUSGRF_OFFSET        0x74000
#define RV1106_CORESGRF_OFFSET        0x76000
#define RV1106_VENCSGRF_OFFSET        0x78000
#define RV1106_VOSGRF_OFFSET        0x7a000
#define RV1106_PMUSGRF_OFFSET        0x80000
 
#define RV1106_GIC_OFFSET        0x1f0000
#define RV1106_HPTIMER_OFFSET        0x2f0000
#define RV1106_PMU_OFFSET        0x300000
#define RV1106_GPIO0_OFFSET        0x380000
#define RV1106_GPIO0IOC_OFFSET        0x388000
#define RV1106_PMUPVTM_OFFSET        0x390000
 
#define RV1106_PMUCRU_OFFSET        0x3a0000
#define RV1106_CRU_OFFSET        0x3b0000
#define RV1106_PERICRU_OFFSET        0x3b2000
#define RV1106_VICRU_OFFSET        0x3b4000
#define RV1106_NPUCRU_OFFSET        0x3b6000
#define RV1106_CORECRU_OFFSET        0x3b8000
#define RV1106_VENCCRU_OFFSET        0x3ba000
#define RV1106_VOCRU_OFFSET        0x3bc000
 
#define RV1106_UART2_OFFSET        0x4c0000
 
#define RV1106_GPIO1_OFFSET        0x530000
#define RV1106_GPIO1IOC_OFFSET        0x538000
#define RV1106_GPIO2_OFFSET        0x540000
#define RV1106_GPIO2IOC_OFFSET        0x548000
#define RV1106_GPIO3_OFFSET        0x550000
#define RV1106_GPIO3IOC_OFFSET        0x558000
#define RV1106_GPIO4_OFFSET        0x560000
#define RV1106_GPIO4IOC_OFFSET        0x568000
 
#define RV1106_NSTIMER_OFFSET        0x580000
#define RV1106_STIMER_OFFSET        0x590000
#define RV1106_MBOX_OFFSET        0x5c0000
#define RV1106_PMUSRAM_OFFSET        0x670000
#define RV1106_DDRC_OFFSET        0x800000
#define RV1106_FW_DDR_OFFSET        0x900000
#define RV1106_FW_SRAM_OFFSET        0x910000
 
#define RV1106_DEV_REG_BASE        0xff000000
#define RV1106_DEV_REG_SIZE        0x920000
 
#define RV1106_PMUSRAM_BASE        \
   (RV1106_DEV_REG_BASE + RV1106_PMUSRAM_OFFSET)
 
/* cru */
#define RV1106_CRU_PLL_CON(pll_id, i)    ((pll_id) * 0x20 + (i) * 4)
#define RV1106_CRU_MODE_CON00        0x280
#define RV1106_CRU_GATE_CON(i)        (0x800 + (i) * 4)
#define RV1106_CRU_GATE_CON_NUM        4
#define RV1106_CRU_GLB_SRST_FST        0xc08
#define RV1106_CRU_GLB_RST_CON        0xc10
 
#define CRU_PLLCON1_PWRDOWN        BIT(13)
#define CRU_PLLCON1_LOCK_STATUS        BIT(10)
 
#define RV1106_PMUCRU_GATE_CON(i)    (0x800 + (i) * 4)
#define RV1106_PMUCRU_CLKSEL_CON(i)    (0x300 + (i) * 4)
#define RV1106_PMUCRU_GATE_CON_NUM    3
 
#define RV1106_PERICRU_GATE_CON(i)    (0x800 + (i) * 4)
#define RV1106_PERICRU_CLKSEL_CON(i)    (0x300 + (i) * 4)
#define RV1106_PERICRU_GATE_CON_NUM    8
 
#define RV1106_NPUCRU_GATE_CON(i)    (0x800 + (i) * 4)
#define RV1106_NPUCRU_CLKSEL_CON(i)    (0x300 + (i) * 4)
#define RV1106_NPUCRU_GATE_CON_NUM    2
 
#define RV1106_VENCCRU_GATE_CON(i)    (0x800 + (i) * 4)
#define RV1106_VENCCRU_CLKSEL_CON(i)    (0x300 + (i) * 4)
#define RV1106_VENCCRU_GATE_CON_NUM    3
 
#define RV1106_VICRU_GATE_CON(i)    (0x800 + (i) * 4)
#define RV1106_VICRU_CLKSEL_CON(i)    (0x300 + (i) * 4)
#define RV1106_VICRU_GATE_CON_NUM    3
 
#define RV1106_VOCRU_GATE_CON(i)    (0x800 + (i) * 4)
#define RV1106_VOCRU_CLKSEL_CON(i)    (0x300 + (i) * 4)
#define RV1106_VOCRU_GATE_CON_NUM    4
 
#define RV1106_CORECRU_GATE_CON(i)    (0x800 + (i) * 4)
#define RV1106_COERCRU_CLKSEL_CON(i)    (0x300 + (i) * 4)
#define RV1106_CORECRU_GATE_CON_NUM    2
#define RV1106_COERCRU_SFTRST_CON(i)    (0xa00 + (i) * 4)
 
/* grf */
#define RV1106_PMUGRF_SOC_CON(i)    ((i) * 4)
#define RV1106_PMUGRF_OS_REG(i)        (0x200 + (i) * 4)
 
#define RV1106_PMUSGRF_SOC_CON(i)    ((i) * 4)
 
#define RV1106_DDRGRF_CON(i)        ((i) * 0x4)
 
#define RV1106_CORESGRF_HPMCU_BOOTADDR        0x44
 
#define RV1106_COREGRF_CACHE_PERI_ADDR_START    0x24
#define RV1106_COREGRF_CACHE_PERI_ADDR_END    0x28
 
/* pvmt */
#define RV1106_PVTM_CON(i)        (0x4 + (i) * 4)
#define RV1106_PVTM_INTEN        0x70
#define RV1106_PVTM_INTSTS        0x74
#define RV1106_PVTM_STATUS(i)        (0x80 + (i) * 4)
 
#define RV1106_PVTM_CALC_CNT        0x200
 
 /* gpio */
#define RV1106_GPIO_SWPORT_DR_L        0x0000
#define RV1106_GPIO_SWPORT_DR_H        0x0004
#define RV1106_GPIO_SWPORT_DDR_L    0x0008
#define RV1106_GPIO_SWPORT_DDR_H    0x000c
#define RV1106_GPIO_INT_EN_L        0x0010
#define RV1106_GPIO_INT_EN_H        0x0014
#define RV1106_GPIO_INT_MASK_L        0x0018
#define RV1106_GPIO_INT_MASK_H        0x001c
#define RV1106_GPIO_INT_TYPE_L        0x0020
#define RV1106_GPIO_INT_TYPE_H        0x0024
#define RV1106_GPIO_INT_POLARITY_L    0x0028
#define RV1106_GPIO_INT_POLARITY_H    0x002c
#define RV1106_GPIO_INT_BOTHEDGE_L    0x0030
#define RV1106_GPIO_INT_BOTHEDGE_H    0x0034
#define RV1106_GPIO_DEBOUNCE_L        0x0038
#define RV1106_GPIO_DEBOUNCE_H        0x003c
#define RV1106_GPIO_DBCLK_DIV_EN_L    0x0040
#define RV1106_GPIO_DBCLK_DIV_EN_H    0x0044
#define RV1106_GPIO_DBCLK_DIV_CON    0x0048
#define RV1106_GPIO_INT_STATUS        0x0050
#define RV1106_GPIO_INT_RAWSTATUS    0x0058
 
/* pmu */
#define RV1106_PMU_VERSION        0x000
#define RV1106_PMU_PWR_CON        0x004
#define RV1106_PMU_GLB_POWER_STS    0x008
#define RV1106_PMU_INT_MASK_CON        0x00c
#define RV1106_PMU_WAKEUP_INT_CON    0x010
#define RV1106_PMU_WAKEUP_INT_ST    0x014
#define RV1106_PMU_PMIC_STABLE_CNT    0x024
#define RV1106_PMU_OSC_STABLE_CNT    0x028
#define RV1106_PMU_WAKEUP_RSTCLR_CNT    0x02c
#define RV1106_PMU_PLL_LOCK_CNT        0x030
#define RV1106_PMU_WAKEUP_TIMEOUT_CNT    0x048
#define RV1106_PMU_PWM_SWITCH_CNT    0x04c
#define RV1106_PMU_SCU_PWR_CON        0x080
#define RV1106_PMU_SCU_STS        0x084
#define RV1106_PMU_BIU_IDLE_CON        0x0b0
#define RV1106_PMU_BIU_IDLE_SFTCON    0x0c0
#define RV1106_PMU_BIU_IDLE_ACK        0x0d0
#define RV1106_PMU_BIU_IDLE_ST        0x0d8
#define RV1106_PMU_BIU_AUTO_CON        0x0e0
#define RV1106_PMU_DDR_PWR_CON        0x0f0
#define RV1106_PMU_DDR_PWR_SFTCON    0x0f4
#define RV1106_PMU_DDR_POWER_STS    0x0f8
#define RV1106_PMU_DDR_STS        0x0fC
#define RV1106_PMU_CRU_PWR_CON0        0x120
#define RV1106_PMU_CRU_PWR_CON1        0x140
#define RV1106_PMU_CRU_PWR_SFTCON    0x124
#define RV1106_PMU_CRU_POWER_STS    0x128
#define RV1106_PMU_PLLPD_CON        0x130
#define RV1106_PMU_PLLPD_SFTCON        0x134
#define RV1106_PMU_INFO_TX_CON        0x150
#define RV1106_PMU_SYS_REG(i)        (0x1c0 + (i) * 4)
 
#define PMU_SUSPEND_MAGIC        0x02468ace
#define PMU_RESUME_MAGIC        0x13579bdf
 
/* mcu */
#define RV1106_MBOX_B2A_STATUS        0x2c
#define RV1106_MBOX_B2A_CMD_0        0x30
 
#define RV1106_HPMCU_MBOX_IRQ_AP    33
 
#define RV1106_HPMCU_BOOT_ADDR        0x40000
#define RV1106_MBOX_CMD_AP_SUSPEND    0x12345600
#define RV1106_MBOX_CMD_AP_RESUME    0x12345601
#define RV1106_SYS_IS_WKUP        0x87654300
 
#ifndef __ASSEMBLER__
extern unsigned long rkpm_bootdata_cpusp;
extern unsigned long rkpm_bootdata_cpu_code;
extern unsigned long rkpm_bootdata_l2ctlr_f;
extern unsigned long rkpm_bootdata_l2ctlr;
extern unsigned long rkpm_bootdata_ddr_code;
extern unsigned long rkpm_bootdata_ddr_data;
extern unsigned long rv1106_bootram_sz;
 
void rockchip_slp_cpu_resume(void);
void rv1106_rockchip_slp_cpu_resume(void);
 
#ifdef CONFIG_PM_SLEEP
void __init rockchip_suspend_init(void);
#else
static inline void rockchip_suspend_init(void)
{
}
#endif
 
enum rv1106_pwr_con {
   RV1106_PMU_PWRMODE_EN = 0,
   RV1106_PMU_BUS_BYPASS = 4,
   RV1106_PMU_DDR_BYPASS = 5,
   RV1106_PMU_CRU_BYPASS = 7,
};
 
enum rv1106_int_mask_con {
   RV1106_PMU_GLB_INT_MASK = 0,
};
 
enum rv1106_wakeup_init_con {
   RV1106_PMU_WAKEUP_CPU_INT_EN = 0,
   RV1106_PMU_WAKEUP_GPIO_INT_EN,
   RV1106_PMU_WAKEUP_SDMMC_EN,
   RV1106_PMU_WAKEUP_SDIO_EN,
 
   RV1106_PMU_WAKEUP_USBDEV_EN,
   RV1106_PMU_WAKEUP_TIMER_EN,
   RV1106_PMU_WAKEUP_TIMEROUT_EN,
   RV1106_PMU_WAKEUP_SFT_WAKEUP_CFG,
};
 
enum rv1106_scu_pwr_con {
   RV1106_PMU_SCU_INT_MASK_ENA = 0,
   RV1106_PMU_CPU_INT_MASK_ENA,
   RV1106_PMU_STANDBYWFI_BYPASS,
};
 
enum rv1106_scu_sts {
   RV1106_PMU_STANDBYWFI,
   RV1106_PMU_STANDBYWFIL2,
};
 
enum rv1106_biu_idle_con {
   RV1106_PMU_IDLE_REQ_MSCH = 0,
   RV1106_PMU_IDLE_REQ_DDR,
   RV1106_PMU_IDLE_REQ_NPU,
   RV1106_PMU_IDLE_REQ_NPU_ACLK,
 
   RV1106_PMU_IDLE_REQ_VI,
   RV1106_PMU_IDLE_REQ_VO,
   RV1106_PMU_IDLE_REQ_PERI,
   RV1106_PMU_IDLE_REQ_CRU,
 
   RV1106_PMU_IDLE_REQ_CPU,
   RV1106_PMU_IDLE_REQ_VENC_COM,
   RV1106_PMU_IDLE_REQ_VEPU,
};
 
enum rv1106_biu_auto_con {
   RV1106_PMU_AUTO_IDLE_MSCH = 0,
   RV1106_PMU_AUTO_IDLE_DDR,
   RV1106_PMU_AUTO_IDLE_NPU,
   RV1106_PMU_AUTO_IDLE_NPU_ACLK,
 
   RV1106_PMU_AUTO_IDLE_VI,
   RV1106_PMU_AUTO_IDLE_VO,
   RV1106_PMU_AUTO_IDLE_PERI,
   RV1106_PMU_AUTO_IDLE_CRU,
 
   RV1106_PMU_AUTO_IDLE_CPU,
   RV1106_PMU_AUTO_IDLE_VENC_COM,
   RV1106_PMU_AUTO_IDLE_VEPU,
};
 
enum rv1106_ddr_pwr_con {
   RV1106_PMU_DDR_SREF_C_ENA = 0,
   RV1106_PMU_DDRIO_RET_ENA,
   RV1106_PMU_DDRIO_EXIT_ENA,
   RV1106_PMU_DDRCTL_C_AUTO_GATING_ENA,
 
   RV1106_PMU_MSCH_AUTO_GATING_ENA = 5,
   RV1106_PMU_DDR_SREF_A_ENA,
   RV1106_PMU_DDRCTL_A_AUTO_GATING_ENA,
};
 
enum rv1106_cru_pwr_con0 {
   RV1106_PMU_ALIVE_32K_ENA = 0,
   RV1106_PMU_OSC_DIS_ENA,
   RV1106_PMU_WAKEUP_RST_ENA,
   RV1106_PMU_INPUT_CLAMP_ENA,
 
   RV1106_PMU_ALIVE_OSC_ENA,
   RV1106_PMU_POWER_OFF_ENA,
   RV1106_PMU_PWM_SWITCH_ENA,
   RV1106_PMU_GPIO_IOE_ENA,
   RV1106_PMU_PWM_SWITCH_IOUT,
};
 
enum rv1106_cru_pwr_con1 {
   RV1106_PMU_VI_CLK_SRC_GATE_ENA = 0,
   RV1106_PMU_VO_CLK_SRC_GATE_ENA,
   RV1106_PMU_VENC_CLK_SRC_GATE_ENA,
   RV1106_PMU_NPU_CLK_SRC_GATE_ENA,
 
   RV1106_PMU_DDR_CLK_SRC_CATE_ENA,
   RV1106_PMU_PERI_CLK_SRC_GATE_ENA,
   RV1106_PMU_CORE_CLK_SRC_GATE_ENA,
   RV1106_PMU_CRU_CLK_SRC_GATE_ENA,
};
 
enum rv1106_pllpd_con {
   RV1106_PMU_APLL_PD_ENA = 0,
   RV1106_PMU_DPLL_PD_ENA,
   RV1106_PMU_CPLL_PD_ENA,
   RV1106_PMU_GPLL_PD_ENA,
};
 
enum rv1106_pllid {
   RV1106_APLL_ID = 0,
   RV1106_CPLL_ID,
   RV1106_DPLL_ID,
   RV1106_GPLL_ID,
};
 
enum pvtm_con0 {
   PVTM_START = 0,
   PVTM_OSC_EN = 1,
   PVTM_OSC_SEL = 2,
   PVTM_RND_SEED_EN = 5,
};
 
#endif
#endif /* __MACH_ROCKCHIP_RV1106_PM_H */