[PATCH 4/5] drm: Check crtc viewport correctly with rotated primary plane on atomic drivers

ville.syrjala at linux.intel.com ville.syrjala at linux.intel.com
Thu Oct 15 10:40:01 PDT 2015


From: Ville Syrjälä <ville.syrjala at linux.intel.com>

On atomic drivers we can dig out the primary plane rotation from the
plane state instead of looking at the legacy crtc->invert_dimensions
flag. The flag is not set by anyone except omapdrm, and it would be
racy to set it the same way in the atomic helpers.

Cc: Matt Roper <matthew.d.roper at intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin at linux.intel.com>
Cc: Daniel Vetter <daniel at ffwll.ch>
Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
---
 drivers/gpu/drm/drm_crtc.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 227613a..ffaa3f5 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -2545,6 +2545,16 @@ void drm_crtc_get_hv_timing(const struct drm_display_mode *mode,
 }
 EXPORT_SYMBOL(drm_crtc_get_hv_timing);
 
+static bool invert_dimensions(const struct drm_crtc *crtc)
+{
+	if (crtc->state) {
+		return crtc->primary->state->rotation & (BIT(DRM_ROTATE_90) |
+							 BIT(DRM_ROTATE_270));
+	} else {
+		return crtc->invert_dimensions;
+	}
+}
+
 /**
  * drm_crtc_check_viewport - Checks that a framebuffer is big enough for the
  *     CRTC viewport
@@ -2564,7 +2574,7 @@ int drm_crtc_check_viewport(const struct drm_crtc *crtc,
 
 	drm_crtc_get_hv_timing(mode, &hdisplay, &vdisplay);
 
-	if (crtc->invert_dimensions)
+	if (invert_dimensions(crtc))
 		swap(hdisplay, vdisplay);
 
 	return check_src_coords(x << 16, y << 16,
-- 
2.4.9



More information about the dri-devel mailing list