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
|
/*
* Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __PMU_H__
#define __PMU_H__
/* Needed aligned 16 bytes for sp stack top */
#define PSRAM_SP_TOP ((PMUSRAM_BASE + PMUSRAM_RSIZE) & ~0xf)
/*****************************************************************************
* pmu con,reg
*****************************************************************************/
#define PMU_WKUP_CFG0_LO 0x00
#define PMU_WKUP_CFG0_HI 0x04
#define PMU_WKUP_CFG1_LO 0x08
#define PMU_WKUP_CFG1_HI 0x0c
#define PMU_WKUP_CFG2_LO 0x10
#define PMU_PWRDN_CON 0x18
#define PMU_PWRDN_ST 0x20
#define PMU_PWRMODE_CORE_LO 0x24
#define PMU_PWRMODE_CORE_HI 0x28
#define PMU_PWRMODE_COMMON_CON_LO 0x2c
#define PMU_PWRMODE_COMMON_CON_HI 0x30
#define PMU_SFT_CON 0x34
#define PMU_INT_ST 0x44
#define PMU_BUS_IDLE_REQ 0x64
#define PMU_BUS_IDLE_ST 0x6c
#define PMU_OSC_CNT_LO 0x74
#define PMU_OSC_CNT_HI 0x78
#define PMU_PLLLOCK_CNT_LO 0x7c
#define PMU_PLLLOCK_CNT_HI 0x80
#define PMU_PLLRST_CNT_LO 0x84
#define PMU_PLLRST_CNT_HI 0x88
#define PMU_STABLE_CNT_LO 0x8c
#define PMU_STABLE_CNT_HI 0x90
#define PMU_WAKEUP_RST_CLR_LO 0x9c
#define PMU_WAKEUP_RST_CLR_HI 0xa0
#define PMU_DDR_SREF_ST 0xa4
#define PMU_SYS_REG0_LO 0xa8
#define PMU_SYS_REG0_HI 0xac
#define PMU_SYS_REG1_LO 0xb0
#define PMU_SYS_REG1_HI 0xb4
#define PMU_SYS_REG2_LO 0xb8
#define PMU_SYS_REG2_HI 0xbc
#define PMU_SYS_REG3_LO 0xc0
#define PMU_SYS_REG3_HI 0xc4
#define PMU_SCU_PWRDN_CNT_LO 0xc8
#define PMU_SCU_PWRDN_CNT_HI 0xcc
#define PMU_SCU_PWRUP_CNT_LO 0xd0
#define PMU_SCU_PWRUP_CNT_HI 0xd4
#define PMU_TIMEOUT_CNT_LO 0xd8
#define PMU_TIMEOUT_CNT_HI 0xdc
#define PMU_CPUAPM_CON(cpu) (0xe0 + (cpu) * 0x4)
#define CORES_PM_DISABLE 0x0
#define CLST_CPUS_MSK 0xf
#define PD_CTR_LOOP 500
#define PD_CHECK_LOOP 500
#define WFEI_CHECK_LOOP 500
#define BUS_IDLE_LOOP 1000
enum pmu_wkup_cfg2 {
pmu_cluster_wkup_en = 0,
pmu_gpio_wkup_en = 2,
pmu_sdio_wkup_en = 3,
pmu_sdmmc_wkup_en = 4,
pmu_uart0_wkup_en = 5,
pmu_timer_wkup_en = 6,
pmu_usbdev_wkup_en = 7,
pmu_sft_wkup_en = 8,
pmu_timeout_wkup_en = 10,
};
enum pmu_powermode_core_lo {
pmu_global_int_dis = 0,
pmu_core_src_gt = 1,
pmu_cpu0_pd = 3,
pmu_clr_core = 5,
pmu_scu_pd = 6,
pmu_l2_idle = 8,
pmu_l2_flush = 9,
pmu_clr_bus2main = 10,
pmu_clr_peri2msch = 11,
};
enum pmu_powermode_core_hi {
pmu_apll_pd_en = 3,
pmu_dpll_pd_en = 4,
pmu_cpll_pd_en = 5,
pmu_gpll_pd_en = 6,
pmu_npll_pd_en = 7,
};
enum pmu_powermode_common_lo {
pmu_mode_en = 0,
pmu_ddr_pd_en = 1,
pmu_wkup_rst = 3,
pmu_pll_pd = 4,
pmu_pmu_use_if = 6,
pmu_alive_use_if = 7,
pmu_osc_dis = 8,
pmu_input_clamp = 9,
pmu_sref_enter = 10,
pmu_ddrc_gt = 11,
pmu_ddrio_ret = 12,
pmu_ddrio_ret_deq = 13,
pmu_clr_pmu = 14,
pmu_clr_peri_pmu = 15,
};
enum pmu_powermode_common_hi {
pmu_clr_bus = 0,
pmu_clr_mmc = 1,
pmu_clr_msch = 2,
pmu_clr_nandc = 3,
pmu_clr_gmac = 4,
pmu_clr_vo = 5,
pmu_clr_vi = 6,
pmu_clr_gpu = 7,
pmu_clr_usb = 8,
pmu_clr_vpu = 9,
pmu_clr_crypto = 10,
pmu_wakeup_begin_cfg = 11,
pmu_peri_clk_src_gt = 12,
pmu_bus_clk_src_gt = 13,
};
enum pmu_pd_id {
PD_CPU0 = 0,
PD_CPU1 = 1,
PD_CPU2 = 2,
PD_CPU3 = 3,
PD_SCU = 4,
PD_USB = 5,
PD_DDR = 6,
PD_SDCARD = 8,
PD_CRYPTO = 9,
PD_GMAC = 10,
PD_MMC_NAND = 11,
PD_VPU = 12,
PD_VO = 13,
PD_VI = 14,
PD_GPU = 15,
PD_END = 16,
};
enum pmu_bus_id {
BUS_ID_BUS = 0,
BUS_ID_BUS2MAIN = 1,
BUS_ID_GPU = 2,
BUS_ID_CORE = 3,
BUS_ID_CRYPTO = 4,
BUS_ID_MMC = 5,
BUS_ID_GMAC = 6,
BUS_ID_VO = 7,
BUS_ID_VI = 8,
BUS_ID_SDCARD = 9,
BUS_ID_USB = 10,
BUS_ID_MSCH = 11,
BUS_ID_PERI = 12,
BUS_ID_PMU = 13,
BUS_ID_VPU = 14,
BUS_ID_PERI2MSCH = 15,
};
enum pmu_pd_state {
pmu_pd_on = 0,
pmu_pd_off = 1
};
enum pmu_bus_state {
bus_active = 0,
bus_idle = 1,
};
enum cores_pm_ctr_mode {
core_pwr_pd = 0,
core_pwr_wfi = 1,
core_pwr_wfi_int = 2
};
enum pmu_cores_pm_by_wfi {
core_pm_en = 0,
core_pm_int_wakeup_en,
core_pm_dis_int,
core_pm_sft_wakeup_en
};
/*****************************************************************************
* pmu_sgrf
*****************************************************************************/
#define PMUSGRF_SOC_CON(i) ((i) * 0x4)
/*****************************************************************************
* pmu_grf
*****************************************************************************/
#define GPIO0A_IOMUX 0x0
#define GPIO0B_IOMUX 0x4
#define GPIO0C_IOMUX 0x8
#define GPIO0A_PULL 0x10
#define GPIO0L_SMT 0x38
#define GPIO0H_SMT 0x3c
#define PMUGRF_SOC_CON(i) (0x100 + (i) * 4)
#define PMUGRF_PVTM_CON0 0x180
#define PMUGRF_PVTM_CON1 0x184
#define PMUGRF_PVTM_ST0 0x190
#define PMUGRF_PVTM_ST1 0x194
#define PVTM_CALC_CNT 0x200
#define PMUGRF_OS_REG(n) (0x200 + (n) * 4)
#define GPIO0A6_IOMUX_MSK (0x3 << 12)
#define GPIO0A6_IOMUX_GPIO (0x0 << 12)
#define GPIO0A6_IOMUX_RSTOUT (0x1 << 12)
#define GPIO0A6_IOMUX_SHTDN (0x2 << 12)
enum px30_pmugrf_pvtm_con0 {
pgrf_pvtm_st = 0,
pgrf_pvtm_en = 1,
pgrf_pvtm_div = 2,
};
/*****************************************************************************
* pmu_cru
*****************************************************************************/
#define CRU_PMU_MODE 0x20
#define CRU_PMU_CLKSEL_CON 0x40
#define CRU_PMU_CLKSELS_CON(i) (CRU_PMU_CLKSEL_CON + (i) * 4)
#define CRU_PMU_CLKSEL_CON_CNT 5
#define CRU_PMU_CLKGATE_CON 0x80
#define CRU_PMU_CLKGATES_CON(i) (CRU_PMU_CLKGATE_CON + (i) * 4)
#define CRU_PMU_CLKGATE_CON_CNT 2
#define CRU_PMU_ATCS_CON 0xc0
#define CRU_PMU_ATCSS_CON(i) (CRU_PMU_ATCS_CON + (i) * 4)
#define CRU_PMU_ATCS_CON_CNT 2
/*****************************************************************************
* pmusgrf
*****************************************************************************/
#define PMUSGRF_RSTOUT_EN (0x7 << 10)
#define PMUSGRF_RSTOUT_FST 10
#define PMUSGRF_RSTOUT_TSADC 11
#define PMUSGRF_RSTOUT_WDT 12
#define PMUGRF_SOC_CON2_US_WMSK (0x1fff << 16)
#define PMUGRF_SOC_CON2_MAX_341US 0x1fff
#define PMUGRF_SOC_CON2_200US 0x12c0
#define PMUGRF_FAILSAFE_SHTDN_TSADC BIT(0)
#define PMUGRF_FAILSAFE_SHTDN_WDT BIT(1)
/*****************************************************************************
* QOS
*****************************************************************************/
#define CPU_AXI_QOS_ID_COREID 0x00
#define CPU_AXI_QOS_REVISIONID 0x04
#define CPU_AXI_QOS_PRIORITY 0x08
#define CPU_AXI_QOS_MODE 0x0c
#define CPU_AXI_QOS_BANDWIDTH 0x10
#define CPU_AXI_QOS_SATURATION 0x14
#define CPU_AXI_QOS_EXTCONTROL 0x18
#define CPU_AXI_QOS_NUM_REGS 0x07
#define CPU_AXI_CPU_QOS_BASE 0xff508000
#define CPU_AXI_GPU_QOS_BASE 0xff520000
#define CPU_AXI_ISP_128M_QOS_BASE 0xff548000
#define CPU_AXI_ISP_RD_QOS_BASE 0xff548080
#define CPU_AXI_ISP_WR_QOS_BASE 0xff548100
#define CPU_AXI_ISP_M1_QOS_BASE 0xff548180
#define CPU_AXI_VIP_QOS_BASE 0xff548200
#define CPU_AXI_RGA_RD_QOS_BASE 0xff550000
#define CPU_AXI_RGA_WR_QOS_BASE 0xff550080
#define CPU_AXI_VOP_M0_QOS_BASE 0xff550100
#define CPU_AXI_VOP_M1_QOS_BASE 0xff550180
#define CPU_AXI_VPU_QOS_BASE 0xff558000
#define CPU_AXI_VPU_R128_QOS_BASE 0xff558080
#define CPU_AXI_DCF_QOS_BASE 0xff500000
#define CPU_AXI_DMAC_QOS_BASE 0xff500080
#define CPU_AXI_CRYPTO_QOS_BASE 0xff510000
#define CPU_AXI_GMAC_QOS_BASE 0xff518000
#define CPU_AXI_EMMC_QOS_BASE 0xff538000
#define CPU_AXI_NAND_QOS_BASE 0xff538080
#define CPU_AXI_SDIO_QOS_BASE 0xff538100
#define CPU_AXI_SFC_QOS_BASE 0xff538180
#define CPU_AXI_SDMMC_QOS_BASE 0xff52c000
#define CPU_AXI_USB_HOST_QOS_BASE 0xff540000
#define CPU_AXI_USB_OTG_QOS_BASE 0xff540080
#define PX30_CPU_AXI_SAVE_QOS(array, base) do { \
array[0] = mmio_read_32(base + CPU_AXI_QOS_ID_COREID); \
array[1] = mmio_read_32(base + CPU_AXI_QOS_REVISIONID); \
array[2] = mmio_read_32(base + CPU_AXI_QOS_PRIORITY); \
array[3] = mmio_read_32(base + CPU_AXI_QOS_MODE); \
array[4] = mmio_read_32(base + CPU_AXI_QOS_BANDWIDTH); \
array[5] = mmio_read_32(base + CPU_AXI_QOS_SATURATION); \
array[6] = mmio_read_32(base + CPU_AXI_QOS_EXTCONTROL); \
} while (0)
#define PX30_CPU_AXI_RESTORE_QOS(array, base) do { \
mmio_write_32(base + CPU_AXI_QOS_ID_COREID, array[0]); \
mmio_write_32(base + CPU_AXI_QOS_REVISIONID, array[1]); \
mmio_write_32(base + CPU_AXI_QOS_PRIORITY, array[2]); \
mmio_write_32(base + CPU_AXI_QOS_MODE, array[3]); \
mmio_write_32(base + CPU_AXI_QOS_BANDWIDTH, array[4]); \
mmio_write_32(base + CPU_AXI_QOS_SATURATION, array[5]); \
mmio_write_32(base + CPU_AXI_QOS_EXTCONTROL, array[6]); \
} while (0)
#define SAVE_QOS(array, NAME) \
PX30_CPU_AXI_SAVE_QOS(array, CPU_AXI_##NAME##_QOS_BASE)
#define RESTORE_QOS(array, NAME) \
PX30_CPU_AXI_RESTORE_QOS(array, CPU_AXI_##NAME##_QOS_BASE)
#endif /* __PMU_H__ */
|