Skip to content

Commit 025f26d

Browse files
gkammelajwrdegoede
authored andcommitted
platform/x86: intel_pmc_core: Fix the slp_s0 counter displayed value
slp_s0 counter value displayed via debugfs interface is calculated by multiplying the granularity for crystal oscillator tick as 100us with the value read from using slp_s0 offset. But the granularity of the tick varies from platform to platform and it needs to be fixed. Hence, specify granularity of the tick for each platform, so that the value of the slp_s0 counter is accurate. Signed-off-by: Gayatri Kammela <gayatri.kammela@intel.com> Signed-off-by: David E. Box <david.e.box@linux.intel.com> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> Link: https://lore.kernel.org/r/20201006224702.12697-4-david.e.box@linux.intel.com Signed-off-by: Hans de Goede <hdegoede@redhat.com>
1 parent 652036b commit 025f26d

2 files changed

Lines changed: 11 additions & 4 deletions

File tree

drivers/platform/x86/intel_pmc_core.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ static const struct pmc_reg_map spt_reg_map = {
154154
.ltr_show_sts = spt_ltr_show_map,
155155
.msr_sts = msr_map,
156156
.slp_s0_offset = SPT_PMC_SLP_S0_RES_COUNTER_OFFSET,
157+
.slp_s0_res_counter_step = SPT_PMC_SLP_S0_RES_COUNTER_STEP,
157158
.ltr_ignore_offset = SPT_PMC_LTR_IGNORE_OFFSET,
158159
.regmap_length = SPT_PMC_MMIO_REG_LEN,
159160
.ppfear0_offset = SPT_PMC_XRAM_PPFEAR0A,
@@ -380,6 +381,7 @@ static const struct pmc_bit_map cnp_ltr_show_map[] = {
380381
static const struct pmc_reg_map cnp_reg_map = {
381382
.pfear_sts = ext_cnp_pfear_map,
382383
.slp_s0_offset = CNP_PMC_SLP_S0_RES_COUNTER_OFFSET,
384+
.slp_s0_res_counter_step = SPT_PMC_SLP_S0_RES_COUNTER_STEP,
383385
.slps0_dbg_maps = cnp_slps0_dbg_maps,
384386
.ltr_show_sts = cnp_ltr_show_map,
385387
.msr_sts = msr_map,
@@ -396,6 +398,7 @@ static const struct pmc_reg_map cnp_reg_map = {
396398
static const struct pmc_reg_map icl_reg_map = {
397399
.pfear_sts = ext_icl_pfear_map,
398400
.slp_s0_offset = CNP_PMC_SLP_S0_RES_COUNTER_OFFSET,
401+
.slp_s0_res_counter_step = ICL_PMC_SLP_S0_RES_COUNTER_STEP,
399402
.slps0_dbg_maps = cnp_slps0_dbg_maps,
400403
.ltr_show_sts = cnp_ltr_show_map,
401404
.msr_sts = msr_map,
@@ -558,6 +561,7 @@ static const struct pmc_bit_map *tgl_lpm_maps[] = {
558561
static const struct pmc_reg_map tgl_reg_map = {
559562
.pfear_sts = ext_tgl_pfear_map,
560563
.slp_s0_offset = CNP_PMC_SLP_S0_RES_COUNTER_OFFSET,
564+
.slp_s0_res_counter_step = TGL_PMC_SLP_S0_RES_COUNTER_STEP,
561565
.ltr_show_sts = cnp_ltr_show_map,
562566
.msr_sts = msr_map,
563567
.ltr_ignore_offset = CNP_PMC_LTR_IGNORE_OFFSET,
@@ -586,9 +590,9 @@ static inline void pmc_core_reg_write(struct pmc_dev *pmcdev, int reg_offset,
586590
writel(val, pmcdev->regbase + reg_offset);
587591
}
588592

589-
static inline u64 pmc_core_adjust_slp_s0_step(u32 value)
593+
static inline u64 pmc_core_adjust_slp_s0_step(struct pmc_dev *pmcdev, u32 value)
590594
{
591-
return (u64)value * SPT_PMC_SLP_S0_RES_COUNTER_STEP;
595+
return (u64)value * pmcdev->map->slp_s0_res_counter_step;
592596
}
593597

594598
static int pmc_core_dev_state_get(void *data, u64 *val)
@@ -598,7 +602,7 @@ static int pmc_core_dev_state_get(void *data, u64 *val)
598602
u32 value;
599603

600604
value = pmc_core_reg_read(pmcdev, map->slp_s0_offset);
601-
*val = pmc_core_adjust_slp_s0_step(value);
605+
*val = pmc_core_adjust_slp_s0_step(pmcdev, value);
602606

603607
return 0;
604608
}

drivers/platform/x86/intel_pmc_core.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
#define SPT_PMC_MPHY_CORE_STS_1 0x1142
3131
#define SPT_PMC_MPHY_COM_STS_0 0x1155
3232
#define SPT_PMC_MMIO_REG_LEN 0x1000
33-
#define SPT_PMC_SLP_S0_RES_COUNTER_STEP 0x64
33+
#define SPT_PMC_SLP_S0_RES_COUNTER_STEP 0x68
3434
#define PMC_BASE_ADDR_MASK ~(SPT_PMC_MMIO_REG_LEN - 1)
3535
#define MTPMC_MASK 0xffff0000
3636
#define PPFEAR_MAX_NUM_ENTRIES 12
@@ -185,8 +185,10 @@ enum ppfear_regs {
185185
#define ICL_PPFEAR_NUM_ENTRIES 9
186186
#define ICL_NUM_IP_IGN_ALLOWED 20
187187
#define ICL_PMC_LTR_WIGIG 0x1BFC
188+
#define ICL_PMC_SLP_S0_RES_COUNTER_STEP 0x64
188189

189190
#define TGL_NUM_IP_IGN_ALLOWED 22
191+
#define TGL_PMC_SLP_S0_RES_COUNTER_STEP 0x7A
190192

191193
/*
192194
* Tigerlake Power Management Controller register offsets
@@ -245,6 +247,7 @@ struct pmc_reg_map {
245247
const struct pmc_bit_map *msr_sts;
246248
const struct pmc_bit_map **lpm_sts;
247249
const u32 slp_s0_offset;
250+
const int slp_s0_res_counter_step;
248251
const u32 ltr_ignore_offset;
249252
const int regmap_length;
250253
const u32 ppfear0_offset;

0 commit comments

Comments
 (0)