Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1757d05f authored by Xiongfeng Wang's avatar Xiongfeng Wang Committed by Rafael J. Wysocki
Browse files

ACPI / CPPC: Add a helper to get desired performance



This patch add a helper to get the value of desired performance
register.

Signed-off-by: default avatarXiongfeng Wang <wangxiongfeng2@huawei.com>
[ rjw: More white space ]
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent a9a22b57
Loading
Loading
Loading
Loading
+42 −0
Original line number Diff line number Diff line
@@ -1050,6 +1050,48 @@ static int cpc_write(int cpu, struct cpc_register_resource *reg_res, u64 val)
	return ret_val;
}

/**
 * cppc_get_desired_perf - Get the value of desired performance register.
 * @cpunum: CPU from which to get desired performance.
 * @desired_perf: address of a variable to store the returned desired performance
 *
 * Return: 0 for success, -EIO otherwise.
 */
int cppc_get_desired_perf(int cpunum, u64 *desired_perf)
{
	struct cpc_desc *cpc_desc = per_cpu(cpc_desc_ptr, cpunum);
	int pcc_ss_id = per_cpu(cpu_pcc_subspace_idx, cpunum);
	struct cpc_register_resource *desired_reg;
	struct cppc_pcc_data *pcc_ss_data = NULL;

	desired_reg = &cpc_desc->cpc_regs[DESIRED_PERF];

	if (CPC_IN_PCC(desired_reg)) {
		int ret = 0;

		if (pcc_ss_id < 0)
			return -EIO;

		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, desired_reg, desired_perf);
		else
			ret = -EIO;

		up_write(&pcc_ss_data->pcc_lock);

		return ret;
	}

	cpc_read(cpunum, desired_reg, desired_perf);

	return 0;
}
EXPORT_SYMBOL_GPL(cppc_get_desired_perf);

/**
 * cppc_get_perf_caps - Get a CPUs performance capabilities.
 * @cpunum: CPU from which to get capabilities info.
+1 −0
Original line number Diff line number Diff line
@@ -137,6 +137,7 @@ struct cppc_cpudata {
	cpumask_var_t shared_cpu_map;
};

extern int cppc_get_desired_perf(int cpunum, u64 *desired_perf);
extern int cppc_get_perf_ctrs(int cpu, struct cppc_perf_fb_ctrs *perf_fb_ctrs);
extern int cppc_set_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls);
extern int cppc_get_perf_caps(int cpu, struct cppc_perf_caps *caps);