GNU Linux-libre 6.8.9-gnu
[releases.git] / drivers / pmdomain / mediatek / mt8365-pm-domains.h
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 */