Skip to content

Commit

Permalink
drm/mediatek: Clear pending flag when cmdq packet is done
Browse files Browse the repository at this point in the history
In cmdq mode, packet may be flushed before it is executed, so
the pending flag should be cleared after cmdq packet is done.

Signed-off-by: Yongqiang Niu <yongqiang.niu@mediatek.com>
Signed-off-by: jason-jh.lin <jason-jh.lin@mediatek.com>
Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
  • Loading branch information
Yongqiang Niu authored and Chun-Kuang Hu committed Nov 17, 2021
1 parent 593b655 commit 7f82d9c
Showing 1 changed file with 46 additions and 5 deletions.
51 changes: 46 additions & 5 deletions drivers/gpu/drm/mediatek/mtk_drm_crtc.c
Original file line number Diff line number Diff line change
Expand Up @@ -276,8 +276,42 @@ struct mtk_ddp_comp *mtk_drm_ddp_comp_for_plane(struct drm_crtc *crtc,
#if IS_REACHABLE(CONFIG_MTK_CMDQ)
static void ddp_cmdq_cb(struct mbox_client *cl, void *mssg)
{
struct cmdq_cb_data *data = mssg;
struct cmdq_client *cmdq_cl = container_of(cl, struct cmdq_client, client);
struct mtk_drm_crtc *mtk_crtc = container_of(cmdq_cl, struct mtk_drm_crtc, cmdq_client);
struct mtk_crtc_state *state;
unsigned int i;

if (data->sta < 0)
return;

state = to_mtk_crtc_state(mtk_crtc->base.state);

state->pending_config = false;

if (mtk_crtc->pending_planes) {
for (i = 0; i < mtk_crtc->layer_nr; i++) {
struct drm_plane *plane = &mtk_crtc->planes[i];
struct mtk_plane_state *plane_state;

plane_state = to_mtk_plane_state(plane->state);

plane_state->pending.config = false;
}
mtk_crtc->pending_planes = false;
}

if (mtk_crtc->pending_async_planes) {
for (i = 0; i < mtk_crtc->layer_nr; i++) {
struct drm_plane *plane = &mtk_crtc->planes[i];
struct mtk_plane_state *plane_state;

plane_state = to_mtk_plane_state(plane->state);

plane_state->pending.async_config = false;
}
mtk_crtc->pending_async_planes = false;
}

mtk_crtc->cmdq_vblank_cnt = 0;
}
Expand Down Expand Up @@ -433,7 +467,8 @@ static void mtk_crtc_ddp_config(struct drm_crtc *crtc,
state->pending_vrefresh, 0,
cmdq_handle);

state->pending_config = false;
if (!cmdq_handle)
state->pending_config = false;
}

if (mtk_crtc->pending_planes) {
Expand All @@ -453,9 +488,12 @@ static void mtk_crtc_ddp_config(struct drm_crtc *crtc,
mtk_ddp_comp_layer_config(comp, local_layer,
plane_state,
cmdq_handle);
plane_state->pending.config = false;
if (!cmdq_handle)
plane_state->pending.config = false;
}
mtk_crtc->pending_planes = false;

if (!cmdq_handle)
mtk_crtc->pending_planes = false;
}

if (mtk_crtc->pending_async_planes) {
Expand All @@ -475,9 +513,12 @@ static void mtk_crtc_ddp_config(struct drm_crtc *crtc,
mtk_ddp_comp_layer_config(comp, local_layer,
plane_state,
cmdq_handle);
plane_state->pending.async_config = false;
if (!cmdq_handle)
plane_state->pending.async_config = false;
}
mtk_crtc->pending_async_planes = false;

if (!cmdq_handle)
mtk_crtc->pending_async_planes = false;
}
}

Expand Down

0 comments on commit 7f82d9c

Please sign in to comment.