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