| From foo@baz Fri Mar 16 15:43:17 CET 2018 |
| From: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com> |
| Date: Mon, 4 Dec 2017 06:01:11 -0500 |
| Subject: media: vsp1: Prevent suspending and resuming DRM pipelines |
| |
| From: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com> |
| |
| |
| [ Upstream commit a17d2d6cd9985ca09a9e384f1bc71d710f7e5203 ] |
| |
| When used as part of a display pipeline, the VSP is stopped and |
| restarted explicitly by the DU from its suspend and resume handlers. |
| There is thus no need to stop or restart pipelines in the VSP suspend |
| and resume handlers, and doing so would cause the hardware to be |
| left in a misconfigured state. |
| |
| Ensure that the VSP suspend and resume handlers do not affect DRM-based |
| pipelines. |
| |
| Signed-off-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com> |
| Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> |
| Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> |
| Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/media/platform/vsp1/vsp1_drv.c | 16 ++++++++++++++-- |
| 1 file changed, 14 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/media/platform/vsp1/vsp1_drv.c |
| +++ b/drivers/media/platform/vsp1/vsp1_drv.c |
| @@ -571,7 +571,13 @@ static int __maybe_unused vsp1_pm_suspen |
| { |
| struct vsp1_device *vsp1 = dev_get_drvdata(dev); |
| |
| - vsp1_pipelines_suspend(vsp1); |
| + /* |
| + * When used as part of a display pipeline, the VSP is stopped and |
| + * restarted explicitly by the DU. |
| + */ |
| + if (!vsp1->drm) |
| + vsp1_pipelines_suspend(vsp1); |
| + |
| pm_runtime_force_suspend(vsp1->dev); |
| |
| return 0; |
| @@ -582,7 +588,13 @@ static int __maybe_unused vsp1_pm_resume |
| struct vsp1_device *vsp1 = dev_get_drvdata(dev); |
| |
| pm_runtime_force_resume(vsp1->dev); |
| - vsp1_pipelines_resume(vsp1); |
| + |
| + /* |
| + * When used as part of a display pipeline, the VSP is stopped and |
| + * restarted explicitly by the DU. |
| + */ |
| + if (!vsp1->drm) |
| + vsp1_pipelines_resume(vsp1); |
| |
| return 0; |
| } |