mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 03:23:53 -04:00
drm/atomic: Loosen FB atomic checks
Loosen the requirements for atomic and legacy commit so that, in cases where pixel_source != FB, the commit can still go through. This includes adding framebuffer NULL checks in other areas to account for FB being NULL when non-FB pixel sources are enabled. To disable a plane, the pixel_source must be NONE or the FB must be NULL if pixel_source == FB. Signed-off-by: Jessica Zhang <quic_jesszhan@quicinc.com> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Link: https://patchwork.freedesktop.org/patch/msgid/20231027-solid-fill-v7-7-780188bfa7b2@quicinc.com
This commit is contained in:
committed by
Dmitry Baryshkov
parent
4ba6b7a646
commit
f1e75da536
@@ -674,17 +674,16 @@ static int drm_atomic_plane_check(const struct drm_plane_state *old_plane_state,
|
||||
{
|
||||
struct drm_plane *plane = new_plane_state->plane;
|
||||
struct drm_crtc *crtc = new_plane_state->crtc;
|
||||
const struct drm_framebuffer *fb = new_plane_state->fb;
|
||||
int ret;
|
||||
|
||||
/* either *both* CRTC and FB must be set, or neither */
|
||||
if (crtc && !fb) {
|
||||
drm_dbg_atomic(plane->dev, "[PLANE:%d:%s] CRTC set but no FB\n",
|
||||
/* either *both* CRTC and pixel source must be set, or neither */
|
||||
if (crtc && !drm_plane_has_visible_data(new_plane_state)) {
|
||||
drm_dbg_atomic(plane->dev, "[PLANE:%d:%s] CRTC set but no visible data\n",
|
||||
plane->base.id, plane->name);
|
||||
return -EINVAL;
|
||||
} else if (fb && !crtc) {
|
||||
drm_dbg_atomic(plane->dev, "[PLANE:%d:%s] FB set but no CRTC\n",
|
||||
plane->base.id, plane->name);
|
||||
} else if (drm_plane_has_visible_data(new_plane_state) && !crtc) {
|
||||
drm_dbg_atomic(plane->dev, "[PLANE:%d:%s] Source %d has visible data but no CRTC\n",
|
||||
plane->base.id, plane->name, new_plane_state->pixel_source);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -715,9 +714,11 @@ static int drm_atomic_plane_check(const struct drm_plane_state *old_plane_state,
|
||||
}
|
||||
|
||||
|
||||
ret = drm_atomic_plane_check_fb(new_plane_state);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (new_plane_state->pixel_source == DRM_PLANE_PIXEL_SOURCE_FB && new_plane_state->fb) {
|
||||
ret = drm_atomic_plane_check_fb(new_plane_state);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (plane_switching_crtc(old_plane_state, new_plane_state)) {
|
||||
drm_dbg_atomic(plane->dev,
|
||||
|
||||
Reference in New Issue
Block a user