From nobody Fri Oct 2 07:46:36 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id EC0801A6834; Mon, 3 Aug 2026 20:35:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785789346; cv=none; b=lU3h0NygsMldZMdqSQAQfgmMBQtBHywH2/3/ny6nh69ojskQ9k1L7XVhRV3GlVzY+B/JzVKCCfiEQzEIxwIHn/BitvxnQZQdps3HVr8Kt2N4B6gLjdLkAABv3L2mciVRikbaO3opyWJpxypUu+HJiTpzJ1VpKauebk6khGADlhw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785789346; c=relaxed/simple; bh=cAmFF5z2bCn5RIMRTn7iLSXF6TmUSyMhjFNGIkV1spU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Va0OW5JjvXDYVc+AHvlvqky+lInNwXnVHLxApBK0yj6GhO/QeVSg1MaI2AMNfGG34slN+fVcc1gi9i2tsM4wjekAi37iDCN6GgVGAexh7HxC5UPGPiJdDykv9bJNmD7TKCZWGk+hmJHnZAyxdpAvncyT5aLnDO8bBBbUTxPbNHo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=XlmQ85EF; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="XlmQ85EF" Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 33B3C1476; Mon, 3 Aug 2026 13:35:39 -0700 (PDT) Received: from e127648.arm.com (unknown [10.57.0.71]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id DA83A3F632; Mon, 3 Aug 2026 13:35:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1785789343; bh=cAmFF5z2bCn5RIMRTn7iLSXF6TmUSyMhjFNGIkV1spU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XlmQ85EF9kd78pIOJgG5f6JGTZJ6aQ8GrlfbzFLJoCaLH1S6DKr8aWPT1TYCrbYVc 52Ek3lm4+dKV/tC03ikYb6RqbcaHLN64aCZXHdsjk1N8uXGv3JdD0M3/IhpkNoOKnO tUNEuDa29HeqcUslBw/4bbbJgJI12JFB0zlp+AYw= From: Christian Loehle To: "Rafael J . Wysocki" , Viresh Kumar Cc: linux-pm@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, Len Brown , Jie Zhan , Lifeng Zheng , Pierre Gondois , Sumit Gupta , Sudeep Holla , Ionela Voinescu , zhongqiu.han@oss.qualcomm.com, Christian Loehle , stable@vger.kernel.org Subject: [PATCH 1/3] ACPI: CPPC: Reject desired_perf reads on _CPC revision 4+ Date: Mon, 3 Aug 2026 21:35:29 +0100 Message-Id: <20260803203531.1268651-2-christian.loehle@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260803203531.1268651-1-christian.loehle@arm.com> References: <20260803203531.1268651-1-christian.loehle@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When CPPC feedback counters cannot provide a usable sample, cppc-cpufreq calls cppc_get_desired_perf() because some platforms repurpose Desired Performance to report actual delivered performance. ACPI 6.5 defines _CPC revision 3 and lists Read/Write as the Optional Attribute of Desired Performance. ACPI 6.6 advances _CPC to revision 4 and lists only Write, so invoking that workaround for revision 4 or later would require a register read that the interface no longer specifies. Make cppc_get_desired_perf() return -EOPNOTSUPP for _CPC revision 4 or later. Use the revision retained in the per-CPU CPC descriptor rather than the platform-wide FADT revision. The _CPC revision may still not accurately describe the implemented register semantics. If a nominally revision 3 platform implements a non-readable Desired Performance register, a read may return zero and make cppc_cpufreq_get_rate() report 0 kHz. Treat a zero read as unusable and fall back to the cached OSPM request, just as for a failed read. Fixes: c47195631960 ("cppc_cpufreq: Use desired perf if feedback ctrs are 0= or unchanged") Cc: stable@vger.kernel.org Suggested-by: Sumit Gupta Signed-off-by: Christian Loehle --- drivers/acpi/cppc_acpi.c | 17 ++++++++++++++++- drivers/cpufreq/cppc_cpufreq.c | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c index 53d09ca98f06..42aeb749ebe0 100644 --- a/drivers/acpi/cppc_acpi.c +++ b/drivers/acpi/cppc_acpi.c @@ -1316,15 +1316,30 @@ static int cppc_set_reg_val(int cpu, enum cppc_regs= reg_idx, u64 val) return cpc_write(cpu, reg, val); } =20 +static bool cppc_desired_perf_readable(const struct cpc_desc *cpc_desc) +{ + return cpc_desc->version < CPPC_V4_REV; +} + /** * cppc_get_desired_perf - Get the desired performance register value. * @cpunum: CPU from which to get desired performance. * @desired_perf: Return address. * - * Return: 0 for success, -EIO otherwise. + * Return: 0 for success, -EOPNOTSUPP for _CPC revision 4 or later, and a + * negative errno otherwise. */ int cppc_get_desired_perf(int cpunum, u64 *desired_perf) { + struct cpc_desc *cpc_desc =3D per_cpu(cpc_desc_ptr, cpunum); + + if (!cpc_desc) + return -ENODEV; + + /* _CPC revision 4 no longer specifies Desired Performance as readable. */ + if (!cppc_desired_perf_readable(cpc_desc)) + return -EOPNOTSUPP; + return cppc_get_reg_val(cpunum, DESIRED_PERF, desired_perf); } EXPORT_SYMBOL_GPL(cppc_get_desired_perf); diff --git a/drivers/cpufreq/cppc_cpufreq.c b/drivers/cpufreq/cppc_cpufreq.c index 6fe0e972952a..80893844353c 100644 --- a/drivers/cpufreq/cppc_cpufreq.c +++ b/drivers/cpufreq/cppc_cpufreq.c @@ -836,7 +836,7 @@ static unsigned int cppc_cpufreq_get_rate(unsigned int = cpu) * value first as some platforms may update the actual delivered perf * there; if failed, resort to the cached desired perf. */ - if (cppc_get_desired_perf(cpu, &delivered_perf)) + if (cppc_get_desired_perf(cpu, &delivered_perf) || !delivered_perf) delivered_perf =3D cpu_data->perf_ctrls.desired_perf; =20 return cppc_perf_to_khz(&cpu_data->perf_caps, delivered_perf); --=20 2.34.1 From nobody Fri Oct 2 07:46:36 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id AF2E63A8739; Mon, 3 Aug 2026 20:35:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785789348; cv=none; b=A1TtFywF/TZ3uH12h0DVIWarbCclcuR2BEHLPPcyx1zOJcusezixi2PVPUHapeUphqG7zeIGAYjo5erUzifnw1Qh3G/TYznBUzj/o88u086v76224OCUVQ2LmJTNKqbMwG+utfYaHt8/qb3hzzy51oukfnKz47PlQD/A36c2Knk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785789348; c=relaxed/simple; bh=ss2foDawKwclPC/rzOYzqYK5nvpCkQy93E99c9mNN6M=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=IZ06hmAgpBJ++I8TE9eGpRM/acLUvN361yJ75TJs0OlQ8UeGZGBefA5E0WCo6xNONF7qTOAgvPveARzxwE1LI4f1x6iUjHIADCpLTvh0ZqtwpGsskfoZk29ppT6ObrSoqNqefLRs7HUdRcJ3MjiZIZ5zT94v22P9V5pH8VSJ80s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=adTNzQA0; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="adTNzQA0" Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id EBD1B1596; Mon, 3 Aug 2026 13:35:41 -0700 (PDT) Received: from e127648.arm.com (unknown [10.57.0.71]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 9867C3F632; Mon, 3 Aug 2026 13:35:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1785789346; bh=ss2foDawKwclPC/rzOYzqYK5nvpCkQy93E99c9mNN6M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=adTNzQA0qv0dLpO4mEJ9dAl5HXBy9vDcMe5wmxEpe0hw81l+agG995Dsxe3wtD2pT e+DGATL0Jj1wbYjWUR4Yhk5apCM7JDV9qKVJQJJMP0XOpXZmBsYECAsIapMIe/QEgS QTW6cRRrkekCBQp+iyUav9suvN1myJGEMcQKCEpk= From: Christian Loehle To: "Rafael J . Wysocki" , Viresh Kumar Cc: linux-pm@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, Len Brown , Jie Zhan , Lifeng Zheng , Pierre Gondois , Sumit Gupta , Sudeep Holla , Ionela Voinescu , zhongqiu.han@oss.qualcomm.com, Christian Loehle , stable@vger.kernel.org Subject: [PATCH 2/3] ACPI: CPPC: Skip desired_perf read in cppc_get_perf() Date: Mon, 3 Aug 2026 21:35:30 +0100 Message-Id: <20260803203531.1268651-3-christian.loehle@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260803203531.1268651-1-christian.loehle@arm.com> References: <20260803203531.1268651-1-christian.loehle@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" ACPI 6.5 defines _CPC revision 3 and lists Read/Write as the Optional Attribute of Desired Performance. ACPI 6.6 advances _CPC to revision 4 and lists only Write. cppc_get_perf() nevertheless reads the register when initializing performance controls, even though cppc-cpufreq overwrites the value before using it. Use the _CPC revision check from cppc_get_desired_perf() and leave desired_perf zero instead of reading it for _CPC revision 4 or later. Also exclude the register from PCC read-command detection so it cannot trigger an otherwise unnecessary read command. Fixes: 658fa7b1c47a ("ACPI: CPPC: Add cppc_get_perf() API to read performan= ce controls") Cc: stable@vger.kernel.org Suggested-by: Zhongqiu Han Reviewed-by: Zhongqiu Han Signed-off-by: Christian Loehle --- drivers/acpi/cppc_acpi.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c index 42aeb749ebe0..becb7e442b30 100644 --- a/drivers/acpi/cppc_acpi.c +++ b/drivers/acpi/cppc_acpi.c @@ -1845,12 +1845,14 @@ int cppc_get_perf(int cpu, struct cppc_perf_ctrls *= perf_ctrls) u64 desired_perf =3D 0, min =3D 0, max =3D 0, energy_perf =3D 0, auto_sel= =3D 0; int pcc_ss_id =3D per_cpu(cpu_pcc_subspace_idx, cpu); struct cppc_pcc_data *pcc_ss_data =3D NULL; + bool read_desired_perf; int ret =3D 0, regs_in_pcc =3D 0; =20 if (!cpc_desc) { pr_debug("No CPC descriptor for CPU:%d\n", cpu); return -ENODEV; } + read_desired_perf =3D cppc_desired_perf_readable(cpc_desc); =20 if (!perf_ctrls) { pr_debug("Invalid perf_ctrls pointer\n"); @@ -1864,7 +1866,8 @@ int cppc_get_perf(int cpu, struct cppc_perf_ctrls *pe= rf_ctrls) auto_sel_reg =3D &cpc_desc->cpc_regs[AUTO_SEL_ENABLE]; =20 /* Are any of the regs PCC ?*/ - if (CPC_IN_PCC(desired_perf_reg) || CPC_IN_PCC(min_perf_reg) || + if ((read_desired_perf && CPC_IN_PCC(desired_perf_reg)) || + CPC_IN_PCC(min_perf_reg) || CPC_IN_PCC(max_perf_reg) || CPC_IN_PCC(energy_perf_reg) || CPC_IN_PCC(auto_sel_reg)) { if (pcc_ss_id < 0) { @@ -1896,7 +1899,7 @@ int cppc_get_perf(int cpu, struct cppc_perf_ctrls *pe= rf_ctrls) } perf_ctrls->min_perf =3D min; =20 - if (CPC_SUPPORTED(desired_perf_reg)) { + if (read_desired_perf && CPC_SUPPORTED(desired_perf_reg)) { ret =3D cpc_read(cpu, desired_perf_reg, &desired_perf); if (ret) goto out_err; --=20 2.34.1 From nobody Fri Oct 2 07:46:36 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DE2FB429CEB; Mon, 3 Aug 2026 20:35:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785789360; cv=none; b=WZAJs9avitmeL0O8S+gdMSLfmSgJrtm0yp7blz2MPiVyRXaxsOu2uMUFBOB6+VPDma7xMfzXVKHSxn7xrfpLZNiua9YjY4O6yQxLXnmWqP4iS+IiXJIlURq4WEEZXIK9IdL5C2KrjbCA/sgYOFwIVGjvscg5eRKnlv4HPbs2L38= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785789360; c=relaxed/simple; bh=aXEladsx7QGEQ3DSQbj0ebilCOY8ifpj9tTQIEY3teU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=YLklqETUqWXhclhdgHXBc+iJOhdQ3C5UtXq5iu6JQ2sfmYhzoksSLKIJMiIeRMsx07Ln3wUlM8IK7e05SX2PhwyJ+ViPGD7yBSVmNTHiLhOXHzcEhBs9zUvNYY3GDbeGc+umJ41yeC6c13nFurMbfc7wcJbKv80PR0PVQNQZQFE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=qJgaBubD; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="qJgaBubD" Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8A810143D; Mon, 3 Aug 2026 13:35:44 -0700 (PDT) Received: from e127648.arm.com (unknown [10.57.0.71]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 5820B3F632; Mon, 3 Aug 2026 13:35:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1785789348; bh=aXEladsx7QGEQ3DSQbj0ebilCOY8ifpj9tTQIEY3teU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qJgaBubDzKb0jZhbemu+nQGwDwwIdwQgcttDoihCtFDDNxXRxMIop239h+Pz0F9vJ pZi98sTVteMA960+GT70K4tIFbuchaco6+2e1PRw/G/+b3eKARKvVnuDVNdVbHmL6A R2jJ36PjlrO9L9zYuz1hatSW+S7NRSUnb35TuR08= From: Christian Loehle To: "Rafael J . Wysocki" , Viresh Kumar Cc: linux-pm@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, Len Brown , Jie Zhan , Lifeng Zheng , Pierre Gondois , Sumit Gupta , Sudeep Holla , Ionela Voinescu , zhongqiu.han@oss.qualcomm.com, Christian Loehle Subject: [PATCH 3/3] ACPI: CPPC: Stop reading desired_perf in cppc_get_perf() Date: Mon, 3 Aug 2026 21:35:31 +0100 Message-Id: <20260803203531.1268651-4-christian.loehle@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260803203531.1268651-1-christian.loehle@arm.com> References: <20260803203531.1268651-1-christian.loehle@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" cppc_get_perf() has one in-tree caller, cppc_cpufreq_get_cpu_data(). It uses the function to preserve existing controls before writing them, but overwrites desired_perf with highest_perf before the first cppc_set_perf(). Consequently, the current Desired Performance value is not consumed. Remove the Desired Performance read from this aggregate getter and document that the field is returned as zero. Reviewed-by: Zhongqiu Han Signed-off-by: Christian Loehle --- drivers/acpi/cppc_acpi.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c index becb7e442b30..15a1c5f00e51 100644 --- a/drivers/acpi/cppc_acpi.c +++ b/drivers/acpi/cppc_acpi.c @@ -1834,41 +1834,38 @@ EXPORT_SYMBOL_GPL(cppc_set_enable); * @cpu: CPU for which to get performance controls. * @perf_ctrls: ptr to cppc_perf_ctrls. See cppc_acpi.h * + * Desired Performance is not read and is returned as 0. + * * Return: 0 for success with perf_ctrls, -ERRNO otherwise. */ int cppc_get_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls) { struct cpc_desc *cpc_desc =3D per_cpu(cpc_desc_ptr, cpu); - struct cpc_register_resource *desired_perf_reg, - *min_perf_reg, *max_perf_reg, + struct cpc_register_resource *min_perf_reg, *max_perf_reg, *energy_perf_reg, *auto_sel_reg; - u64 desired_perf =3D 0, min =3D 0, max =3D 0, energy_perf =3D 0, auto_sel= =3D 0; + u64 min =3D 0, max =3D 0, energy_perf =3D 0, auto_sel =3D 0; int pcc_ss_id =3D per_cpu(cpu_pcc_subspace_idx, cpu); struct cppc_pcc_data *pcc_ss_data =3D NULL; - bool read_desired_perf; int ret =3D 0, regs_in_pcc =3D 0; =20 if (!cpc_desc) { pr_debug("No CPC descriptor for CPU:%d\n", cpu); return -ENODEV; } - read_desired_perf =3D cppc_desired_perf_readable(cpc_desc); =20 if (!perf_ctrls) { pr_debug("Invalid perf_ctrls pointer\n"); return -EINVAL; } =20 - desired_perf_reg =3D &cpc_desc->cpc_regs[DESIRED_PERF]; min_perf_reg =3D &cpc_desc->cpc_regs[MIN_PERF]; max_perf_reg =3D &cpc_desc->cpc_regs[MAX_PERF]; energy_perf_reg =3D &cpc_desc->cpc_regs[ENERGY_PERF]; auto_sel_reg =3D &cpc_desc->cpc_regs[AUTO_SEL_ENABLE]; =20 /* Are any of the regs PCC ?*/ - if ((read_desired_perf && CPC_IN_PCC(desired_perf_reg)) || - CPC_IN_PCC(min_perf_reg) || - CPC_IN_PCC(max_perf_reg) || CPC_IN_PCC(energy_perf_reg) || + if (CPC_IN_PCC(min_perf_reg) || CPC_IN_PCC(max_perf_reg) || + CPC_IN_PCC(energy_perf_reg) || CPC_IN_PCC(auto_sel_reg)) { if (pcc_ss_id < 0) { pr_debug("Invalid pcc_ss_id for CPU:%d\n", cpu); @@ -1899,12 +1896,7 @@ int cppc_get_perf(int cpu, struct cppc_perf_ctrls *p= erf_ctrls) } perf_ctrls->min_perf =3D min; =20 - if (read_desired_perf && CPC_SUPPORTED(desired_perf_reg)) { - ret =3D cpc_read(cpu, desired_perf_reg, &desired_perf); - if (ret) - goto out_err; - } - perf_ctrls->desired_perf =3D desired_perf; + perf_ctrls->desired_perf =3D 0; =20 if (CPC_SUPPORTED(energy_perf_reg)) { ret =3D cpc_read(cpu, energy_perf_reg, &energy_perf); --=20 2.34.1