Message ID | 20230809125722.24112-3-jason-jh.lin@mediatek.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Fix OVL iommu fault in cursor plane | expand |
Hi, Jason: On Wed, 2023-08-09 at 20:57 +0800, Jason-JH.Lin wrote: > The difference between drm_atomic_helper_commit_tail() and > drm_atomic_helper_commit_tail_rpm() is > drm_atomic_helper_commit_tail() will commit plane first and > then enable crtc, drm_atomic_helper_commit_tail_rpm() will > enable crtc first and then commit plane. > > Before mediatek-drm enables crtc, the power and clk required > by OVL have not been turned on, so the commit plane cannot be > committed before crtc is enabled. That means OVL layer should > not be enabled before crtc is enabled. > Therefore, the atomic_commit_tail of mediatek-drm is hooked with > drm_atomic_helper_commit_tail_rpm(). > > Another reason is that the plane_state of drm_atomic_state is not > synchronized with the plane_state stored in mtk_crtc during crtc > enablng, > so just set all planes to disabled. Reviewed-by: CK Hu <ck.hu@mediatek.com> > > Fixes: 119f5173628a ("drm/mediatek: Add DRM Driver for Mediatek SoC > MT8173.") > Signed-off-by: Jason-JH.Lin <jason-jh.lin@mediatek.com> > Reviewed-by: Alexandre Mergnat <amergnat@baylibre.com> > Reviewed-by: AngeloGioacchino Del Regno < > angelogioacchino.delregno@collabora.com> > --- > drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c > b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c > index d40142842f85..51d10e65004e 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c > +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c > @@ -410,6 +410,9 @@ static int mtk_crtc_ddp_hw_init(struct > mtk_drm_crtc *mtk_crtc) > unsigned int local_layer; > > plane_state = to_mtk_plane_state(plane->state); > + > + /* should not enable layer before crtc enabled */ > + plane_state->pending.enable = false; > comp = mtk_drm_ddp_comp_for_plane(crtc, plane, > &local_layer); > if (comp) > mtk_ddp_comp_layer_config(comp, local_layer,
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c index d40142842f85..51d10e65004e 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c @@ -410,6 +410,9 @@ static int mtk_crtc_ddp_hw_init(struct mtk_drm_crtc *mtk_crtc) unsigned int local_layer; plane_state = to_mtk_plane_state(plane->state); + + /* should not enable layer before crtc enabled */ + plane_state->pending.enable = false; comp = mtk_drm_ddp_comp_for_plane(crtc, plane, &local_layer); if (comp) mtk_ddp_comp_layer_config(comp, local_layer,