69 lines
2.6 KiB
Diff
69 lines
2.6 KiB
Diff
|
From e7495effeb9ceb9c0abe75e34169f34604328e68 Mon Sep 17 00:00:00 2001
|
||
|
From: Lukasz Luba <lukasz.luba@arm.com>
|
||
|
Date: Thu, 21 Jan 2021 17:04:45 +0000
|
||
|
Subject: [PATCH 098/109] ODROID-BACKPORT: drm/panfrost: Add governor data with
|
||
|
pre-defined thresholds
|
||
|
|
||
|
The simple_ondemand devfreq governor uses two thresholds to decide about
|
||
|
the frequency change: upthreshold, downdifferential. These two tunable
|
||
|
change the behavior of the governor decision, e.g. how fast to increase
|
||
|
the frequency or how rapidly limit the frequency. This patch adds needed
|
||
|
governor data with thresholds values gathered experimentally in different
|
||
|
workloads.
|
||
|
|
||
|
Signed-off-by: Lukasz Luba <lukasz.luba@arm.com>
|
||
|
Reviewed-by: Steven Price <steven.price@arm.com>
|
||
|
Signed-off-by: Steven Price <steven.price@arm.com>
|
||
|
Link: https://patchwork.freedesktop.org/patch/msgid/20210121170445.19761-1-lukasz.luba@arm.com
|
||
|
Change-Id: I31515863ab174edf691542cbc6ffbf50959bb095
|
||
|
---
|
||
|
drivers/gpu/drm/panfrost/panfrost_devfreq.c | 10 +++++++++-
|
||
|
drivers/gpu/drm/panfrost/panfrost_devfreq.h | 2 ++
|
||
|
2 files changed, 11 insertions(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/drivers/gpu/drm/panfrost/panfrost_devfreq.c b/drivers/gpu/drm/panfrost/panfrost_devfreq.c
|
||
|
index 56b3f5935703..7c5ffc81dce1 100644
|
||
|
--- a/drivers/gpu/drm/panfrost/panfrost_devfreq.c
|
||
|
+++ b/drivers/gpu/drm/panfrost/panfrost_devfreq.c
|
||
|
@@ -130,8 +130,16 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev)
|
||
|
panfrost_devfreq_profile.initial_freq = cur_freq;
|
||
|
dev_pm_opp_put(opp);
|
||
|
|
||
|
+ /*
|
||
|
+ * Setup default thresholds for the simple_ondemand governor.
|
||
|
+ * The values are chosen based on experiments.
|
||
|
+ */
|
||
|
+ pfdevfreq->gov_data.upthreshold = 45;
|
||
|
+ pfdevfreq->gov_data.downdifferential = 5;
|
||
|
+
|
||
|
devfreq = devm_devfreq_add_device(dev, &panfrost_devfreq_profile,
|
||
|
- DEVFREQ_GOV_SIMPLE_ONDEMAND, NULL);
|
||
|
+ DEVFREQ_GOV_SIMPLE_ONDEMAND,
|
||
|
+ &pfdevfreq->gov_data);
|
||
|
if (IS_ERR(devfreq)) {
|
||
|
DRM_DEV_ERROR(dev, "Couldn't initialize GPU devfreq\n");
|
||
|
ret = PTR_ERR(devfreq);
|
||
|
diff --git a/drivers/gpu/drm/panfrost/panfrost_devfreq.h b/drivers/gpu/drm/panfrost/panfrost_devfreq.h
|
||
|
index db6ea48e21f9..1e2a4de941aa 100644
|
||
|
--- a/drivers/gpu/drm/panfrost/panfrost_devfreq.h
|
||
|
+++ b/drivers/gpu/drm/panfrost/panfrost_devfreq.h
|
||
|
@@ -4,6 +4,7 @@
|
||
|
#ifndef __PANFROST_DEVFREQ_H__
|
||
|
#define __PANFROST_DEVFREQ_H__
|
||
|
|
||
|
+#include <linux/devfreq.h>
|
||
|
#include <linux/spinlock.h>
|
||
|
#include <linux/ktime.h>
|
||
|
|
||
|
@@ -17,6 +18,7 @@ struct panfrost_devfreq {
|
||
|
struct devfreq *devfreq;
|
||
|
struct opp_table *regulators_opp_table;
|
||
|
struct thermal_cooling_device *cooling;
|
||
|
+ struct devfreq_simple_ondemand_data gov_data;
|
||
|
bool opp_of_table_added;
|
||
|
|
||
|
ktime_t busy_time;
|
||
|
--
|
||
|
2.25.1
|
||
|
|