Skip to content

Commit 38428a6

Browse files
Sumit Guptarafaeljw
authored andcommitted
ACPI: CPPC: Extend cppc_set_epp_perf() for FFH/SystemMemory
Extend cppc_set_epp_perf() to write both auto_sel and energy_perf registers when they are in FFH or SystemMemory address space. This keeps the behavior consistent with PCC case where both registers are already updated together, but was missing for FFH/SystemMemory. Signed-off-by: Sumit Gupta <sumitg@nvidia.com> Reviewed-by: Pierre Gondois <pierre.gondois@arm.com> Reviewed-by: Lifeng Zheng <zhenglifeng1@huawei.com> Link: https://patch.msgid.link/20260206142658.72583-4-sumitg@nvidia.com Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
1 parent b3e45fb commit 38428a6

1 file changed

Lines changed: 21 additions & 3 deletions

File tree

drivers/acpi/cppc_acpi.c

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1571,6 +1571,8 @@ int cppc_set_epp_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls, bool enable)
15711571
struct cpc_register_resource *auto_sel_reg;
15721572
struct cpc_desc *cpc_desc = per_cpu(cpc_desc_ptr, cpu);
15731573
struct cppc_pcc_data *pcc_ss_data = NULL;
1574+
bool autosel_ffh_sysmem;
1575+
bool epp_ffh_sysmem;
15741576
int ret;
15751577

15761578
if (!cpc_desc) {
@@ -1581,6 +1583,11 @@ int cppc_set_epp_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls, bool enable)
15811583
auto_sel_reg = &cpc_desc->cpc_regs[AUTO_SEL_ENABLE];
15821584
epp_set_reg = &cpc_desc->cpc_regs[ENERGY_PERF];
15831585

1586+
epp_ffh_sysmem = CPC_SUPPORTED(epp_set_reg) &&
1587+
(CPC_IN_FFH(epp_set_reg) || CPC_IN_SYSTEM_MEMORY(epp_set_reg));
1588+
autosel_ffh_sysmem = CPC_SUPPORTED(auto_sel_reg) &&
1589+
(CPC_IN_FFH(auto_sel_reg) || CPC_IN_SYSTEM_MEMORY(auto_sel_reg));
1590+
15841591
if (CPC_IN_PCC(epp_set_reg) || CPC_IN_PCC(auto_sel_reg)) {
15851592
if (pcc_ss_id < 0) {
15861593
pr_debug("Invalid pcc_ss_id for CPU:%d\n", cpu);
@@ -1606,11 +1613,22 @@ int cppc_set_epp_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls, bool enable)
16061613
ret = send_pcc_cmd(pcc_ss_id, CMD_WRITE);
16071614
up_write(&pcc_ss_data->pcc_lock);
16081615
} else if (osc_cpc_flexible_adr_space_confirmed &&
1609-
CPC_SUPPORTED(epp_set_reg) && CPC_IN_FFH(epp_set_reg)) {
1610-
ret = cpc_write(cpu, epp_set_reg, perf_ctrls->energy_perf);
1616+
(epp_ffh_sysmem || autosel_ffh_sysmem)) {
1617+
if (autosel_ffh_sysmem) {
1618+
ret = cpc_write(cpu, auto_sel_reg, enable);
1619+
if (ret)
1620+
return ret;
1621+
}
1622+
1623+
if (epp_ffh_sysmem) {
1624+
ret = cpc_write(cpu, epp_set_reg,
1625+
perf_ctrls->energy_perf);
1626+
if (ret)
1627+
return ret;
1628+
}
16111629
} else {
16121630
ret = -ENOTSUPP;
1613-
pr_debug("_CPC in PCC and _CPC in FFH are not supported\n");
1631+
pr_debug("_CPC in PCC/FFH/SystemMemory are not supported\n");
16141632
}
16151633

16161634
return ret;

0 commit comments

Comments
 (0)