mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 12:21:22 -05:00
platform/x86:intel/pmc: Relocate lpm_req_guid to pmc_reg_map
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>
This commit is contained in:
@@ -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,
|
||||
},
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
|
||||
@@ -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
|
||||
},
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user