platform/x86/intel/pmc: Remove simple init functions
authorXi Pardee <xi.pardee@linux.intel.com>
Fri, 7 Feb 2025 22:56:10 +0000 (14:56 -0800)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Mon, 10 Feb 2025 11:14:48 +0000 (13:14 +0200)
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>
drivers/platform/x86/intel/pmc/adl.c
drivers/platform/x86/intel/pmc/arl.c
drivers/platform/x86/intel/pmc/cnp.c
drivers/platform/x86/intel/pmc/core.c
drivers/platform/x86/intel/pmc/core.h
drivers/platform/x86/intel/pmc/icl.c
drivers/platform/x86/intel/pmc/lnl.c
drivers/platform/x86/intel/pmc/mtl.c
drivers/platform/x86/intel/pmc/spt.c
drivers/platform/x86/intel/pmc/tgl.c

index ac37f4e..de361a3 100644 (file)
@@ -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);
-}
index 91f8e9a..f57da4e 100644 (file)
@@ -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);
-}
index 6d26805..f147ec5 100644 (file)
@@ -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);
-}
index d1cbf49..628cb22 100644 (file)
@@ -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;
index 7c9e999..b004b78 100644 (file)
@@ -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);
index 0e4565d..6952c8e 100644 (file)
@@ -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);
-}
index 1142e65..5a78807 100644 (file)
@@ -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);
-}
index 28ea8fe..705b7e1 100644 (file)
@@ -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);
-}
index ab5f66f..956b2ec 100644 (file)
@@ -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);
-}
index bc3cb94..758bd8d 100644 (file)
@@ -285,19 +285,7 @@ free_acpi_obj:
        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;
 
@@ -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,
+};