Skip to content

Commit f9cadb3

Browse files
jiezhan0214vireshk
authored andcommitted
ACPI: CPPC: Factor out and export per-cpu cppc_perf_ctrs_in_pcc_cpu()
Factor out cppc_perf_ctrs_in_pcc_cpu() for checking whether per-cpu CPC regs are defined in PCC channels, and export it out for further use. Reviewed-by: Lifeng Zheng <zhenglifeng1@huawei.com> Reviewed-by: Pierre Gondois <pierre.gondois@arm.com> Signed-off-by: Jie Zhan <zhanjie9@hisilicon.com> Acked-by: Rafael J. Wysocki (Intel) <rafael@kernel.org> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
1 parent e05d9e5 commit f9cadb3

2 files changed

Lines changed: 32 additions & 21 deletions

File tree

drivers/acpi/cppc_acpi.c

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1422,6 +1422,32 @@ int cppc_get_perf_caps(int cpunum, struct cppc_perf_caps *perf_caps)
14221422
}
14231423
EXPORT_SYMBOL_GPL(cppc_get_perf_caps);
14241424

1425+
/**
1426+
* cppc_perf_ctrs_in_pcc_cpu - Check if any perf counters of a CPU are in PCC.
1427+
* @cpu: CPU on which to check perf counters.
1428+
*
1429+
* Return: true if any of the counters are in PCC regions, false otherwise
1430+
*/
1431+
bool cppc_perf_ctrs_in_pcc_cpu(unsigned int cpu)
1432+
{
1433+
struct cpc_desc *cpc_desc = per_cpu(cpc_desc_ptr, cpu);
1434+
struct cpc_register_resource *ref_perf_reg;
1435+
1436+
/*
1437+
* If reference perf register is not supported then we should use the
1438+
* nominal perf value
1439+
*/
1440+
ref_perf_reg = &cpc_desc->cpc_regs[REFERENCE_PERF];
1441+
if (!CPC_SUPPORTED(ref_perf_reg))
1442+
ref_perf_reg = &cpc_desc->cpc_regs[NOMINAL_PERF];
1443+
1444+
return CPC_IN_PCC(&cpc_desc->cpc_regs[DELIVERED_CTR]) ||
1445+
CPC_IN_PCC(&cpc_desc->cpc_regs[REFERENCE_CTR]) ||
1446+
CPC_IN_PCC(&cpc_desc->cpc_regs[CTR_WRAP_TIME]) ||
1447+
CPC_IN_PCC(ref_perf_reg);
1448+
}
1449+
EXPORT_SYMBOL_GPL(cppc_perf_ctrs_in_pcc_cpu);
1450+
14251451
/**
14261452
* cppc_perf_ctrs_in_pcc - Check if any perf counters are in a PCC region.
14271453
*
@@ -1436,27 +1462,7 @@ bool cppc_perf_ctrs_in_pcc(void)
14361462
int cpu;
14371463

14381464
for_each_online_cpu(cpu) {
1439-
struct cpc_register_resource *ref_perf_reg;
1440-
struct cpc_desc *cpc_desc;
1441-
1442-
cpc_desc = per_cpu(cpc_desc_ptr, cpu);
1443-
1444-
if (CPC_IN_PCC(&cpc_desc->cpc_regs[DELIVERED_CTR]) ||
1445-
CPC_IN_PCC(&cpc_desc->cpc_regs[REFERENCE_CTR]) ||
1446-
CPC_IN_PCC(&cpc_desc->cpc_regs[CTR_WRAP_TIME]))
1447-
return true;
1448-
1449-
1450-
ref_perf_reg = &cpc_desc->cpc_regs[REFERENCE_PERF];
1451-
1452-
/*
1453-
* If reference perf register is not supported then we should
1454-
* use the nominal perf value
1455-
*/
1456-
if (!CPC_SUPPORTED(ref_perf_reg))
1457-
ref_perf_reg = &cpc_desc->cpc_regs[NOMINAL_PERF];
1458-
1459-
if (CPC_IN_PCC(ref_perf_reg))
1465+
if (cppc_perf_ctrs_in_pcc_cpu(cpu))
14601466
return true;
14611467
}
14621468

include/acpi/cppc_acpi.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ extern int cppc_get_perf_ctrs(int cpu, struct cppc_perf_fb_ctrs *perf_fb_ctrs);
154154
extern int cppc_set_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls);
155155
extern int cppc_set_enable(int cpu, bool enable);
156156
extern int cppc_get_perf_caps(int cpu, struct cppc_perf_caps *caps);
157+
extern bool cppc_perf_ctrs_in_pcc_cpu(unsigned int cpu);
157158
extern bool cppc_perf_ctrs_in_pcc(void);
158159
extern unsigned int cppc_perf_to_khz(struct cppc_perf_caps *caps, unsigned int perf);
159160
extern unsigned int cppc_khz_to_perf(struct cppc_perf_caps *caps, unsigned int freq);
@@ -204,6 +205,10 @@ static inline int cppc_get_perf_caps(int cpu, struct cppc_perf_caps *caps)
204205
{
205206
return -EOPNOTSUPP;
206207
}
208+
static inline bool cppc_perf_ctrs_in_pcc_cpu(unsigned int cpu)
209+
{
210+
return false;
211+
}
207212
static inline bool cppc_perf_ctrs_in_pcc(void)
208213
{
209214
return false;

0 commit comments

Comments
 (0)