From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark yao Subject: Re: [PATCH 1/2] drm/rockchip: vop: Do check if an update is pending during disable Date: Fri, 08 Apr 2016 09:07:09 +0800 Message-ID: <5707043D.6060706@rock-chips.com> References: <1459937686-9142-1-git-send-email-tomeu.vizoso@collabora.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0014463278==" Return-path: In-Reply-To: <1459937686-9142-1-git-send-email-tomeu.vizoso@collabora.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Tomeu Vizoso , linux-kernel@vger.kernel.org Cc: linux-rockchip@lists.infradead.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org List-Id: linux-rockchip.vger.kernel.org --===============0014463278== Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable
On 2016=E5=B9=B404=E6=9C=8806=E6=97=A5= 18:14, Tomeu Vizoso wrote:
When a plane is being disabled but it's still enable=
d, do check if the
previous update has been completed by reading yrgb_mst back.

Otherwise, pending pageflips would remain pending after a CRTC is
disabled.

Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
---
 drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/dr=
m/rockchip/rockchip_drm_vop.c
index a9b1e8b5ac85..f46b1fd1887b 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
@@ -1064,8 +1064,9 @@ static bool vop_win_pending_is_complete(struct vop_=
win *vop_win)
 	struct vop_plane_state *state =3D to_vop_plane_state(plane->state);
 	dma_addr_t yrgb_mst;
=20
-	if (!state->enable)
-		return VOP_WIN_GET(vop_win->vop, vop_win->data, enable) =3D=3D 0=
;
+	if (!state->enable &&
+	    VOP_WIN_GET(vop_win->vop, vop_win->data, enable) =3D=3D 0)
+		return true;

It is wrong, the patch would cause a bug.

when state->enable is 0, check yrgb_mst =3D=3D state->yrgb_mst always be true, because state->yrgb_mst not update on plane disabled funtion, that would cause iommu crash.

About pending pageflips would remain pending, can you=C2=A0 describe more info about it? I think those pending pageflips should be ignore when CRTC is disabled.

Thanks.

=20
 	yrgb_mst =3D VOP_WIN_GET_YRGBADDR(vop_win->vop, vop_win->data);
=20

--=20
=EF=BC=ADark Yao
--===============0014463278== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVs IG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== --===============0014463278==--