xref: /rk3399_ARM-atf/plat/mediatek/drivers/spm/mt8189/mt_spm_hwreq.h (revision af0370f25a6663a0d737bbfb3985df4232eaaa55)
1*65db67b8SKun Lu /*
2*65db67b8SKun Lu  * Copyright (c) 2025, Mediatek Inc. All rights reserved.
3*65db67b8SKun Lu  *
4*65db67b8SKun Lu  * SPDX-License-Identifier: BSD-3-Clause
5*65db67b8SKun Lu  */
6*65db67b8SKun Lu 
7*65db67b8SKun Lu #ifndef MT_SPM_HWREQ_H
8*65db67b8SKun Lu #define MT_SPM_HWREQ_H
9*65db67b8SKun Lu 
10*65db67b8SKun Lu #include <drivers/spm/mt_spm_resource_req.h>
11*65db67b8SKun Lu #include <mt_spm_common_v1.h>
12*65db67b8SKun Lu 
13*65db67b8SKun Lu /* ddren, apsrc and emi resource have become hw resource_req.
14*65db67b8SKun Lu  * So we don't need to use HW CG for request resource.
15*65db67b8SKun Lu  */
16*65db67b8SKun Lu #define SPM_HWCG_DDREN_PWR_MB	(0)
17*65db67b8SKun Lu #define SPM_HWCG_DDREN_PWR_MSB_MB	(0)
18*65db67b8SKun Lu #define SPM_HWCG_DDREN_MODULE_BUSY_MB	(0)
19*65db67b8SKun Lu 
20*65db67b8SKun Lu /* VRF18 */
21*65db67b8SKun Lu #define SPM_HWCG_VRF18_PWR_MB                                          \
22*65db67b8SKun Lu 	(BIT(HWCG_PWR_ISP_IMG1) | BIT(HWCG_PWR_ISP_IMG2) |                 \
23*65db67b8SKun Lu 	 BIT(HWCG_PWR_ISP_IPE) | BIT(HWCG_PWR_VDE0) | BIT(HWCG_PWR_VEN0) | \
24*65db67b8SKun Lu 	 BIT(HWCG_PWR_CAM_MAIN) | BIT(HWCG_PWR_CAM_SUBA) |                 \
25*65db67b8SKun Lu 	 BIT(HWCG_PWR_CAM_SUBB) | BIT(HWCG_PWR_CAM_VCORE) |                \
26*65db67b8SKun Lu 	 BIT(HWCG_PWR_MDP0) | BIT(HWCG_PWR_MM_INFRA))
27*65db67b8SKun Lu 
28*65db67b8SKun Lu #define SPM_HWCG_VRF18_PWR_MSB_MB                                       \
29*65db67b8SKun Lu 	(BIT(HWCG_PWR_DP_TX) | BIT(HWCG_PWR_EMI0) | BIT(HWCG_PWR_CSI_RX) |  \
30*65db67b8SKun Lu 	 BIT(HWCG_PWR_SSRSYS) | BIT(HWCG_PWR_SSPM) | BIT(HWCG_PWR_EDP_TX) | \
31*65db67b8SKun Lu 	 BIT(HWCG_PWR_PCIE) | BIT(HWCG_PWR_PCIE_PHY))
32*65db67b8SKun Lu 
33*65db67b8SKun Lu #define SPM_HWCG_VRF18_MODULE_BUSY_MB	(0)
34*65db67b8SKun Lu 
35*65db67b8SKun Lu /* INFRA */
36*65db67b8SKun Lu #define SPM_HWCG_INFRA_PWR_MB	(SPM_HWCG_VRF18_PWR_MB)
37*65db67b8SKun Lu #define SPM_HWCG_INFRA_PWR_MSB_MB	(SPM_HWCG_VRF18_PWR_MSB_MB)
38*65db67b8SKun Lu #define SPM_HWCG_INFRA_MODULE_BUSY_MB	(0)
39*65db67b8SKun Lu 
40*65db67b8SKun Lu /* PMIC */
41*65db67b8SKun Lu #define SPM_HWCG_PMIC_PWR_MB	(SPM_HWCG_INFRA_PWR_MB)
42*65db67b8SKun Lu 
43*65db67b8SKun Lu #define SPM_HWCG_PMIC_PWR_MSB_MB	(SPM_HWCG_INFRA_PWR_MSB_MB)
44*65db67b8SKun Lu #define SPM_HWCG_PMIC_MODULE_BUSY_MB	(0)
45*65db67b8SKun Lu 
46*65db67b8SKun Lu /* F26M */
47*65db67b8SKun Lu #define SPM_HWCG_F26M_PWR_MB \
48*65db67b8SKun Lu 	((SPM_HWCG_PMIC_PWR_MB) | BIT(HWCG_PWR_AUDIO))
49*65db67b8SKun Lu 
50*65db67b8SKun Lu #define SPM_HWCG_F26M_PWR_MSB_MB (SPM_HWCG_PMIC_PWR_MSB_MB)
51*65db67b8SKun Lu 
52*65db67b8SKun Lu #define SPM_HWCG_F26M_MODULE_BUSY_MB                    \
53*65db67b8SKun Lu 	(BIT(HWCG_MODULE_MMPLL) | BIT(HWCG_MODULE_UFSPLL) | \
54*65db67b8SKun Lu 	 BIT(HWCG_MODULE_MSDCPLL) | BIT(HWCG_MODULE_UNIVPLL))
55*65db67b8SKun Lu 
56*65db67b8SKun Lu /* VCORE */
57*65db67b8SKun Lu #define SPM_HWCG_VCORE_PWR_MB \
58*65db67b8SKun Lu 	((SPM_HWCG_F26M_PWR_MB) | BIT(HWCG_PWR_UFS0))
59*65db67b8SKun Lu 
60*65db67b8SKun Lu #define SPM_HWCG_VCORE_PWR_MSB_MB (SPM_HWCG_F26M_PWR_MSB_MB)
61*65db67b8SKun Lu #define SPM_HWCG_VCORE_MODULE_BUSY_MB (SPM_HWCG_F26M_MODULE_BUSY_MB)
62*65db67b8SKun Lu 
63*65db67b8SKun Lu #define INFRA_SW_CG_MB	(0)
64*65db67b8SKun Lu 
65*65db67b8SKun Lu #define PERI_REQ_EN_MASK 0x3FFFF
66*65db67b8SKun Lu 
67*65db67b8SKun Lu /* Resource requirement which HW CG support */
68*65db67b8SKun Lu enum {
69*65db67b8SKun Lu 	HWCG_DDREN = 0,
70*65db67b8SKun Lu 	HWCG_VRF18,
71*65db67b8SKun Lu 	HWCG_INFRA,
72*65db67b8SKun Lu 	HWCG_F26M,
73*65db67b8SKun Lu 	HWCG_PMIC,
74*65db67b8SKun Lu 	HWCG_VCORE,
75*65db67b8SKun Lu 	HWCG_MAX
76*65db67b8SKun Lu };
77*65db67b8SKun Lu 
78*65db67b8SKun Lu enum spm_pwr_status {
79*65db67b8SKun Lu 	HWCG_PWR_MD1 = 0,
80*65db67b8SKun Lu 	HWCG_PWR_CONN,
81*65db67b8SKun Lu 	HWCG_PWR_IFR,
82*65db67b8SKun Lu 	HWCG_PWR_PERI,
83*65db67b8SKun Lu 	HWCG_PWR_UFS0,
84*65db67b8SKun Lu 	HWCG_PWR_UFS0_PHY,
85*65db67b8SKun Lu 	HWCG_PWR_AUDIO,
86*65db67b8SKun Lu 	HWCG_PWR_ADSP_TOP,
87*65db67b8SKun Lu 	HWCG_PWR_ADSP_INFRA = 8,
88*65db67b8SKun Lu 	HWCG_PWR_ADSP_AO,
89*65db67b8SKun Lu 	HWCG_PWR_ISP_IMG1,
90*65db67b8SKun Lu 	HWCG_PWR_ISP_IMG2,
91*65db67b8SKun Lu 	HWCG_PWR_ISP_IPE,
92*65db67b8SKun Lu 	HWCG_PWR_ISP_VCORE,
93*65db67b8SKun Lu 	HWCG_PWR_VDE0,
94*65db67b8SKun Lu 	HWCG_PWR_VDE1,
95*65db67b8SKun Lu 	HWCG_PWR_VEN0 = 16,
96*65db67b8SKun Lu 	HWCG_PWR_VEN1,
97*65db67b8SKun Lu 	HWCG_PWR_CAM_MAIN,
98*65db67b8SKun Lu 	HWCG_PWR_CAM_MRAW,
99*65db67b8SKun Lu 	HWCG_PWR_CAM_SUBA,
100*65db67b8SKun Lu 	HWCG_PWR_CAM_SUBB,
101*65db67b8SKun Lu 	HWCG_PWR_CAM_SUBC,
102*65db67b8SKun Lu 	HWCG_PWR_CAM_VCORE,
103*65db67b8SKun Lu 	HWCG_PWR_CAM_CCU = 24,
104*65db67b8SKun Lu 	HWCG_PWR_CAM_CCU_AO,
105*65db67b8SKun Lu 	HWCG_PWR_MDP0,
106*65db67b8SKun Lu 	HWCG_PWR_MDP1,
107*65db67b8SKun Lu 	HWCG_PWR_DIS0,
108*65db67b8SKun Lu 	HWCG_PWR_DIS1,
109*65db67b8SKun Lu 	HWCG_PWR_MM_INFRA,
110*65db67b8SKun Lu 	HWCG_PWR_MM_PROC,
111*65db67b8SKun Lu 	HWCG_PWR_MAX
112*65db67b8SKun Lu };
113*65db67b8SKun Lu 
114*65db67b8SKun Lu enum spm_pwr_msb_status {
115*65db67b8SKun Lu 	HWCG_PWR_DP_TX = 0,
116*65db67b8SKun Lu 	HWCG_PWR_SCP_CORE,
117*65db67b8SKun Lu 	HWCG_PWR_SCP_PERI,
118*65db67b8SKun Lu 	HWCG_PWR_DPM0,
119*65db67b8SKun Lu 	HWCG_PWR_DPM1,
120*65db67b8SKun Lu 	HWCG_PWR_EMI0,
121*65db67b8SKun Lu 	HWCG_PWR_EMI1,
122*65db67b8SKun Lu 	HWCG_PWR_CSI_RX,
123*65db67b8SKun Lu 	HWCG_PWR_SSRSYS = 8,
124*65db67b8SKun Lu 	HWCG_PWR_SSPM,
125*65db67b8SKun Lu 	HWCG_PWR_SSUSB,
126*65db67b8SKun Lu 	HWCG_PWR_SSUSB_PHY,
127*65db67b8SKun Lu 	HWCG_PWR_EDP_TX,
128*65db67b8SKun Lu 	HWCG_PWR_PCIE,
129*65db67b8SKun Lu 	HWCG_PWR_PCIE_PHY,
130*65db67b8SKun Lu 	HWCG_PWR_MSB_EMPTY_BIT15,
131*65db67b8SKun Lu 	HWCG_PWR_MSB_EMPTY_BIT16 = 16,
132*65db67b8SKun Lu 	HWCG_PWR_MSB_EMPTY_BIT17,
133*65db67b8SKun Lu 	HWCG_PWR_MSB_EMPTY_BIT18,
134*65db67b8SKun Lu 	HWCG_PWR_MSB_EMPTY_BIT19,
135*65db67b8SKun Lu 	HWCG_PWR_MSB_EMPTY_BIT20,
136*65db67b8SKun Lu 	HWCG_PWR_MSB_EMPTY_BIT21,
137*65db67b8SKun Lu 	HWCG_PWR_MSB_EMPTY_BIT22,
138*65db67b8SKun Lu 	HWCG_PWR_MSB_EMPTY_BIT23,
139*65db67b8SKun Lu 	HWCG_PWR_MSB_EMPTY_BIT24 = 24,
140*65db67b8SKun Lu 	HWCG_PWR_MSB_EMPTY_BIT25,
141*65db67b8SKun Lu 	HWCG_PWR_MSB_EMPTY_BIT26,
142*65db67b8SKun Lu 	HWCG_PWR_MSB_EMPTY_BIT27,
143*65db67b8SKun Lu 	HWCG_PWR_MSB_EMPTY_BIT28,
144*65db67b8SKun Lu 	HWCG_PWR_MSB_EMPTY_BIT29,
145*65db67b8SKun Lu 	HWCG_PWR_MSB_EMPTY_BIT30,
146*65db67b8SKun Lu 	HWCG_PWR_MSB_EMPTY_BIT31,
147*65db67b8SKun Lu 	HWCG_PWR_MSB_MAX
148*65db67b8SKun Lu };
149*65db67b8SKun Lu 
150*65db67b8SKun Lu enum spm_hwcg_module_busy {
151*65db67b8SKun Lu 	HWCG_MODULE_AUDIO = 0,
152*65db67b8SKun Lu 	HWCG_MODULE_MMPLL,
153*65db67b8SKun Lu 	HWCG_MODULE_UFSPLL,
154*65db67b8SKun Lu 	HWCG_MODULE_MSDCPLL,
155*65db67b8SKun Lu 	HWCG_MODULE_UNIVPLL,
156*65db67b8SKun Lu 	HWCG_MODULE_MAX
157*65db67b8SKun Lu };
158*65db67b8SKun Lu 
159*65db67b8SKun Lu /* Resource requirement which PERI REQ support */
160*65db67b8SKun Lu enum spm_peri_req {
161*65db67b8SKun Lu 	PERI_REQ_F26M = 0,
162*65db67b8SKun Lu 	PERI_REQ_INFRA,
163*65db67b8SKun Lu 	PERI_REQ_SYSPLL,
164*65db67b8SKun Lu 	PERI_REQ_APSRC,
165*65db67b8SKun Lu 	PERI_REQ_DDREN,
166*65db67b8SKun Lu 	PERI_REQ_EMI,
167*65db67b8SKun Lu 	PERI_REQ_PMIC,
168*65db67b8SKun Lu 	PERI_REQ_MAX
169*65db67b8SKun Lu };
170*65db67b8SKun Lu 
171*65db67b8SKun Lu enum spm_peri_req_en {
172*65db67b8SKun Lu 	PERI_REQ_EN_DMA = 1,
173*65db67b8SKun Lu 	PERI_REQ_EN_UART0,
174*65db67b8SKun Lu 	PERI_REQ_EN_UART1,
175*65db67b8SKun Lu 	PERI_REQ_EN_UART2,
176*65db67b8SKun Lu 	PERI_REQ_EN_UART3,
177*65db67b8SKun Lu 	PERI_REQ_EN_PWM = 6,
178*65db67b8SKun Lu 	PERI_REQ_EN_SPI0,
179*65db67b8SKun Lu 	PERI_REQ_EN_SPI1,
180*65db67b8SKun Lu 	PERI_REQ_EN_SPI2,
181*65db67b8SKun Lu 	PERI_REQ_EN_SPI3 = 10,
182*65db67b8SKun Lu 	PERI_REQ_EN_SPI4,
183*65db67b8SKun Lu 	PERI_REQ_EN_SPI5,
184*65db67b8SKun Lu 	PERI_REQ_EN_I2C,
185*65db67b8SKun Lu 	PERI_REQ_EN_MSDC0,
186*65db67b8SKun Lu 	PERI_REQ_EN_MSDC1 = 15,
187*65db67b8SKun Lu 	PERI_REQ_EN_MSDC2,
188*65db67b8SKun Lu 	PERI_REQ_EN_SSUSB0 = 17,
189*65db67b8SKun Lu 	PERI_REQ_EN_SSUSB1,
190*65db67b8SKun Lu 	PERI_REQ_EN_SSUSB2,
191*65db67b8SKun Lu 	PERI_REQ_EN_SSUSB3,
192*65db67b8SKun Lu 	PERI_REQ_EN_SSUSB4,
193*65db67b8SKun Lu 	PERI_REQ_EN_PEXTP,
194*65db67b8SKun Lu 	PERI_REQ_EN_AFE = 23,
195*65db67b8SKun Lu 	PERI_REQ_EN_MAX
196*65db67b8SKun Lu };
197*65db67b8SKun Lu 
198*65db67b8SKun Lu #define INFRA_AO_OFFSET(offset) (INFRACFG_AO_BASE + offset)
199*65db67b8SKun Lu #define INFRA_SW_CG_0_MASK INFRA_AO_OFFSET(0x060)
200*65db67b8SKun Lu #define INFRA_SW_CG_1_MASK INFRA_AO_OFFSET(0x064)
201*65db67b8SKun Lu #define INFRA_SW_CG_2_MASK INFRA_AO_OFFSET(0x068)
202*65db67b8SKun Lu #define INFRA_SW_CG_3_MASK INFRA_AO_OFFSET(0x0CC)
203*65db67b8SKun Lu #define INFRA_SW_CG_4_MASK INFRA_AO_OFFSET(0x0EC)
204*65db67b8SKun Lu 
205*65db67b8SKun Lu #define REG_PERI_REQ_EN(N) (PERICFG_AO_BASE + 0x050 + 0x4 * N)
206*65db67b8SKun Lu #define REG_PERI_REQ_STA(N) (PERICFG_AO_BASE + 0x06C + 0x4 * N)
207*65db67b8SKun Lu 
spm_hwcg_num(void)208*65db67b8SKun Lu static inline uint32_t spm_hwcg_num(void)
209*65db67b8SKun Lu {
210*65db67b8SKun Lu 	return HWCG_MAX;
211*65db67b8SKun Lu }
212*65db67b8SKun Lu 
spm_peri_req_num(void)213*65db67b8SKun Lu static inline uint32_t spm_peri_req_num(void)
214*65db67b8SKun Lu {
215*65db67b8SKun Lu 	return PERI_REQ_MAX;
216*65db67b8SKun Lu }
217*65db67b8SKun Lu 
218*65db67b8SKun Lu #endif
219