1*d31feed7SXi Pardee // SPDX-License-Identifier: GPL-2.0 2*d31feed7SXi Pardee /* 3*d31feed7SXi Pardee * This file contains platform specific structure definitions 4*d31feed7SXi Pardee * and init function used by Panther Lake PCH. 5*d31feed7SXi Pardee * 6*d31feed7SXi Pardee * Copyright (c) 2025, Intel Corporation. 7*d31feed7SXi Pardee */ 8*d31feed7SXi Pardee 9*d31feed7SXi Pardee #include <linux/pci.h> 10*d31feed7SXi Pardee 11*d31feed7SXi Pardee #include "core.h" 12*d31feed7SXi Pardee 13*d31feed7SXi Pardee static const struct pmc_bit_map ptl_pcdp_pfear_map[] = { 14*d31feed7SXi Pardee {"PMC_0", BIT(0)}, 15*d31feed7SXi Pardee {"FUSE_OSSE", BIT(1)}, 16*d31feed7SXi Pardee {"ESPISPI", BIT(2)}, 17*d31feed7SXi Pardee {"XHCI", BIT(3)}, 18*d31feed7SXi Pardee {"SPA", BIT(4)}, 19*d31feed7SXi Pardee {"SPB", BIT(5)}, 20*d31feed7SXi Pardee {"MPFPW2", BIT(6)}, 21*d31feed7SXi Pardee {"GBE", BIT(7)}, 22*d31feed7SXi Pardee 23*d31feed7SXi Pardee {"SBR16B20", BIT(0)}, 24*d31feed7SXi Pardee {"SBR8B20", BIT(1)}, 25*d31feed7SXi Pardee {"SBR16B21", BIT(2)}, 26*d31feed7SXi Pardee {"DBG_SBR16B", BIT(3)}, 27*d31feed7SXi Pardee {"OSSE_HOTHAM", BIT(4)}, 28*d31feed7SXi Pardee {"D2D_DISP_1", BIT(5)}, 29*d31feed7SXi Pardee {"LPSS", BIT(6)}, 30*d31feed7SXi Pardee {"LPC", BIT(7)}, 31*d31feed7SXi Pardee 32*d31feed7SXi Pardee {"SMB", BIT(0)}, 33*d31feed7SXi Pardee {"ISH", BIT(1)}, 34*d31feed7SXi Pardee {"SBR16B2", BIT(2)}, 35*d31feed7SXi Pardee {"NPK_0", BIT(3)}, 36*d31feed7SXi Pardee {"D2D_NOC_1", BIT(4)}, 37*d31feed7SXi Pardee {"SBR8B2", BIT(5)}, 38*d31feed7SXi Pardee {"FUSE", BIT(6)}, 39*d31feed7SXi Pardee {"SBR16B0", BIT(7)}, 40*d31feed7SXi Pardee 41*d31feed7SXi Pardee {"PSF0", BIT(0)}, 42*d31feed7SXi Pardee {"XDCI", BIT(1)}, 43*d31feed7SXi Pardee {"EXI", BIT(2)}, 44*d31feed7SXi Pardee {"CSE", BIT(3)}, 45*d31feed7SXi Pardee {"KVMCC", BIT(4)}, 46*d31feed7SXi Pardee {"PMT", BIT(5)}, 47*d31feed7SXi Pardee {"CLINK", BIT(6)}, 48*d31feed7SXi Pardee {"PTIO", BIT(7)}, 49*d31feed7SXi Pardee 50*d31feed7SXi Pardee {"USBR0", BIT(0)}, 51*d31feed7SXi Pardee {"SUSRAM", BIT(1)}, 52*d31feed7SXi Pardee {"SMT1", BIT(2)}, 53*d31feed7SXi Pardee {"MPFPW1", BIT(3)}, 54*d31feed7SXi Pardee {"SMS2", BIT(4)}, 55*d31feed7SXi Pardee {"SMS1", BIT(5)}, 56*d31feed7SXi Pardee {"CSMERTC", BIT(6)}, 57*d31feed7SXi Pardee {"CSMEPSF", BIT(7)}, 58*d31feed7SXi Pardee 59*d31feed7SXi Pardee {"D2D_NOC_0", BIT(0)}, 60*d31feed7SXi Pardee {"ESE", BIT(1)}, 61*d31feed7SXi Pardee {"P2SB8B", BIT(2)}, 62*d31feed7SXi Pardee {"SBR16B7", BIT(3)}, 63*d31feed7SXi Pardee {"SBR16B3", BIT(4)}, 64*d31feed7SXi Pardee {"OSSE_SMT1", BIT(5)}, 65*d31feed7SXi Pardee {"D2D_DISP", BIT(6)}, 66*d31feed7SXi Pardee {"DBG_SBR", BIT(7)}, 67*d31feed7SXi Pardee 68*d31feed7SXi Pardee {"U3FPW1", BIT(0)}, 69*d31feed7SXi Pardee {"FIA_X", BIT(1)}, 70*d31feed7SXi Pardee {"PSF4", BIT(2)}, 71*d31feed7SXi Pardee {"CNVI", BIT(3)}, 72*d31feed7SXi Pardee {"UFSX2", BIT(4)}, 73*d31feed7SXi Pardee {"ENDBG", BIT(5)}, 74*d31feed7SXi Pardee {"DBC", BIT(6)}, 75*d31feed7SXi Pardee {"FIA_PG", BIT(7)}, 76*d31feed7SXi Pardee 77*d31feed7SXi Pardee {"D2D_IPU", BIT(0)}, 78*d31feed7SXi Pardee {"NPK1", BIT(1)}, 79*d31feed7SXi Pardee {"FIACPCB_X", BIT(2)}, 80*d31feed7SXi Pardee {"SBR8B4", BIT(3)}, 81*d31feed7SXi Pardee {"DBG_PSF", BIT(4)}, 82*d31feed7SXi Pardee {"PSF6", BIT(5)}, 83*d31feed7SXi Pardee {"UFSPW1", BIT(6)}, 84*d31feed7SXi Pardee {"FIA_U", BIT(7)}, 85*d31feed7SXi Pardee 86*d31feed7SXi Pardee {"PSF8", BIT(0)}, 87*d31feed7SXi Pardee {"SBR16B4", BIT(1)}, 88*d31feed7SXi Pardee {"SBR16B5", BIT(2)}, 89*d31feed7SXi Pardee {"FIACPCB_U", BIT(3)}, 90*d31feed7SXi Pardee {"TAM", BIT(4)}, 91*d31feed7SXi Pardee {"D2D_NOC_2", BIT(5)}, 92*d31feed7SXi Pardee {"TBTLSX", BIT(6)}, 93*d31feed7SXi Pardee {"THC0", BIT(7)}, 94*d31feed7SXi Pardee 95*d31feed7SXi Pardee {"THC1", BIT(0)}, 96*d31feed7SXi Pardee {"PMC_1", BIT(1)}, 97*d31feed7SXi Pardee {"SBR8B1", BIT(2)}, 98*d31feed7SXi Pardee {"TCSS", BIT(3)}, 99*d31feed7SXi Pardee {"DISP_PGA", BIT(4)}, 100*d31feed7SXi Pardee {"SBR16B1", BIT(5)}, 101*d31feed7SXi Pardee {"SBRG", BIT(6)}, 102*d31feed7SXi Pardee {"PSF5", BIT(7)}, 103*d31feed7SXi Pardee 104*d31feed7SXi Pardee {"P2SB16B", BIT(0)}, 105*d31feed7SXi Pardee {"ACE_0", BIT(1)}, 106*d31feed7SXi Pardee {"ACE_1", BIT(2)}, 107*d31feed7SXi Pardee {"ACE_2", BIT(3)}, 108*d31feed7SXi Pardee {"ACE_3", BIT(4)}, 109*d31feed7SXi Pardee {"ACE_4", BIT(5)}, 110*d31feed7SXi Pardee {"ACE_5", BIT(6)}, 111*d31feed7SXi Pardee {"ACE_6", BIT(7)}, 112*d31feed7SXi Pardee 113*d31feed7SXi Pardee {"ACE_7", BIT(0)}, 114*d31feed7SXi Pardee {"ACE_8", BIT(1)}, 115*d31feed7SXi Pardee {"ACE_9", BIT(2)}, 116*d31feed7SXi Pardee {"ACE_10", BIT(3)}, 117*d31feed7SXi Pardee {"FIACPCB_PG", BIT(4)}, 118*d31feed7SXi Pardee {"SBR16B6", BIT(5)}, 119*d31feed7SXi Pardee {"OSSE", BIT(6)}, 120*d31feed7SXi Pardee {"SBR8B0", BIT(7)}, 121*d31feed7SXi Pardee {} 122*d31feed7SXi Pardee }; 123*d31feed7SXi Pardee 124*d31feed7SXi Pardee static const struct pmc_bit_map *ext_ptl_pcdp_pfear_map[] = { 125*d31feed7SXi Pardee ptl_pcdp_pfear_map, 126*d31feed7SXi Pardee NULL 127*d31feed7SXi Pardee }; 128*d31feed7SXi Pardee 129*d31feed7SXi Pardee static const struct pmc_bit_map ptl_pcdp_ltr_show_map[] = { 130*d31feed7SXi Pardee {"SOUTHPORT_A", CNP_PMC_LTR_SPA}, 131*d31feed7SXi Pardee {"SOUTHPORT_B", CNP_PMC_LTR_SPB}, 132*d31feed7SXi Pardee {"SATA", CNP_PMC_LTR_SATA}, 133*d31feed7SXi Pardee {"GIGABIT_ETHERNET", CNP_PMC_LTR_GBE}, 134*d31feed7SXi Pardee {"XHCI", CNP_PMC_LTR_XHCI}, 135*d31feed7SXi Pardee {"SOUTHPORT_F", ADL_PMC_LTR_SPF}, 136*d31feed7SXi Pardee {"ME", CNP_PMC_LTR_ME}, 137*d31feed7SXi Pardee {"SATA1", CNP_PMC_LTR_EVA}, 138*d31feed7SXi Pardee {"SOUTHPORT_C", CNP_PMC_LTR_SPC}, 139*d31feed7SXi Pardee {"HD_AUDIO", CNP_PMC_LTR_AZ}, 140*d31feed7SXi Pardee {"CNV", CNP_PMC_LTR_CNV}, 141*d31feed7SXi Pardee {"LPSS", CNP_PMC_LTR_LPSS}, 142*d31feed7SXi Pardee {"SOUTHPORT_D", CNP_PMC_LTR_SPD}, 143*d31feed7SXi Pardee {"SOUTHPORT_E", CNP_PMC_LTR_SPE}, 144*d31feed7SXi Pardee {"SATA2", PTL_PMC_LTR_SATA2}, 145*d31feed7SXi Pardee {"ESPI", CNP_PMC_LTR_ESPI}, 146*d31feed7SXi Pardee {"SCC", CNP_PMC_LTR_SCC}, 147*d31feed7SXi Pardee {"ISH", CNP_PMC_LTR_ISH}, 148*d31feed7SXi Pardee {"UFSX2", CNP_PMC_LTR_UFSX2}, 149*d31feed7SXi Pardee {"EMMC", CNP_PMC_LTR_EMMC}, 150*d31feed7SXi Pardee {"WIGIG", ICL_PMC_LTR_WIGIG}, 151*d31feed7SXi Pardee {"THC0", TGL_PMC_LTR_THC0}, 152*d31feed7SXi Pardee {"THC1", TGL_PMC_LTR_THC1}, 153*d31feed7SXi Pardee {"SOUTHPORT_G", MTL_PMC_LTR_SPG}, 154*d31feed7SXi Pardee {"ESE", MTL_PMC_LTR_ESE}, 155*d31feed7SXi Pardee {"IOE_PMC", MTL_PMC_LTR_IOE_PMC}, 156*d31feed7SXi Pardee {"DMI3", ARL_PMC_LTR_DMI3}, 157*d31feed7SXi Pardee {"OSSE", LNL_PMC_LTR_OSSE}, 158*d31feed7SXi Pardee 159*d31feed7SXi Pardee /* Below two cannot be used for LTR_IGNORE */ 160*d31feed7SXi Pardee {"CURRENT_PLATFORM", PTL_PMC_LTR_CUR_PLT}, 161*d31feed7SXi Pardee {"AGGREGATED_SYSTEM", PTL_PMC_LTR_CUR_ASLT}, 162*d31feed7SXi Pardee {} 163*d31feed7SXi Pardee }; 164*d31feed7SXi Pardee 165*d31feed7SXi Pardee static const struct pmc_bit_map ptl_pcdp_clocksource_status_map[] = { 166*d31feed7SXi Pardee {"AON2_OFF_STS", BIT(0), 1}, 167*d31feed7SXi Pardee {"AON3_OFF_STS", BIT(1), 0}, 168*d31feed7SXi Pardee {"AON4_OFF_STS", BIT(2), 1}, 169*d31feed7SXi Pardee {"AON5_OFF_STS", BIT(3), 1}, 170*d31feed7SXi Pardee {"AON1_OFF_STS", BIT(4), 0}, 171*d31feed7SXi Pardee {"XTAL_LVM_OFF_STS", BIT(5), 0}, 172*d31feed7SXi Pardee {"MPFPW1_0_PLL_OFF_STS", BIT(6), 1}, 173*d31feed7SXi Pardee {"USB3_PLL_OFF_STS", BIT(8), 1}, 174*d31feed7SXi Pardee {"AON3_SPL_OFF_STS", BIT(9), 1}, 175*d31feed7SXi Pardee {"MPFPW2_0_PLL_OFF_STS", BIT(12), 1}, 176*d31feed7SXi Pardee {"XTAL_AGGR_OFF_STS", BIT(17), 1}, 177*d31feed7SXi Pardee {"USB2_PLL_OFF_STS", BIT(18), 0}, 178*d31feed7SXi Pardee {"SAF_PLL_OFF_STS", BIT(19), 1}, 179*d31feed7SXi Pardee {"SE_TCSS_PLL_OFF_STS", BIT(20), 1}, 180*d31feed7SXi Pardee {"DDI_PLL_OFF_STS", BIT(21), 1}, 181*d31feed7SXi Pardee {"FILTER_PLL_OFF_STS", BIT(22), 1}, 182*d31feed7SXi Pardee {"ACE_PLL_OFF_STS", BIT(24), 0}, 183*d31feed7SXi Pardee {"FABRIC_PLL_OFF_STS", BIT(25), 1}, 184*d31feed7SXi Pardee {"SOC_PLL_OFF_STS", BIT(26), 1}, 185*d31feed7SXi Pardee {"REF_PLL_OFF_STS", BIT(28), 1}, 186*d31feed7SXi Pardee {"IMG_PLL_OFF_STS", BIT(29), 1}, 187*d31feed7SXi Pardee {"RTC_PLL_OFF_STS", BIT(31), 0}, 188*d31feed7SXi Pardee {} 189*d31feed7SXi Pardee }; 190*d31feed7SXi Pardee 191*d31feed7SXi Pardee static const struct pmc_bit_map ptl_pcdp_power_gating_status_0_map[] = { 192*d31feed7SXi Pardee {"PMC_PGD0_PG_STS", BIT(0), 0}, 193*d31feed7SXi Pardee {"FUSE_OSSE_PGD0_PG_STS", BIT(1), 0}, 194*d31feed7SXi Pardee {"ESPISPI_PGD0_PG_STS", BIT(2), 0}, 195*d31feed7SXi Pardee {"XHCI_PGD0_PG_STS", BIT(3), 1}, 196*d31feed7SXi Pardee {"SPA_PGD0_PG_STS", BIT(4), 1}, 197*d31feed7SXi Pardee {"SPB_PGD0_PG_STS", BIT(5), 1}, 198*d31feed7SXi Pardee {"MPFPW2_PGD0_PG_STS", BIT(6), 0}, 199*d31feed7SXi Pardee {"GBE_PGD0_PG_STS", BIT(7), 1}, 200*d31feed7SXi Pardee {"SBR16B20_PGD0_PG_STS", BIT(8), 0}, 201*d31feed7SXi Pardee {"SBR8B20_PGD0_PG_STS", BIT(9), 0}, 202*d31feed7SXi Pardee {"SBR16B21_PGD0_PG_STS", BIT(10), 0}, 203*d31feed7SXi Pardee {"DBG_PGD0_PG_STS", BIT(11), 0}, 204*d31feed7SXi Pardee {"OSSE_HOTHAM_PGD0_PG_STS", BIT(12), 1}, 205*d31feed7SXi Pardee {"D2D_DISP_PGD1_PG_STS", BIT(13), 1}, 206*d31feed7SXi Pardee {"LPSS_PGD0_PG_STS", BIT(14), 1}, 207*d31feed7SXi Pardee {"LPC_PGD0_PG_STS", BIT(15), 0}, 208*d31feed7SXi Pardee {"SMB_PGD0_PG_STS", BIT(16), 0}, 209*d31feed7SXi Pardee {"ISH_PGD0_PG_STS", BIT(17), 0}, 210*d31feed7SXi Pardee {"SBR16B2_PGD0_PG_STS", BIT(18), 0}, 211*d31feed7SXi Pardee {"NPK_PGD0_PG_STS", BIT(19), 0}, 212*d31feed7SXi Pardee {"D2D_NOC_PGD1_PG_STS", BIT(20), 1}, 213*d31feed7SXi Pardee {"SBR8B2_PGD0_PG_STS", BIT(21), 0}, 214*d31feed7SXi Pardee {"FUSE_PGD0_PG_STS", BIT(22), 0}, 215*d31feed7SXi Pardee {"SBR16B0_PGD0_PG_STS", BIT(23), 0}, 216*d31feed7SXi Pardee {"PSF0_PGD0_PG_STS", BIT(24), 0}, 217*d31feed7SXi Pardee {"XDCI_PGD0_PG_STS", BIT(25), 1}, 218*d31feed7SXi Pardee {"EXI_PGD0_PG_STS", BIT(26), 0}, 219*d31feed7SXi Pardee {"CSE_PGD0_PG_STS", BIT(27), 1}, 220*d31feed7SXi Pardee {"KVMCC_PGD0_PG_STS", BIT(28), 1}, 221*d31feed7SXi Pardee {"PMT_PGD0_PG_STS", BIT(29), 1}, 222*d31feed7SXi Pardee {"CLINK_PGD0_PG_STS", BIT(30), 1}, 223*d31feed7SXi Pardee {"PTIO_PGD0_PG_STS", BIT(31), 1}, 224*d31feed7SXi Pardee {} 225*d31feed7SXi Pardee }; 226*d31feed7SXi Pardee 227*d31feed7SXi Pardee static const struct pmc_bit_map ptl_pcdp_power_gating_status_1_map[] = { 228*d31feed7SXi Pardee {"USBR0_PGD0_PG_STS", BIT(0), 1}, 229*d31feed7SXi Pardee {"SUSRAM_PGD0_PG_STS", BIT(1), 1}, 230*d31feed7SXi Pardee {"SMT1_PGD0_PG_STS", BIT(2), 1}, 231*d31feed7SXi Pardee {"MPFPW1_PGD0_PG_STS", BIT(3), 0}, 232*d31feed7SXi Pardee {"SMS2_PGD0_PG_STS", BIT(4), 1}, 233*d31feed7SXi Pardee {"SMS1_PGD0_PG_STS", BIT(5), 1}, 234*d31feed7SXi Pardee {"CSMERTC_PGD0_PG_STS", BIT(6), 0}, 235*d31feed7SXi Pardee {"CSMEPSF_PGD0_PG_STS", BIT(7), 0}, 236*d31feed7SXi Pardee {"D2D_NOC_PGD0_PG_STS", BIT(8), 0}, 237*d31feed7SXi Pardee {"ESE_PGD0_PG_STS", BIT(9), 1}, 238*d31feed7SXi Pardee {"P2SB8B_PGD0_PG_STS", BIT(10), 1}, 239*d31feed7SXi Pardee {"SBR16B7_PGD0_PG_STS", BIT(11), 0}, 240*d31feed7SXi Pardee {"SBR16B3_PGD0_PG_STS", BIT(12), 0}, 241*d31feed7SXi Pardee {"OSSE_SMT1_PGD0_PG_STS", BIT(13), 1}, 242*d31feed7SXi Pardee {"D2D_DISP_PGD0_PG_STS", BIT(14), 1}, 243*d31feed7SXi Pardee {"DBG_SBR_PGD0_PG_STS", BIT(15), 0}, 244*d31feed7SXi Pardee {"U3FPW1_PGD0_PG_STS", BIT(16), 0}, 245*d31feed7SXi Pardee {"FIA_X_PGD0_PG_STS", BIT(17), 0}, 246*d31feed7SXi Pardee {"PSF4_PGD0_PG_STS", BIT(18), 0}, 247*d31feed7SXi Pardee {"CNVI_PGD0_PG_STS", BIT(19), 0}, 248*d31feed7SXi Pardee {"UFSX2_PGD0_PG_STS", BIT(20), 1}, 249*d31feed7SXi Pardee {"ENDBG_PGD0_PG_STS", BIT(21), 0}, 250*d31feed7SXi Pardee {"DBC_PGD0_PG_STS", BIT(22), 0}, 251*d31feed7SXi Pardee {"FIA_PG_PGD0_PG_STS", BIT(23), 0}, 252*d31feed7SXi Pardee {"D2D_IPU_PGD0_PG_STS", BIT(24), 1}, 253*d31feed7SXi Pardee {"NPK_PGD1_PG_STS", BIT(25), 0}, 254*d31feed7SXi Pardee {"FIACPCB_X_PGD0_PG_STS", BIT(26), 0}, 255*d31feed7SXi Pardee {"SBR8B4_PGD0_PG_STS", BIT(27), 0}, 256*d31feed7SXi Pardee {"DBG_PSF_PGD0_PG_STS", BIT(28), 0}, 257*d31feed7SXi Pardee {"PSF6_PGD0_PG_STS", BIT(29), 0}, 258*d31feed7SXi Pardee {"UFSPW1_PGD0_PG_STS", BIT(30), 0}, 259*d31feed7SXi Pardee {"FIA_U_PGD0_PG_STS", BIT(31), 0}, 260*d31feed7SXi Pardee {} 261*d31feed7SXi Pardee }; 262*d31feed7SXi Pardee 263*d31feed7SXi Pardee static const struct pmc_bit_map ptl_pcdp_power_gating_status_2_map[] = { 264*d31feed7SXi Pardee {"PSF8_PGD0_PG_STS", BIT(0), 0}, 265*d31feed7SXi Pardee {"SBR16B4_PGD0_PG_STS", BIT(1), 0}, 266*d31feed7SXi Pardee {"SBR16B5_PGD0_PG_STS", BIT(2), 0}, 267*d31feed7SXi Pardee {"FIACPCB_U_PGD0_PG_STS", BIT(3), 0}, 268*d31feed7SXi Pardee {"TAM_PGD0_PG_STS", BIT(4), 1}, 269*d31feed7SXi Pardee {"D2D_NOC_PGD0_PG_STS", BIT(5), 1}, 270*d31feed7SXi Pardee {"TBTLSX_PGD0_PG_STS", BIT(6), 1}, 271*d31feed7SXi Pardee {"THC0_PGD0_PG_STS", BIT(7), 1}, 272*d31feed7SXi Pardee {"THC1_PGD0_PG_STS", BIT(8), 1}, 273*d31feed7SXi Pardee {"PMC_PGD1_PG_STS", BIT(9), 0}, 274*d31feed7SXi Pardee {"SBR8B1_PGD0_PG_STS", BIT(10), 0}, 275*d31feed7SXi Pardee {"TCSS_PGD0_PG_STS", BIT(11), 0}, 276*d31feed7SXi Pardee {"DISP_PGA_PGD0_PG_STS", BIT(12), 0}, 277*d31feed7SXi Pardee {"SBR16B1_PGD0_PG_STS", BIT(13), 0}, 278*d31feed7SXi Pardee {"SBRG_PGD0_PG_STS", BIT(14), 0}, 279*d31feed7SXi Pardee {"PSF5_PGD0_PG_STS", BIT(15), 0}, 280*d31feed7SXi Pardee {"P2SB16B_PGD0_PG_STS", BIT(16), 1}, 281*d31feed7SXi Pardee {"ACE_PGD0_PG_STS", BIT(17), 0}, 282*d31feed7SXi Pardee {"ACE_PGD1_PG_STS", BIT(18), 0}, 283*d31feed7SXi Pardee {"ACE_PGD2_PG_STS", BIT(19), 0}, 284*d31feed7SXi Pardee {"ACE_PGD3_PG_STS", BIT(20), 0}, 285*d31feed7SXi Pardee {"ACE_PGD4_PG_STS", BIT(21), 0}, 286*d31feed7SXi Pardee {"ACE_PGD5_PG_STS", BIT(22), 0}, 287*d31feed7SXi Pardee {"ACE_PGD6_PG_STS", BIT(23), 0}, 288*d31feed7SXi Pardee {"ACE_PGD7_PG_STS", BIT(24), 0}, 289*d31feed7SXi Pardee {"ACE_PGD8_PG_STS", BIT(25), 0}, 290*d31feed7SXi Pardee {"ACE_PGD9_PG_STS", BIT(26), 0}, 291*d31feed7SXi Pardee {"ACE_PGD10_PG_STS", BIT(27), 0}, 292*d31feed7SXi Pardee {"FIACPCB_PG_PGD0_PG_STS", BIT(28), 0}, 293*d31feed7SXi Pardee {"SBR16B6_PGD0_PG_STS", BIT(29), 0}, 294*d31feed7SXi Pardee {"OSSE_PGD0_PG_STS", BIT(30), 1}, 295*d31feed7SXi Pardee {"SBR8B0_PGD0_PG_STS", BIT(31), 0}, 296*d31feed7SXi Pardee {} 297*d31feed7SXi Pardee }; 298*d31feed7SXi Pardee 299*d31feed7SXi Pardee static const struct pmc_bit_map ptl_pcdp_d3_status_0_map[] = { 300*d31feed7SXi Pardee {"LPSS_D3_STS", BIT(3), 1}, 301*d31feed7SXi Pardee {"XDCI_D3_STS", BIT(4), 1}, 302*d31feed7SXi Pardee {"XHCI_D3_STS", BIT(5), 1}, 303*d31feed7SXi Pardee {"OSSE_D3_STS", BIT(6), 0}, 304*d31feed7SXi Pardee {"SPA_D3_STS", BIT(12), 0}, 305*d31feed7SXi Pardee {"SPB_D3_STS", BIT(13), 0}, 306*d31feed7SXi Pardee {"ESPISPI_D3_STS", BIT(18), 0}, 307*d31feed7SXi Pardee {"PSTH_D3_STS", BIT(21), 0}, 308*d31feed7SXi Pardee {"OSSE_SMT1_D3_STS", BIT(30), 0}, 309*d31feed7SXi Pardee {} 310*d31feed7SXi Pardee }; 311*d31feed7SXi Pardee 312*d31feed7SXi Pardee static const struct pmc_bit_map ptl_pcdp_d3_status_1_map[] = { 313*d31feed7SXi Pardee {"GBE_D3_STS", BIT(19), 0}, 314*d31feed7SXi Pardee {"ITSS_D3_STS", BIT(23), 0}, 315*d31feed7SXi Pardee {"CNVI_D3_STS", BIT(27), 0}, 316*d31feed7SXi Pardee {"UFSX2_D3_STS", BIT(28), 1}, 317*d31feed7SXi Pardee {"OSSE_HOTHAM_D3_STS", BIT(29), 0}, 318*d31feed7SXi Pardee {"ESE_D3_STS", BIT(30), 0}, 319*d31feed7SXi Pardee {} 320*d31feed7SXi Pardee }; 321*d31feed7SXi Pardee 322*d31feed7SXi Pardee static const struct pmc_bit_map ptl_pcdp_d3_status_2_map[] = { 323*d31feed7SXi Pardee {"CSMERTC_D3_STS", BIT(1), 0}, 324*d31feed7SXi Pardee {"SUSRAM_D3_STS", BIT(2), 0}, 325*d31feed7SXi Pardee {"CSE_D3_STS", BIT(4), 0}, 326*d31feed7SXi Pardee {"KVMCC_D3_STS", BIT(5), 0}, 327*d31feed7SXi Pardee {"USBR0_D3_STS", BIT(6), 0}, 328*d31feed7SXi Pardee {"ISH_D3_STS", BIT(7), 0}, 329*d31feed7SXi Pardee {"SMT1_D3_STS", BIT(8), 0}, 330*d31feed7SXi Pardee {"SMT2_D3_STS", BIT(9), 0}, 331*d31feed7SXi Pardee {"SMT3_D3_STS", BIT(10), 0}, 332*d31feed7SXi Pardee {"OSSE_SMT2_D3_STS", BIT(12), 0}, 333*d31feed7SXi Pardee {"CLINK_D3_STS", BIT(14), 0}, 334*d31feed7SXi Pardee {"PTIO_D3_STS", BIT(16), 0}, 335*d31feed7SXi Pardee {"PMT_D3_STS", BIT(17), 0}, 336*d31feed7SXi Pardee {"SMS1_D3_STS", BIT(18), 0}, 337*d31feed7SXi Pardee {"SMS2_D3_STS", BIT(19), 0}, 338*d31feed7SXi Pardee {} 339*d31feed7SXi Pardee }; 340*d31feed7SXi Pardee 341*d31feed7SXi Pardee static const struct pmc_bit_map ptl_pcdp_d3_status_3_map[] = { 342*d31feed7SXi Pardee {"THC0_D3_STS", BIT(14), 1}, 343*d31feed7SXi Pardee {"THC1_D3_STS", BIT(15), 1}, 344*d31feed7SXi Pardee {"OSSE_SMT3_D3_STS", BIT(18), 0}, 345*d31feed7SXi Pardee {"ACE_D3_STS", BIT(23), 0}, 346*d31feed7SXi Pardee {} 347*d31feed7SXi Pardee }; 348*d31feed7SXi Pardee 349*d31feed7SXi Pardee static const struct pmc_bit_map ptl_pcdp_vnn_req_status_0_map[] = { 350*d31feed7SXi Pardee {"LPSS_VNN_REQ_STS", BIT(3), 1}, 351*d31feed7SXi Pardee {"OSSE_VNN_REQ_STS", BIT(6), 1}, 352*d31feed7SXi Pardee {"ESPISPI_VNN_REQ_STS", BIT(18), 1}, 353*d31feed7SXi Pardee {"OSSE_SMT1_VNN_REQ_STS", BIT(30), 1}, 354*d31feed7SXi Pardee {} 355*d31feed7SXi Pardee }; 356*d31feed7SXi Pardee 357*d31feed7SXi Pardee static const struct pmc_bit_map ptl_pcdp_vnn_req_status_1_map[] = { 358*d31feed7SXi Pardee {"NPK_VNN_REQ_STS", BIT(4), 1}, 359*d31feed7SXi Pardee {"DFXAGG_VNN_REQ_STS", BIT(8), 0}, 360*d31feed7SXi Pardee {"EXI_VNN_REQ_STS", BIT(9), 1}, 361*d31feed7SXi Pardee {"P2D_VNN_REQ_STS", BIT(18), 1}, 362*d31feed7SXi Pardee {"GBE_VNN_REQ_STS", BIT(19), 1}, 363*d31feed7SXi Pardee {"SMB_VNN_REQ_STS", BIT(25), 1}, 364*d31feed7SXi Pardee {"LPC_VNN_REQ_STS", BIT(26), 0}, 365*d31feed7SXi Pardee {"ESE_VNN_REQ_STS", BIT(30), 1}, 366*d31feed7SXi Pardee {} 367*d31feed7SXi Pardee }; 368*d31feed7SXi Pardee 369*d31feed7SXi Pardee static const struct pmc_bit_map ptl_pcdp_vnn_req_status_2_map[] = { 370*d31feed7SXi Pardee {"CSMERTC_VNN_REQ_STS", BIT(1), 1}, 371*d31feed7SXi Pardee {"CSE_VNN_REQ_STS", BIT(4), 1}, 372*d31feed7SXi Pardee {"ISH_VNN_REQ_STS", BIT(7), 1}, 373*d31feed7SXi Pardee {"SMT1_VNN_REQ_STS", BIT(8), 1}, 374*d31feed7SXi Pardee {"CLINK_VNN_REQ_STS", BIT(14), 1}, 375*d31feed7SXi Pardee {"SMS1_VNN_REQ_STS", BIT(18), 1}, 376*d31feed7SXi Pardee {"SMS2_VNN_REQ_STS", BIT(19), 1}, 377*d31feed7SXi Pardee {"GPIOCOM4_VNN_REQ_STS", BIT(20), 1}, 378*d31feed7SXi Pardee {"GPIOCOM3_VNN_REQ_STS", BIT(21), 1}, 379*d31feed7SXi Pardee {"GPIOCOM1_VNN_REQ_STS", BIT(23), 1}, 380*d31feed7SXi Pardee {"GPIOCOM0_VNN_REQ_STS", BIT(24), 1}, 381*d31feed7SXi Pardee {"DISP_SHIM_VNN_REQ_STS", BIT(26), 1}, 382*d31feed7SXi Pardee {} 383*d31feed7SXi Pardee }; 384*d31feed7SXi Pardee 385*d31feed7SXi Pardee static const struct pmc_bit_map ptl_pcdp_vnn_req_status_3_map[] = { 386*d31feed7SXi Pardee {"DTS0_VNN_REQ_STS", BIT(7), 0}, 387*d31feed7SXi Pardee {"GPIOCOM5_VNN_REQ_STS", BIT(11), 1}, 388*d31feed7SXi Pardee {} 389*d31feed7SXi Pardee }; 390*d31feed7SXi Pardee 391*d31feed7SXi Pardee static const struct pmc_bit_map ptl_pcdp_vnn_misc_status_map[] = { 392*d31feed7SXi Pardee {"CPU_C10_REQ_STS", BIT(0), 0}, 393*d31feed7SXi Pardee {"TS_OFF_REQ_STS", BIT(1), 0}, 394*d31feed7SXi Pardee {"PNDE_MET_REQ_STS", BIT(2), 1}, 395*d31feed7SXi Pardee {"PG5_PMA0_REQ_STS", BIT(3), 0}, 396*d31feed7SXi Pardee {"FW_THROTTLE_ALLOWED_REQ_STS", BIT(4), 0}, 397*d31feed7SXi Pardee {"VNN_SOC_REQ_STS", BIT(6), 1}, 398*d31feed7SXi Pardee {"ISH_VNNAON_REQ_STS", BIT(7), 0}, 399*d31feed7SXi Pardee {"D2D_NOC_CFI_QACTIVE_REQ_STS", BIT(8), 1}, 400*d31feed7SXi Pardee {"D2D_NOC_GPSB_QACTIVE_REQ_STS", BIT(9), 1}, 401*d31feed7SXi Pardee {"D2D_IPU_QACTIVE_REQ_STS", BIT(10), 1}, 402*d31feed7SXi Pardee {"PLT_GREATER_REQ_STS", BIT(11), 1}, 403*d31feed7SXi Pardee {"ALL_SBR_IDLE_REQ_STS", BIT(12), 0}, 404*d31feed7SXi Pardee {"PMC_IDLE_FB_OCP_REQ_STS", BIT(13), 0}, 405*d31feed7SXi Pardee {"PM_SYNC_STATES_REQ_STS", BIT(14), 0}, 406*d31feed7SXi Pardee {"EA_REQ_STS", BIT(15), 0}, 407*d31feed7SXi Pardee {"MPHY_CORE_OFF_REQ_STS", BIT(16), 0}, 408*d31feed7SXi Pardee {"BRK_EV_EN_REQ_STS", BIT(17), 0}, 409*d31feed7SXi Pardee {"AUTO_DEMO_EN_REQ_STS", BIT(18), 0}, 410*d31feed7SXi Pardee {"ITSS_CLK_SRC_REQ_STS", BIT(19), 1}, 411*d31feed7SXi Pardee {"ARC_IDLE_REQ_STS", BIT(21), 0}, 412*d31feed7SXi Pardee {"PG5_PMA1_REQ_STS", BIT(22), 0}, 413*d31feed7SXi Pardee {"FIA_DEEP_PM_REQ_STS", BIT(23), 0}, 414*d31feed7SXi Pardee {"XDCI_ATTACHED_REQ_STS", BIT(24), 1}, 415*d31feed7SXi Pardee {"ARC_INTERRUPT_WAKE_REQ_STS", BIT(25), 0}, 416*d31feed7SXi Pardee {"D2D_DISP_DDI_QACTIVE_REQ_STS", BIT(26), 1}, 417*d31feed7SXi Pardee {"PRE_WAKE0_REQ_STS", BIT(27), 1}, 418*d31feed7SXi Pardee {"PRE_WAKE1_REQ_STS", BIT(28), 1}, 419*d31feed7SXi Pardee {"PRE_WAKE2_REQ_STS", BIT(29), 1}, 420*d31feed7SXi Pardee {"D2D_DISP_EDP_QACTIVE_REQ_STS", BIT(31), 1}, 421*d31feed7SXi Pardee {} 422*d31feed7SXi Pardee }; 423*d31feed7SXi Pardee 424*d31feed7SXi Pardee static const struct pmc_bit_map ptl_pcdp_signal_status_map[] = { 425*d31feed7SXi Pardee {"LSX_Wake0_STS", BIT(0), 0}, 426*d31feed7SXi Pardee {"LSX_Wake1_STS", BIT(1), 0}, 427*d31feed7SXi Pardee {"LSX_Wake2_STS", BIT(2), 0}, 428*d31feed7SXi Pardee {"LSX_Wake3_STS", BIT(3), 0}, 429*d31feed7SXi Pardee {"LSX_Wake4_STS", BIT(4), 0}, 430*d31feed7SXi Pardee {"LSX_Wake5_STS", BIT(5), 0}, 431*d31feed7SXi Pardee {"LSX_Wake6_STS", BIT(6), 0}, 432*d31feed7SXi Pardee {"LSX_Wake7_STS", BIT(7), 0}, 433*d31feed7SXi Pardee {"LPSS_Wake0_STS", BIT(8), 1}, 434*d31feed7SXi Pardee {"LPSS_Wake1_STS", BIT(9), 1}, 435*d31feed7SXi Pardee {"Int_Timer_SS_Wake0_STS", BIT(10), 1}, 436*d31feed7SXi Pardee {"Int_Timer_SS_Wake1_STS", BIT(11), 1}, 437*d31feed7SXi Pardee {"Int_Timer_SS_Wake2_STS", BIT(12), 1}, 438*d31feed7SXi Pardee {"Int_Timer_SS_Wake3_STS", BIT(13), 1}, 439*d31feed7SXi Pardee {"Int_Timer_SS_Wake4_STS", BIT(14), 1}, 440*d31feed7SXi Pardee {"Int_Timer_SS_Wake5_STS", BIT(15), 1}, 441*d31feed7SXi Pardee {} 442*d31feed7SXi Pardee }; 443*d31feed7SXi Pardee 444*d31feed7SXi Pardee static const struct pmc_bit_map ptl_pcdp_rsc_status_map[] = { 445*d31feed7SXi Pardee {"Memory", 0, 1}, 446*d31feed7SXi Pardee {"PSF0", 0, 1}, 447*d31feed7SXi Pardee {"PSF4", 0, 1}, 448*d31feed7SXi Pardee {"PSF5", 0, 1}, 449*d31feed7SXi Pardee {"PSF6", 0, 1}, 450*d31feed7SXi Pardee {"PSF8", 0, 1}, 451*d31feed7SXi Pardee {"SAF_CFI_LINK", 0, 1}, 452*d31feed7SXi Pardee {"SB", 0, 1}, 453*d31feed7SXi Pardee {} 454*d31feed7SXi Pardee }; 455*d31feed7SXi Pardee 456*d31feed7SXi Pardee static const struct pmc_bit_map *ptl_pcdp_lpm_maps[] = { 457*d31feed7SXi Pardee ptl_pcdp_clocksource_status_map, 458*d31feed7SXi Pardee ptl_pcdp_power_gating_status_0_map, 459*d31feed7SXi Pardee ptl_pcdp_power_gating_status_1_map, 460*d31feed7SXi Pardee ptl_pcdp_power_gating_status_2_map, 461*d31feed7SXi Pardee ptl_pcdp_d3_status_0_map, 462*d31feed7SXi Pardee ptl_pcdp_d3_status_1_map, 463*d31feed7SXi Pardee ptl_pcdp_d3_status_2_map, 464*d31feed7SXi Pardee ptl_pcdp_d3_status_3_map, 465*d31feed7SXi Pardee ptl_pcdp_vnn_req_status_0_map, 466*d31feed7SXi Pardee ptl_pcdp_vnn_req_status_1_map, 467*d31feed7SXi Pardee ptl_pcdp_vnn_req_status_2_map, 468*d31feed7SXi Pardee ptl_pcdp_vnn_req_status_3_map, 469*d31feed7SXi Pardee ptl_pcdp_vnn_misc_status_map, 470*d31feed7SXi Pardee ptl_pcdp_signal_status_map, 471*d31feed7SXi Pardee NULL 472*d31feed7SXi Pardee }; 473*d31feed7SXi Pardee 474*d31feed7SXi Pardee static const struct pmc_bit_map *ptl_pcdp_blk_maps[] = { 475*d31feed7SXi Pardee ptl_pcdp_power_gating_status_0_map, 476*d31feed7SXi Pardee ptl_pcdp_power_gating_status_1_map, 477*d31feed7SXi Pardee ptl_pcdp_power_gating_status_2_map, 478*d31feed7SXi Pardee ptl_pcdp_rsc_status_map, 479*d31feed7SXi Pardee ptl_pcdp_vnn_req_status_0_map, 480*d31feed7SXi Pardee ptl_pcdp_vnn_req_status_1_map, 481*d31feed7SXi Pardee ptl_pcdp_vnn_req_status_2_map, 482*d31feed7SXi Pardee ptl_pcdp_vnn_req_status_3_map, 483*d31feed7SXi Pardee ptl_pcdp_d3_status_0_map, 484*d31feed7SXi Pardee ptl_pcdp_d3_status_1_map, 485*d31feed7SXi Pardee ptl_pcdp_d3_status_2_map, 486*d31feed7SXi Pardee ptl_pcdp_d3_status_3_map, 487*d31feed7SXi Pardee ptl_pcdp_clocksource_status_map, 488*d31feed7SXi Pardee ptl_pcdp_vnn_misc_status_map, 489*d31feed7SXi Pardee ptl_pcdp_signal_status_map, 490*d31feed7SXi Pardee NULL 491*d31feed7SXi Pardee }; 492*d31feed7SXi Pardee 493*d31feed7SXi Pardee static const struct pmc_reg_map ptl_pcdp_reg_map = { 494*d31feed7SXi Pardee .pfear_sts = ext_ptl_pcdp_pfear_map, 495*d31feed7SXi Pardee .slp_s0_offset = CNP_PMC_SLP_S0_RES_COUNTER_OFFSET, 496*d31feed7SXi Pardee .slp_s0_res_counter_step = TGL_PMC_SLP_S0_RES_COUNTER_STEP, 497*d31feed7SXi Pardee .ltr_show_sts = ptl_pcdp_ltr_show_map, 498*d31feed7SXi Pardee .msr_sts = msr_map, 499*d31feed7SXi Pardee .ltr_ignore_offset = CNP_PMC_LTR_IGNORE_OFFSET, 500*d31feed7SXi Pardee .regmap_length = PTL_PCD_PMC_MMIO_REG_LEN, 501*d31feed7SXi Pardee .ppfear0_offset = CNP_PMC_HOST_PPFEAR0A, 502*d31feed7SXi Pardee .ppfear_buckets = LNL_PPFEAR_NUM_ENTRIES, 503*d31feed7SXi Pardee .pm_cfg_offset = CNP_PMC_PM_CFG_OFFSET, 504*d31feed7SXi Pardee .pm_read_disable_bit = CNP_PMC_READ_DISABLE_BIT, 505*d31feed7SXi Pardee .lpm_num_maps = PTL_LPM_NUM_MAPS, 506*d31feed7SXi Pardee .ltr_ignore_max = LNL_NUM_IP_IGN_ALLOWED, 507*d31feed7SXi Pardee .lpm_res_counter_step_x2 = TGL_PMC_LPM_RES_COUNTER_STEP_X2, 508*d31feed7SXi Pardee .etr3_offset = ETR3_OFFSET, 509*d31feed7SXi Pardee .lpm_sts_latch_en_offset = MTL_LPM_STATUS_LATCH_EN_OFFSET, 510*d31feed7SXi Pardee .lpm_priority_offset = MTL_LPM_PRI_OFFSET, 511*d31feed7SXi Pardee .lpm_en_offset = MTL_LPM_EN_OFFSET, 512*d31feed7SXi Pardee .lpm_residency_offset = MTL_LPM_RESIDENCY_OFFSET, 513*d31feed7SXi Pardee .lpm_sts = ptl_pcdp_lpm_maps, 514*d31feed7SXi Pardee .lpm_status_offset = MTL_LPM_STATUS_OFFSET, 515*d31feed7SXi Pardee .lpm_live_status_offset = MTL_LPM_LIVE_STATUS_OFFSET, 516*d31feed7SXi Pardee .s0ix_blocker_maps = ptl_pcdp_blk_maps, 517*d31feed7SXi Pardee .s0ix_blocker_offset = LNL_S0IX_BLOCKER_OFFSET, 518*d31feed7SXi Pardee }; 519*d31feed7SXi Pardee 520*d31feed7SXi Pardee #define PTL_NPU_PCI_DEV 0xb03e 521*d31feed7SXi Pardee #define PTL_IPU_PCI_DEV 0xb05d 522*d31feed7SXi Pardee 523*d31feed7SXi Pardee /* 524*d31feed7SXi Pardee * Set power state of select devices that do not have drivers to D3 525*d31feed7SXi Pardee * so that they do not block Package C entry. 526*d31feed7SXi Pardee */ 527*d31feed7SXi Pardee static void ptl_d3_fixup(void) 528*d31feed7SXi Pardee { 529*d31feed7SXi Pardee pmc_core_set_device_d3(PTL_IPU_PCI_DEV); 530*d31feed7SXi Pardee pmc_core_set_device_d3(PTL_NPU_PCI_DEV); 531*d31feed7SXi Pardee } 532*d31feed7SXi Pardee 533*d31feed7SXi Pardee static int ptl_resume(struct pmc_dev *pmcdev) 534*d31feed7SXi Pardee { 535*d31feed7SXi Pardee ptl_d3_fixup(); 536*d31feed7SXi Pardee return cnl_resume(pmcdev); 537*d31feed7SXi Pardee } 538*d31feed7SXi Pardee 539*d31feed7SXi Pardee static int ptl_core_init(struct pmc_dev *pmcdev, struct pmc_dev_info *pmc_dev_info) 540*d31feed7SXi Pardee { 541*d31feed7SXi Pardee ptl_d3_fixup(); 542*d31feed7SXi Pardee return generic_core_init(pmcdev, pmc_dev_info); 543*d31feed7SXi Pardee } 544*d31feed7SXi Pardee 545*d31feed7SXi Pardee struct pmc_dev_info ptl_pmc_dev = { 546*d31feed7SXi Pardee .map = &ptl_pcdp_reg_map, 547*d31feed7SXi Pardee .suspend = cnl_suspend, 548*d31feed7SXi Pardee .resume = ptl_resume, 549*d31feed7SXi Pardee .init = ptl_core_init, 550*d31feed7SXi Pardee }; 551