Hi,<br><br>On Monday, May 18, 2015, Gustavo Padovan <<a href="mailto:gustavo@padovan.org">gustavo@padovan.org</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Tobias,<br>
<br>
2015-05-15 Tobias Jakobi <<a href="javascript:;" onclick="_e(event, 'cvml', 'tjakobi@math.uni-bielefeld.de')">tjakobi@math.uni-bielefeld.de</a>>:<br>
> I did another run with drm.debug=0xff and also tried to figure out where the<br>
> div-by-zero comes from.<br>
><br>
> The only division I see is in fimd_calc_clkdiv() (which is called by<br>
> fimd_commit()). So it looks like 'ideal_clk' is zero when calling<br>
> DIV_ROUND_UP().<br>
><br>
> 'htotal' and 'vtotal' can't be zero, since this is checked early in<br>
> fimd_commit(). So 'vrefresh' has to be zero. Maybe this helps?<br>
<br>
What is is the output when you run with this patch:<br>
<br>
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c<br>
index 12ab80c..f5d215d 100644<br>
--- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c<br>
+++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c<br>
@@ -310,6 +310,8 @@ static u32 fimd_calc_clkdiv(struct fimd_context *ctx,<br>
        unsigned long ideal_clk = mode->htotal * mode->vtotal * mode->vrefresh;<br>
        u32 clkdiv;<br>
<br>
+       DRM_DEBUG_KMS("vrefresh %d\n", mode->vrefresh);<br>
+<br>
        if (ctx->i80_if) {<br>
                /*<br>
                 * The frame done interrupt should be occurred prior to the<br>
@@ -328,6 +330,7 @@ static bool fimd_mode_fixup(struct exynos_drm_crtc *crtc,<br>
                const struct drm_display_mode *mode,<br>
                struct drm_display_mode *adjusted_mode)<br>
 {<br>
+       DRM_DEBUG_KMS("vrefresh %d\n", adjusted_mode->vrefresh);<br>
        if (adjusted_mode->vrefresh == 0)<br>
                adjusted_mode->vrefresh = FIMD_DEFAULT_FRAMERATE;<br>
</blockquote><div><br></div><div>vrefresh can legitimately be zero, which makes this FIMD_DEFAULT_FRAMERATE assignment problematic rather than harmless.</div><div><br></div><div>If it's zero, you can find a vrefresh value with drm_mode_vrefresh, which will calculate it for you.</div><div><br></div><div>Cheers,</div><div>Daniel </div>