msm: dcvs: add ss_no_corr_below_freq parameter

The busy/idle behavior of different cores can be correlated by
DCVS when determining what frequency to run cores at. However,
this is not desirable below a certain frequency. Add a parameter
to establish what this frequency is. The parameter is configurable
in userspace via sysfs.

The ss_iobusy_conv parameter is currently unused, so it is
being replaced with ss_no_corr_below_freq.

(cherry picked from commit e8c6d615259af5fde8a6613f53c41c212407bda9)

Change-Id: Ibf814f3f93b92a532d7b3af80721a5bc7db1bd31
Signed-off-by: Steve Muckle <smuckle@codeaurora.org>
This commit is contained in:
Steve Muckle 2012-12-06 14:31:00 -08:00 committed by Stephen Boyd
parent 4d9a321b56
commit be237a3b3e
9 changed files with 16 additions and 16 deletions

View file

@ -37,9 +37,9 @@ Required properties:
- qcom,algo-ss-win-size-max-us: sets maximum steady state window size.
- qcom,algo-ss-util-pct: sets target CPU utilization during
steady-state.
- qcom,algo-ss-iobusy-conv: specifies how wait time (i/o busy time)
is incorporated into the steady-state
algorithm.
- qcom,algo-ss-no-corr-below-freq: specifies frequency below which DCVS
will not attempt to correlate busy or
idle information from different CPUs
- qcom,energy-active-coeff-a: sets active power equation coefficient a.
- qcom,energy-active-coeff-b: sets active power equation coefficient b.
@ -89,7 +89,7 @@ qcom,kgsl-3d0@fdb00000 {
qcom,algo-ss-win-size-min-us = <1000000>;
qcom,algo-ss-win-size-max-us = <1000000>;
qcom,algo-ss-util-pct = <95>;
qcom,algo-ss-iobusy-conv = <100>;
qcom,algo-ss-no-corr-below-freq = <0>;
qcom,energy-active-coeff-a = <2492>;
qcom,energy-active-coeff-b = <0>;

View file

@ -125,7 +125,7 @@ Example of A330 GPU in MSM8974:
qcom,algo-ss-window-size = <1000000>;
qcom,algo-ss-util-pct = <95>;
qcom,algo-em-max-util-pct = <97>;
qcom,algo-ss-iobusy-conv = <100>;
qcom,algo-ss-no-corr-below-freq = <0>;
qcom,dcvs-freq@0 {
reg = <0>;

View file

@ -106,7 +106,7 @@
qcom,algo-ss-win-size-min-us = <1000000>;
qcom,algo-ss-win-size-max-us = <1000000>;
qcom,algo-ss-util-pct = <95>;
qcom,algo-ss-iobusy-conv = <100>;
qcom,algo-ss-no-corr-below-freq = <0>;
qcom,energy-active-coeff-a = <2492>;
qcom,energy-active-coeff-b = <0>;

View file

@ -51,7 +51,7 @@ static struct msm_dcvs_core_info grp3d_core_info = {
.ss_win_size_min_us = 1000000,
.ss_win_size_max_us = 1000000,
.ss_util_pct = 95,
.ss_iobusy_conv = 100,
.ss_no_corr_below_freq = 0,
},
.energy_coeffs = {

View file

@ -2662,7 +2662,7 @@ static struct msm_dcvs_core_info apq8064_core_info = {
.slack_weight_thresh_pct = 3,
.slack_time_min_us = 45000,
.slack_time_max_us = 45000,
.ss_iobusy_conv = 100,
.ss_no_corr_below_freq = 0,
.ss_win_size_min_us = 1000000,
.ss_win_size_max_us = 1000000,
.ss_util_pct = 95,

View file

@ -2948,7 +2948,7 @@ static struct msm_dcvs_core_info grp3d_core_info = {
.ss_win_size_min_us = 1000000,
.ss_win_size_max_us = 1000000,
.ss_util_pct = 95,
.ss_iobusy_conv = 100,
.ss_no_corr_below_freq = 0,
},
.energy_coeffs = {
.active_coeff_a = 2492,
@ -2985,7 +2985,7 @@ static struct msm_dcvs_core_info grp2d_core_info = {
.ss_win_size_min_us = 1000000,
.ss_win_size_max_us = 1000000,
.ss_util_pct = 95,
.ss_iobusy_conv = 100,
.ss_no_corr_below_freq = 0,
},
.energy_coeffs = {
.active_coeff_a = 2492,

View file

@ -48,7 +48,7 @@ struct msm_dcvs_algo_param {
uint32_t slack_time_min_us;
uint32_t slack_time_max_us;
uint32_t slack_weight_thresh_pct;
uint32_t ss_iobusy_conv;
uint32_t ss_no_corr_below_freq;
uint32_t ss_win_size_min_us;
uint32_t ss_win_size_max_us;
uint32_t ss_util_pct;

View file

@ -49,7 +49,7 @@ struct core_attribs {
struct kobj_attribute slack_time_min_us;
struct kobj_attribute slack_time_max_us;
struct kobj_attribute slack_weight_thresh_pct;
struct kobj_attribute ss_iobusy_conv;
struct kobj_attribute ss_no_corr_below_freq;
struct kobj_attribute ss_win_size_min_us;
struct kobj_attribute ss_win_size_max_us;
struct kobj_attribute ss_util_pct;
@ -706,7 +706,7 @@ DCVS_ALGO_PARAM(slack_mode_dynamic)
DCVS_ALGO_PARAM(slack_time_min_us)
DCVS_ALGO_PARAM(slack_time_max_us)
DCVS_ALGO_PARAM(slack_weight_thresh_pct)
DCVS_ALGO_PARAM(ss_iobusy_conv)
DCVS_ALGO_PARAM(ss_no_corr_below_freq)
DCVS_ALGO_PARAM(ss_win_size_min_us)
DCVS_ALGO_PARAM(ss_win_size_max_us)
DCVS_ALGO_PARAM(ss_util_pct)
@ -892,7 +892,7 @@ static int msm_dcvs_setup_core_sysfs(struct dcvs_core *core)
DCVS_RW_ATTRIB(8, slack_weight_thresh_pct);
DCVS_RW_ATTRIB(9, slack_time_min_us);
DCVS_RW_ATTRIB(10, slack_time_max_us);
DCVS_RW_ATTRIB(11, ss_iobusy_conv);
DCVS_RW_ATTRIB(11, ss_no_corr_below_freq);
DCVS_RW_ATTRIB(12, ss_win_size_min_us);
DCVS_RW_ATTRIB(13, ss_win_size_max_us);
DCVS_RW_ATTRIB(14, ss_util_pct);

View file

@ -876,8 +876,8 @@ static struct msm_dcvs_core_info *adreno_of_get_dcvs(struct device_node *parent)
if (adreno_of_read_property(node, "qcom,algo-ss-util-pct",
&info->algo_param.ss_util_pct))
goto err;
if (adreno_of_read_property(node, "qcom,algo-ss-iobusy-conv",
&info->algo_param.ss_iobusy_conv))
if (adreno_of_read_property(node, "qcom,algo-ss-no-corr-below-freq",
&info->algo_param.ss_no_corr_below_freq))
goto err;
if (adreno_of_read_property(node, "qcom,energy-active-coeff-a",