On Mon, Jun 09, 2014 at 04:20:46PM +0300, ville.syrjala@xxxxxxxxxxxxxxx wrote: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > On certain platforms pixel_multiplier is read out in > .get_pipe_config(), but it also gets used to calculate the > pixel clock in intel_sdvo_get_config(). If the pipe is disable > but some SDVO outputs are active, we may end up dividing by zero > in intel_sdvo_get_config(). > > To avoid the problem simply check for zero pixel_multiplier and skip > the division. Another attempt at fixing this involved populating > pixel_multiplier to 1 even for disabled pipes, but that triggered a > WARN because SDVO_CMD_GET_CLOCK_RATE_MULT command failed and thus > encoder_pixel_multiplier was left at zero and didn't match > pipe_config->pixel_multiplier. > > The "divide by pixel_multiplier" operation got introduced here: > commit 18442d08786472c63a0a80c27f92b033dffc26de > Author: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > Date: Fri Sep 13 16:00:08 2013 +0300 > > drm/i915: Fix port_clock and adjusted_mode.clock readout all over > > and it has caused a regression on certain machines since they would > hit the div-by-zero during resume. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=76520 > Cc: <stable@xxxxxxxxxxxxxxx> # 3.13+ > Tested-by: Tim Richardson <tim@xxxxxxxxxxxxxxxxxx> > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> Reviewed-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > --- > drivers/gpu/drm/i915/intel_sdvo.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c > index 6a4d5bc..20375cc 100644 > --- a/drivers/gpu/drm/i915/intel_sdvo.c > +++ b/drivers/gpu/drm/i915/intel_sdvo.c > @@ -1385,7 +1385,9 @@ static void intel_sdvo_get_config(struct intel_encoder *encoder, > >> SDVO_PORT_MULTIPLY_SHIFT) + 1; > } > > - dotclock = pipe_config->port_clock / pipe_config->pixel_multiplier; > + dotclock = pipe_config->port_clock; > + if (pipe_config->pixel_multiplier) > + dotclock /= pipe_config->pixel_multiplier; > > if (HAS_PCH_SPLIT(dev)) > ironlake_check_encoder_dotclock(pipe_config, dotclock); > -- > 1.8.5.5 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html