#define CPUFREQ_MIN_FREQ_PATH_SUFFIX "/cpufreq_min"
#define CPUFREQ_CURR_FREQ_PATH_SUFFIX "/cpufreq/cpuinfo_cur_freq"
-#define CPUFREQ_AVAILABLE_FREQ_MAX 1300000
-#define CPUFREQ_AVAILABLE_FREQ_MIN 768000
-#define CPUFREQ_PMQOS_ONLINE_MIN_NUM_UNLOCK -1
-#define CPUFREQ_PMQOS_ONLINE_MAX_NUM_UNLOCK -1
+#define CPUFREQ_DEFAULT_MIN_FREQ 0
+#define CPUFREQ_DEFAULT_MAX_FREQ INT_MAX
+#define CPUFREQ_DEFAULT_ONLINE_MIN_NUM 0
+#define CPUFREQ_DEFAULT_ONLINE_MAX_NUM 4
+
+#define CPUFREQ_PMQOS_REQUEST_UNLOCK -1
static int tm1_dvfs_get_curr_freq(char *res_name)
{
char path[PATH_MAX];
int ret;
- if ((!res_name) || (freq < 0))
+ if (!res_name)
return -EINVAL;
- if (freq == CPUFREQ_AVAILABLE_FREQ_MIN)
- freq = -1;
-
ret = snprintf(path, PATH_MAX, "%s%s",
CPUFREQ_PMQOS_PATH_PREFIX,
CPUFREQ_MIN_FREQ_PATH_SUFFIX);
char path[PATH_MAX];
int ret;
- if ((!res_name) || (freq < 0))
+ if (!res_name)
return -EINVAL;
- if (freq == CPUFREQ_AVAILABLE_FREQ_MAX)
- freq = -1;
-
snprintf(path, PATH_MAX, "%s%s",
CPUFREQ_PMQOS_PATH_PREFIX,
CPUFREQ_MAX_FREQ_PATH_SUFFIX);
CPUFREQ_PMQOS_PATH_PREFIX,
CPUFREQ_CPU_ONLINE_MIN_NUM_PATH_SUFFIX);
- if (num == 0)
- num = CPUFREQ_PMQOS_ONLINE_MIN_NUM_UNLOCK;
-
ret = sysfs_write_int(path, num);
if (ret < 0)
return ret;
CPUFREQ_PMQOS_PATH_PREFIX,
CPUFREQ_CPU_ONLINE_MAX_NUM_PATH_SUFFIX);
- if (num == 0)
- num = CPUFREQ_PMQOS_ONLINE_MAX_NUM_UNLOCK;
-
ret = sysfs_write_int(path, num);
if (ret < 0)
return ret;
cpu_res = (struct pass_resource_cpu *) common;
- ret = cpu_res->hotplug.set_online_max_num(res_name, 0);
+ /*
+ * tm1 has weird pmqos sysfs node, thus we cannot apply save/restore
+ * feature as pass-hal-standard does. Instead of using standard
+ * interface, we manually restore the each resource state; pmqos
+ * request is unlocked by passing argument '-1' first, and resource
+ * state is restored by passing default value.
+ */
+ ret = cpu_res->hotplug.set_online_max_num(res_name,
+ CPUFREQ_PMQOS_REQUEST_UNLOCK);
+ if (ret < 0)
+ goto exit;
+ ret = cpu_res->hotplug.set_online_max_num(res_name,
+ CPUFREQ_DEFAULT_ONLINE_MAX_NUM);
if (ret < 0)
goto exit;
- ret = cpu_res->hotplug.set_online_min_num(res_name, 0);
+ ret = cpu_res->hotplug.set_online_min_num(res_name,
+ CPUFREQ_PMQOS_REQUEST_UNLOCK);
+ if (ret < 0)
+ goto exit;
+ ret = cpu_res->hotplug.set_online_min_num(res_name,
+ CPUFREQ_DEFAULT_ONLINE_MIN_NUM);
if (ret < 0)
goto exit;
- ret = cpu_res->dvfs.set_min_freq(res_name, CPUFREQ_AVAILABLE_FREQ_MIN);
+ ret = cpu_res->dvfs.set_min_freq(res_name,
+ CPUFREQ_PMQOS_REQUEST_UNLOCK);
+ if (ret < 0)
+ goto exit;
+ ret = cpu_res->dvfs.set_min_freq(res_name, CPUFREQ_DEFAULT_MIN_FREQ);
if (ret < 0)
goto exit;
- ret = cpu_res->dvfs.set_max_freq(res_name, CPUFREQ_AVAILABLE_FREQ_MAX);
+ ret = cpu_res->dvfs.set_max_freq(res_name,
+ CPUFREQ_PMQOS_REQUEST_UNLOCK);
+ if (ret < 0)
+ goto exit;
+ ret = cpu_res->dvfs.set_max_freq(res_name, CPUFREQ_DEFAULT_MAX_FREQ);
if (ret < 0)
goto exit;
+
exit:
free(common);