Hi!, so what is the state of this ? From: Adam Jackson <a...@redhat.com> To: intel-gfx@lists.freedesktop.org Subject: [Intel-gfx] [PATCH 1/6] drm/i915/dp: Rename has_edp to is_pch_edp to reflect its real meaning Date: Fri, 16 Jul 2010 14:46:27 -0400 (07/16/2010 07:46:27 PM)
seems that have something related to this. Should I try yours patch in this email ? On Wed, 2010-07-14 at 15:40 -0700, Jesse Barnes wrote: > Fixes https://bugs.freedesktop.org/show_bug.cgi?id=28739. We need to > enable power to the panel with the AUX VDD bit in order to properly > detect the eDP attached panel, and we also need to turn the panel on in > case it was off when we started (as happens at resume time). > > But this patch raises a couple of questions: > 1) why does the first panel on sequence time out? > 2) why do I need to unlock the panel protected regs? > > Keith, I think this is your code, any ideas? > > Thanks, > Jesse > > diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h > index 42c6024..b191f02 100644 > --- a/drivers/gpu/drm/i915/i915_reg.h > +++ b/drivers/gpu/drm/i915/i915_reg.h > @@ -2805,6 +2805,7 @@ > > #define PCH_PP_STATUS 0xc7200 > #define PCH_PP_CONTROL 0xc7204 > +#define PANEL_UNLOCK_REGS (0xabcd << 16) > #define EDP_FORCE_VDD (1 << 3) > #define EDP_BLC_ENABLE (1 << 2) > #define PANEL_POWER_RESET (1 << 1) > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c > index b4f0282..a20dd7b 100644 > --- a/drivers/gpu/drm/i915/intel_dp.c > +++ b/drivers/gpu/drm/i915/intel_dp.c > @@ -744,6 +744,32 @@ intel_dp_mode_set(struct drm_encoder *encoder, struct > drm_display_mode *mode, > } > } > > +static void ironlake_edp_panel_on(struct drm_device *dev) > +{ > + struct drm_i915_private *dev_priv = dev->dev_private; > + unsigned long timeout = jiffies + msecs_to_jiffies(5000); > + u32 pp, pp_status; > + > + pp_status = I915_READ(PCH_PP_STATUS); > + if (pp_status & PP_ON) > + return; > + > + DRM_DEBUG_KMS("\n"); > + pp = I915_READ(PCH_PP_CONTROL); > + pp |= POWER_TARGET_ON; > + I915_WRITE(PCH_PP_CONTROL, pp); > + do { > + pp_status = I915_READ(PCH_PP_STATUS); > + } while (((pp_status & PP_ON) == 0) && !time_after(jiffies, timeout)); > + > + if (time_after(jiffies, timeout)) > + DRM_DEBUG_KMS("panel on wait timed out: 0x%08x\n", pp_status); > + > + pp |= PANEL_UNLOCK_REGS; > + pp &= ~EDP_FORCE_VDD; > + I915_WRITE(PCH_PP_CONTROL, pp); > +} > + > static void ironlake_edp_backlight_on (struct drm_device *dev) > { > struct drm_i915_private *dev_priv = dev->dev_private; > @@ -755,6 +781,28 @@ static void ironlake_edp_backlight_on (struct drm_device > *dev) > I915_WRITE(PCH_PP_CONTROL, pp); > } > > +static void ironlake_edp_panel_off(struct drm_device *dev) > +{ > + struct drm_i915_private *dev_priv = dev->dev_private; > + unsigned long timeout = jiffies + msecs_to_jiffies(5000); > + u32 pp, pp_status; > + > + DRM_DEBUG_KMS("\n"); > + pp = I915_READ(PCH_PP_CONTROL); > + pp &= ~POWER_TARGET_ON; > + I915_WRITE(PCH_PP_CONTROL, pp); > + do { > + pp_status = I915_READ(PCH_PP_STATUS); > + } while ((pp_status & PP_ON) && !time_after(jiffies, timeout)); > + > + if (time_after(jiffies, timeout)) > + DRM_DEBUG_KMS("panel off wait timed out\n"); > + > + /* Make sure VDD is enabled so DP AUX will work */ > + pp |= EDP_FORCE_VDD; > + I915_WRITE(PCH_PP_CONTROL, pp); > +} > + > static void ironlake_edp_backlight_off (struct drm_device *dev) > { > struct drm_i915_private *dev_priv = dev->dev_private; > @@ -776,16 +824,24 @@ intel_dp_dpms(struct drm_encoder *encoder, int mode) > uint32_t dp_reg = I915_READ(dp_priv->output_reg); > > if (mode != DRM_MODE_DPMS_ON) { > + if (IS_eDP(intel_encoder) || IS_PCH_eDP(dp_priv)) { > + ironlake_edp_backlight_off(dev); > + ironlake_edp_panel_off(dev); > + } > if (dp_reg & DP_PORT_EN) { > intel_dp_link_down(intel_encoder, dp_priv->DP); > - if (IS_eDP(intel_encoder) || IS_PCH_eDP(dp_priv)) > - ironlake_edp_backlight_off(dev); > } > } else { > + /* Turn off the panel so we can modify DP_A etc */ > + if (IS_eDP(intel_encoder) || IS_PCH_eDP(dp_priv)) > + ironlake_edp_panel_off(dev); > if (!(dp_reg & DP_PORT_EN)) { > intel_dp_link_train(intel_encoder, dp_priv->DP, > dp_priv->link_configuration); > - if (IS_eDP(intel_encoder) || IS_PCH_eDP(dp_priv)) > - ironlake_edp_backlight_on(dev); > + } > + if (IS_eDP(intel_encoder) || IS_PCH_eDP(dp_priv)) { > + if (I915_READ(dp_priv->output_reg) & DP_PORT_EN) > + ironlake_edp_panel_on(dev); > + ironlake_edp_backlight_on(dev); > } > } > dp_priv->dpms_mode = mode; > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Sérgio M. B.
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx