sched: cpufreq_schedutil: add attribute for change target_load

Default target_load is 80% and change it by the follow command:

echo 65 > /sys/devices/system/cpu/cpu0/cpufreq/schedutil/target_load

Change-Id: Icb02c36eab345a3f2e2d065fba76fdc015f47fa4
Signed-off-by: Liang Chen <cl@rock-chips.com>
This commit is contained in:
Liang Chen
2022-09-13 10:11:17 +08:00
committed by Tao Huang
parent 1c5d3aa79f
commit 4e8841e155

View File

@@ -19,6 +19,9 @@
struct sugov_tunables {
struct gov_attr_set attr_set;
unsigned int rate_limit_us;
#ifdef CONFIG_ARCH_ROCKCHIP
unsigned int target_load;
#endif
};
struct sugov_policy {
@@ -170,7 +173,11 @@ static unsigned int get_next_freq(struct sugov_policy *sg_policy,
if (next_freq)
freq = next_freq;
else
#ifdef CONFIG_ARCH_ROCKCHIP
freq = div64_ul((u64)(100 * freq / sg_policy->tunables->target_load) * util, max);
#else
freq = map_util_freq(util, freq, max);
#endif
if (freq == sg_policy->cached_raw_freq && !sg_policy->need_freq_update)
return sg_policy->next_freq;
@@ -612,8 +619,39 @@ rate_limit_us_store(struct gov_attr_set *attr_set, const char *buf, size_t count
static struct governor_attr rate_limit_us = __ATTR_RW(rate_limit_us);
#ifdef CONFIG_ARCH_ROCKCHIP
static ssize_t target_load_show(struct gov_attr_set *attr_set, char *buf)
{
struct sugov_tunables *tunables = to_sugov_tunables(attr_set);
return sprintf(buf, "%u\n", tunables->target_load);
}
static ssize_t
target_load_store(struct gov_attr_set *attr_set, const char *buf, size_t count)
{
struct sugov_tunables *tunables = to_sugov_tunables(attr_set);
unsigned int target_load;
if (kstrtouint(buf, 10, &target_load))
return -EINVAL;
if (!target_load || (target_load > 100))
return -EINVAL;
tunables->target_load = target_load;
return count;
}
static struct governor_attr target_load = __ATTR_RW(target_load);
#endif
static struct attribute *sugov_attrs[] = {
&rate_limit_us.attr,
#ifdef CONFIG_ARCH_ROCKCHIP
&target_load.attr,
#endif
NULL
};
ATTRIBUTE_GROUPS(sugov);
@@ -777,6 +815,9 @@ static int sugov_init(struct cpufreq_policy *policy)
}
tunables->rate_limit_us = cpufreq_policy_transition_delay_us(policy);
#ifdef CONFIG_ARCH_ROCKCHIP
tunables->target_load = 80;
#endif
policy->governor_data = sg_policy;
sg_policy->tunables = tunables;