soc: mediatek: Move power-domain drivers to the genpd dir
authorUlf Hansson <ulf.hansson@linaro.org>
Wed, 5 Jul 2023 15:04:34 +0000 (17:04 +0200)
committerUlf Hansson <ulf.hansson@linaro.org>
Tue, 11 Jul 2023 13:30:09 +0000 (15:30 +0200)
To simplify with maintenance let's move the mediatek power-domain drivers
to the new genpd directory. Going forward, patches are intended to be
managed through a separate git tree, according to MAINTAINERS.

Cc: Matthias Brugger <matthias.bgg@gmail.com>
Cc: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Cc: <linux-mediatek@lists.infradead.org>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
25 files changed:
drivers/genpd/Makefile
drivers/genpd/mediatek/Makefile [new file with mode: 0644]
drivers/genpd/mediatek/mt6795-pm-domains.h [new file with mode: 0644]
drivers/genpd/mediatek/mt8167-pm-domains.h [new file with mode: 0644]
drivers/genpd/mediatek/mt8173-pm-domains.h [new file with mode: 0644]
drivers/genpd/mediatek/mt8183-pm-domains.h [new file with mode: 0644]
drivers/genpd/mediatek/mt8186-pm-domains.h [new file with mode: 0644]
drivers/genpd/mediatek/mt8188-pm-domains.h [new file with mode: 0644]
drivers/genpd/mediatek/mt8192-pm-domains.h [new file with mode: 0644]
drivers/genpd/mediatek/mt8195-pm-domains.h [new file with mode: 0644]
drivers/genpd/mediatek/mtk-pm-domains.c [new file with mode: 0644]
drivers/genpd/mediatek/mtk-pm-domains.h [new file with mode: 0644]
drivers/genpd/mediatek/mtk-scpsys.c [new file with mode: 0644]
drivers/soc/mediatek/Makefile
drivers/soc/mediatek/mt6795-pm-domains.h [deleted file]
drivers/soc/mediatek/mt8167-pm-domains.h [deleted file]
drivers/soc/mediatek/mt8173-pm-domains.h [deleted file]
drivers/soc/mediatek/mt8183-pm-domains.h [deleted file]
drivers/soc/mediatek/mt8186-pm-domains.h [deleted file]
drivers/soc/mediatek/mt8188-pm-domains.h [deleted file]
drivers/soc/mediatek/mt8192-pm-domains.h [deleted file]
drivers/soc/mediatek/mt8195-pm-domains.h [deleted file]
drivers/soc/mediatek/mtk-pm-domains.c [deleted file]
drivers/soc/mediatek/mtk-pm-domains.h [deleted file]
drivers/soc/mediatek/mtk-scpsys.c [deleted file]

index 6b9e9fe907f37a873a305d99edf7f425f72cdc7d..1a0a56925756c241423c5a07639b036f7ffa7e41 100644 (file)
@@ -3,3 +3,4 @@ obj-y                                   += actions/
 obj-y                                  += amlogic/
 obj-y                                  += apple/
 obj-y                                  += bcm/
+obj-y                                  += mediatek/
diff --git a/drivers/genpd/mediatek/Makefile b/drivers/genpd/mediatek/Makefile
new file mode 100644 (file)
index 0000000..8cde09e
--- /dev/null
@@ -0,0 +1,3 @@
+# SPDX-License-Identifier: GPL-2.0-only
+obj-$(CONFIG_MTK_SCPSYS)               += mtk-scpsys.o
+obj-$(CONFIG_MTK_SCPSYS_PM_DOMAINS)    += mtk-pm-domains.o
diff --git a/drivers/genpd/mediatek/mt6795-pm-domains.h b/drivers/genpd/mediatek/mt6795-pm-domains.h
new file mode 100644 (file)
index 0000000..ef07c9d
--- /dev/null
@@ -0,0 +1,112 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef __SOC_MEDIATEK_MT6795_PM_DOMAINS_H
+#define __SOC_MEDIATEK_MT6795_PM_DOMAINS_H
+
+#include "mtk-pm-domains.h"
+#include <dt-bindings/power/mt6795-power.h>
+
+/*
+ * MT6795 power domain support
+ */
+
+static const struct scpsys_domain_data scpsys_domain_data_mt6795[] = {
+       [MT6795_POWER_DOMAIN_VDEC] = {
+               .name = "vdec",
+               .sta_mask = PWR_STATUS_VDEC,
+               .ctl_offs = SPM_VDE_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+       },
+       [MT6795_POWER_DOMAIN_VENC] = {
+               .name = "venc",
+               .sta_mask = PWR_STATUS_VENC,
+               .ctl_offs = SPM_VEN_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+       },
+       [MT6795_POWER_DOMAIN_ISP] = {
+               .name = "isp",
+               .sta_mask = PWR_STATUS_ISP,
+               .ctl_offs = SPM_ISP_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(13, 12),
+       },
+       [MT6795_POWER_DOMAIN_MM] = {
+               .name = "mm",
+               .sta_mask = PWR_STATUS_DISP,
+               .ctl_offs = SPM_DIS_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_UPDATE_TOPAXI(MT8173_TOP_AXI_PROT_EN_MM_M0 |
+                                              MT8173_TOP_AXI_PROT_EN_MM_M1),
+               },
+       },
+       [MT6795_POWER_DOMAIN_MJC] = {
+               .name = "mjc",
+               .sta_mask = BIT(20),
+               .ctl_offs = 0x298,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+       },
+       [MT6795_POWER_DOMAIN_AUDIO] = {
+               .name = "audio",
+               .sta_mask = PWR_STATUS_AUDIO,
+               .ctl_offs = SPM_AUDIO_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+       },
+       [MT6795_POWER_DOMAIN_MFG_ASYNC] = {
+               .name = "mfg_async",
+               .sta_mask = PWR_STATUS_MFG_ASYNC,
+               .ctl_offs = SPM_MFG_ASYNC_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = 0,
+       },
+       [MT6795_POWER_DOMAIN_MFG_2D] = {
+               .name = "mfg_2d",
+               .sta_mask = PWR_STATUS_MFG_2D,
+               .ctl_offs = SPM_MFG_2D_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(13, 12),
+       },
+       [MT6795_POWER_DOMAIN_MFG] = {
+               .name = "mfg",
+               .sta_mask = PWR_STATUS_MFG,
+               .ctl_offs = SPM_MFG_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(13, 8),
+               .sram_pdn_ack_bits = GENMASK(21, 16),
+               .bp_infracfg = {
+                       BUS_PROT_UPDATE_TOPAXI(MT8173_TOP_AXI_PROT_EN_MFG_S |
+                                              MT8173_TOP_AXI_PROT_EN_MFG_M0 |
+                                              MT8173_TOP_AXI_PROT_EN_MFG_M1 |
+                                              MT8173_TOP_AXI_PROT_EN_MFG_SNOOP_OUT),
+               },
+       },
+};
+
+static const struct scpsys_soc_data mt6795_scpsys_data = {
+       .domains_data = scpsys_domain_data_mt6795,
+       .num_domains = ARRAY_SIZE(scpsys_domain_data_mt6795),
+};
+
+#endif /* __SOC_MEDIATEK_MT6795_PM_DOMAINS_H */
diff --git a/drivers/genpd/mediatek/mt8167-pm-domains.h b/drivers/genpd/mediatek/mt8167-pm-domains.h
new file mode 100644 (file)
index 0000000..4d6c327
--- /dev/null
@@ -0,0 +1,105 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef __SOC_MEDIATEK_MT8167_PM_DOMAINS_H
+#define __SOC_MEDIATEK_MT8167_PM_DOMAINS_H
+
+#include "mtk-pm-domains.h"
+#include <dt-bindings/power/mt8167-power.h>
+
+#define MT8167_PWR_STATUS_MFG_2D       BIT(24)
+#define MT8167_PWR_STATUS_MFG_ASYNC    BIT(25)
+
+/*
+ * MT8167 power domain support
+ */
+
+static const struct scpsys_domain_data scpsys_domain_data_mt8167[] = {
+       [MT8167_POWER_DOMAIN_MM] = {
+               .name = "mm",
+               .sta_mask = PWR_STATUS_DISP,
+               .ctl_offs = SPM_DIS_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_UPDATE_TOPAXI(MT8167_TOP_AXI_PROT_EN_MM_EMI |
+                                              MT8167_TOP_AXI_PROT_EN_MCU_MM),
+               },
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT8167_POWER_DOMAIN_VDEC] = {
+               .name = "vdec",
+               .sta_mask = PWR_STATUS_VDEC,
+               .ctl_offs = SPM_VDE_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT8167_POWER_DOMAIN_ISP] = {
+               .name = "isp",
+               .sta_mask = PWR_STATUS_ISP,
+               .ctl_offs = SPM_ISP_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(13, 12),
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT8167_POWER_DOMAIN_MFG_ASYNC] = {
+               .name = "mfg_async",
+               .sta_mask = MT8167_PWR_STATUS_MFG_ASYNC,
+               .ctl_offs = SPM_MFG_ASYNC_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = 0,
+               .sram_pdn_ack_bits = 0,
+               .bp_infracfg = {
+                       BUS_PROT_UPDATE_TOPAXI(MT8167_TOP_AXI_PROT_EN_MCU_MFG |
+                                              MT8167_TOP_AXI_PROT_EN_MFG_EMI),
+               },
+       },
+       [MT8167_POWER_DOMAIN_MFG_2D] = {
+               .name = "mfg_2d",
+               .sta_mask = MT8167_PWR_STATUS_MFG_2D,
+               .ctl_offs = SPM_MFG_2D_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+       },
+       [MT8167_POWER_DOMAIN_MFG] = {
+               .name = "mfg",
+               .sta_mask = PWR_STATUS_MFG,
+               .ctl_offs = SPM_MFG_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+       },
+       [MT8167_POWER_DOMAIN_CONN] = {
+               .name = "conn",
+               .sta_mask = PWR_STATUS_CONN,
+               .ctl_offs = SPM_CONN_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = 0,
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+               .bp_infracfg = {
+                       BUS_PROT_UPDATE_TOPAXI(MT8167_TOP_AXI_PROT_EN_CONN_EMI |
+                                              MT8167_TOP_AXI_PROT_EN_CONN_MCU |
+                                              MT8167_TOP_AXI_PROT_EN_MCU_CONN),
+               },
+       },
+};
+
+static const struct scpsys_soc_data mt8167_scpsys_data = {
+       .domains_data = scpsys_domain_data_mt8167,
+       .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8167),
+};
+
+#endif /* __SOC_MEDIATEK_MT8167_PM_DOMAINS_H */
+
diff --git a/drivers/genpd/mediatek/mt8173-pm-domains.h b/drivers/genpd/mediatek/mt8173-pm-domains.h
new file mode 100644 (file)
index 0000000..1a5dc63
--- /dev/null
@@ -0,0 +1,123 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef __SOC_MEDIATEK_MT8173_PM_DOMAINS_H
+#define __SOC_MEDIATEK_MT8173_PM_DOMAINS_H
+
+#include "mtk-pm-domains.h"
+#include <dt-bindings/power/mt8173-power.h>
+
+/*
+ * MT8173 power domain support
+ */
+
+static const struct scpsys_domain_data scpsys_domain_data_mt8173[] = {
+       [MT8173_POWER_DOMAIN_VDEC] = {
+               .name = "vdec",
+               .sta_mask = PWR_STATUS_VDEC,
+               .ctl_offs = SPM_VDE_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+       },
+       [MT8173_POWER_DOMAIN_VENC] = {
+               .name = "venc",
+               .sta_mask = PWR_STATUS_VENC,
+               .ctl_offs = SPM_VEN_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+       },
+       [MT8173_POWER_DOMAIN_ISP] = {
+               .name = "isp",
+               .sta_mask = PWR_STATUS_ISP,
+               .ctl_offs = SPM_ISP_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(13, 12),
+       },
+       [MT8173_POWER_DOMAIN_MM] = {
+               .name = "mm",
+               .sta_mask = PWR_STATUS_DISP,
+               .ctl_offs = SPM_DIS_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_UPDATE_TOPAXI(MT8173_TOP_AXI_PROT_EN_MM_M0 |
+                                              MT8173_TOP_AXI_PROT_EN_MM_M1),
+               },
+       },
+       [MT8173_POWER_DOMAIN_VENC_LT] = {
+               .name = "venc_lt",
+               .sta_mask = PWR_STATUS_VENC_LT,
+               .ctl_offs = SPM_VEN2_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+       },
+       [MT8173_POWER_DOMAIN_AUDIO] = {
+               .name = "audio",
+               .sta_mask = PWR_STATUS_AUDIO,
+               .ctl_offs = SPM_AUDIO_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+       },
+       [MT8173_POWER_DOMAIN_USB] = {
+               .name = "usb",
+               .sta_mask = PWR_STATUS_USB,
+               .ctl_offs = SPM_USB_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT8173_POWER_DOMAIN_MFG_ASYNC] = {
+               .name = "mfg_async",
+               .sta_mask = PWR_STATUS_MFG_ASYNC,
+               .ctl_offs = SPM_MFG_ASYNC_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = 0,
+               .caps = MTK_SCPD_DOMAIN_SUPPLY,
+       },
+       [MT8173_POWER_DOMAIN_MFG_2D] = {
+               .name = "mfg_2d",
+               .sta_mask = PWR_STATUS_MFG_2D,
+               .ctl_offs = SPM_MFG_2D_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(13, 12),
+       },
+       [MT8173_POWER_DOMAIN_MFG] = {
+               .name = "mfg",
+               .sta_mask = PWR_STATUS_MFG,
+               .ctl_offs = SPM_MFG_PWR_CON,
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
+               .sram_pdn_bits = GENMASK(13, 8),
+               .sram_pdn_ack_bits = GENMASK(21, 16),
+               .bp_infracfg = {
+                       BUS_PROT_UPDATE_TOPAXI(MT8173_TOP_AXI_PROT_EN_MFG_S |
+                                              MT8173_TOP_AXI_PROT_EN_MFG_M0 |
+                                              MT8173_TOP_AXI_PROT_EN_MFG_M1 |
+                                              MT8173_TOP_AXI_PROT_EN_MFG_SNOOP_OUT),
+               },
+       },
+};
+
+static const struct scpsys_soc_data mt8173_scpsys_data = {
+       .domains_data = scpsys_domain_data_mt8173,
+       .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8173),
+};
+
+#endif /* __SOC_MEDIATEK_MT8173_PM_DOMAINS_H */
diff --git a/drivers/genpd/mediatek/mt8183-pm-domains.h b/drivers/genpd/mediatek/mt8183-pm-domains.h
new file mode 100644 (file)
index 0000000..99de67f
--- /dev/null
@@ -0,0 +1,266 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef __SOC_MEDIATEK_MT8183_PM_DOMAINS_H
+#define __SOC_MEDIATEK_MT8183_PM_DOMAINS_H
+
+#include "mtk-pm-domains.h"
+#include <dt-bindings/power/mt8183-power.h>
+
+/*
+ * MT8183 power domain support
+ */
+
+static const struct scpsys_domain_data scpsys_domain_data_mt8183[] = {
+       [MT8183_POWER_DOMAIN_AUDIO] = {
+               .name = "audio",
+               .sta_mask = PWR_STATUS_AUDIO,
+               .ctl_offs = 0x0314,
+               .pwr_sta_offs = 0x0180,
+               .pwr_sta2nd_offs = 0x0184,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+       },
+       [MT8183_POWER_DOMAIN_CONN] = {
+               .name = "conn",
+               .sta_mask = PWR_STATUS_CONN,
+               .ctl_offs = 0x032c,
+               .pwr_sta_offs = 0x0180,
+               .pwr_sta2nd_offs = 0x0184,
+               .sram_pdn_bits = 0,
+               .sram_pdn_ack_bits = 0,
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_CONN, MT8183_TOP_AXI_PROT_EN_SET,
+                                   MT8183_TOP_AXI_PROT_EN_CLR, MT8183_TOP_AXI_PROT_EN_STA1),
+               },
+       },
+       [MT8183_POWER_DOMAIN_MFG_ASYNC] = {
+               .name = "mfg_async",
+               .sta_mask = PWR_STATUS_MFG_ASYNC,
+               .ctl_offs = 0x0334,
+               .pwr_sta_offs = 0x0180,
+               .pwr_sta2nd_offs = 0x0184,
+               .sram_pdn_bits = 0,
+               .sram_pdn_ack_bits = 0,
+               .caps = MTK_SCPD_DOMAIN_SUPPLY,
+       },
+       [MT8183_POWER_DOMAIN_MFG] = {
+               .name = "mfg",
+               .sta_mask = PWR_STATUS_MFG,
+               .ctl_offs = 0x0338,
+               .pwr_sta_offs = 0x0180,
+               .pwr_sta2nd_offs = 0x0184,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .caps = MTK_SCPD_DOMAIN_SUPPLY,
+       },
+       [MT8183_POWER_DOMAIN_MFG_CORE0] = {
+               .name = "mfg_core0",
+               .sta_mask = BIT(7),
+               .ctl_offs = 0x034c,
+               .pwr_sta_offs = 0x0180,
+               .pwr_sta2nd_offs = 0x0184,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+       },
+       [MT8183_POWER_DOMAIN_MFG_CORE1] = {
+               .name = "mfg_core1",
+               .sta_mask = BIT(20),
+               .ctl_offs = 0x0310,
+               .pwr_sta_offs = 0x0180,
+               .pwr_sta2nd_offs = 0x0184,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+       },
+       [MT8183_POWER_DOMAIN_MFG_2D] = {
+               .name = "mfg_2d",
+               .sta_mask = PWR_STATUS_MFG_2D,
+               .ctl_offs = 0x0348,
+               .pwr_sta_offs = 0x0180,
+               .pwr_sta2nd_offs = 0x0184,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_1_MFG, MT8183_TOP_AXI_PROT_EN_1_SET,
+                                   MT8183_TOP_AXI_PROT_EN_1_CLR, MT8183_TOP_AXI_PROT_EN_STA1_1),
+                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MFG, MT8183_TOP_AXI_PROT_EN_SET,
+                                   MT8183_TOP_AXI_PROT_EN_CLR, MT8183_TOP_AXI_PROT_EN_STA1),
+               },
+       },
+       [MT8183_POWER_DOMAIN_DISP] = {
+               .name = "disp",
+               .sta_mask = PWR_STATUS_DISP,
+               .ctl_offs = 0x030c,
+               .pwr_sta_offs = 0x0180,
+               .pwr_sta2nd_offs = 0x0184,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_1_DISP, MT8183_TOP_AXI_PROT_EN_1_SET,
+                                   MT8183_TOP_AXI_PROT_EN_1_CLR, MT8183_TOP_AXI_PROT_EN_STA1_1),
+                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_DISP, MT8183_TOP_AXI_PROT_EN_SET,
+                                   MT8183_TOP_AXI_PROT_EN_CLR, MT8183_TOP_AXI_PROT_EN_STA1),
+               },
+               .bp_smi = {
+                       BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_DISP,
+                                   MT8183_SMI_COMMON_CLAMP_EN_SET,
+                                   MT8183_SMI_COMMON_CLAMP_EN_CLR,
+                                   MT8183_SMI_COMMON_CLAMP_EN),
+               },
+       },
+       [MT8183_POWER_DOMAIN_CAM] = {
+               .name = "cam",
+               .sta_mask = BIT(25),
+               .ctl_offs = 0x0344,
+               .pwr_sta_offs = 0x0180,
+               .pwr_sta2nd_offs = 0x0184,
+               .sram_pdn_bits = GENMASK(9, 8),
+               .sram_pdn_ack_bits = GENMASK(13, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MM_CAM, MT8183_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8183_TOP_AXI_PROT_EN_MM_CLR, MT8183_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_CAM, MT8183_TOP_AXI_PROT_EN_SET,
+                                   MT8183_TOP_AXI_PROT_EN_CLR, MT8183_TOP_AXI_PROT_EN_STA1),
+                       BUS_PROT_WR_IGN(MT8183_TOP_AXI_PROT_EN_MM_CAM_2ND,
+                                       MT8183_TOP_AXI_PROT_EN_MM_SET,
+                                       MT8183_TOP_AXI_PROT_EN_MM_CLR,
+                                       MT8183_TOP_AXI_PROT_EN_MM_STA1),
+               },
+               .bp_smi = {
+                       BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_CAM,
+                                   MT8183_SMI_COMMON_CLAMP_EN_SET,
+                                   MT8183_SMI_COMMON_CLAMP_EN_CLR,
+                                   MT8183_SMI_COMMON_CLAMP_EN),
+               },
+       },
+       [MT8183_POWER_DOMAIN_ISP] = {
+               .name = "isp",
+               .sta_mask = PWR_STATUS_ISP,
+               .ctl_offs = 0x0308,
+               .pwr_sta_offs = 0x0180,
+               .pwr_sta2nd_offs = 0x0184,
+               .sram_pdn_bits = GENMASK(9, 8),
+               .sram_pdn_ack_bits = GENMASK(13, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MM_ISP,
+                                   MT8183_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8183_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8183_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR_IGN(MT8183_TOP_AXI_PROT_EN_MM_ISP_2ND,
+                                       MT8183_TOP_AXI_PROT_EN_MM_SET,
+                                       MT8183_TOP_AXI_PROT_EN_MM_CLR,
+                                       MT8183_TOP_AXI_PROT_EN_MM_STA1),
+               },
+               .bp_smi = {
+                       BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_ISP,
+                                   MT8183_SMI_COMMON_CLAMP_EN_SET,
+                                   MT8183_SMI_COMMON_CLAMP_EN_CLR,
+                                   MT8183_SMI_COMMON_CLAMP_EN),
+               },
+       },
+       [MT8183_POWER_DOMAIN_VDEC] = {
+               .name = "vdec",
+               .sta_mask = BIT(31),
+               .ctl_offs = 0x0300,
+               .pwr_sta_offs = 0x0180,
+               .pwr_sta2nd_offs = 0x0184,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_smi = {
+                       BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_VDEC,
+                                   MT8183_SMI_COMMON_CLAMP_EN_SET,
+                                   MT8183_SMI_COMMON_CLAMP_EN_CLR,
+                                   MT8183_SMI_COMMON_CLAMP_EN),
+               },
+       },
+       [MT8183_POWER_DOMAIN_VENC] = {
+               .name = "venc",
+               .sta_mask = PWR_STATUS_VENC,
+               .ctl_offs = 0x0304,
+               .pwr_sta_offs = 0x0180,
+               .pwr_sta2nd_offs = 0x0184,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+               .bp_smi = {
+                       BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_VENC,
+                                   MT8183_SMI_COMMON_CLAMP_EN_SET,
+                                   MT8183_SMI_COMMON_CLAMP_EN_CLR,
+                                   MT8183_SMI_COMMON_CLAMP_EN),
+               },
+       },
+       [MT8183_POWER_DOMAIN_VPU_TOP] = {
+               .name = "vpu_top",
+               .sta_mask = BIT(26),
+               .ctl_offs = 0x0324,
+               .pwr_sta_offs = 0x0180,
+               .pwr_sta2nd_offs = 0x0184,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MM_VPU_TOP,
+                                   MT8183_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8183_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8183_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_VPU_TOP,
+                                   MT8183_TOP_AXI_PROT_EN_SET,
+                                   MT8183_TOP_AXI_PROT_EN_CLR,
+                                   MT8183_TOP_AXI_PROT_EN_STA1),
+                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MM_VPU_TOP_2ND,
+                                   MT8183_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8183_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8183_TOP_AXI_PROT_EN_MM_STA1),
+               },
+               .bp_smi = {
+                       BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_VPU_TOP,
+                                   MT8183_SMI_COMMON_CLAMP_EN_SET,
+                                   MT8183_SMI_COMMON_CLAMP_EN_CLR,
+                                   MT8183_SMI_COMMON_CLAMP_EN),
+               },
+       },
+       [MT8183_POWER_DOMAIN_VPU_CORE0] = {
+               .name = "vpu_core0",
+               .sta_mask = BIT(27),
+               .ctl_offs = 0x33c,
+               .pwr_sta_offs = 0x0180,
+               .pwr_sta2nd_offs = 0x0184,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(13, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MCU_VPU_CORE0,
+                                   MT8183_TOP_AXI_PROT_EN_MCU_SET,
+                                   MT8183_TOP_AXI_PROT_EN_MCU_CLR,
+                                   MT8183_TOP_AXI_PROT_EN_MCU_STA1),
+                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MCU_VPU_CORE0_2ND,
+                                   MT8183_TOP_AXI_PROT_EN_MCU_SET,
+                                   MT8183_TOP_AXI_PROT_EN_MCU_CLR,
+                                   MT8183_TOP_AXI_PROT_EN_MCU_STA1),
+               },
+               .caps = MTK_SCPD_SRAM_ISO,
+       },
+       [MT8183_POWER_DOMAIN_VPU_CORE1] = {
+               .name = "vpu_core1",
+               .sta_mask = BIT(28),
+               .ctl_offs = 0x0340,
+               .pwr_sta_offs = 0x0180,
+               .pwr_sta2nd_offs = 0x0184,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(13, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MCU_VPU_CORE1,
+                                   MT8183_TOP_AXI_PROT_EN_MCU_SET,
+                                   MT8183_TOP_AXI_PROT_EN_MCU_CLR,
+                                   MT8183_TOP_AXI_PROT_EN_MCU_STA1),
+                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MCU_VPU_CORE1_2ND,
+                                   MT8183_TOP_AXI_PROT_EN_MCU_SET,
+                                   MT8183_TOP_AXI_PROT_EN_MCU_CLR,
+                                   MT8183_TOP_AXI_PROT_EN_MCU_STA1),
+               },
+               .caps = MTK_SCPD_SRAM_ISO,
+       },
+};
+
+static const struct scpsys_soc_data mt8183_scpsys_data = {
+       .domains_data = scpsys_domain_data_mt8183,
+       .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8183),
+};
+
+#endif /* __SOC_MEDIATEK_MT8183_PM_DOMAINS_H */
diff --git a/drivers/genpd/mediatek/mt8186-pm-domains.h b/drivers/genpd/mediatek/mt8186-pm-domains.h
new file mode 100644 (file)
index 0000000..fce86f7
--- /dev/null
@@ -0,0 +1,342 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Chun-Jie Chen <chun-jie.chen@mediatek.com>
+ */
+
+#ifndef __SOC_MEDIATEK_MT8186_PM_DOMAINS_H
+#define __SOC_MEDIATEK_MT8186_PM_DOMAINS_H
+
+#include "mtk-pm-domains.h"
+#include <dt-bindings/power/mt8186-power.h>
+
+/*
+ * MT8186 power domain support
+ */
+
+static const struct scpsys_domain_data scpsys_domain_data_mt8186[] = {
+       [MT8186_POWER_DOMAIN_MFG0] = {
+               .name = "mfg0",
+               .sta_mask = BIT(2),
+               .ctl_offs = 0x308,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
+       },
+       [MT8186_POWER_DOMAIN_MFG1] = {
+               .name = "mfg1",
+               .sta_mask = BIT(3),
+               .ctl_offs = 0x30c,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_MFG1_STEP1,
+                               MT8186_TOP_AXI_PROT_EN_1_SET,
+                               MT8186_TOP_AXI_PROT_EN_1_CLR,
+                               MT8186_TOP_AXI_PROT_EN_1_STA),
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_MFG1_STEP2,
+                               MT8186_TOP_AXI_PROT_EN_SET,
+                               MT8186_TOP_AXI_PROT_EN_CLR,
+                               MT8186_TOP_AXI_PROT_EN_STA),
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_MFG1_STEP3,
+                               MT8186_TOP_AXI_PROT_EN_SET,
+                               MT8186_TOP_AXI_PROT_EN_CLR,
+                               MT8186_TOP_AXI_PROT_EN_STA),
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_MFG1_STEP4,
+                               MT8186_TOP_AXI_PROT_EN_1_SET,
+                               MT8186_TOP_AXI_PROT_EN_1_CLR,
+                               MT8186_TOP_AXI_PROT_EN_1_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
+       },
+       [MT8186_POWER_DOMAIN_MFG2] = {
+               .name = "mfg2",
+               .sta_mask = BIT(4),
+               .ctl_offs = 0x310,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8186_POWER_DOMAIN_MFG3] = {
+               .name = "mfg3",
+               .sta_mask = BIT(5),
+               .ctl_offs = 0x314,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8186_POWER_DOMAIN_SSUSB] = {
+               .name = "ssusb",
+               .sta_mask = BIT(20),
+               .ctl_offs = 0x9F0,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT8186_POWER_DOMAIN_SSUSB_P1] = {
+               .name = "ssusb_p1",
+               .sta_mask = BIT(19),
+               .ctl_offs = 0x9F4,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT8186_POWER_DOMAIN_DIS] = {
+               .name = "dis",
+               .sta_mask = BIT(21),
+               .ctl_offs = 0x354,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_DIS_STEP1,
+                               MT8186_TOP_AXI_PROT_EN_1_SET,
+                               MT8186_TOP_AXI_PROT_EN_1_CLR,
+                               MT8186_TOP_AXI_PROT_EN_1_STA),
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_DIS_STEP2,
+                               MT8186_TOP_AXI_PROT_EN_SET,
+                               MT8186_TOP_AXI_PROT_EN_CLR,
+                               MT8186_TOP_AXI_PROT_EN_STA),
+               },
+       },
+       [MT8186_POWER_DOMAIN_IMG] = {
+               .name = "img",
+               .sta_mask = BIT(13),
+               .ctl_offs = 0x334,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_IMG_STEP1,
+                               MT8186_TOP_AXI_PROT_EN_1_SET,
+                               MT8186_TOP_AXI_PROT_EN_1_CLR,
+                               MT8186_TOP_AXI_PROT_EN_1_STA),
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_IMG_STEP2,
+                               MT8186_TOP_AXI_PROT_EN_1_SET,
+                               MT8186_TOP_AXI_PROT_EN_1_CLR,
+                               MT8186_TOP_AXI_PROT_EN_1_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8186_POWER_DOMAIN_IMG2] = {
+               .name = "img2",
+               .sta_mask = BIT(14),
+               .ctl_offs = 0x338,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8186_POWER_DOMAIN_IPE] = {
+               .name = "ipe",
+               .sta_mask = BIT(15),
+               .ctl_offs = 0x33C,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_IPE_STEP1,
+                               MT8186_TOP_AXI_PROT_EN_1_SET,
+                               MT8186_TOP_AXI_PROT_EN_1_CLR,
+                               MT8186_TOP_AXI_PROT_EN_1_STA),
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_IPE_STEP2,
+                               MT8186_TOP_AXI_PROT_EN_1_SET,
+                               MT8186_TOP_AXI_PROT_EN_1_CLR,
+                               MT8186_TOP_AXI_PROT_EN_1_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8186_POWER_DOMAIN_CAM] = {
+               .name = "cam",
+               .sta_mask = BIT(23),
+               .ctl_offs = 0x35C,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_CAM_STEP1,
+                               MT8186_TOP_AXI_PROT_EN_1_SET,
+                               MT8186_TOP_AXI_PROT_EN_1_CLR,
+                               MT8186_TOP_AXI_PROT_EN_1_STA),
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_CAM_STEP2,
+                               MT8186_TOP_AXI_PROT_EN_1_SET,
+                               MT8186_TOP_AXI_PROT_EN_1_CLR,
+                               MT8186_TOP_AXI_PROT_EN_1_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8186_POWER_DOMAIN_CAM_RAWA] = {
+               .name = "cam_rawa",
+               .sta_mask = BIT(24),
+               .ctl_offs = 0x360,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8186_POWER_DOMAIN_CAM_RAWB] = {
+               .name = "cam_rawb",
+               .sta_mask = BIT(25),
+               .ctl_offs = 0x364,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8186_POWER_DOMAIN_VENC] = {
+               .name = "venc",
+               .sta_mask = BIT(18),
+               .ctl_offs = 0x348,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_VENC_STEP1,
+                               MT8186_TOP_AXI_PROT_EN_1_SET,
+                               MT8186_TOP_AXI_PROT_EN_1_CLR,
+                               MT8186_TOP_AXI_PROT_EN_1_STA),
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_VENC_STEP2,
+                               MT8186_TOP_AXI_PROT_EN_1_SET,
+                               MT8186_TOP_AXI_PROT_EN_1_CLR,
+                               MT8186_TOP_AXI_PROT_EN_1_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8186_POWER_DOMAIN_VDEC] = {
+               .name = "vdec",
+               .sta_mask = BIT(16),
+               .ctl_offs = 0x340,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_VDEC_STEP1,
+                               MT8186_TOP_AXI_PROT_EN_1_SET,
+                               MT8186_TOP_AXI_PROT_EN_1_CLR,
+                               MT8186_TOP_AXI_PROT_EN_1_STA),
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_VDEC_STEP2,
+                               MT8186_TOP_AXI_PROT_EN_1_SET,
+                               MT8186_TOP_AXI_PROT_EN_1_CLR,
+                               MT8186_TOP_AXI_PROT_EN_1_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8186_POWER_DOMAIN_WPE] = {
+               .name = "wpe",
+               .sta_mask = BIT(0),
+               .ctl_offs = 0x3F8,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_2_WPE_STEP1,
+                               MT8186_TOP_AXI_PROT_EN_2_SET,
+                               MT8186_TOP_AXI_PROT_EN_2_CLR,
+                               MT8186_TOP_AXI_PROT_EN_2_STA),
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_2_WPE_STEP2,
+                               MT8186_TOP_AXI_PROT_EN_2_SET,
+                               MT8186_TOP_AXI_PROT_EN_2_CLR,
+                               MT8186_TOP_AXI_PROT_EN_2_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8186_POWER_DOMAIN_CONN_ON] = {
+               .name = "conn_on",
+               .sta_mask = BIT(1),
+               .ctl_offs = 0x304,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .bp_infracfg = {
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_CONN_ON_STEP1,
+                               MT8186_TOP_AXI_PROT_EN_1_SET,
+                               MT8186_TOP_AXI_PROT_EN_1_CLR,
+                               MT8186_TOP_AXI_PROT_EN_1_STA),
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP2,
+                               MT8186_TOP_AXI_PROT_EN_SET,
+                               MT8186_TOP_AXI_PROT_EN_CLR,
+                               MT8186_TOP_AXI_PROT_EN_STA),
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP3,
+                               MT8186_TOP_AXI_PROT_EN_SET,
+                               MT8186_TOP_AXI_PROT_EN_CLR,
+                               MT8186_TOP_AXI_PROT_EN_STA),
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP4,
+                               MT8186_TOP_AXI_PROT_EN_SET,
+                               MT8186_TOP_AXI_PROT_EN_CLR,
+                               MT8186_TOP_AXI_PROT_EN_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT8186_POWER_DOMAIN_CSIRX_TOP] = {
+               .name = "csirx_top",
+               .sta_mask = BIT(6),
+               .ctl_offs = 0x318,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8186_POWER_DOMAIN_ADSP_AO] = {
+               .name = "adsp_ao",
+               .sta_mask = BIT(17),
+               .ctl_offs = 0x9FC,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+       },
+       [MT8186_POWER_DOMAIN_ADSP_INFRA] = {
+               .name = "adsp_infra",
+               .sta_mask = BIT(10),
+               .ctl_offs = 0x9F8,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+       },
+       [MT8186_POWER_DOMAIN_ADSP_TOP] = {
+               .name = "adsp_top",
+               .sta_mask = BIT(31),
+               .ctl_offs = 0x3E4,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_3_ADSP_TOP_STEP1,
+                               MT8186_TOP_AXI_PROT_EN_3_SET,
+                               MT8186_TOP_AXI_PROT_EN_3_CLR,
+                               MT8186_TOP_AXI_PROT_EN_3_STA),
+                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_3_ADSP_TOP_STEP2,
+                               MT8186_TOP_AXI_PROT_EN_3_SET,
+                               MT8186_TOP_AXI_PROT_EN_3_CLR,
+                               MT8186_TOP_AXI_PROT_EN_3_STA),
+               },
+               .caps = MTK_SCPD_SRAM_ISO | MTK_SCPD_ACTIVE_WAKEUP,
+       },
+};
+
+static const struct scpsys_soc_data mt8186_scpsys_data = {
+       .domains_data = scpsys_domain_data_mt8186,
+       .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8186),
+};
+
+#endif /* __SOC_MEDIATEK_MT8186_PM_DOMAINS_H */
diff --git a/drivers/genpd/mediatek/mt8188-pm-domains.h b/drivers/genpd/mediatek/mt8188-pm-domains.h
new file mode 100644 (file)
index 0000000..0692cb4
--- /dev/null
@@ -0,0 +1,623 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Garmin Chang <garmin.chang@mediatek.com>
+ */
+
+#ifndef __SOC_MEDIATEK_MT8188_PM_DOMAINS_H
+#define __SOC_MEDIATEK_MT8188_PM_DOMAINS_H
+
+#include "mtk-pm-domains.h"
+#include <dt-bindings/power/mediatek,mt8188-power.h>
+
+/*
+ * MT8188 power domain support
+ */
+
+static const struct scpsys_domain_data scpsys_domain_data_mt8188[] = {
+       [MT8188_POWER_DOMAIN_MFG0] = {
+               .name = "mfg0",
+               .sta_mask = BIT(1),
+               .ctl_offs = 0x300,
+               .pwr_sta_offs = 0x174,
+               .pwr_sta2nd_offs = 0x178,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
+       },
+       [MT8188_POWER_DOMAIN_MFG1] = {
+               .name = "mfg1",
+               .sta_mask = BIT(2),
+               .ctl_offs = 0x304,
+               .pwr_sta_offs = 0x174,
+               .pwr_sta2nd_offs = 0x178,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MFG1_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_SET,
+                                   MT8188_TOP_AXI_PROT_EN_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_MFG1_STEP2,
+                                   MT8188_TOP_AXI_PROT_EN_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_2_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_1_MFG1_STEP3,
+                                   MT8188_TOP_AXI_PROT_EN_1_SET,
+                                   MT8188_TOP_AXI_PROT_EN_1_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_1_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_MFG1_STEP4,
+                                   MT8188_TOP_AXI_PROT_EN_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_2_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MFG1_STEP5,
+                                   MT8188_TOP_AXI_PROT_EN_SET,
+                                   MT8188_TOP_AXI_PROT_EN_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_MFG1_STEP6,
+                                   MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET,
+                                   MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
+       },
+       [MT8188_POWER_DOMAIN_MFG2] = {
+               .name = "mfg2",
+               .sta_mask = BIT(3),
+               .ctl_offs = 0x308,
+               .pwr_sta_offs = 0x174,
+               .pwr_sta2nd_offs = 0x178,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8188_POWER_DOMAIN_MFG3] = {
+               .name = "mfg3",
+               .sta_mask = BIT(4),
+               .ctl_offs = 0x30C,
+               .pwr_sta_offs = 0x174,
+               .pwr_sta2nd_offs = 0x178,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8188_POWER_DOMAIN_MFG4] = {
+               .name = "mfg4",
+               .sta_mask = BIT(5),
+               .ctl_offs = 0x310,
+               .pwr_sta_offs = 0x174,
+               .pwr_sta2nd_offs = 0x178,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8188_POWER_DOMAIN_PEXTP_MAC_P0] = {
+               .name = "pextp_mac_p0",
+               .sta_mask = BIT(10),
+               .ctl_offs = 0x324,
+               .pwr_sta_offs = 0x174,
+               .pwr_sta2nd_offs = 0x178,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_PEXTP_MAC_P0_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_SET,
+                                   MT8188_TOP_AXI_PROT_EN_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_PEXTP_MAC_P0_STEP2,
+                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET,
+                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8188_POWER_DOMAIN_PEXTP_PHY_TOP] = {
+               .name = "pextp_phy_top",
+               .sta_mask = BIT(12),
+               .ctl_offs = 0x328,
+               .pwr_sta_offs = 0x174,
+               .pwr_sta2nd_offs = 0x178,
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8188_POWER_DOMAIN_CSIRX_TOP] = {
+               .name = "pextp_csirx_top",
+               .sta_mask = BIT(17),
+               .ctl_offs = 0x3C4,
+               .pwr_sta_offs = 0x174,
+               .pwr_sta2nd_offs = 0x178,
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8188_POWER_DOMAIN_ETHER] = {
+               .name = "ether",
+               .sta_mask = BIT(1),
+               .ctl_offs = 0x338,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_ETHER_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET,
+                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT8188_POWER_DOMAIN_HDMI_TX] = {
+               .name = "hdmi_tx",
+               .sta_mask = BIT(18),
+               .ctl_offs = 0x37C,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_HDMI_TX_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET,
+                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT8188_POWER_DOMAIN_ADSP_AO] = {
+               .name = "adsp_ao",
+               .sta_mask = BIT(10),
+               .ctl_offs = 0x35C,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_AO_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_2_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_AO_STEP2,
+                                   MT8188_TOP_AXI_PROT_EN_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_2_STA),
+               },
+               .caps = MTK_SCPD_ALWAYS_ON,
+       },
+       [MT8188_POWER_DOMAIN_ADSP_INFRA] = {
+               .name = "adsp_infra",
+               .sta_mask = BIT(9),
+               .ctl_offs = 0x358,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_INFRA_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_2_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_INFRA_STEP2,
+                                   MT8188_TOP_AXI_PROT_EN_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_2_STA),
+               },
+               .caps = MTK_SCPD_SRAM_ISO | MTK_SCPD_ALWAYS_ON,
+       },
+       [MT8188_POWER_DOMAIN_ADSP] = {
+               .name = "adsp",
+               .sta_mask = BIT(8),
+               .ctl_offs = 0x354,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_2_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_STEP2,
+                                   MT8188_TOP_AXI_PROT_EN_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_2_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_SRAM_ISO | MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT8188_POWER_DOMAIN_AUDIO] = {
+               .name = "audio",
+               .sta_mask = BIT(6),
+               .ctl_offs = 0x34C,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_AUDIO_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_2_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_AUDIO_STEP2,
+                                   MT8188_TOP_AXI_PROT_EN_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_2_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT8188_POWER_DOMAIN_AUDIO_ASRC] = {
+               .name = "audio_asrc",
+               .sta_mask = BIT(7),
+               .ctl_offs = 0x350,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_AUDIO_ASRC_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_2_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_AUDIO_ASRC_STEP2,
+                                   MT8188_TOP_AXI_PROT_EN_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_2_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8188_POWER_DOMAIN_VPPSYS0] = {
+               .name = "vppsys0",
+               .sta_mask = BIT(11),
+               .ctl_offs = 0x360,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_VPPSYS0_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_SET,
+                                   MT8188_TOP_AXI_PROT_EN_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS0_STEP2,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_VPPSYS0_STEP3,
+                                   MT8188_TOP_AXI_PROT_EN_SET,
+                                   MT8188_TOP_AXI_PROT_EN_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS0_STEP4,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VPPSYS0_STEP5,
+                                   MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET,
+                                   MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA),
+               },
+       },
+       [MT8188_POWER_DOMAIN_VDOSYS0] = {
+               .name = "vdosys0",
+               .sta_mask = BIT(13),
+               .ctl_offs = 0x368,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDOSYS0_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_VDOSYS0_STEP2,
+                                   MT8188_TOP_AXI_PROT_EN_SET,
+                                   MT8188_TOP_AXI_PROT_EN_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VDOSYS0_STEP3,
+                                   MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET,
+                                   MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA),
+               },
+       },
+       [MT8188_POWER_DOMAIN_VDOSYS1] = {
+               .name = "vdosys1",
+               .sta_mask = BIT(14),
+               .ctl_offs = 0x36C,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDOSYS1_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDOSYS1_STEP2,
+                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VDOSYS1_STEP3,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+               },
+       },
+       [MT8188_POWER_DOMAIN_DP_TX] = {
+               .name = "dp_tx",
+               .sta_mask = BIT(16),
+               .ctl_offs = 0x374,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_DP_TX_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET,
+                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8188_POWER_DOMAIN_EDP_TX] = {
+               .name = "edp_tx",
+               .sta_mask = BIT(17),
+               .ctl_offs = 0x378,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_EDP_TX_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET,
+                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8188_POWER_DOMAIN_VPPSYS1] = {
+               .name = "vppsys1",
+               .sta_mask = BIT(12),
+               .ctl_offs = 0x364,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VPPSYS1_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VPPSYS1_STEP2,
+                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS1_STEP3,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+               },
+       },
+       [MT8188_POWER_DOMAIN_WPE] = {
+               .name = "wpe",
+               .sta_mask = BIT(15),
+               .ctl_offs = 0x370,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_WPE_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_WPE_STEP2,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8188_POWER_DOMAIN_VDEC0] = {
+               .name = "vdec0",
+               .sta_mask = BIT(19),
+               .ctl_offs = 0x380,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDEC0_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VDEC0_STEP2,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8188_POWER_DOMAIN_VDEC1] = {
+               .name = "vdec1",
+               .sta_mask = BIT(20),
+               .ctl_offs = 0x384,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDEC1_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDEC1_STEP2,
+                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8188_POWER_DOMAIN_VENC] = {
+               .name = "venc",
+               .sta_mask = BIT(22),
+               .ctl_offs = 0x38C,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VENC_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VENC_STEP2,
+                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VENC_STEP3,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8188_POWER_DOMAIN_IMG_VCORE] = {
+               .name = "vcore",
+               .sta_mask = BIT(28),
+               .ctl_offs = 0x3A4,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_IMG_VCORE_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_IMG_VCORE_STEP2,
+                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_IMG_VCORE_STEP3,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
+       },
+       [MT8188_POWER_DOMAIN_IMG_MAIN] = {
+               .name = "img_main",
+               .sta_mask = BIT(29),
+               .ctl_offs = 0x3A8,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_IMG_MAIN_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_IMG_MAIN_STEP2,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8188_POWER_DOMAIN_DIP] = {
+               .name = "dip",
+               .sta_mask = BIT(30),
+               .ctl_offs = 0x3AC,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8188_POWER_DOMAIN_IPE] = {
+               .name = "ipe",
+               .sta_mask = BIT(31),
+               .ctl_offs = 0x3B0,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8188_POWER_DOMAIN_CAM_VCORE] = {
+               .name = "cam_vcore",
+               .sta_mask = BIT(27),
+               .ctl_offs = 0x3A0,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_CAM_VCORE_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_CAM_VCORE_STEP2,
+                                   MT8188_TOP_AXI_PROT_EN_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_2_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_1_CAM_VCORE_STEP3,
+                                   MT8188_TOP_AXI_PROT_EN_1_SET,
+                                   MT8188_TOP_AXI_PROT_EN_1_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_1_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_CAM_VCORE_STEP4,
+                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_CAM_VCORE_STEP5,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
+       },
+       [MT8188_POWER_DOMAIN_CAM_MAIN] = {
+               .name = "cam_main",
+               .sta_mask = BIT(24),
+               .ctl_offs = 0x394,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_CAM_MAIN_STEP1,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_CAM_MAIN_STEP2,
+                                   MT8188_TOP_AXI_PROT_EN_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_2_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_CAM_MAIN_STEP3,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_CAM_MAIN_STEP4,
+                                   MT8188_TOP_AXI_PROT_EN_2_SET,
+                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8188_TOP_AXI_PROT_EN_2_STA),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8188_POWER_DOMAIN_CAM_SUBA] = {
+               .name = "cam_suba",
+               .sta_mask = BIT(25),
+               .ctl_offs = 0x398,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8188_POWER_DOMAIN_CAM_SUBB] = {
+               .name = "cam_subb",
+               .sta_mask = BIT(26),
+               .ctl_offs = 0x39C,
+               .pwr_sta_offs = 0x16C,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = BIT(8),
+               .sram_pdn_ack_bits = BIT(12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+};
+
+static const struct scpsys_soc_data mt8188_scpsys_data = {
+       .domains_data = scpsys_domain_data_mt8188,
+       .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8188),
+};
+
+#endif /* __SOC_MEDIATEK_MT8188_PM_DOMAINS_H */
diff --git a/drivers/genpd/mediatek/mt8192-pm-domains.h b/drivers/genpd/mediatek/mt8192-pm-domains.h
new file mode 100644 (file)
index 0000000..b97b205
--- /dev/null
@@ -0,0 +1,355 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef __SOC_MEDIATEK_MT8192_PM_DOMAINS_H
+#define __SOC_MEDIATEK_MT8192_PM_DOMAINS_H
+
+#include "mtk-pm-domains.h"
+#include <dt-bindings/power/mt8192-power.h>
+
+/*
+ * MT8192 power domain support
+ */
+
+static const struct scpsys_domain_data scpsys_domain_data_mt8192[] = {
+       [MT8192_POWER_DOMAIN_AUDIO] = {
+               .name = "audio",
+               .sta_mask = BIT(21),
+               .ctl_offs = 0x0354,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_2_AUDIO,
+                                   MT8192_TOP_AXI_PROT_EN_2_SET,
+                                   MT8192_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_2_STA1),
+               },
+       },
+       [MT8192_POWER_DOMAIN_CONN] = {
+               .name = "conn",
+               .sta_mask = PWR_STATUS_CONN,
+               .ctl_offs = 0x0304,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = 0,
+               .sram_pdn_ack_bits = 0,
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_CONN,
+                                   MT8192_TOP_AXI_PROT_EN_SET,
+                                   MT8192_TOP_AXI_PROT_EN_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_STA1),
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_CONN_2ND,
+                                   MT8192_TOP_AXI_PROT_EN_SET,
+                                   MT8192_TOP_AXI_PROT_EN_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_STA1),
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_1_CONN,
+                                   MT8192_TOP_AXI_PROT_EN_1_SET,
+                                   MT8192_TOP_AXI_PROT_EN_1_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_1_STA1),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8192_POWER_DOMAIN_MFG0] = {
+               .name = "mfg0",
+               .sta_mask = BIT(2),
+               .ctl_offs = 0x0308,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .caps = MTK_SCPD_DOMAIN_SUPPLY,
+       },
+       [MT8192_POWER_DOMAIN_MFG1] = {
+               .name = "mfg1",
+               .sta_mask = BIT(3),
+               .ctl_offs = 0x030c,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_1_MFG1,
+                                   MT8192_TOP_AXI_PROT_EN_1_SET,
+                                   MT8192_TOP_AXI_PROT_EN_1_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_1_STA1),
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_2_MFG1,
+                                   MT8192_TOP_AXI_PROT_EN_2_SET,
+                                   MT8192_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_2_STA1),
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MFG1,
+                                   MT8192_TOP_AXI_PROT_EN_SET,
+                                   MT8192_TOP_AXI_PROT_EN_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_STA1),
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_2_MFG1_2ND,
+                                   MT8192_TOP_AXI_PROT_EN_2_SET,
+                                   MT8192_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_2_STA1),
+               },
+               .caps = MTK_SCPD_DOMAIN_SUPPLY,
+       },
+       [MT8192_POWER_DOMAIN_MFG2] = {
+               .name = "mfg2",
+               .sta_mask = BIT(4),
+               .ctl_offs = 0x0310,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+       },
+       [MT8192_POWER_DOMAIN_MFG3] = {
+               .name = "mfg3",
+               .sta_mask = BIT(5),
+               .ctl_offs = 0x0314,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+       },
+       [MT8192_POWER_DOMAIN_MFG4] = {
+               .name = "mfg4",
+               .sta_mask = BIT(6),
+               .ctl_offs = 0x0318,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+       },
+       [MT8192_POWER_DOMAIN_MFG5] = {
+               .name = "mfg5",
+               .sta_mask = BIT(7),
+               .ctl_offs = 0x031c,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+       },
+       [MT8192_POWER_DOMAIN_MFG6] = {
+               .name = "mfg6",
+               .sta_mask = BIT(8),
+               .ctl_offs = 0x0320,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+       },
+       [MT8192_POWER_DOMAIN_DISP] = {
+               .name = "disp",
+               .sta_mask = BIT(20),
+               .ctl_offs = 0x0350,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR_IGN(MT8192_TOP_AXI_PROT_EN_MM_DISP,
+                                       MT8192_TOP_AXI_PROT_EN_MM_SET,
+                                       MT8192_TOP_AXI_PROT_EN_MM_CLR,
+                                       MT8192_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR_IGN(MT8192_TOP_AXI_PROT_EN_MM_2_DISP,
+                                       MT8192_TOP_AXI_PROT_EN_MM_2_SET,
+                                       MT8192_TOP_AXI_PROT_EN_MM_2_CLR,
+                                       MT8192_TOP_AXI_PROT_EN_MM_2_STA1),
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_DISP,
+                                   MT8192_TOP_AXI_PROT_EN_SET,
+                                   MT8192_TOP_AXI_PROT_EN_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_STA1),
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_DISP_2ND,
+                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_2_DISP_2ND,
+                                   MT8192_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8192_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_MM_2_STA1),
+               },
+       },
+       [MT8192_POWER_DOMAIN_IPE] = {
+               .name = "ipe",
+               .sta_mask = BIT(14),
+               .ctl_offs = 0x0338,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_IPE,
+                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_IPE_2ND,
+                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
+               },
+       },
+       [MT8192_POWER_DOMAIN_ISP] = {
+               .name = "isp",
+               .sta_mask = BIT(12),
+               .ctl_offs = 0x0330,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_2_ISP,
+                                   MT8192_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8192_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_MM_2_STA1),
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_2_ISP_2ND,
+                                   MT8192_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8192_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_MM_2_STA1),
+               },
+       },
+       [MT8192_POWER_DOMAIN_ISP2] = {
+               .name = "isp2",
+               .sta_mask = BIT(13),
+               .ctl_offs = 0x0334,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_ISP2,
+                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_ISP2_2ND,
+                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
+               },
+       },
+       [MT8192_POWER_DOMAIN_MDP] = {
+               .name = "mdp",
+               .sta_mask = BIT(19),
+               .ctl_offs = 0x034c,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_2_MDP,
+                                   MT8192_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8192_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_MM_2_STA1),
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_2_MDP_2ND,
+                                   MT8192_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8192_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_MM_2_STA1),
+               },
+       },
+       [MT8192_POWER_DOMAIN_VENC] = {
+               .name = "venc",
+               .sta_mask = BIT(17),
+               .ctl_offs = 0x0344,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_VENC,
+                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_VENC_2ND,
+                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
+               },
+       },
+       [MT8192_POWER_DOMAIN_VDEC] = {
+               .name = "vdec",
+               .sta_mask = BIT(15),
+               .ctl_offs = 0x033c,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_VDEC,
+                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_VDEC_2ND,
+                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
+               },
+       },
+       [MT8192_POWER_DOMAIN_VDEC2] = {
+               .name = "vdec2",
+               .sta_mask = BIT(16),
+               .ctl_offs = 0x0340,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+       },
+       [MT8192_POWER_DOMAIN_CAM] = {
+               .name = "cam",
+               .sta_mask = BIT(23),
+               .ctl_offs = 0x035c,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_2_CAM,
+                                   MT8192_TOP_AXI_PROT_EN_2_SET,
+                                   MT8192_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_2_STA1),
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_CAM,
+                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_1_CAM,
+                                   MT8192_TOP_AXI_PROT_EN_1_SET,
+                                   MT8192_TOP_AXI_PROT_EN_1_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_1_STA1),
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_CAM_2ND,
+                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_VDNR_CAM,
+                                   MT8192_TOP_AXI_PROT_EN_VDNR_SET,
+                                   MT8192_TOP_AXI_PROT_EN_VDNR_CLR,
+                                   MT8192_TOP_AXI_PROT_EN_VDNR_STA1),
+               },
+       },
+       [MT8192_POWER_DOMAIN_CAM_RAWA] = {
+               .name = "cam_rawa",
+               .sta_mask = BIT(24),
+               .ctl_offs = 0x0360,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+       },
+       [MT8192_POWER_DOMAIN_CAM_RAWB] = {
+               .name = "cam_rawb",
+               .sta_mask = BIT(25),
+               .ctl_offs = 0x0364,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+       },
+       [MT8192_POWER_DOMAIN_CAM_RAWC] = {
+               .name = "cam_rawc",
+               .sta_mask = BIT(26),
+               .ctl_offs = 0x0368,
+               .pwr_sta_offs = 0x016c,
+               .pwr_sta2nd_offs = 0x0170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+       },
+};
+
+static const struct scpsys_soc_data mt8192_scpsys_data = {
+       .domains_data = scpsys_domain_data_mt8192,
+       .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8192),
+};
+
+#endif /* __SOC_MEDIATEK_MT8192_PM_DOMAINS_H */
diff --git a/drivers/genpd/mediatek/mt8195-pm-domains.h b/drivers/genpd/mediatek/mt8195-pm-domains.h
new file mode 100644 (file)
index 0000000..d7387ea
--- /dev/null
@@ -0,0 +1,613 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2021 MediaTek Inc.
+ * Author: Chun-Jie Chen <chun-jie.chen@mediatek.com>
+ */
+
+#ifndef __SOC_MEDIATEK_MT8195_PM_DOMAINS_H
+#define __SOC_MEDIATEK_MT8195_PM_DOMAINS_H
+
+#include "mtk-pm-domains.h"
+#include <dt-bindings/power/mt8195-power.h>
+
+/*
+ * MT8195 power domain support
+ */
+
+static const struct scpsys_domain_data scpsys_domain_data_mt8195[] = {
+       [MT8195_POWER_DOMAIN_PCIE_MAC_P0] = {
+               .name = "pcie_mac_p0",
+               .sta_mask = BIT(11),
+               .ctl_offs = 0x328,
+               .pwr_sta_offs = 0x174,
+               .pwr_sta2nd_offs = 0x178,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDNR_PCIE_MAC_P0,
+                                   MT8195_TOP_AXI_PROT_EN_VDNR_SET,
+                                   MT8195_TOP_AXI_PROT_EN_VDNR_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_VDNR_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDNR_1_PCIE_MAC_P0,
+                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_SET,
+                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_STA1),
+               },
+       },
+       [MT8195_POWER_DOMAIN_PCIE_MAC_P1] = {
+               .name = "pcie_mac_p1",
+               .sta_mask = BIT(12),
+               .ctl_offs = 0x32C,
+               .pwr_sta_offs = 0x174,
+               .pwr_sta2nd_offs = 0x178,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDNR_PCIE_MAC_P1,
+                                   MT8195_TOP_AXI_PROT_EN_VDNR_SET,
+                                   MT8195_TOP_AXI_PROT_EN_VDNR_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_VDNR_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDNR_1_PCIE_MAC_P1,
+                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_SET,
+                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_STA1),
+               },
+       },
+       [MT8195_POWER_DOMAIN_PCIE_PHY] = {
+               .name = "pcie_phy",
+               .sta_mask = BIT(13),
+               .ctl_offs = 0x330,
+               .pwr_sta_offs = 0x174,
+               .pwr_sta2nd_offs = 0x178,
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT8195_POWER_DOMAIN_SSUSB_PCIE_PHY] = {
+               .name = "ssusb_pcie_phy",
+               .sta_mask = BIT(14),
+               .ctl_offs = 0x334,
+               .pwr_sta_offs = 0x174,
+               .pwr_sta2nd_offs = 0x178,
+               .caps = MTK_SCPD_ACTIVE_WAKEUP | MTK_SCPD_ALWAYS_ON,
+       },
+       [MT8195_POWER_DOMAIN_CSI_RX_TOP] = {
+               .name = "csi_rx_top",
+               .sta_mask = BIT(18),
+               .ctl_offs = 0x3C4,
+               .pwr_sta_offs = 0x174,
+               .pwr_sta2nd_offs = 0x178,
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8195_POWER_DOMAIN_ETHER] = {
+               .name = "ether",
+               .sta_mask = BIT(3),
+               .ctl_offs = 0x344,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT8195_POWER_DOMAIN_ADSP] = {
+               .name = "adsp",
+               .sta_mask = BIT(10),
+               .ctl_offs = 0x360,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_2_ADSP,
+                                   MT8195_TOP_AXI_PROT_EN_2_SET,
+                                   MT8195_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_2_STA1),
+               },
+               .caps = MTK_SCPD_SRAM_ISO | MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT8195_POWER_DOMAIN_AUDIO] = {
+               .name = "audio",
+               .sta_mask = BIT(8),
+               .ctl_offs = 0x358,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_2_AUDIO,
+                                   MT8195_TOP_AXI_PROT_EN_2_SET,
+                                   MT8195_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_2_STA1),
+               },
+       },
+       [MT8195_POWER_DOMAIN_MFG0] = {
+               .name = "mfg0",
+               .sta_mask = BIT(1),
+               .ctl_offs = 0x300,
+               .pwr_sta_offs = 0x174,
+               .pwr_sta2nd_offs = 0x178,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
+       },
+       [MT8195_POWER_DOMAIN_MFG1] = {
+               .name = "mfg1",
+               .sta_mask = BIT(2),
+               .ctl_offs = 0x304,
+               .pwr_sta_offs = 0x174,
+               .pwr_sta2nd_offs = 0x178,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MFG1,
+                                   MT8195_TOP_AXI_PROT_EN_SET,
+                                   MT8195_TOP_AXI_PROT_EN_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_2_MFG1,
+                                   MT8195_TOP_AXI_PROT_EN_2_SET,
+                                   MT8195_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_2_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_1_MFG1,
+                                   MT8195_TOP_AXI_PROT_EN_1_SET,
+                                   MT8195_TOP_AXI_PROT_EN_1_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_1_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_2_MFG1_2ND,
+                                   MT8195_TOP_AXI_PROT_EN_2_SET,
+                                   MT8195_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_2_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MFG1_2ND,
+                                   MT8195_TOP_AXI_PROT_EN_SET,
+                                   MT8195_TOP_AXI_PROT_EN_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_MFG1,
+                                   MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET,
+                                   MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA1),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
+       },
+       [MT8195_POWER_DOMAIN_MFG2] = {
+               .name = "mfg2",
+               .sta_mask = BIT(3),
+               .ctl_offs = 0x308,
+               .pwr_sta_offs = 0x174,
+               .pwr_sta2nd_offs = 0x178,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8195_POWER_DOMAIN_MFG3] = {
+               .name = "mfg3",
+               .sta_mask = BIT(4),
+               .ctl_offs = 0x30C,
+               .pwr_sta_offs = 0x174,
+               .pwr_sta2nd_offs = 0x178,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8195_POWER_DOMAIN_MFG4] = {
+               .name = "mfg4",
+               .sta_mask = BIT(5),
+               .ctl_offs = 0x310,
+               .pwr_sta_offs = 0x174,
+               .pwr_sta2nd_offs = 0x178,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8195_POWER_DOMAIN_MFG5] = {
+               .name = "mfg5",
+               .sta_mask = BIT(6),
+               .ctl_offs = 0x314,
+               .pwr_sta_offs = 0x174,
+               .pwr_sta2nd_offs = 0x178,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8195_POWER_DOMAIN_MFG6] = {
+               .name = "mfg6",
+               .sta_mask = BIT(7),
+               .ctl_offs = 0x318,
+               .pwr_sta_offs = 0x174,
+               .pwr_sta2nd_offs = 0x178,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8195_POWER_DOMAIN_VPPSYS0] = {
+               .name = "vppsys0",
+               .sta_mask = BIT(11),
+               .ctl_offs = 0x364,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VPPSYS0,
+                                   MT8195_TOP_AXI_PROT_EN_SET,
+                                   MT8195_TOP_AXI_PROT_EN_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VPPSYS0,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VPPSYS0_2ND,
+                                   MT8195_TOP_AXI_PROT_EN_SET,
+                                   MT8195_TOP_AXI_PROT_EN_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VPPSYS0_2ND,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VPPSYS0,
+                                   MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET,
+                                   MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA1),
+               },
+       },
+       [MT8195_POWER_DOMAIN_VDOSYS0] = {
+               .name = "vdosys0",
+               .sta_mask = BIT(13),
+               .ctl_offs = 0x36C,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDOSYS0,
+                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDOSYS0,
+                                   MT8195_TOP_AXI_PROT_EN_SET,
+                                   MT8195_TOP_AXI_PROT_EN_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VDOSYS0,
+                                   MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET,
+                                   MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA1),
+               },
+       },
+       [MT8195_POWER_DOMAIN_VPPSYS1] = {
+               .name = "vppsys1",
+               .sta_mask = BIT(12),
+               .ctl_offs = 0x368,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VPPSYS1,
+                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VPPSYS1_2ND,
+                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VPPSYS1,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
+               },
+       },
+       [MT8195_POWER_DOMAIN_VDOSYS1] = {
+               .name = "vdosys1",
+               .sta_mask = BIT(14),
+               .ctl_offs = 0x370,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDOSYS1,
+                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDOSYS1_2ND,
+                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VDOSYS1,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
+               },
+       },
+       [MT8195_POWER_DOMAIN_DP_TX] = {
+               .name = "dp_tx",
+               .sta_mask = BIT(16),
+               .ctl_offs = 0x378,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDNR_1_DP_TX,
+                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_SET,
+                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_STA1),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8195_POWER_DOMAIN_EPD_TX] = {
+               .name = "epd_tx",
+               .sta_mask = BIT(17),
+               .ctl_offs = 0x37C,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDNR_1_EPD_TX,
+                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_SET,
+                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_STA1),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8195_POWER_DOMAIN_HDMI_TX] = {
+               .name = "hdmi_tx",
+               .sta_mask = BIT(18),
+               .ctl_offs = 0x380,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT8195_POWER_DOMAIN_WPESYS] = {
+               .name = "wpesys",
+               .sta_mask = BIT(15),
+               .ctl_offs = 0x374,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_WPESYS,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_WPESYS,
+                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_WPESYS_2ND,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
+               },
+       },
+       [MT8195_POWER_DOMAIN_VDEC0] = {
+               .name = "vdec0",
+               .sta_mask = BIT(20),
+               .ctl_offs = 0x388,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDEC0,
+                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VDEC0,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDEC0_2ND,
+                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VDEC0_2ND,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8195_POWER_DOMAIN_VDEC1] = {
+               .name = "vdec1",
+               .sta_mask = BIT(21),
+               .ctl_offs = 0x38C,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDEC1,
+                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDEC1_2ND,
+                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8195_POWER_DOMAIN_VDEC2] = {
+               .name = "vdec2",
+               .sta_mask = BIT(22),
+               .ctl_offs = 0x390,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VDEC2,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VDEC2_2ND,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8195_POWER_DOMAIN_VENC] = {
+               .name = "venc",
+               .sta_mask = BIT(23),
+               .ctl_offs = 0x394,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VENC,
+                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VENC_2ND,
+                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VENC,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8195_POWER_DOMAIN_VENC_CORE1] = {
+               .name = "venc_core1",
+               .sta_mask = BIT(24),
+               .ctl_offs = 0x398,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VENC_CORE1,
+                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VENC_CORE1,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8195_POWER_DOMAIN_IMG] = {
+               .name = "img",
+               .sta_mask = BIT(29),
+               .ctl_offs = 0x3AC,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_IMG,
+                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_IMG_2ND,
+                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8195_POWER_DOMAIN_DIP] = {
+               .name = "dip",
+               .sta_mask = BIT(30),
+               .ctl_offs = 0x3B0,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8195_POWER_DOMAIN_IPE] = {
+               .name = "ipe",
+               .sta_mask = BIT(31),
+               .ctl_offs = 0x3B4,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_IPE,
+                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_IPE,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8195_POWER_DOMAIN_CAM] = {
+               .name = "cam",
+               .sta_mask = BIT(25),
+               .ctl_offs = 0x39C,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .bp_infracfg = {
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_2_CAM,
+                                   MT8195_TOP_AXI_PROT_EN_2_SET,
+                                   MT8195_TOP_AXI_PROT_EN_2_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_2_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_CAM,
+                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_1_CAM,
+                                   MT8195_TOP_AXI_PROT_EN_1_SET,
+                                   MT8195_TOP_AXI_PROT_EN_1_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_1_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_CAM_2ND,
+                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
+                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_CAM,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
+                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
+               },
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8195_POWER_DOMAIN_CAM_RAWA] = {
+               .name = "cam_rawa",
+               .sta_mask = BIT(26),
+               .ctl_offs = 0x3A0,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8195_POWER_DOMAIN_CAM_RAWB] = {
+               .name = "cam_rawb",
+               .sta_mask = BIT(27),
+               .ctl_offs = 0x3A4,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+       [MT8195_POWER_DOMAIN_CAM_MRAW] = {
+               .name = "cam_mraw",
+               .sta_mask = BIT(28),
+               .ctl_offs = 0x3A8,
+               .pwr_sta_offs = 0x16c,
+               .pwr_sta2nd_offs = 0x170,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+       },
+};
+
+static const struct scpsys_soc_data mt8195_scpsys_data = {
+       .domains_data = scpsys_domain_data_mt8195,
+       .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8195),
+};
+
+#endif /* __SOC_MEDIATEK_MT8195_PM_DOMAINS_H */
diff --git a/drivers/genpd/mediatek/mtk-pm-domains.c b/drivers/genpd/mediatek/mtk-pm-domains.c
new file mode 100644 (file)
index 0000000..354249c
--- /dev/null
@@ -0,0 +1,688 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2020 Collabora Ltd.
+ */
+#include <linux/clk.h>
+#include <linux/clk-provider.h>
+#include <linux/init.h>
+#include <linux/io.h>
+#include <linux/iopoll.h>
+#include <linux/mfd/syscon.h>
+#include <linux/of_clk.h>
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
+#include <linux/pm_domain.h>
+#include <linux/regmap.h>
+#include <linux/regulator/consumer.h>
+#include <linux/soc/mediatek/infracfg.h>
+
+#include "mt6795-pm-domains.h"
+#include "mt8167-pm-domains.h"
+#include "mt8173-pm-domains.h"
+#include "mt8183-pm-domains.h"
+#include "mt8186-pm-domains.h"
+#include "mt8188-pm-domains.h"
+#include "mt8192-pm-domains.h"
+#include "mt8195-pm-domains.h"
+
+#define MTK_POLL_DELAY_US              10
+#define MTK_POLL_TIMEOUT               USEC_PER_SEC
+
+#define PWR_RST_B_BIT                  BIT(0)
+#define PWR_ISO_BIT                    BIT(1)
+#define PWR_ON_BIT                     BIT(2)
+#define PWR_ON_2ND_BIT                 BIT(3)
+#define PWR_CLK_DIS_BIT                        BIT(4)
+#define PWR_SRAM_CLKISO_BIT            BIT(5)
+#define PWR_SRAM_ISOINT_B_BIT          BIT(6)
+
+struct scpsys_domain {
+       struct generic_pm_domain genpd;
+       const struct scpsys_domain_data *data;
+       struct scpsys *scpsys;
+       int num_clks;
+       struct clk_bulk_data *clks;
+       int num_subsys_clks;
+       struct clk_bulk_data *subsys_clks;
+       struct regmap *infracfg;
+       struct regmap *smi;
+       struct regulator *supply;
+};
+
+struct scpsys {
+       struct device *dev;
+       struct regmap *base;
+       const struct scpsys_soc_data *soc_data;
+       struct genpd_onecell_data pd_data;
+       struct generic_pm_domain *domains[];
+};
+
+#define to_scpsys_domain(gpd) container_of(gpd, struct scpsys_domain, genpd)
+
+static bool scpsys_domain_is_on(struct scpsys_domain *pd)
+{
+       struct scpsys *scpsys = pd->scpsys;
+       u32 status, status2;
+
+       regmap_read(scpsys->base, pd->data->pwr_sta_offs, &status);
+       status &= pd->data->sta_mask;
+
+       regmap_read(scpsys->base, pd->data->pwr_sta2nd_offs, &status2);
+       status2 &= pd->data->sta_mask;
+
+       /* A domain is on when both status bits are set. */
+       return status && status2;
+}
+
+static int scpsys_sram_enable(struct scpsys_domain *pd)
+{
+       u32 pdn_ack = pd->data->sram_pdn_ack_bits;
+       struct scpsys *scpsys = pd->scpsys;
+       unsigned int tmp;
+       int ret;
+
+       regmap_clear_bits(scpsys->base, pd->data->ctl_offs, pd->data->sram_pdn_bits);
+
+       /* Either wait until SRAM_PDN_ACK all 1 or 0 */
+       ret = regmap_read_poll_timeout(scpsys->base, pd->data->ctl_offs, tmp,
+                                      (tmp & pdn_ack) == 0, MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT);
+       if (ret < 0)
+               return ret;
+
+       if (MTK_SCPD_CAPS(pd, MTK_SCPD_SRAM_ISO)) {
+               regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_SRAM_ISOINT_B_BIT);
+               udelay(1);
+               regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_SRAM_CLKISO_BIT);
+       }
+
+       return 0;
+}
+
+static int scpsys_sram_disable(struct scpsys_domain *pd)
+{
+       u32 pdn_ack = pd->data->sram_pdn_ack_bits;
+       struct scpsys *scpsys = pd->scpsys;
+       unsigned int tmp;
+
+       if (MTK_SCPD_CAPS(pd, MTK_SCPD_SRAM_ISO)) {
+               regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_SRAM_CLKISO_BIT);
+               udelay(1);
+               regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_SRAM_ISOINT_B_BIT);
+       }
+
+       regmap_set_bits(scpsys->base, pd->data->ctl_offs, pd->data->sram_pdn_bits);
+
+       /* Either wait until SRAM_PDN_ACK all 1 or 0 */
+       return regmap_read_poll_timeout(scpsys->base, pd->data->ctl_offs, tmp,
+                                       (tmp & pdn_ack) == pdn_ack, MTK_POLL_DELAY_US,
+                                       MTK_POLL_TIMEOUT);
+}
+
+static int _scpsys_bus_protect_enable(const struct scpsys_bus_prot_data *bpd, struct regmap *regmap)
+{
+       int i, ret;
+
+       for (i = 0; i < SPM_MAX_BUS_PROT_DATA; i++) {
+               u32 val, mask = bpd[i].bus_prot_mask;
+
+               if (!mask)
+                       break;
+
+               if (bpd[i].bus_prot_reg_update)
+                       regmap_set_bits(regmap, bpd[i].bus_prot_set, mask);
+               else
+                       regmap_write(regmap, bpd[i].bus_prot_set, mask);
+
+               ret = regmap_read_poll_timeout(regmap, bpd[i].bus_prot_sta,
+                                              val, (val & mask) == mask,
+                                              MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT);
+               if (ret)
+                       return ret;
+       }
+
+       return 0;
+}
+
+static int scpsys_bus_protect_enable(struct scpsys_domain *pd)
+{
+       int ret;
+
+       ret = _scpsys_bus_protect_enable(pd->data->bp_infracfg, pd->infracfg);
+       if (ret)
+               return ret;
+
+       return _scpsys_bus_protect_enable(pd->data->bp_smi, pd->smi);
+}
+
+static int _scpsys_bus_protect_disable(const struct scpsys_bus_prot_data *bpd,
+                                      struct regmap *regmap)
+{
+       int i, ret;
+
+       for (i = SPM_MAX_BUS_PROT_DATA - 1; i >= 0; i--) {
+               u32 val, mask = bpd[i].bus_prot_mask;
+
+               if (!mask)
+                       continue;
+
+               if (bpd[i].bus_prot_reg_update)
+                       regmap_clear_bits(regmap, bpd[i].bus_prot_clr, mask);
+               else
+                       regmap_write(regmap, bpd[i].bus_prot_clr, mask);
+
+               if (bpd[i].ignore_clr_ack)
+                       continue;
+
+               ret = regmap_read_poll_timeout(regmap, bpd[i].bus_prot_sta,
+                                              val, !(val & mask),
+                                              MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT);
+               if (ret)
+                       return ret;
+       }
+
+       return 0;
+}
+
+static int scpsys_bus_protect_disable(struct scpsys_domain *pd)
+{
+       int ret;
+
+       ret = _scpsys_bus_protect_disable(pd->data->bp_smi, pd->smi);
+       if (ret)
+               return ret;
+
+       return _scpsys_bus_protect_disable(pd->data->bp_infracfg, pd->infracfg);
+}
+
+static int scpsys_regulator_enable(struct regulator *supply)
+{
+       return supply ? regulator_enable(supply) : 0;
+}
+
+static int scpsys_regulator_disable(struct regulator *supply)
+{
+       return supply ? regulator_disable(supply) : 0;
+}
+
+static int scpsys_power_on(struct generic_pm_domain *genpd)
+{
+       struct scpsys_domain *pd = container_of(genpd, struct scpsys_domain, genpd);
+       struct scpsys *scpsys = pd->scpsys;
+       bool tmp;
+       int ret;
+
+       ret = scpsys_regulator_enable(pd->supply);
+       if (ret)
+               return ret;
+
+       ret = clk_bulk_prepare_enable(pd->num_clks, pd->clks);
+       if (ret)
+               goto err_reg;
+
+       if (pd->data->ext_buck_iso_offs && MTK_SCPD_CAPS(pd, MTK_SCPD_EXT_BUCK_ISO))
+               regmap_clear_bits(scpsys->base, pd->data->ext_buck_iso_offs,
+                                 pd->data->ext_buck_iso_mask);
+
+       /* subsys power on */
+       regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_ON_BIT);
+       regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_ON_2ND_BIT);
+
+       /* wait until PWR_ACK = 1 */
+       ret = readx_poll_timeout(scpsys_domain_is_on, pd, tmp, tmp, MTK_POLL_DELAY_US,
+                                MTK_POLL_TIMEOUT);
+       if (ret < 0)
+               goto err_pwr_ack;
+
+       regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_CLK_DIS_BIT);
+       regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ISO_BIT);
+       regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_RST_B_BIT);
+
+       ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks);
+       if (ret)
+               goto err_pwr_ack;
+
+       ret = scpsys_sram_enable(pd);
+       if (ret < 0)
+               goto err_disable_subsys_clks;
+
+       ret = scpsys_bus_protect_disable(pd);
+       if (ret < 0)
+               goto err_disable_sram;
+
+       return 0;
+
+err_disable_sram:
+       scpsys_sram_disable(pd);
+err_disable_subsys_clks:
+       clk_bulk_disable_unprepare(pd->num_subsys_clks, pd->subsys_clks);
+err_pwr_ack:
+       clk_bulk_disable_unprepare(pd->num_clks, pd->clks);
+err_reg:
+       scpsys_regulator_disable(pd->supply);
+       return ret;
+}
+
+static int scpsys_power_off(struct generic_pm_domain *genpd)
+{
+       struct scpsys_domain *pd = container_of(genpd, struct scpsys_domain, genpd);
+       struct scpsys *scpsys = pd->scpsys;
+       bool tmp;
+       int ret;
+
+       ret = scpsys_bus_protect_enable(pd);
+       if (ret < 0)
+               return ret;
+
+       ret = scpsys_sram_disable(pd);
+       if (ret < 0)
+               return ret;
+
+       if (pd->data->ext_buck_iso_offs && MTK_SCPD_CAPS(pd, MTK_SCPD_EXT_BUCK_ISO))
+               regmap_set_bits(scpsys->base, pd->data->ext_buck_iso_offs,
+                               pd->data->ext_buck_iso_mask);
+
+       clk_bulk_disable_unprepare(pd->num_subsys_clks, pd->subsys_clks);
+
+       /* subsys power off */
+       regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_ISO_BIT);
+       regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_CLK_DIS_BIT);
+       regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_RST_B_BIT);
+       regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ON_2ND_BIT);
+       regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ON_BIT);
+
+       /* wait until PWR_ACK = 0 */
+       ret = readx_poll_timeout(scpsys_domain_is_on, pd, tmp, !tmp, MTK_POLL_DELAY_US,
+                                MTK_POLL_TIMEOUT);
+       if (ret < 0)
+               return ret;
+
+       clk_bulk_disable_unprepare(pd->num_clks, pd->clks);
+
+       scpsys_regulator_disable(pd->supply);
+
+       return 0;
+}
+
+static struct
+generic_pm_domain *scpsys_add_one_domain(struct scpsys *scpsys, struct device_node *node)
+{
+       const struct scpsys_domain_data *domain_data;
+       struct scpsys_domain *pd;
+       struct device_node *root_node = scpsys->dev->of_node;
+       struct device_node *smi_node;
+       struct property *prop;
+       const char *clk_name;
+       int i, ret, num_clks;
+       struct clk *clk;
+       int clk_ind = 0;
+       u32 id;
+
+       ret = of_property_read_u32(node, "reg", &id);
+       if (ret) {
+               dev_err(scpsys->dev, "%pOF: failed to retrieve domain id from reg: %d\n",
+                       node, ret);
+               return ERR_PTR(-EINVAL);
+       }
+
+       if (id >= scpsys->soc_data->num_domains) {
+               dev_err(scpsys->dev, "%pOF: invalid domain id %d\n", node, id);
+               return ERR_PTR(-EINVAL);
+       }
+
+       domain_data = &scpsys->soc_data->domains_data[id];
+       if (domain_data->sta_mask == 0) {
+               dev_err(scpsys->dev, "%pOF: undefined domain id %d\n", node, id);
+               return ERR_PTR(-EINVAL);
+       }
+
+       pd = devm_kzalloc(scpsys->dev, sizeof(*pd), GFP_KERNEL);
+       if (!pd)
+               return ERR_PTR(-ENOMEM);
+
+       pd->data = domain_data;
+       pd->scpsys = scpsys;
+
+       if (MTK_SCPD_CAPS(pd, MTK_SCPD_DOMAIN_SUPPLY)) {
+               /*
+                * Find regulator in current power domain node.
+                * devm_regulator_get() finds regulator in a node and its child
+                * node, so set of_node to current power domain node then change
+                * back to original node after regulator is found for current
+                * power domain node.
+                */
+               scpsys->dev->of_node = node;
+               pd->supply = devm_regulator_get(scpsys->dev, "domain");
+               scpsys->dev->of_node = root_node;
+               if (IS_ERR(pd->supply)) {
+                       dev_err_probe(scpsys->dev, PTR_ERR(pd->supply),
+                                     "%pOF: failed to get power supply.\n",
+                                     node);
+                       return ERR_CAST(pd->supply);
+               }
+       }
+
+       pd->infracfg = syscon_regmap_lookup_by_phandle_optional(node, "mediatek,infracfg");
+       if (IS_ERR(pd->infracfg))
+               return ERR_CAST(pd->infracfg);
+
+       smi_node = of_parse_phandle(node, "mediatek,smi", 0);
+       if (smi_node) {
+               pd->smi = device_node_to_regmap(smi_node);
+               of_node_put(smi_node);
+               if (IS_ERR(pd->smi))
+                       return ERR_CAST(pd->smi);
+       }
+
+       num_clks = of_clk_get_parent_count(node);
+       if (num_clks > 0) {
+               /* Calculate number of subsys_clks */
+               of_property_for_each_string(node, "clock-names", prop, clk_name) {
+                       char *subsys;
+
+                       subsys = strchr(clk_name, '-');
+                       if (subsys)
+                               pd->num_subsys_clks++;
+                       else
+                               pd->num_clks++;
+               }
+
+               pd->clks = devm_kcalloc(scpsys->dev, pd->num_clks, sizeof(*pd->clks), GFP_KERNEL);
+               if (!pd->clks)
+                       return ERR_PTR(-ENOMEM);
+
+               pd->subsys_clks = devm_kcalloc(scpsys->dev, pd->num_subsys_clks,
+                                              sizeof(*pd->subsys_clks), GFP_KERNEL);
+               if (!pd->subsys_clks)
+                       return ERR_PTR(-ENOMEM);
+
+       }
+
+       for (i = 0; i < pd->num_clks; i++) {
+               clk = of_clk_get(node, i);
+               if (IS_ERR(clk)) {
+                       ret = PTR_ERR(clk);
+                       dev_err_probe(scpsys->dev, ret,
+                                     "%pOF: failed to get clk at index %d\n", node, i);
+                       goto err_put_clocks;
+               }
+
+               pd->clks[clk_ind++].clk = clk;
+       }
+
+       for (i = 0; i < pd->num_subsys_clks; i++) {
+               clk = of_clk_get(node, i + clk_ind);
+               if (IS_ERR(clk)) {
+                       ret = PTR_ERR(clk);
+                       dev_err_probe(scpsys->dev, ret,
+                                     "%pOF: failed to get clk at index %d\n", node,
+                                     i + clk_ind);
+                       goto err_put_subsys_clocks;
+               }
+
+               pd->subsys_clks[i].clk = clk;
+       }
+
+       /*
+        * Initially turn on all domains to make the domains usable
+        * with !CONFIG_PM and to get the hardware in sync with the
+        * software.  The unused domains will be switched off during
+        * late_init time.
+        */
+       if (MTK_SCPD_CAPS(pd, MTK_SCPD_KEEP_DEFAULT_OFF)) {
+               if (scpsys_domain_is_on(pd))
+                       dev_warn(scpsys->dev,
+                                "%pOF: A default off power domain has been ON\n", node);
+       } else {
+               ret = scpsys_power_on(&pd->genpd);
+               if (ret < 0) {
+                       dev_err(scpsys->dev, "%pOF: failed to power on domain: %d\n", node, ret);
+                       goto err_put_subsys_clocks;
+               }
+
+               if (MTK_SCPD_CAPS(pd, MTK_SCPD_ALWAYS_ON))
+                       pd->genpd.flags |= GENPD_FLAG_ALWAYS_ON;
+       }
+
+       if (scpsys->domains[id]) {
+               ret = -EINVAL;
+               dev_err(scpsys->dev,
+                       "power domain with id %d already exists, check your device-tree\n", id);
+               goto err_put_subsys_clocks;
+       }
+
+       if (!pd->data->name)
+               pd->genpd.name = node->name;
+       else
+               pd->genpd.name = pd->data->name;
+
+       pd->genpd.power_off = scpsys_power_off;
+       pd->genpd.power_on = scpsys_power_on;
+
+       if (MTK_SCPD_CAPS(pd, MTK_SCPD_ACTIVE_WAKEUP))
+               pd->genpd.flags |= GENPD_FLAG_ACTIVE_WAKEUP;
+
+       if (MTK_SCPD_CAPS(pd, MTK_SCPD_KEEP_DEFAULT_OFF))
+               pm_genpd_init(&pd->genpd, NULL, true);
+       else
+               pm_genpd_init(&pd->genpd, NULL, false);
+
+       scpsys->domains[id] = &pd->genpd;
+
+       return scpsys->pd_data.domains[id];
+
+err_put_subsys_clocks:
+       clk_bulk_put(pd->num_subsys_clks, pd->subsys_clks);
+err_put_clocks:
+       clk_bulk_put(pd->num_clks, pd->clks);
+       return ERR_PTR(ret);
+}
+
+static int scpsys_add_subdomain(struct scpsys *scpsys, struct device_node *parent)
+{
+       struct generic_pm_domain *child_pd, *parent_pd;
+       struct device_node *child;
+       int ret;
+
+       for_each_child_of_node(parent, child) {
+               u32 id;
+
+               ret = of_property_read_u32(parent, "reg", &id);
+               if (ret) {
+                       dev_err(scpsys->dev, "%pOF: failed to get parent domain id\n", child);
+                       goto err_put_node;
+               }
+
+               if (!scpsys->pd_data.domains[id]) {
+                       ret = -EINVAL;
+                       dev_err(scpsys->dev, "power domain with id %d does not exist\n", id);
+                       goto err_put_node;
+               }
+
+               parent_pd = scpsys->pd_data.domains[id];
+
+               child_pd = scpsys_add_one_domain(scpsys, child);
+               if (IS_ERR(child_pd)) {
+                       ret = PTR_ERR(child_pd);
+                       dev_err_probe(scpsys->dev, ret, "%pOF: failed to get child domain id\n",
+                                     child);
+                       goto err_put_node;
+               }
+
+               ret = pm_genpd_add_subdomain(parent_pd, child_pd);
+               if (ret) {
+                       dev_err(scpsys->dev, "failed to add %s subdomain to parent %s\n",
+                               child_pd->name, parent_pd->name);
+                       goto err_put_node;
+               } else {
+                       dev_dbg(scpsys->dev, "%s add subdomain: %s\n", parent_pd->name,
+                               child_pd->name);
+               }
+
+               /* recursive call to add all subdomains */
+               ret = scpsys_add_subdomain(scpsys, child);
+               if (ret)
+                       goto err_put_node;
+       }
+
+       return 0;
+
+err_put_node:
+       of_node_put(child);
+       return ret;
+}
+
+static void scpsys_remove_one_domain(struct scpsys_domain *pd)
+{
+       int ret;
+
+       if (scpsys_domain_is_on(pd))
+               scpsys_power_off(&pd->genpd);
+
+       /*
+        * We're in the error cleanup already, so we only complain,
+        * but won't emit another error on top of the original one.
+        */
+       ret = pm_genpd_remove(&pd->genpd);
+       if (ret < 0)
+               dev_err(pd->scpsys->dev,
+                       "failed to remove domain '%s' : %d - state may be inconsistent\n",
+                       pd->genpd.name, ret);
+
+       clk_bulk_put(pd->num_clks, pd->clks);
+       clk_bulk_put(pd->num_subsys_clks, pd->subsys_clks);
+}
+
+static void scpsys_domain_cleanup(struct scpsys *scpsys)
+{
+       struct generic_pm_domain *genpd;
+       struct scpsys_domain *pd;
+       int i;
+
+       for (i = scpsys->pd_data.num_domains - 1; i >= 0; i--) {
+               genpd = scpsys->pd_data.domains[i];
+               if (genpd) {
+                       pd = to_scpsys_domain(genpd);
+                       scpsys_remove_one_domain(pd);
+               }
+       }
+}
+
+static const struct of_device_id scpsys_of_match[] = {
+       {
+               .compatible = "mediatek,mt6795-power-controller",
+               .data = &mt6795_scpsys_data,
+       },
+       {
+               .compatible = "mediatek,mt8167-power-controller",
+               .data = &mt8167_scpsys_data,
+       },
+       {
+               .compatible = "mediatek,mt8173-power-controller",
+               .data = &mt8173_scpsys_data,
+       },
+       {
+               .compatible = "mediatek,mt8183-power-controller",
+               .data = &mt8183_scpsys_data,
+       },
+       {
+               .compatible = "mediatek,mt8186-power-controller",
+               .data = &mt8186_scpsys_data,
+       },
+       {
+               .compatible = "mediatek,mt8188-power-controller",
+               .data = &mt8188_scpsys_data,
+       },
+       {
+               .compatible = "mediatek,mt8192-power-controller",
+               .data = &mt8192_scpsys_data,
+       },
+       {
+               .compatible = "mediatek,mt8195-power-controller",
+               .data = &mt8195_scpsys_data,
+       },
+       { }
+};
+
+static int scpsys_probe(struct platform_device *pdev)
+{
+       struct device *dev = &pdev->dev;
+       struct device_node *np = dev->of_node;
+       const struct scpsys_soc_data *soc;
+       struct device_node *node;
+       struct device *parent;
+       struct scpsys *scpsys;
+       int ret;
+
+       soc = of_device_get_match_data(&pdev->dev);
+       if (!soc) {
+               dev_err(&pdev->dev, "no power controller data\n");
+               return -EINVAL;
+       }
+
+       scpsys = devm_kzalloc(dev, struct_size(scpsys, domains, soc->num_domains), GFP_KERNEL);
+       if (!scpsys)
+               return -ENOMEM;
+
+       scpsys->dev = dev;
+       scpsys->soc_data = soc;
+
+       scpsys->pd_data.domains = scpsys->domains;
+       scpsys->pd_data.num_domains = soc->num_domains;
+
+       parent = dev->parent;
+       if (!parent) {
+               dev_err(dev, "no parent for syscon devices\n");
+               return -ENODEV;
+       }
+
+       scpsys->base = syscon_node_to_regmap(parent->of_node);
+       if (IS_ERR(scpsys->base)) {
+               dev_err(dev, "no regmap available\n");
+               return PTR_ERR(scpsys->base);
+       }
+
+       ret = -ENODEV;
+       for_each_available_child_of_node(np, node) {
+               struct generic_pm_domain *domain;
+
+               domain = scpsys_add_one_domain(scpsys, node);
+               if (IS_ERR(domain)) {
+                       ret = PTR_ERR(domain);
+                       of_node_put(node);
+                       goto err_cleanup_domains;
+               }
+
+               ret = scpsys_add_subdomain(scpsys, node);
+               if (ret) {
+                       of_node_put(node);
+                       goto err_cleanup_domains;
+               }
+       }
+
+       if (ret) {
+               dev_dbg(dev, "no power domains present\n");
+               return ret;
+       }
+
+       ret = of_genpd_add_provider_onecell(np, &scpsys->pd_data);
+       if (ret) {
+               dev_err(dev, "failed to add provider: %d\n", ret);
+               goto err_cleanup_domains;
+       }
+
+       return 0;
+
+err_cleanup_domains:
+       scpsys_domain_cleanup(scpsys);
+       return ret;
+}
+
+static struct platform_driver scpsys_pm_domain_driver = {
+       .probe = scpsys_probe,
+       .driver = {
+               .name = "mtk-power-controller",
+               .suppress_bind_attrs = true,
+               .of_match_table = scpsys_of_match,
+       },
+};
+builtin_platform_driver(scpsys_pm_domain_driver);
diff --git a/drivers/genpd/mediatek/mtk-pm-domains.h b/drivers/genpd/mediatek/mtk-pm-domains.h
new file mode 100644 (file)
index 0000000..5ec53ee
--- /dev/null
@@ -0,0 +1,111 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef __SOC_MEDIATEK_MTK_PM_DOMAINS_H
+#define __SOC_MEDIATEK_MTK_PM_DOMAINS_H
+
+#define MTK_SCPD_ACTIVE_WAKEUP         BIT(0)
+#define MTK_SCPD_FWAIT_SRAM            BIT(1)
+#define MTK_SCPD_SRAM_ISO              BIT(2)
+#define MTK_SCPD_KEEP_DEFAULT_OFF      BIT(3)
+#define MTK_SCPD_DOMAIN_SUPPLY         BIT(4)
+/* can't set MTK_SCPD_KEEP_DEFAULT_OFF at the same time */
+#define MTK_SCPD_ALWAYS_ON             BIT(5)
+#define MTK_SCPD_EXT_BUCK_ISO          BIT(6)
+#define MTK_SCPD_CAPS(_scpd, _x)       ((_scpd)->data->caps & (_x))
+
+#define SPM_VDE_PWR_CON                        0x0210
+#define SPM_MFG_PWR_CON                        0x0214
+#define SPM_VEN_PWR_CON                        0x0230
+#define SPM_ISP_PWR_CON                        0x0238
+#define SPM_DIS_PWR_CON                        0x023c
+#define SPM_CONN_PWR_CON               0x0280
+#define SPM_VEN2_PWR_CON               0x0298
+#define SPM_AUDIO_PWR_CON              0x029c
+#define SPM_MFG_2D_PWR_CON             0x02c0
+#define SPM_MFG_ASYNC_PWR_CON          0x02c4
+#define SPM_USB_PWR_CON                        0x02cc
+
+#define SPM_PWR_STATUS                 0x060c
+#define SPM_PWR_STATUS_2ND             0x0610
+
+#define PWR_STATUS_CONN                        BIT(1)
+#define PWR_STATUS_DISP                        BIT(3)
+#define PWR_STATUS_MFG                 BIT(4)
+#define PWR_STATUS_ISP                 BIT(5)
+#define PWR_STATUS_VDEC                        BIT(7)
+#define PWR_STATUS_VENC_LT             BIT(20)
+#define PWR_STATUS_VENC                        BIT(21)
+#define PWR_STATUS_MFG_2D              BIT(22)
+#define PWR_STATUS_MFG_ASYNC           BIT(23)
+#define PWR_STATUS_AUDIO               BIT(24)
+#define PWR_STATUS_USB                 BIT(25)
+
+#define SPM_MAX_BUS_PROT_DATA          6
+
+#define _BUS_PROT(_mask, _set, _clr, _sta, _update, _ignore) { \
+               .bus_prot_mask = (_mask),                       \
+               .bus_prot_set = _set,                           \
+               .bus_prot_clr = _clr,                           \
+               .bus_prot_sta = _sta,                           \
+               .bus_prot_reg_update = _update,                 \
+               .ignore_clr_ack = _ignore,                      \
+       }
+
+#define BUS_PROT_WR(_mask, _set, _clr, _sta)                   \
+               _BUS_PROT(_mask, _set, _clr, _sta, false, false)
+
+#define BUS_PROT_WR_IGN(_mask, _set, _clr, _sta)               \
+               _BUS_PROT(_mask, _set, _clr, _sta, false, true)
+
+#define BUS_PROT_UPDATE(_mask, _set, _clr, _sta)               \
+               _BUS_PROT(_mask, _set, _clr, _sta, true, false)
+
+#define BUS_PROT_UPDATE_TOPAXI(_mask)                          \
+               BUS_PROT_UPDATE(_mask,                          \
+                               INFRA_TOPAXI_PROTECTEN,         \
+                               INFRA_TOPAXI_PROTECTEN,         \
+                               INFRA_TOPAXI_PROTECTSTA1)
+
+struct scpsys_bus_prot_data {
+       u32 bus_prot_mask;
+       u32 bus_prot_set;
+       u32 bus_prot_clr;
+       u32 bus_prot_sta;
+       bool bus_prot_reg_update;
+       bool ignore_clr_ack;
+};
+
+/**
+ * struct scpsys_domain_data - scp domain data for power on/off flow
+ * @name: The name of the power domain.
+ * @sta_mask: The mask for power on/off status bit.
+ * @ctl_offs: The offset for main power control register.
+ * @sram_pdn_bits: The mask for sram power control bits.
+ * @sram_pdn_ack_bits: The mask for sram power control acked bits.
+ * @ext_buck_iso_offs: The offset for external buck isolation
+ * @ext_buck_iso_mask: The mask for external buck isolation
+ * @caps: The flag for active wake-up action.
+ * @bp_infracfg: bus protection for infracfg subsystem
+ * @bp_smi: bus protection for smi subsystem
+ */
+struct scpsys_domain_data {
+       const char *name;
+       u32 sta_mask;
+       int ctl_offs;
+       u32 sram_pdn_bits;
+       u32 sram_pdn_ack_bits;
+       int ext_buck_iso_offs;
+       u32 ext_buck_iso_mask;
+       u8 caps;
+       const struct scpsys_bus_prot_data bp_infracfg[SPM_MAX_BUS_PROT_DATA];
+       const struct scpsys_bus_prot_data bp_smi[SPM_MAX_BUS_PROT_DATA];
+       int pwr_sta_offs;
+       int pwr_sta2nd_offs;
+};
+
+struct scpsys_soc_data {
+       const struct scpsys_domain_data *domains_data;
+       int num_domains;
+};
+
+#endif /* __SOC_MEDIATEK_MTK_PM_DOMAINS_H */
diff --git a/drivers/genpd/mediatek/mtk-scpsys.c b/drivers/genpd/mediatek/mtk-scpsys.c
new file mode 100644 (file)
index 0000000..7a66888
--- /dev/null
@@ -0,0 +1,1147 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2015 Pengutronix, Sascha Hauer <kernel@pengutronix.de>
+ */
+#include <linux/clk.h>
+#include <linux/init.h>
+#include <linux/io.h>
+#include <linux/iopoll.h>
+#include <linux/mfd/syscon.h>
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
+#include <linux/pm_domain.h>
+#include <linux/regulator/consumer.h>
+#include <linux/soc/mediatek/infracfg.h>
+
+#include <dt-bindings/power/mt2701-power.h>
+#include <dt-bindings/power/mt2712-power.h>
+#include <dt-bindings/power/mt6797-power.h>
+#include <dt-bindings/power/mt7622-power.h>
+#include <dt-bindings/power/mt7623a-power.h>
+#include <dt-bindings/power/mt8173-power.h>
+
+#define MTK_POLL_DELAY_US   10
+#define MTK_POLL_TIMEOUT    USEC_PER_SEC
+
+#define MTK_SCPD_ACTIVE_WAKEUP         BIT(0)
+#define MTK_SCPD_FWAIT_SRAM            BIT(1)
+#define MTK_SCPD_CAPS(_scpd, _x)       ((_scpd)->data->caps & (_x))
+
+#define SPM_VDE_PWR_CON                        0x0210
+#define SPM_MFG_PWR_CON                        0x0214
+#define SPM_VEN_PWR_CON                        0x0230
+#define SPM_ISP_PWR_CON                        0x0238
+#define SPM_DIS_PWR_CON                        0x023c
+#define SPM_CONN_PWR_CON               0x0280
+#define SPM_VEN2_PWR_CON               0x0298
+#define SPM_AUDIO_PWR_CON              0x029c  /* MT8173, MT2712 */
+#define SPM_BDP_PWR_CON                        0x029c  /* MT2701 */
+#define SPM_ETH_PWR_CON                        0x02a0
+#define SPM_HIF_PWR_CON                        0x02a4
+#define SPM_IFR_MSC_PWR_CON            0x02a8
+#define SPM_MFG_2D_PWR_CON             0x02c0
+#define SPM_MFG_ASYNC_PWR_CON          0x02c4
+#define SPM_USB_PWR_CON                        0x02cc
+#define SPM_USB2_PWR_CON               0x02d4  /* MT2712 */
+#define SPM_ETHSYS_PWR_CON             0x02e0  /* MT7622 */
+#define SPM_HIF0_PWR_CON               0x02e4  /* MT7622 */
+#define SPM_HIF1_PWR_CON               0x02e8  /* MT7622 */
+#define SPM_WB_PWR_CON                 0x02ec  /* MT7622 */
+
+#define SPM_PWR_STATUS                 0x060c
+#define SPM_PWR_STATUS_2ND             0x0610
+
+#define PWR_RST_B_BIT                  BIT(0)
+#define PWR_ISO_BIT                    BIT(1)
+#define PWR_ON_BIT                     BIT(2)
+#define PWR_ON_2ND_BIT                 BIT(3)
+#define PWR_CLK_DIS_BIT                        BIT(4)
+
+#define PWR_STATUS_CONN                        BIT(1)
+#define PWR_STATUS_DISP                        BIT(3)
+#define PWR_STATUS_MFG                 BIT(4)
+#define PWR_STATUS_ISP                 BIT(5)
+#define PWR_STATUS_VDEC                        BIT(7)
+#define PWR_STATUS_BDP                 BIT(14)
+#define PWR_STATUS_ETH                 BIT(15)
+#define PWR_STATUS_HIF                 BIT(16)
+#define PWR_STATUS_IFR_MSC             BIT(17)
+#define PWR_STATUS_USB2                        BIT(19) /* MT2712 */
+#define PWR_STATUS_VENC_LT             BIT(20)
+#define PWR_STATUS_VENC                        BIT(21)
+#define PWR_STATUS_MFG_2D              BIT(22) /* MT8173 */
+#define PWR_STATUS_MFG_ASYNC           BIT(23) /* MT8173 */
+#define PWR_STATUS_AUDIO               BIT(24) /* MT8173, MT2712 */
+#define PWR_STATUS_USB                 BIT(25) /* MT8173, MT2712 */
+#define PWR_STATUS_ETHSYS              BIT(24) /* MT7622 */
+#define PWR_STATUS_HIF0                        BIT(25) /* MT7622 */
+#define PWR_STATUS_HIF1                        BIT(26) /* MT7622 */
+#define PWR_STATUS_WB                  BIT(27) /* MT7622 */
+
+enum clk_id {
+       CLK_NONE,
+       CLK_MM,
+       CLK_MFG,
+       CLK_VENC,
+       CLK_VENC_LT,
+       CLK_ETHIF,
+       CLK_VDEC,
+       CLK_HIFSEL,
+       CLK_JPGDEC,
+       CLK_AUDIO,
+       CLK_MAX,
+};
+
+static const char * const clk_names[] = {
+       NULL,
+       "mm",
+       "mfg",
+       "venc",
+       "venc_lt",
+       "ethif",
+       "vdec",
+       "hif_sel",
+       "jpgdec",
+       "audio",
+       NULL,
+};
+
+#define MAX_CLKS       3
+
+/**
+ * struct scp_domain_data - scp domain data for power on/off flow
+ * @name: The domain name.
+ * @sta_mask: The mask for power on/off status bit.
+ * @ctl_offs: The offset for main power control register.
+ * @sram_pdn_bits: The mask for sram power control bits.
+ * @sram_pdn_ack_bits: The mask for sram power control acked bits.
+ * @bus_prot_mask: The mask for single step bus protection.
+ * @clk_id: The basic clocks required by this power domain.
+ * @caps: The flag for active wake-up action.
+ */
+struct scp_domain_data {
+       const char *name;
+       u32 sta_mask;
+       int ctl_offs;
+       u32 sram_pdn_bits;
+       u32 sram_pdn_ack_bits;
+       u32 bus_prot_mask;
+       enum clk_id clk_id[MAX_CLKS];
+       u8 caps;
+};
+
+struct scp;
+
+struct scp_domain {
+       struct generic_pm_domain genpd;
+       struct scp *scp;
+       struct clk *clk[MAX_CLKS];
+       const struct scp_domain_data *data;
+       struct regulator *supply;
+};
+
+struct scp_ctrl_reg {
+       int pwr_sta_offs;
+       int pwr_sta2nd_offs;
+};
+
+struct scp {
+       struct scp_domain *domains;
+       struct genpd_onecell_data pd_data;
+       struct device *dev;
+       void __iomem *base;
+       struct regmap *infracfg;
+       struct scp_ctrl_reg ctrl_reg;
+       bool bus_prot_reg_update;
+};
+
+struct scp_subdomain {
+       int origin;
+       int subdomain;
+};
+
+struct scp_soc_data {
+       const struct scp_domain_data *domains;
+       int num_domains;
+       const struct scp_subdomain *subdomains;
+       int num_subdomains;
+       const struct scp_ctrl_reg regs;
+       bool bus_prot_reg_update;
+};
+
+static int scpsys_domain_is_on(struct scp_domain *scpd)
+{
+       struct scp *scp = scpd->scp;
+
+       u32 status = readl(scp->base + scp->ctrl_reg.pwr_sta_offs) &
+                                               scpd->data->sta_mask;
+       u32 status2 = readl(scp->base + scp->ctrl_reg.pwr_sta2nd_offs) &
+                                               scpd->data->sta_mask;
+
+       /*
+        * A domain is on when both status bits are set. If only one is set
+        * return an error. This happens while powering up a domain
+        */
+
+       if (status && status2)
+               return true;
+       if (!status && !status2)
+               return false;
+
+       return -EINVAL;
+}
+
+static int scpsys_regulator_enable(struct scp_domain *scpd)
+{
+       if (!scpd->supply)
+               return 0;
+
+       return regulator_enable(scpd->supply);
+}
+
+static int scpsys_regulator_disable(struct scp_domain *scpd)
+{
+       if (!scpd->supply)
+               return 0;
+
+       return regulator_disable(scpd->supply);
+}
+
+static void scpsys_clk_disable(struct clk *clk[], int max_num)
+{
+       int i;
+
+       for (i = max_num - 1; i >= 0; i--)
+               clk_disable_unprepare(clk[i]);
+}
+
+static int scpsys_clk_enable(struct clk *clk[], int max_num)
+{
+       int i, ret = 0;
+
+       for (i = 0; i < max_num && clk[i]; i++) {
+               ret = clk_prepare_enable(clk[i]);
+               if (ret) {
+                       scpsys_clk_disable(clk, i);
+                       break;
+               }
+       }
+
+       return ret;
+}
+
+static int scpsys_sram_enable(struct scp_domain *scpd, void __iomem *ctl_addr)
+{
+       u32 val;
+       u32 pdn_ack = scpd->data->sram_pdn_ack_bits;
+       int tmp;
+
+       val = readl(ctl_addr);
+       val &= ~scpd->data->sram_pdn_bits;
+       writel(val, ctl_addr);
+
+       /* Either wait until SRAM_PDN_ACK all 0 or have a force wait */
+       if (MTK_SCPD_CAPS(scpd, MTK_SCPD_FWAIT_SRAM)) {
+               /*
+                * Currently, MTK_SCPD_FWAIT_SRAM is necessary only for
+                * MT7622_POWER_DOMAIN_WB and thus just a trivial setup
+                * is applied here.
+                */
+               usleep_range(12000, 12100);
+       } else {
+               /* Either wait until SRAM_PDN_ACK all 1 or 0 */
+               int ret = readl_poll_timeout(ctl_addr, tmp,
+                               (tmp & pdn_ack) == 0,
+                               MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT);
+               if (ret < 0)
+                       return ret;
+       }
+
+       return 0;
+}
+
+static int scpsys_sram_disable(struct scp_domain *scpd, void __iomem *ctl_addr)
+{
+       u32 val;
+       u32 pdn_ack = scpd->data->sram_pdn_ack_bits;
+       int tmp;
+
+       val = readl(ctl_addr);
+       val |= scpd->data->sram_pdn_bits;
+       writel(val, ctl_addr);
+
+       /* Either wait until SRAM_PDN_ACK all 1 or 0 */
+       return readl_poll_timeout(ctl_addr, tmp,
+                       (tmp & pdn_ack) == pdn_ack,
+                       MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT);
+}
+
+static int scpsys_bus_protect_enable(struct scp_domain *scpd)
+{
+       struct scp *scp = scpd->scp;
+
+       if (!scpd->data->bus_prot_mask)
+               return 0;
+
+       return mtk_infracfg_set_bus_protection(scp->infracfg,
+                       scpd->data->bus_prot_mask,
+                       scp->bus_prot_reg_update);
+}
+
+static int scpsys_bus_protect_disable(struct scp_domain *scpd)
+{
+       struct scp *scp = scpd->scp;
+
+       if (!scpd->data->bus_prot_mask)
+               return 0;
+
+       return mtk_infracfg_clear_bus_protection(scp->infracfg,
+                       scpd->data->bus_prot_mask,
+                       scp->bus_prot_reg_update);
+}
+
+static int scpsys_power_on(struct generic_pm_domain *genpd)
+{
+       struct scp_domain *scpd = container_of(genpd, struct scp_domain, genpd);
+       struct scp *scp = scpd->scp;
+       void __iomem *ctl_addr = scp->base + scpd->data->ctl_offs;
+       u32 val;
+       int ret, tmp;
+
+       ret = scpsys_regulator_enable(scpd);
+       if (ret < 0)
+               return ret;
+
+       ret = scpsys_clk_enable(scpd->clk, MAX_CLKS);
+       if (ret)
+               goto err_clk;
+
+       /* subsys power on */
+       val = readl(ctl_addr);
+       val |= PWR_ON_BIT;
+       writel(val, ctl_addr);
+       val |= PWR_ON_2ND_BIT;
+       writel(val, ctl_addr);
+
+       /* wait until PWR_ACK = 1 */
+       ret = readx_poll_timeout(scpsys_domain_is_on, scpd, tmp, tmp > 0,
+                                MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT);
+       if (ret < 0)
+               goto err_pwr_ack;
+
+       val &= ~PWR_CLK_DIS_BIT;
+       writel(val, ctl_addr);
+
+       val &= ~PWR_ISO_BIT;
+       writel(val, ctl_addr);
+
+       val |= PWR_RST_B_BIT;
+       writel(val, ctl_addr);
+
+       ret = scpsys_sram_enable(scpd, ctl_addr);
+       if (ret < 0)
+               goto err_pwr_ack;
+
+       ret = scpsys_bus_protect_disable(scpd);
+       if (ret < 0)
+               goto err_pwr_ack;
+
+       return 0;
+
+err_pwr_ack:
+       scpsys_clk_disable(scpd->clk, MAX_CLKS);
+err_clk:
+       scpsys_regulator_disable(scpd);
+
+       dev_err(scp->dev, "Failed to power on domain %s\n", genpd->name);
+
+       return ret;
+}
+
+static int scpsys_power_off(struct generic_pm_domain *genpd)
+{
+       struct scp_domain *scpd = container_of(genpd, struct scp_domain, genpd);
+       struct scp *scp = scpd->scp;
+       void __iomem *ctl_addr = scp->base + scpd->data->ctl_offs;
+       u32 val;
+       int ret, tmp;
+
+       ret = scpsys_bus_protect_enable(scpd);
+       if (ret < 0)
+               goto out;
+
+       ret = scpsys_sram_disable(scpd, ctl_addr);
+       if (ret < 0)
+               goto out;
+
+       /* subsys power off */
+       val = readl(ctl_addr);
+       val |= PWR_ISO_BIT;
+       writel(val, ctl_addr);
+
+       val &= ~PWR_RST_B_BIT;
+       writel(val, ctl_addr);
+
+       val |= PWR_CLK_DIS_BIT;
+       writel(val, ctl_addr);
+
+       val &= ~PWR_ON_BIT;
+       writel(val, ctl_addr);
+
+       val &= ~PWR_ON_2ND_BIT;
+       writel(val, ctl_addr);
+
+       /* wait until PWR_ACK = 0 */
+       ret = readx_poll_timeout(scpsys_domain_is_on, scpd, tmp, tmp == 0,
+                                MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT);
+       if (ret < 0)
+               goto out;
+
+       scpsys_clk_disable(scpd->clk, MAX_CLKS);
+
+       ret = scpsys_regulator_disable(scpd);
+       if (ret < 0)
+               goto out;
+
+       return 0;
+
+out:
+       dev_err(scp->dev, "Failed to power off domain %s\n", genpd->name);
+
+       return ret;
+}
+
+static void init_clks(struct platform_device *pdev, struct clk **clk)
+{
+       int i;
+
+       for (i = CLK_NONE + 1; i < CLK_MAX; i++)
+               clk[i] = devm_clk_get(&pdev->dev, clk_names[i]);
+}
+
+static struct scp *init_scp(struct platform_device *pdev,
+                       const struct scp_domain_data *scp_domain_data, int num,
+                       const struct scp_ctrl_reg *scp_ctrl_reg,
+                       bool bus_prot_reg_update)
+{
+       struct genpd_onecell_data *pd_data;
+       struct resource *res;
+       int i, j;
+       struct scp *scp;
+       struct clk *clk[CLK_MAX];
+
+       scp = devm_kzalloc(&pdev->dev, sizeof(*scp), GFP_KERNEL);
+       if (!scp)
+               return ERR_PTR(-ENOMEM);
+
+       scp->ctrl_reg.pwr_sta_offs = scp_ctrl_reg->pwr_sta_offs;
+       scp->ctrl_reg.pwr_sta2nd_offs = scp_ctrl_reg->pwr_sta2nd_offs;
+
+       scp->bus_prot_reg_update = bus_prot_reg_update;
+
+       scp->dev = &pdev->dev;
+
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       scp->base = devm_ioremap_resource(&pdev->dev, res);
+       if (IS_ERR(scp->base))
+               return ERR_CAST(scp->base);
+
+       scp->domains = devm_kcalloc(&pdev->dev,
+                               num, sizeof(*scp->domains), GFP_KERNEL);
+       if (!scp->domains)
+               return ERR_PTR(-ENOMEM);
+
+       pd_data = &scp->pd_data;
+
+       pd_data->domains = devm_kcalloc(&pdev->dev,
+                       num, sizeof(*pd_data->domains), GFP_KERNEL);
+       if (!pd_data->domains)
+               return ERR_PTR(-ENOMEM);
+
+       scp->infracfg = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
+                       "infracfg");
+       if (IS_ERR(scp->infracfg)) {
+               dev_err(&pdev->dev, "Cannot find infracfg controller: %ld\n",
+                               PTR_ERR(scp->infracfg));
+               return ERR_CAST(scp->infracfg);
+       }
+
+       for (i = 0; i < num; i++) {
+               struct scp_domain *scpd = &scp->domains[i];
+               const struct scp_domain_data *data = &scp_domain_data[i];
+
+               scpd->supply = devm_regulator_get_optional(&pdev->dev, data->name);
+               if (IS_ERR(scpd->supply)) {
+                       if (PTR_ERR(scpd->supply) == -ENODEV)
+                               scpd->supply = NULL;
+                       else
+                               return ERR_CAST(scpd->supply);
+               }
+       }
+
+       pd_data->num_domains = num;
+
+       init_clks(pdev, clk);
+
+       for (i = 0; i < num; i++) {
+               struct scp_domain *scpd = &scp->domains[i];
+               struct generic_pm_domain *genpd = &scpd->genpd;
+               const struct scp_domain_data *data = &scp_domain_data[i];
+
+               pd_data->domains[i] = genpd;
+               scpd->scp = scp;
+
+               scpd->data = data;
+
+               for (j = 0; j < MAX_CLKS && data->clk_id[j]; j++) {
+                       struct clk *c = clk[data->clk_id[j]];
+
+                       if (IS_ERR(c)) {
+                               dev_err(&pdev->dev, "%s: clk unavailable\n",
+                                       data->name);
+                               return ERR_CAST(c);
+                       }
+
+                       scpd->clk[j] = c;
+               }
+
+               genpd->name = data->name;
+               genpd->power_off = scpsys_power_off;
+               genpd->power_on = scpsys_power_on;
+               if (MTK_SCPD_CAPS(scpd, MTK_SCPD_ACTIVE_WAKEUP))
+                       genpd->flags |= GENPD_FLAG_ACTIVE_WAKEUP;
+       }
+
+       return scp;
+}
+
+static void mtk_register_power_domains(struct platform_device *pdev,
+                               struct scp *scp, int num)
+{
+       struct genpd_onecell_data *pd_data;
+       int i, ret;
+
+       for (i = 0; i < num; i++) {
+               struct scp_domain *scpd = &scp->domains[i];
+               struct generic_pm_domain *genpd = &scpd->genpd;
+               bool on;
+
+               /*
+                * Initially turn on all domains to make the domains usable
+                * with !CONFIG_PM and to get the hardware in sync with the
+                * software.  The unused domains will be switched off during
+                * late_init time.
+                */
+               on = !WARN_ON(genpd->power_on(genpd) < 0);
+
+               pm_genpd_init(genpd, NULL, !on);
+       }
+
+       /*
+        * We are not allowed to fail here since there is no way to unregister
+        * a power domain. Once registered above we have to keep the domains
+        * valid.
+        */
+
+       pd_data = &scp->pd_data;
+
+       ret = of_genpd_add_provider_onecell(pdev->dev.of_node, pd_data);
+       if (ret)
+               dev_err(&pdev->dev, "Failed to add OF provider: %d\n", ret);
+}
+
+/*
+ * MT2701 power domain support
+ */
+
+static const struct scp_domain_data scp_domain_data_mt2701[] = {
+       [MT2701_POWER_DOMAIN_CONN] = {
+               .name = "conn",
+               .sta_mask = PWR_STATUS_CONN,
+               .ctl_offs = SPM_CONN_PWR_CON,
+               .bus_prot_mask = MT2701_TOP_AXI_PROT_EN_CONN_M |
+                                MT2701_TOP_AXI_PROT_EN_CONN_S,
+               .clk_id = {CLK_NONE},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT2701_POWER_DOMAIN_DISP] = {
+               .name = "disp",
+               .sta_mask = PWR_STATUS_DISP,
+               .ctl_offs = SPM_DIS_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .clk_id = {CLK_MM},
+               .bus_prot_mask = MT2701_TOP_AXI_PROT_EN_MM_M0,
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT2701_POWER_DOMAIN_MFG] = {
+               .name = "mfg",
+               .sta_mask = PWR_STATUS_MFG,
+               .ctl_offs = SPM_MFG_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .clk_id = {CLK_MFG},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT2701_POWER_DOMAIN_VDEC] = {
+               .name = "vdec",
+               .sta_mask = PWR_STATUS_VDEC,
+               .ctl_offs = SPM_VDE_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .clk_id = {CLK_MM},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT2701_POWER_DOMAIN_ISP] = {
+               .name = "isp",
+               .sta_mask = PWR_STATUS_ISP,
+               .ctl_offs = SPM_ISP_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(13, 12),
+               .clk_id = {CLK_MM},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT2701_POWER_DOMAIN_BDP] = {
+               .name = "bdp",
+               .sta_mask = PWR_STATUS_BDP,
+               .ctl_offs = SPM_BDP_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .clk_id = {CLK_NONE},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT2701_POWER_DOMAIN_ETH] = {
+               .name = "eth",
+               .sta_mask = PWR_STATUS_ETH,
+               .ctl_offs = SPM_ETH_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+               .clk_id = {CLK_ETHIF},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT2701_POWER_DOMAIN_HIF] = {
+               .name = "hif",
+               .sta_mask = PWR_STATUS_HIF,
+               .ctl_offs = SPM_HIF_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+               .clk_id = {CLK_ETHIF},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT2701_POWER_DOMAIN_IFR_MSC] = {
+               .name = "ifr_msc",
+               .sta_mask = PWR_STATUS_IFR_MSC,
+               .ctl_offs = SPM_IFR_MSC_PWR_CON,
+               .clk_id = {CLK_NONE},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+};
+
+/*
+ * MT2712 power domain support
+ */
+static const struct scp_domain_data scp_domain_data_mt2712[] = {
+       [MT2712_POWER_DOMAIN_MM] = {
+               .name = "mm",
+               .sta_mask = PWR_STATUS_DISP,
+               .ctl_offs = SPM_DIS_PWR_CON,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .clk_id = {CLK_MM},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT2712_POWER_DOMAIN_VDEC] = {
+               .name = "vdec",
+               .sta_mask = PWR_STATUS_VDEC,
+               .ctl_offs = SPM_VDE_PWR_CON,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .clk_id = {CLK_MM, CLK_VDEC},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT2712_POWER_DOMAIN_VENC] = {
+               .name = "venc",
+               .sta_mask = PWR_STATUS_VENC,
+               .ctl_offs = SPM_VEN_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+               .clk_id = {CLK_MM, CLK_VENC, CLK_JPGDEC},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT2712_POWER_DOMAIN_ISP] = {
+               .name = "isp",
+               .sta_mask = PWR_STATUS_ISP,
+               .ctl_offs = SPM_ISP_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(13, 12),
+               .clk_id = {CLK_MM},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT2712_POWER_DOMAIN_AUDIO] = {
+               .name = "audio",
+               .sta_mask = PWR_STATUS_AUDIO,
+               .ctl_offs = SPM_AUDIO_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+               .clk_id = {CLK_AUDIO},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT2712_POWER_DOMAIN_USB] = {
+               .name = "usb",
+               .sta_mask = PWR_STATUS_USB,
+               .ctl_offs = SPM_USB_PWR_CON,
+               .sram_pdn_bits = GENMASK(10, 8),
+               .sram_pdn_ack_bits = GENMASK(14, 12),
+               .clk_id = {CLK_NONE},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT2712_POWER_DOMAIN_USB2] = {
+               .name = "usb2",
+               .sta_mask = PWR_STATUS_USB2,
+               .ctl_offs = SPM_USB2_PWR_CON,
+               .sram_pdn_bits = GENMASK(10, 8),
+               .sram_pdn_ack_bits = GENMASK(14, 12),
+               .clk_id = {CLK_NONE},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT2712_POWER_DOMAIN_MFG] = {
+               .name = "mfg",
+               .sta_mask = PWR_STATUS_MFG,
+               .ctl_offs = SPM_MFG_PWR_CON,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(16, 16),
+               .clk_id = {CLK_MFG},
+               .bus_prot_mask = BIT(14) | BIT(21) | BIT(23),
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT2712_POWER_DOMAIN_MFG_SC1] = {
+               .name = "mfg_sc1",
+               .sta_mask = BIT(22),
+               .ctl_offs = 0x02c0,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(16, 16),
+               .clk_id = {CLK_NONE},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT2712_POWER_DOMAIN_MFG_SC2] = {
+               .name = "mfg_sc2",
+               .sta_mask = BIT(23),
+               .ctl_offs = 0x02c4,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(16, 16),
+               .clk_id = {CLK_NONE},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT2712_POWER_DOMAIN_MFG_SC3] = {
+               .name = "mfg_sc3",
+               .sta_mask = BIT(30),
+               .ctl_offs = 0x01f8,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(16, 16),
+               .clk_id = {CLK_NONE},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+};
+
+static const struct scp_subdomain scp_subdomain_mt2712[] = {
+       {MT2712_POWER_DOMAIN_MM, MT2712_POWER_DOMAIN_VDEC},
+       {MT2712_POWER_DOMAIN_MM, MT2712_POWER_DOMAIN_VENC},
+       {MT2712_POWER_DOMAIN_MM, MT2712_POWER_DOMAIN_ISP},
+       {MT2712_POWER_DOMAIN_MFG, MT2712_POWER_DOMAIN_MFG_SC1},
+       {MT2712_POWER_DOMAIN_MFG_SC1, MT2712_POWER_DOMAIN_MFG_SC2},
+       {MT2712_POWER_DOMAIN_MFG_SC2, MT2712_POWER_DOMAIN_MFG_SC3},
+};
+
+/*
+ * MT6797 power domain support
+ */
+
+static const struct scp_domain_data scp_domain_data_mt6797[] = {
+       [MT6797_POWER_DOMAIN_VDEC] = {
+               .name = "vdec",
+               .sta_mask = BIT(7),
+               .ctl_offs = 0x300,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .clk_id = {CLK_VDEC},
+       },
+       [MT6797_POWER_DOMAIN_VENC] = {
+               .name = "venc",
+               .sta_mask = BIT(21),
+               .ctl_offs = 0x304,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+               .clk_id = {CLK_NONE},
+       },
+       [MT6797_POWER_DOMAIN_ISP] = {
+               .name = "isp",
+               .sta_mask = BIT(5),
+               .ctl_offs = 0x308,
+               .sram_pdn_bits = GENMASK(9, 8),
+               .sram_pdn_ack_bits = GENMASK(13, 12),
+               .clk_id = {CLK_NONE},
+       },
+       [MT6797_POWER_DOMAIN_MM] = {
+               .name = "mm",
+               .sta_mask = BIT(3),
+               .ctl_offs = 0x30C,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .clk_id = {CLK_MM},
+               .bus_prot_mask = (BIT(1) | BIT(2)),
+       },
+       [MT6797_POWER_DOMAIN_AUDIO] = {
+               .name = "audio",
+               .sta_mask = BIT(24),
+               .ctl_offs = 0x314,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+               .clk_id = {CLK_NONE},
+       },
+       [MT6797_POWER_DOMAIN_MFG_ASYNC] = {
+               .name = "mfg_async",
+               .sta_mask = BIT(13),
+               .ctl_offs = 0x334,
+               .sram_pdn_bits = 0,
+               .sram_pdn_ack_bits = 0,
+               .clk_id = {CLK_MFG},
+       },
+       [MT6797_POWER_DOMAIN_MJC] = {
+               .name = "mjc",
+               .sta_mask = BIT(20),
+               .ctl_offs = 0x310,
+               .sram_pdn_bits = GENMASK(8, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .clk_id = {CLK_NONE},
+       },
+};
+
+#define SPM_PWR_STATUS_MT6797          0x0180
+#define SPM_PWR_STATUS_2ND_MT6797      0x0184
+
+static const struct scp_subdomain scp_subdomain_mt6797[] = {
+       {MT6797_POWER_DOMAIN_MM, MT6797_POWER_DOMAIN_VDEC},
+       {MT6797_POWER_DOMAIN_MM, MT6797_POWER_DOMAIN_ISP},
+       {MT6797_POWER_DOMAIN_MM, MT6797_POWER_DOMAIN_VENC},
+       {MT6797_POWER_DOMAIN_MM, MT6797_POWER_DOMAIN_MJC},
+};
+
+/*
+ * MT7622 power domain support
+ */
+
+static const struct scp_domain_data scp_domain_data_mt7622[] = {
+       [MT7622_POWER_DOMAIN_ETHSYS] = {
+               .name = "ethsys",
+               .sta_mask = PWR_STATUS_ETHSYS,
+               .ctl_offs = SPM_ETHSYS_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+               .clk_id = {CLK_NONE},
+               .bus_prot_mask = MT7622_TOP_AXI_PROT_EN_ETHSYS,
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT7622_POWER_DOMAIN_HIF0] = {
+               .name = "hif0",
+               .sta_mask = PWR_STATUS_HIF0,
+               .ctl_offs = SPM_HIF0_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+               .clk_id = {CLK_HIFSEL},
+               .bus_prot_mask = MT7622_TOP_AXI_PROT_EN_HIF0,
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT7622_POWER_DOMAIN_HIF1] = {
+               .name = "hif1",
+               .sta_mask = PWR_STATUS_HIF1,
+               .ctl_offs = SPM_HIF1_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+               .clk_id = {CLK_HIFSEL},
+               .bus_prot_mask = MT7622_TOP_AXI_PROT_EN_HIF1,
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT7622_POWER_DOMAIN_WB] = {
+               .name = "wb",
+               .sta_mask = PWR_STATUS_WB,
+               .ctl_offs = SPM_WB_PWR_CON,
+               .sram_pdn_bits = 0,
+               .sram_pdn_ack_bits = 0,
+               .clk_id = {CLK_NONE},
+               .bus_prot_mask = MT7622_TOP_AXI_PROT_EN_WB,
+               .caps = MTK_SCPD_ACTIVE_WAKEUP | MTK_SCPD_FWAIT_SRAM,
+       },
+};
+
+/*
+ * MT7623A power domain support
+ */
+
+static const struct scp_domain_data scp_domain_data_mt7623a[] = {
+       [MT7623A_POWER_DOMAIN_CONN] = {
+               .name = "conn",
+               .sta_mask = PWR_STATUS_CONN,
+               .ctl_offs = SPM_CONN_PWR_CON,
+               .bus_prot_mask = MT2701_TOP_AXI_PROT_EN_CONN_M |
+                                MT2701_TOP_AXI_PROT_EN_CONN_S,
+               .clk_id = {CLK_NONE},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT7623A_POWER_DOMAIN_ETH] = {
+               .name = "eth",
+               .sta_mask = PWR_STATUS_ETH,
+               .ctl_offs = SPM_ETH_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+               .clk_id = {CLK_ETHIF},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT7623A_POWER_DOMAIN_HIF] = {
+               .name = "hif",
+               .sta_mask = PWR_STATUS_HIF,
+               .ctl_offs = SPM_HIF_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+               .clk_id = {CLK_ETHIF},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT7623A_POWER_DOMAIN_IFR_MSC] = {
+               .name = "ifr_msc",
+               .sta_mask = PWR_STATUS_IFR_MSC,
+               .ctl_offs = SPM_IFR_MSC_PWR_CON,
+               .clk_id = {CLK_NONE},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+};
+
+/*
+ * MT8173 power domain support
+ */
+
+static const struct scp_domain_data scp_domain_data_mt8173[] = {
+       [MT8173_POWER_DOMAIN_VDEC] = {
+               .name = "vdec",
+               .sta_mask = PWR_STATUS_VDEC,
+               .ctl_offs = SPM_VDE_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .clk_id = {CLK_MM},
+       },
+       [MT8173_POWER_DOMAIN_VENC] = {
+               .name = "venc",
+               .sta_mask = PWR_STATUS_VENC,
+               .ctl_offs = SPM_VEN_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+               .clk_id = {CLK_MM, CLK_VENC},
+       },
+       [MT8173_POWER_DOMAIN_ISP] = {
+               .name = "isp",
+               .sta_mask = PWR_STATUS_ISP,
+               .ctl_offs = SPM_ISP_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(13, 12),
+               .clk_id = {CLK_MM},
+       },
+       [MT8173_POWER_DOMAIN_MM] = {
+               .name = "mm",
+               .sta_mask = PWR_STATUS_DISP,
+               .ctl_offs = SPM_DIS_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(12, 12),
+               .clk_id = {CLK_MM},
+               .bus_prot_mask = MT8173_TOP_AXI_PROT_EN_MM_M0 |
+                       MT8173_TOP_AXI_PROT_EN_MM_M1,
+       },
+       [MT8173_POWER_DOMAIN_VENC_LT] = {
+               .name = "venc_lt",
+               .sta_mask = PWR_STATUS_VENC_LT,
+               .ctl_offs = SPM_VEN2_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+               .clk_id = {CLK_MM, CLK_VENC_LT},
+       },
+       [MT8173_POWER_DOMAIN_AUDIO] = {
+               .name = "audio",
+               .sta_mask = PWR_STATUS_AUDIO,
+               .ctl_offs = SPM_AUDIO_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+               .clk_id = {CLK_NONE},
+       },
+       [MT8173_POWER_DOMAIN_USB] = {
+               .name = "usb",
+               .sta_mask = PWR_STATUS_USB,
+               .ctl_offs = SPM_USB_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(15, 12),
+               .clk_id = {CLK_NONE},
+               .caps = MTK_SCPD_ACTIVE_WAKEUP,
+       },
+       [MT8173_POWER_DOMAIN_MFG_ASYNC] = {
+               .name = "mfg_async",
+               .sta_mask = PWR_STATUS_MFG_ASYNC,
+               .ctl_offs = SPM_MFG_ASYNC_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = 0,
+               .clk_id = {CLK_MFG},
+       },
+       [MT8173_POWER_DOMAIN_MFG_2D] = {
+               .name = "mfg_2d",
+               .sta_mask = PWR_STATUS_MFG_2D,
+               .ctl_offs = SPM_MFG_2D_PWR_CON,
+               .sram_pdn_bits = GENMASK(11, 8),
+               .sram_pdn_ack_bits = GENMASK(13, 12),
+               .clk_id = {CLK_NONE},
+       },
+       [MT8173_POWER_DOMAIN_MFG] = {
+               .name = "mfg",
+               .sta_mask = PWR_STATUS_MFG,
+               .ctl_offs = SPM_MFG_PWR_CON,
+               .sram_pdn_bits = GENMASK(13, 8),
+               .sram_pdn_ack_bits = GENMASK(21, 16),
+               .clk_id = {CLK_NONE},
+               .bus_prot_mask = MT8173_TOP_AXI_PROT_EN_MFG_S |
+                       MT8173_TOP_AXI_PROT_EN_MFG_M0 |
+                       MT8173_TOP_AXI_PROT_EN_MFG_M1 |
+                       MT8173_TOP_AXI_PROT_EN_MFG_SNOOP_OUT,
+       },
+};
+
+static const struct scp_subdomain scp_subdomain_mt8173[] = {
+       {MT8173_POWER_DOMAIN_MFG_ASYNC, MT8173_POWER_DOMAIN_MFG_2D},
+       {MT8173_POWER_DOMAIN_MFG_2D, MT8173_POWER_DOMAIN_MFG},
+};
+
+static const struct scp_soc_data mt2701_data = {
+       .domains = scp_domain_data_mt2701,
+       .num_domains = ARRAY_SIZE(scp_domain_data_mt2701),
+       .regs = {
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND
+       },
+       .bus_prot_reg_update = true,
+};
+
+static const struct scp_soc_data mt2712_data = {
+       .domains = scp_domain_data_mt2712,
+       .num_domains = ARRAY_SIZE(scp_domain_data_mt2712),
+       .subdomains = scp_subdomain_mt2712,
+       .num_subdomains = ARRAY_SIZE(scp_subdomain_mt2712),
+       .regs = {
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND
+       },
+       .bus_prot_reg_update = false,
+};
+
+static const struct scp_soc_data mt6797_data = {
+       .domains = scp_domain_data_mt6797,
+       .num_domains = ARRAY_SIZE(scp_domain_data_mt6797),
+       .subdomains = scp_subdomain_mt6797,
+       .num_subdomains = ARRAY_SIZE(scp_subdomain_mt6797),
+       .regs = {
+               .pwr_sta_offs = SPM_PWR_STATUS_MT6797,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND_MT6797
+       },
+       .bus_prot_reg_update = true,
+};
+
+static const struct scp_soc_data mt7622_data = {
+       .domains = scp_domain_data_mt7622,
+       .num_domains = ARRAY_SIZE(scp_domain_data_mt7622),
+       .regs = {
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND
+       },
+       .bus_prot_reg_update = true,
+};
+
+static const struct scp_soc_data mt7623a_data = {
+       .domains = scp_domain_data_mt7623a,
+       .num_domains = ARRAY_SIZE(scp_domain_data_mt7623a),
+       .regs = {
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND
+       },
+       .bus_prot_reg_update = true,
+};
+
+static const struct scp_soc_data mt8173_data = {
+       .domains = scp_domain_data_mt8173,
+       .num_domains = ARRAY_SIZE(scp_domain_data_mt8173),
+       .subdomains = scp_subdomain_mt8173,
+       .num_subdomains = ARRAY_SIZE(scp_subdomain_mt8173),
+       .regs = {
+               .pwr_sta_offs = SPM_PWR_STATUS,
+               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND
+       },
+       .bus_prot_reg_update = true,
+};
+
+/*
+ * scpsys driver init
+ */
+
+static const struct of_device_id of_scpsys_match_tbl[] = {
+       {
+               .compatible = "mediatek,mt2701-scpsys",
+               .data = &mt2701_data,
+       }, {
+               .compatible = "mediatek,mt2712-scpsys",
+               .data = &mt2712_data,
+       }, {
+               .compatible = "mediatek,mt6797-scpsys",
+               .data = &mt6797_data,
+       }, {
+               .compatible = "mediatek,mt7622-scpsys",
+               .data = &mt7622_data,
+       }, {
+               .compatible = "mediatek,mt7623a-scpsys",
+               .data = &mt7623a_data,
+       }, {
+               .compatible = "mediatek,mt8173-scpsys",
+               .data = &mt8173_data,
+       }, {
+               /* sentinel */
+       }
+};
+
+static int scpsys_probe(struct platform_device *pdev)
+{
+       const struct scp_subdomain *sd;
+       const struct scp_soc_data *soc;
+       struct scp *scp;
+       struct genpd_onecell_data *pd_data;
+       int i, ret;
+
+       soc = of_device_get_match_data(&pdev->dev);
+
+       scp = init_scp(pdev, soc->domains, soc->num_domains, &soc->regs,
+                       soc->bus_prot_reg_update);
+       if (IS_ERR(scp))
+               return PTR_ERR(scp);
+
+       mtk_register_power_domains(pdev, scp, soc->num_domains);
+
+       pd_data = &scp->pd_data;
+
+       for (i = 0, sd = soc->subdomains; i < soc->num_subdomains; i++, sd++) {
+               ret = pm_genpd_add_subdomain(pd_data->domains[sd->origin],
+                                            pd_data->domains[sd->subdomain]);
+               if (ret && IS_ENABLED(CONFIG_PM))
+                       dev_err(&pdev->dev, "Failed to add subdomain: %d\n",
+                               ret);
+       }
+
+       return 0;
+}
+
+static struct platform_driver scpsys_drv = {
+       .probe = scpsys_probe,
+       .driver = {
+               .name = "mtk-scpsys",
+               .suppress_bind_attrs = true,
+               .owner = THIS_MODULE,
+               .of_match_table = of_scpsys_match_tbl,
+       },
+};
+builtin_platform_driver(scpsys_drv);
index 8c0ddacbcde8b938a826964f0ef3178f29e5766b..9d3ce7878c5c7db3d708137d5ddbb0fe114c79fc 100644 (file)
@@ -4,8 +4,6 @@ obj-$(CONFIG_MTK_DEVAPC) += mtk-devapc.o
 obj-$(CONFIG_MTK_INFRACFG) += mtk-infracfg.o
 obj-$(CONFIG_MTK_PMIC_WRAP) += mtk-pmic-wrap.o
 obj-$(CONFIG_MTK_REGULATOR_COUPLER) += mtk-regulator-coupler.o
-obj-$(CONFIG_MTK_SCPSYS) += mtk-scpsys.o
-obj-$(CONFIG_MTK_SCPSYS_PM_DOMAINS) += mtk-pm-domains.o
 obj-$(CONFIG_MTK_MMSYS) += mtk-mmsys.o
 obj-$(CONFIG_MTK_MMSYS) += mtk-mutex.o
 obj-$(CONFIG_MTK_SVS) += mtk-svs.o
diff --git a/drivers/soc/mediatek/mt6795-pm-domains.h b/drivers/soc/mediatek/mt6795-pm-domains.h
deleted file mode 100644 (file)
index ef07c9d..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#ifndef __SOC_MEDIATEK_MT6795_PM_DOMAINS_H
-#define __SOC_MEDIATEK_MT6795_PM_DOMAINS_H
-
-#include "mtk-pm-domains.h"
-#include <dt-bindings/power/mt6795-power.h>
-
-/*
- * MT6795 power domain support
- */
-
-static const struct scpsys_domain_data scpsys_domain_data_mt6795[] = {
-       [MT6795_POWER_DOMAIN_VDEC] = {
-               .name = "vdec",
-               .sta_mask = PWR_STATUS_VDEC,
-               .ctl_offs = SPM_VDE_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-       },
-       [MT6795_POWER_DOMAIN_VENC] = {
-               .name = "venc",
-               .sta_mask = PWR_STATUS_VENC,
-               .ctl_offs = SPM_VEN_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-       },
-       [MT6795_POWER_DOMAIN_ISP] = {
-               .name = "isp",
-               .sta_mask = PWR_STATUS_ISP,
-               .ctl_offs = SPM_ISP_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(13, 12),
-       },
-       [MT6795_POWER_DOMAIN_MM] = {
-               .name = "mm",
-               .sta_mask = PWR_STATUS_DISP,
-               .ctl_offs = SPM_DIS_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_UPDATE_TOPAXI(MT8173_TOP_AXI_PROT_EN_MM_M0 |
-                                              MT8173_TOP_AXI_PROT_EN_MM_M1),
-               },
-       },
-       [MT6795_POWER_DOMAIN_MJC] = {
-               .name = "mjc",
-               .sta_mask = BIT(20),
-               .ctl_offs = 0x298,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-       },
-       [MT6795_POWER_DOMAIN_AUDIO] = {
-               .name = "audio",
-               .sta_mask = PWR_STATUS_AUDIO,
-               .ctl_offs = SPM_AUDIO_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-       },
-       [MT6795_POWER_DOMAIN_MFG_ASYNC] = {
-               .name = "mfg_async",
-               .sta_mask = PWR_STATUS_MFG_ASYNC,
-               .ctl_offs = SPM_MFG_ASYNC_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = 0,
-       },
-       [MT6795_POWER_DOMAIN_MFG_2D] = {
-               .name = "mfg_2d",
-               .sta_mask = PWR_STATUS_MFG_2D,
-               .ctl_offs = SPM_MFG_2D_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(13, 12),
-       },
-       [MT6795_POWER_DOMAIN_MFG] = {
-               .name = "mfg",
-               .sta_mask = PWR_STATUS_MFG,
-               .ctl_offs = SPM_MFG_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(13, 8),
-               .sram_pdn_ack_bits = GENMASK(21, 16),
-               .bp_infracfg = {
-                       BUS_PROT_UPDATE_TOPAXI(MT8173_TOP_AXI_PROT_EN_MFG_S |
-                                              MT8173_TOP_AXI_PROT_EN_MFG_M0 |
-                                              MT8173_TOP_AXI_PROT_EN_MFG_M1 |
-                                              MT8173_TOP_AXI_PROT_EN_MFG_SNOOP_OUT),
-               },
-       },
-};
-
-static const struct scpsys_soc_data mt6795_scpsys_data = {
-       .domains_data = scpsys_domain_data_mt6795,
-       .num_domains = ARRAY_SIZE(scpsys_domain_data_mt6795),
-};
-
-#endif /* __SOC_MEDIATEK_MT6795_PM_DOMAINS_H */
diff --git a/drivers/soc/mediatek/mt8167-pm-domains.h b/drivers/soc/mediatek/mt8167-pm-domains.h
deleted file mode 100644 (file)
index 4d6c327..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#ifndef __SOC_MEDIATEK_MT8167_PM_DOMAINS_H
-#define __SOC_MEDIATEK_MT8167_PM_DOMAINS_H
-
-#include "mtk-pm-domains.h"
-#include <dt-bindings/power/mt8167-power.h>
-
-#define MT8167_PWR_STATUS_MFG_2D       BIT(24)
-#define MT8167_PWR_STATUS_MFG_ASYNC    BIT(25)
-
-/*
- * MT8167 power domain support
- */
-
-static const struct scpsys_domain_data scpsys_domain_data_mt8167[] = {
-       [MT8167_POWER_DOMAIN_MM] = {
-               .name = "mm",
-               .sta_mask = PWR_STATUS_DISP,
-               .ctl_offs = SPM_DIS_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_UPDATE_TOPAXI(MT8167_TOP_AXI_PROT_EN_MM_EMI |
-                                              MT8167_TOP_AXI_PROT_EN_MCU_MM),
-               },
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT8167_POWER_DOMAIN_VDEC] = {
-               .name = "vdec",
-               .sta_mask = PWR_STATUS_VDEC,
-               .ctl_offs = SPM_VDE_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT8167_POWER_DOMAIN_ISP] = {
-               .name = "isp",
-               .sta_mask = PWR_STATUS_ISP,
-               .ctl_offs = SPM_ISP_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(13, 12),
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT8167_POWER_DOMAIN_MFG_ASYNC] = {
-               .name = "mfg_async",
-               .sta_mask = MT8167_PWR_STATUS_MFG_ASYNC,
-               .ctl_offs = SPM_MFG_ASYNC_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = 0,
-               .sram_pdn_ack_bits = 0,
-               .bp_infracfg = {
-                       BUS_PROT_UPDATE_TOPAXI(MT8167_TOP_AXI_PROT_EN_MCU_MFG |
-                                              MT8167_TOP_AXI_PROT_EN_MFG_EMI),
-               },
-       },
-       [MT8167_POWER_DOMAIN_MFG_2D] = {
-               .name = "mfg_2d",
-               .sta_mask = MT8167_PWR_STATUS_MFG_2D,
-               .ctl_offs = SPM_MFG_2D_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-       },
-       [MT8167_POWER_DOMAIN_MFG] = {
-               .name = "mfg",
-               .sta_mask = PWR_STATUS_MFG,
-               .ctl_offs = SPM_MFG_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-       },
-       [MT8167_POWER_DOMAIN_CONN] = {
-               .name = "conn",
-               .sta_mask = PWR_STATUS_CONN,
-               .ctl_offs = SPM_CONN_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = 0,
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-               .bp_infracfg = {
-                       BUS_PROT_UPDATE_TOPAXI(MT8167_TOP_AXI_PROT_EN_CONN_EMI |
-                                              MT8167_TOP_AXI_PROT_EN_CONN_MCU |
-                                              MT8167_TOP_AXI_PROT_EN_MCU_CONN),
-               },
-       },
-};
-
-static const struct scpsys_soc_data mt8167_scpsys_data = {
-       .domains_data = scpsys_domain_data_mt8167,
-       .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8167),
-};
-
-#endif /* __SOC_MEDIATEK_MT8167_PM_DOMAINS_H */
-
diff --git a/drivers/soc/mediatek/mt8173-pm-domains.h b/drivers/soc/mediatek/mt8173-pm-domains.h
deleted file mode 100644 (file)
index 1a5dc63..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#ifndef __SOC_MEDIATEK_MT8173_PM_DOMAINS_H
-#define __SOC_MEDIATEK_MT8173_PM_DOMAINS_H
-
-#include "mtk-pm-domains.h"
-#include <dt-bindings/power/mt8173-power.h>
-
-/*
- * MT8173 power domain support
- */
-
-static const struct scpsys_domain_data scpsys_domain_data_mt8173[] = {
-       [MT8173_POWER_DOMAIN_VDEC] = {
-               .name = "vdec",
-               .sta_mask = PWR_STATUS_VDEC,
-               .ctl_offs = SPM_VDE_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-       },
-       [MT8173_POWER_DOMAIN_VENC] = {
-               .name = "venc",
-               .sta_mask = PWR_STATUS_VENC,
-               .ctl_offs = SPM_VEN_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-       },
-       [MT8173_POWER_DOMAIN_ISP] = {
-               .name = "isp",
-               .sta_mask = PWR_STATUS_ISP,
-               .ctl_offs = SPM_ISP_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(13, 12),
-       },
-       [MT8173_POWER_DOMAIN_MM] = {
-               .name = "mm",
-               .sta_mask = PWR_STATUS_DISP,
-               .ctl_offs = SPM_DIS_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_UPDATE_TOPAXI(MT8173_TOP_AXI_PROT_EN_MM_M0 |
-                                              MT8173_TOP_AXI_PROT_EN_MM_M1),
-               },
-       },
-       [MT8173_POWER_DOMAIN_VENC_LT] = {
-               .name = "venc_lt",
-               .sta_mask = PWR_STATUS_VENC_LT,
-               .ctl_offs = SPM_VEN2_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-       },
-       [MT8173_POWER_DOMAIN_AUDIO] = {
-               .name = "audio",
-               .sta_mask = PWR_STATUS_AUDIO,
-               .ctl_offs = SPM_AUDIO_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-       },
-       [MT8173_POWER_DOMAIN_USB] = {
-               .name = "usb",
-               .sta_mask = PWR_STATUS_USB,
-               .ctl_offs = SPM_USB_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT8173_POWER_DOMAIN_MFG_ASYNC] = {
-               .name = "mfg_async",
-               .sta_mask = PWR_STATUS_MFG_ASYNC,
-               .ctl_offs = SPM_MFG_ASYNC_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = 0,
-               .caps = MTK_SCPD_DOMAIN_SUPPLY,
-       },
-       [MT8173_POWER_DOMAIN_MFG_2D] = {
-               .name = "mfg_2d",
-               .sta_mask = PWR_STATUS_MFG_2D,
-               .ctl_offs = SPM_MFG_2D_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(13, 12),
-       },
-       [MT8173_POWER_DOMAIN_MFG] = {
-               .name = "mfg",
-               .sta_mask = PWR_STATUS_MFG,
-               .ctl_offs = SPM_MFG_PWR_CON,
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND,
-               .sram_pdn_bits = GENMASK(13, 8),
-               .sram_pdn_ack_bits = GENMASK(21, 16),
-               .bp_infracfg = {
-                       BUS_PROT_UPDATE_TOPAXI(MT8173_TOP_AXI_PROT_EN_MFG_S |
-                                              MT8173_TOP_AXI_PROT_EN_MFG_M0 |
-                                              MT8173_TOP_AXI_PROT_EN_MFG_M1 |
-                                              MT8173_TOP_AXI_PROT_EN_MFG_SNOOP_OUT),
-               },
-       },
-};
-
-static const struct scpsys_soc_data mt8173_scpsys_data = {
-       .domains_data = scpsys_domain_data_mt8173,
-       .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8173),
-};
-
-#endif /* __SOC_MEDIATEK_MT8173_PM_DOMAINS_H */
diff --git a/drivers/soc/mediatek/mt8183-pm-domains.h b/drivers/soc/mediatek/mt8183-pm-domains.h
deleted file mode 100644 (file)
index 99de67f..0000000
+++ /dev/null
@@ -1,266 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#ifndef __SOC_MEDIATEK_MT8183_PM_DOMAINS_H
-#define __SOC_MEDIATEK_MT8183_PM_DOMAINS_H
-
-#include "mtk-pm-domains.h"
-#include <dt-bindings/power/mt8183-power.h>
-
-/*
- * MT8183 power domain support
- */
-
-static const struct scpsys_domain_data scpsys_domain_data_mt8183[] = {
-       [MT8183_POWER_DOMAIN_AUDIO] = {
-               .name = "audio",
-               .sta_mask = PWR_STATUS_AUDIO,
-               .ctl_offs = 0x0314,
-               .pwr_sta_offs = 0x0180,
-               .pwr_sta2nd_offs = 0x0184,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-       },
-       [MT8183_POWER_DOMAIN_CONN] = {
-               .name = "conn",
-               .sta_mask = PWR_STATUS_CONN,
-               .ctl_offs = 0x032c,
-               .pwr_sta_offs = 0x0180,
-               .pwr_sta2nd_offs = 0x0184,
-               .sram_pdn_bits = 0,
-               .sram_pdn_ack_bits = 0,
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_CONN, MT8183_TOP_AXI_PROT_EN_SET,
-                                   MT8183_TOP_AXI_PROT_EN_CLR, MT8183_TOP_AXI_PROT_EN_STA1),
-               },
-       },
-       [MT8183_POWER_DOMAIN_MFG_ASYNC] = {
-               .name = "mfg_async",
-               .sta_mask = PWR_STATUS_MFG_ASYNC,
-               .ctl_offs = 0x0334,
-               .pwr_sta_offs = 0x0180,
-               .pwr_sta2nd_offs = 0x0184,
-               .sram_pdn_bits = 0,
-               .sram_pdn_ack_bits = 0,
-               .caps = MTK_SCPD_DOMAIN_SUPPLY,
-       },
-       [MT8183_POWER_DOMAIN_MFG] = {
-               .name = "mfg",
-               .sta_mask = PWR_STATUS_MFG,
-               .ctl_offs = 0x0338,
-               .pwr_sta_offs = 0x0180,
-               .pwr_sta2nd_offs = 0x0184,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .caps = MTK_SCPD_DOMAIN_SUPPLY,
-       },
-       [MT8183_POWER_DOMAIN_MFG_CORE0] = {
-               .name = "mfg_core0",
-               .sta_mask = BIT(7),
-               .ctl_offs = 0x034c,
-               .pwr_sta_offs = 0x0180,
-               .pwr_sta2nd_offs = 0x0184,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-       },
-       [MT8183_POWER_DOMAIN_MFG_CORE1] = {
-               .name = "mfg_core1",
-               .sta_mask = BIT(20),
-               .ctl_offs = 0x0310,
-               .pwr_sta_offs = 0x0180,
-               .pwr_sta2nd_offs = 0x0184,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-       },
-       [MT8183_POWER_DOMAIN_MFG_2D] = {
-               .name = "mfg_2d",
-               .sta_mask = PWR_STATUS_MFG_2D,
-               .ctl_offs = 0x0348,
-               .pwr_sta_offs = 0x0180,
-               .pwr_sta2nd_offs = 0x0184,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_1_MFG, MT8183_TOP_AXI_PROT_EN_1_SET,
-                                   MT8183_TOP_AXI_PROT_EN_1_CLR, MT8183_TOP_AXI_PROT_EN_STA1_1),
-                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MFG, MT8183_TOP_AXI_PROT_EN_SET,
-                                   MT8183_TOP_AXI_PROT_EN_CLR, MT8183_TOP_AXI_PROT_EN_STA1),
-               },
-       },
-       [MT8183_POWER_DOMAIN_DISP] = {
-               .name = "disp",
-               .sta_mask = PWR_STATUS_DISP,
-               .ctl_offs = 0x030c,
-               .pwr_sta_offs = 0x0180,
-               .pwr_sta2nd_offs = 0x0184,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_1_DISP, MT8183_TOP_AXI_PROT_EN_1_SET,
-                                   MT8183_TOP_AXI_PROT_EN_1_CLR, MT8183_TOP_AXI_PROT_EN_STA1_1),
-                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_DISP, MT8183_TOP_AXI_PROT_EN_SET,
-                                   MT8183_TOP_AXI_PROT_EN_CLR, MT8183_TOP_AXI_PROT_EN_STA1),
-               },
-               .bp_smi = {
-                       BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_DISP,
-                                   MT8183_SMI_COMMON_CLAMP_EN_SET,
-                                   MT8183_SMI_COMMON_CLAMP_EN_CLR,
-                                   MT8183_SMI_COMMON_CLAMP_EN),
-               },
-       },
-       [MT8183_POWER_DOMAIN_CAM] = {
-               .name = "cam",
-               .sta_mask = BIT(25),
-               .ctl_offs = 0x0344,
-               .pwr_sta_offs = 0x0180,
-               .pwr_sta2nd_offs = 0x0184,
-               .sram_pdn_bits = GENMASK(9, 8),
-               .sram_pdn_ack_bits = GENMASK(13, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MM_CAM, MT8183_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8183_TOP_AXI_PROT_EN_MM_CLR, MT8183_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_CAM, MT8183_TOP_AXI_PROT_EN_SET,
-                                   MT8183_TOP_AXI_PROT_EN_CLR, MT8183_TOP_AXI_PROT_EN_STA1),
-                       BUS_PROT_WR_IGN(MT8183_TOP_AXI_PROT_EN_MM_CAM_2ND,
-                                       MT8183_TOP_AXI_PROT_EN_MM_SET,
-                                       MT8183_TOP_AXI_PROT_EN_MM_CLR,
-                                       MT8183_TOP_AXI_PROT_EN_MM_STA1),
-               },
-               .bp_smi = {
-                       BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_CAM,
-                                   MT8183_SMI_COMMON_CLAMP_EN_SET,
-                                   MT8183_SMI_COMMON_CLAMP_EN_CLR,
-                                   MT8183_SMI_COMMON_CLAMP_EN),
-               },
-       },
-       [MT8183_POWER_DOMAIN_ISP] = {
-               .name = "isp",
-               .sta_mask = PWR_STATUS_ISP,
-               .ctl_offs = 0x0308,
-               .pwr_sta_offs = 0x0180,
-               .pwr_sta2nd_offs = 0x0184,
-               .sram_pdn_bits = GENMASK(9, 8),
-               .sram_pdn_ack_bits = GENMASK(13, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MM_ISP,
-                                   MT8183_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8183_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8183_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR_IGN(MT8183_TOP_AXI_PROT_EN_MM_ISP_2ND,
-                                       MT8183_TOP_AXI_PROT_EN_MM_SET,
-                                       MT8183_TOP_AXI_PROT_EN_MM_CLR,
-                                       MT8183_TOP_AXI_PROT_EN_MM_STA1),
-               },
-               .bp_smi = {
-                       BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_ISP,
-                                   MT8183_SMI_COMMON_CLAMP_EN_SET,
-                                   MT8183_SMI_COMMON_CLAMP_EN_CLR,
-                                   MT8183_SMI_COMMON_CLAMP_EN),
-               },
-       },
-       [MT8183_POWER_DOMAIN_VDEC] = {
-               .name = "vdec",
-               .sta_mask = BIT(31),
-               .ctl_offs = 0x0300,
-               .pwr_sta_offs = 0x0180,
-               .pwr_sta2nd_offs = 0x0184,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_smi = {
-                       BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_VDEC,
-                                   MT8183_SMI_COMMON_CLAMP_EN_SET,
-                                   MT8183_SMI_COMMON_CLAMP_EN_CLR,
-                                   MT8183_SMI_COMMON_CLAMP_EN),
-               },
-       },
-       [MT8183_POWER_DOMAIN_VENC] = {
-               .name = "venc",
-               .sta_mask = PWR_STATUS_VENC,
-               .ctl_offs = 0x0304,
-               .pwr_sta_offs = 0x0180,
-               .pwr_sta2nd_offs = 0x0184,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-               .bp_smi = {
-                       BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_VENC,
-                                   MT8183_SMI_COMMON_CLAMP_EN_SET,
-                                   MT8183_SMI_COMMON_CLAMP_EN_CLR,
-                                   MT8183_SMI_COMMON_CLAMP_EN),
-               },
-       },
-       [MT8183_POWER_DOMAIN_VPU_TOP] = {
-               .name = "vpu_top",
-               .sta_mask = BIT(26),
-               .ctl_offs = 0x0324,
-               .pwr_sta_offs = 0x0180,
-               .pwr_sta2nd_offs = 0x0184,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MM_VPU_TOP,
-                                   MT8183_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8183_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8183_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_VPU_TOP,
-                                   MT8183_TOP_AXI_PROT_EN_SET,
-                                   MT8183_TOP_AXI_PROT_EN_CLR,
-                                   MT8183_TOP_AXI_PROT_EN_STA1),
-                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MM_VPU_TOP_2ND,
-                                   MT8183_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8183_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8183_TOP_AXI_PROT_EN_MM_STA1),
-               },
-               .bp_smi = {
-                       BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_VPU_TOP,
-                                   MT8183_SMI_COMMON_CLAMP_EN_SET,
-                                   MT8183_SMI_COMMON_CLAMP_EN_CLR,
-                                   MT8183_SMI_COMMON_CLAMP_EN),
-               },
-       },
-       [MT8183_POWER_DOMAIN_VPU_CORE0] = {
-               .name = "vpu_core0",
-               .sta_mask = BIT(27),
-               .ctl_offs = 0x33c,
-               .pwr_sta_offs = 0x0180,
-               .pwr_sta2nd_offs = 0x0184,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(13, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MCU_VPU_CORE0,
-                                   MT8183_TOP_AXI_PROT_EN_MCU_SET,
-                                   MT8183_TOP_AXI_PROT_EN_MCU_CLR,
-                                   MT8183_TOP_AXI_PROT_EN_MCU_STA1),
-                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MCU_VPU_CORE0_2ND,
-                                   MT8183_TOP_AXI_PROT_EN_MCU_SET,
-                                   MT8183_TOP_AXI_PROT_EN_MCU_CLR,
-                                   MT8183_TOP_AXI_PROT_EN_MCU_STA1),
-               },
-               .caps = MTK_SCPD_SRAM_ISO,
-       },
-       [MT8183_POWER_DOMAIN_VPU_CORE1] = {
-               .name = "vpu_core1",
-               .sta_mask = BIT(28),
-               .ctl_offs = 0x0340,
-               .pwr_sta_offs = 0x0180,
-               .pwr_sta2nd_offs = 0x0184,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(13, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MCU_VPU_CORE1,
-                                   MT8183_TOP_AXI_PROT_EN_MCU_SET,
-                                   MT8183_TOP_AXI_PROT_EN_MCU_CLR,
-                                   MT8183_TOP_AXI_PROT_EN_MCU_STA1),
-                       BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MCU_VPU_CORE1_2ND,
-                                   MT8183_TOP_AXI_PROT_EN_MCU_SET,
-                                   MT8183_TOP_AXI_PROT_EN_MCU_CLR,
-                                   MT8183_TOP_AXI_PROT_EN_MCU_STA1),
-               },
-               .caps = MTK_SCPD_SRAM_ISO,
-       },
-};
-
-static const struct scpsys_soc_data mt8183_scpsys_data = {
-       .domains_data = scpsys_domain_data_mt8183,
-       .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8183),
-};
-
-#endif /* __SOC_MEDIATEK_MT8183_PM_DOMAINS_H */
diff --git a/drivers/soc/mediatek/mt8186-pm-domains.h b/drivers/soc/mediatek/mt8186-pm-domains.h
deleted file mode 100644 (file)
index fce86f7..0000000
+++ /dev/null
@@ -1,342 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * Copyright (c) 2022 MediaTek Inc.
- * Author: Chun-Jie Chen <chun-jie.chen@mediatek.com>
- */
-
-#ifndef __SOC_MEDIATEK_MT8186_PM_DOMAINS_H
-#define __SOC_MEDIATEK_MT8186_PM_DOMAINS_H
-
-#include "mtk-pm-domains.h"
-#include <dt-bindings/power/mt8186-power.h>
-
-/*
- * MT8186 power domain support
- */
-
-static const struct scpsys_domain_data scpsys_domain_data_mt8186[] = {
-       [MT8186_POWER_DOMAIN_MFG0] = {
-               .name = "mfg0",
-               .sta_mask = BIT(2),
-               .ctl_offs = 0x308,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
-       },
-       [MT8186_POWER_DOMAIN_MFG1] = {
-               .name = "mfg1",
-               .sta_mask = BIT(3),
-               .ctl_offs = 0x30c,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_MFG1_STEP1,
-                               MT8186_TOP_AXI_PROT_EN_1_SET,
-                               MT8186_TOP_AXI_PROT_EN_1_CLR,
-                               MT8186_TOP_AXI_PROT_EN_1_STA),
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_MFG1_STEP2,
-                               MT8186_TOP_AXI_PROT_EN_SET,
-                               MT8186_TOP_AXI_PROT_EN_CLR,
-                               MT8186_TOP_AXI_PROT_EN_STA),
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_MFG1_STEP3,
-                               MT8186_TOP_AXI_PROT_EN_SET,
-                               MT8186_TOP_AXI_PROT_EN_CLR,
-                               MT8186_TOP_AXI_PROT_EN_STA),
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_MFG1_STEP4,
-                               MT8186_TOP_AXI_PROT_EN_1_SET,
-                               MT8186_TOP_AXI_PROT_EN_1_CLR,
-                               MT8186_TOP_AXI_PROT_EN_1_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
-       },
-       [MT8186_POWER_DOMAIN_MFG2] = {
-               .name = "mfg2",
-               .sta_mask = BIT(4),
-               .ctl_offs = 0x310,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8186_POWER_DOMAIN_MFG3] = {
-               .name = "mfg3",
-               .sta_mask = BIT(5),
-               .ctl_offs = 0x314,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8186_POWER_DOMAIN_SSUSB] = {
-               .name = "ssusb",
-               .sta_mask = BIT(20),
-               .ctl_offs = 0x9F0,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT8186_POWER_DOMAIN_SSUSB_P1] = {
-               .name = "ssusb_p1",
-               .sta_mask = BIT(19),
-               .ctl_offs = 0x9F4,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT8186_POWER_DOMAIN_DIS] = {
-               .name = "dis",
-               .sta_mask = BIT(21),
-               .ctl_offs = 0x354,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_DIS_STEP1,
-                               MT8186_TOP_AXI_PROT_EN_1_SET,
-                               MT8186_TOP_AXI_PROT_EN_1_CLR,
-                               MT8186_TOP_AXI_PROT_EN_1_STA),
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_DIS_STEP2,
-                               MT8186_TOP_AXI_PROT_EN_SET,
-                               MT8186_TOP_AXI_PROT_EN_CLR,
-                               MT8186_TOP_AXI_PROT_EN_STA),
-               },
-       },
-       [MT8186_POWER_DOMAIN_IMG] = {
-               .name = "img",
-               .sta_mask = BIT(13),
-               .ctl_offs = 0x334,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_IMG_STEP1,
-                               MT8186_TOP_AXI_PROT_EN_1_SET,
-                               MT8186_TOP_AXI_PROT_EN_1_CLR,
-                               MT8186_TOP_AXI_PROT_EN_1_STA),
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_IMG_STEP2,
-                               MT8186_TOP_AXI_PROT_EN_1_SET,
-                               MT8186_TOP_AXI_PROT_EN_1_CLR,
-                               MT8186_TOP_AXI_PROT_EN_1_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8186_POWER_DOMAIN_IMG2] = {
-               .name = "img2",
-               .sta_mask = BIT(14),
-               .ctl_offs = 0x338,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8186_POWER_DOMAIN_IPE] = {
-               .name = "ipe",
-               .sta_mask = BIT(15),
-               .ctl_offs = 0x33C,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_IPE_STEP1,
-                               MT8186_TOP_AXI_PROT_EN_1_SET,
-                               MT8186_TOP_AXI_PROT_EN_1_CLR,
-                               MT8186_TOP_AXI_PROT_EN_1_STA),
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_IPE_STEP2,
-                               MT8186_TOP_AXI_PROT_EN_1_SET,
-                               MT8186_TOP_AXI_PROT_EN_1_CLR,
-                               MT8186_TOP_AXI_PROT_EN_1_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8186_POWER_DOMAIN_CAM] = {
-               .name = "cam",
-               .sta_mask = BIT(23),
-               .ctl_offs = 0x35C,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_CAM_STEP1,
-                               MT8186_TOP_AXI_PROT_EN_1_SET,
-                               MT8186_TOP_AXI_PROT_EN_1_CLR,
-                               MT8186_TOP_AXI_PROT_EN_1_STA),
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_CAM_STEP2,
-                               MT8186_TOP_AXI_PROT_EN_1_SET,
-                               MT8186_TOP_AXI_PROT_EN_1_CLR,
-                               MT8186_TOP_AXI_PROT_EN_1_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8186_POWER_DOMAIN_CAM_RAWA] = {
-               .name = "cam_rawa",
-               .sta_mask = BIT(24),
-               .ctl_offs = 0x360,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8186_POWER_DOMAIN_CAM_RAWB] = {
-               .name = "cam_rawb",
-               .sta_mask = BIT(25),
-               .ctl_offs = 0x364,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8186_POWER_DOMAIN_VENC] = {
-               .name = "venc",
-               .sta_mask = BIT(18),
-               .ctl_offs = 0x348,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_VENC_STEP1,
-                               MT8186_TOP_AXI_PROT_EN_1_SET,
-                               MT8186_TOP_AXI_PROT_EN_1_CLR,
-                               MT8186_TOP_AXI_PROT_EN_1_STA),
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_VENC_STEP2,
-                               MT8186_TOP_AXI_PROT_EN_1_SET,
-                               MT8186_TOP_AXI_PROT_EN_1_CLR,
-                               MT8186_TOP_AXI_PROT_EN_1_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8186_POWER_DOMAIN_VDEC] = {
-               .name = "vdec",
-               .sta_mask = BIT(16),
-               .ctl_offs = 0x340,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_VDEC_STEP1,
-                               MT8186_TOP_AXI_PROT_EN_1_SET,
-                               MT8186_TOP_AXI_PROT_EN_1_CLR,
-                               MT8186_TOP_AXI_PROT_EN_1_STA),
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_VDEC_STEP2,
-                               MT8186_TOP_AXI_PROT_EN_1_SET,
-                               MT8186_TOP_AXI_PROT_EN_1_CLR,
-                               MT8186_TOP_AXI_PROT_EN_1_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8186_POWER_DOMAIN_WPE] = {
-               .name = "wpe",
-               .sta_mask = BIT(0),
-               .ctl_offs = 0x3F8,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_2_WPE_STEP1,
-                               MT8186_TOP_AXI_PROT_EN_2_SET,
-                               MT8186_TOP_AXI_PROT_EN_2_CLR,
-                               MT8186_TOP_AXI_PROT_EN_2_STA),
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_2_WPE_STEP2,
-                               MT8186_TOP_AXI_PROT_EN_2_SET,
-                               MT8186_TOP_AXI_PROT_EN_2_CLR,
-                               MT8186_TOP_AXI_PROT_EN_2_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8186_POWER_DOMAIN_CONN_ON] = {
-               .name = "conn_on",
-               .sta_mask = BIT(1),
-               .ctl_offs = 0x304,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .bp_infracfg = {
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_CONN_ON_STEP1,
-                               MT8186_TOP_AXI_PROT_EN_1_SET,
-                               MT8186_TOP_AXI_PROT_EN_1_CLR,
-                               MT8186_TOP_AXI_PROT_EN_1_STA),
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP2,
-                               MT8186_TOP_AXI_PROT_EN_SET,
-                               MT8186_TOP_AXI_PROT_EN_CLR,
-                               MT8186_TOP_AXI_PROT_EN_STA),
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP3,
-                               MT8186_TOP_AXI_PROT_EN_SET,
-                               MT8186_TOP_AXI_PROT_EN_CLR,
-                               MT8186_TOP_AXI_PROT_EN_STA),
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP4,
-                               MT8186_TOP_AXI_PROT_EN_SET,
-                               MT8186_TOP_AXI_PROT_EN_CLR,
-                               MT8186_TOP_AXI_PROT_EN_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT8186_POWER_DOMAIN_CSIRX_TOP] = {
-               .name = "csirx_top",
-               .sta_mask = BIT(6),
-               .ctl_offs = 0x318,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8186_POWER_DOMAIN_ADSP_AO] = {
-               .name = "adsp_ao",
-               .sta_mask = BIT(17),
-               .ctl_offs = 0x9FC,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-       },
-       [MT8186_POWER_DOMAIN_ADSP_INFRA] = {
-               .name = "adsp_infra",
-               .sta_mask = BIT(10),
-               .ctl_offs = 0x9F8,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-       },
-       [MT8186_POWER_DOMAIN_ADSP_TOP] = {
-               .name = "adsp_top",
-               .sta_mask = BIT(31),
-               .ctl_offs = 0x3E4,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_3_ADSP_TOP_STEP1,
-                               MT8186_TOP_AXI_PROT_EN_3_SET,
-                               MT8186_TOP_AXI_PROT_EN_3_CLR,
-                               MT8186_TOP_AXI_PROT_EN_3_STA),
-                       BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_3_ADSP_TOP_STEP2,
-                               MT8186_TOP_AXI_PROT_EN_3_SET,
-                               MT8186_TOP_AXI_PROT_EN_3_CLR,
-                               MT8186_TOP_AXI_PROT_EN_3_STA),
-               },
-               .caps = MTK_SCPD_SRAM_ISO | MTK_SCPD_ACTIVE_WAKEUP,
-       },
-};
-
-static const struct scpsys_soc_data mt8186_scpsys_data = {
-       .domains_data = scpsys_domain_data_mt8186,
-       .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8186),
-};
-
-#endif /* __SOC_MEDIATEK_MT8186_PM_DOMAINS_H */
diff --git a/drivers/soc/mediatek/mt8188-pm-domains.h b/drivers/soc/mediatek/mt8188-pm-domains.h
deleted file mode 100644 (file)
index 0692cb4..0000000
+++ /dev/null
@@ -1,623 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * Copyright (c) 2022 MediaTek Inc.
- * Author: Garmin Chang <garmin.chang@mediatek.com>
- */
-
-#ifndef __SOC_MEDIATEK_MT8188_PM_DOMAINS_H
-#define __SOC_MEDIATEK_MT8188_PM_DOMAINS_H
-
-#include "mtk-pm-domains.h"
-#include <dt-bindings/power/mediatek,mt8188-power.h>
-
-/*
- * MT8188 power domain support
- */
-
-static const struct scpsys_domain_data scpsys_domain_data_mt8188[] = {
-       [MT8188_POWER_DOMAIN_MFG0] = {
-               .name = "mfg0",
-               .sta_mask = BIT(1),
-               .ctl_offs = 0x300,
-               .pwr_sta_offs = 0x174,
-               .pwr_sta2nd_offs = 0x178,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
-       },
-       [MT8188_POWER_DOMAIN_MFG1] = {
-               .name = "mfg1",
-               .sta_mask = BIT(2),
-               .ctl_offs = 0x304,
-               .pwr_sta_offs = 0x174,
-               .pwr_sta2nd_offs = 0x178,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MFG1_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_SET,
-                                   MT8188_TOP_AXI_PROT_EN_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_MFG1_STEP2,
-                                   MT8188_TOP_AXI_PROT_EN_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_2_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_1_MFG1_STEP3,
-                                   MT8188_TOP_AXI_PROT_EN_1_SET,
-                                   MT8188_TOP_AXI_PROT_EN_1_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_1_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_MFG1_STEP4,
-                                   MT8188_TOP_AXI_PROT_EN_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_2_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MFG1_STEP5,
-                                   MT8188_TOP_AXI_PROT_EN_SET,
-                                   MT8188_TOP_AXI_PROT_EN_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_MFG1_STEP6,
-                                   MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET,
-                                   MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
-       },
-       [MT8188_POWER_DOMAIN_MFG2] = {
-               .name = "mfg2",
-               .sta_mask = BIT(3),
-               .ctl_offs = 0x308,
-               .pwr_sta_offs = 0x174,
-               .pwr_sta2nd_offs = 0x178,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8188_POWER_DOMAIN_MFG3] = {
-               .name = "mfg3",
-               .sta_mask = BIT(4),
-               .ctl_offs = 0x30C,
-               .pwr_sta_offs = 0x174,
-               .pwr_sta2nd_offs = 0x178,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8188_POWER_DOMAIN_MFG4] = {
-               .name = "mfg4",
-               .sta_mask = BIT(5),
-               .ctl_offs = 0x310,
-               .pwr_sta_offs = 0x174,
-               .pwr_sta2nd_offs = 0x178,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8188_POWER_DOMAIN_PEXTP_MAC_P0] = {
-               .name = "pextp_mac_p0",
-               .sta_mask = BIT(10),
-               .ctl_offs = 0x324,
-               .pwr_sta_offs = 0x174,
-               .pwr_sta2nd_offs = 0x178,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_PEXTP_MAC_P0_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_SET,
-                                   MT8188_TOP_AXI_PROT_EN_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_PEXTP_MAC_P0_STEP2,
-                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET,
-                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8188_POWER_DOMAIN_PEXTP_PHY_TOP] = {
-               .name = "pextp_phy_top",
-               .sta_mask = BIT(12),
-               .ctl_offs = 0x328,
-               .pwr_sta_offs = 0x174,
-               .pwr_sta2nd_offs = 0x178,
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8188_POWER_DOMAIN_CSIRX_TOP] = {
-               .name = "pextp_csirx_top",
-               .sta_mask = BIT(17),
-               .ctl_offs = 0x3C4,
-               .pwr_sta_offs = 0x174,
-               .pwr_sta2nd_offs = 0x178,
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8188_POWER_DOMAIN_ETHER] = {
-               .name = "ether",
-               .sta_mask = BIT(1),
-               .ctl_offs = 0x338,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_ETHER_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET,
-                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT8188_POWER_DOMAIN_HDMI_TX] = {
-               .name = "hdmi_tx",
-               .sta_mask = BIT(18),
-               .ctl_offs = 0x37C,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_HDMI_TX_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET,
-                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT8188_POWER_DOMAIN_ADSP_AO] = {
-               .name = "adsp_ao",
-               .sta_mask = BIT(10),
-               .ctl_offs = 0x35C,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_AO_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_2_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_AO_STEP2,
-                                   MT8188_TOP_AXI_PROT_EN_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_2_STA),
-               },
-               .caps = MTK_SCPD_ALWAYS_ON,
-       },
-       [MT8188_POWER_DOMAIN_ADSP_INFRA] = {
-               .name = "adsp_infra",
-               .sta_mask = BIT(9),
-               .ctl_offs = 0x358,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_INFRA_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_2_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_INFRA_STEP2,
-                                   MT8188_TOP_AXI_PROT_EN_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_2_STA),
-               },
-               .caps = MTK_SCPD_SRAM_ISO | MTK_SCPD_ALWAYS_ON,
-       },
-       [MT8188_POWER_DOMAIN_ADSP] = {
-               .name = "adsp",
-               .sta_mask = BIT(8),
-               .ctl_offs = 0x354,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_2_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_STEP2,
-                                   MT8188_TOP_AXI_PROT_EN_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_2_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_SRAM_ISO | MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT8188_POWER_DOMAIN_AUDIO] = {
-               .name = "audio",
-               .sta_mask = BIT(6),
-               .ctl_offs = 0x34C,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_AUDIO_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_2_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_AUDIO_STEP2,
-                                   MT8188_TOP_AXI_PROT_EN_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_2_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT8188_POWER_DOMAIN_AUDIO_ASRC] = {
-               .name = "audio_asrc",
-               .sta_mask = BIT(7),
-               .ctl_offs = 0x350,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_AUDIO_ASRC_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_2_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_AUDIO_ASRC_STEP2,
-                                   MT8188_TOP_AXI_PROT_EN_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_2_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8188_POWER_DOMAIN_VPPSYS0] = {
-               .name = "vppsys0",
-               .sta_mask = BIT(11),
-               .ctl_offs = 0x360,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_VPPSYS0_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_SET,
-                                   MT8188_TOP_AXI_PROT_EN_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS0_STEP2,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_VPPSYS0_STEP3,
-                                   MT8188_TOP_AXI_PROT_EN_SET,
-                                   MT8188_TOP_AXI_PROT_EN_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS0_STEP4,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VPPSYS0_STEP5,
-                                   MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET,
-                                   MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA),
-               },
-       },
-       [MT8188_POWER_DOMAIN_VDOSYS0] = {
-               .name = "vdosys0",
-               .sta_mask = BIT(13),
-               .ctl_offs = 0x368,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDOSYS0_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_VDOSYS0_STEP2,
-                                   MT8188_TOP_AXI_PROT_EN_SET,
-                                   MT8188_TOP_AXI_PROT_EN_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VDOSYS0_STEP3,
-                                   MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET,
-                                   MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA),
-               },
-       },
-       [MT8188_POWER_DOMAIN_VDOSYS1] = {
-               .name = "vdosys1",
-               .sta_mask = BIT(14),
-               .ctl_offs = 0x36C,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDOSYS1_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDOSYS1_STEP2,
-                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VDOSYS1_STEP3,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
-               },
-       },
-       [MT8188_POWER_DOMAIN_DP_TX] = {
-               .name = "dp_tx",
-               .sta_mask = BIT(16),
-               .ctl_offs = 0x374,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_DP_TX_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET,
-                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8188_POWER_DOMAIN_EDP_TX] = {
-               .name = "edp_tx",
-               .sta_mask = BIT(17),
-               .ctl_offs = 0x378,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_EDP_TX_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET,
-                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8188_POWER_DOMAIN_VPPSYS1] = {
-               .name = "vppsys1",
-               .sta_mask = BIT(12),
-               .ctl_offs = 0x364,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VPPSYS1_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VPPSYS1_STEP2,
-                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS1_STEP3,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
-               },
-       },
-       [MT8188_POWER_DOMAIN_WPE] = {
-               .name = "wpe",
-               .sta_mask = BIT(15),
-               .ctl_offs = 0x370,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_WPE_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_WPE_STEP2,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8188_POWER_DOMAIN_VDEC0] = {
-               .name = "vdec0",
-               .sta_mask = BIT(19),
-               .ctl_offs = 0x380,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDEC0_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VDEC0_STEP2,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8188_POWER_DOMAIN_VDEC1] = {
-               .name = "vdec1",
-               .sta_mask = BIT(20),
-               .ctl_offs = 0x384,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDEC1_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDEC1_STEP2,
-                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8188_POWER_DOMAIN_VENC] = {
-               .name = "venc",
-               .sta_mask = BIT(22),
-               .ctl_offs = 0x38C,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VENC_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VENC_STEP2,
-                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VENC_STEP3,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8188_POWER_DOMAIN_IMG_VCORE] = {
-               .name = "vcore",
-               .sta_mask = BIT(28),
-               .ctl_offs = 0x3A4,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_IMG_VCORE_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_IMG_VCORE_STEP2,
-                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_IMG_VCORE_STEP3,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
-       },
-       [MT8188_POWER_DOMAIN_IMG_MAIN] = {
-               .name = "img_main",
-               .sta_mask = BIT(29),
-               .ctl_offs = 0x3A8,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_IMG_MAIN_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_IMG_MAIN_STEP2,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8188_POWER_DOMAIN_DIP] = {
-               .name = "dip",
-               .sta_mask = BIT(30),
-               .ctl_offs = 0x3AC,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8188_POWER_DOMAIN_IPE] = {
-               .name = "ipe",
-               .sta_mask = BIT(31),
-               .ctl_offs = 0x3B0,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8188_POWER_DOMAIN_CAM_VCORE] = {
-               .name = "cam_vcore",
-               .sta_mask = BIT(27),
-               .ctl_offs = 0x3A0,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_CAM_VCORE_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_CAM_VCORE_STEP2,
-                                   MT8188_TOP_AXI_PROT_EN_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_2_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_1_CAM_VCORE_STEP3,
-                                   MT8188_TOP_AXI_PROT_EN_1_SET,
-                                   MT8188_TOP_AXI_PROT_EN_1_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_1_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_CAM_VCORE_STEP4,
-                                   MT8188_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_CAM_VCORE_STEP5,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
-       },
-       [MT8188_POWER_DOMAIN_CAM_MAIN] = {
-               .name = "cam_main",
-               .sta_mask = BIT(24),
-               .ctl_offs = 0x394,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_CAM_MAIN_STEP1,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_CAM_MAIN_STEP2,
-                                   MT8188_TOP_AXI_PROT_EN_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_2_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_CAM_MAIN_STEP3,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_MM_2_STA),
-                       BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_CAM_MAIN_STEP4,
-                                   MT8188_TOP_AXI_PROT_EN_2_SET,
-                                   MT8188_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8188_TOP_AXI_PROT_EN_2_STA),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8188_POWER_DOMAIN_CAM_SUBA] = {
-               .name = "cam_suba",
-               .sta_mask = BIT(25),
-               .ctl_offs = 0x398,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8188_POWER_DOMAIN_CAM_SUBB] = {
-               .name = "cam_subb",
-               .sta_mask = BIT(26),
-               .ctl_offs = 0x39C,
-               .pwr_sta_offs = 0x16C,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = BIT(8),
-               .sram_pdn_ack_bits = BIT(12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-};
-
-static const struct scpsys_soc_data mt8188_scpsys_data = {
-       .domains_data = scpsys_domain_data_mt8188,
-       .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8188),
-};
-
-#endif /* __SOC_MEDIATEK_MT8188_PM_DOMAINS_H */
diff --git a/drivers/soc/mediatek/mt8192-pm-domains.h b/drivers/soc/mediatek/mt8192-pm-domains.h
deleted file mode 100644 (file)
index b97b205..0000000
+++ /dev/null
@@ -1,355 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#ifndef __SOC_MEDIATEK_MT8192_PM_DOMAINS_H
-#define __SOC_MEDIATEK_MT8192_PM_DOMAINS_H
-
-#include "mtk-pm-domains.h"
-#include <dt-bindings/power/mt8192-power.h>
-
-/*
- * MT8192 power domain support
- */
-
-static const struct scpsys_domain_data scpsys_domain_data_mt8192[] = {
-       [MT8192_POWER_DOMAIN_AUDIO] = {
-               .name = "audio",
-               .sta_mask = BIT(21),
-               .ctl_offs = 0x0354,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_2_AUDIO,
-                                   MT8192_TOP_AXI_PROT_EN_2_SET,
-                                   MT8192_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_2_STA1),
-               },
-       },
-       [MT8192_POWER_DOMAIN_CONN] = {
-               .name = "conn",
-               .sta_mask = PWR_STATUS_CONN,
-               .ctl_offs = 0x0304,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = 0,
-               .sram_pdn_ack_bits = 0,
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_CONN,
-                                   MT8192_TOP_AXI_PROT_EN_SET,
-                                   MT8192_TOP_AXI_PROT_EN_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_STA1),
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_CONN_2ND,
-                                   MT8192_TOP_AXI_PROT_EN_SET,
-                                   MT8192_TOP_AXI_PROT_EN_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_STA1),
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_1_CONN,
-                                   MT8192_TOP_AXI_PROT_EN_1_SET,
-                                   MT8192_TOP_AXI_PROT_EN_1_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_1_STA1),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8192_POWER_DOMAIN_MFG0] = {
-               .name = "mfg0",
-               .sta_mask = BIT(2),
-               .ctl_offs = 0x0308,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .caps = MTK_SCPD_DOMAIN_SUPPLY,
-       },
-       [MT8192_POWER_DOMAIN_MFG1] = {
-               .name = "mfg1",
-               .sta_mask = BIT(3),
-               .ctl_offs = 0x030c,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_1_MFG1,
-                                   MT8192_TOP_AXI_PROT_EN_1_SET,
-                                   MT8192_TOP_AXI_PROT_EN_1_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_1_STA1),
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_2_MFG1,
-                                   MT8192_TOP_AXI_PROT_EN_2_SET,
-                                   MT8192_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_2_STA1),
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MFG1,
-                                   MT8192_TOP_AXI_PROT_EN_SET,
-                                   MT8192_TOP_AXI_PROT_EN_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_STA1),
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_2_MFG1_2ND,
-                                   MT8192_TOP_AXI_PROT_EN_2_SET,
-                                   MT8192_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_2_STA1),
-               },
-               .caps = MTK_SCPD_DOMAIN_SUPPLY,
-       },
-       [MT8192_POWER_DOMAIN_MFG2] = {
-               .name = "mfg2",
-               .sta_mask = BIT(4),
-               .ctl_offs = 0x0310,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-       },
-       [MT8192_POWER_DOMAIN_MFG3] = {
-               .name = "mfg3",
-               .sta_mask = BIT(5),
-               .ctl_offs = 0x0314,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-       },
-       [MT8192_POWER_DOMAIN_MFG4] = {
-               .name = "mfg4",
-               .sta_mask = BIT(6),
-               .ctl_offs = 0x0318,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-       },
-       [MT8192_POWER_DOMAIN_MFG5] = {
-               .name = "mfg5",
-               .sta_mask = BIT(7),
-               .ctl_offs = 0x031c,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-       },
-       [MT8192_POWER_DOMAIN_MFG6] = {
-               .name = "mfg6",
-               .sta_mask = BIT(8),
-               .ctl_offs = 0x0320,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-       },
-       [MT8192_POWER_DOMAIN_DISP] = {
-               .name = "disp",
-               .sta_mask = BIT(20),
-               .ctl_offs = 0x0350,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR_IGN(MT8192_TOP_AXI_PROT_EN_MM_DISP,
-                                       MT8192_TOP_AXI_PROT_EN_MM_SET,
-                                       MT8192_TOP_AXI_PROT_EN_MM_CLR,
-                                       MT8192_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR_IGN(MT8192_TOP_AXI_PROT_EN_MM_2_DISP,
-                                       MT8192_TOP_AXI_PROT_EN_MM_2_SET,
-                                       MT8192_TOP_AXI_PROT_EN_MM_2_CLR,
-                                       MT8192_TOP_AXI_PROT_EN_MM_2_STA1),
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_DISP,
-                                   MT8192_TOP_AXI_PROT_EN_SET,
-                                   MT8192_TOP_AXI_PROT_EN_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_STA1),
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_DISP_2ND,
-                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_2_DISP_2ND,
-                                   MT8192_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8192_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_MM_2_STA1),
-               },
-       },
-       [MT8192_POWER_DOMAIN_IPE] = {
-               .name = "ipe",
-               .sta_mask = BIT(14),
-               .ctl_offs = 0x0338,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_IPE,
-                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_IPE_2ND,
-                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
-               },
-       },
-       [MT8192_POWER_DOMAIN_ISP] = {
-               .name = "isp",
-               .sta_mask = BIT(12),
-               .ctl_offs = 0x0330,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_2_ISP,
-                                   MT8192_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8192_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_MM_2_STA1),
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_2_ISP_2ND,
-                                   MT8192_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8192_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_MM_2_STA1),
-               },
-       },
-       [MT8192_POWER_DOMAIN_ISP2] = {
-               .name = "isp2",
-               .sta_mask = BIT(13),
-               .ctl_offs = 0x0334,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_ISP2,
-                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_ISP2_2ND,
-                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
-               },
-       },
-       [MT8192_POWER_DOMAIN_MDP] = {
-               .name = "mdp",
-               .sta_mask = BIT(19),
-               .ctl_offs = 0x034c,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_2_MDP,
-                                   MT8192_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8192_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_MM_2_STA1),
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_2_MDP_2ND,
-                                   MT8192_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8192_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_MM_2_STA1),
-               },
-       },
-       [MT8192_POWER_DOMAIN_VENC] = {
-               .name = "venc",
-               .sta_mask = BIT(17),
-               .ctl_offs = 0x0344,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_VENC,
-                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_VENC_2ND,
-                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
-               },
-       },
-       [MT8192_POWER_DOMAIN_VDEC] = {
-               .name = "vdec",
-               .sta_mask = BIT(15),
-               .ctl_offs = 0x033c,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_VDEC,
-                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_VDEC_2ND,
-                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
-               },
-       },
-       [MT8192_POWER_DOMAIN_VDEC2] = {
-               .name = "vdec2",
-               .sta_mask = BIT(16),
-               .ctl_offs = 0x0340,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-       },
-       [MT8192_POWER_DOMAIN_CAM] = {
-               .name = "cam",
-               .sta_mask = BIT(23),
-               .ctl_offs = 0x035c,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_2_CAM,
-                                   MT8192_TOP_AXI_PROT_EN_2_SET,
-                                   MT8192_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_2_STA1),
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_CAM,
-                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_1_CAM,
-                                   MT8192_TOP_AXI_PROT_EN_1_SET,
-                                   MT8192_TOP_AXI_PROT_EN_1_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_1_STA1),
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_CAM_2ND,
-                                   MT8192_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8192_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_VDNR_CAM,
-                                   MT8192_TOP_AXI_PROT_EN_VDNR_SET,
-                                   MT8192_TOP_AXI_PROT_EN_VDNR_CLR,
-                                   MT8192_TOP_AXI_PROT_EN_VDNR_STA1),
-               },
-       },
-       [MT8192_POWER_DOMAIN_CAM_RAWA] = {
-               .name = "cam_rawa",
-               .sta_mask = BIT(24),
-               .ctl_offs = 0x0360,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-       },
-       [MT8192_POWER_DOMAIN_CAM_RAWB] = {
-               .name = "cam_rawb",
-               .sta_mask = BIT(25),
-               .ctl_offs = 0x0364,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-       },
-       [MT8192_POWER_DOMAIN_CAM_RAWC] = {
-               .name = "cam_rawc",
-               .sta_mask = BIT(26),
-               .ctl_offs = 0x0368,
-               .pwr_sta_offs = 0x016c,
-               .pwr_sta2nd_offs = 0x0170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-       },
-};
-
-static const struct scpsys_soc_data mt8192_scpsys_data = {
-       .domains_data = scpsys_domain_data_mt8192,
-       .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8192),
-};
-
-#endif /* __SOC_MEDIATEK_MT8192_PM_DOMAINS_H */
diff --git a/drivers/soc/mediatek/mt8195-pm-domains.h b/drivers/soc/mediatek/mt8195-pm-domains.h
deleted file mode 100644 (file)
index d7387ea..0000000
+++ /dev/null
@@ -1,613 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * Copyright (c) 2021 MediaTek Inc.
- * Author: Chun-Jie Chen <chun-jie.chen@mediatek.com>
- */
-
-#ifndef __SOC_MEDIATEK_MT8195_PM_DOMAINS_H
-#define __SOC_MEDIATEK_MT8195_PM_DOMAINS_H
-
-#include "mtk-pm-domains.h"
-#include <dt-bindings/power/mt8195-power.h>
-
-/*
- * MT8195 power domain support
- */
-
-static const struct scpsys_domain_data scpsys_domain_data_mt8195[] = {
-       [MT8195_POWER_DOMAIN_PCIE_MAC_P0] = {
-               .name = "pcie_mac_p0",
-               .sta_mask = BIT(11),
-               .ctl_offs = 0x328,
-               .pwr_sta_offs = 0x174,
-               .pwr_sta2nd_offs = 0x178,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDNR_PCIE_MAC_P0,
-                                   MT8195_TOP_AXI_PROT_EN_VDNR_SET,
-                                   MT8195_TOP_AXI_PROT_EN_VDNR_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_VDNR_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDNR_1_PCIE_MAC_P0,
-                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_SET,
-                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_STA1),
-               },
-       },
-       [MT8195_POWER_DOMAIN_PCIE_MAC_P1] = {
-               .name = "pcie_mac_p1",
-               .sta_mask = BIT(12),
-               .ctl_offs = 0x32C,
-               .pwr_sta_offs = 0x174,
-               .pwr_sta2nd_offs = 0x178,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDNR_PCIE_MAC_P1,
-                                   MT8195_TOP_AXI_PROT_EN_VDNR_SET,
-                                   MT8195_TOP_AXI_PROT_EN_VDNR_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_VDNR_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDNR_1_PCIE_MAC_P1,
-                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_SET,
-                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_STA1),
-               },
-       },
-       [MT8195_POWER_DOMAIN_PCIE_PHY] = {
-               .name = "pcie_phy",
-               .sta_mask = BIT(13),
-               .ctl_offs = 0x330,
-               .pwr_sta_offs = 0x174,
-               .pwr_sta2nd_offs = 0x178,
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT8195_POWER_DOMAIN_SSUSB_PCIE_PHY] = {
-               .name = "ssusb_pcie_phy",
-               .sta_mask = BIT(14),
-               .ctl_offs = 0x334,
-               .pwr_sta_offs = 0x174,
-               .pwr_sta2nd_offs = 0x178,
-               .caps = MTK_SCPD_ACTIVE_WAKEUP | MTK_SCPD_ALWAYS_ON,
-       },
-       [MT8195_POWER_DOMAIN_CSI_RX_TOP] = {
-               .name = "csi_rx_top",
-               .sta_mask = BIT(18),
-               .ctl_offs = 0x3C4,
-               .pwr_sta_offs = 0x174,
-               .pwr_sta2nd_offs = 0x178,
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8195_POWER_DOMAIN_ETHER] = {
-               .name = "ether",
-               .sta_mask = BIT(3),
-               .ctl_offs = 0x344,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT8195_POWER_DOMAIN_ADSP] = {
-               .name = "adsp",
-               .sta_mask = BIT(10),
-               .ctl_offs = 0x360,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_2_ADSP,
-                                   MT8195_TOP_AXI_PROT_EN_2_SET,
-                                   MT8195_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_2_STA1),
-               },
-               .caps = MTK_SCPD_SRAM_ISO | MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT8195_POWER_DOMAIN_AUDIO] = {
-               .name = "audio",
-               .sta_mask = BIT(8),
-               .ctl_offs = 0x358,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_2_AUDIO,
-                                   MT8195_TOP_AXI_PROT_EN_2_SET,
-                                   MT8195_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_2_STA1),
-               },
-       },
-       [MT8195_POWER_DOMAIN_MFG0] = {
-               .name = "mfg0",
-               .sta_mask = BIT(1),
-               .ctl_offs = 0x300,
-               .pwr_sta_offs = 0x174,
-               .pwr_sta2nd_offs = 0x178,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
-       },
-       [MT8195_POWER_DOMAIN_MFG1] = {
-               .name = "mfg1",
-               .sta_mask = BIT(2),
-               .ctl_offs = 0x304,
-               .pwr_sta_offs = 0x174,
-               .pwr_sta2nd_offs = 0x178,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MFG1,
-                                   MT8195_TOP_AXI_PROT_EN_SET,
-                                   MT8195_TOP_AXI_PROT_EN_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_2_MFG1,
-                                   MT8195_TOP_AXI_PROT_EN_2_SET,
-                                   MT8195_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_2_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_1_MFG1,
-                                   MT8195_TOP_AXI_PROT_EN_1_SET,
-                                   MT8195_TOP_AXI_PROT_EN_1_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_1_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_2_MFG1_2ND,
-                                   MT8195_TOP_AXI_PROT_EN_2_SET,
-                                   MT8195_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_2_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MFG1_2ND,
-                                   MT8195_TOP_AXI_PROT_EN_SET,
-                                   MT8195_TOP_AXI_PROT_EN_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_MFG1,
-                                   MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET,
-                                   MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA1),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
-       },
-       [MT8195_POWER_DOMAIN_MFG2] = {
-               .name = "mfg2",
-               .sta_mask = BIT(3),
-               .ctl_offs = 0x308,
-               .pwr_sta_offs = 0x174,
-               .pwr_sta2nd_offs = 0x178,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8195_POWER_DOMAIN_MFG3] = {
-               .name = "mfg3",
-               .sta_mask = BIT(4),
-               .ctl_offs = 0x30C,
-               .pwr_sta_offs = 0x174,
-               .pwr_sta2nd_offs = 0x178,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8195_POWER_DOMAIN_MFG4] = {
-               .name = "mfg4",
-               .sta_mask = BIT(5),
-               .ctl_offs = 0x310,
-               .pwr_sta_offs = 0x174,
-               .pwr_sta2nd_offs = 0x178,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8195_POWER_DOMAIN_MFG5] = {
-               .name = "mfg5",
-               .sta_mask = BIT(6),
-               .ctl_offs = 0x314,
-               .pwr_sta_offs = 0x174,
-               .pwr_sta2nd_offs = 0x178,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8195_POWER_DOMAIN_MFG6] = {
-               .name = "mfg6",
-               .sta_mask = BIT(7),
-               .ctl_offs = 0x318,
-               .pwr_sta_offs = 0x174,
-               .pwr_sta2nd_offs = 0x178,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8195_POWER_DOMAIN_VPPSYS0] = {
-               .name = "vppsys0",
-               .sta_mask = BIT(11),
-               .ctl_offs = 0x364,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VPPSYS0,
-                                   MT8195_TOP_AXI_PROT_EN_SET,
-                                   MT8195_TOP_AXI_PROT_EN_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VPPSYS0,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VPPSYS0_2ND,
-                                   MT8195_TOP_AXI_PROT_EN_SET,
-                                   MT8195_TOP_AXI_PROT_EN_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VPPSYS0_2ND,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VPPSYS0,
-                                   MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET,
-                                   MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA1),
-               },
-       },
-       [MT8195_POWER_DOMAIN_VDOSYS0] = {
-               .name = "vdosys0",
-               .sta_mask = BIT(13),
-               .ctl_offs = 0x36C,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDOSYS0,
-                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDOSYS0,
-                                   MT8195_TOP_AXI_PROT_EN_SET,
-                                   MT8195_TOP_AXI_PROT_EN_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VDOSYS0,
-                                   MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET,
-                                   MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA1),
-               },
-       },
-       [MT8195_POWER_DOMAIN_VPPSYS1] = {
-               .name = "vppsys1",
-               .sta_mask = BIT(12),
-               .ctl_offs = 0x368,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VPPSYS1,
-                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VPPSYS1_2ND,
-                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VPPSYS1,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
-               },
-       },
-       [MT8195_POWER_DOMAIN_VDOSYS1] = {
-               .name = "vdosys1",
-               .sta_mask = BIT(14),
-               .ctl_offs = 0x370,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDOSYS1,
-                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDOSYS1_2ND,
-                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VDOSYS1,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
-               },
-       },
-       [MT8195_POWER_DOMAIN_DP_TX] = {
-               .name = "dp_tx",
-               .sta_mask = BIT(16),
-               .ctl_offs = 0x378,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDNR_1_DP_TX,
-                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_SET,
-                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_STA1),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8195_POWER_DOMAIN_EPD_TX] = {
-               .name = "epd_tx",
-               .sta_mask = BIT(17),
-               .ctl_offs = 0x37C,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDNR_1_EPD_TX,
-                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_SET,
-                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_VDNR_1_STA1),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8195_POWER_DOMAIN_HDMI_TX] = {
-               .name = "hdmi_tx",
-               .sta_mask = BIT(18),
-               .ctl_offs = 0x380,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT8195_POWER_DOMAIN_WPESYS] = {
-               .name = "wpesys",
-               .sta_mask = BIT(15),
-               .ctl_offs = 0x374,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_WPESYS,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_WPESYS,
-                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_WPESYS_2ND,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
-               },
-       },
-       [MT8195_POWER_DOMAIN_VDEC0] = {
-               .name = "vdec0",
-               .sta_mask = BIT(20),
-               .ctl_offs = 0x388,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDEC0,
-                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VDEC0,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDEC0_2ND,
-                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VDEC0_2ND,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8195_POWER_DOMAIN_VDEC1] = {
-               .name = "vdec1",
-               .sta_mask = BIT(21),
-               .ctl_offs = 0x38C,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDEC1,
-                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDEC1_2ND,
-                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8195_POWER_DOMAIN_VDEC2] = {
-               .name = "vdec2",
-               .sta_mask = BIT(22),
-               .ctl_offs = 0x390,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VDEC2,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VDEC2_2ND,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8195_POWER_DOMAIN_VENC] = {
-               .name = "venc",
-               .sta_mask = BIT(23),
-               .ctl_offs = 0x394,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VENC,
-                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VENC_2ND,
-                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VENC,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8195_POWER_DOMAIN_VENC_CORE1] = {
-               .name = "venc_core1",
-               .sta_mask = BIT(24),
-               .ctl_offs = 0x398,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VENC_CORE1,
-                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VENC_CORE1,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8195_POWER_DOMAIN_IMG] = {
-               .name = "img",
-               .sta_mask = BIT(29),
-               .ctl_offs = 0x3AC,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_IMG,
-                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_IMG_2ND,
-                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8195_POWER_DOMAIN_DIP] = {
-               .name = "dip",
-               .sta_mask = BIT(30),
-               .ctl_offs = 0x3B0,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8195_POWER_DOMAIN_IPE] = {
-               .name = "ipe",
-               .sta_mask = BIT(31),
-               .ctl_offs = 0x3B4,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_IPE,
-                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_IPE,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8195_POWER_DOMAIN_CAM] = {
-               .name = "cam",
-               .sta_mask = BIT(25),
-               .ctl_offs = 0x39C,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .bp_infracfg = {
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_2_CAM,
-                                   MT8195_TOP_AXI_PROT_EN_2_SET,
-                                   MT8195_TOP_AXI_PROT_EN_2_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_2_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_CAM,
-                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_1_CAM,
-                                   MT8195_TOP_AXI_PROT_EN_1_SET,
-                                   MT8195_TOP_AXI_PROT_EN_1_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_1_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_CAM_2ND,
-                                   MT8195_TOP_AXI_PROT_EN_MM_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_STA1),
-                       BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_CAM,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_SET,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_CLR,
-                                   MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
-               },
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8195_POWER_DOMAIN_CAM_RAWA] = {
-               .name = "cam_rawa",
-               .sta_mask = BIT(26),
-               .ctl_offs = 0x3A0,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8195_POWER_DOMAIN_CAM_RAWB] = {
-               .name = "cam_rawb",
-               .sta_mask = BIT(27),
-               .ctl_offs = 0x3A4,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-       [MT8195_POWER_DOMAIN_CAM_MRAW] = {
-               .name = "cam_mraw",
-               .sta_mask = BIT(28),
-               .ctl_offs = 0x3A8,
-               .pwr_sta_offs = 0x16c,
-               .pwr_sta2nd_offs = 0x170,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
-       },
-};
-
-static const struct scpsys_soc_data mt8195_scpsys_data = {
-       .domains_data = scpsys_domain_data_mt8195,
-       .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8195),
-};
-
-#endif /* __SOC_MEDIATEK_MT8195_PM_DOMAINS_H */
diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c
deleted file mode 100644 (file)
index 354249c..0000000
+++ /dev/null
@@ -1,688 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Copyright (c) 2020 Collabora Ltd.
- */
-#include <linux/clk.h>
-#include <linux/clk-provider.h>
-#include <linux/init.h>
-#include <linux/io.h>
-#include <linux/iopoll.h>
-#include <linux/mfd/syscon.h>
-#include <linux/of_clk.h>
-#include <linux/of_device.h>
-#include <linux/platform_device.h>
-#include <linux/pm_domain.h>
-#include <linux/regmap.h>
-#include <linux/regulator/consumer.h>
-#include <linux/soc/mediatek/infracfg.h>
-
-#include "mt6795-pm-domains.h"
-#include "mt8167-pm-domains.h"
-#include "mt8173-pm-domains.h"
-#include "mt8183-pm-domains.h"
-#include "mt8186-pm-domains.h"
-#include "mt8188-pm-domains.h"
-#include "mt8192-pm-domains.h"
-#include "mt8195-pm-domains.h"
-
-#define MTK_POLL_DELAY_US              10
-#define MTK_POLL_TIMEOUT               USEC_PER_SEC
-
-#define PWR_RST_B_BIT                  BIT(0)
-#define PWR_ISO_BIT                    BIT(1)
-#define PWR_ON_BIT                     BIT(2)
-#define PWR_ON_2ND_BIT                 BIT(3)
-#define PWR_CLK_DIS_BIT                        BIT(4)
-#define PWR_SRAM_CLKISO_BIT            BIT(5)
-#define PWR_SRAM_ISOINT_B_BIT          BIT(6)
-
-struct scpsys_domain {
-       struct generic_pm_domain genpd;
-       const struct scpsys_domain_data *data;
-       struct scpsys *scpsys;
-       int num_clks;
-       struct clk_bulk_data *clks;
-       int num_subsys_clks;
-       struct clk_bulk_data *subsys_clks;
-       struct regmap *infracfg;
-       struct regmap *smi;
-       struct regulator *supply;
-};
-
-struct scpsys {
-       struct device *dev;
-       struct regmap *base;
-       const struct scpsys_soc_data *soc_data;
-       struct genpd_onecell_data pd_data;
-       struct generic_pm_domain *domains[];
-};
-
-#define to_scpsys_domain(gpd) container_of(gpd, struct scpsys_domain, genpd)
-
-static bool scpsys_domain_is_on(struct scpsys_domain *pd)
-{
-       struct scpsys *scpsys = pd->scpsys;
-       u32 status, status2;
-
-       regmap_read(scpsys->base, pd->data->pwr_sta_offs, &status);
-       status &= pd->data->sta_mask;
-
-       regmap_read(scpsys->base, pd->data->pwr_sta2nd_offs, &status2);
-       status2 &= pd->data->sta_mask;
-
-       /* A domain is on when both status bits are set. */
-       return status && status2;
-}
-
-static int scpsys_sram_enable(struct scpsys_domain *pd)
-{
-       u32 pdn_ack = pd->data->sram_pdn_ack_bits;
-       struct scpsys *scpsys = pd->scpsys;
-       unsigned int tmp;
-       int ret;
-
-       regmap_clear_bits(scpsys->base, pd->data->ctl_offs, pd->data->sram_pdn_bits);
-
-       /* Either wait until SRAM_PDN_ACK all 1 or 0 */
-       ret = regmap_read_poll_timeout(scpsys->base, pd->data->ctl_offs, tmp,
-                                      (tmp & pdn_ack) == 0, MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT);
-       if (ret < 0)
-               return ret;
-
-       if (MTK_SCPD_CAPS(pd, MTK_SCPD_SRAM_ISO)) {
-               regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_SRAM_ISOINT_B_BIT);
-               udelay(1);
-               regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_SRAM_CLKISO_BIT);
-       }
-
-       return 0;
-}
-
-static int scpsys_sram_disable(struct scpsys_domain *pd)
-{
-       u32 pdn_ack = pd->data->sram_pdn_ack_bits;
-       struct scpsys *scpsys = pd->scpsys;
-       unsigned int tmp;
-
-       if (MTK_SCPD_CAPS(pd, MTK_SCPD_SRAM_ISO)) {
-               regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_SRAM_CLKISO_BIT);
-               udelay(1);
-               regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_SRAM_ISOINT_B_BIT);
-       }
-
-       regmap_set_bits(scpsys->base, pd->data->ctl_offs, pd->data->sram_pdn_bits);
-
-       /* Either wait until SRAM_PDN_ACK all 1 or 0 */
-       return regmap_read_poll_timeout(scpsys->base, pd->data->ctl_offs, tmp,
-                                       (tmp & pdn_ack) == pdn_ack, MTK_POLL_DELAY_US,
-                                       MTK_POLL_TIMEOUT);
-}
-
-static int _scpsys_bus_protect_enable(const struct scpsys_bus_prot_data *bpd, struct regmap *regmap)
-{
-       int i, ret;
-
-       for (i = 0; i < SPM_MAX_BUS_PROT_DATA; i++) {
-               u32 val, mask = bpd[i].bus_prot_mask;
-
-               if (!mask)
-                       break;
-
-               if (bpd[i].bus_prot_reg_update)
-                       regmap_set_bits(regmap, bpd[i].bus_prot_set, mask);
-               else
-                       regmap_write(regmap, bpd[i].bus_prot_set, mask);
-
-               ret = regmap_read_poll_timeout(regmap, bpd[i].bus_prot_sta,
-                                              val, (val & mask) == mask,
-                                              MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT);
-               if (ret)
-                       return ret;
-       }
-
-       return 0;
-}
-
-static int scpsys_bus_protect_enable(struct scpsys_domain *pd)
-{
-       int ret;
-
-       ret = _scpsys_bus_protect_enable(pd->data->bp_infracfg, pd->infracfg);
-       if (ret)
-               return ret;
-
-       return _scpsys_bus_protect_enable(pd->data->bp_smi, pd->smi);
-}
-
-static int _scpsys_bus_protect_disable(const struct scpsys_bus_prot_data *bpd,
-                                      struct regmap *regmap)
-{
-       int i, ret;
-
-       for (i = SPM_MAX_BUS_PROT_DATA - 1; i >= 0; i--) {
-               u32 val, mask = bpd[i].bus_prot_mask;
-
-               if (!mask)
-                       continue;
-
-               if (bpd[i].bus_prot_reg_update)
-                       regmap_clear_bits(regmap, bpd[i].bus_prot_clr, mask);
-               else
-                       regmap_write(regmap, bpd[i].bus_prot_clr, mask);
-
-               if (bpd[i].ignore_clr_ack)
-                       continue;
-
-               ret = regmap_read_poll_timeout(regmap, bpd[i].bus_prot_sta,
-                                              val, !(val & mask),
-                                              MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT);
-               if (ret)
-                       return ret;
-       }
-
-       return 0;
-}
-
-static int scpsys_bus_protect_disable(struct scpsys_domain *pd)
-{
-       int ret;
-
-       ret = _scpsys_bus_protect_disable(pd->data->bp_smi, pd->smi);
-       if (ret)
-               return ret;
-
-       return _scpsys_bus_protect_disable(pd->data->bp_infracfg, pd->infracfg);
-}
-
-static int scpsys_regulator_enable(struct regulator *supply)
-{
-       return supply ? regulator_enable(supply) : 0;
-}
-
-static int scpsys_regulator_disable(struct regulator *supply)
-{
-       return supply ? regulator_disable(supply) : 0;
-}
-
-static int scpsys_power_on(struct generic_pm_domain *genpd)
-{
-       struct scpsys_domain *pd = container_of(genpd, struct scpsys_domain, genpd);
-       struct scpsys *scpsys = pd->scpsys;
-       bool tmp;
-       int ret;
-
-       ret = scpsys_regulator_enable(pd->supply);
-       if (ret)
-               return ret;
-
-       ret = clk_bulk_prepare_enable(pd->num_clks, pd->clks);
-       if (ret)
-               goto err_reg;
-
-       if (pd->data->ext_buck_iso_offs && MTK_SCPD_CAPS(pd, MTK_SCPD_EXT_BUCK_ISO))
-               regmap_clear_bits(scpsys->base, pd->data->ext_buck_iso_offs,
-                                 pd->data->ext_buck_iso_mask);
-
-       /* subsys power on */
-       regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_ON_BIT);
-       regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_ON_2ND_BIT);
-
-       /* wait until PWR_ACK = 1 */
-       ret = readx_poll_timeout(scpsys_domain_is_on, pd, tmp, tmp, MTK_POLL_DELAY_US,
-                                MTK_POLL_TIMEOUT);
-       if (ret < 0)
-               goto err_pwr_ack;
-
-       regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_CLK_DIS_BIT);
-       regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ISO_BIT);
-       regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_RST_B_BIT);
-
-       ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks);
-       if (ret)
-               goto err_pwr_ack;
-
-       ret = scpsys_sram_enable(pd);
-       if (ret < 0)
-               goto err_disable_subsys_clks;
-
-       ret = scpsys_bus_protect_disable(pd);
-       if (ret < 0)
-               goto err_disable_sram;
-
-       return 0;
-
-err_disable_sram:
-       scpsys_sram_disable(pd);
-err_disable_subsys_clks:
-       clk_bulk_disable_unprepare(pd->num_subsys_clks, pd->subsys_clks);
-err_pwr_ack:
-       clk_bulk_disable_unprepare(pd->num_clks, pd->clks);
-err_reg:
-       scpsys_regulator_disable(pd->supply);
-       return ret;
-}
-
-static int scpsys_power_off(struct generic_pm_domain *genpd)
-{
-       struct scpsys_domain *pd = container_of(genpd, struct scpsys_domain, genpd);
-       struct scpsys *scpsys = pd->scpsys;
-       bool tmp;
-       int ret;
-
-       ret = scpsys_bus_protect_enable(pd);
-       if (ret < 0)
-               return ret;
-
-       ret = scpsys_sram_disable(pd);
-       if (ret < 0)
-               return ret;
-
-       if (pd->data->ext_buck_iso_offs && MTK_SCPD_CAPS(pd, MTK_SCPD_EXT_BUCK_ISO))
-               regmap_set_bits(scpsys->base, pd->data->ext_buck_iso_offs,
-                               pd->data->ext_buck_iso_mask);
-
-       clk_bulk_disable_unprepare(pd->num_subsys_clks, pd->subsys_clks);
-
-       /* subsys power off */
-       regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_ISO_BIT);
-       regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_CLK_DIS_BIT);
-       regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_RST_B_BIT);
-       regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ON_2ND_BIT);
-       regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ON_BIT);
-
-       /* wait until PWR_ACK = 0 */
-       ret = readx_poll_timeout(scpsys_domain_is_on, pd, tmp, !tmp, MTK_POLL_DELAY_US,
-                                MTK_POLL_TIMEOUT);
-       if (ret < 0)
-               return ret;
-
-       clk_bulk_disable_unprepare(pd->num_clks, pd->clks);
-
-       scpsys_regulator_disable(pd->supply);
-
-       return 0;
-}
-
-static struct
-generic_pm_domain *scpsys_add_one_domain(struct scpsys *scpsys, struct device_node *node)
-{
-       const struct scpsys_domain_data *domain_data;
-       struct scpsys_domain *pd;
-       struct device_node *root_node = scpsys->dev->of_node;
-       struct device_node *smi_node;
-       struct property *prop;
-       const char *clk_name;
-       int i, ret, num_clks;
-       struct clk *clk;
-       int clk_ind = 0;
-       u32 id;
-
-       ret = of_property_read_u32(node, "reg", &id);
-       if (ret) {
-               dev_err(scpsys->dev, "%pOF: failed to retrieve domain id from reg: %d\n",
-                       node, ret);
-               return ERR_PTR(-EINVAL);
-       }
-
-       if (id >= scpsys->soc_data->num_domains) {
-               dev_err(scpsys->dev, "%pOF: invalid domain id %d\n", node, id);
-               return ERR_PTR(-EINVAL);
-       }
-
-       domain_data = &scpsys->soc_data->domains_data[id];
-       if (domain_data->sta_mask == 0) {
-               dev_err(scpsys->dev, "%pOF: undefined domain id %d\n", node, id);
-               return ERR_PTR(-EINVAL);
-       }
-
-       pd = devm_kzalloc(scpsys->dev, sizeof(*pd), GFP_KERNEL);
-       if (!pd)
-               return ERR_PTR(-ENOMEM);
-
-       pd->data = domain_data;
-       pd->scpsys = scpsys;
-
-       if (MTK_SCPD_CAPS(pd, MTK_SCPD_DOMAIN_SUPPLY)) {
-               /*
-                * Find regulator in current power domain node.
-                * devm_regulator_get() finds regulator in a node and its child
-                * node, so set of_node to current power domain node then change
-                * back to original node after regulator is found for current
-                * power domain node.
-                */
-               scpsys->dev->of_node = node;
-               pd->supply = devm_regulator_get(scpsys->dev, "domain");
-               scpsys->dev->of_node = root_node;
-               if (IS_ERR(pd->supply)) {
-                       dev_err_probe(scpsys->dev, PTR_ERR(pd->supply),
-                                     "%pOF: failed to get power supply.\n",
-                                     node);
-                       return ERR_CAST(pd->supply);
-               }
-       }
-
-       pd->infracfg = syscon_regmap_lookup_by_phandle_optional(node, "mediatek,infracfg");
-       if (IS_ERR(pd->infracfg))
-               return ERR_CAST(pd->infracfg);
-
-       smi_node = of_parse_phandle(node, "mediatek,smi", 0);
-       if (smi_node) {
-               pd->smi = device_node_to_regmap(smi_node);
-               of_node_put(smi_node);
-               if (IS_ERR(pd->smi))
-                       return ERR_CAST(pd->smi);
-       }
-
-       num_clks = of_clk_get_parent_count(node);
-       if (num_clks > 0) {
-               /* Calculate number of subsys_clks */
-               of_property_for_each_string(node, "clock-names", prop, clk_name) {
-                       char *subsys;
-
-                       subsys = strchr(clk_name, '-');
-                       if (subsys)
-                               pd->num_subsys_clks++;
-                       else
-                               pd->num_clks++;
-               }
-
-               pd->clks = devm_kcalloc(scpsys->dev, pd->num_clks, sizeof(*pd->clks), GFP_KERNEL);
-               if (!pd->clks)
-                       return ERR_PTR(-ENOMEM);
-
-               pd->subsys_clks = devm_kcalloc(scpsys->dev, pd->num_subsys_clks,
-                                              sizeof(*pd->subsys_clks), GFP_KERNEL);
-               if (!pd->subsys_clks)
-                       return ERR_PTR(-ENOMEM);
-
-       }
-
-       for (i = 0; i < pd->num_clks; i++) {
-               clk = of_clk_get(node, i);
-               if (IS_ERR(clk)) {
-                       ret = PTR_ERR(clk);
-                       dev_err_probe(scpsys->dev, ret,
-                                     "%pOF: failed to get clk at index %d\n", node, i);
-                       goto err_put_clocks;
-               }
-
-               pd->clks[clk_ind++].clk = clk;
-       }
-
-       for (i = 0; i < pd->num_subsys_clks; i++) {
-               clk = of_clk_get(node, i + clk_ind);
-               if (IS_ERR(clk)) {
-                       ret = PTR_ERR(clk);
-                       dev_err_probe(scpsys->dev, ret,
-                                     "%pOF: failed to get clk at index %d\n", node,
-                                     i + clk_ind);
-                       goto err_put_subsys_clocks;
-               }
-
-               pd->subsys_clks[i].clk = clk;
-       }
-
-       /*
-        * Initially turn on all domains to make the domains usable
-        * with !CONFIG_PM and to get the hardware in sync with the
-        * software.  The unused domains will be switched off during
-        * late_init time.
-        */
-       if (MTK_SCPD_CAPS(pd, MTK_SCPD_KEEP_DEFAULT_OFF)) {
-               if (scpsys_domain_is_on(pd))
-                       dev_warn(scpsys->dev,
-                                "%pOF: A default off power domain has been ON\n", node);
-       } else {
-               ret = scpsys_power_on(&pd->genpd);
-               if (ret < 0) {
-                       dev_err(scpsys->dev, "%pOF: failed to power on domain: %d\n", node, ret);
-                       goto err_put_subsys_clocks;
-               }
-
-               if (MTK_SCPD_CAPS(pd, MTK_SCPD_ALWAYS_ON))
-                       pd->genpd.flags |= GENPD_FLAG_ALWAYS_ON;
-       }
-
-       if (scpsys->domains[id]) {
-               ret = -EINVAL;
-               dev_err(scpsys->dev,
-                       "power domain with id %d already exists, check your device-tree\n", id);
-               goto err_put_subsys_clocks;
-       }
-
-       if (!pd->data->name)
-               pd->genpd.name = node->name;
-       else
-               pd->genpd.name = pd->data->name;
-
-       pd->genpd.power_off = scpsys_power_off;
-       pd->genpd.power_on = scpsys_power_on;
-
-       if (MTK_SCPD_CAPS(pd, MTK_SCPD_ACTIVE_WAKEUP))
-               pd->genpd.flags |= GENPD_FLAG_ACTIVE_WAKEUP;
-
-       if (MTK_SCPD_CAPS(pd, MTK_SCPD_KEEP_DEFAULT_OFF))
-               pm_genpd_init(&pd->genpd, NULL, true);
-       else
-               pm_genpd_init(&pd->genpd, NULL, false);
-
-       scpsys->domains[id] = &pd->genpd;
-
-       return scpsys->pd_data.domains[id];
-
-err_put_subsys_clocks:
-       clk_bulk_put(pd->num_subsys_clks, pd->subsys_clks);
-err_put_clocks:
-       clk_bulk_put(pd->num_clks, pd->clks);
-       return ERR_PTR(ret);
-}
-
-static int scpsys_add_subdomain(struct scpsys *scpsys, struct device_node *parent)
-{
-       struct generic_pm_domain *child_pd, *parent_pd;
-       struct device_node *child;
-       int ret;
-
-       for_each_child_of_node(parent, child) {
-               u32 id;
-
-               ret = of_property_read_u32(parent, "reg", &id);
-               if (ret) {
-                       dev_err(scpsys->dev, "%pOF: failed to get parent domain id\n", child);
-                       goto err_put_node;
-               }
-
-               if (!scpsys->pd_data.domains[id]) {
-                       ret = -EINVAL;
-                       dev_err(scpsys->dev, "power domain with id %d does not exist\n", id);
-                       goto err_put_node;
-               }
-
-               parent_pd = scpsys->pd_data.domains[id];
-
-               child_pd = scpsys_add_one_domain(scpsys, child);
-               if (IS_ERR(child_pd)) {
-                       ret = PTR_ERR(child_pd);
-                       dev_err_probe(scpsys->dev, ret, "%pOF: failed to get child domain id\n",
-                                     child);
-                       goto err_put_node;
-               }
-
-               ret = pm_genpd_add_subdomain(parent_pd, child_pd);
-               if (ret) {
-                       dev_err(scpsys->dev, "failed to add %s subdomain to parent %s\n",
-                               child_pd->name, parent_pd->name);
-                       goto err_put_node;
-               } else {
-                       dev_dbg(scpsys->dev, "%s add subdomain: %s\n", parent_pd->name,
-                               child_pd->name);
-               }
-
-               /* recursive call to add all subdomains */
-               ret = scpsys_add_subdomain(scpsys, child);
-               if (ret)
-                       goto err_put_node;
-       }
-
-       return 0;
-
-err_put_node:
-       of_node_put(child);
-       return ret;
-}
-
-static void scpsys_remove_one_domain(struct scpsys_domain *pd)
-{
-       int ret;
-
-       if (scpsys_domain_is_on(pd))
-               scpsys_power_off(&pd->genpd);
-
-       /*
-        * We're in the error cleanup already, so we only complain,
-        * but won't emit another error on top of the original one.
-        */
-       ret = pm_genpd_remove(&pd->genpd);
-       if (ret < 0)
-               dev_err(pd->scpsys->dev,
-                       "failed to remove domain '%s' : %d - state may be inconsistent\n",
-                       pd->genpd.name, ret);
-
-       clk_bulk_put(pd->num_clks, pd->clks);
-       clk_bulk_put(pd->num_subsys_clks, pd->subsys_clks);
-}
-
-static void scpsys_domain_cleanup(struct scpsys *scpsys)
-{
-       struct generic_pm_domain *genpd;
-       struct scpsys_domain *pd;
-       int i;
-
-       for (i = scpsys->pd_data.num_domains - 1; i >= 0; i--) {
-               genpd = scpsys->pd_data.domains[i];
-               if (genpd) {
-                       pd = to_scpsys_domain(genpd);
-                       scpsys_remove_one_domain(pd);
-               }
-       }
-}
-
-static const struct of_device_id scpsys_of_match[] = {
-       {
-               .compatible = "mediatek,mt6795-power-controller",
-               .data = &mt6795_scpsys_data,
-       },
-       {
-               .compatible = "mediatek,mt8167-power-controller",
-               .data = &mt8167_scpsys_data,
-       },
-       {
-               .compatible = "mediatek,mt8173-power-controller",
-               .data = &mt8173_scpsys_data,
-       },
-       {
-               .compatible = "mediatek,mt8183-power-controller",
-               .data = &mt8183_scpsys_data,
-       },
-       {
-               .compatible = "mediatek,mt8186-power-controller",
-               .data = &mt8186_scpsys_data,
-       },
-       {
-               .compatible = "mediatek,mt8188-power-controller",
-               .data = &mt8188_scpsys_data,
-       },
-       {
-               .compatible = "mediatek,mt8192-power-controller",
-               .data = &mt8192_scpsys_data,
-       },
-       {
-               .compatible = "mediatek,mt8195-power-controller",
-               .data = &mt8195_scpsys_data,
-       },
-       { }
-};
-
-static int scpsys_probe(struct platform_device *pdev)
-{
-       struct device *dev = &pdev->dev;
-       struct device_node *np = dev->of_node;
-       const struct scpsys_soc_data *soc;
-       struct device_node *node;
-       struct device *parent;
-       struct scpsys *scpsys;
-       int ret;
-
-       soc = of_device_get_match_data(&pdev->dev);
-       if (!soc) {
-               dev_err(&pdev->dev, "no power controller data\n");
-               return -EINVAL;
-       }
-
-       scpsys = devm_kzalloc(dev, struct_size(scpsys, domains, soc->num_domains), GFP_KERNEL);
-       if (!scpsys)
-               return -ENOMEM;
-
-       scpsys->dev = dev;
-       scpsys->soc_data = soc;
-
-       scpsys->pd_data.domains = scpsys->domains;
-       scpsys->pd_data.num_domains = soc->num_domains;
-
-       parent = dev->parent;
-       if (!parent) {
-               dev_err(dev, "no parent for syscon devices\n");
-               return -ENODEV;
-       }
-
-       scpsys->base = syscon_node_to_regmap(parent->of_node);
-       if (IS_ERR(scpsys->base)) {
-               dev_err(dev, "no regmap available\n");
-               return PTR_ERR(scpsys->base);
-       }
-
-       ret = -ENODEV;
-       for_each_available_child_of_node(np, node) {
-               struct generic_pm_domain *domain;
-
-               domain = scpsys_add_one_domain(scpsys, node);
-               if (IS_ERR(domain)) {
-                       ret = PTR_ERR(domain);
-                       of_node_put(node);
-                       goto err_cleanup_domains;
-               }
-
-               ret = scpsys_add_subdomain(scpsys, node);
-               if (ret) {
-                       of_node_put(node);
-                       goto err_cleanup_domains;
-               }
-       }
-
-       if (ret) {
-               dev_dbg(dev, "no power domains present\n");
-               return ret;
-       }
-
-       ret = of_genpd_add_provider_onecell(np, &scpsys->pd_data);
-       if (ret) {
-               dev_err(dev, "failed to add provider: %d\n", ret);
-               goto err_cleanup_domains;
-       }
-
-       return 0;
-
-err_cleanup_domains:
-       scpsys_domain_cleanup(scpsys);
-       return ret;
-}
-
-static struct platform_driver scpsys_pm_domain_driver = {
-       .probe = scpsys_probe,
-       .driver = {
-               .name = "mtk-power-controller",
-               .suppress_bind_attrs = true,
-               .of_match_table = scpsys_of_match,
-       },
-};
-builtin_platform_driver(scpsys_pm_domain_driver);
diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h
deleted file mode 100644 (file)
index 5ec53ee..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#ifndef __SOC_MEDIATEK_MTK_PM_DOMAINS_H
-#define __SOC_MEDIATEK_MTK_PM_DOMAINS_H
-
-#define MTK_SCPD_ACTIVE_WAKEUP         BIT(0)
-#define MTK_SCPD_FWAIT_SRAM            BIT(1)
-#define MTK_SCPD_SRAM_ISO              BIT(2)
-#define MTK_SCPD_KEEP_DEFAULT_OFF      BIT(3)
-#define MTK_SCPD_DOMAIN_SUPPLY         BIT(4)
-/* can't set MTK_SCPD_KEEP_DEFAULT_OFF at the same time */
-#define MTK_SCPD_ALWAYS_ON             BIT(5)
-#define MTK_SCPD_EXT_BUCK_ISO          BIT(6)
-#define MTK_SCPD_CAPS(_scpd, _x)       ((_scpd)->data->caps & (_x))
-
-#define SPM_VDE_PWR_CON                        0x0210
-#define SPM_MFG_PWR_CON                        0x0214
-#define SPM_VEN_PWR_CON                        0x0230
-#define SPM_ISP_PWR_CON                        0x0238
-#define SPM_DIS_PWR_CON                        0x023c
-#define SPM_CONN_PWR_CON               0x0280
-#define SPM_VEN2_PWR_CON               0x0298
-#define SPM_AUDIO_PWR_CON              0x029c
-#define SPM_MFG_2D_PWR_CON             0x02c0
-#define SPM_MFG_ASYNC_PWR_CON          0x02c4
-#define SPM_USB_PWR_CON                        0x02cc
-
-#define SPM_PWR_STATUS                 0x060c
-#define SPM_PWR_STATUS_2ND             0x0610
-
-#define PWR_STATUS_CONN                        BIT(1)
-#define PWR_STATUS_DISP                        BIT(3)
-#define PWR_STATUS_MFG                 BIT(4)
-#define PWR_STATUS_ISP                 BIT(5)
-#define PWR_STATUS_VDEC                        BIT(7)
-#define PWR_STATUS_VENC_LT             BIT(20)
-#define PWR_STATUS_VENC                        BIT(21)
-#define PWR_STATUS_MFG_2D              BIT(22)
-#define PWR_STATUS_MFG_ASYNC           BIT(23)
-#define PWR_STATUS_AUDIO               BIT(24)
-#define PWR_STATUS_USB                 BIT(25)
-
-#define SPM_MAX_BUS_PROT_DATA          6
-
-#define _BUS_PROT(_mask, _set, _clr, _sta, _update, _ignore) { \
-               .bus_prot_mask = (_mask),                       \
-               .bus_prot_set = _set,                           \
-               .bus_prot_clr = _clr,                           \
-               .bus_prot_sta = _sta,                           \
-               .bus_prot_reg_update = _update,                 \
-               .ignore_clr_ack = _ignore,                      \
-       }
-
-#define BUS_PROT_WR(_mask, _set, _clr, _sta)                   \
-               _BUS_PROT(_mask, _set, _clr, _sta, false, false)
-
-#define BUS_PROT_WR_IGN(_mask, _set, _clr, _sta)               \
-               _BUS_PROT(_mask, _set, _clr, _sta, false, true)
-
-#define BUS_PROT_UPDATE(_mask, _set, _clr, _sta)               \
-               _BUS_PROT(_mask, _set, _clr, _sta, true, false)
-
-#define BUS_PROT_UPDATE_TOPAXI(_mask)                          \
-               BUS_PROT_UPDATE(_mask,                          \
-                               INFRA_TOPAXI_PROTECTEN,         \
-                               INFRA_TOPAXI_PROTECTEN,         \
-                               INFRA_TOPAXI_PROTECTSTA1)
-
-struct scpsys_bus_prot_data {
-       u32 bus_prot_mask;
-       u32 bus_prot_set;
-       u32 bus_prot_clr;
-       u32 bus_prot_sta;
-       bool bus_prot_reg_update;
-       bool ignore_clr_ack;
-};
-
-/**
- * struct scpsys_domain_data - scp domain data for power on/off flow
- * @name: The name of the power domain.
- * @sta_mask: The mask for power on/off status bit.
- * @ctl_offs: The offset for main power control register.
- * @sram_pdn_bits: The mask for sram power control bits.
- * @sram_pdn_ack_bits: The mask for sram power control acked bits.
- * @ext_buck_iso_offs: The offset for external buck isolation
- * @ext_buck_iso_mask: The mask for external buck isolation
- * @caps: The flag for active wake-up action.
- * @bp_infracfg: bus protection for infracfg subsystem
- * @bp_smi: bus protection for smi subsystem
- */
-struct scpsys_domain_data {
-       const char *name;
-       u32 sta_mask;
-       int ctl_offs;
-       u32 sram_pdn_bits;
-       u32 sram_pdn_ack_bits;
-       int ext_buck_iso_offs;
-       u32 ext_buck_iso_mask;
-       u8 caps;
-       const struct scpsys_bus_prot_data bp_infracfg[SPM_MAX_BUS_PROT_DATA];
-       const struct scpsys_bus_prot_data bp_smi[SPM_MAX_BUS_PROT_DATA];
-       int pwr_sta_offs;
-       int pwr_sta2nd_offs;
-};
-
-struct scpsys_soc_data {
-       const struct scpsys_domain_data *domains_data;
-       int num_domains;
-};
-
-#endif /* __SOC_MEDIATEK_MTK_PM_DOMAINS_H */
diff --git a/drivers/soc/mediatek/mtk-scpsys.c b/drivers/soc/mediatek/mtk-scpsys.c
deleted file mode 100644 (file)
index 7a66888..0000000
+++ /dev/null
@@ -1,1147 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Copyright (c) 2015 Pengutronix, Sascha Hauer <kernel@pengutronix.de>
- */
-#include <linux/clk.h>
-#include <linux/init.h>
-#include <linux/io.h>
-#include <linux/iopoll.h>
-#include <linux/mfd/syscon.h>
-#include <linux/of_device.h>
-#include <linux/platform_device.h>
-#include <linux/pm_domain.h>
-#include <linux/regulator/consumer.h>
-#include <linux/soc/mediatek/infracfg.h>
-
-#include <dt-bindings/power/mt2701-power.h>
-#include <dt-bindings/power/mt2712-power.h>
-#include <dt-bindings/power/mt6797-power.h>
-#include <dt-bindings/power/mt7622-power.h>
-#include <dt-bindings/power/mt7623a-power.h>
-#include <dt-bindings/power/mt8173-power.h>
-
-#define MTK_POLL_DELAY_US   10
-#define MTK_POLL_TIMEOUT    USEC_PER_SEC
-
-#define MTK_SCPD_ACTIVE_WAKEUP         BIT(0)
-#define MTK_SCPD_FWAIT_SRAM            BIT(1)
-#define MTK_SCPD_CAPS(_scpd, _x)       ((_scpd)->data->caps & (_x))
-
-#define SPM_VDE_PWR_CON                        0x0210
-#define SPM_MFG_PWR_CON                        0x0214
-#define SPM_VEN_PWR_CON                        0x0230
-#define SPM_ISP_PWR_CON                        0x0238
-#define SPM_DIS_PWR_CON                        0x023c
-#define SPM_CONN_PWR_CON               0x0280
-#define SPM_VEN2_PWR_CON               0x0298
-#define SPM_AUDIO_PWR_CON              0x029c  /* MT8173, MT2712 */
-#define SPM_BDP_PWR_CON                        0x029c  /* MT2701 */
-#define SPM_ETH_PWR_CON                        0x02a0
-#define SPM_HIF_PWR_CON                        0x02a4
-#define SPM_IFR_MSC_PWR_CON            0x02a8
-#define SPM_MFG_2D_PWR_CON             0x02c0
-#define SPM_MFG_ASYNC_PWR_CON          0x02c4
-#define SPM_USB_PWR_CON                        0x02cc
-#define SPM_USB2_PWR_CON               0x02d4  /* MT2712 */
-#define SPM_ETHSYS_PWR_CON             0x02e0  /* MT7622 */
-#define SPM_HIF0_PWR_CON               0x02e4  /* MT7622 */
-#define SPM_HIF1_PWR_CON               0x02e8  /* MT7622 */
-#define SPM_WB_PWR_CON                 0x02ec  /* MT7622 */
-
-#define SPM_PWR_STATUS                 0x060c
-#define SPM_PWR_STATUS_2ND             0x0610
-
-#define PWR_RST_B_BIT                  BIT(0)
-#define PWR_ISO_BIT                    BIT(1)
-#define PWR_ON_BIT                     BIT(2)
-#define PWR_ON_2ND_BIT                 BIT(3)
-#define PWR_CLK_DIS_BIT                        BIT(4)
-
-#define PWR_STATUS_CONN                        BIT(1)
-#define PWR_STATUS_DISP                        BIT(3)
-#define PWR_STATUS_MFG                 BIT(4)
-#define PWR_STATUS_ISP                 BIT(5)
-#define PWR_STATUS_VDEC                        BIT(7)
-#define PWR_STATUS_BDP                 BIT(14)
-#define PWR_STATUS_ETH                 BIT(15)
-#define PWR_STATUS_HIF                 BIT(16)
-#define PWR_STATUS_IFR_MSC             BIT(17)
-#define PWR_STATUS_USB2                        BIT(19) /* MT2712 */
-#define PWR_STATUS_VENC_LT             BIT(20)
-#define PWR_STATUS_VENC                        BIT(21)
-#define PWR_STATUS_MFG_2D              BIT(22) /* MT8173 */
-#define PWR_STATUS_MFG_ASYNC           BIT(23) /* MT8173 */
-#define PWR_STATUS_AUDIO               BIT(24) /* MT8173, MT2712 */
-#define PWR_STATUS_USB                 BIT(25) /* MT8173, MT2712 */
-#define PWR_STATUS_ETHSYS              BIT(24) /* MT7622 */
-#define PWR_STATUS_HIF0                        BIT(25) /* MT7622 */
-#define PWR_STATUS_HIF1                        BIT(26) /* MT7622 */
-#define PWR_STATUS_WB                  BIT(27) /* MT7622 */
-
-enum clk_id {
-       CLK_NONE,
-       CLK_MM,
-       CLK_MFG,
-       CLK_VENC,
-       CLK_VENC_LT,
-       CLK_ETHIF,
-       CLK_VDEC,
-       CLK_HIFSEL,
-       CLK_JPGDEC,
-       CLK_AUDIO,
-       CLK_MAX,
-};
-
-static const char * const clk_names[] = {
-       NULL,
-       "mm",
-       "mfg",
-       "venc",
-       "venc_lt",
-       "ethif",
-       "vdec",
-       "hif_sel",
-       "jpgdec",
-       "audio",
-       NULL,
-};
-
-#define MAX_CLKS       3
-
-/**
- * struct scp_domain_data - scp domain data for power on/off flow
- * @name: The domain name.
- * @sta_mask: The mask for power on/off status bit.
- * @ctl_offs: The offset for main power control register.
- * @sram_pdn_bits: The mask for sram power control bits.
- * @sram_pdn_ack_bits: The mask for sram power control acked bits.
- * @bus_prot_mask: The mask for single step bus protection.
- * @clk_id: The basic clocks required by this power domain.
- * @caps: The flag for active wake-up action.
- */
-struct scp_domain_data {
-       const char *name;
-       u32 sta_mask;
-       int ctl_offs;
-       u32 sram_pdn_bits;
-       u32 sram_pdn_ack_bits;
-       u32 bus_prot_mask;
-       enum clk_id clk_id[MAX_CLKS];
-       u8 caps;
-};
-
-struct scp;
-
-struct scp_domain {
-       struct generic_pm_domain genpd;
-       struct scp *scp;
-       struct clk *clk[MAX_CLKS];
-       const struct scp_domain_data *data;
-       struct regulator *supply;
-};
-
-struct scp_ctrl_reg {
-       int pwr_sta_offs;
-       int pwr_sta2nd_offs;
-};
-
-struct scp {
-       struct scp_domain *domains;
-       struct genpd_onecell_data pd_data;
-       struct device *dev;
-       void __iomem *base;
-       struct regmap *infracfg;
-       struct scp_ctrl_reg ctrl_reg;
-       bool bus_prot_reg_update;
-};
-
-struct scp_subdomain {
-       int origin;
-       int subdomain;
-};
-
-struct scp_soc_data {
-       const struct scp_domain_data *domains;
-       int num_domains;
-       const struct scp_subdomain *subdomains;
-       int num_subdomains;
-       const struct scp_ctrl_reg regs;
-       bool bus_prot_reg_update;
-};
-
-static int scpsys_domain_is_on(struct scp_domain *scpd)
-{
-       struct scp *scp = scpd->scp;
-
-       u32 status = readl(scp->base + scp->ctrl_reg.pwr_sta_offs) &
-                                               scpd->data->sta_mask;
-       u32 status2 = readl(scp->base + scp->ctrl_reg.pwr_sta2nd_offs) &
-                                               scpd->data->sta_mask;
-
-       /*
-        * A domain is on when both status bits are set. If only one is set
-        * return an error. This happens while powering up a domain
-        */
-
-       if (status && status2)
-               return true;
-       if (!status && !status2)
-               return false;
-
-       return -EINVAL;
-}
-
-static int scpsys_regulator_enable(struct scp_domain *scpd)
-{
-       if (!scpd->supply)
-               return 0;
-
-       return regulator_enable(scpd->supply);
-}
-
-static int scpsys_regulator_disable(struct scp_domain *scpd)
-{
-       if (!scpd->supply)
-               return 0;
-
-       return regulator_disable(scpd->supply);
-}
-
-static void scpsys_clk_disable(struct clk *clk[], int max_num)
-{
-       int i;
-
-       for (i = max_num - 1; i >= 0; i--)
-               clk_disable_unprepare(clk[i]);
-}
-
-static int scpsys_clk_enable(struct clk *clk[], int max_num)
-{
-       int i, ret = 0;
-
-       for (i = 0; i < max_num && clk[i]; i++) {
-               ret = clk_prepare_enable(clk[i]);
-               if (ret) {
-                       scpsys_clk_disable(clk, i);
-                       break;
-               }
-       }
-
-       return ret;
-}
-
-static int scpsys_sram_enable(struct scp_domain *scpd, void __iomem *ctl_addr)
-{
-       u32 val;
-       u32 pdn_ack = scpd->data->sram_pdn_ack_bits;
-       int tmp;
-
-       val = readl(ctl_addr);
-       val &= ~scpd->data->sram_pdn_bits;
-       writel(val, ctl_addr);
-
-       /* Either wait until SRAM_PDN_ACK all 0 or have a force wait */
-       if (MTK_SCPD_CAPS(scpd, MTK_SCPD_FWAIT_SRAM)) {
-               /*
-                * Currently, MTK_SCPD_FWAIT_SRAM is necessary only for
-                * MT7622_POWER_DOMAIN_WB and thus just a trivial setup
-                * is applied here.
-                */
-               usleep_range(12000, 12100);
-       } else {
-               /* Either wait until SRAM_PDN_ACK all 1 or 0 */
-               int ret = readl_poll_timeout(ctl_addr, tmp,
-                               (tmp & pdn_ack) == 0,
-                               MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT);
-               if (ret < 0)
-                       return ret;
-       }
-
-       return 0;
-}
-
-static int scpsys_sram_disable(struct scp_domain *scpd, void __iomem *ctl_addr)
-{
-       u32 val;
-       u32 pdn_ack = scpd->data->sram_pdn_ack_bits;
-       int tmp;
-
-       val = readl(ctl_addr);
-       val |= scpd->data->sram_pdn_bits;
-       writel(val, ctl_addr);
-
-       /* Either wait until SRAM_PDN_ACK all 1 or 0 */
-       return readl_poll_timeout(ctl_addr, tmp,
-                       (tmp & pdn_ack) == pdn_ack,
-                       MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT);
-}
-
-static int scpsys_bus_protect_enable(struct scp_domain *scpd)
-{
-       struct scp *scp = scpd->scp;
-
-       if (!scpd->data->bus_prot_mask)
-               return 0;
-
-       return mtk_infracfg_set_bus_protection(scp->infracfg,
-                       scpd->data->bus_prot_mask,
-                       scp->bus_prot_reg_update);
-}
-
-static int scpsys_bus_protect_disable(struct scp_domain *scpd)
-{
-       struct scp *scp = scpd->scp;
-
-       if (!scpd->data->bus_prot_mask)
-               return 0;
-
-       return mtk_infracfg_clear_bus_protection(scp->infracfg,
-                       scpd->data->bus_prot_mask,
-                       scp->bus_prot_reg_update);
-}
-
-static int scpsys_power_on(struct generic_pm_domain *genpd)
-{
-       struct scp_domain *scpd = container_of(genpd, struct scp_domain, genpd);
-       struct scp *scp = scpd->scp;
-       void __iomem *ctl_addr = scp->base + scpd->data->ctl_offs;
-       u32 val;
-       int ret, tmp;
-
-       ret = scpsys_regulator_enable(scpd);
-       if (ret < 0)
-               return ret;
-
-       ret = scpsys_clk_enable(scpd->clk, MAX_CLKS);
-       if (ret)
-               goto err_clk;
-
-       /* subsys power on */
-       val = readl(ctl_addr);
-       val |= PWR_ON_BIT;
-       writel(val, ctl_addr);
-       val |= PWR_ON_2ND_BIT;
-       writel(val, ctl_addr);
-
-       /* wait until PWR_ACK = 1 */
-       ret = readx_poll_timeout(scpsys_domain_is_on, scpd, tmp, tmp > 0,
-                                MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT);
-       if (ret < 0)
-               goto err_pwr_ack;
-
-       val &= ~PWR_CLK_DIS_BIT;
-       writel(val, ctl_addr);
-
-       val &= ~PWR_ISO_BIT;
-       writel(val, ctl_addr);
-
-       val |= PWR_RST_B_BIT;
-       writel(val, ctl_addr);
-
-       ret = scpsys_sram_enable(scpd, ctl_addr);
-       if (ret < 0)
-               goto err_pwr_ack;
-
-       ret = scpsys_bus_protect_disable(scpd);
-       if (ret < 0)
-               goto err_pwr_ack;
-
-       return 0;
-
-err_pwr_ack:
-       scpsys_clk_disable(scpd->clk, MAX_CLKS);
-err_clk:
-       scpsys_regulator_disable(scpd);
-
-       dev_err(scp->dev, "Failed to power on domain %s\n", genpd->name);
-
-       return ret;
-}
-
-static int scpsys_power_off(struct generic_pm_domain *genpd)
-{
-       struct scp_domain *scpd = container_of(genpd, struct scp_domain, genpd);
-       struct scp *scp = scpd->scp;
-       void __iomem *ctl_addr = scp->base + scpd->data->ctl_offs;
-       u32 val;
-       int ret, tmp;
-
-       ret = scpsys_bus_protect_enable(scpd);
-       if (ret < 0)
-               goto out;
-
-       ret = scpsys_sram_disable(scpd, ctl_addr);
-       if (ret < 0)
-               goto out;
-
-       /* subsys power off */
-       val = readl(ctl_addr);
-       val |= PWR_ISO_BIT;
-       writel(val, ctl_addr);
-
-       val &= ~PWR_RST_B_BIT;
-       writel(val, ctl_addr);
-
-       val |= PWR_CLK_DIS_BIT;
-       writel(val, ctl_addr);
-
-       val &= ~PWR_ON_BIT;
-       writel(val, ctl_addr);
-
-       val &= ~PWR_ON_2ND_BIT;
-       writel(val, ctl_addr);
-
-       /* wait until PWR_ACK = 0 */
-       ret = readx_poll_timeout(scpsys_domain_is_on, scpd, tmp, tmp == 0,
-                                MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT);
-       if (ret < 0)
-               goto out;
-
-       scpsys_clk_disable(scpd->clk, MAX_CLKS);
-
-       ret = scpsys_regulator_disable(scpd);
-       if (ret < 0)
-               goto out;
-
-       return 0;
-
-out:
-       dev_err(scp->dev, "Failed to power off domain %s\n", genpd->name);
-
-       return ret;
-}
-
-static void init_clks(struct platform_device *pdev, struct clk **clk)
-{
-       int i;
-
-       for (i = CLK_NONE + 1; i < CLK_MAX; i++)
-               clk[i] = devm_clk_get(&pdev->dev, clk_names[i]);
-}
-
-static struct scp *init_scp(struct platform_device *pdev,
-                       const struct scp_domain_data *scp_domain_data, int num,
-                       const struct scp_ctrl_reg *scp_ctrl_reg,
-                       bool bus_prot_reg_update)
-{
-       struct genpd_onecell_data *pd_data;
-       struct resource *res;
-       int i, j;
-       struct scp *scp;
-       struct clk *clk[CLK_MAX];
-
-       scp = devm_kzalloc(&pdev->dev, sizeof(*scp), GFP_KERNEL);
-       if (!scp)
-               return ERR_PTR(-ENOMEM);
-
-       scp->ctrl_reg.pwr_sta_offs = scp_ctrl_reg->pwr_sta_offs;
-       scp->ctrl_reg.pwr_sta2nd_offs = scp_ctrl_reg->pwr_sta2nd_offs;
-
-       scp->bus_prot_reg_update = bus_prot_reg_update;
-
-       scp->dev = &pdev->dev;
-
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       scp->base = devm_ioremap_resource(&pdev->dev, res);
-       if (IS_ERR(scp->base))
-               return ERR_CAST(scp->base);
-
-       scp->domains = devm_kcalloc(&pdev->dev,
-                               num, sizeof(*scp->domains), GFP_KERNEL);
-       if (!scp->domains)
-               return ERR_PTR(-ENOMEM);
-
-       pd_data = &scp->pd_data;
-
-       pd_data->domains = devm_kcalloc(&pdev->dev,
-                       num, sizeof(*pd_data->domains), GFP_KERNEL);
-       if (!pd_data->domains)
-               return ERR_PTR(-ENOMEM);
-
-       scp->infracfg = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
-                       "infracfg");
-       if (IS_ERR(scp->infracfg)) {
-               dev_err(&pdev->dev, "Cannot find infracfg controller: %ld\n",
-                               PTR_ERR(scp->infracfg));
-               return ERR_CAST(scp->infracfg);
-       }
-
-       for (i = 0; i < num; i++) {
-               struct scp_domain *scpd = &scp->domains[i];
-               const struct scp_domain_data *data = &scp_domain_data[i];
-
-               scpd->supply = devm_regulator_get_optional(&pdev->dev, data->name);
-               if (IS_ERR(scpd->supply)) {
-                       if (PTR_ERR(scpd->supply) == -ENODEV)
-                               scpd->supply = NULL;
-                       else
-                               return ERR_CAST(scpd->supply);
-               }
-       }
-
-       pd_data->num_domains = num;
-
-       init_clks(pdev, clk);
-
-       for (i = 0; i < num; i++) {
-               struct scp_domain *scpd = &scp->domains[i];
-               struct generic_pm_domain *genpd = &scpd->genpd;
-               const struct scp_domain_data *data = &scp_domain_data[i];
-
-               pd_data->domains[i] = genpd;
-               scpd->scp = scp;
-
-               scpd->data = data;
-
-               for (j = 0; j < MAX_CLKS && data->clk_id[j]; j++) {
-                       struct clk *c = clk[data->clk_id[j]];
-
-                       if (IS_ERR(c)) {
-                               dev_err(&pdev->dev, "%s: clk unavailable\n",
-                                       data->name);
-                               return ERR_CAST(c);
-                       }
-
-                       scpd->clk[j] = c;
-               }
-
-               genpd->name = data->name;
-               genpd->power_off = scpsys_power_off;
-               genpd->power_on = scpsys_power_on;
-               if (MTK_SCPD_CAPS(scpd, MTK_SCPD_ACTIVE_WAKEUP))
-                       genpd->flags |= GENPD_FLAG_ACTIVE_WAKEUP;
-       }
-
-       return scp;
-}
-
-static void mtk_register_power_domains(struct platform_device *pdev,
-                               struct scp *scp, int num)
-{
-       struct genpd_onecell_data *pd_data;
-       int i, ret;
-
-       for (i = 0; i < num; i++) {
-               struct scp_domain *scpd = &scp->domains[i];
-               struct generic_pm_domain *genpd = &scpd->genpd;
-               bool on;
-
-               /*
-                * Initially turn on all domains to make the domains usable
-                * with !CONFIG_PM and to get the hardware in sync with the
-                * software.  The unused domains will be switched off during
-                * late_init time.
-                */
-               on = !WARN_ON(genpd->power_on(genpd) < 0);
-
-               pm_genpd_init(genpd, NULL, !on);
-       }
-
-       /*
-        * We are not allowed to fail here since there is no way to unregister
-        * a power domain. Once registered above we have to keep the domains
-        * valid.
-        */
-
-       pd_data = &scp->pd_data;
-
-       ret = of_genpd_add_provider_onecell(pdev->dev.of_node, pd_data);
-       if (ret)
-               dev_err(&pdev->dev, "Failed to add OF provider: %d\n", ret);
-}
-
-/*
- * MT2701 power domain support
- */
-
-static const struct scp_domain_data scp_domain_data_mt2701[] = {
-       [MT2701_POWER_DOMAIN_CONN] = {
-               .name = "conn",
-               .sta_mask = PWR_STATUS_CONN,
-               .ctl_offs = SPM_CONN_PWR_CON,
-               .bus_prot_mask = MT2701_TOP_AXI_PROT_EN_CONN_M |
-                                MT2701_TOP_AXI_PROT_EN_CONN_S,
-               .clk_id = {CLK_NONE},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT2701_POWER_DOMAIN_DISP] = {
-               .name = "disp",
-               .sta_mask = PWR_STATUS_DISP,
-               .ctl_offs = SPM_DIS_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .clk_id = {CLK_MM},
-               .bus_prot_mask = MT2701_TOP_AXI_PROT_EN_MM_M0,
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT2701_POWER_DOMAIN_MFG] = {
-               .name = "mfg",
-               .sta_mask = PWR_STATUS_MFG,
-               .ctl_offs = SPM_MFG_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .clk_id = {CLK_MFG},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT2701_POWER_DOMAIN_VDEC] = {
-               .name = "vdec",
-               .sta_mask = PWR_STATUS_VDEC,
-               .ctl_offs = SPM_VDE_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .clk_id = {CLK_MM},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT2701_POWER_DOMAIN_ISP] = {
-               .name = "isp",
-               .sta_mask = PWR_STATUS_ISP,
-               .ctl_offs = SPM_ISP_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(13, 12),
-               .clk_id = {CLK_MM},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT2701_POWER_DOMAIN_BDP] = {
-               .name = "bdp",
-               .sta_mask = PWR_STATUS_BDP,
-               .ctl_offs = SPM_BDP_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .clk_id = {CLK_NONE},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT2701_POWER_DOMAIN_ETH] = {
-               .name = "eth",
-               .sta_mask = PWR_STATUS_ETH,
-               .ctl_offs = SPM_ETH_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-               .clk_id = {CLK_ETHIF},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT2701_POWER_DOMAIN_HIF] = {
-               .name = "hif",
-               .sta_mask = PWR_STATUS_HIF,
-               .ctl_offs = SPM_HIF_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-               .clk_id = {CLK_ETHIF},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT2701_POWER_DOMAIN_IFR_MSC] = {
-               .name = "ifr_msc",
-               .sta_mask = PWR_STATUS_IFR_MSC,
-               .ctl_offs = SPM_IFR_MSC_PWR_CON,
-               .clk_id = {CLK_NONE},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-};
-
-/*
- * MT2712 power domain support
- */
-static const struct scp_domain_data scp_domain_data_mt2712[] = {
-       [MT2712_POWER_DOMAIN_MM] = {
-               .name = "mm",
-               .sta_mask = PWR_STATUS_DISP,
-               .ctl_offs = SPM_DIS_PWR_CON,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .clk_id = {CLK_MM},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT2712_POWER_DOMAIN_VDEC] = {
-               .name = "vdec",
-               .sta_mask = PWR_STATUS_VDEC,
-               .ctl_offs = SPM_VDE_PWR_CON,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .clk_id = {CLK_MM, CLK_VDEC},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT2712_POWER_DOMAIN_VENC] = {
-               .name = "venc",
-               .sta_mask = PWR_STATUS_VENC,
-               .ctl_offs = SPM_VEN_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-               .clk_id = {CLK_MM, CLK_VENC, CLK_JPGDEC},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT2712_POWER_DOMAIN_ISP] = {
-               .name = "isp",
-               .sta_mask = PWR_STATUS_ISP,
-               .ctl_offs = SPM_ISP_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(13, 12),
-               .clk_id = {CLK_MM},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT2712_POWER_DOMAIN_AUDIO] = {
-               .name = "audio",
-               .sta_mask = PWR_STATUS_AUDIO,
-               .ctl_offs = SPM_AUDIO_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-               .clk_id = {CLK_AUDIO},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT2712_POWER_DOMAIN_USB] = {
-               .name = "usb",
-               .sta_mask = PWR_STATUS_USB,
-               .ctl_offs = SPM_USB_PWR_CON,
-               .sram_pdn_bits = GENMASK(10, 8),
-               .sram_pdn_ack_bits = GENMASK(14, 12),
-               .clk_id = {CLK_NONE},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT2712_POWER_DOMAIN_USB2] = {
-               .name = "usb2",
-               .sta_mask = PWR_STATUS_USB2,
-               .ctl_offs = SPM_USB2_PWR_CON,
-               .sram_pdn_bits = GENMASK(10, 8),
-               .sram_pdn_ack_bits = GENMASK(14, 12),
-               .clk_id = {CLK_NONE},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT2712_POWER_DOMAIN_MFG] = {
-               .name = "mfg",
-               .sta_mask = PWR_STATUS_MFG,
-               .ctl_offs = SPM_MFG_PWR_CON,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(16, 16),
-               .clk_id = {CLK_MFG},
-               .bus_prot_mask = BIT(14) | BIT(21) | BIT(23),
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT2712_POWER_DOMAIN_MFG_SC1] = {
-               .name = "mfg_sc1",
-               .sta_mask = BIT(22),
-               .ctl_offs = 0x02c0,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(16, 16),
-               .clk_id = {CLK_NONE},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT2712_POWER_DOMAIN_MFG_SC2] = {
-               .name = "mfg_sc2",
-               .sta_mask = BIT(23),
-               .ctl_offs = 0x02c4,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(16, 16),
-               .clk_id = {CLK_NONE},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT2712_POWER_DOMAIN_MFG_SC3] = {
-               .name = "mfg_sc3",
-               .sta_mask = BIT(30),
-               .ctl_offs = 0x01f8,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(16, 16),
-               .clk_id = {CLK_NONE},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-};
-
-static const struct scp_subdomain scp_subdomain_mt2712[] = {
-       {MT2712_POWER_DOMAIN_MM, MT2712_POWER_DOMAIN_VDEC},
-       {MT2712_POWER_DOMAIN_MM, MT2712_POWER_DOMAIN_VENC},
-       {MT2712_POWER_DOMAIN_MM, MT2712_POWER_DOMAIN_ISP},
-       {MT2712_POWER_DOMAIN_MFG, MT2712_POWER_DOMAIN_MFG_SC1},
-       {MT2712_POWER_DOMAIN_MFG_SC1, MT2712_POWER_DOMAIN_MFG_SC2},
-       {MT2712_POWER_DOMAIN_MFG_SC2, MT2712_POWER_DOMAIN_MFG_SC3},
-};
-
-/*
- * MT6797 power domain support
- */
-
-static const struct scp_domain_data scp_domain_data_mt6797[] = {
-       [MT6797_POWER_DOMAIN_VDEC] = {
-               .name = "vdec",
-               .sta_mask = BIT(7),
-               .ctl_offs = 0x300,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .clk_id = {CLK_VDEC},
-       },
-       [MT6797_POWER_DOMAIN_VENC] = {
-               .name = "venc",
-               .sta_mask = BIT(21),
-               .ctl_offs = 0x304,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-               .clk_id = {CLK_NONE},
-       },
-       [MT6797_POWER_DOMAIN_ISP] = {
-               .name = "isp",
-               .sta_mask = BIT(5),
-               .ctl_offs = 0x308,
-               .sram_pdn_bits = GENMASK(9, 8),
-               .sram_pdn_ack_bits = GENMASK(13, 12),
-               .clk_id = {CLK_NONE},
-       },
-       [MT6797_POWER_DOMAIN_MM] = {
-               .name = "mm",
-               .sta_mask = BIT(3),
-               .ctl_offs = 0x30C,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .clk_id = {CLK_MM},
-               .bus_prot_mask = (BIT(1) | BIT(2)),
-       },
-       [MT6797_POWER_DOMAIN_AUDIO] = {
-               .name = "audio",
-               .sta_mask = BIT(24),
-               .ctl_offs = 0x314,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-               .clk_id = {CLK_NONE},
-       },
-       [MT6797_POWER_DOMAIN_MFG_ASYNC] = {
-               .name = "mfg_async",
-               .sta_mask = BIT(13),
-               .ctl_offs = 0x334,
-               .sram_pdn_bits = 0,
-               .sram_pdn_ack_bits = 0,
-               .clk_id = {CLK_MFG},
-       },
-       [MT6797_POWER_DOMAIN_MJC] = {
-               .name = "mjc",
-               .sta_mask = BIT(20),
-               .ctl_offs = 0x310,
-               .sram_pdn_bits = GENMASK(8, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .clk_id = {CLK_NONE},
-       },
-};
-
-#define SPM_PWR_STATUS_MT6797          0x0180
-#define SPM_PWR_STATUS_2ND_MT6797      0x0184
-
-static const struct scp_subdomain scp_subdomain_mt6797[] = {
-       {MT6797_POWER_DOMAIN_MM, MT6797_POWER_DOMAIN_VDEC},
-       {MT6797_POWER_DOMAIN_MM, MT6797_POWER_DOMAIN_ISP},
-       {MT6797_POWER_DOMAIN_MM, MT6797_POWER_DOMAIN_VENC},
-       {MT6797_POWER_DOMAIN_MM, MT6797_POWER_DOMAIN_MJC},
-};
-
-/*
- * MT7622 power domain support
- */
-
-static const struct scp_domain_data scp_domain_data_mt7622[] = {
-       [MT7622_POWER_DOMAIN_ETHSYS] = {
-               .name = "ethsys",
-               .sta_mask = PWR_STATUS_ETHSYS,
-               .ctl_offs = SPM_ETHSYS_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-               .clk_id = {CLK_NONE},
-               .bus_prot_mask = MT7622_TOP_AXI_PROT_EN_ETHSYS,
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT7622_POWER_DOMAIN_HIF0] = {
-               .name = "hif0",
-               .sta_mask = PWR_STATUS_HIF0,
-               .ctl_offs = SPM_HIF0_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-               .clk_id = {CLK_HIFSEL},
-               .bus_prot_mask = MT7622_TOP_AXI_PROT_EN_HIF0,
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT7622_POWER_DOMAIN_HIF1] = {
-               .name = "hif1",
-               .sta_mask = PWR_STATUS_HIF1,
-               .ctl_offs = SPM_HIF1_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-               .clk_id = {CLK_HIFSEL},
-               .bus_prot_mask = MT7622_TOP_AXI_PROT_EN_HIF1,
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT7622_POWER_DOMAIN_WB] = {
-               .name = "wb",
-               .sta_mask = PWR_STATUS_WB,
-               .ctl_offs = SPM_WB_PWR_CON,
-               .sram_pdn_bits = 0,
-               .sram_pdn_ack_bits = 0,
-               .clk_id = {CLK_NONE},
-               .bus_prot_mask = MT7622_TOP_AXI_PROT_EN_WB,
-               .caps = MTK_SCPD_ACTIVE_WAKEUP | MTK_SCPD_FWAIT_SRAM,
-       },
-};
-
-/*
- * MT7623A power domain support
- */
-
-static const struct scp_domain_data scp_domain_data_mt7623a[] = {
-       [MT7623A_POWER_DOMAIN_CONN] = {
-               .name = "conn",
-               .sta_mask = PWR_STATUS_CONN,
-               .ctl_offs = SPM_CONN_PWR_CON,
-               .bus_prot_mask = MT2701_TOP_AXI_PROT_EN_CONN_M |
-                                MT2701_TOP_AXI_PROT_EN_CONN_S,
-               .clk_id = {CLK_NONE},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT7623A_POWER_DOMAIN_ETH] = {
-               .name = "eth",
-               .sta_mask = PWR_STATUS_ETH,
-               .ctl_offs = SPM_ETH_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-               .clk_id = {CLK_ETHIF},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT7623A_POWER_DOMAIN_HIF] = {
-               .name = "hif",
-               .sta_mask = PWR_STATUS_HIF,
-               .ctl_offs = SPM_HIF_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-               .clk_id = {CLK_ETHIF},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT7623A_POWER_DOMAIN_IFR_MSC] = {
-               .name = "ifr_msc",
-               .sta_mask = PWR_STATUS_IFR_MSC,
-               .ctl_offs = SPM_IFR_MSC_PWR_CON,
-               .clk_id = {CLK_NONE},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-};
-
-/*
- * MT8173 power domain support
- */
-
-static const struct scp_domain_data scp_domain_data_mt8173[] = {
-       [MT8173_POWER_DOMAIN_VDEC] = {
-               .name = "vdec",
-               .sta_mask = PWR_STATUS_VDEC,
-               .ctl_offs = SPM_VDE_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .clk_id = {CLK_MM},
-       },
-       [MT8173_POWER_DOMAIN_VENC] = {
-               .name = "venc",
-               .sta_mask = PWR_STATUS_VENC,
-               .ctl_offs = SPM_VEN_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-               .clk_id = {CLK_MM, CLK_VENC},
-       },
-       [MT8173_POWER_DOMAIN_ISP] = {
-               .name = "isp",
-               .sta_mask = PWR_STATUS_ISP,
-               .ctl_offs = SPM_ISP_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(13, 12),
-               .clk_id = {CLK_MM},
-       },
-       [MT8173_POWER_DOMAIN_MM] = {
-               .name = "mm",
-               .sta_mask = PWR_STATUS_DISP,
-               .ctl_offs = SPM_DIS_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(12, 12),
-               .clk_id = {CLK_MM},
-               .bus_prot_mask = MT8173_TOP_AXI_PROT_EN_MM_M0 |
-                       MT8173_TOP_AXI_PROT_EN_MM_M1,
-       },
-       [MT8173_POWER_DOMAIN_VENC_LT] = {
-               .name = "venc_lt",
-               .sta_mask = PWR_STATUS_VENC_LT,
-               .ctl_offs = SPM_VEN2_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-               .clk_id = {CLK_MM, CLK_VENC_LT},
-       },
-       [MT8173_POWER_DOMAIN_AUDIO] = {
-               .name = "audio",
-               .sta_mask = PWR_STATUS_AUDIO,
-               .ctl_offs = SPM_AUDIO_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-               .clk_id = {CLK_NONE},
-       },
-       [MT8173_POWER_DOMAIN_USB] = {
-               .name = "usb",
-               .sta_mask = PWR_STATUS_USB,
-               .ctl_offs = SPM_USB_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(15, 12),
-               .clk_id = {CLK_NONE},
-               .caps = MTK_SCPD_ACTIVE_WAKEUP,
-       },
-       [MT8173_POWER_DOMAIN_MFG_ASYNC] = {
-               .name = "mfg_async",
-               .sta_mask = PWR_STATUS_MFG_ASYNC,
-               .ctl_offs = SPM_MFG_ASYNC_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = 0,
-               .clk_id = {CLK_MFG},
-       },
-       [MT8173_POWER_DOMAIN_MFG_2D] = {
-               .name = "mfg_2d",
-               .sta_mask = PWR_STATUS_MFG_2D,
-               .ctl_offs = SPM_MFG_2D_PWR_CON,
-               .sram_pdn_bits = GENMASK(11, 8),
-               .sram_pdn_ack_bits = GENMASK(13, 12),
-               .clk_id = {CLK_NONE},
-       },
-       [MT8173_POWER_DOMAIN_MFG] = {
-               .name = "mfg",
-               .sta_mask = PWR_STATUS_MFG,
-               .ctl_offs = SPM_MFG_PWR_CON,
-               .sram_pdn_bits = GENMASK(13, 8),
-               .sram_pdn_ack_bits = GENMASK(21, 16),
-               .clk_id = {CLK_NONE},
-               .bus_prot_mask = MT8173_TOP_AXI_PROT_EN_MFG_S |
-                       MT8173_TOP_AXI_PROT_EN_MFG_M0 |
-                       MT8173_TOP_AXI_PROT_EN_MFG_M1 |
-                       MT8173_TOP_AXI_PROT_EN_MFG_SNOOP_OUT,
-       },
-};
-
-static const struct scp_subdomain scp_subdomain_mt8173[] = {
-       {MT8173_POWER_DOMAIN_MFG_ASYNC, MT8173_POWER_DOMAIN_MFG_2D},
-       {MT8173_POWER_DOMAIN_MFG_2D, MT8173_POWER_DOMAIN_MFG},
-};
-
-static const struct scp_soc_data mt2701_data = {
-       .domains = scp_domain_data_mt2701,
-       .num_domains = ARRAY_SIZE(scp_domain_data_mt2701),
-       .regs = {
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND
-       },
-       .bus_prot_reg_update = true,
-};
-
-static const struct scp_soc_data mt2712_data = {
-       .domains = scp_domain_data_mt2712,
-       .num_domains = ARRAY_SIZE(scp_domain_data_mt2712),
-       .subdomains = scp_subdomain_mt2712,
-       .num_subdomains = ARRAY_SIZE(scp_subdomain_mt2712),
-       .regs = {
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND
-       },
-       .bus_prot_reg_update = false,
-};
-
-static const struct scp_soc_data mt6797_data = {
-       .domains = scp_domain_data_mt6797,
-       .num_domains = ARRAY_SIZE(scp_domain_data_mt6797),
-       .subdomains = scp_subdomain_mt6797,
-       .num_subdomains = ARRAY_SIZE(scp_subdomain_mt6797),
-       .regs = {
-               .pwr_sta_offs = SPM_PWR_STATUS_MT6797,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND_MT6797
-       },
-       .bus_prot_reg_update = true,
-};
-
-static const struct scp_soc_data mt7622_data = {
-       .domains = scp_domain_data_mt7622,
-       .num_domains = ARRAY_SIZE(scp_domain_data_mt7622),
-       .regs = {
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND
-       },
-       .bus_prot_reg_update = true,
-};
-
-static const struct scp_soc_data mt7623a_data = {
-       .domains = scp_domain_data_mt7623a,
-       .num_domains = ARRAY_SIZE(scp_domain_data_mt7623a),
-       .regs = {
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND
-       },
-       .bus_prot_reg_update = true,
-};
-
-static const struct scp_soc_data mt8173_data = {
-       .domains = scp_domain_data_mt8173,
-       .num_domains = ARRAY_SIZE(scp_domain_data_mt8173),
-       .subdomains = scp_subdomain_mt8173,
-       .num_subdomains = ARRAY_SIZE(scp_subdomain_mt8173),
-       .regs = {
-               .pwr_sta_offs = SPM_PWR_STATUS,
-               .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND
-       },
-       .bus_prot_reg_update = true,
-};
-
-/*
- * scpsys driver init
- */
-
-static const struct of_device_id of_scpsys_match_tbl[] = {
-       {
-               .compatible = "mediatek,mt2701-scpsys",
-               .data = &mt2701_data,
-       }, {
-               .compatible = "mediatek,mt2712-scpsys",
-               .data = &mt2712_data,
-       }, {
-               .compatible = "mediatek,mt6797-scpsys",
-               .data = &mt6797_data,
-       }, {
-               .compatible = "mediatek,mt7622-scpsys",
-               .data = &mt7622_data,
-       }, {
-               .compatible = "mediatek,mt7623a-scpsys",
-               .data = &mt7623a_data,
-       }, {
-               .compatible = "mediatek,mt8173-scpsys",
-               .data = &mt8173_data,
-       }, {
-               /* sentinel */
-       }
-};
-
-static int scpsys_probe(struct platform_device *pdev)
-{
-       const struct scp_subdomain *sd;
-       const struct scp_soc_data *soc;
-       struct scp *scp;
-       struct genpd_onecell_data *pd_data;
-       int i, ret;
-
-       soc = of_device_get_match_data(&pdev->dev);
-
-       scp = init_scp(pdev, soc->domains, soc->num_domains, &soc->regs,
-                       soc->bus_prot_reg_update);
-       if (IS_ERR(scp))
-               return PTR_ERR(scp);
-
-       mtk_register_power_domains(pdev, scp, soc->num_domains);
-
-       pd_data = &scp->pd_data;
-
-       for (i = 0, sd = soc->subdomains; i < soc->num_subdomains; i++, sd++) {
-               ret = pm_genpd_add_subdomain(pd_data->domains[sd->origin],
-                                            pd_data->domains[sd->subdomain]);
-               if (ret && IS_ENABLED(CONFIG_PM))
-                       dev_err(&pdev->dev, "Failed to add subdomain: %d\n",
-                               ret);
-       }
-
-       return 0;
-}
-
-static struct platform_driver scpsys_drv = {
-       .probe = scpsys_probe,
-       .driver = {
-               .name = "mtk-scpsys",
-               .suppress_bind_attrs = true,
-               .owner = THIS_MODULE,
-               .of_match_table = of_scpsys_match_tbl,
-       },
-};
-builtin_platform_driver(scpsys_drv);