xref: /rk3399_ARM-atf/plat/mediatek/drivers/spm/mt8196/mt_spm_hwreq.h (revision af0370f25a6663a0d737bbfb3985df4232eaaa55)
1fb57af70SWenzhen Yu /*
2fb57af70SWenzhen Yu  * Copyright (c) 2025, Mediatek Inc. All rights reserved.
3fb57af70SWenzhen Yu  *
4fb57af70SWenzhen Yu  * SPDX-License-Identifier: BSD-3-Clause
5fb57af70SWenzhen Yu  */
6fb57af70SWenzhen Yu 
7fb57af70SWenzhen Yu #ifndef MT_SPM_HWREQ_H
8fb57af70SWenzhen Yu #define MT_SPM_HWREQ_H
9fb57af70SWenzhen Yu 
10fb57af70SWenzhen Yu #include <drivers/spm/mt_spm_resource_req.h>
11*532ac057SKun Lu #include <mt_spm_common_v1.h>
12*532ac057SKun Lu 
13*532ac057SKun Lu /* ddren, apsrc and emi resource have become hw resource_req.
14*532ac057SKun Lu  * So we don't need to use HW CG for request resource.
15*532ac057SKun Lu  */
16*532ac057SKun Lu #define SPM_HWCG_DDREN_PWR_MB		0
17*532ac057SKun Lu #define SPM_HWCG_DDREN_PWR_MSB_MB	0
18*532ac057SKun Lu #define SPM_HWCG_DDREN_MODULE_BUSY_MB	0
19*532ac057SKun Lu 
20*532ac057SKun Lu /* VRF18 */
21*532ac057SKun Lu #define SPM_HWCG_VRF18_PWR_MB		0
22*532ac057SKun Lu #define SPM_HWCG_VRF18_PWR_MSB_MB	0
23*532ac057SKun Lu #define SPM_HWCG_VRF18_MODULE_BUSY_MB	0
24*532ac057SKun Lu 
25*532ac057SKun Lu /* INFRA */
26*532ac057SKun Lu #define SPM_HWCG_INFRA_PWR_MB		SPM_HWCG_VRF18_PWR_MB
27*532ac057SKun Lu #define SPM_HWCG_INFRA_PWR_MSB_MB	SPM_HWCG_VRF18_PWR_MSB_MB
28*532ac057SKun Lu #define SPM_HWCG_INFRA_MODULE_BUSY_MB	0
29*532ac057SKun Lu 
30*532ac057SKun Lu /* PMIC */
31*532ac057SKun Lu #define SPM_HWCG_PMIC_PWR_MB		SPM_HWCG_VRF18_PWR_MB
32*532ac057SKun Lu #define SPM_HWCG_PMIC_PWR_MSB_MB	SPM_HWCG_VRF18_PWR_MSB_MB
33*532ac057SKun Lu #define SPM_HWCG_PMIC_MODULE_BUSY_MB	0
34*532ac057SKun Lu 
35*532ac057SKun Lu /* F26M */
36*532ac057SKun Lu #define SPM_HWCG_F26M_PWR_MB		SPM_HWCG_PMIC_PWR_MB
37*532ac057SKun Lu #define SPM_HWCG_F26M_PWR_MSB_MB	SPM_HWCG_PMIC_PWR_MSB_MB
38*532ac057SKun Lu #define SPM_HWCG_F26M_MODULE_BUSY_MB	0
39*532ac057SKun Lu 
40*532ac057SKun Lu /* VCORE */
41*532ac057SKun Lu #define SPM_HWCG_VCORE_PWR_MB		SPM_HWCG_F26M_PWR_MB
42*532ac057SKun Lu #define SPM_HWCG_VCORE_PWR_MSB_MB	SPM_HWCG_F26M_PWR_MSB_MB
43*532ac057SKun Lu #define SPM_HWCG_VCORE_MODULE_BUSY_MB	SPM_HWCG_F26M_MODULE_BUSY_MB
44*532ac057SKun Lu 
45*532ac057SKun Lu #define INFRA_SW_CG_MB			0
46*532ac057SKun Lu 
47*532ac057SKun Lu #define PERI_REQ_EN_MASK		0x3FFFFF
48fb57af70SWenzhen Yu 
49fb57af70SWenzhen Yu /* Resource requirement which HW CG support */
50fb57af70SWenzhen Yu enum {
51fb57af70SWenzhen Yu 	HWCG_DDREN = 0,
52fb57af70SWenzhen Yu 	HWCG_VRF18,
53fb57af70SWenzhen Yu 	HWCG_INFRA,
54fb57af70SWenzhen Yu 	HWCG_PMIC,
55fb57af70SWenzhen Yu 	HWCG_F26M,
56fb57af70SWenzhen Yu 	HWCG_VCORE,
57fb57af70SWenzhen Yu 	HWCG_MAX
58fb57af70SWenzhen Yu };
59fb57af70SWenzhen Yu 
60fb57af70SWenzhen Yu enum spm_pwr_status {
61fb57af70SWenzhen Yu 	HWCG_PWR_MD1 = 0,
62fb57af70SWenzhen Yu 	HWCG_PWR_CONN,
63fb57af70SWenzhen Yu 	HWCG_PWR_APIFR_IO,
64fb57af70SWenzhen Yu 	HWCG_PWR_APIFR_MEM,
65fb57af70SWenzhen Yu 	HWCG_PWR_PERI,
66fb57af70SWenzhen Yu 	HWCG_PWR_PERI_ETHER,
67fb57af70SWenzhen Yu 	HWCG_PWR_SSUSB_PD_PHY_P0,
68fb57af70SWenzhen Yu 	HWCG_PWR_SSUSB_P0,
69fb57af70SWenzhen Yu 	HWCG_PWR_SSUSB_P1,
70fb57af70SWenzhen Yu 	HWCG_PWR_SSUSB_P23,
71fb57af70SWenzhen Yu 	HWCG_PWR_SSUSB_PHY_P2,
72fb57af70SWenzhen Yu 	HWCG_PWR_UFS0,
73fb57af70SWenzhen Yu 	HWCG_PWR_UFS0_PHY,
74fb57af70SWenzhen Yu 	HWCG_PWR_PEXTP_MAC0,
75fb57af70SWenzhen Yu 	HWCG_PWR_PEXTP_MAC1,
76fb57af70SWenzhen Yu 	HWCG_PWR_PEXTP_MAC2,
77fb57af70SWenzhen Yu 	HWCG_PWR_PEXTP_PHY0,
78fb57af70SWenzhen Yu 	HWCG_PWR_PEXTP_PHY1,
79fb57af70SWenzhen Yu 	HWCG_PWR_PEXTP_PHY3,
80fb57af70SWenzhen Yu 	HWCG_PWR_AUDIO,
81fb57af70SWenzhen Yu 	HWCG_PWR_ADSP_CORE1,
82fb57af70SWenzhen Yu 	HWCG_PWR_ADSP_TOP,
83fb57af70SWenzhen Yu 	HWCG_PWR_ADSP_INFRA,
84fb57af70SWenzhen Yu 	HWCG_PWR_ADSP_AO,
85fb57af70SWenzhen Yu 	HWCG_PWR_MM_PROC,
86fb57af70SWenzhen Yu 	HWCG_PWR_SCP,
87fb57af70SWenzhen Yu 	HWCG_PWR_SCP2,
88fb57af70SWenzhen Yu 	HWCG_PWR_DPYD0,
89fb57af70SWenzhen Yu 	HWCG_PWR_DPYD1,
90fb57af70SWenzhen Yu 	HWCG_PWR_DPYD2,
91fb57af70SWenzhen Yu 	HWCG_PWR_DPYD3,
92fb57af70SWenzhen Yu 	HWCG_PWR_DPYA0
93fb57af70SWenzhen Yu };
94fb57af70SWenzhen Yu 
95fb57af70SWenzhen Yu CASSERT(HWCG_PWR_SSUSB_P1 == 8, spm_pwr_status_err);
96fb57af70SWenzhen Yu CASSERT(HWCG_PWR_PEXTP_PHY0 == 16, spm_pwr_status_err);
97fb57af70SWenzhen Yu CASSERT(HWCG_PWR_MM_PROC == 24, spm_pwr_status_err);
98fb57af70SWenzhen Yu 
99fb57af70SWenzhen Yu enum spm_hwcg_module_busy {
100fb57af70SWenzhen Yu 	HWCG_MODULE_ADSP = 0,
101fb57af70SWenzhen Yu 	HWCG_MODULE_MMPLL,
102fb57af70SWenzhen Yu 	HWCG_MODULE_TVDPLL,
103fb57af70SWenzhen Yu 	HWCG_MODULE_MSDCPLL,
104fb57af70SWenzhen Yu 	HWCG_MODULE_UNIVPLL
105fb57af70SWenzhen Yu };
106fb57af70SWenzhen Yu 
107fb57af70SWenzhen Yu /* Resource requirement which PERI REQ support */
108fb57af70SWenzhen Yu enum spm_peri_req {
109fb57af70SWenzhen Yu 	PERI_REQ_F26M = 0,
110fb57af70SWenzhen Yu 	PERI_REQ_INFRA,
111fb57af70SWenzhen Yu 	PERI_REQ_SYSPLL,
112fb57af70SWenzhen Yu 	PERI_REQ_APSRC,
113fb57af70SWenzhen Yu 	PERI_REQ_EMI,
114fb57af70SWenzhen Yu 	PERI_REQ_DDREN,
115fb57af70SWenzhen Yu 	PERI_REQ_MAX
116fb57af70SWenzhen Yu };
117fb57af70SWenzhen Yu 
118fb57af70SWenzhen Yu enum spm_peri_req_en {
119fb57af70SWenzhen Yu 	PERI_REQ_EN_FLASHIF = 0,
120fb57af70SWenzhen Yu 	PERI_REQ_EN_AP_DMA,
121fb57af70SWenzhen Yu 	PERI_REQ_EN_UART0,
122fb57af70SWenzhen Yu 	PERI_REQ_EN_UART1,
123fb57af70SWenzhen Yu 	PERI_REQ_EN_UART2,
124fb57af70SWenzhen Yu 	PERI_REQ_EN_UART3,
125fb57af70SWenzhen Yu 	PERI_REQ_EN_UART4,
126fb57af70SWenzhen Yu 	PERI_REQ_EN_UART5,
127fb57af70SWenzhen Yu 	PERI_REQ_EN_PWM,
128fb57af70SWenzhen Yu 	PERI_REQ_EN_SPI0,
129fb57af70SWenzhen Yu 	PERI_REQ_EN_SPI0_INCR16,
130fb57af70SWenzhen Yu 	PERI_REQ_EN_SPI1,
131fb57af70SWenzhen Yu 	PERI_REQ_EN_SPI2,
132fb57af70SWenzhen Yu 	PERI_REQ_EN_SPI3,
133fb57af70SWenzhen Yu 	PERI_REQ_EN_SPI4,
134fb57af70SWenzhen Yu 	PERI_REQ_EN_SPI5,
135fb57af70SWenzhen Yu 	PERI_REQ_EN_SPI6,
136fb57af70SWenzhen Yu 	PERI_REQ_EN_SPI7,
137fb57af70SWenzhen Yu 	PERI_REQ_EN_IMP_IIC,
138fb57af70SWenzhen Yu 	PERI_REQ_EN_MSDC1,
139fb57af70SWenzhen Yu 	PERI_REQ_EN_MSDC2,
140fb57af70SWenzhen Yu 	PERI_REQ_EN_USB,
141fb57af70SWenzhen Yu 	PERI_REQ_EN_UFS0,
142fb57af70SWenzhen Yu 	PERI_REQ_EN_PEXTP1,
143fb57af70SWenzhen Yu 	PERI_REQ_EN_PEXTP0,
144fb57af70SWenzhen Yu 	PERI_REQ_EN_RSV_DUMMY0,
145fb57af70SWenzhen Yu 	PERI_REQ_EN_PERI_BUS_TRAFFIC,
146fb57af70SWenzhen Yu 	PERI_REQ_EN_RSV_DUMMY1,
147fb57af70SWenzhen Yu 	PERI_REQ_EN_RSV_FOR_MSDC,
148fb57af70SWenzhen Yu 	PERI_REQ_EN_MAX
149fb57af70SWenzhen Yu };
150fb57af70SWenzhen Yu 
151fb57af70SWenzhen Yu CASSERT(PERI_REQ_EN_PWM == 8, spm_peri_req_en_err);
152fb57af70SWenzhen Yu CASSERT(PERI_REQ_EN_SPI6 == 16, spm_peri_req_en_err);
153fb57af70SWenzhen Yu CASSERT(PERI_REQ_EN_PEXTP0 == 24, spm_peri_req_en_err);
154fb57af70SWenzhen Yu 
155fb57af70SWenzhen Yu #define INFRA_AO_OFFSET(offset)		(INFRACFG_AO_BASE + offset)
156fb57af70SWenzhen Yu #define INFRA_SW_CG_MASK		INFRA_AO_OFFSET(0x060)
157fb57af70SWenzhen Yu 
158fb57af70SWenzhen Yu #define REG_PERI_REQ_EN(N)	(PERICFG_AO_BASE + 0x070 + 0x4 * (N))
159fb57af70SWenzhen Yu #define REG_PERI_REQ_STA(N)	(PERICFG_AO_BASE + 0x0A0 + 0x4 * (N))
160fb57af70SWenzhen Yu 
spm_hwcg_num(void)161fb57af70SWenzhen Yu static inline uint32_t spm_hwcg_num(void)
162fb57af70SWenzhen Yu {
163fb57af70SWenzhen Yu 	return HWCG_MAX;
164fb57af70SWenzhen Yu }
165fb57af70SWenzhen Yu 
spm_peri_req_num(void)166fb57af70SWenzhen Yu static inline uint32_t spm_peri_req_num(void)
167fb57af70SWenzhen Yu {
168fb57af70SWenzhen Yu 	return PERI_REQ_MAX;
169fb57af70SWenzhen Yu }
170fb57af70SWenzhen Yu 
171fb57af70SWenzhen Yu #endif /* MT_SPM_HWREQ_H */
172