xref: /rk3399_ARM-atf/plat/intel/soc/agilex5/include/agilex5_power_manager.h (revision e85e73de43e3eb09a210cfe33fa6f00fdca5bf05)
1a8bf898fSJit Loon Lim /*
2a8bf898fSJit Loon Lim  * Copyright (c) 2022-2023, Intel Corporation. All rights reserved.
3*8f7575efSBoon Khai Ng  * Copyright (c) 2024-2025, Altera Corporation. All rights reserved.
4a8bf898fSJit Loon Lim  *
5a8bf898fSJit Loon Lim  * SPDX-License-Identifier: BSD-3-Clause
6a8bf898fSJit Loon Lim  */
7a8bf898fSJit Loon Lim 
8a8bf898fSJit Loon Lim #ifndef POWERMANAGER_H
9a8bf898fSJit Loon Lim #define POWERMANAGER_H
10a8bf898fSJit Loon Lim 
11a8bf898fSJit Loon Lim #include "socfpga_handoff.h"
12a8bf898fSJit Loon Lim 
13a8bf898fSJit Loon Lim #define AGX5_PWRMGR_BASE					0x10d14000
14a8bf898fSJit Loon Lim 
15a8bf898fSJit Loon Lim /* DSU */
16a8bf898fSJit Loon Lim #define AGX5_PWRMGR_DSU_FWENCTL					0x0
17a8bf898fSJit Loon Lim #define AGX5_PWRMGR_DSU_PGENCTL					0x4
18a8bf898fSJit Loon Lim #define AGX5_PWRMGR_DSU_PGSTAT					0x8
19a8bf898fSJit Loon Lim #define AGX5_PWRMGR_DSU_PWRCTLR					0xc
20a8bf898fSJit Loon Lim #define AGX5_PWRMGR_DSU_PWRSTAT0				0x10
21a8bf898fSJit Loon Lim #define AGX5_PWRMGR_DSU_PWRSTAT1				0x14
22a8bf898fSJit Loon Lim 
23a8bf898fSJit Loon Lim /* DSU Macros*/
24a8bf898fSJit Loon Lim #define AGX5_PWRMGR_DSU_FWEN(x)					((x) & 0xf)
25a8bf898fSJit Loon Lim #define AGX5_PWRMGR_DSU_PGEN(x)					((x) & 0xf)
26a8bf898fSJit Loon Lim #define AGX5_PWRMGR_DSU_PGEN_OUT(x)				((x) & 0xf)
27a8bf898fSJit Loon Lim #define AGX5_PWRMGR_DSU_SINGLE_PACCEPT(x)			((x) & 0x1)
28a8bf898fSJit Loon Lim #define AGX5_PWRMGR_DSU_SINGLE_PDENY(x)				(((x) & 0x1) << 1)
29a8bf898fSJit Loon Lim #define AGX5_PWRMGR_DSU_SINGLE_FSM_STATE(x)			(((x) & 0xff) << 8)
30a8bf898fSJit Loon Lim #define AGX5_PWRMGR_DSU_SINGLE_PCH_DONE(x)			(((x) & 0x1) << 31)
31a8bf898fSJit Loon Lim #define AGX5_PWRMGR_DSU_MULTI_PACTIVE_IN(x)			((x) & 0xff)
32a8bf898fSJit Loon Lim #define AGX5_PWRMGR_DSU_MULTI_PACCEPT(x)			(((x) & 0xff) << 8)
33a8bf898fSJit Loon Lim #define AGX5_PWRMGR_DSU_MULTI_PDENY(x)				(((x) & 0xff) << 16)
34a8bf898fSJit Loon Lim #define AGX5_PWRMGR_DSU_MULTI_PCH_DONE(x)			(((x) & 0x1) << 31)
35a8bf898fSJit Loon Lim 
36a8bf898fSJit Loon Lim /* CPU */
37a8bf898fSJit Loon Lim #define AGX5_PWRMGR_CPU_PWRCTLR0				0x18
38a8bf898fSJit Loon Lim #define AGX5_PWRMGR_CPU_PWRCTLR1				0x20
39a8bf898fSJit Loon Lim #define AGX5_PWRMGR_CPU_PWRCTLR2				0x28
40a8bf898fSJit Loon Lim #define AGX5_PWRMGR_CPU_PWRCTLR3				0x30
41a8bf898fSJit Loon Lim #define AGX5_PWRMGR_CPU_PWRSTAT0				0x1c
42a8bf898fSJit Loon Lim #define AGX5_PWRMGR_CPU_PWRSTAT1				0x24
43a8bf898fSJit Loon Lim #define AGX5_PWRMGR_CPU_PWRSTAT2				0x2c
44a8bf898fSJit Loon Lim #define AGX5_PWRMGR_CPU_PWRSTAT3				0x34
45*8f7575efSBoon Khai Ng #define AGX5_PWRMGR_CPU_RUN_PCH(x)				((x) & 0x1)
46*8f7575efSBoon Khai Ng #define AGX5_PWRMGR_CPU_POLL_COUNT				10
47*8f7575efSBoon Khai Ng #define AGX5_PWRMGR_CPU_DELAY_10_US				10
48*8f7575efSBoon Khai Ng 
49*8f7575efSBoon Khai Ng /* CPU_SINGLE_FSM_STATE located at bit 9:2,
50*8f7575efSBoon Khai Ng  * masking with 0x3fc to get the field
51*8f7575efSBoon Khai Ng  */
52*8f7575efSBoon Khai Ng #define AGX5_PWRMGR_CPU_SINGLE_FSM_STATE(x)			(((x) & 0x3fc) >> 2)
53*8f7575efSBoon Khai Ng #define AGX5_PWRMGR_CPU_PROG_CPU_ON_STATE			0x10
54*8f7575efSBoon Khai Ng 
55a8bf898fSJit Loon Lim /* APS */
56a8bf898fSJit Loon Lim #define AGX5_PWRMGR_APS_FWENCTL					0x38
57a8bf898fSJit Loon Lim #define AGX5_PWRMGR_APS_PGENCTL					0x3C
58a8bf898fSJit Loon Lim #define AGX5_PWRMGR_APS_PGSTAT					0x40
59a8bf898fSJit Loon Lim 
60a8bf898fSJit Loon Lim /* PSS */
61a8bf898fSJit Loon Lim #define AGX5_PWRMGR_PSS_FWENCTL					0x44
62a8bf898fSJit Loon Lim #define AGX5_PWRMGR_PSS_PGENCTL					0x48
63a8bf898fSJit Loon Lim #define AGX5_PWRMGR_PSS_PGSTAT					0x4c
64a8bf898fSJit Loon Lim 
65a8bf898fSJit Loon Lim /* PSS Macros*/
66a8bf898fSJit Loon Lim #define AGX5_PWRMGR_PSS_FWEN(x)					((x) & 0xff)
67a8bf898fSJit Loon Lim #define AGX5_PWRMGR_PSS_PGEN(x)					((x) & 0xff)
68a8bf898fSJit Loon Lim #define AGX5_PWRMGR_PSS_PGEN_OUT(x)				((x) & 0xff)
69a8bf898fSJit Loon Lim 
70a8bf898fSJit Loon Lim /* MPU */
71a8bf898fSJit Loon Lim #define AGX5_PWRMGR_MPU_PCHCTLR					0x50
72a8bf898fSJit Loon Lim #define AGX5_PWRMGR_MPU_PCHSTAT					0x54
73a8bf898fSJit Loon Lim #define AGX5_PWRMGR_MPU_BOOTCONFIG				0x58
74a8bf898fSJit Loon Lim #define AGX5_PWRMGR_CPU_POWER_STATE_MASK			0x1E
75a8bf898fSJit Loon Lim 
76a8bf898fSJit Loon Lim /* MPU Macros*/
77a8bf898fSJit Loon Lim #define AGX5_PWRMGR_MPU_TRIGGER_PCH_DSU(x)			((x) & 0x1)
78a8bf898fSJit Loon Lim #define AGX5_PWRMGR_MPU_TRIGGER_PCH_CPU(x)			(((x) & 0xf) << 1)
79a8bf898fSJit Loon Lim #define AGX5_PWRMGR_MPU_STATUS_PCH_CPU(x)			(((x) & 0xf) << 1)
80a8bf898fSJit Loon Lim 
81a8bf898fSJit Loon Lim /* Shared Macros */
82a8bf898fSJit Loon Lim #define AGX5_PWRMGR(_reg)					(AGX5_PWRMGR_BASE + \
83a8bf898fSJit Loon Lim 								(AGX5_PWRMGR_##_reg))
84a8bf898fSJit Loon Lim 
85a8bf898fSJit Loon Lim /* POWER MANAGER ERROR CODE */
86a8bf898fSJit Loon Lim #define AGX5_PWRMGR_HANDOFF_PERIPHERAL				-1
87a8bf898fSJit Loon Lim #define AGX5_PWRMGR_PSS_STAT_BUSY_E_BUSY			0x0
88a8bf898fSJit Loon Lim #define AGX5_PWRMGR_PSS_STAT_BUSY(x)				(((x) & 0x000000FF) >> 0)
89a8bf898fSJit Loon Lim 
90b3d28508SSieu Mun Tang void config_pwrmgr_handoff(handoff *hoff_ptr);
91a8bf898fSJit Loon Lim #endif
92