video: add multi plane for video display [2/2]

PD#SWPL-236654

Problem:
When DTV switches channels, a plane switching operation is performed.
When the video plane is disabled, the DRM releases the fence
corresponding to the current DMABUF.

Due to the differences in DMABUF usage by DTV, when the video
plane is re-enabled, it commits the DMABUF from before it was disabled.
Therefore, the DRM recognizes this as a repeat frame and does not
recreate the fence, continuing to use the fence from the previous frame.

Because the fence from the previous frame was already released when
the video plane was disabled, this results in a null pointer exception.

Solution:
When video is disabled, clear the DMABUF record to ensure that it is
not mistakenly identified as a repeat frame after being re-enabled.

Verify:
S7

Test:
DRM-OSD-20

Change-Id: Idb542a107adca7e90ec596959f412f8aef840c36
Signed-off-by: dijie.pan <dijie.pan@amlogic.com>
This commit is contained in:
dijie.pan
2025-11-18 10:28:20 +08:00
committed by gerrit autosubmit
parent 5078710e1c
commit 157698a8a4
2 changed files with 3 additions and 2 deletions
+2
View File
@@ -2338,6 +2338,8 @@ static int meson_video_plane_atomic_check(struct drm_plane *plane,
ret = meson_video_plane_fb_check(plane, state, plane_info);
if (ret < 0) {
plane_info->enable = 0;
plane_info->dmabuf[0] = NULL;
plane_info->dmabuf[1] = NULL;
video_pipeline_block_check(mvsp, atomic_state, video_plane->plane_index);
DRM_DEBUG_DRIVER("plane%d fb is NULL,disable the plane!\n",
plane_info->plane_index);
+1 -2
View File
@@ -787,8 +787,7 @@ int video_pipeline_check_block(struct meson_video_sub_pipeline_state *mvps,
MESON_DRM_TRAVERSE("mvps (%p), atomic-state(%p)\n", mvps, state);
if (!(mvps->video_plane_info[plane_index].enable &&
mvps->index == mvps->video_plane_info[plane_index].crtc_index))
if (!(mvps->index == mvps->video_plane_info[plane_index].crtc_index))
return -EINVAL;
block = &mvps->pipe->video[plane_index]->base;