[Intel-gfx] [PATCH] drm/i915: restrict PP save/restore to platforms with lvds

Thulasimani, Sivakumar sivakumar.thulasimani at intel.com
Tue Feb 9 02:46:46 UTC 2016



On 2/8/2016 3:25 PM, Daniel Vetter wrote:
> eDP already restores PP state completely on it's own, we only need
> this code for LVDS. Since it's more work to move this into the lvds
> encoder properly just limit it to affected pch chips for now
> (ibx&cpt/ppt).
>
> Cc: Jani Nikula <jani.nikula at intel.com>
> Acked-by: Jani Nikula <jani.nikula at intel.com>
> Signed-off-by: Daniel Vetter <daniel.vetter at intel.com>
> ---
>   drivers/gpu/drm/i915/i915_suspend.c | 8 ++++----
>   1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_suspend.c b/drivers/gpu/drm/i915/i915_suspend.c
> index a2aa09ce3202..7f6b050266a7 100644
> --- a/drivers/gpu/drm/i915/i915_suspend.c
> +++ b/drivers/gpu/drm/i915/i915_suspend.c
> @@ -43,8 +43,8 @@ static void i915_save_display(struct drm_device *dev)
>   	else if (INTEL_INFO(dev)->gen <= 4 && IS_MOBILE(dev) && !IS_I830(dev))
>   		dev_priv->regfile.saveLVDS = I915_READ(LVDS);
>   
> -	/* Panel power sequencer */
> -	if (HAS_PCH_SPLIT(dev)) {
> +	/* Panel power sequencer, only needed for LVDS */
> +	if (HAS_PCH_IBX(dev) || HAS_PCH_CPT(dev)) {
>   		dev_priv->regfile.savePP_CONTROL = I915_READ(PCH_PP_CONTROL);
>   		dev_priv->regfile.savePP_ON_DELAYS = I915_READ(PCH_PP_ON_DELAYS);
>   		dev_priv->regfile.savePP_OFF_DELAYS = I915_READ(PCH_PP_OFF_DELAYS);
won't this code execute for eDP too ? Also it seems incorrect we are 
saving and restoring
PP_CONTROL register too when we should have followed proper sequence 
delays for
each bit in PP_CONTROL.  This will end up bring up the panel before 
modeset in
best case or damage the panel in the worst case.

Sivakumar

> @@ -78,8 +78,8 @@ static void i915_restore_display(struct drm_device *dev)
>   	else if (INTEL_INFO(dev)->gen <= 4 && IS_MOBILE(dev) && !IS_I830(dev))
>   		I915_WRITE(LVDS, dev_priv->regfile.saveLVDS & mask);
>   
> -	/* Panel power sequencer */
> -	if (HAS_PCH_SPLIT(dev)) {
> +	/* Panel power sequencer, only needed for LVDS */
> +	if (HAS_PCH_IBX(dev) || HAS_PCH_CPT(dev)) {
>   		I915_WRITE(PCH_PP_ON_DELAYS, dev_priv->regfile.savePP_ON_DELAYS);
>   		I915_WRITE(PCH_PP_OFF_DELAYS, dev_priv->regfile.savePP_OFF_DELAYS);
>   		I915_WRITE(PCH_PP_DIVISOR, dev_priv->regfile.savePP_DIVISOR);



More information about the Intel-gfx mailing list