1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef __SOC_MEDIATEK_MT8365_PM_DOMAINS_H
4 #define __SOC_MEDIATEK_MT8365_PM_DOMAINS_H
5 
6 #include "mtk-pm-domains.h"
7 #include <dt-bindings/power/mediatek,mt8365-power.h>
8 
9 /*
10  * MT8365 power domain support
11  */
12 
13 #define MT8365_BUS_PROT_INFRA_WR_TOPAXI(_mask)				\
14 		BUS_PROT_WR(INFRA, _mask,				\
15 			    MT8365_INFRA_TOPAXI_PROTECTEN_SET,		\
16 			    MT8365_INFRA_TOPAXI_PROTECTEN_CLR,		\
17 			    MT8365_INFRA_TOPAXI_PROTECTEN_STA1)
18 
19 #define MT8365_BUS_PROT_INFRA_WR_TOPAXI_1(_mask)			\
20 		BUS_PROT_WR(INFRA, _mask,				\
21 			    MT8365_INFRA_TOPAXI_PROTECTEN_1_SET,	\
22 			    MT8365_INFRA_TOPAXI_PROTECTEN_1_CLR,	\
23 			    MT8365_INFRA_TOPAXI_PROTECTEN_1_STA1)
24 
25 #define MT8365_BUS_PROT_SMI_WR_CLAMP_EN_PORT(port)			\
26 		BUS_PROT_WR(SMI, BIT(port),				\
27 			    MT8365_SMI_COMMON_CLAMP_EN_SET,		\
28 			    MT8365_SMI_COMMON_CLAMP_EN_CLR,		\
29 			    MT8365_SMI_COMMON_CLAMP_EN)
30 
31 #define MT8365_BUS_PROT_WAY_EN(_set_mask, _set, _sta_mask, _sta)	\
32 		_BUS_PROT(_set_mask, _set, _set, _sta_mask, _sta,	\
33 			  BUS_PROT_COMPONENT_INFRA |			\
34 			  BUS_PROT_STA_COMPONENT_INFRA_NAO |		\
35 			  BUS_PROT_INVERTED |				\
36 			  BUS_PROT_REG_UPDATE)
37 
38 static const struct scpsys_domain_data scpsys_domain_data_mt8365[] = {
39 	[MT8365_POWER_DOMAIN_MM] = {
40 		.name = "mm",
41 		.sta_mask = PWR_STATUS_DISP,
42 		.ctl_offs = 0x30c,
43 		.pwr_sta_offs = 0x0180,
44 		.pwr_sta2nd_offs = 0x0184,
45 		.sram_pdn_bits = GENMASK(8, 8),
46 		.sram_pdn_ack_bits = GENMASK(12, 12),
47 		.bp_cfg = {
48 			MT8365_BUS_PROT_INFRA_WR_TOPAXI_1(
49 				MT8365_INFRA_TOPAXI_PROTECTEN_1_MM2INFRA_AXI_GALS_MST_0 |
50 				MT8365_INFRA_TOPAXI_PROTECTEN_1_MM2INFRA_AXI_GALS_MST_1),
51 			MT8365_BUS_PROT_INFRA_WR_TOPAXI(
52 				MT8365_INFRA_TOPAXI_PROTECTEN_MM_M0 |
53 				MT8365_INFRA_TOPAXI_PROTECTEN_MDMCU_M1 |
54 				MT8365_INFRA_TOPAXI_PROTECTEN_MM2INFRA_AXI_GALS_SLV_0 |
55 				MT8365_INFRA_TOPAXI_PROTECTEN_MM2INFRA_AXI_GALS_SLV_1),
56 			MT8365_BUS_PROT_WAY_EN(
57 				MT8365_INFRA_TOPAXI_SI0_WAY_EN_MMAPB_S,
58 				MT8365_INFRA_TOPAXI_SI0_CTL,
59 				MT8365_INFRA_NAO_TOPAXI_SI0_CTRL_UPDATED,
60 				MT8365_INFRA_NAO_TOPAXI_SI0_STA),
61 			MT8365_BUS_PROT_WAY_EN(
62 				MT8365_INFRA_TOPAXI_SI2_WAY_EN_PERI_M1,
63 				MT8365_INFRA_TOPAXI_SI2_CTL,
64 				MT8365_INFRA_NAO_TOPAXI_SI2_CTRL_UPDATED,
65 				MT8365_INFRA_NAO_TOPAXI_SI2_STA),
66 			MT8365_BUS_PROT_INFRA_WR_TOPAXI(
67 				MT8365_INFRA_TOPAXI_PROTECTEN_MMAPB_S),
68 		},
69 		.caps = MTK_SCPD_STRICT_BUS_PROTECTION | MTK_SCPD_HAS_INFRA_NAO,
70 	},
71 	[MT8365_POWER_DOMAIN_VENC] = {
72 		.name = "venc",
73 		.sta_mask = PWR_STATUS_VENC,
74 		.ctl_offs = 0x0304,
75 		.pwr_sta_offs = 0x0180,
76 		.pwr_sta2nd_offs = 0x0184,
77 		.sram_pdn_bits = GENMASK(8, 8),
78 		.sram_pdn_ack_bits = GENMASK(12, 12),
79 		.bp_cfg = {
80 			MT8365_BUS_PROT_SMI_WR_CLAMP_EN_PORT(1),
81 		},
82 	},
83 	[MT8365_POWER_DOMAIN_AUDIO] = {
84 		.name = "audio",
85 		.sta_mask = PWR_STATUS_AUDIO,
86 		.ctl_offs = 0x0314,
87 		.pwr_sta_offs = 0x0180,
88 		.pwr_sta2nd_offs = 0x0184,
89 		.sram_pdn_bits = GENMASK(12, 8),
90 		.sram_pdn_ack_bits = GENMASK(17, 13),
91 		.bp_cfg = {
92 			MT8365_BUS_PROT_INFRA_WR_TOPAXI_1(
93 				MT8365_INFRA_TOPAXI_PROTECTEN_1_PWRDNREQ_MP1_L2C_AFIFO |
94 				MT8365_INFRA_TOPAXI_PROTECTEN_1_AUDIO_BUS_AUDIO_M),
95 		},
96 		.caps = MTK_SCPD_ACTIVE_WAKEUP,
97 	},
98 	[MT8365_POWER_DOMAIN_CONN] = {
99 		.name = "conn",
100 		.sta_mask = PWR_STATUS_CONN,
101 		.ctl_offs = 0x032c,
102 		.pwr_sta_offs = 0x0180,
103 		.pwr_sta2nd_offs = 0x0184,
104 		.sram_pdn_bits = 0,
105 		.sram_pdn_ack_bits = 0,
106 		.bp_cfg = {
107 			MT8365_BUS_PROT_INFRA_WR_TOPAXI(
108 				MT8365_INFRA_TOPAXI_PROTECTEN_AP2CONN_AHB),
109 			MT8365_BUS_PROT_INFRA_WR_TOPAXI_1(
110 				MT8365_INFRA_TOPAXI_PROTECTEN_1_CONN2INFRA_AXI_GALS_MST),
111 			MT8365_BUS_PROT_INFRA_WR_TOPAXI(
112 				MT8365_INFRA_TOPAXI_PROTECTEN_CONN2INFRA_AHB),
113 			MT8365_BUS_PROT_INFRA_WR_TOPAXI_1(
114 				MT8365_INFRA_TOPAXI_PROTECTEN_1_INFRA2CONN_AHB_GALS_SLV),
115 		},
116 		.caps = MTK_SCPD_ACTIVE_WAKEUP | MTK_SCPD_KEEP_DEFAULT_OFF,
117 	},
118 	[MT8365_POWER_DOMAIN_MFG] = {
119 		.name = "mfg",
120 		.sta_mask = PWR_STATUS_MFG,
121 		.ctl_offs = 0x0338,
122 		.pwr_sta_offs = 0x0180,
123 		.pwr_sta2nd_offs = 0x0184,
124 		.sram_pdn_bits = GENMASK(9, 8),
125 		.sram_pdn_ack_bits = GENMASK(13, 12),
126 		.bp_cfg = {
127 			MT8365_BUS_PROT_INFRA_WR_TOPAXI(BIT(25)),
128 			MT8365_BUS_PROT_INFRA_WR_TOPAXI(
129 				MT8365_INFRA_TOPAXI_PROTECTEN_MFG_M0 |
130 				MT8365_INFRA_TOPAXI_PROTECTEN_INFRA2MFG),
131 		},
132 	},
133 	[MT8365_POWER_DOMAIN_CAM] = {
134 		.name = "cam",
135 		.sta_mask = BIT(25),
136 		.ctl_offs = 0x0344,
137 		.pwr_sta_offs = 0x0180,
138 		.pwr_sta2nd_offs = 0x0184,
139 		.sram_pdn_bits = GENMASK(9, 8),
140 		.sram_pdn_ack_bits = GENMASK(13, 12),
141 		.bp_cfg = {
142 			MT8365_BUS_PROT_INFRA_WR_TOPAXI_1(
143 				MT8365_INFRA_TOPAXI_PROTECTEN_1_CAM2MM_AXI_GALS_MST),
144 			MT8365_BUS_PROT_SMI_WR_CLAMP_EN_PORT(2),
145 		},
146 	},
147 	[MT8365_POWER_DOMAIN_VDEC] = {
148 		.name = "vdec",
149 		.sta_mask = BIT(31),
150 		.ctl_offs = 0x0370,
151 		.pwr_sta_offs = 0x0180,
152 		.pwr_sta2nd_offs = 0x0184,
153 		.sram_pdn_bits = GENMASK(8, 8),
154 		.sram_pdn_ack_bits = GENMASK(12, 12),
155 		.bp_cfg = {
156 			MT8365_BUS_PROT_SMI_WR_CLAMP_EN_PORT(3),
157 		},
158 	},
159 	[MT8365_POWER_DOMAIN_APU] = {
160 		.name = "apu",
161 		.sta_mask = BIT(16),
162 		.ctl_offs = 0x0378,
163 		.pwr_sta_offs = 0x0180,
164 		.pwr_sta2nd_offs = 0x0184,
165 		.sram_pdn_bits = GENMASK(14, 8),
166 		.sram_pdn_ack_bits = GENMASK(21, 15),
167 		.bp_cfg = {
168 			MT8365_BUS_PROT_INFRA_WR_TOPAXI_1(
169 				MT8365_INFRA_TOPAXI_PROTECTEN_1_APU2AP |
170 				MT8365_INFRA_TOPAXI_PROTECTEN_1_APU_CBIP_GALS_MST),
171 			MT8365_BUS_PROT_SMI_WR_CLAMP_EN_PORT(4),
172 		},
173 	},
174 	[MT8365_POWER_DOMAIN_DSP] = {
175 		.name = "dsp",
176 		.sta_mask = BIT(17),
177 		.ctl_offs = 0x037C,
178 		.pwr_sta_offs = 0x0180,
179 		.pwr_sta2nd_offs = 0x0184,
180 		.sram_pdn_bits = GENMASK(11, 8),
181 		.sram_pdn_ack_bits = GENMASK(15, 12),
182 		.bp_cfg = {
183 			MT8365_BUS_PROT_INFRA_WR_TOPAXI_1(
184 				MT8365_INFRA_TOPAXI_PROTECTEN_1_PWRDNREQ_INFRA_GALS_ADB |
185 				MT8365_INFRA_TOPAXI_PROTECTEN_1_AUDIO_BUS_DSP_M |
186 				MT8365_INFRA_TOPAXI_PROTECTEN_1_AUDIO_BUS_DSP_S),
187 		},
188 		.caps = MTK_SCPD_ACTIVE_WAKEUP,
189 	},
190 };
191 
192 static const struct scpsys_soc_data mt8365_scpsys_data = {
193 	.domains_data = scpsys_domain_data_mt8365,
194 	.num_domains = ARRAY_SIZE(scpsys_domain_data_mt8365),
195 };
196 
197 #endif /* __SOC_MEDIATEK_MT8365_PM_DOMAINS_H */
198