mirror of
https://github.com/torvalds/linux.git
synced 2026-06-03 12:03:54 +02:00
platform/x86/amd/pmf: Call enact function sooner to process early pending requests
Call the amd_pmf_invoke_cmd_enact() function to manage early pending requests and their associated custom BIOS inputs. Add a return statement for cases of failure. The PMF driver will adjust power settings according to custom BIOS inputs after assessing the policy conditions. Also, add a new common routine amd_pmf_handle_early_preq() to handle early BIOS pending requests for both v1 and v2 variants. Co-developed-by: Patil Rajesh Reddy <Patil.Reddy@amd.com> Signed-off-by: Patil Rajesh Reddy <Patil.Reddy@amd.com> Tested-by: Yijun Shen <Yijun.Shen@Dell.com> Signed-off-by: Shyam Sundar S K <Shyam-sundar.S-k@amd.com> Link: https://patch.msgid.link/20250901110140.2519072-9-Shyam-sundar.S-k@amd.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:
parent
b21ec88340
commit
62214d942d
|
|
@ -331,6 +331,15 @@ int apmf_get_sbios_requests(struct amd_pmf_dev *pdev, struct apmf_sbios_req *req
|
|||
req, sizeof(*req));
|
||||
}
|
||||
|
||||
static void amd_pmf_handle_early_preq(struct amd_pmf_dev *pdev)
|
||||
{
|
||||
if (!pdev->cb_flag)
|
||||
return;
|
||||
|
||||
amd_pmf_invoke_cmd_enact(pdev);
|
||||
pdev->cb_flag = false;
|
||||
}
|
||||
|
||||
static void apmf_event_handler_v2(acpi_handle handle, u32 event, void *data)
|
||||
{
|
||||
struct amd_pmf_dev *pmf_dev = data;
|
||||
|
|
@ -339,8 +348,12 @@ static void apmf_event_handler_v2(acpi_handle handle, u32 event, void *data)
|
|||
guard(mutex)(&pmf_dev->cb_mutex);
|
||||
|
||||
ret = apmf_get_sbios_requests_v2(pmf_dev, &pmf_dev->req);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
dev_err(pmf_dev->dev, "Failed to get v2 SBIOS requests: %d\n", ret);
|
||||
return;
|
||||
}
|
||||
|
||||
amd_pmf_handle_early_preq(pmf_dev);
|
||||
}
|
||||
|
||||
static void apmf_event_handler_v1(acpi_handle handle, u32 event, void *data)
|
||||
|
|
@ -351,8 +364,12 @@ static void apmf_event_handler_v1(acpi_handle handle, u32 event, void *data)
|
|||
guard(mutex)(&pmf_dev->cb_mutex);
|
||||
|
||||
ret = apmf_get_sbios_requests_v1(pmf_dev, &pmf_dev->req1);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
dev_err(pmf_dev->dev, "Failed to get v1 SBIOS requests: %d\n", ret);
|
||||
return;
|
||||
}
|
||||
|
||||
amd_pmf_handle_early_preq(pmf_dev);
|
||||
}
|
||||
|
||||
static void apmf_event_handler(acpi_handle handle, u32 event, void *data)
|
||||
|
|
|
|||
|
|
@ -405,6 +405,7 @@ struct amd_pmf_dev {
|
|||
u32 notifications;
|
||||
struct apmf_sbios_req_v1 req1;
|
||||
struct pmf_bios_inputs_prev cb_prev; /* To preserve custom BIOS inputs */
|
||||
bool cb_flag; /* To handle first custom BIOS input */
|
||||
};
|
||||
|
||||
struct apmf_sps_prop_granular_v2 {
|
||||
|
|
@ -885,5 +886,6 @@ int amd_pmf_smartpc_apply_bios_output(struct amd_pmf_dev *dev, u32 val, u32 preq
|
|||
/* Smart PC - TA interfaces */
|
||||
void amd_pmf_populate_ta_inputs(struct amd_pmf_dev *dev, struct ta_pmf_enact_table *in);
|
||||
void amd_pmf_dump_ta_inputs(struct amd_pmf_dev *dev, struct ta_pmf_enact_table *in);
|
||||
int amd_pmf_invoke_cmd_enact(struct amd_pmf_dev *dev);
|
||||
|
||||
#endif /* PMF_H */
|
||||
|
|
|
|||
|
|
@ -225,7 +225,7 @@ static void amd_pmf_apply_policies(struct amd_pmf_dev *dev, struct ta_pmf_enact_
|
|||
}
|
||||
}
|
||||
|
||||
static int amd_pmf_invoke_cmd_enact(struct amd_pmf_dev *dev)
|
||||
int amd_pmf_invoke_cmd_enact(struct amd_pmf_dev *dev)
|
||||
{
|
||||
struct ta_pmf_shared_memory *ta_sm = NULL;
|
||||
struct ta_pmf_enact_result *out = NULL;
|
||||
|
|
@ -577,8 +577,10 @@ int amd_pmf_init_smart_pc(struct amd_pmf_dev *dev)
|
|||
ret = amd_pmf_start_policy_engine(dev);
|
||||
dev_dbg(dev->dev, "start policy engine ret: %d\n", ret);
|
||||
status = ret == TA_PMF_TYPE_SUCCESS;
|
||||
if (status)
|
||||
if (status) {
|
||||
dev->cb_flag = true;
|
||||
break;
|
||||
}
|
||||
amd_pmf_tee_deinit(dev);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user