> -----Original Message----- > From: Paauwe, Bob J > Sent: Wednesday, February 15, 2017 11:55 PM > To: Srinivas, Vidya <vidya.srinivas@xxxxxxxxx> > Cc: intel-gfx@xxxxxxxxxxxxxxxxxxxxx; Nikula, Jani <jani.nikula@xxxxxxxxx> > Subject: Re: [PATCH 6/9] drm/i915/bxt: Fix BXT DSI disable > sequence > > On Wed, 8 Feb 2017 16:20:55 +0530 > Vidya Srinivas <vidya.srinivas@xxxxxxxxx> wrote: > > > From: Uma Shankar <uma.shankar@xxxxxxxxx> > > > > Fix BXT DSI disable sequence as per latest updates in BSpec. > > > > Signed-off-by: Uma Shankar <uma.shankar@xxxxxxxxx> > > Signed-off-by: Vidya Srinivas <vidya.srinivas@xxxxxxxxx> > > --- > > drivers/gpu/drm/i915/intel_dsi.c | 29 +++++++++++++++++++++++++---- > > 1 file changed, 25 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/intel_dsi.c > > b/drivers/gpu/drm/i915/intel_dsi.c > > index 538755b..808158f 100644 > > --- a/drivers/gpu/drm/i915/intel_dsi.c > > +++ b/drivers/gpu/drm/i915/intel_dsi.c > > @@ -632,8 +632,10 @@ static void intel_dsi_disable(struct intel_encoder > *encoder) > > for_each_dsi_port(port, intel_dsi->ports) > > wait_for_dsi_fifo_empty(intel_dsi, port); > > > > - intel_dsi_port_disable(encoder); > > - msleep(2); > > + if (!IS_BROXTON(dev_priv)) { > > + intel_dsi_port_disable(encoder); > > + usleep_range(2000, 2500); > > + } > > } > > > > for_each_dsi_port(port, intel_dsi->ports) { @@ -641,7 +643,11 @@ > > static void intel_dsi_disable(struct intel_encoder *encoder) > > I915_WRITE(MIPI_DEVICE_READY(port), 0x0); > > > > intel_dsi_reset_clocks(encoder, port); > > - I915_WRITE(MIPI_EOT_DISABLE(port), CLOCKSTOP); > > + temp = 0; > > + if (intel_dsi->clock_stop) { > > + temp |= CLOCKSTOP; > > + I915_WRITE(MIPI_EOT_DISABLE(port), temp); > > + } > > This could be simplified to just > if (intel_dsi->clock_stop) > I915_WRITE(MIPI_EOT_DISABLE(port), CLOCKSTOP); > Yes, thanks Bob. I will fix this and resend. > > > > temp = I915_READ(MIPI_DSI_FUNC_PRG(port)); > > temp &= ~VID_MODE_FORMAT_MASK; > > @@ -707,12 +713,25 @@ static void intel_dsi_post_disable(struct > intel_encoder *encoder, > > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > > struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base); > > u32 val; > > + enum port port; > > > > DRM_DEBUG_KMS("\n"); > > > > intel_dsi_disable(encoder); > > > > - intel_dsi_clear_device_ready(encoder); > > + if (IS_BROXTON(dev_priv)) { > > + /* > > + * Reset the DSI Device ready first for both ports > > + * and then port control registers for both ports > > + */ > > + for_each_dsi_port(port, intel_dsi->ports) > > + I915_WRITE(MIPI_DEVICE_READY(port), 0); > > + > > + for_each_dsi_port(port, intel_dsi->ports) > > + I915_WRITE(BXT_MIPI_PORT_CTRL(port), 0); > > + } else { > > + intel_dsi_clear_device_ready(encoder); > > + } > > > > if (IS_BROXTON(dev_priv)) { > > /* Power down DSI regulator to save power */ @@ -737,6 > +756,8 @@ > > static void intel_dsi_post_disable(struct intel_encoder *encoder, > > > > drm_panel_unprepare(intel_dsi->panel); > > > > + /* Disable Panel */ > > + drm_panel_power_off(intel_dsi->panel); > > This depends on the previous patch, which I don't think is the direction we > want to go. If the code is reworked to not use the drm_panel interface, then > this would need to change also. > Yes, I am planning a different approach to remove the drm_panel interface Dependency. Will re-submit an updated series. Thanks Bob for the review and useful comments. Regards Vidya > > msleep(intel_dsi->panel_off_delay); > > > > Do we need to call intel_disable_dsi_pll(encoder) here as part of the power > off? > > > /* Panel Disable over CRC PMIC */ > > > > -- > -- > Bob Paauwe > Bob.J.Paauwe@xxxxxxxxx > IOTG / PED Software Organization > Intel Corp. Folsom, CA > (916) 356-6193 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx