Commit ec793cf0 authored by Akhil P Oommen's avatar Akhil P Oommen Committed by Rob Clark

drm/msm: Add support for GPU cooling

Register GPU as a devfreq cooling device so that it can be passively
cooled by the thermal framework.
Signed-off-by: default avatarAkhil P Oommen <akhilpo@codeaurora.org>
Tested-by: default avatarMatthias Kaehlcke <mka@chromium.org>
Signed-off-by: default avatarRob Clark <robdclark@chromium.org>
parent cf11c1f8
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <generated/utsrelease.h> #include <generated/utsrelease.h>
#include <linux/string_helpers.h> #include <linux/string_helpers.h>
#include <linux/devfreq.h> #include <linux/devfreq.h>
#include <linux/devfreq_cooling.h>
#include <linux/devcoredump.h> #include <linux/devcoredump.h>
#include <linux/sched/task.h> #include <linux/sched/task.h>
...@@ -107,9 +108,18 @@ static void msm_devfreq_init(struct msm_gpu *gpu) ...@@ -107,9 +108,18 @@ static void msm_devfreq_init(struct msm_gpu *gpu)
if (IS_ERR(gpu->devfreq.devfreq)) { if (IS_ERR(gpu->devfreq.devfreq)) {
DRM_DEV_ERROR(&gpu->pdev->dev, "Couldn't initialize GPU devfreq\n"); DRM_DEV_ERROR(&gpu->pdev->dev, "Couldn't initialize GPU devfreq\n");
gpu->devfreq.devfreq = NULL; gpu->devfreq.devfreq = NULL;
return;
} }
devfreq_suspend_device(gpu->devfreq.devfreq); devfreq_suspend_device(gpu->devfreq.devfreq);
gpu->cooling = of_devfreq_cooling_register(gpu->pdev->dev.of_node,
gpu->devfreq.devfreq);
if (IS_ERR(gpu->cooling)) {
DRM_DEV_ERROR(&gpu->pdev->dev,
"Couldn't register GPU cooling device\n");
gpu->cooling = NULL;
}
} }
static int enable_pwrrail(struct msm_gpu *gpu) static int enable_pwrrail(struct msm_gpu *gpu)
...@@ -1044,4 +1054,6 @@ void msm_gpu_cleanup(struct msm_gpu *gpu) ...@@ -1044,4 +1054,6 @@ void msm_gpu_cleanup(struct msm_gpu *gpu)
if (gpu->worker) { if (gpu->worker) {
kthread_destroy_worker(gpu->worker); kthread_destroy_worker(gpu->worker);
} }
devfreq_cooling_unregister(gpu->cooling);
} }
...@@ -155,6 +155,8 @@ struct msm_gpu { ...@@ -155,6 +155,8 @@ struct msm_gpu {
struct msm_gpu_state *crashstate; struct msm_gpu_state *crashstate;
/* True if the hardware supports expanded apriv (a650 and newer) */ /* True if the hardware supports expanded apriv (a650 and newer) */
bool hw_apriv; bool hw_apriv;
struct thermal_cooling_device *cooling;
}; };
static inline struct msm_gpu *dev_to_gpu(struct device *dev) static inline struct msm_gpu *dev_to_gpu(struct device *dev)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment