summaryrefslogtreecommitdiff
path: root/mali_kbase/platform/pixel/pixel_gpu_sysfs.c
diff options
context:
space:
mode:
authorSidath Senanayake <sidaths@google.com>2021-06-15 15:37:15 +0100
committerSidath Senanayake <sidaths@google.com>2021-06-15 21:43:33 +0100
commitaf55bbd0f81d100f10c516545345fe6ebe775fd3 (patch)
treef19db325086db492b31af03a3dc7992f38461338 /mali_kbase/platform/pixel/pixel_gpu_sysfs.c
parent9f74056b960213432916b89cec50fbdf40474dc2 (diff)
downloadgpu-af55bbd0f81d100f10c516545345fe6ebe775fd3.tar.gz
mali_kbase: platform: power: Correctly track GPU state
Ensure that the GPU top level power domain does not power down when we only go idle so that GPU state is not lost. This allows us to save cycles when there is new GPU work by not requiring the core Mali KMD to regenerate state. In order to do this, we track both GPU power domains and take a reference to the GPU top level power domain when the SOC is not suspended. Bug: 191136938 Signed-off-by: Sidath Senanayake <sidaths@google.com> Change-Id: I015b3f3f2747a0b6c2f51609d07f0e475bfcac84
Diffstat (limited to 'mali_kbase/platform/pixel/pixel_gpu_sysfs.c')
-rw-r--r--mali_kbase/platform/pixel/pixel_gpu_sysfs.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/mali_kbase/platform/pixel/pixel_gpu_sysfs.c b/mali_kbase/platform/pixel/pixel_gpu_sysfs.c
index 9a32b7e..e856039 100644
--- a/mali_kbase/platform/pixel/pixel_gpu_sysfs.c
+++ b/mali_kbase/platform/pixel/pixel_gpu_sysfs.c
@@ -75,7 +75,7 @@ static ssize_t clock_info_show(struct device *dev, struct device_attribute *attr
" Power status : %s\n"
" gpu0 clock (top level) : %d kHz\n"
" gpu1 clock (shaders) : %d kHz\n",
- (gpu_power_status(kbdev) ? "on" : "off"),
+ (gpu_pm_get_power_state(kbdev) ? "on" : "off"),
pc->dvfs.table[pc->dvfs.level_target].clk[GPU_DVFS_CLK_TOP_LEVEL],
pc->dvfs.table[pc->dvfs.level_target].clk[GPU_DVFS_CLK_SHADERS]);
@@ -200,7 +200,8 @@ static ssize_t power_stats_show(struct device *dev, struct device_attribute *att
/* First trigger an update */
mutex_lock(&pc->dvfs.lock);
- gpu_dvfs_metrics_update(kbdev, pc->dvfs.level, pc->dvfs.level, gpu_power_status(kbdev));
+ gpu_dvfs_metrics_update(kbdev, pc->dvfs.level, pc->dvfs.level,
+ gpu_pm_get_power_state(kbdev));
mutex_unlock(&pc->dvfs.lock);
ret = scnprintf(buf + ret, PAGE_SIZE - ret, "DVFS stats: (times in ms)\n");
@@ -582,7 +583,8 @@ static ssize_t time_in_state_show(struct device *dev, struct device_attribute *a
/* First trigger an update */
mutex_lock(&pc->dvfs.lock);
- gpu_dvfs_metrics_update(kbdev, pc->dvfs.level, pc->dvfs.level, gpu_power_status(kbdev));
+ gpu_dvfs_metrics_update(kbdev, pc->dvfs.level, pc->dvfs.level,
+ gpu_pm_get_power_state(kbdev));
mutex_unlock(&pc->dvfs.lock);
for (i = pc->dvfs.level_max; i <= pc->dvfs.level_min; i++)
@@ -605,7 +607,8 @@ static ssize_t trans_stat_show(struct device *dev, struct device_attribute *attr
/* First trigger an update */
mutex_lock(&pc->dvfs.lock);
- gpu_dvfs_metrics_update(kbdev, pc->dvfs.level, pc->dvfs.level, gpu_power_status(kbdev));
+ gpu_dvfs_metrics_update(kbdev, pc->dvfs.level, pc->dvfs.level,
+ gpu_pm_get_power_state(kbdev));
mutex_unlock(&pc->dvfs.lock);
ret += scnprintf(buf + ret, PAGE_SIZE - ret, "%9s : %s\n", "From", "To");