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

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: default avatarXi Pardee <xi.pardee@linux.intel.com>
Link: https://patch.msgid.link/20251014214548.629023-6-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 7848154c
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -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,
	},
+2 −13
Original line number Diff line number Diff line
@@ -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;
+3 −1
Original line number Diff line number Diff line
@@ -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;
};
+1 −1
Original line number Diff line number Diff line
@@ -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,
	},
+3 −3
Original line number Diff line number Diff line
@@ -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
	},
Loading