platform/x86: intel_pmc_core: Add CannonLake PCH support
This adds support for Cannonlake PCH which is used by Cannonlake and Coffeelake SoCs. Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> Signed-off-by: Rajneesh Bhardwaj <rajneesh.bhardwaj@intel.com> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
This commit is contained in:
parent
850eb9fba3
commit
291101f6a7
@ -122,6 +122,90 @@ static const struct pmc_reg_map spt_reg_map = {
|
|||||||
.pm_read_disable_bit = SPT_PMC_READ_DISABLE_BIT,
|
.pm_read_disable_bit = SPT_PMC_READ_DISABLE_BIT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Cannonlake: PGD PFET Enable Ack Status Register(s) bitmap */
|
||||||
|
static const struct pmc_bit_map cnp_pfear_map[] = {
|
||||||
|
{"PMC", BIT(0)},
|
||||||
|
{"OPI-DMI", BIT(1)},
|
||||||
|
{"SPI/eSPI", BIT(2)},
|
||||||
|
{"XHCI", BIT(3)},
|
||||||
|
{"SPA", BIT(4)},
|
||||||
|
{"SPB", BIT(5)},
|
||||||
|
{"SPC", BIT(6)},
|
||||||
|
{"GBE", BIT(7)},
|
||||||
|
|
||||||
|
{"SATA", BIT(0)},
|
||||||
|
{"HDA_PGD0", BIT(1)},
|
||||||
|
{"HDA_PGD1", BIT(2)},
|
||||||
|
{"HDA_PGD2", BIT(3)},
|
||||||
|
{"HDA_PGD3", BIT(4)},
|
||||||
|
{"SPD", BIT(5)},
|
||||||
|
{"LPSS", BIT(6)},
|
||||||
|
{"LPC", BIT(7)},
|
||||||
|
|
||||||
|
{"SMB", BIT(0)},
|
||||||
|
{"ISH", BIT(1)},
|
||||||
|
{"P2SB", BIT(2)},
|
||||||
|
{"NPK_VNN", BIT(3)},
|
||||||
|
{"SDX", BIT(4)},
|
||||||
|
{"SPE", BIT(5)},
|
||||||
|
{"Fuse", BIT(6)},
|
||||||
|
{"Res_23", BIT(7)},
|
||||||
|
|
||||||
|
{"CSME_FSC", BIT(0)},
|
||||||
|
{"USB3_OTG", BIT(1)},
|
||||||
|
{"EXI", BIT(2)},
|
||||||
|
{"CSE", BIT(3)},
|
||||||
|
{"csme_kvm", BIT(4)},
|
||||||
|
{"csme_pmt", BIT(5)},
|
||||||
|
{"csme_clink", BIT(6)},
|
||||||
|
{"csme_ptio", BIT(7)},
|
||||||
|
|
||||||
|
{"csme_usbr", BIT(0)},
|
||||||
|
{"csme_susram", BIT(1)},
|
||||||
|
{"csme_smt1", BIT(2)},
|
||||||
|
{"CSME_SMT4", BIT(3)},
|
||||||
|
{"csme_sms2", BIT(4)},
|
||||||
|
{"csme_sms1", BIT(5)},
|
||||||
|
{"csme_rtc", BIT(6)},
|
||||||
|
{"csme_psf", BIT(7)},
|
||||||
|
|
||||||
|
{"SBR0", BIT(0)},
|
||||||
|
{"SBR1", BIT(1)},
|
||||||
|
{"SBR2", BIT(2)},
|
||||||
|
{"SBR3", BIT(3)},
|
||||||
|
{"SBR4", BIT(4)},
|
||||||
|
{"SBR5", BIT(5)},
|
||||||
|
{"CSME_PECI", BIT(6)},
|
||||||
|
{"PSF1", BIT(7)},
|
||||||
|
|
||||||
|
{"PSF2", BIT(0)},
|
||||||
|
{"PSF3", BIT(1)},
|
||||||
|
{"PSF4", BIT(2)},
|
||||||
|
{"CNVI", BIT(3)},
|
||||||
|
{"UFS0", BIT(4)},
|
||||||
|
{"EMMC", BIT(5)},
|
||||||
|
{"Res_6", BIT(6)},
|
||||||
|
{"SBR6", BIT(7)},
|
||||||
|
|
||||||
|
{"SBR7", BIT(0)},
|
||||||
|
{"NPK_AON", BIT(1)},
|
||||||
|
{"HDA_PGD4", BIT(2)},
|
||||||
|
{"HDA_PGD5", BIT(3)},
|
||||||
|
{"HDA_PGD6", BIT(4)},
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct pmc_reg_map cnp_reg_map = {
|
||||||
|
.pfear_sts = cnp_pfear_map,
|
||||||
|
.slp_s0_offset = CNP_PMC_SLP_S0_RES_COUNTER_OFFSET,
|
||||||
|
.ltr_ignore_offset = CNP_PMC_LTR_IGNORE_OFFSET,
|
||||||
|
.regmap_length = CNP_PMC_MMIO_REG_LEN,
|
||||||
|
.ppfear0_offset = CNP_PMC_HOST_PPFEAR0A,
|
||||||
|
.ppfear_buckets = CNP_PPFEAR_NUM_ENTRIES,
|
||||||
|
.pm_cfg_offset = CNP_PMC_PM_CFG_OFFSET,
|
||||||
|
.pm_read_disable_bit = CNP_PMC_READ_DISABLE_BIT,
|
||||||
|
};
|
||||||
|
|
||||||
static inline u8 pmc_core_reg_read_byte(struct pmc_dev *pmcdev, int offset)
|
static inline u8 pmc_core_reg_read_byte(struct pmc_dev *pmcdev, int offset)
|
||||||
{
|
{
|
||||||
return readb(pmcdev->regbase + offset);
|
return readb(pmcdev->regbase + offset);
|
||||||
@ -447,6 +531,7 @@ static const struct x86_cpu_id intel_pmc_core_ids[] = {
|
|||||||
ICPU(INTEL_FAM6_SKYLAKE_DESKTOP, &spt_reg_map),
|
ICPU(INTEL_FAM6_SKYLAKE_DESKTOP, &spt_reg_map),
|
||||||
ICPU(INTEL_FAM6_KABYLAKE_MOBILE, &spt_reg_map),
|
ICPU(INTEL_FAM6_KABYLAKE_MOBILE, &spt_reg_map),
|
||||||
ICPU(INTEL_FAM6_KABYLAKE_DESKTOP, &spt_reg_map),
|
ICPU(INTEL_FAM6_KABYLAKE_DESKTOP, &spt_reg_map),
|
||||||
|
ICPU(INTEL_FAM6_CANNONLAKE_MOBILE, &cnp_reg_map),
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -121,6 +121,17 @@ enum ppfear_regs {
|
|||||||
#define SPT_PMC_BIT_MPHY_CMN_LANE2 BIT(2)
|
#define SPT_PMC_BIT_MPHY_CMN_LANE2 BIT(2)
|
||||||
#define SPT_PMC_BIT_MPHY_CMN_LANE3 BIT(3)
|
#define SPT_PMC_BIT_MPHY_CMN_LANE3 BIT(3)
|
||||||
|
|
||||||
|
/* Cannonlake Power Management Controller register offsets */
|
||||||
|
#define CNP_PMC_SLP_S0_RES_COUNTER_OFFSET 0x193C
|
||||||
|
#define CNP_PMC_LTR_IGNORE_OFFSET 0x1B0C
|
||||||
|
#define CNP_PMC_PM_CFG_OFFSET 0x1818
|
||||||
|
/* Cannonlake: PGD PFET Enable Ack Status Register(s) start */
|
||||||
|
#define CNP_PMC_HOST_PPFEAR0A 0x1D90
|
||||||
|
|
||||||
|
#define CNP_PMC_MMIO_REG_LEN 0x2000
|
||||||
|
#define CNP_PPFEAR_NUM_ENTRIES 8
|
||||||
|
#define CNP_PMC_READ_DISABLE_BIT 22
|
||||||
|
|
||||||
struct pmc_bit_map {
|
struct pmc_bit_map {
|
||||||
const char *name;
|
const char *name;
|
||||||
u32 bit_mask;
|
u32 bit_mask;
|
||||||
|
Loading…
Reference in New Issue
Block a user