aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>2018-11-10 21:15:08 -0500
committerLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>2018-11-23 06:51:23 -0500
commit256856efb8cc2b5468c69edf45eb0ab579833ce7 (patch)
tree255ab951272ed61859b9e3fa1aa1b232c24835c3
parent63a298f22a6183b5b7536a203596c6570dfcfe8e (diff)
drm: rcar-du: Reject modes that fail CRTC timing requirements
The hardware requires the HDSR and VDSR registers to be set to 1 or higher. This translates to a minimum combined horizontal sync and back porch of 20 pixels and a minimum vertical back porch of 3 lines. Reject modes that fail those requirements. Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
-rw-r--r--drivers/gpu/drm/rcar-du/rcar_du_crtc.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
index 79021d7aa3ce..90dacab67be5 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
@@ -735,10 +735,22 @@ enum drm_mode_status rcar_du_crtc_mode_valid(struct drm_crtc *crtc,
735 struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc); 735 struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc);
736 struct rcar_du_device *rcdu = rcrtc->group->dev; 736 struct rcar_du_device *rcdu = rcrtc->group->dev;
737 bool interlaced = mode->flags & DRM_MODE_FLAG_INTERLACE; 737 bool interlaced = mode->flags & DRM_MODE_FLAG_INTERLACE;
738 unsigned int vbp;
738 739
739 if (interlaced && !rcar_du_has(rcdu, RCAR_DU_FEATURE_INTERLACED)) 740 if (interlaced && !rcar_du_has(rcdu, RCAR_DU_FEATURE_INTERLACED))
740 return MODE_NO_INTERLACE; 741 return MODE_NO_INTERLACE;
741 742
743 /*
744 * The hardware requires a minimum combined horizontal sync and back
745 * porch of 20 pixels and a minimum vertical back porch of 3 lines.
746 */
747 if (mode->htotal - mode->hsync_start < 20)
748 return MODE_HBLANK_NARROW;
749
750 vbp = (mode->vtotal - mode->vsync_end) / (interlaced ? 2 : 1);
751 if (vbp < 3)
752 return MODE_VBLANK_NARROW;
753
742 return MODE_OK; 754 return MODE_OK;
743} 755}
744 756