Skip to content

Commit

Permalink
platform/x86/intel/pmc: Remove simple init functions
Browse files Browse the repository at this point in the history
Remove simple init functions to avoid duplicate code. Store
init function performing architecture specific action in the
corresponding pmc_dev_info structure. Replace init function
with pmc_dev_info structure in X86_MATCH_VFM() of core.c.

Signed-off-by: Xi Pardee <xi.pardee@linux.intel.com>
Link: https://lore.kernel.org/r/20250207225615.401235-5-xi.pardee@linux.intel.com
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
  • Loading branch information
Xi Pardee authored and Ilpo Järvinen committed Feb 10, 2025
1 parent ac6bef0 commit 45fa1a0
Show file tree
Hide file tree
Showing 10 changed files with 86 additions and 102 deletions.
7 changes: 1 addition & 6 deletions drivers/platform/x86/intel/pmc/adl.c
Original file line number Diff line number Diff line change
Expand Up @@ -311,13 +311,8 @@ const struct pmc_reg_map adl_reg_map = {
.pson_residency_counter_step = TGL_PSON_RES_COUNTER_STEP,
};

static struct pmc_dev_info adl_pmc_dev = {
struct pmc_dev_info adl_pmc_dev = {
.map = &adl_reg_map,
.suspend = cnl_suspend,
.resume = cnl_resume,
};

int adl_core_init(struct pmc_dev *pmcdev)
{
return generic_core_init(pmcdev, &adl_pmc_dev);
}
15 changes: 8 additions & 7 deletions drivers/platform/x86/intel/pmc/arl.c
Original file line number Diff line number Diff line change
Expand Up @@ -691,17 +691,18 @@ static int arl_resume(struct pmc_dev *pmcdev)
return cnl_resume(pmcdev);
}

static struct pmc_dev_info arl_pmc_dev = {
static int arl_core_init(struct pmc_dev *pmcdev, struct pmc_dev_info *pmc_dev_info)
{
arl_d3_fixup();
return generic_core_init(pmcdev, pmc_dev_info);
}

struct pmc_dev_info arl_pmc_dev = {
.pci_func = 0,
.dmu_guid = ARL_PMT_DMU_GUID,
.regmap_list = arl_pmc_info_list,
.map = &arl_socs_reg_map,
.suspend = cnl_suspend,
.resume = arl_resume,
.init = arl_core_init,
};

int arl_core_init(struct pmc_dev *pmcdev)
{
arl_d3_fixup();
return generic_core_init(pmcdev, &arl_pmc_dev);
}
6 changes: 1 addition & 5 deletions drivers/platform/x86/intel/pmc/cnp.c
Original file line number Diff line number Diff line change
Expand Up @@ -274,13 +274,9 @@ int cnl_resume(struct pmc_dev *pmcdev)
return pmc_core_resume_common(pmcdev);
}

static struct pmc_dev_info cnp_pmc_dev = {
struct pmc_dev_info cnp_pmc_dev = {
.map = &cnp_reg_map,
.suspend = cnl_suspend,
.resume = cnl_resume,
};

int cnp_core_init(struct pmc_dev *pmcdev)
{
return generic_core_init(pmcdev, &cnp_pmc_dev);
}
61 changes: 33 additions & 28 deletions drivers/platform/x86/intel/pmc/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1388,29 +1388,29 @@ int generic_core_init(struct pmc_dev *pmcdev, struct pmc_dev_info *pmc_dev_info)
}

static const struct x86_cpu_id intel_pmc_core_ids[] = {
X86_MATCH_VFM(INTEL_SKYLAKE_L, spt_core_init),
X86_MATCH_VFM(INTEL_SKYLAKE, spt_core_init),
X86_MATCH_VFM(INTEL_KABYLAKE_L, spt_core_init),
X86_MATCH_VFM(INTEL_KABYLAKE, spt_core_init),
X86_MATCH_VFM(INTEL_CANNONLAKE_L, cnp_core_init),
X86_MATCH_VFM(INTEL_ICELAKE_L, icl_core_init),
X86_MATCH_VFM(INTEL_ICELAKE_NNPI, icl_core_init),
X86_MATCH_VFM(INTEL_COMETLAKE, cnp_core_init),
X86_MATCH_VFM(INTEL_COMETLAKE_L, cnp_core_init),
X86_MATCH_VFM(INTEL_TIGERLAKE_L, tgl_l_core_init),
X86_MATCH_VFM(INTEL_TIGERLAKE, tgl_core_init),
X86_MATCH_VFM(INTEL_ATOM_TREMONT, tgl_l_core_init),
X86_MATCH_VFM(INTEL_ATOM_TREMONT_L, icl_core_init),
X86_MATCH_VFM(INTEL_ROCKETLAKE, tgl_core_init),
X86_MATCH_VFM(INTEL_ALDERLAKE_L, tgl_l_core_init),
X86_MATCH_VFM(INTEL_ATOM_GRACEMONT, tgl_l_core_init),
X86_MATCH_VFM(INTEL_ALDERLAKE, adl_core_init),
X86_MATCH_VFM(INTEL_RAPTORLAKE_P, tgl_l_core_init),
X86_MATCH_VFM(INTEL_RAPTORLAKE, adl_core_init),
X86_MATCH_VFM(INTEL_RAPTORLAKE_S, adl_core_init),
X86_MATCH_VFM(INTEL_METEORLAKE_L, mtl_core_init),
X86_MATCH_VFM(INTEL_ARROWLAKE, arl_core_init),
X86_MATCH_VFM(INTEL_LUNARLAKE_M, lnl_core_init),
X86_MATCH_VFM(INTEL_SKYLAKE_L, &spt_pmc_dev),
X86_MATCH_VFM(INTEL_SKYLAKE, &spt_pmc_dev),
X86_MATCH_VFM(INTEL_KABYLAKE_L, &spt_pmc_dev),
X86_MATCH_VFM(INTEL_KABYLAKE, &spt_pmc_dev),
X86_MATCH_VFM(INTEL_CANNONLAKE_L, &cnp_pmc_dev),
X86_MATCH_VFM(INTEL_ICELAKE_L, &icl_pmc_dev),
X86_MATCH_VFM(INTEL_ICELAKE_NNPI, &icl_pmc_dev),
X86_MATCH_VFM(INTEL_COMETLAKE, &cnp_pmc_dev),
X86_MATCH_VFM(INTEL_COMETLAKE_L, &cnp_pmc_dev),
X86_MATCH_VFM(INTEL_TIGERLAKE_L, &tgl_l_pmc_dev),
X86_MATCH_VFM(INTEL_TIGERLAKE, &tgl_pmc_dev),
X86_MATCH_VFM(INTEL_ATOM_TREMONT, &tgl_l_pmc_dev),
X86_MATCH_VFM(INTEL_ATOM_TREMONT_L, &icl_pmc_dev),
X86_MATCH_VFM(INTEL_ROCKETLAKE, &tgl_pmc_dev),
X86_MATCH_VFM(INTEL_ALDERLAKE_L, &tgl_l_pmc_dev),
X86_MATCH_VFM(INTEL_ATOM_GRACEMONT, &tgl_l_pmc_dev),
X86_MATCH_VFM(INTEL_ALDERLAKE, &adl_pmc_dev),
X86_MATCH_VFM(INTEL_RAPTORLAKE_P, &tgl_l_pmc_dev),
X86_MATCH_VFM(INTEL_RAPTORLAKE, &adl_pmc_dev),
X86_MATCH_VFM(INTEL_RAPTORLAKE_S, &adl_pmc_dev),
X86_MATCH_VFM(INTEL_METEORLAKE_L, &mtl_pmc_dev),
X86_MATCH_VFM(INTEL_ARROWLAKE, &arl_pmc_dev),
X86_MATCH_VFM(INTEL_LUNARLAKE_M, &lnl_pmc_dev),
{}
};

Expand Down Expand Up @@ -1494,7 +1494,7 @@ static int pmc_core_probe(struct platform_device *pdev)
static bool device_initialized;
struct pmc_dev *pmcdev;
const struct x86_cpu_id *cpu_id;
int (*core_init)(struct pmc_dev *pmcdev);
struct pmc_dev_info *pmc_dev_info;
struct pmc *primary_pmc;
int ret;

Expand All @@ -1514,7 +1514,7 @@ static int pmc_core_probe(struct platform_device *pdev)
if (!cpu_id)
return -ENODEV;

core_init = (int (*)(struct pmc_dev *))cpu_id->driver_data;
pmc_dev_info = (struct pmc_dev_info *)cpu_id->driver_data;

/* Primary PMC */
primary_pmc = devm_kzalloc(&pdev->dev, sizeof(*primary_pmc), GFP_KERNEL);
Expand All @@ -1536,11 +1536,16 @@ static int pmc_core_probe(struct platform_device *pdev)
* Sunrisepoint PCH regmap can't be used. Use Cannon Lake PCH regmap
* in this case.
*/
if (core_init == spt_core_init && !pci_dev_present(pmc_pci_ids))
core_init = cnp_core_init;
if (pmc_dev_info == &spt_pmc_dev && !pci_dev_present(pmc_pci_ids))
pmc_dev_info = &cnp_pmc_dev;

mutex_init(&pmcdev->lock);
ret = core_init(pmcdev);

if (pmc_dev_info->init)
ret = pmc_dev_info->init(pmcdev, pmc_dev_info);
else
ret = generic_core_init(pmcdev, pmc_dev_info);

if (ret) {
pmc_core_clean_structure(pdev);
return ret;
Expand Down
21 changes: 12 additions & 9 deletions drivers/platform/x86/intel/pmc/core.h
Original file line number Diff line number Diff line change
Expand Up @@ -446,6 +446,7 @@ enum pmc_index {
* specific attributes of the primary PMC
* @suspend: Function to perform platform specific suspend
* @resume: Function to perform platform specific resume
* @init: Function to perform platform specific init action
*/
struct pmc_dev_info {
u8 pci_func;
Expand All @@ -454,6 +455,7 @@ struct pmc_dev_info {
const struct pmc_reg_map *map;
void (*suspend)(struct pmc_dev *pmcdev);
int (*resume)(struct pmc_dev *pmcdev);
int (*init)(struct pmc_dev *pmcdev, struct pmc_dev_info *pmc_dev_info);
};

extern const struct pmc_bit_map msr_map[];
Expand Down Expand Up @@ -613,15 +615,16 @@ extern void pmc_core_set_device_d3(unsigned int device);
extern int pmc_core_ssram_init(struct pmc_dev *pmcdev, int func);

int generic_core_init(struct pmc_dev *pmcdev, struct pmc_dev_info *pmc_dev_info);
int spt_core_init(struct pmc_dev *pmcdev);
int cnp_core_init(struct pmc_dev *pmcdev);
int icl_core_init(struct pmc_dev *pmcdev);
int tgl_core_init(struct pmc_dev *pmcdev);
int tgl_l_core_init(struct pmc_dev *pmcdev);
int adl_core_init(struct pmc_dev *pmcdev);
int mtl_core_init(struct pmc_dev *pmcdev);
int arl_core_init(struct pmc_dev *pmcdev);
int lnl_core_init(struct pmc_dev *pmcdev);

extern struct pmc_dev_info spt_pmc_dev;
extern struct pmc_dev_info cnp_pmc_dev;
extern struct pmc_dev_info icl_pmc_dev;
extern struct pmc_dev_info tgl_l_pmc_dev;
extern struct pmc_dev_info tgl_pmc_dev;
extern struct pmc_dev_info adl_pmc_dev;
extern struct pmc_dev_info mtl_pmc_dev;
extern struct pmc_dev_info arl_pmc_dev;
extern struct pmc_dev_info lnl_pmc_dev;

void cnl_suspend(struct pmc_dev *pmcdev);
int cnl_resume(struct pmc_dev *pmcdev);
Expand Down
7 changes: 1 addition & 6 deletions drivers/platform/x86/intel/pmc/icl.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,6 @@ const struct pmc_reg_map icl_reg_map = {
.etr3_offset = ETR3_OFFSET,
};

static struct pmc_dev_info icl_pmc_dev = {
struct pmc_dev_info icl_pmc_dev = {
.map = &icl_reg_map,
};

int icl_core_init(struct pmc_dev *pmcdev)
{
return generic_core_init(pmcdev, &icl_pmc_dev);
}
15 changes: 8 additions & 7 deletions drivers/platform/x86/intel/pmc/lnl.c
Original file line number Diff line number Diff line change
Expand Up @@ -550,14 +550,15 @@ static int lnl_resume(struct pmc_dev *pmcdev)
return cnl_resume(pmcdev);
}

static struct pmc_dev_info lnl_pmc_dev = {
static int lnl_core_init(struct pmc_dev *pmcdev, struct pmc_dev_info *pmc_dev_info)
{
lnl_d3_fixup();
return generic_core_init(pmcdev, pmc_dev_info);
}

struct pmc_dev_info lnl_pmc_dev = {
.map = &lnl_socm_reg_map,
.suspend = cnl_suspend,
.resume = lnl_resume,
.init = lnl_core_init,
};

int lnl_core_init(struct pmc_dev *pmcdev)
{
lnl_d3_fixup();
return generic_core_init(pmcdev, &lnl_pmc_dev);
}
15 changes: 8 additions & 7 deletions drivers/platform/x86/intel/pmc/mtl.c
Original file line number Diff line number Diff line change
Expand Up @@ -990,17 +990,18 @@ static int mtl_resume(struct pmc_dev *pmcdev)
return cnl_resume(pmcdev);
}

static struct pmc_dev_info mtl_pmc_dev = {
static int mtl_core_init(struct pmc_dev *pmcdev, struct pmc_dev_info *pmc_dev_info)
{
mtl_d3_fixup();
return generic_core_init(pmcdev, pmc_dev_info);
}

struct pmc_dev_info mtl_pmc_dev = {
.pci_func = 2,
.dmu_guid = MTL_PMT_DMU_GUID,
.regmap_list = mtl_pmc_info_list,
.map = &mtl_socm_reg_map,
.suspend = cnl_suspend,
.resume = mtl_resume,
.init = mtl_core_init,
};

int mtl_core_init(struct pmc_dev *pmcdev)
{
mtl_d3_fixup();
return generic_core_init(pmcdev, &mtl_pmc_dev);
}
7 changes: 1 addition & 6 deletions drivers/platform/x86/intel/pmc/spt.c
Original file line number Diff line number Diff line change
Expand Up @@ -134,11 +134,6 @@ const struct pmc_reg_map spt_reg_map = {
.pm_vric1_offset = SPT_PMC_VRIC1_OFFSET,
};

static struct pmc_dev_info spt_pmc_dev = {
struct pmc_dev_info spt_pmc_dev = {
.map = &spt_reg_map,
};

int spt_core_init(struct pmc_dev *pmcdev)
{
return generic_core_init(pmcdev, &spt_pmc_dev);
}
34 changes: 13 additions & 21 deletions drivers/platform/x86/intel/pmc/tgl.c
Original file line number Diff line number Diff line change
Expand Up @@ -285,19 +285,7 @@ void pmc_core_get_tgl_lpm_reqs(struct platform_device *pdev)
ACPI_FREE(out_obj);
}

static struct pmc_dev_info tgl_l_pmc_dev = {
.map = &tgl_reg_map,
.suspend = cnl_suspend,
.resume = cnl_resume,
};

static struct pmc_dev_info tgl_pmc_dev = {
.map = &tgl_h_reg_map,
.suspend = cnl_suspend,
.resume = cnl_resume,
};

static int tgl_core_generic_init(struct pmc_dev *pmcdev, struct pmc_dev_info *pmc_dev_info)
static int tgl_core_init(struct pmc_dev *pmcdev, struct pmc_dev_info *pmc_dev_info)
{
int ret;

Expand All @@ -309,12 +297,16 @@ static int tgl_core_generic_init(struct pmc_dev *pmcdev, struct pmc_dev_info *pm
return 0;
}

int tgl_l_core_init(struct pmc_dev *pmcdev)
{
return tgl_core_generic_init(pmcdev, &tgl_l_pmc_dev);
}
struct pmc_dev_info tgl_l_pmc_dev = {
.map = &tgl_reg_map,
.suspend = cnl_suspend,
.resume = cnl_resume,
.init = tgl_core_init,
};

int tgl_core_init(struct pmc_dev *pmcdev)
{
return tgl_core_generic_init(pmcdev, &tgl_pmc_dev);
}
struct pmc_dev_info tgl_pmc_dev = {
.map = &tgl_h_reg_map,
.suspend = cnl_suspend,
.resume = cnl_resume,
.init = tgl_core_init,
};

0 comments on commit 45fa1a0

Please sign in to comment.