On Mon, 2 Dec 2013 19:00:45 +0200 ville.syrjala@xxxxxxxxxxxxxxx wrote: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > Check that the N and P dividers don't cause a divide by zero. > > This shouldn't happen under normal circumstances, but can > happen eg. under simulation. > > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/intel_display.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index 0bb3d6d..4bedaf9 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -329,6 +329,8 @@ static void vlv_clock(int refclk, intel_clock_t *clock) > { > clock->m = clock->m1 * clock->m2; > clock->p = clock->p1 * clock->p2; > + if (WARN_ON(clock->n == 0 || clock->p == 0)) > + return; > clock->vco = DIV_ROUND_CLOSEST(refclk * clock->m, clock->n); > clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p); > } > @@ -430,6 +432,8 @@ static void pineview_clock(int refclk, intel_clock_t *clock) > { > clock->m = clock->m2 + 2; > clock->p = clock->p1 * clock->p2; > + if (WARN_ON(clock->n == 0 || clock->p == 0)) > + return; > clock->vco = DIV_ROUND_CLOSEST(refclk * clock->m, clock->n); > clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p); > } > @@ -443,6 +447,8 @@ static void i9xx_clock(int refclk, intel_clock_t *clock) > { > clock->m = i9xx_dpll_compute_m(clock); > clock->p = clock->p1 * clock->p2; > + if (WARN_ON(clock->n + 2 == 0 || clock->p == 0)) > + return; > clock->vco = DIV_ROUND_CLOSEST(refclk * clock->m, clock->n + 2); > clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p); > } Reviewed-by: Jesse Barnes <jbarnes@xxxxxxxxxxxxxxxx> -- Jesse Barnes, Intel Open Source Technology Center _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx