root/drivers/platform/x86/intel_pmc_core.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 // SPDX-License-Identifier: GPL-2.0
   2 /*
   3  * Intel Core SoC Power Management Controller Header File
   4  *
   5  * Copyright (c) 2016, Intel Corporation.
   6  * All Rights Reserved.
   7  *
   8  * Authors: Rajneesh Bhardwaj <rajneesh.bhardwaj@intel.com>
   9  *          Vishwanath Somayaji <vishwanath.somayaji@intel.com>
  10  */
  11 
  12 #ifndef PMC_CORE_H
  13 #define PMC_CORE_H
  14 
  15 #include <linux/bits.h>
  16 
  17 #define PMC_BASE_ADDR_DEFAULT                   0xFE000000
  18 
  19 /* Sunrise Point Power Management Controller PCI Device ID */
  20 #define SPT_PMC_PCI_DEVICE_ID                   0x9d21
  21 #define SPT_PMC_BASE_ADDR_OFFSET                0x48
  22 #define SPT_PMC_SLP_S0_RES_COUNTER_OFFSET       0x13c
  23 #define SPT_PMC_PM_CFG_OFFSET                   0x18
  24 #define SPT_PMC_PM_STS_OFFSET                   0x1c
  25 #define SPT_PMC_MTPMC_OFFSET                    0x20
  26 #define SPT_PMC_MFPMC_OFFSET                    0x38
  27 #define SPT_PMC_LTR_IGNORE_OFFSET               0x30C
  28 #define SPT_PMC_VRIC1_OFFSET                    0x31c
  29 #define SPT_PMC_MPHY_CORE_STS_0                 0x1143
  30 #define SPT_PMC_MPHY_CORE_STS_1                 0x1142
  31 #define SPT_PMC_MPHY_COM_STS_0                  0x1155
  32 #define SPT_PMC_MMIO_REG_LEN                    0x1000
  33 #define SPT_PMC_SLP_S0_RES_COUNTER_STEP         0x64
  34 #define PMC_BASE_ADDR_MASK                      ~(SPT_PMC_MMIO_REG_LEN - 1)
  35 #define MTPMC_MASK                              0xffff0000
  36 #define PPFEAR_MAX_NUM_ENTRIES                  12
  37 #define SPT_PPFEAR_NUM_ENTRIES                  5
  38 #define SPT_PMC_READ_DISABLE_BIT                0x16
  39 #define SPT_PMC_MSG_FULL_STS_BIT                0x18
  40 #define NUM_RETRIES                             100
  41 #define SPT_NUM_IP_IGN_ALLOWED                  17
  42 
  43 #define SPT_PMC_LTR_CUR_PLT                     0x350
  44 #define SPT_PMC_LTR_CUR_ASLT                    0x354
  45 #define SPT_PMC_LTR_SPA                         0x360
  46 #define SPT_PMC_LTR_SPB                         0x364
  47 #define SPT_PMC_LTR_SATA                        0x368
  48 #define SPT_PMC_LTR_GBE                         0x36C
  49 #define SPT_PMC_LTR_XHCI                        0x370
  50 #define SPT_PMC_LTR_RESERVED                    0x374
  51 #define SPT_PMC_LTR_ME                          0x378
  52 #define SPT_PMC_LTR_EVA                         0x37C
  53 #define SPT_PMC_LTR_SPC                         0x380
  54 #define SPT_PMC_LTR_AZ                          0x384
  55 #define SPT_PMC_LTR_LPSS                        0x38C
  56 #define SPT_PMC_LTR_CAM                         0x390
  57 #define SPT_PMC_LTR_SPD                         0x394
  58 #define SPT_PMC_LTR_SPE                         0x398
  59 #define SPT_PMC_LTR_ESPI                        0x39C
  60 #define SPT_PMC_LTR_SCC                         0x3A0
  61 #define SPT_PMC_LTR_ISH                         0x3A4
  62 
  63 /* Sunrise Point: PGD PFET Enable Ack Status Registers */
  64 enum ppfear_regs {
  65         SPT_PMC_XRAM_PPFEAR0A = 0x590,
  66         SPT_PMC_XRAM_PPFEAR0B,
  67         SPT_PMC_XRAM_PPFEAR0C,
  68         SPT_PMC_XRAM_PPFEAR0D,
  69         SPT_PMC_XRAM_PPFEAR1A,
  70 };
  71 
  72 #define SPT_PMC_BIT_PMC                         BIT(0)
  73 #define SPT_PMC_BIT_OPI                         BIT(1)
  74 #define SPT_PMC_BIT_SPI                         BIT(2)
  75 #define SPT_PMC_BIT_XHCI                        BIT(3)
  76 #define SPT_PMC_BIT_SPA                         BIT(4)
  77 #define SPT_PMC_BIT_SPB                         BIT(5)
  78 #define SPT_PMC_BIT_SPC                         BIT(6)
  79 #define SPT_PMC_BIT_GBE                         BIT(7)
  80 
  81 #define SPT_PMC_BIT_SATA                        BIT(0)
  82 #define SPT_PMC_BIT_HDA_PGD0                    BIT(1)
  83 #define SPT_PMC_BIT_HDA_PGD1                    BIT(2)
  84 #define SPT_PMC_BIT_HDA_PGD2                    BIT(3)
  85 #define SPT_PMC_BIT_HDA_PGD3                    BIT(4)
  86 #define SPT_PMC_BIT_RSVD_0B                     BIT(5)
  87 #define SPT_PMC_BIT_LPSS                        BIT(6)
  88 #define SPT_PMC_BIT_LPC                         BIT(7)
  89 
  90 #define SPT_PMC_BIT_SMB                         BIT(0)
  91 #define SPT_PMC_BIT_ISH                         BIT(1)
  92 #define SPT_PMC_BIT_P2SB                        BIT(2)
  93 #define SPT_PMC_BIT_DFX                         BIT(3)
  94 #define SPT_PMC_BIT_SCC                         BIT(4)
  95 #define SPT_PMC_BIT_RSVD_0C                     BIT(5)
  96 #define SPT_PMC_BIT_FUSE                        BIT(6)
  97 #define SPT_PMC_BIT_CAMREA                      BIT(7)
  98 
  99 #define SPT_PMC_BIT_RSVD_0D                     BIT(0)
 100 #define SPT_PMC_BIT_USB3_OTG                    BIT(1)
 101 #define SPT_PMC_BIT_EXI                         BIT(2)
 102 #define SPT_PMC_BIT_CSE                         BIT(3)
 103 #define SPT_PMC_BIT_CSME_KVM                    BIT(4)
 104 #define SPT_PMC_BIT_CSME_PMT                    BIT(5)
 105 #define SPT_PMC_BIT_CSME_CLINK                  BIT(6)
 106 #define SPT_PMC_BIT_CSME_PTIO                   BIT(7)
 107 
 108 #define SPT_PMC_BIT_CSME_USBR                   BIT(0)
 109 #define SPT_PMC_BIT_CSME_SUSRAM                 BIT(1)
 110 #define SPT_PMC_BIT_CSME_SMT                    BIT(2)
 111 #define SPT_PMC_BIT_RSVD_1A                     BIT(3)
 112 #define SPT_PMC_BIT_CSME_SMS2                   BIT(4)
 113 #define SPT_PMC_BIT_CSME_SMS1                   BIT(5)
 114 #define SPT_PMC_BIT_CSME_RTC                    BIT(6)
 115 #define SPT_PMC_BIT_CSME_PSF                    BIT(7)
 116 
 117 #define SPT_PMC_BIT_MPHY_LANE0                  BIT(0)
 118 #define SPT_PMC_BIT_MPHY_LANE1                  BIT(1)
 119 #define SPT_PMC_BIT_MPHY_LANE2                  BIT(2)
 120 #define SPT_PMC_BIT_MPHY_LANE3                  BIT(3)
 121 #define SPT_PMC_BIT_MPHY_LANE4                  BIT(4)
 122 #define SPT_PMC_BIT_MPHY_LANE5                  BIT(5)
 123 #define SPT_PMC_BIT_MPHY_LANE6                  BIT(6)
 124 #define SPT_PMC_BIT_MPHY_LANE7                  BIT(7)
 125 
 126 #define SPT_PMC_BIT_MPHY_LANE8                  BIT(0)
 127 #define SPT_PMC_BIT_MPHY_LANE9                  BIT(1)
 128 #define SPT_PMC_BIT_MPHY_LANE10                 BIT(2)
 129 #define SPT_PMC_BIT_MPHY_LANE11                 BIT(3)
 130 #define SPT_PMC_BIT_MPHY_LANE12                 BIT(4)
 131 #define SPT_PMC_BIT_MPHY_LANE13                 BIT(5)
 132 #define SPT_PMC_BIT_MPHY_LANE14                 BIT(6)
 133 #define SPT_PMC_BIT_MPHY_LANE15                 BIT(7)
 134 
 135 #define SPT_PMC_BIT_MPHY_CMN_LANE0              BIT(0)
 136 #define SPT_PMC_BIT_MPHY_CMN_LANE1              BIT(1)
 137 #define SPT_PMC_BIT_MPHY_CMN_LANE2              BIT(2)
 138 #define SPT_PMC_BIT_MPHY_CMN_LANE3              BIT(3)
 139 
 140 #define SPT_PMC_VRIC1_SLPS0LVEN                 BIT(13)
 141 #define SPT_PMC_VRIC1_XTALSDQDIS                BIT(22)
 142 
 143 /* Cannonlake Power Management Controller register offsets */
 144 #define CNP_PMC_SLPS0_DBG_OFFSET                0x10B4
 145 #define CNP_PMC_PM_CFG_OFFSET                   0x1818
 146 #define CNP_PMC_SLP_S0_RES_COUNTER_OFFSET       0x193C
 147 #define CNP_PMC_LTR_IGNORE_OFFSET               0x1B0C
 148 /* Cannonlake: PGD PFET Enable Ack Status Register(s) start */
 149 #define CNP_PMC_HOST_PPFEAR0A                   0x1D90
 150 
 151 #define CNP_PMC_LATCH_SLPS0_EVENTS              BIT(31)
 152 
 153 #define CNP_PMC_MMIO_REG_LEN                    0x2000
 154 #define CNP_PPFEAR_NUM_ENTRIES                  8
 155 #define CNP_PMC_READ_DISABLE_BIT                22
 156 #define CNP_NUM_IP_IGN_ALLOWED                  19
 157 #define CNP_PMC_LTR_CUR_PLT                     0x1B50
 158 #define CNP_PMC_LTR_CUR_ASLT                    0x1B54
 159 #define CNP_PMC_LTR_SPA                         0x1B60
 160 #define CNP_PMC_LTR_SPB                         0x1B64
 161 #define CNP_PMC_LTR_SATA                        0x1B68
 162 #define CNP_PMC_LTR_GBE                         0x1B6C
 163 #define CNP_PMC_LTR_XHCI                        0x1B70
 164 #define CNP_PMC_LTR_RESERVED                    0x1B74
 165 #define CNP_PMC_LTR_ME                          0x1B78
 166 #define CNP_PMC_LTR_EVA                         0x1B7C
 167 #define CNP_PMC_LTR_SPC                         0x1B80
 168 #define CNP_PMC_LTR_AZ                          0x1B84
 169 #define CNP_PMC_LTR_LPSS                        0x1B8C
 170 #define CNP_PMC_LTR_CAM                         0x1B90
 171 #define CNP_PMC_LTR_SPD                         0x1B94
 172 #define CNP_PMC_LTR_SPE                         0x1B98
 173 #define CNP_PMC_LTR_ESPI                        0x1B9C
 174 #define CNP_PMC_LTR_SCC                         0x1BA0
 175 #define CNP_PMC_LTR_ISH                         0x1BA4
 176 #define CNP_PMC_LTR_CNV                         0x1BF0
 177 #define CNP_PMC_LTR_EMMC                        0x1BF4
 178 #define CNP_PMC_LTR_UFSX2                       0x1BF8
 179 
 180 #define LTR_DECODED_VAL                         GENMASK(9, 0)
 181 #define LTR_DECODED_SCALE                       GENMASK(12, 10)
 182 #define LTR_REQ_SNOOP                           BIT(15)
 183 #define LTR_REQ_NONSNOOP                        BIT(31)
 184 
 185 #define ICL_PPFEAR_NUM_ENTRIES                  9
 186 #define ICL_NUM_IP_IGN_ALLOWED                  20
 187 #define ICL_PMC_LTR_WIGIG                       0x1BFC
 188 
 189 struct pmc_bit_map {
 190         const char *name;
 191         u32 bit_mask;
 192 };
 193 
 194 /**
 195  * struct pmc_reg_map - Structure used to define parameter unique to a
 196                         PCH family
 197  * @pfear_sts:          Maps name of IP block to PPFEAR* bit
 198  * @mphy_sts:           Maps name of MPHY lane to MPHY status lane status bit
 199  * @pll_sts:            Maps name of PLL to corresponding bit status
 200  * @slps0_dbg_maps:     Array of SLP_S0_DBG* registers containing debug info
 201  * @ltr_show_sts:       Maps PCH IP Names to their MMIO register offsets
 202  * @slp_s0_offset:      PWRMBASE offset to read SLP_S0 residency
 203  * @ltr_ignore_offset:  PWRMBASE offset to read/write LTR ignore bit
 204  * @regmap_length:      Length of memory to map from PWRMBASE address to access
 205  * @ppfear0_offset:     PWRMBASE offset to to read PPFEAR*
 206  * @ppfear_buckets:     Number of 8 bits blocks to read all IP blocks from
 207  *                      PPFEAR
 208  * @pm_cfg_offset:      PWRMBASE offset to PM_CFG register
 209  * @pm_read_disable_bit: Bit index to read PMC_READ_DISABLE
 210  * @slps0_dbg_offset:   PWRMBASE offset to SLP_S0_DEBUG_REG*
 211  *
 212  * Each PCH has unique set of register offsets and bit indexes. This structure
 213  * captures them to have a common implementation.
 214  */
 215 struct pmc_reg_map {
 216         const struct pmc_bit_map *pfear_sts;
 217         const struct pmc_bit_map *mphy_sts;
 218         const struct pmc_bit_map *pll_sts;
 219         const struct pmc_bit_map **slps0_dbg_maps;
 220         const struct pmc_bit_map *ltr_show_sts;
 221         const struct pmc_bit_map *msr_sts;
 222         const u32 slp_s0_offset;
 223         const u32 ltr_ignore_offset;
 224         const int regmap_length;
 225         const u32 ppfear0_offset;
 226         const int ppfear_buckets;
 227         const u32 pm_cfg_offset;
 228         const int pm_read_disable_bit;
 229         const u32 slps0_dbg_offset;
 230         const u32 ltr_ignore_max;
 231         const u32 pm_vric1_offset;
 232 };
 233 
 234 /**
 235  * struct pmc_dev - pmc device structure
 236  * @base_addr:          contains pmc base address
 237  * @regbase:            pointer to io-remapped memory location
 238  * @map:                pointer to pmc_reg_map struct that contains platform
 239  *                      specific attributes
 240  * @dbgfs_dir:          path to debugfs interface
 241  * @pmc_xram_read_bit:  flag to indicate whether PMC XRAM shadow registers
 242  *                      used to read MPHY PG and PLL status are available
 243  * @mutex_lock:         mutex to complete one transcation
 244  * @check_counters:     On resume, check if counters are getting incremented
 245  * @pc10_counter:       PC10 residency counter
 246  * @s0ix_counter:       S0ix residency (step adjusted)
 247  *
 248  * pmc_dev contains info about power management controller device.
 249  */
 250 struct pmc_dev {
 251         u32 base_addr;
 252         void __iomem *regbase;
 253         const struct pmc_reg_map *map;
 254 #if IS_ENABLED(CONFIG_DEBUG_FS)
 255         struct dentry *dbgfs_dir;
 256 #endif /* CONFIG_DEBUG_FS */
 257         int pmc_xram_read_bit;
 258         struct mutex lock; /* generic mutex lock for PMC Core */
 259 
 260         bool check_counters; /* Check for counter increments on resume */
 261         u64 pc10_counter;
 262         u64 s0ix_counter;
 263 };
 264 
 265 #endif /* PMC_CORE_H */

/* [<][>][^][v][top][bottom][index][help] */