Unverified Commit 45fa1a0d authored by Xi Pardee's avatar Xi Pardee Committed by Ilpo Järvinen
Browse files

platform/x86/intel/pmc: Remove simple init functions



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: default avatarXi Pardee <xi.pardee@linux.intel.com>
Link: https://lore.kernel.org/r/20250207225615.401235-5-xi.pardee@linux.intel.com


Reviewed-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
parent ac6bef0d
Loading
Loading
Loading
Loading
+1 −6
Original line number Diff line number Diff line
@@ -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);
}
+8 −7
Original line number Diff line number Diff line
@@ -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);
}
+1 −5
Original line number Diff line number Diff line
@@ -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);
}
+33 −28
Original line number Diff line number Diff line
@@ -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),
	{}
};

@@ -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;

@@ -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);
@@ -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;
+12 −9
Original line number Diff line number Diff line
@@ -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;
@@ -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[];
@@ -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);
Loading