|
@@ -110,6 +110,13 @@ static const struct pmc_reg_map spt_reg_map = {
|
|
.pfear_sts = spt_pfear_map,
|
|
.pfear_sts = spt_pfear_map,
|
|
.mphy_sts = spt_mphy_map,
|
|
.mphy_sts = spt_mphy_map,
|
|
.pll_sts = spt_pll_map,
|
|
.pll_sts = spt_pll_map,
|
|
|
|
+ .slp_s0_offset = SPT_PMC_SLP_S0_RES_COUNTER_OFFSET,
|
|
|
|
+ .ltr_ignore_offset = SPT_PMC_LTR_IGNORE_OFFSET,
|
|
|
|
+ .regmap_length = SPT_PMC_MMIO_REG_LEN,
|
|
|
|
+ .ppfear0_offset = SPT_PMC_XRAM_PPFEAR0A,
|
|
|
|
+ .ppfear_buckets = SPT_PPFEAR_NUM_ENTRIES,
|
|
|
|
+ .pm_cfg_offset = SPT_PMC_PM_CFG_OFFSET,
|
|
|
|
+ .pm_read_disable_bit = SPT_PMC_READ_DISABLE_BIT,
|
|
};
|
|
};
|
|
|
|
|
|
static const struct pci_device_id pmc_pci_ids[] = {
|
|
static const struct pci_device_id pmc_pci_ids[] = {
|
|
@@ -157,12 +164,13 @@ static inline u32 pmc_core_adjust_slp_s0_step(u32 value)
|
|
int intel_pmc_slp_s0_counter_read(u32 *data)
|
|
int intel_pmc_slp_s0_counter_read(u32 *data)
|
|
{
|
|
{
|
|
struct pmc_dev *pmcdev = &pmc;
|
|
struct pmc_dev *pmcdev = &pmc;
|
|
|
|
+ const struct pmc_reg_map *map = pmcdev->map;
|
|
u32 value;
|
|
u32 value;
|
|
|
|
|
|
if (!pmcdev->has_slp_s0_res)
|
|
if (!pmcdev->has_slp_s0_res)
|
|
return -EACCES;
|
|
return -EACCES;
|
|
|
|
|
|
- value = pmc_core_reg_read(pmcdev, SPT_PMC_SLP_S0_RES_COUNTER_OFFSET);
|
|
|
|
|
|
+ value = pmc_core_reg_read(pmcdev, map->slp_s0_offset);
|
|
*data = pmc_core_adjust_slp_s0_step(value);
|
|
*data = pmc_core_adjust_slp_s0_step(value);
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
@@ -172,9 +180,10 @@ EXPORT_SYMBOL_GPL(intel_pmc_slp_s0_counter_read);
|
|
static int pmc_core_dev_state_get(void *data, u64 *val)
|
|
static int pmc_core_dev_state_get(void *data, u64 *val)
|
|
{
|
|
{
|
|
struct pmc_dev *pmcdev = data;
|
|
struct pmc_dev *pmcdev = data;
|
|
|
|
+ const struct pmc_reg_map *map = pmcdev->map;
|
|
u32 value;
|
|
u32 value;
|
|
|
|
|
|
- value = pmc_core_reg_read(pmcdev, SPT_PMC_SLP_S0_RES_COUNTER_OFFSET);
|
|
|
|
|
|
+ value = pmc_core_reg_read(pmcdev, map->slp_s0_offset);
|
|
*val = pmc_core_adjust_slp_s0_step(value);
|
|
*val = pmc_core_adjust_slp_s0_step(value);
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
@@ -187,8 +196,8 @@ static int pmc_core_check_read_lock_bit(void)
|
|
struct pmc_dev *pmcdev = &pmc;
|
|
struct pmc_dev *pmcdev = &pmc;
|
|
u32 value;
|
|
u32 value;
|
|
|
|
|
|
- value = pmc_core_reg_read(pmcdev, SPT_PMC_PM_CFG_OFFSET);
|
|
|
|
- return value & BIT(SPT_PMC_READ_DISABLE_BIT);
|
|
|
|
|
|
+ value = pmc_core_reg_read(pmcdev, pmcdev->map->pm_cfg_offset);
|
|
|
|
+ return value & BIT(pmcdev->map->pm_read_disable_bit);
|
|
}
|
|
}
|
|
|
|
|
|
#if IS_ENABLED(CONFIG_DEBUG_FS)
|
|
#if IS_ENABLED(CONFIG_DEBUG_FS)
|
|
@@ -204,12 +213,13 @@ static int pmc_core_ppfear_sts_show(struct seq_file *s, void *unused)
|
|
{
|
|
{
|
|
struct pmc_dev *pmcdev = s->private;
|
|
struct pmc_dev *pmcdev = s->private;
|
|
const struct pmc_bit_map *map = pmcdev->map->pfear_sts;
|
|
const struct pmc_bit_map *map = pmcdev->map->pfear_sts;
|
|
- u8 pf_regs[NUM_ENTRIES];
|
|
|
|
|
|
+ u8 pf_regs[PPFEAR_MAX_NUM_ENTRIES];
|
|
int index, iter;
|
|
int index, iter;
|
|
|
|
|
|
- iter = SPT_PMC_XRAM_PPFEAR0A;
|
|
|
|
|
|
+ iter = pmcdev->map->ppfear0_offset;
|
|
|
|
|
|
- for (index = 0; index < NUM_ENTRIES; index++, iter++)
|
|
|
|
|
|
+ for (index = 0; index < pmcdev->map->ppfear_buckets &&
|
|
|
|
+ index < PPFEAR_MAX_NUM_ENTRIES; index++, iter++)
|
|
pf_regs[index] = pmc_core_reg_read_byte(pmcdev, iter);
|
|
pf_regs[index] = pmc_core_reg_read_byte(pmcdev, iter);
|
|
|
|
|
|
for (index = 0; map[index].name; index++)
|
|
for (index = 0; map[index].name; index++)
|
|
@@ -376,6 +386,7 @@ static ssize_t pmc_core_ltr_ignore_write(struct file *file, const char __user
|
|
*userbuf, size_t count, loff_t *ppos)
|
|
*userbuf, size_t count, loff_t *ppos)
|
|
{
|
|
{
|
|
struct pmc_dev *pmcdev = &pmc;
|
|
struct pmc_dev *pmcdev = &pmc;
|
|
|
|
+ const struct pmc_reg_map *map = pmcdev->map;
|
|
u32 val, buf_size, fd;
|
|
u32 val, buf_size, fd;
|
|
int err = 0;
|
|
int err = 0;
|
|
|
|
|
|
@@ -392,9 +403,9 @@ static ssize_t pmc_core_ltr_ignore_write(struct file *file, const char __user
|
|
goto out_unlock;
|
|
goto out_unlock;
|
|
}
|
|
}
|
|
|
|
|
|
- fd = pmc_core_reg_read(pmcdev, SPT_PMC_LTR_IGNORE_OFFSET);
|
|
|
|
|
|
+ fd = pmc_core_reg_read(pmcdev, map->ltr_ignore_offset);
|
|
fd |= (1U << val);
|
|
fd |= (1U << val);
|
|
- pmc_core_reg_write(pmcdev, SPT_PMC_LTR_IGNORE_OFFSET, fd);
|
|
|
|
|
|
+ pmc_core_reg_write(pmcdev, map->ltr_ignore_offset, fd);
|
|
|
|
|
|
out_unlock:
|
|
out_unlock:
|
|
mutex_unlock(&pmcdev->lock);
|
|
mutex_unlock(&pmcdev->lock);
|
|
@@ -530,8 +541,8 @@ static int pmc_core_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
|
}
|
|
}
|
|
|
|
|
|
mutex_init(&pmcdev->lock);
|
|
mutex_init(&pmcdev->lock);
|
|
- pmcdev->pmc_xram_read_bit = pmc_core_check_read_lock_bit();
|
|
|
|
pmcdev->map = map;
|
|
pmcdev->map = map;
|
|
|
|
+ pmcdev->pmc_xram_read_bit = pmc_core_check_read_lock_bit();
|
|
|
|
|
|
err = pmc_core_dbgfs_register(pmcdev);
|
|
err = pmc_core_dbgfs_register(pmcdev);
|
|
if (err < 0)
|
|
if (err < 0)
|