diff options
Diffstat (limited to 'drivers/cpufreq')
-rw-r--r-- | drivers/cpufreq/cpufreq-dt.c | 5 | ||||
-rw-r--r-- | drivers/cpufreq/cpufreq_governor.c | 7 |
2 files changed, 11 insertions, 1 deletions
diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c index bab67db54b7e..88812437e8af 100644 --- a/drivers/cpufreq/cpufreq-dt.c +++ b/drivers/cpufreq/cpufreq-dt.c @@ -193,6 +193,7 @@ static int cpufreq_init(struct cpufreq_policy *policy) struct clk *cpu_clk; unsigned long min_uV = ~0, max_uV = 0; unsigned int transition_latency; + unsigned int sampling_rate = 0; int ret; ret = allocate_resources(policy->cpu, &cpu_dev, &cpu_reg, &cpu_clk); @@ -230,6 +231,9 @@ static int cpufreq_init(struct cpufreq_policy *policy) of_property_read_u32(np, "voltage-tolerance", &priv->voltage_tolerance); + if (of_property_read_u32(np, "sampling-rate", &sampling_rate)) + sampling_rate = 0; + if (of_property_read_u32(np, "clock-latency", &transition_latency)) transition_latency = CPUFREQ_ETERNAL; @@ -292,6 +296,7 @@ static int cpufreq_init(struct cpufreq_policy *policy) } policy->cpuinfo.transition_latency = transition_latency; + policy->cpuinfo.sampling_rate = sampling_rate; pd = cpufreq_get_driver_data(); if (!pd || !pd->independent_clocks) diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c index 1b44496b2d2b..53d06df86310 100644 --- a/drivers/cpufreq/cpufreq_governor.c +++ b/drivers/cpufreq/cpufreq_governor.c @@ -303,11 +303,16 @@ int cpufreq_governor_dbs(struct cpufreq_policy *policy, if (latency == 0) latency = 1; + sampling_rate = policy->cpuinfo.sampling_rate; + + if (sampling_rate == 0) + sampling_rate = latency * LATENCY_MULTIPLIER; + /* Bring kernel and HW constraints together */ dbs_data->min_sampling_rate = max(dbs_data->min_sampling_rate, MIN_LATENCY_MULTIPLIER * latency); set_sampling_rate(dbs_data, max(dbs_data->min_sampling_rate, - latency * LATENCY_MULTIPLIER)); + sampling_rate)); if ((cdata->governor == GOV_CONSERVATIVE) && (!policy->governor->initialized)) { |