Message ID | 1603958841-20233-1-git-send-email-akhilpo@codeaurora.org |
---|---|
State | Superseded |
Headers | show |
Series | [v4,1/3] drm/msm: Add support for GPU cooling | expand |
On Thu, Oct 29, 2020 at 01:37:19PM +0530, Akhil P Oommen wrote: > Register GPU as a devfreq cooling device so that it can be passively > cooled by the thermal framework. > > Signed-off-by: Akhil P Oommen <akhilpo@codeaurora.org> > Reviewed-by: Matthias Kaehlcke <mka@chromium.org> Wait, I did not post a 'Reviewed-by' tag for this patch! I think the patch should be ok, but I'm still not super happy about the resource management involving devfreq in general (see discussion on https://patchwork.freedesktop.org/patch/394291/?series=82476&rev=1). It's not really something introduced by this patch, but if it ever gets fixed releasing the cooling device at the end of msm_gpu_cleanup() after everything else might cause trouble. In summary, I'm supportive of landing this patch, but reluctant to 'sign it off' because of the above. In any case: Tested-by: Matthias Kaehlcke <mka@chromium.org>
On 10/30/2020 2:18 AM, mka@chromium.org wrote: > On Thu, Oct 29, 2020 at 01:37:19PM +0530, Akhil P Oommen wrote: >> Register GPU as a devfreq cooling device so that it can be passively >> cooled by the thermal framework. >> >> Signed-off-by: Akhil P Oommen <akhilpo@codeaurora.org> >> Reviewed-by: Matthias Kaehlcke <mka@chromium.org> > > Wait, I did not post a 'Reviewed-by' tag for this patch! > > I think the patch should be ok, but I'm still not super happy > about the resource management involving devfreq in general (see > discussion on https://patchwork.freedesktop.org/patch/394291/?series=82476&rev=1). > It's not really something introduced by this patch, but if it ever > gets fixed releasing the cooling device at the end of > msm_gpu_cleanup() after everything else might cause trouble. > > In summary, I'm supportive of landing this patch, but reluctant to > 'sign it off' because of the above. > > In any case: > > Tested-by: Matthias Kaehlcke <mka@chromium.org> Sorry, Matthias. My mistake. You shared the reviewed tag for the dt-bindings update. Will fix this ASAP. Thanks for verifying this. -Akhil. > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel >
On Thu, 29 Oct 2020 13:37:21 +0530, Akhil P Oommen wrote: > Add cooling device support to gpu. A cooling device is bound to a > thermal zone to allow thermal mitigation. > > Signed-off-by: Akhil P Oommen <akhilpo@codeaurora.org> > --- > Documentation/devicetree/bindings/display/msm/gpu.txt | 7 +++++++ > 1 file changed, 7 insertions(+) > Acked-by: Rob Herring <robh@kernel.org>
diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c index 55d1648..9f9db46 100644 --- a/drivers/gpu/drm/msm/msm_gpu.c +++ b/drivers/gpu/drm/msm/msm_gpu.c @@ -14,6 +14,7 @@ #include <generated/utsrelease.h> #include <linux/string_helpers.h> #include <linux/devfreq.h> +#include <linux/devfreq_cooling.h> #include <linux/devcoredump.h> #include <linux/sched/task.h> @@ -107,9 +108,18 @@ static void msm_devfreq_init(struct msm_gpu *gpu) if (IS_ERR(gpu->devfreq.devfreq)) { DRM_DEV_ERROR(&gpu->pdev->dev, "Couldn't initialize GPU devfreq\n"); gpu->devfreq.devfreq = NULL; + return; } 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) @@ -1005,4 +1015,6 @@ void msm_gpu_cleanup(struct msm_gpu *gpu) gpu->aspace->mmu->funcs->detach(gpu->aspace->mmu); msm_gem_address_space_put(gpu->aspace); } + + devfreq_cooling_unregister(gpu->cooling); } diff --git a/drivers/gpu/drm/msm/msm_gpu.h b/drivers/gpu/drm/msm/msm_gpu.h index 6c9e1fd..9a8f20d 100644 --- a/drivers/gpu/drm/msm/msm_gpu.h +++ b/drivers/gpu/drm/msm/msm_gpu.h @@ -147,6 +147,8 @@ struct msm_gpu { struct msm_gpu_state *crashstate; /* True if the hardware supports expanded apriv (a650 and newer) */ bool hw_apriv; + + struct thermal_cooling_device *cooling; }; static inline struct msm_gpu *dev_to_gpu(struct device *dev)