cpufreq: teach cpuinfo_{min,max}_freq as available frequencies

Summary:
The intel_pstate scaling driver exposes the `scaling_cur_freq` since
kernel 3.17 [*], it would be fine that the min and max frequencies
are known even without the `scaling_available_frequencie`.

This commit teaches to use the cpuinfo_{min,max}_freq as fallback in
case the `scaling_available_frequencies` is not available within
intel pstate.

[*] https://lkml.org/lkml/2014/11/11/1060

Signed-off-by: Takeshi Banse <takebi@laafc.net>

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D1686
This commit is contained in:
Takeshi Banse 2014-11-29 16:39:41 +09:00 committed by Carsten Haitzler (Rasterman)
parent 70753a7903
commit 6601c09f82
1 changed files with 38 additions and 1 deletions

View File

@ -301,7 +301,8 @@ _button_cb_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED_
}
if ((cpufreq_config->status->frequencies) &&
(cpufreq_config->status->can_set_frequency))
(cpufreq_config->status->can_set_frequency) &&
(!cpufreq_config->status->pstate))
{
mo = e_menu_new();
cpufreq_config->menu_frequency = mo;
@ -766,6 +767,42 @@ _cpufreq_status_check_available(Cpu_Status *s)
eina_list_count(s->frequencies),
_cpufreq_cb_sort);
}
else
do
{
#define CPUFREQ_SYSFSDIR "/sys/devices/system/cpu/cpu0/cpufreq"
f = fopen(CPUFREQ_SYSFSDIR "/scaling_cur_freq", "r");
if (!f) break;
fclose(f);
f = fopen(CPUFREQ_SYSFSDIR "/scaling_driver", "r");
if (!f) break;
if (fgets(buf, sizeof(buf), f) == NULL)
{
fclose(f);
break;
}
fclose(f);
if (strcmp(buf, "intel_pstate\n")) break;
if (s->frequencies)
{
eina_list_free(s->frequencies);
s->frequencies = NULL;
}
#define CPUFREQ_ADDF(filename) \
f = fopen(CPUFREQ_SYSFSDIR filename, "r"); \
if (f) \
{ \
if (fgets(buf, sizeof(buf), f) != NULL) \
s->frequencies = eina_list_append(s->frequencies, \
(void *)(long)(atoi(buf))); \
fclose(f); \
}
CPUFREQ_ADDF("/cpuinfo_min_freq");
CPUFREQ_ADDF("/cpuinfo_max_freq");
}
while (0);
f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors", "r");
if (f)