162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci#ifndef __SOC_MEDIATEK_MT8167_PM_DOMAINS_H
462306a36Sopenharmony_ci#define __SOC_MEDIATEK_MT8167_PM_DOMAINS_H
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#include "mtk-pm-domains.h"
762306a36Sopenharmony_ci#include <dt-bindings/power/mt8167-power.h>
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#define MT8167_PWR_STATUS_MFG_2D	BIT(24)
1062306a36Sopenharmony_ci#define MT8167_PWR_STATUS_MFG_ASYNC	BIT(25)
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci/*
1362306a36Sopenharmony_ci * MT8167 power domain support
1462306a36Sopenharmony_ci */
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_cistatic const struct scpsys_domain_data scpsys_domain_data_mt8167[] = {
1762306a36Sopenharmony_ci	[MT8167_POWER_DOMAIN_MM] = {
1862306a36Sopenharmony_ci		.name = "mm",
1962306a36Sopenharmony_ci		.sta_mask = PWR_STATUS_DISP,
2062306a36Sopenharmony_ci		.ctl_offs = SPM_DIS_PWR_CON,
2162306a36Sopenharmony_ci		.pwr_sta_offs = SPM_PWR_STATUS,
2262306a36Sopenharmony_ci		.pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
2362306a36Sopenharmony_ci		.sram_pdn_bits = GENMASK(11, 8),
2462306a36Sopenharmony_ci		.sram_pdn_ack_bits = GENMASK(12, 12),
2562306a36Sopenharmony_ci		.bp_infracfg = {
2662306a36Sopenharmony_ci			BUS_PROT_UPDATE_TOPAXI(MT8167_TOP_AXI_PROT_EN_MM_EMI |
2762306a36Sopenharmony_ci					       MT8167_TOP_AXI_PROT_EN_MCU_MM),
2862306a36Sopenharmony_ci		},
2962306a36Sopenharmony_ci		.caps = MTK_SCPD_ACTIVE_WAKEUP,
3062306a36Sopenharmony_ci	},
3162306a36Sopenharmony_ci	[MT8167_POWER_DOMAIN_VDEC] = {
3262306a36Sopenharmony_ci		.name = "vdec",
3362306a36Sopenharmony_ci		.sta_mask = PWR_STATUS_VDEC,
3462306a36Sopenharmony_ci		.ctl_offs = SPM_VDE_PWR_CON,
3562306a36Sopenharmony_ci		.pwr_sta_offs = SPM_PWR_STATUS,
3662306a36Sopenharmony_ci		.pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
3762306a36Sopenharmony_ci		.sram_pdn_bits = GENMASK(8, 8),
3862306a36Sopenharmony_ci		.sram_pdn_ack_bits = GENMASK(12, 12),
3962306a36Sopenharmony_ci		.caps = MTK_SCPD_ACTIVE_WAKEUP,
4062306a36Sopenharmony_ci	},
4162306a36Sopenharmony_ci	[MT8167_POWER_DOMAIN_ISP] = {
4262306a36Sopenharmony_ci		.name = "isp",
4362306a36Sopenharmony_ci		.sta_mask = PWR_STATUS_ISP,
4462306a36Sopenharmony_ci		.ctl_offs = SPM_ISP_PWR_CON,
4562306a36Sopenharmony_ci		.pwr_sta_offs = SPM_PWR_STATUS,
4662306a36Sopenharmony_ci		.pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
4762306a36Sopenharmony_ci		.sram_pdn_bits = GENMASK(11, 8),
4862306a36Sopenharmony_ci		.sram_pdn_ack_bits = GENMASK(13, 12),
4962306a36Sopenharmony_ci		.caps = MTK_SCPD_ACTIVE_WAKEUP,
5062306a36Sopenharmony_ci	},
5162306a36Sopenharmony_ci	[MT8167_POWER_DOMAIN_MFG_ASYNC] = {
5262306a36Sopenharmony_ci		.name = "mfg_async",
5362306a36Sopenharmony_ci		.sta_mask = MT8167_PWR_STATUS_MFG_ASYNC,
5462306a36Sopenharmony_ci		.ctl_offs = SPM_MFG_ASYNC_PWR_CON,
5562306a36Sopenharmony_ci		.pwr_sta_offs = SPM_PWR_STATUS,
5662306a36Sopenharmony_ci		.pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
5762306a36Sopenharmony_ci		.sram_pdn_bits = 0,
5862306a36Sopenharmony_ci		.sram_pdn_ack_bits = 0,
5962306a36Sopenharmony_ci		.bp_infracfg = {
6062306a36Sopenharmony_ci			BUS_PROT_UPDATE_TOPAXI(MT8167_TOP_AXI_PROT_EN_MCU_MFG |
6162306a36Sopenharmony_ci					       MT8167_TOP_AXI_PROT_EN_MFG_EMI),
6262306a36Sopenharmony_ci		},
6362306a36Sopenharmony_ci	},
6462306a36Sopenharmony_ci	[MT8167_POWER_DOMAIN_MFG_2D] = {
6562306a36Sopenharmony_ci		.name = "mfg_2d",
6662306a36Sopenharmony_ci		.sta_mask = MT8167_PWR_STATUS_MFG_2D,
6762306a36Sopenharmony_ci		.ctl_offs = SPM_MFG_2D_PWR_CON,
6862306a36Sopenharmony_ci		.pwr_sta_offs = SPM_PWR_STATUS,
6962306a36Sopenharmony_ci		.pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
7062306a36Sopenharmony_ci		.sram_pdn_bits = GENMASK(11, 8),
7162306a36Sopenharmony_ci		.sram_pdn_ack_bits = GENMASK(15, 12),
7262306a36Sopenharmony_ci	},
7362306a36Sopenharmony_ci	[MT8167_POWER_DOMAIN_MFG] = {
7462306a36Sopenharmony_ci		.name = "mfg",
7562306a36Sopenharmony_ci		.sta_mask = PWR_STATUS_MFG,
7662306a36Sopenharmony_ci		.ctl_offs = SPM_MFG_PWR_CON,
7762306a36Sopenharmony_ci		.pwr_sta_offs = SPM_PWR_STATUS,
7862306a36Sopenharmony_ci		.pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
7962306a36Sopenharmony_ci		.sram_pdn_bits = GENMASK(11, 8),
8062306a36Sopenharmony_ci		.sram_pdn_ack_bits = GENMASK(15, 12),
8162306a36Sopenharmony_ci	},
8262306a36Sopenharmony_ci	[MT8167_POWER_DOMAIN_CONN] = {
8362306a36Sopenharmony_ci		.name = "conn",
8462306a36Sopenharmony_ci		.sta_mask = PWR_STATUS_CONN,
8562306a36Sopenharmony_ci		.ctl_offs = SPM_CONN_PWR_CON,
8662306a36Sopenharmony_ci		.pwr_sta_offs = SPM_PWR_STATUS,
8762306a36Sopenharmony_ci		.pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
8862306a36Sopenharmony_ci		.sram_pdn_bits = GENMASK(8, 8),
8962306a36Sopenharmony_ci		.sram_pdn_ack_bits = 0,
9062306a36Sopenharmony_ci		.caps = MTK_SCPD_ACTIVE_WAKEUP,
9162306a36Sopenharmony_ci		.bp_infracfg = {
9262306a36Sopenharmony_ci			BUS_PROT_UPDATE_TOPAXI(MT8167_TOP_AXI_PROT_EN_CONN_EMI |
9362306a36Sopenharmony_ci					       MT8167_TOP_AXI_PROT_EN_CONN_MCU |
9462306a36Sopenharmony_ci					       MT8167_TOP_AXI_PROT_EN_MCU_CONN),
9562306a36Sopenharmony_ci		},
9662306a36Sopenharmony_ci	},
9762306a36Sopenharmony_ci};
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_cistatic const struct scpsys_soc_data mt8167_scpsys_data = {
10062306a36Sopenharmony_ci	.domains_data = scpsys_domain_data_mt8167,
10162306a36Sopenharmony_ci	.num_domains = ARRAY_SIZE(scpsys_domain_data_mt8167),
10262306a36Sopenharmony_ci};
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci#endif /* __SOC_MEDIATEK_MT8167_PM_DOMAINS_H */
10562306a36Sopenharmony_ci
106