]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
platform/x86:intel/pmc: Relocate lpm_req_guid to pmc_reg_map
authorXi Pardee <xi.pardee@linux.intel.com>
Tue, 14 Oct 2025 21:45:33 +0000 (14:45 -0700)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Wed, 15 Oct 2025 09:21:17 +0000 (12:21 +0300)
Relocate the lpm_req_guid field from pmc_info to pmc_reg_map. The
previous implementation stored lpm_req_guid in pmc_info and relied
on pmc_core_find_guid() to retrieve the correct GUID, which was
unnecessary. Since lpm_req_guid is specific to PMC, pmc_reg_map is
a more appropriate location for this information.

Signed-off-by: Xi Pardee <xi.pardee@linux.intel.com>
Link: https://patch.msgid.link/20251014214548.629023-6-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/arl.c
drivers/platform/x86/intel/pmc/core.c
drivers/platform/x86/intel/pmc/core.h
drivers/platform/x86/intel/pmc/lnl.c
drivers/platform/x86/intel/pmc/mtl.c
drivers/platform/x86/intel/pmc/ptl.c

index c0698ef35df89bf4f6092b8f329b53e491c87448..eb23bc68340ab8727556661e34e60258fa498fb6 100644 (file)
@@ -281,6 +281,7 @@ static const struct pmc_reg_map arl_socs_reg_map = {
        .etr3_offset = ETR3_OFFSET,
        .pson_residency_offset = TGL_PSON_RESIDENCY_OFFSET,
        .pson_residency_counter_step = TGL_PSON_RES_COUNTER_STEP,
+       .lpm_req_guid = SOCS_LPM_REQ_GUID,
 };
 
 static const struct pmc_bit_map arl_pchs_ltr_show_map[] = {
@@ -648,26 +649,23 @@ static const struct pmc_reg_map arl_pchs_reg_map = {
        .lpm_num_maps = ADL_LPM_NUM_MAPS,
        .lpm_reg_index = ARL_LPM_REG_INDEX,
        .etr3_offset = ETR3_OFFSET,
+       .lpm_req_guid = PCHS_LPM_REQ_GUID,
 };
 
 static struct pmc_info arl_pmc_info_list[] = {
        {
-               .guid   = IOEP_LPM_REQ_GUID,
                .devid  = PMC_DEVID_ARL_IOEP,
                .map    = &mtl_ioep_reg_map,
        },
        {
-               .guid   = SOCS_LPM_REQ_GUID,
                .devid  = PMC_DEVID_ARL_SOCS,
                .map    = &arl_socs_reg_map,
        },
        {
-               .guid   = PCHS_LPM_REQ_GUID,
                .devid  = PMC_DEVID_ARL_PCHS,
                .map    = &arl_pchs_reg_map,
        },
        {
-               .guid   = SOCM_LPM_REQ_GUID,
                .devid  = PMC_DEVID_ARL_SOCM,
                .map    = &mtl_socm_reg_map,
        },
index 5f58dfa989ad5ccf455903ece990a08dc8f86d65..e272c971d73a5389d221fb2647474d0f77df6be7 100644 (file)
@@ -1444,15 +1444,6 @@ static void pmc_core_dbgfs_register(struct pmc_dev *pmcdev, struct pmc_dev_info
        }
 }
 
-static u32 pmc_core_find_guid(struct pmc_info *list, const struct pmc_reg_map *map)
-{
-       for (; list->map; ++list)
-               if (list->map == map)
-                       return list->guid;
-
-       return 0;
-}
-
 /*
  * This function retrieves low power mode requirement data from PMC Low
  * Power Mode (LPM) table.
@@ -1568,7 +1559,6 @@ static int pmc_core_get_telem_info(struct pmc_dev *pmcdev, struct pmc_dev_info *
        struct pci_dev *pcidev __free(pci_dev_put) = NULL;
        struct telem_endpoint *ep;
        unsigned int pmc_idx;
-       u32 guid;
        int ret;
 
        pcidev = pci_get_domain_bus_and_slot(0, 0, PCI_DEVFN(20, pmc_dev_info->pci_func));
@@ -1582,11 +1572,10 @@ static int pmc_core_get_telem_info(struct pmc_dev *pmcdev, struct pmc_dev_info *
                if (!pmc)
                        continue;
 
-               guid = pmc_core_find_guid(pmcdev->regmap_list, pmc->map);
-               if (!guid)
+               if (!pmc->map->lpm_req_guid)
                        return -ENXIO;
 
-               ep = pmt_telem_find_and_register_endpoint(pcidev, guid, 0);
+               ep = pmt_telem_find_and_register_endpoint(pcidev, pmc->map->lpm_req_guid, 0);
                if (IS_ERR(ep)) {
                        dev_dbg(&pmcdev->pdev->dev, "couldn't get telem endpoint %pe", ep);
                        return -EPROBE_DEFER;
index d80257b37ca98aae092c20b28c0be2a00037a5f1..cccd3bcafe00de7fd4c34ac8ca128f3c3b4e2504 100644 (file)
@@ -356,6 +356,7 @@ struct pmc_bit_map {
  * @s0ix_blocker_offset PWRMBASE offset to S0ix blocker counter
  * @num_s0ix_blocker:  Number of S0ix blockers
  * @blocker_req_offset:        Telemetry offset to S0ix blocker low power mode substate requirement table
+ * @lpm_req_guid:      Telemetry GUID to read low power mode substate requirement table
  *
  * Each PCH has unique set of register offsets and bit indexes. This structure
  * captures them to have a common implementation.
@@ -397,6 +398,8 @@ struct pmc_reg_map {
        const u8  *lpm_reg_index;
        const u32 pson_residency_offset;
        const u32 pson_residency_counter_step;
+       /* GUID for telemetry regions */
+       const u32 lpm_req_guid;
 };
 
 /**
@@ -406,7 +409,6 @@ struct pmc_reg_map {
  *                     specific attributes
  */
 struct pmc_info {
-       u32 guid;
        u16 devid;
        const struct pmc_reg_map *map;
 };
index 6fa027e7071f4b28b643e405419edaf647aeb8e9..1cd81ee54dcf8e5bddda19150c8922fa8f8ab99e 100644 (file)
@@ -533,11 +533,11 @@ static const struct pmc_reg_map lnl_socm_reg_map = {
        .s0ix_blocker_maps = lnl_blk_maps,
        .s0ix_blocker_offset = LNL_S0IX_BLOCKER_OFFSET,
        .lpm_reg_index = LNL_LPM_REG_INDEX,
+       .lpm_req_guid = SOCM_LPM_REQ_GUID,
 };
 
 static struct pmc_info lnl_pmc_info_list[] = {
        {
-               .guid   = SOCM_LPM_REQ_GUID,
                .devid  = PMC_DEVID_LNL_SOCM,
                .map    = &lnl_socm_reg_map,
        },
index 19470ca311cf7298347a38a877e3ba67696ea68b..57508cbf9cd429f4821be3c58f7062f38c7e364d 100644 (file)
@@ -473,6 +473,7 @@ const struct pmc_reg_map mtl_socm_reg_map = {
        .lpm_status_offset = MTL_LPM_STATUS_OFFSET,
        .lpm_live_status_offset = MTL_LPM_LIVE_STATUS_OFFSET,
        .lpm_reg_index = MTL_LPM_REG_INDEX,
+       .lpm_req_guid = SOCP_LPM_REQ_GUID,
 };
 
 static const struct pmc_bit_map mtl_ioep_pfear_map[] = {
@@ -797,6 +798,7 @@ const struct pmc_reg_map mtl_ioep_reg_map = {
        .lpm_en_offset = MTL_LPM_EN_OFFSET,
        .lpm_sts_latch_en_offset = MTL_LPM_STATUS_LATCH_EN_OFFSET,
        .lpm_reg_index = MTL_LPM_REG_INDEX,
+       .lpm_req_guid = IOEP_LPM_REQ_GUID,
 };
 
 static const struct pmc_bit_map mtl_ioem_pfear_map[] = {
@@ -944,21 +946,19 @@ static const struct pmc_reg_map mtl_ioem_reg_map = {
        .lpm_res_counter_step_x2 = TGL_PMC_LPM_RES_COUNTER_STEP_X2,
        .lpm_residency_offset = MTL_LPM_RESIDENCY_OFFSET,
        .lpm_reg_index = MTL_LPM_REG_INDEX,
+       .lpm_req_guid = IOEM_LPM_REQ_GUID,
 };
 
 static struct pmc_info mtl_pmc_info_list[] = {
        {
-               .guid   = SOCP_LPM_REQ_GUID,
                .devid  = PMC_DEVID_MTL_SOCM,
                .map    = &mtl_socm_reg_map,
        },
        {
-               .guid   = IOEP_LPM_REQ_GUID,
                .devid  = PMC_DEVID_MTL_IOEP,
                .map    = &mtl_ioep_reg_map,
        },
        {
-               .guid   = IOEM_LPM_REQ_GUID,
                .devid  = PMC_DEVID_MTL_IOEM,
                .map    = &mtl_ioem_reg_map
        },
index 1b35b84e06fa2f0c063b320cf6d9c89facf0619b..1f48e2bbc699f587a54d4cca9683136e5e631334 100644 (file)
@@ -528,16 +528,15 @@ static const struct pmc_reg_map ptl_pcdp_reg_map = {
        .s0ix_blocker_offset = LNL_S0IX_BLOCKER_OFFSET,
        .num_s0ix_blocker = PTL_NUM_S0IX_BLOCKER,
        .blocker_req_offset = PTL_BLK_REQ_OFFSET,
+       .lpm_req_guid = PCDP_LPM_REQ_GUID,
 };
 
 static struct pmc_info ptl_pmc_info_list[] = {
        {
-               .guid   = PCDP_LPM_REQ_GUID,
                .devid  = PMC_DEVID_PTL_PCDH,
                .map    = &ptl_pcdp_reg_map,
        },
        {
-               .guid   = PCDP_LPM_REQ_GUID,
                .devid  = PMC_DEVID_PTL_PCDP,
                .map    = &ptl_pcdp_reg_map,
        },