// SPDX-License-Identifier: GPL-2.0-only /* * System Control and Power Interface (SCPI) based CPUFreq Interface driver * * Copyright (C) 2015 ARM Ltd. * Sudeep Holla <sudeep.holla@arm.com>
*/
cpu_dev = get_cpu_device(policy->cpu); if (!cpu_dev) {
pr_err("failed to get cpu%d device\n", policy->cpu); return -ENODEV;
}
ret = scpi_ops->add_opps_to_device(cpu_dev); if (ret) {
dev_warn(cpu_dev, "failed to add opps to the device\n"); return ret;
}
ret = scpi_get_sharing_cpus(cpu_dev, policy->cpus); if (ret) {
dev_warn(cpu_dev, "failed to get sharing cpumask\n"); return ret;
}
ret = dev_pm_opp_set_sharing_cpus(cpu_dev, policy->cpus); if (ret) {
dev_err(cpu_dev, "%s: failed to mark OPPs as shared: %d\n",
__func__, ret); return ret;
}
ret = dev_pm_opp_get_opp_count(cpu_dev); if (ret <= 0) {
dev_dbg(cpu_dev, "OPP table is not ready, deferring probe\n");
ret = -EPROBE_DEFER; goto out_free_opp;
}
priv = kzalloc(sizeof(*priv), GFP_KERNEL); if (!priv) {
ret = -ENOMEM; goto out_free_opp;
}
ret = dev_pm_opp_init_cpufreq_table(cpu_dev, &freq_table); if (ret) {
dev_err(cpu_dev, "failed to init cpufreq table: %d\n", ret); goto out_free_priv;
}
priv->cpu_dev = cpu_dev;
priv->clk = clk_get(cpu_dev, NULL); if (IS_ERR(priv->clk)) {
dev_err(cpu_dev, "%s: Failed to get clk for cpu: %d\n",
__func__, cpu_dev->id);
ret = PTR_ERR(priv->clk); goto out_free_cpufreq_table;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.