aboutsummaryrefslogtreecommitdiff
path: root/modules/devices/arm/processor.c
diff options
context:
space:
mode:
authorBurt P <pburt0@gmail.com>2018-10-21 15:51:08 -0500
committerLeandro A. F. Pereira <leandro@hardinfo.org>2018-10-22 19:45:03 -0700
commit459f2b1922fff188ea7912dca0f83ebc587a11c4 (patch)
treea364a7189a23228343c0f296d1f7cca66d7887d6 /modules/devices/arm/processor.c
parentf281f89033b95cce1ac833c30a37d2d5ff396583 (diff)
arm: try device tree opp for cpu freq
Signed-off-by: Burt P <pburt0@gmail.com>
Diffstat (limited to 'modules/devices/arm/processor.c')
-rw-r--r--modules/devices/arm/processor.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/modules/devices/arm/processor.c b/modules/devices/arm/processor.c
index f4b58533..65e94e5e 100644
--- a/modules/devices/arm/processor.c
+++ b/modules/devices/arm/processor.c
@@ -45,6 +45,7 @@ processor_scan(void)
gchar buffer[128];
gchar *rep_pname = NULL;
GSList *pi = NULL;
+ dtr *dt = dtr_new(NULL);
cpuinfo = fopen(PROC_CPUINFO, "r");
if (!cpuinfo)
@@ -162,6 +163,18 @@ processor_scan(void)
else
processor->cpu_mhz = 0.0f;
+ /* Try OPP, although if it exists, it should have been available
+ * via cpufreq. */
+ if (dt && processor->cpu_mhz == 0.0f) {
+ gchar *dt_cpu_path = g_strdup_printf("/cpus/cpu@%d", processor->id);
+ dt_opp_range *opp = dtr_get_opp_range(dt, dt_cpu_path);
+ if (opp) {
+ processor->cpu_mhz = (double)opp->khz_max / 1000;
+ g_free(opp);
+ }
+ g_free(dt_cpu_path);
+ }
+
/* mode */
processor->mode = ARM_A32;
if ( processor_has_flag(processor->flags, "pmull")
@@ -173,6 +186,7 @@ processor_scan(void)
#endif
}
}
+ dtr_free(dt);
return procs;
}