Unverified Commit b21ec883 authored by Shyam Sundar S K's avatar Shyam Sundar S K Committed by Ilpo Järvinen
Browse files

platform/x86/amd/pmf: Preserve custom BIOS inputs for evaluating the policies



The current code fails to send multiple BIOS input data to the PMF-TA
for policy condition evaluation. Only the most recent BIOS input data is
properly sent to the PMF-TA, while previous inputs are overwritten with
the zeros.

To address this issue, the BIOS input data should be stored and passed on
to the PMF-TA.

Co-developed-by: default avatarPatil Rajesh Reddy <Patil.Reddy@amd.com>
Signed-off-by: default avatarPatil Rajesh Reddy <Patil.Reddy@amd.com>
Tested-by: default avatarYijun Shen <Yijun.Shen@Dell.com>
Signed-off-by: default avatarShyam Sundar S K <Shyam-sundar.S-k@amd.com>
Link: https://patch.msgid.link/20250901110140.2519072-8-Shyam-sundar.S-k@amd.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 04199ef4
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -354,6 +354,10 @@ enum power_modes_v2 {
	POWER_MODE_V2_MAX,
};

struct pmf_bios_inputs_prev {
	u32 custom_bios_inputs[10];
};

struct amd_pmf_dev {
	void __iomem *regbase;
	void __iomem *smu_virt_addr;
@@ -400,6 +404,7 @@ struct amd_pmf_dev {
	struct mutex cb_mutex;
	u32 notifications;
	struct apmf_sbios_req_v1 req1;
	struct pmf_bios_inputs_prev cb_prev; /* To preserve custom BIOS inputs */
};

struct apmf_sps_prop_granular_v2 {
+6 −0
Original line number Diff line number Diff line
@@ -142,12 +142,18 @@ static void amd_pmf_update_bios_inputs(struct amd_pmf_dev *pdev, u32 pending_req
		if (!(pending_req & inputs[i].bit_mask))
			continue;
		amd_pmf_set_ta_custom_bios_input(in, i, custom_policy[i]);
		pdev->cb_prev.custom_bios_inputs[i] = custom_policy[i];
	}
}

static void amd_pmf_get_custom_bios_inputs(struct amd_pmf_dev *pdev,
					   struct ta_pmf_enact_table *in)
{
	unsigned int i;

	for (i = 0; i < ARRAY_SIZE(custom_bios_inputs); i++)
		amd_pmf_set_ta_custom_bios_input(in, i, pdev->cb_prev.custom_bios_inputs[i]);

	if (!(pdev->req.pending_req || pdev->req1.pending_req))
		return;