root/drivers/pmdomain/mediatek/mt8196-pm-domains.h
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2025 Collabora Ltd
 *                    AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
 */

#ifndef __SOC_MEDIATEK_MT8196_PM_DOMAINS_H
#define __SOC_MEDIATEK_MT8196_PM_DOMAINS_H

#include "mtk-pm-domains.h"
#include <dt-bindings/power/mediatek,mt8196-power.h>

/*
 * MT8196 and MT6991 power domain support
 */

/* INFRA TOP_AXI registers */
#define MT8196_TOP_AXI_PROT_EN_SET              0x4
#define MT8196_TOP_AXI_PROT_EN_CLR              0x8
#define MT8196_TOP_AXI_PROT_EN_STA              0xc
 #define MT8196_TOP_AXI_PROT_EN_SLEEP0_MD       BIT(29)

#define MT8196_TOP_AXI_PROT_EN_1_SET            0x24
#define MT8196_TOP_AXI_PROT_EN_1_CLR            0x28
#define MT8196_TOP_AXI_PROT_EN_1_STA            0x2c
 #define MT8196_TOP_AXI_PROT_EN_1_SLEEP1_MD     BIT(0)

/* SPM BUS_PROTECT registers */
#define MT8196_SPM_BUS_PROTECT_CON_SET          0xdc
#define MT8196_SPM_BUS_PROTECT_CON_CLR          0xe0
#define MT8196_SPM_BUS_PROTECT_RDY              0x208
 #define MT8196_SPM_PROT_EN_BUS_CONN            BIT(1)
 #define MT8196_SPM_PROT_EN_BUS_SSUSB_DP_PHY_P0 BIT(6)
 #define MT8196_SPM_PROT_EN_BUS_SSUSB_P0        BIT(7)
 #define MT8196_SPM_PROT_EN_BUS_SSUSB_P1        BIT(8)
 #define MT8196_SPM_PROT_EN_BUS_SSUSB_P23       BIT(9)
 #define MT8196_SPM_PROT_EN_BUS_SSUSB_PHY_P2    BIT(10)
 #define MT8196_SPM_PROT_EN_BUS_PEXTP_MAC0      BIT(13)
 #define MT8196_SPM_PROT_EN_BUS_PEXTP_MAC1      BIT(14)
 #define MT8196_SPM_PROT_EN_BUS_PEXTP_MAC2      BIT(15)
 #define MT8196_SPM_PROT_EN_BUS_PEXTP_PHY0      BIT(16)
 #define MT8196_SPM_PROT_EN_BUS_PEXTP_PHY1      BIT(17)
 #define MT8196_SPM_PROT_EN_BUS_PEXTP_PHY2      BIT(18)
 #define MT8196_SPM_PROT_EN_BUS_AUDIO           BIT(19)
 #define MT8196_SPM_PROT_EN_BUS_ADSP_TOP        BIT(21)
 #define MT8196_SPM_PROT_EN_BUS_ADSP_INFRA      BIT(22)
 #define MT8196_SPM_PROT_EN_BUS_ADSP_AO         BIT(23)
 #define MT8196_SPM_PROT_EN_BUS_MM_PROC         BIT(24)

/* PWR_CON registers */
#define MT8196_PWR_ACK                          BIT(30)
#define MT8196_PWR_ACK_2ND                      BIT(31)

static enum scpsys_bus_prot_block scpsys_bus_prot_blocks_mt8196[] = {
        BUS_PROT_BLOCK_INFRA, BUS_PROT_BLOCK_SPM
};

static const struct scpsys_domain_data scpsys_domain_data_mt8196[] = {
        [MT8196_POWER_DOMAIN_MD] = {
                .name = "md",
                .sta_mask = MT8196_PWR_ACK,
                .sta2nd_mask = MT8196_PWR_ACK_2ND,
                .ctl_offs = 0xe00,
                .pwr_sta_offs = 0xe00,
                .pwr_sta2nd_offs = 0xe00,
                .ext_buck_iso_offs = 0xefc,
                .ext_buck_iso_mask = GENMASK(1, 0),
                .bp_cfg = {
                        BUS_PROT_WR_IGN(INFRA, MT8196_TOP_AXI_PROT_EN_SLEEP0_MD,
                                        MT8196_TOP_AXI_PROT_EN_SET,
                                        MT8196_TOP_AXI_PROT_EN_CLR,
                                        MT8196_TOP_AXI_PROT_EN_STA),
                        BUS_PROT_WR_IGN(INFRA, MT8196_TOP_AXI_PROT_EN_1_SLEEP1_MD,
                                        MT8196_TOP_AXI_PROT_EN_1_SET,
                                        MT8196_TOP_AXI_PROT_EN_1_CLR,
                                        MT8196_TOP_AXI_PROT_EN_1_STA),
                },
                .caps = MTK_SCPD_MODEM_PWRSEQ | MTK_SCPD_EXT_BUCK_ISO |
                        MTK_SCPD_SKIP_RESET_B | MTK_SCPD_KEEP_DEFAULT_OFF,
        },
        [MT8196_POWER_DOMAIN_CONN] = {
                .name = "conn",
                .sta_mask = MT8196_PWR_ACK,
                .sta2nd_mask = MT8196_PWR_ACK_2ND,
                .ctl_offs = 0xe04,
                .pwr_sta_offs = 0xe04,
                .pwr_sta2nd_offs = 0xe04,
                .bp_cfg = {
                        BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_CONN,
                                        MT8196_SPM_BUS_PROTECT_CON_SET,
                                        MT8196_SPM_BUS_PROTECT_CON_CLR,
                                        MT8196_SPM_BUS_PROTECT_RDY),
                },
                .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
                .rtff_type = SCPSYS_RTFF_TYPE_GENERIC,
        },
        [MT8196_POWER_DOMAIN_SSUSB_DP_PHY_P0] = {
                .name = "ssusb-dp-phy-p0",
                .sta_mask = MT8196_PWR_ACK,
                .sta2nd_mask = MT8196_PWR_ACK_2ND,
                .ctl_offs = 0xe18,
                .pwr_sta_offs = 0xe18,
                .pwr_sta2nd_offs = 0xe18,
                .bp_cfg = {
                        BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_SSUSB_DP_PHY_P0,
                                        MT8196_SPM_BUS_PROTECT_CON_SET,
                                        MT8196_SPM_BUS_PROTECT_CON_CLR,
                                        MT8196_SPM_BUS_PROTECT_RDY),
                },
                .caps = MTK_SCPD_ALWAYS_ON,
                .rtff_type = SCPSYS_RTFF_TYPE_GENERIC,
        },
        [MT8196_POWER_DOMAIN_SSUSB_P0] = {
                .name = "ssusb-p0",
                .sta_mask = MT8196_PWR_ACK,
                .sta2nd_mask = MT8196_PWR_ACK_2ND,
                .ctl_offs = 0xe1c,
                .pwr_sta_offs = 0xe1c,
                .pwr_sta2nd_offs = 0xe1c,
                .sram_pdn_bits = BIT(8),
                .sram_pdn_ack_bits = BIT(12),
                .bp_cfg = {
                        BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_SSUSB_P0,
                                        MT8196_SPM_BUS_PROTECT_CON_SET,
                                        MT8196_SPM_BUS_PROTECT_CON_CLR,
                                        MT8196_SPM_BUS_PROTECT_RDY),
                },
                .caps = MTK_SCPD_ALWAYS_ON,
                .rtff_type = SCPSYS_RTFF_TYPE_GENERIC,
        },
        [MT8196_POWER_DOMAIN_SSUSB_P1] = {
                .name = "ssusb-p1",
                .sta_mask = MT8196_PWR_ACK,
                .sta2nd_mask = MT8196_PWR_ACK_2ND,
                .ctl_offs = 0xe20,
                .pwr_sta_offs = 0xe20,
                .pwr_sta2nd_offs = 0xe20,
                .sram_pdn_bits = BIT(8),
                .sram_pdn_ack_bits = BIT(12),
                .bp_cfg = {
                        BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_SSUSB_P1,
                                        MT8196_SPM_BUS_PROTECT_CON_SET,
                                        MT8196_SPM_BUS_PROTECT_CON_CLR,
                                        MT8196_SPM_BUS_PROTECT_RDY),
                },
                .caps = MTK_SCPD_ALWAYS_ON,
                .rtff_type = SCPSYS_RTFF_TYPE_GENERIC,
        },
        [MT8196_POWER_DOMAIN_SSUSB_P23] = {
                .name = "ssusb-p23",
                .sta_mask = MT8196_PWR_ACK,
                .sta2nd_mask = MT8196_PWR_ACK_2ND,
                .ctl_offs = 0xe24,
                .pwr_sta_offs = 0xe24,
                .pwr_sta2nd_offs = 0xe24,
                .bp_cfg = {
                        BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_SSUSB_P23,
                                        MT8196_SPM_BUS_PROTECT_CON_SET,
                                        MT8196_SPM_BUS_PROTECT_CON_CLR,
                                        MT8196_SPM_BUS_PROTECT_RDY),
                },
                .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
                .rtff_type = SCPSYS_RTFF_TYPE_GENERIC,
        },
        [MT8196_POWER_DOMAIN_SSUSB_PHY_P2] = {
                .name = "ssusb-phy-p2",
                .sta_mask = MT8196_PWR_ACK,
                .sta2nd_mask = MT8196_PWR_ACK_2ND,
                .ctl_offs = 0xe28,
                .pwr_sta_offs = 0xe28,
                .pwr_sta2nd_offs = 0xe28,
                .sram_pdn_bits = BIT(8),
                .sram_pdn_ack_bits = BIT(12),
                .bp_cfg = {
                        BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_SSUSB_PHY_P2,
                                        MT8196_SPM_BUS_PROTECT_CON_SET,
                                        MT8196_SPM_BUS_PROTECT_CON_CLR,
                                        MT8196_SPM_BUS_PROTECT_RDY),
                },
                .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
                .rtff_type = SCPSYS_RTFF_TYPE_GENERIC,
        },
        [MT8196_POWER_DOMAIN_PEXTP_MAC0] = {
                .name = "pextp-mac0",
                .sta_mask = MT8196_PWR_ACK,
                .sta2nd_mask = MT8196_PWR_ACK_2ND,
                .ctl_offs = 0xe34,
                .pwr_sta_offs = 0xe34,
                .pwr_sta2nd_offs = 0xe34,
                .sram_pdn_bits = BIT(8),
                .sram_pdn_ack_bits = BIT(12),
                .bp_cfg = {
                        BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_PEXTP_MAC0,
                                        MT8196_SPM_BUS_PROTECT_CON_SET,
                                        MT8196_SPM_BUS_PROTECT_CON_CLR,
                                        MT8196_SPM_BUS_PROTECT_RDY),
                },
                .rtff_type = SCPSYS_RTFF_TYPE_PCIE_PHY,
        },
        [MT8196_POWER_DOMAIN_PEXTP_MAC1] = {
                .name = "pextp-mac1",
                .sta_mask = MT8196_PWR_ACK,
                .sta2nd_mask = MT8196_PWR_ACK_2ND,
                .ctl_offs = 0xe38,
                .pwr_sta_offs = 0xe38,
                .pwr_sta2nd_offs = 0xe38,
                .sram_pdn_bits = BIT(8),
                .sram_pdn_ack_bits = BIT(12),
                .bp_cfg = {
                        BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_PEXTP_MAC1,
                                        MT8196_SPM_BUS_PROTECT_CON_SET,
                                        MT8196_SPM_BUS_PROTECT_CON_CLR,
                                        MT8196_SPM_BUS_PROTECT_RDY),
                },
                .rtff_type = SCPSYS_RTFF_TYPE_PCIE_PHY,
        },
        [MT8196_POWER_DOMAIN_PEXTP_MAC2] = {
                .name = "pextp-mac2",
                .sta_mask = MT8196_PWR_ACK,
                .sta2nd_mask = MT8196_PWR_ACK_2ND,
                .ctl_offs = 0xe3c,
                .pwr_sta_offs = 0xe3c,
                .pwr_sta2nd_offs = 0xe3c,
                .sram_pdn_bits = BIT(8),
                .sram_pdn_ack_bits = BIT(12),
                .bp_cfg = {
                        BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_PEXTP_MAC2,
                                        MT8196_SPM_BUS_PROTECT_CON_SET,
                                        MT8196_SPM_BUS_PROTECT_CON_CLR,
                                        MT8196_SPM_BUS_PROTECT_RDY),
                },
                .rtff_type = SCPSYS_RTFF_TYPE_PCIE_PHY,
        },
        [MT8196_POWER_DOMAIN_PEXTP_PHY0] = {
                .name = "pextp-phy0",
                .sta_mask = MT8196_PWR_ACK,
                .sta2nd_mask = MT8196_PWR_ACK_2ND,
                .ctl_offs = 0xe40,
                .pwr_sta_offs = 0xe40,
                .pwr_sta2nd_offs = 0xe40,
                .bp_cfg = {
                        BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_PEXTP_PHY0,
                                        MT8196_SPM_BUS_PROTECT_CON_SET,
                                        MT8196_SPM_BUS_PROTECT_CON_CLR,
                                        MT8196_SPM_BUS_PROTECT_RDY),
                },
                .rtff_type = SCPSYS_RTFF_TYPE_PCIE_PHY,
        },
        [MT8196_POWER_DOMAIN_PEXTP_PHY1] = {
                .name = "pextp-phy1",
                .sta_mask = MT8196_PWR_ACK,
                .sta2nd_mask = MT8196_PWR_ACK_2ND,
                .ctl_offs = 0xe44,
                .pwr_sta_offs = 0xe44,
                .pwr_sta2nd_offs = 0xe44,
                .bp_cfg = {
                        BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_PEXTP_PHY1,
                                        MT8196_SPM_BUS_PROTECT_CON_SET,
                                        MT8196_SPM_BUS_PROTECT_CON_CLR,
                                        MT8196_SPM_BUS_PROTECT_RDY),
                },
                .rtff_type = SCPSYS_RTFF_TYPE_PCIE_PHY,
        },
        [MT8196_POWER_DOMAIN_PEXTP_PHY2] = {
                .name = "pextp-phy2",
                .sta_mask = MT8196_PWR_ACK,
                .sta2nd_mask = MT8196_PWR_ACK_2ND,
                .ctl_offs = 0xe48,
                .pwr_sta_offs = 0xe48,
                .pwr_sta2nd_offs = 0xe48,
                .bp_cfg = {
                        BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_PEXTP_PHY2,
                                        MT8196_SPM_BUS_PROTECT_CON_SET,
                                        MT8196_SPM_BUS_PROTECT_CON_CLR,
                                        MT8196_SPM_BUS_PROTECT_RDY),
                },
                .rtff_type = SCPSYS_RTFF_TYPE_PCIE_PHY,
        },
        [MT8196_POWER_DOMAIN_AUDIO] = {
                .name = "audio",
                .sta_mask = MT8196_PWR_ACK,
                .sta2nd_mask = MT8196_PWR_ACK_2ND,
                .ctl_offs = 0xe4c,
                .pwr_sta_offs = 0xe4c,
                .pwr_sta2nd_offs = 0xe4c,
                .sram_pdn_bits = BIT(8),
                .sram_pdn_ack_bits = BIT(12),
                .bp_cfg = {
                        BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_AUDIO,
                                        MT8196_SPM_BUS_PROTECT_CON_SET,
                                        MT8196_SPM_BUS_PROTECT_CON_CLR,
                                        MT8196_SPM_BUS_PROTECT_RDY),
                },
                .rtff_type = SCPSYS_RTFF_TYPE_GENERIC,
        },
        [MT8196_POWER_DOMAIN_ADSP_TOP_DORMANT] = {
                .name = "adsp-top-dormant",
                .sta_mask = MT8196_PWR_ACK,
                .sta2nd_mask = MT8196_PWR_ACK_2ND,
                .ctl_offs = 0xe54,
                .pwr_sta_offs = 0xe54,
                .pwr_sta2nd_offs = 0xe54,
                /* Note: This is not managing powerdown (pdn), but sleep instead (slp) */
                .sram_pdn_bits = BIT(9),
                .sram_pdn_ack_bits = BIT(13),
                .bp_cfg = {
                        BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_ADSP_TOP,
                                        MT8196_SPM_BUS_PROTECT_CON_SET,
                                        MT8196_SPM_BUS_PROTECT_CON_CLR,
                                        MT8196_SPM_BUS_PROTECT_RDY),
                },
                .caps = MTK_SCPD_SRAM_ISO | MTK_SCPD_SRAM_PDN_INVERTED,
        },
        [MT8196_POWER_DOMAIN_ADSP_INFRA] = {
                .name = "adsp-infra",
                .sta_mask = MT8196_PWR_ACK,
                .sta2nd_mask = MT8196_PWR_ACK_2ND,
                .ctl_offs = 0xe58,
                .pwr_sta_offs = 0xe58,
                .pwr_sta2nd_offs = 0xe58,
                .bp_cfg = {
                        BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_ADSP_INFRA,
                                        MT8196_SPM_BUS_PROTECT_CON_SET,
                                        MT8196_SPM_BUS_PROTECT_CON_CLR,
                                        MT8196_SPM_BUS_PROTECT_RDY),
                },
                .caps = MTK_SCPD_ALWAYS_ON,
                .rtff_type = SCPSYS_RTFF_TYPE_GENERIC,
        },
        [MT8196_POWER_DOMAIN_ADSP_AO] = {
                .name = "adsp-ao",
                .sta_mask = MT8196_PWR_ACK,
                .sta2nd_mask = MT8196_PWR_ACK_2ND,
                .ctl_offs = 0xe5c,
                .pwr_sta_offs = 0xe5c,
                .pwr_sta2nd_offs = 0xe5c,
                .bp_cfg = {
                        BUS_PROT_WR_IGN(SPM, MT8196_SPM_PROT_EN_BUS_ADSP_AO,
                                        MT8196_SPM_BUS_PROTECT_CON_SET,
                                        MT8196_SPM_BUS_PROTECT_CON_CLR,
                                        MT8196_SPM_BUS_PROTECT_RDY),
                },
                .caps = MTK_SCPD_ALWAYS_ON,
                .rtff_type = SCPSYS_RTFF_TYPE_GENERIC,
        },
};

static const struct scpsys_hwv_domain_data scpsys_hwv_domain_data_mt8196[] = {
        [MT8196_POWER_DOMAIN_MM_PROC_DORMANT] = {
                .name = "mm-proc-dormant",
                .set = 0x0218,
                .clr = 0x021c,
                .done = 0x141c,
                .en = 0x1410,
                .set_sta = 0x146c,
                .clr_sta = 0x1470,
                .setclr_bit = 0,
                .caps = MTK_SCPD_ALWAYS_ON,
        },
        [MT8196_POWER_DOMAIN_SSR] = {
                .name = "ssrsys",
                .set = 0x0218,
                .clr = 0x021c,
                .done = 0x141c,
                .en = 0x1410,
                .set_sta = 0x146c,
                .clr_sta = 0x1470,
                .setclr_bit = 1,
        },
};

static const struct scpsys_hwv_domain_data hfrpsys_hwv_domain_data_mt8196[] = {
        [MT8196_POWER_DOMAIN_VDE0] = {
                .name = "vde0",
                .set = 0x0218,
                .clr = 0x021C,
                .done = 0x141C,
                .en = 0x1410,
                .set_sta = 0x146C,
                .clr_sta = 0x1470,
                .setclr_bit = 7,
        },
        [MT8196_POWER_DOMAIN_VDE1] = {
                .name = "vde1",
                .set = 0x0218,
                .clr = 0x021C,
                .done = 0x141C,
                .en = 0x1410,
                .set_sta = 0x146C,
                .clr_sta = 0x1470,
                .setclr_bit = 8,
        },
        [MT8196_POWER_DOMAIN_VDE_VCORE0] = {
                .name = "vde-vcore0",
                .set = 0x0218,
                .clr = 0x021C,
                .done = 0x141C,
                .en = 0x1410,
                .set_sta = 0x146C,
                .clr_sta = 0x1470,
                .setclr_bit = 9,
        },
        [MT8196_POWER_DOMAIN_VEN0] = {
                .name = "ven0",
                .set = 0x0218,
                .clr = 0x021C,
                .done = 0x141C,
                .en = 0x1410,
                .set_sta = 0x146C,
                .clr_sta = 0x1470,
                .setclr_bit = 10,
        },
        [MT8196_POWER_DOMAIN_VEN1] = {
                .name = "ven1",
                .set = 0x0218,
                .clr = 0x021C,
                .done = 0x141C,
                .en = 0x1410,
                .set_sta = 0x146C,
                .clr_sta = 0x1470,
                .setclr_bit = 11,
        },
        [MT8196_POWER_DOMAIN_VEN2] = {
                .name = "ven2",
                .set = 0x0218,
                .clr = 0x021C,
                .done = 0x141C,
                .en = 0x1410,
                .set_sta = 0x146C,
                .clr_sta = 0x1470,
                .setclr_bit = 12,
        },
        [MT8196_POWER_DOMAIN_DISP_VCORE] = {
                .name = "disp-vcore",
                .set = 0x0218,
                .clr = 0x021C,
                .done = 0x141C,
                .en = 0x1410,
                .set_sta = 0x146C,
                .clr_sta = 0x1470,
                .setclr_bit = 24,
        },
        [MT8196_POWER_DOMAIN_DIS0_DORMANT] = {
                .name = "dis0-dormant",
                .set = 0x0218,
                .clr = 0x021C,
                .done = 0x141C,
                .en = 0x1410,
                .set_sta = 0x146C,
                .clr_sta = 0x1470,
                .setclr_bit = 25,
        },
        [MT8196_POWER_DOMAIN_DIS1_DORMANT] = {
                .name = "dis1-dormant",
                .set = 0x0218,
                .clr = 0x021C,
                .done = 0x141C,
                .en = 0x1410,
                .set_sta = 0x146C,
                .clr_sta = 0x1470,
                .setclr_bit = 26,
        },
        [MT8196_POWER_DOMAIN_OVL0_DORMANT] = {
                .name = "ovl0-dormant",
                .set = 0x0218,
                .clr = 0x021C,
                .done = 0x141C,
                .en = 0x1410,
                .set_sta = 0x146C,
                .clr_sta = 0x1470,
                .setclr_bit = 27,
        },
        [MT8196_POWER_DOMAIN_OVL1_DORMANT] = {
                .name = "ovl1-dormant",
                .set = 0x0218,
                .clr = 0x021C,
                .done = 0x141C,
                .en = 0x1410,
                .set_sta = 0x146C,
                .clr_sta = 0x1470,
                .setclr_bit = 28,
        },
        [MT8196_POWER_DOMAIN_DISP_EDPTX_DORMANT] = {
                .name = "disp-edptx-dormant",
                .set = 0x0218,
                .clr = 0x021C,
                .done = 0x141C,
                .en = 0x1410,
                .set_sta = 0x146C,
                .clr_sta = 0x1470,
                .setclr_bit = 29,
        },
        [MT8196_POWER_DOMAIN_DISP_DPTX_DORMANT] = {
                .name = "disp-dptx-dormant",
                .set = 0x0218,
                .clr = 0x021C,
                .done = 0x141C,
                .en = 0x1410,
                .set_sta = 0x146C,
                .clr_sta = 0x1470,
                .setclr_bit = 30,
        },
        [MT8196_POWER_DOMAIN_MML0_SHUTDOWN] = {
                .name = "mml0-shutdown",
                .set = 0x0218,
                .clr = 0x021C,
                .done = 0x141C,
                .en = 0x1410,
                .set_sta = 0x146C,
                .clr_sta = 0x1470,
                .setclr_bit = 31,
        },
        [MT8196_POWER_DOMAIN_MML1_SHUTDOWN] = {
                .name = "mml1-shutdown",
                .set = 0x0220,
                .clr = 0x0224,
                .done = 0x142C,
                .en = 0x1420,
                .set_sta = 0x1474,
                .clr_sta = 0x1478,
                .setclr_bit = 0,
        },
        [MT8196_POWER_DOMAIN_MM_INFRA0] = {
                .name = "mm-infra0",
                .set = 0x0220,
                .clr = 0x0224,
                .done = 0x142C,
                .en = 0x1420,
                .set_sta = 0x1474,
                .clr_sta = 0x1478,
                .setclr_bit = 1,
        },
        [MT8196_POWER_DOMAIN_MM_INFRA1] = {
                .name = "mm-infra1",
                .set = 0x0220,
                .clr = 0x0224,
                .done = 0x142C,
                .en = 0x1420,
                .set_sta = 0x1474,
                .clr_sta = 0x1478,
                .setclr_bit = 2,
        },
        [MT8196_POWER_DOMAIN_MM_INFRA_AO] = {
                .name = "mm-infra-ao",
                .set = 0x0220,
                .clr = 0x0224,
                .done = 0x142C,
                .en = 0x1420,
                .set_sta = 0x1474,
                .clr_sta = 0x1478,
                .setclr_bit = 3,
        },
        [MT8196_POWER_DOMAIN_CSI_BS_RX] = {
                .name = "csi-bs-rx",
                .set = 0x0220,
                .clr = 0x0224,
                .done = 0x142C,
                .en = 0x1420,
                .set_sta = 0x1474,
                .clr_sta = 0x1478,
                .setclr_bit = 5,
        },
        [MT8196_POWER_DOMAIN_CSI_LS_RX] = {
                .name = "csi-ls-rx",
                .set = 0x0220,
                .clr = 0x0224,
                .done = 0x142C,
                .en = 0x1420,
                .set_sta = 0x1474,
                .clr_sta = 0x1478,
                .setclr_bit = 6,
        },
        [MT8196_POWER_DOMAIN_DSI_PHY0] = {
                .name = "dsi-phy0",
                .set = 0x0220,
                .clr = 0x0224,
                .done = 0x142C,
                .en = 0x1420,
                .set_sta = 0x1474,
                .clr_sta = 0x1478,
                .setclr_bit = 7,
        },
        [MT8196_POWER_DOMAIN_DSI_PHY1] = {
                .name = "dsi-phy1",
                .set = 0x0220,
                .clr = 0x0224,
                .done = 0x142C,
                .en = 0x1420,
                .set_sta = 0x1474,
                .clr_sta = 0x1478,
                .setclr_bit = 8,
        },
        [MT8196_POWER_DOMAIN_DSI_PHY2] = {
                .name = "dsi-phy2",
                .set = 0x0220,
                .clr = 0x0224,
                .done = 0x142C,
                .en = 0x1420,
                .set_sta = 0x1474,
                .clr_sta = 0x1478,
                .setclr_bit = 9,
        },
};

static const struct scpsys_soc_data mt8196_scpsys_data = {
        .domains_data = scpsys_domain_data_mt8196,
        .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8196),
        .bus_prot_blocks = scpsys_bus_prot_blocks_mt8196,
        .num_bus_prot_blocks = ARRAY_SIZE(scpsys_bus_prot_blocks_mt8196),
        .type = SCPSYS_MTCMOS_TYPE_DIRECT_CTL,
};

static const struct scpsys_soc_data mt8196_scpsys_hwv_data = {
        .hwv_domains_data = scpsys_hwv_domain_data_mt8196,
        .num_hwv_domains = ARRAY_SIZE(scpsys_hwv_domain_data_mt8196),
        .type = SCPSYS_MTCMOS_TYPE_HW_VOTER,
};

static const struct scpsys_soc_data mt8196_hfrpsys_hwv_data = {
        .hwv_domains_data = hfrpsys_hwv_domain_data_mt8196,
        .num_hwv_domains = ARRAY_SIZE(hfrpsys_hwv_domain_data_mt8196),
        .type = SCPSYS_MTCMOS_TYPE_HW_VOTER,
};

#endif /* __SOC_MEDIATEK_MT8196_PM_DOMAINS_H */