From 116deac7267143c980f6254f6bc0cb88d56ec916 Mon Sep 17 00:00:00 2001 From: Amir Vajid Date: Tue, 30 Jun 2020 15:47:25 -0700 Subject: [PATCH] PM / devfreq: make memlat and bwmon governors immutable The devfreq devices that support the mem_latency, compute or bw_hwmon governors are tightly coupled with hardware monitors and are not expected to change governors at runtime in normal operation. Thus, make these governors immutable and have them start with min_freq equal to max_freq to optimize performance during boot. Also make the initial polling interval 500 ms to reduce polling activity during boot. Change-Id: Ida67f404155dce01facdfe999d8e71d9e1ac317c Signed-off-by: Amir Vajid --- drivers/devfreq/devfreq_icc.c | 2 +- drivers/devfreq/governor_bw_hwmon.c | 6 ++++++ drivers/devfreq/governor_memlat.c | 7 +++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/devfreq/devfreq_icc.c b/drivers/devfreq/devfreq_icc.c index 248a0b97c07e8..6f72f8b47ceac 100644 --- a/drivers/devfreq/devfreq_icc.c +++ b/drivers/devfreq/devfreq_icc.c @@ -220,7 +220,7 @@ int devfreq_add_icc(struct device *dev) } p = &d->dp; - p->polling_ms = 50; + p->polling_ms = 500; p->target = icc_target; p->get_dev_status = icc_get_dev_status; diff --git a/drivers/devfreq/governor_bw_hwmon.c b/drivers/devfreq/governor_bw_hwmon.c index 3f9892cbc5c45..6ef1124ea90c1 100644 --- a/drivers/devfreq/governor_bw_hwmon.c +++ b/drivers/devfreq/governor_bw_hwmon.c @@ -616,6 +616,11 @@ static int gov_start(struct devfreq *df) goto err_sysfs; } + mutex_lock(&df->lock); + df->min_freq = df->max_freq; + update_devfreq(df); + mutex_unlock(&df->lock); + return 0; err_sysfs: @@ -934,6 +939,7 @@ out: static struct devfreq_governor devfreq_gov_bw_hwmon = { .name = "bw_hwmon", + .immutable = 1, .get_target_freq = devfreq_bw_hwmon_get_freq, .event_handler = devfreq_bw_hwmon_ev_handler, }; diff --git a/drivers/devfreq/governor_memlat.c b/drivers/devfreq/governor_memlat.c index 94cef86c14b28..0370c6cc98cf2 100644 --- a/drivers/devfreq/governor_memlat.c +++ b/drivers/devfreq/governor_memlat.c @@ -194,6 +194,11 @@ static int gov_start(struct devfreq *df) if (ret < 0) goto err_sysfs; + mutex_lock(&df->lock); + df->min_freq = df->max_freq; + update_devfreq(df); + mutex_unlock(&df->lock); + return 0; err_sysfs: @@ -421,12 +426,14 @@ static int devfreq_memlat_ev_handler(struct devfreq *df, static struct devfreq_governor devfreq_gov_memlat = { .name = "mem_latency", + .immutable = 1, .get_target_freq = devfreq_memlat_get_freq, .event_handler = devfreq_memlat_ev_handler, }; static struct devfreq_governor devfreq_gov_compute = { .name = "compute", + .immutable = 1, .get_target_freq = devfreq_memlat_get_freq, .event_handler = devfreq_memlat_ev_handler, };