const struct drm_display_mode *mode = &rcrtc->crtc.state->adjusted_mode;
        struct rcar_du_device *rcdu = rcrtc->dev;
        unsigned long mode_clock = mode->clock * 1000;
+       unsigned int hdse_offset;
        u32 dsmr;
        u32 escr;
 
             | DSMR_DIPM_DISP | DSMR_CSPM;
        rcar_du_crtc_write(rcrtc, DSMR, dsmr);
 
+       hdse_offset = 19;
+       if (rcrtc->group->cmms_mask & BIT(rcrtc->index % 2))
+               hdse_offset += 25;
+
        /* Display timings */
-       rcar_du_crtc_write(rcrtc, HDSR, mode->htotal - mode->hsync_start - 19);
+       rcar_du_crtc_write(rcrtc, HDSR, mode->htotal - mode->hsync_start -
+                                       hdse_offset);
        rcar_du_crtc_write(rcrtc, HDER, mode->htotal - mode->hsync_start +
-                                       mode->hdisplay - 19);
+                                       mode->hdisplay - hdse_offset);
        rcar_du_crtc_write(rcrtc, HSWR, mode->hsync_end -
                                        mode->hsync_start - 1);
        rcar_du_crtc_write(rcrtc, HCR,  mode->htotal - 1);
        struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc);
        struct rcar_du_device *rcdu = rcrtc->dev;
        bool interlaced = mode->flags & DRM_MODE_FLAG_INTERLACE;
+       unsigned int min_sync_porch;
        unsigned int vbp;
 
        if (interlaced && !rcar_du_has(rcdu, RCAR_DU_FEATURE_INTERLACED))
 
        /*
         * The hardware requires a minimum combined horizontal sync and back
-        * porch of 20 pixels and a minimum vertical back porch of 3 lines.
+        * porch of 20 pixels (when CMM isn't used) or 45 pixels (when CMM is
+        * used), and a minimum vertical back porch of 3 lines.
         */
-       if (mode->htotal - mode->hsync_start < 20)
+       min_sync_porch = 20;
+       if (rcrtc->group->cmms_mask & BIT(rcrtc->index % 2))
+               min_sync_porch += 25;
+
+       if (mode->htotal - mode->hsync_start < min_sync_porch)
                return MODE_HBLANK_NARROW;
 
        vbp = (mode->vtotal - mode->vsync_end) / (interlaced ? 2 : 1);