From 75b6b04cdb54b2e91c0fd344ffc967ce64ddccd7 Mon Sep 17 00:00:00 2001 From: Dave Stevenson Date: Fri, 1 Apr 2022 17:10:37 +0100 Subject: [PATCH] drm/atomic: If margins are updated, update all planes. Margins may be implemented by scaling the planes, but as there is no way of intercepting the set_property for a standard property, and all planes are checked in drm_atomic_check_only before the connectors, there's now way to add the planes into the state from the driver. If the margin properties change, add all corresponding planes to the state. Signed-off-by: Dave Stevenson --- drivers/gpu/drm/drm_atomic_uapi.c | 11 +++++++++++ 1 file changed, 11 insertions(+) --- a/drivers/gpu/drm/drm_atomic_uapi.c +++ b/drivers/gpu/drm/drm_atomic_uapi.c @@ -715,6 +715,7 @@ static int drm_atomic_connector_set_prop { struct drm_device *dev = connector->dev; struct drm_mode_config *config = &dev->mode_config; + bool margins_updated = false; bool replaced = false; int ret; @@ -734,12 +735,16 @@ static int drm_atomic_connector_set_prop state->tv.subconnector = val; } else if (property == config->tv_left_margin_property) { state->tv.margins.left = val; + margins_updated = true; } else if (property == config->tv_right_margin_property) { state->tv.margins.right = val; + margins_updated = true; } else if (property == config->tv_top_margin_property) { state->tv.margins.top = val; + margins_updated = true; } else if (property == config->tv_bottom_margin_property) { state->tv.margins.bottom = val; + margins_updated = true; } else if (property == config->tv_mode_property) { state->tv.mode = val; } else if (property == config->tv_brightness_property) { @@ -818,6 +823,12 @@ static int drm_atomic_connector_set_prop return -EINVAL; } + if (margins_updated && state->crtc) { + ret = drm_atomic_add_affected_planes(state->state, state->crtc); + + return ret; + } + return 0; }