xref: /linux/drivers/pmdomain/mediatek/mt8196-pm-domains.h (revision 5437b2813f8f8ed02ec2bca78de08a35fbaea85c)
1*5437b281SAngeloGioacchino Del Regno /* SPDX-License-Identifier: GPL-2.0-only */
2*5437b281SAngeloGioacchino Del Regno /*
3*5437b281SAngeloGioacchino Del Regno  * Copyright (c) 2025 Collabora Ltd
4*5437b281SAngeloGioacchino Del Regno  *                    AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
5*5437b281SAngeloGioacchino Del Regno  */
6*5437b281SAngeloGioacchino Del Regno 
7*5437b281SAngeloGioacchino Del Regno #ifndef __SOC_MEDIATEK_MT8196_PM_DOMAINS_H
8*5437b281SAngeloGioacchino Del Regno #define __SOC_MEDIATEK_MT8196_PM_DOMAINS_H
9*5437b281SAngeloGioacchino Del Regno 
10*5437b281SAngeloGioacchino Del Regno #include "mtk-pm-domains.h"
11*5437b281SAngeloGioacchino Del Regno #include <dt-bindings/power/mediatek,mt8196-power.h>
12*5437b281SAngeloGioacchino Del Regno 
13*5437b281SAngeloGioacchino Del Regno /*
14*5437b281SAngeloGioacchino Del Regno  * MT8196 and MT6991 power domain support
15*5437b281SAngeloGioacchino Del Regno  */
16*5437b281SAngeloGioacchino Del Regno 
17*5437b281SAngeloGioacchino Del Regno /* INFRA TOP_AXI registers */
18*5437b281SAngeloGioacchino Del Regno #define MT8196_TOP_AXI_PROT_EN_SET		0x4
19*5437b281SAngeloGioacchino Del Regno #define MT8196_TOP_AXI_PROT_EN_CLR		0x8
20*5437b281SAngeloGioacchino Del Regno #define MT8196_TOP_AXI_PROT_EN_STA		0xc
21*5437b281SAngeloGioacchino Del Regno  #define MT8196_TOP_AXI_PROT_EN_SLEEP0_MD	BIT(29)
22*5437b281SAngeloGioacchino Del Regno 
23*5437b281SAngeloGioacchino Del Regno #define MT8196_TOP_AXI_PROT_EN_1_SET		0x24
24*5437b281SAngeloGioacchino Del Regno #define MT8196_TOP_AXI_PROT_EN_1_CLR		0x28
25*5437b281SAngeloGioacchino Del Regno #define MT8196_TOP_AXI_PROT_EN_1_STA		0x2c
26*5437b281SAngeloGioacchino Del Regno  #define MT8196_TOP_AXI_PROT_EN_1_SLEEP1_MD	BIT(0)
27*5437b281SAngeloGioacchino Del Regno 
28*5437b281SAngeloGioacchino Del Regno /* SPM BUS_PROTECT registers */
29*5437b281SAngeloGioacchino Del Regno #define MT8196_SPM_BUS_PROTECT_CON_SET		0xdc
30*5437b281SAngeloGioacchino Del Regno #define MT8196_SPM_BUS_PROTECT_CON_CLR		0xe0
31*5437b281SAngeloGioacchino Del Regno #define MT8196_SPM_BUS_PROTECT_RDY		0x208
32*5437b281SAngeloGioacchino Del Regno  #define MT8196_SPM_PROT_EN_BUS_CONN		BIT(1)
33*5437b281SAngeloGioacchino Del Regno  #define MT8196_SPM_PROT_EN_BUS_SSUSB_DP_PHY_P0	BIT(6)
34*5437b281SAngeloGioacchino Del Regno  #define MT8196_SPM_PROT_EN_BUS_SSUSB_P0	BIT(7)
35*5437b281SAngeloGioacchino Del Regno  #define MT8196_SPM_PROT_EN_BUS_SSUSB_P1	BIT(8)
36*5437b281SAngeloGioacchino Del Regno  #define MT8196_SPM_PROT_EN_BUS_SSUSB_P23	BIT(9)
37*5437b281SAngeloGioacchino Del Regno  #define MT8196_SPM_PROT_EN_BUS_SSUSB_PHY_P2	BIT(10)
38*5437b281SAngeloGioacchino Del Regno  #define MT8196_SPM_PROT_EN_BUS_PEXTP_MAC0	BIT(13)
39*5437b281SAngeloGioacchino Del Regno  #define MT8196_SPM_PROT_EN_BUS_PEXTP_MAC1	BIT(14)
40*5437b281SAngeloGioacchino Del Regno  #define MT8196_SPM_PROT_EN_BUS_PEXTP_MAC2	BIT(15)
41*5437b281SAngeloGioacchino Del Regno  #define MT8196_SPM_PROT_EN_BUS_PEXTP_PHY0	BIT(16)
42*5437b281SAngeloGioacchino Del Regno  #define MT8196_SPM_PROT_EN_BUS_PEXTP_PHY1	BIT(17)
43*5437b281SAngeloGioacchino Del Regno  #define MT8196_SPM_PROT_EN_BUS_PEXTP_PHY2	BIT(18)
44*5437b281SAngeloGioacchino Del Regno  #define MT8196_SPM_PROT_EN_BUS_AUDIO		BIT(19)
45*5437b281SAngeloGioacchino Del Regno  #define MT8196_SPM_PROT_EN_BUS_ADSP_TOP	BIT(21)
46*5437b281SAngeloGioacchino Del Regno  #define MT8196_SPM_PROT_EN_BUS_ADSP_INFRA	BIT(22)
47*5437b281SAngeloGioacchino Del Regno  #define MT8196_SPM_PROT_EN_BUS_ADSP_AO		BIT(23)
48*5437b281SAngeloGioacchino Del Regno  #define MT8196_SPM_PROT_EN_BUS_MM_PROC		BIT(24)
49*5437b281SAngeloGioacchino Del Regno 
50*5437b281SAngeloGioacchino Del Regno /* PWR_CON registers */
51*5437b281SAngeloGioacchino Del Regno #define MT8196_PWR_ACK				BIT(30)
52*5437b281SAngeloGioacchino Del Regno #define MT8196_PWR_ACK_2ND			BIT(31)
53*5437b281SAngeloGioacchino Del Regno 
54*5437b281SAngeloGioacchino Del Regno static enum scpsys_bus_prot_block scpsys_bus_prot_blocks_mt8196[] = {
55*5437b281SAngeloGioacchino Del Regno 	BUS_PROT_BLOCK_INFRA, BUS_PROT_BLOCK_SPM
56*5437b281SAngeloGioacchino Del Regno };
57*5437b281SAngeloGioacchino Del Regno 
58*5437b281SAngeloGioacchino Del Regno static const struct scpsys_domain_data scpsys_domain_data_mt8196[] = {
59*5437b281SAngeloGioacchino Del Regno 	[MT8196_POWER_DOMAIN_MD] = {
60*5437b281SAngeloGioacchino Del Regno 		.name = "md",
61*5437b281SAngeloGioacchino Del Regno 		.sta_mask = MT8196_PWR_ACK,
62*5437b281SAngeloGioacchino Del Regno 		.sta2nd_mask = MT8196_PWR_ACK_2ND,
63*5437b281SAngeloGioacchino Del Regno 		.ctl_offs = 0xe00,
64*5437b281SAngeloGioacchino Del Regno 		.pwr_sta_offs = 0xe00,
65*5437b281SAngeloGioacchino Del Regno 		.pwr_sta2nd_offs = 0xe00,
66*5437b281SAngeloGioacchino Del Regno 		.ext_buck_iso_offs = 0xefc,
67*5437b281SAngeloGioacchino Del Regno 		.ext_buck_iso_mask = GENMASK(1, 0),
68*5437b281SAngeloGioacchino Del Regno 		.bp_cfg = {
69*5437b281SAngeloGioacchino Del Regno 			BUS_PROT_WR_IGN(INFRA, MT8196_TOP_AXI_PROT_EN_SLEEP0_MD,
70*5437b281SAngeloGioacchino Del Regno 					MT8196_TOP_AXI_PROT_EN_SET,
71*5437b281SAngeloGioacchino Del Regno 					MT8196_TOP_AXI_PROT_EN_CLR,
72*5437b281SAngeloGioacchino Del Regno 					MT8196_TOP_AXI_PROT_EN_STA),
73*5437b281SAngeloGioacchino Del Regno 			BUS_PROT_WR_IGN(INFRA, MT8196_TOP_AXI_PROT_EN_1_SLEEP1_MD,
74*5437b281SAngeloGioacchino Del Regno 					MT8196_TOP_AXI_PROT_EN_1_SET,
75*5437b281SAngeloGioacchino Del Regno 					MT8196_TOP_AXI_PROT_EN_1_CLR,
76*5437b281SAngeloGioacchino Del Regno 					MT8196_TOP_AXI_PROT_EN_1_STA),
77*5437b281SAngeloGioacchino Del Regno 		},
78*5437b281SAngeloGioacchino Del Regno 		.caps = MTK_SCPD_MODEM_PWRSEQ | MTK_SCPD_EXT_BUCK_ISO |
79*5437b281SAngeloGioacchino Del Regno 			MTK_SCPD_SKIP_RESET_B | MTK_SCPD_KEEP_DEFAULT_OFF,
80*5437b281SAngeloGioacchino Del Regno 	},
81*5437b281SAngeloGioacchino Del Regno 	[MT8196_POWER_DOMAIN_CONN] = {
82*5437b281SAngeloGioacchino Del Regno 		.name = "conn",
83*5437b281SAngeloGioacchino Del Regno 		.sta_mask = MT8196_PWR_ACK,
84*5437b281SAngeloGioacchino Del Regno 		.sta2nd_mask = MT8196_PWR_ACK_2ND,
85*5437b281SAngeloGioacchino Del Regno 		.ctl_offs = 0xe04,
86*5437b281SAngeloGioacchino Del Regno 		.pwr_sta_offs = 0xe04,
87*5437b281SAngeloGioacchino Del Regno 		.pwr_sta2nd_offs = 0xe04,
88*5437b281SAngeloGioacchino Del Regno 		.bp_cfg = {
89*5437b281SAngeloGioacchino Del Regno 			BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_CONN,
90*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_SET,
91*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_CLR,
92*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_RDY),
93*5437b281SAngeloGioacchino Del Regno 		},
94*5437b281SAngeloGioacchino Del Regno 		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
95*5437b281SAngeloGioacchino Del Regno 		.rtff_type = SCPSYS_RTFF_TYPE_GENERIC,
96*5437b281SAngeloGioacchino Del Regno 	},
97*5437b281SAngeloGioacchino Del Regno 	[MT8196_POWER_DOMAIN_SSUSB_DP_PHY_P0] = {
98*5437b281SAngeloGioacchino Del Regno 		.name = "ssusb-dp-phy-p0",
99*5437b281SAngeloGioacchino Del Regno 		.sta_mask = MT8196_PWR_ACK,
100*5437b281SAngeloGioacchino Del Regno 		.sta2nd_mask = MT8196_PWR_ACK_2ND,
101*5437b281SAngeloGioacchino Del Regno 		.ctl_offs = 0xe18,
102*5437b281SAngeloGioacchino Del Regno 		.pwr_sta_offs = 0xe18,
103*5437b281SAngeloGioacchino Del Regno 		.pwr_sta2nd_offs = 0xe18,
104*5437b281SAngeloGioacchino Del Regno 		.bp_cfg = {
105*5437b281SAngeloGioacchino Del Regno 			BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_SSUSB_DP_PHY_P0,
106*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_SET,
107*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_CLR,
108*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_RDY),
109*5437b281SAngeloGioacchino Del Regno 		},
110*5437b281SAngeloGioacchino Del Regno 		.caps = MTK_SCPD_ALWAYS_ON,
111*5437b281SAngeloGioacchino Del Regno 		.rtff_type = SCPSYS_RTFF_TYPE_GENERIC,
112*5437b281SAngeloGioacchino Del Regno 	},
113*5437b281SAngeloGioacchino Del Regno 	[MT8196_POWER_DOMAIN_SSUSB_P0] = {
114*5437b281SAngeloGioacchino Del Regno 		.name = "ssusb-p0",
115*5437b281SAngeloGioacchino Del Regno 		.sta_mask = MT8196_PWR_ACK,
116*5437b281SAngeloGioacchino Del Regno 		.sta2nd_mask = MT8196_PWR_ACK_2ND,
117*5437b281SAngeloGioacchino Del Regno 		.ctl_offs = 0xe1c,
118*5437b281SAngeloGioacchino Del Regno 		.pwr_sta_offs = 0xe1c,
119*5437b281SAngeloGioacchino Del Regno 		.pwr_sta2nd_offs = 0xe1c,
120*5437b281SAngeloGioacchino Del Regno 		.sram_pdn_bits = BIT(8),
121*5437b281SAngeloGioacchino Del Regno 		.sram_pdn_ack_bits = BIT(12),
122*5437b281SAngeloGioacchino Del Regno 		.bp_cfg = {
123*5437b281SAngeloGioacchino Del Regno 			BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_SSUSB_P0,
124*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_SET,
125*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_CLR,
126*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_RDY),
127*5437b281SAngeloGioacchino Del Regno 		},
128*5437b281SAngeloGioacchino Del Regno 		.caps = MTK_SCPD_ALWAYS_ON,
129*5437b281SAngeloGioacchino Del Regno 		.rtff_type = SCPSYS_RTFF_TYPE_GENERIC,
130*5437b281SAngeloGioacchino Del Regno 	},
131*5437b281SAngeloGioacchino Del Regno 	[MT8196_POWER_DOMAIN_SSUSB_P1] = {
132*5437b281SAngeloGioacchino Del Regno 		.name = "ssusb-p1",
133*5437b281SAngeloGioacchino Del Regno 		.sta_mask = MT8196_PWR_ACK,
134*5437b281SAngeloGioacchino Del Regno 		.sta2nd_mask = MT8196_PWR_ACK_2ND,
135*5437b281SAngeloGioacchino Del Regno 		.ctl_offs = 0xe20,
136*5437b281SAngeloGioacchino Del Regno 		.pwr_sta_offs = 0xe20,
137*5437b281SAngeloGioacchino Del Regno 		.pwr_sta2nd_offs = 0xe20,
138*5437b281SAngeloGioacchino Del Regno 		.sram_pdn_bits = BIT(8),
139*5437b281SAngeloGioacchino Del Regno 		.sram_pdn_ack_bits = BIT(12),
140*5437b281SAngeloGioacchino Del Regno 		.bp_cfg = {
141*5437b281SAngeloGioacchino Del Regno 			BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_SSUSB_P1,
142*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_SET,
143*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_CLR,
144*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_RDY),
145*5437b281SAngeloGioacchino Del Regno 		},
146*5437b281SAngeloGioacchino Del Regno 		.caps = MTK_SCPD_ALWAYS_ON,
147*5437b281SAngeloGioacchino Del Regno 		.rtff_type = SCPSYS_RTFF_TYPE_GENERIC,
148*5437b281SAngeloGioacchino Del Regno 	},
149*5437b281SAngeloGioacchino Del Regno 	[MT8196_POWER_DOMAIN_SSUSB_P23] = {
150*5437b281SAngeloGioacchino Del Regno 		.name = "ssusb-p23",
151*5437b281SAngeloGioacchino Del Regno 		.sta_mask = MT8196_PWR_ACK,
152*5437b281SAngeloGioacchino Del Regno 		.sta2nd_mask = MT8196_PWR_ACK_2ND,
153*5437b281SAngeloGioacchino Del Regno 		.ctl_offs = 0xe24,
154*5437b281SAngeloGioacchino Del Regno 		.pwr_sta_offs = 0xe24,
155*5437b281SAngeloGioacchino Del Regno 		.pwr_sta2nd_offs = 0xe24,
156*5437b281SAngeloGioacchino Del Regno 		.bp_cfg = {
157*5437b281SAngeloGioacchino Del Regno 			BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_SSUSB_P23,
158*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_SET,
159*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_CLR,
160*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_RDY),
161*5437b281SAngeloGioacchino Del Regno 		},
162*5437b281SAngeloGioacchino Del Regno 		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
163*5437b281SAngeloGioacchino Del Regno 		.rtff_type = SCPSYS_RTFF_TYPE_GENERIC,
164*5437b281SAngeloGioacchino Del Regno 	},
165*5437b281SAngeloGioacchino Del Regno 	[MT8196_POWER_DOMAIN_SSUSB_PHY_P2] = {
166*5437b281SAngeloGioacchino Del Regno 		.name = "ssusb-phy-p2",
167*5437b281SAngeloGioacchino Del Regno 		.sta_mask = MT8196_PWR_ACK,
168*5437b281SAngeloGioacchino Del Regno 		.sta2nd_mask = MT8196_PWR_ACK_2ND,
169*5437b281SAngeloGioacchino Del Regno 		.ctl_offs = 0xe28,
170*5437b281SAngeloGioacchino Del Regno 		.pwr_sta_offs = 0xe28,
171*5437b281SAngeloGioacchino Del Regno 		.pwr_sta2nd_offs = 0xe28,
172*5437b281SAngeloGioacchino Del Regno 		.sram_pdn_bits = BIT(8),
173*5437b281SAngeloGioacchino Del Regno 		.sram_pdn_ack_bits = BIT(12),
174*5437b281SAngeloGioacchino Del Regno 		.bp_cfg = {
175*5437b281SAngeloGioacchino Del Regno 			BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_SSUSB_PHY_P2,
176*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_SET,
177*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_CLR,
178*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_RDY),
179*5437b281SAngeloGioacchino Del Regno 		},
180*5437b281SAngeloGioacchino Del Regno 		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
181*5437b281SAngeloGioacchino Del Regno 		.rtff_type = SCPSYS_RTFF_TYPE_GENERIC,
182*5437b281SAngeloGioacchino Del Regno 	},
183*5437b281SAngeloGioacchino Del Regno 	[MT8196_POWER_DOMAIN_PEXTP_MAC0] = {
184*5437b281SAngeloGioacchino Del Regno 		.name = "pextp-mac0",
185*5437b281SAngeloGioacchino Del Regno 		.sta_mask = MT8196_PWR_ACK,
186*5437b281SAngeloGioacchino Del Regno 		.sta2nd_mask = MT8196_PWR_ACK_2ND,
187*5437b281SAngeloGioacchino Del Regno 		.ctl_offs = 0xe34,
188*5437b281SAngeloGioacchino Del Regno 		.pwr_sta_offs = 0xe34,
189*5437b281SAngeloGioacchino Del Regno 		.pwr_sta2nd_offs = 0xe34,
190*5437b281SAngeloGioacchino Del Regno 		.sram_pdn_bits = BIT(8),
191*5437b281SAngeloGioacchino Del Regno 		.sram_pdn_ack_bits = BIT(12),
192*5437b281SAngeloGioacchino Del Regno 		.bp_cfg = {
193*5437b281SAngeloGioacchino Del Regno 			BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_PEXTP_MAC0,
194*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_SET,
195*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_CLR,
196*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_RDY),
197*5437b281SAngeloGioacchino Del Regno 		},
198*5437b281SAngeloGioacchino Del Regno 		.rtff_type = SCPSYS_RTFF_TYPE_PCIE_PHY,
199*5437b281SAngeloGioacchino Del Regno 	},
200*5437b281SAngeloGioacchino Del Regno 	[MT8196_POWER_DOMAIN_PEXTP_MAC1] = {
201*5437b281SAngeloGioacchino Del Regno 		.name = "pextp-mac1",
202*5437b281SAngeloGioacchino Del Regno 		.sta_mask = MT8196_PWR_ACK,
203*5437b281SAngeloGioacchino Del Regno 		.sta2nd_mask = MT8196_PWR_ACK_2ND,
204*5437b281SAngeloGioacchino Del Regno 		.ctl_offs = 0xe38,
205*5437b281SAngeloGioacchino Del Regno 		.pwr_sta_offs = 0xe38,
206*5437b281SAngeloGioacchino Del Regno 		.pwr_sta2nd_offs = 0xe38,
207*5437b281SAngeloGioacchino Del Regno 		.sram_pdn_bits = BIT(8),
208*5437b281SAngeloGioacchino Del Regno 		.sram_pdn_ack_bits = BIT(12),
209*5437b281SAngeloGioacchino Del Regno 		.bp_cfg = {
210*5437b281SAngeloGioacchino Del Regno 			BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_PEXTP_MAC1,
211*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_SET,
212*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_CLR,
213*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_RDY),
214*5437b281SAngeloGioacchino Del Regno 		},
215*5437b281SAngeloGioacchino Del Regno 		.rtff_type = SCPSYS_RTFF_TYPE_PCIE_PHY,
216*5437b281SAngeloGioacchino Del Regno 	},
217*5437b281SAngeloGioacchino Del Regno 	[MT8196_POWER_DOMAIN_PEXTP_MAC2] = {
218*5437b281SAngeloGioacchino Del Regno 		.name = "pextp-mac2",
219*5437b281SAngeloGioacchino Del Regno 		.sta_mask = MT8196_PWR_ACK,
220*5437b281SAngeloGioacchino Del Regno 		.sta2nd_mask = MT8196_PWR_ACK_2ND,
221*5437b281SAngeloGioacchino Del Regno 		.ctl_offs = 0xe3c,
222*5437b281SAngeloGioacchino Del Regno 		.pwr_sta_offs = 0xe3c,
223*5437b281SAngeloGioacchino Del Regno 		.pwr_sta2nd_offs = 0xe3c,
224*5437b281SAngeloGioacchino Del Regno 		.sram_pdn_bits = BIT(8),
225*5437b281SAngeloGioacchino Del Regno 		.sram_pdn_ack_bits = BIT(12),
226*5437b281SAngeloGioacchino Del Regno 		.bp_cfg = {
227*5437b281SAngeloGioacchino Del Regno 			BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_PEXTP_MAC2,
228*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_SET,
229*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_CLR,
230*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_RDY),
231*5437b281SAngeloGioacchino Del Regno 		},
232*5437b281SAngeloGioacchino Del Regno 		.rtff_type = SCPSYS_RTFF_TYPE_PCIE_PHY,
233*5437b281SAngeloGioacchino Del Regno 	},
234*5437b281SAngeloGioacchino Del Regno 	[MT8196_POWER_DOMAIN_PEXTP_PHY0] = {
235*5437b281SAngeloGioacchino Del Regno 		.name = "pextp-phy0",
236*5437b281SAngeloGioacchino Del Regno 		.sta_mask = MT8196_PWR_ACK,
237*5437b281SAngeloGioacchino Del Regno 		.sta2nd_mask = MT8196_PWR_ACK_2ND,
238*5437b281SAngeloGioacchino Del Regno 		.ctl_offs = 0xe40,
239*5437b281SAngeloGioacchino Del Regno 		.pwr_sta_offs = 0xe40,
240*5437b281SAngeloGioacchino Del Regno 		.pwr_sta2nd_offs = 0xe40,
241*5437b281SAngeloGioacchino Del Regno 		.bp_cfg = {
242*5437b281SAngeloGioacchino Del Regno 			BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_PEXTP_PHY0,
243*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_SET,
244*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_CLR,
245*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_RDY),
246*5437b281SAngeloGioacchino Del Regno 		},
247*5437b281SAngeloGioacchino Del Regno 		.rtff_type = SCPSYS_RTFF_TYPE_PCIE_PHY,
248*5437b281SAngeloGioacchino Del Regno 	},
249*5437b281SAngeloGioacchino Del Regno 	[MT8196_POWER_DOMAIN_PEXTP_PHY1] = {
250*5437b281SAngeloGioacchino Del Regno 		.name = "pextp-phy1",
251*5437b281SAngeloGioacchino Del Regno 		.sta_mask = MT8196_PWR_ACK,
252*5437b281SAngeloGioacchino Del Regno 		.sta2nd_mask = MT8196_PWR_ACK_2ND,
253*5437b281SAngeloGioacchino Del Regno 		.ctl_offs = 0xe44,
254*5437b281SAngeloGioacchino Del Regno 		.pwr_sta_offs = 0xe44,
255*5437b281SAngeloGioacchino Del Regno 		.pwr_sta2nd_offs = 0xe44,
256*5437b281SAngeloGioacchino Del Regno 		.bp_cfg = {
257*5437b281SAngeloGioacchino Del Regno 			BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_PEXTP_PHY1,
258*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_SET,
259*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_CLR,
260*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_RDY),
261*5437b281SAngeloGioacchino Del Regno 		},
262*5437b281SAngeloGioacchino Del Regno 		.rtff_type = SCPSYS_RTFF_TYPE_PCIE_PHY,
263*5437b281SAngeloGioacchino Del Regno 	},
264*5437b281SAngeloGioacchino Del Regno 	[MT8196_POWER_DOMAIN_PEXTP_PHY2] = {
265*5437b281SAngeloGioacchino Del Regno 		.name = "pextp-phy2",
266*5437b281SAngeloGioacchino Del Regno 		.sta_mask = MT8196_PWR_ACK,
267*5437b281SAngeloGioacchino Del Regno 		.sta2nd_mask = MT8196_PWR_ACK_2ND,
268*5437b281SAngeloGioacchino Del Regno 		.ctl_offs = 0xe48,
269*5437b281SAngeloGioacchino Del Regno 		.pwr_sta_offs = 0xe48,
270*5437b281SAngeloGioacchino Del Regno 		.pwr_sta2nd_offs = 0xe48,
271*5437b281SAngeloGioacchino Del Regno 		.bp_cfg = {
272*5437b281SAngeloGioacchino Del Regno 			BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_PEXTP_PHY2,
273*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_SET,
274*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_CLR,
275*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_RDY),
276*5437b281SAngeloGioacchino Del Regno 		},
277*5437b281SAngeloGioacchino Del Regno 		.rtff_type = SCPSYS_RTFF_TYPE_PCIE_PHY,
278*5437b281SAngeloGioacchino Del Regno 	},
279*5437b281SAngeloGioacchino Del Regno 	[MT8196_POWER_DOMAIN_AUDIO] = {
280*5437b281SAngeloGioacchino Del Regno 		.name = "audio",
281*5437b281SAngeloGioacchino Del Regno 		.sta_mask = MT8196_PWR_ACK,
282*5437b281SAngeloGioacchino Del Regno 		.sta2nd_mask = MT8196_PWR_ACK_2ND,
283*5437b281SAngeloGioacchino Del Regno 		.ctl_offs = 0xe4c,
284*5437b281SAngeloGioacchino Del Regno 		.pwr_sta_offs = 0xe4c,
285*5437b281SAngeloGioacchino Del Regno 		.pwr_sta2nd_offs = 0xe4c,
286*5437b281SAngeloGioacchino Del Regno 		.sram_pdn_bits = BIT(8),
287*5437b281SAngeloGioacchino Del Regno 		.sram_pdn_ack_bits = BIT(12),
288*5437b281SAngeloGioacchino Del Regno 		.bp_cfg = {
289*5437b281SAngeloGioacchino Del Regno 			BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_AUDIO,
290*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_SET,
291*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_CLR,
292*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_RDY),
293*5437b281SAngeloGioacchino Del Regno 		},
294*5437b281SAngeloGioacchino Del Regno 		.rtff_type = SCPSYS_RTFF_TYPE_GENERIC,
295*5437b281SAngeloGioacchino Del Regno 	},
296*5437b281SAngeloGioacchino Del Regno 	[MT8196_POWER_DOMAIN_ADSP_TOP_DORMANT] = {
297*5437b281SAngeloGioacchino Del Regno 		.name = "adsp-top-dormant",
298*5437b281SAngeloGioacchino Del Regno 		.sta_mask = MT8196_PWR_ACK,
299*5437b281SAngeloGioacchino Del Regno 		.sta2nd_mask = MT8196_PWR_ACK_2ND,
300*5437b281SAngeloGioacchino Del Regno 		.ctl_offs = 0xe54,
301*5437b281SAngeloGioacchino Del Regno 		.pwr_sta_offs = 0xe54,
302*5437b281SAngeloGioacchino Del Regno 		.pwr_sta2nd_offs = 0xe54,
303*5437b281SAngeloGioacchino Del Regno 		/* Note: This is not managing powerdown (pdn), but sleep instead (slp) */
304*5437b281SAngeloGioacchino Del Regno 		.sram_pdn_bits = BIT(9),
305*5437b281SAngeloGioacchino Del Regno 		.sram_pdn_ack_bits = BIT(13),
306*5437b281SAngeloGioacchino Del Regno 		.bp_cfg = {
307*5437b281SAngeloGioacchino Del Regno 			BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_ADSP_TOP,
308*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_SET,
309*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_CLR,
310*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_RDY),
311*5437b281SAngeloGioacchino Del Regno 		},
312*5437b281SAngeloGioacchino Del Regno 		.caps = MTK_SCPD_SRAM_ISO | MTK_SCPD_SRAM_PDN_INVERTED,
313*5437b281SAngeloGioacchino Del Regno 	},
314*5437b281SAngeloGioacchino Del Regno 	[MT8196_POWER_DOMAIN_ADSP_INFRA] = {
315*5437b281SAngeloGioacchino Del Regno 		.name = "adsp-infra",
316*5437b281SAngeloGioacchino Del Regno 		.sta_mask = MT8196_PWR_ACK,
317*5437b281SAngeloGioacchino Del Regno 		.sta2nd_mask = MT8196_PWR_ACK_2ND,
318*5437b281SAngeloGioacchino Del Regno 		.ctl_offs = 0xe58,
319*5437b281SAngeloGioacchino Del Regno 		.pwr_sta_offs = 0xe58,
320*5437b281SAngeloGioacchino Del Regno 		.pwr_sta2nd_offs = 0xe58,
321*5437b281SAngeloGioacchino Del Regno 		.bp_cfg = {
322*5437b281SAngeloGioacchino Del Regno 			BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_ADSP_INFRA,
323*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_SET,
324*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_CLR,
325*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_RDY),
326*5437b281SAngeloGioacchino Del Regno 		},
327*5437b281SAngeloGioacchino Del Regno 		.caps = MTK_SCPD_ALWAYS_ON,
328*5437b281SAngeloGioacchino Del Regno 		.rtff_type = SCPSYS_RTFF_TYPE_GENERIC,
329*5437b281SAngeloGioacchino Del Regno 	},
330*5437b281SAngeloGioacchino Del Regno 	[MT8196_POWER_DOMAIN_ADSP_AO] = {
331*5437b281SAngeloGioacchino Del Regno 		.name = "adsp-ao",
332*5437b281SAngeloGioacchino Del Regno 		.sta_mask = MT8196_PWR_ACK,
333*5437b281SAngeloGioacchino Del Regno 		.sta2nd_mask = MT8196_PWR_ACK_2ND,
334*5437b281SAngeloGioacchino Del Regno 		.ctl_offs = 0xe5c,
335*5437b281SAngeloGioacchino Del Regno 		.pwr_sta_offs = 0xe5c,
336*5437b281SAngeloGioacchino Del Regno 		.pwr_sta2nd_offs = 0xe5c,
337*5437b281SAngeloGioacchino Del Regno 		.bp_cfg = {
338*5437b281SAngeloGioacchino Del Regno 			BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_ADSP_AO,
339*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_SET,
340*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_CON_CLR,
341*5437b281SAngeloGioacchino Del Regno 					MT8196_SPM_BUS_PROTECT_RDY),
342*5437b281SAngeloGioacchino Del Regno 		},
343*5437b281SAngeloGioacchino Del Regno 		.caps = MTK_SCPD_ALWAYS_ON,
344*5437b281SAngeloGioacchino Del Regno 		.rtff_type = SCPSYS_RTFF_TYPE_GENERIC,
345*5437b281SAngeloGioacchino Del Regno 	},
346*5437b281SAngeloGioacchino Del Regno };
347*5437b281SAngeloGioacchino Del Regno 
348*5437b281SAngeloGioacchino Del Regno static const struct scpsys_hwv_domain_data scpsys_hwv_domain_data_mt8196[] = {
349*5437b281SAngeloGioacchino Del Regno 	[MT8196_POWER_DOMAIN_MM_PROC_DORMANT] = {
350*5437b281SAngeloGioacchino Del Regno 		.name = "mm-proc-dormant",
351*5437b281SAngeloGioacchino Del Regno 		.set = 0x0218,
352*5437b281SAngeloGioacchino Del Regno 		.clr = 0x021c,
353*5437b281SAngeloGioacchino Del Regno 		.done = 0x141c,
354*5437b281SAngeloGioacchino Del Regno 		.en = 0x1410,
355*5437b281SAngeloGioacchino Del Regno 		.set_sta = 0x146c,
356*5437b281SAngeloGioacchino Del Regno 		.clr_sta = 0x1470,
357*5437b281SAngeloGioacchino Del Regno 		.setclr_bit = 0,
358*5437b281SAngeloGioacchino Del Regno 		.caps = MTK_SCPD_ALWAYS_ON,
359*5437b281SAngeloGioacchino Del Regno 	},
360*5437b281SAngeloGioacchino Del Regno 	[MT8196_POWER_DOMAIN_SSR] = {
361*5437b281SAngeloGioacchino Del Regno 		.name = "ssrsys",
362*5437b281SAngeloGioacchino Del Regno 		.set = 0x0218,
363*5437b281SAngeloGioacchino Del Regno 		.clr = 0x021c,
364*5437b281SAngeloGioacchino Del Regno 		.done = 0x141c,
365*5437b281SAngeloGioacchino Del Regno 		.en = 0x1410,
366*5437b281SAngeloGioacchino Del Regno 		.set_sta = 0x146c,
367*5437b281SAngeloGioacchino Del Regno 		.clr_sta = 0x1470,
368*5437b281SAngeloGioacchino Del Regno 		.setclr_bit = 1,
369*5437b281SAngeloGioacchino Del Regno 	},
370*5437b281SAngeloGioacchino Del Regno };
371*5437b281SAngeloGioacchino Del Regno 
372*5437b281SAngeloGioacchino Del Regno static const struct scpsys_soc_data mt8196_scpsys_data = {
373*5437b281SAngeloGioacchino Del Regno 	.domains_data = scpsys_domain_data_mt8196,
374*5437b281SAngeloGioacchino Del Regno 	.num_domains = ARRAY_SIZE(scpsys_domain_data_mt8196),
375*5437b281SAngeloGioacchino Del Regno 	.bus_prot_blocks = scpsys_bus_prot_blocks_mt8196,
376*5437b281SAngeloGioacchino Del Regno 	.num_bus_prot_blocks = ARRAY_SIZE(scpsys_bus_prot_blocks_mt8196),
377*5437b281SAngeloGioacchino Del Regno 	.type = SCPSYS_MTCMOS_TYPE_DIRECT_CTL,
378*5437b281SAngeloGioacchino Del Regno };
379*5437b281SAngeloGioacchino Del Regno 
380*5437b281SAngeloGioacchino Del Regno static const struct scpsys_soc_data mt8196_scpsys_hwv_data = {
381*5437b281SAngeloGioacchino Del Regno 	.hwv_domains_data = scpsys_hwv_domain_data_mt8196,
382*5437b281SAngeloGioacchino Del Regno 	.num_hwv_domains = ARRAY_SIZE(scpsys_hwv_domain_data_mt8196),
383*5437b281SAngeloGioacchino Del Regno 	.type = SCPSYS_MTCMOS_TYPE_HW_VOTER,
384*5437b281SAngeloGioacchino Del Regno };
385*5437b281SAngeloGioacchino Del Regno 
386*5437b281SAngeloGioacchino Del Regno #endif /* __SOC_MEDIATEK_MT8196_PM_DOMAINS_H */
387