]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ACPI: CPPC: Refactor register value get and set ABIs
authorLifeng Zheng <zhenglifeng1@huawei.com>
Fri, 11 Apr 2025 09:38:53 +0000 (17:38 +0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 30 Apr 2025 20:01:31 +0000 (22:01 +0200)
Refactor register value get and set ABIs by using cppc_get_reg_val(),
cppc_set_reg_val() and CPPC_REG_VAL_READ().

Reviewed-by: Pierre Gondois <pierre.gondois@arm.com>
Signed-off-by: Lifeng Zheng <zhenglifeng1@huawei.com>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Link: https://patch.msgid.link/20250411093855.982491-7-zhenglifeng1@huawei.com
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/cppc_acpi.c

index e8236ec0fd0d9871c31bcd8d8716a7c8ac3af5e2..62c4673c3ef833793457a3319d5a080293baad74 100644 (file)
@@ -1608,44 +1608,14 @@ EXPORT_SYMBOL_GPL(cppc_set_epp_perf);
  */
 int cppc_get_auto_sel_caps(int cpunum, struct cppc_perf_caps *perf_caps)
 {
-       struct cpc_desc *cpc_desc = per_cpu(cpc_desc_ptr, cpunum);
-       struct cpc_register_resource *auto_sel_reg;
-       u64  auto_sel;
-
-       if (!cpc_desc) {
-               pr_debug("No CPC descriptor for CPU:%d\n", cpunum);
-               return -ENODEV;
-       }
-
-       auto_sel_reg = &cpc_desc->cpc_regs[AUTO_SEL_ENABLE];
-
-       if (!CPC_SUPPORTED(auto_sel_reg))
-               pr_warn_once("Autonomous mode is not unsupported!\n");
-
-       if (CPC_IN_PCC(auto_sel_reg)) {
-               int pcc_ss_id = per_cpu(cpu_pcc_subspace_idx, cpunum);
-               struct cppc_pcc_data *pcc_ss_data = NULL;
-               int ret = 0;
-
-               if (pcc_ss_id < 0)
-                       return -ENODEV;
-
-               pcc_ss_data = pcc_data[pcc_ss_id];
-
-               down_write(&pcc_ss_data->pcc_lock);
-
-               if (send_pcc_cmd(pcc_ss_id, CMD_READ) >= 0) {
-                       cpc_read(cpunum, auto_sel_reg, &auto_sel);
-                       perf_caps->auto_sel = (bool)auto_sel;
-               } else {
-                       ret = -EIO;
-               }
-
-               up_write(&pcc_ss_data->pcc_lock);
+       u64 auto_sel;
+       int ret;
 
+       ret = cppc_get_reg_val(cpunum, AUTO_SEL_ENABLE, &auto_sel);
+       if (ret)
                return ret;
-       }
 
+       perf_caps->auto_sel = (bool)auto_sel;
        return 0;
 }
 EXPORT_SYMBOL_GPL(cppc_get_auto_sel_caps);
@@ -1657,43 +1627,7 @@ EXPORT_SYMBOL_GPL(cppc_get_auto_sel_caps);
  */
 int cppc_set_auto_sel(int cpu, bool enable)
 {
-       int pcc_ss_id = per_cpu(cpu_pcc_subspace_idx, cpu);
-       struct cpc_register_resource *auto_sel_reg;
-       struct cpc_desc *cpc_desc = per_cpu(cpc_desc_ptr, cpu);
-       struct cppc_pcc_data *pcc_ss_data = NULL;
-       int ret = -EINVAL;
-
-       if (!cpc_desc) {
-               pr_debug("No CPC descriptor for CPU:%d\n", cpu);
-               return -ENODEV;
-       }
-
-       auto_sel_reg = &cpc_desc->cpc_regs[AUTO_SEL_ENABLE];
-
-       if (CPC_IN_PCC(auto_sel_reg)) {
-               if (pcc_ss_id < 0) {
-                       pr_debug("Invalid pcc_ss_id\n");
-                       return -ENODEV;
-               }
-
-               if (CPC_SUPPORTED(auto_sel_reg)) {
-                       ret = cpc_write(cpu, auto_sel_reg, enable);
-                       if (ret)
-                               return ret;
-               }
-
-               pcc_ss_data = pcc_data[pcc_ss_id];
-
-               down_write(&pcc_ss_data->pcc_lock);
-               /* after writing CPC, transfer the ownership of PCC to platform */
-               ret = send_pcc_cmd(pcc_ss_id, CMD_WRITE);
-               up_write(&pcc_ss_data->pcc_lock);
-       } else {
-               ret = -ENOTSUPP;
-               pr_debug("_CPC in PCC is not supported\n");
-       }
-
-       return ret;
+       return cppc_set_reg_val(cpu, AUTO_SEL_ENABLE, enable);
 }
 EXPORT_SYMBOL_GPL(cppc_set_auto_sel);
 
@@ -1707,38 +1641,7 @@ EXPORT_SYMBOL_GPL(cppc_set_auto_sel);
  */
 int cppc_set_enable(int cpu, bool enable)
 {
-       int pcc_ss_id = per_cpu(cpu_pcc_subspace_idx, cpu);
-       struct cpc_register_resource *enable_reg;
-       struct cpc_desc *cpc_desc = per_cpu(cpc_desc_ptr, cpu);
-       struct cppc_pcc_data *pcc_ss_data = NULL;
-       int ret = -EINVAL;
-
-       if (!cpc_desc) {
-               pr_debug("No CPC descriptor for CPU:%d\n", cpu);
-               return -EINVAL;
-       }
-
-       enable_reg = &cpc_desc->cpc_regs[ENABLE];
-
-       if (CPC_IN_PCC(enable_reg)) {
-
-               if (pcc_ss_id < 0)
-                       return -EIO;
-
-               ret = cpc_write(cpu, enable_reg, enable);
-               if (ret)
-                       return ret;
-
-               pcc_ss_data = pcc_data[pcc_ss_id];
-
-               down_write(&pcc_ss_data->pcc_lock);
-               /* after writing CPC, transfer the ownership of PCC to platfrom */
-               ret = send_pcc_cmd(pcc_ss_id, CMD_WRITE);
-               up_write(&pcc_ss_data->pcc_lock);
-               return ret;
-       }
-
-       return cpc_write(cpu, enable_reg, enable);
+       return cppc_set_reg_val(cpu, ENABLE, enable);
 }
 EXPORT_SYMBOL_GPL(cppc_set_enable);