[Intel-gfx] [PATCH] drm/i915: add update function to disable/enable-back PSR

Rodrigo Vivi rodrigo.vivi at gmail.com
Mon Jul 8 23:52:21 CEST 2013


On Fri, Jul 5, 2013 at 7:48 PM, Paulo Zanoni <przanoni at gmail.com> wrote:
> 2013/6/28 Rodrigo Vivi <rodrigo.vivi at gmail.com>:
>> Required function to disable PSR when going to console mode.
>> But also can be used whenever PSR mode entry conditions changed.
>>
>> v2: Add it before PSR Hook. Update function not really been called yet.
>> v3: Fix coding style detected by checkpatch by Paulo Zanoni.
>>
>> Cc: Paulo Zanoni <paulo.r.zanoni at intel.com>
>> Signed-off-by: Rodrigo Vivi <rodrigo.vivi at gmail.com>
>> ---
>>  drivers/gpu/drm/i915/intel_dp.c  | 37 ++++++++++++++++++++++++++++++-------
>>  drivers/gpu/drm/i915/intel_drv.h |  1 +
>>  2 files changed, 31 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
>> index 9730d6b..86c1a7d 100644
>> --- a/drivers/gpu/drm/i915/intel_dp.c
>> +++ b/drivers/gpu/drm/i915/intel_dp.c
>> @@ -1536,14 +1536,8 @@ static bool intel_edp_psr_match_conditions(struct intel_dp *intel_dp)
>>         return true;
>>  }
>>
>> -void intel_edp_psr_enable(struct intel_dp *intel_dp)
>> +void intel_edp_psr_do_enable(struct intel_dp *intel_dp)
>
> Then this function should become static.
>
> So, how often do we disable/enable or update after a mode set? I see
> that on enable_sink we reset the VSC header, rewrite the AUX
> registers, also reset EDP_PSR_DEBUG_CTL and reupdate everything inside
> EDP_PSR_CTL. Do we need to redo all this? Don't we just need to redo
> the aux_native_write to DP_PSR_EN_CFG and re-enable EDP_PSR_ENABLE
> since everything else might still be the same on the same mode-set?

Agree, I'll try to move vsc header, aux sets, etc to setup function
that is executed only once
or something like this..
Thanks for the suggestion.

>
>>  {
>> -       struct drm_device *dev = intel_dp_to_dev(intel_dp);
>> -
>> -       if (!intel_edp_psr_match_conditions(intel_dp) ||
>> -           intel_edp_is_psr_enabled(dev))
>> -               return;
>> -
>>         /* Enable PSR on the panel */
>>         intel_edp_psr_enable_sink(intel_dp);
>>
>> @@ -1551,6 +1545,15 @@ void intel_edp_psr_enable(struct intel_dp *intel_dp)
>>         intel_edp_psr_enable_source(intel_dp);
>>  }
>>
>> +void intel_edp_psr_enable(struct intel_dp *intel_dp)
>> +{
>> +       struct drm_device *dev = intel_dp_to_dev(intel_dp);
>> +
>> +       if (intel_edp_psr_match_conditions(intel_dp) &&
>> +           !intel_edp_is_psr_enabled(dev))
>> +               intel_edp_psr_do_enable(intel_dp);
>> +}
>> +
>>  void intel_edp_psr_disable(struct intel_dp *intel_dp)
>>  {
>>         struct drm_device *dev = intel_dp_to_dev(intel_dp);
>> @@ -1573,6 +1576,26 @@ void intel_edp_psr_disable(struct intel_dp *intel_dp)
>>         intel_wait_for_vblank(dev, intel_crtc->pipe);
>>  }
>>
>> +void intel_edp_psr_update(struct drm_device *dev)
>> +{
>> +       struct intel_encoder *encoder;
>> +       struct intel_dp *intel_dp = NULL;
>> +
>> +       list_for_each_entry(encoder, &dev->mode_config.encoder_list, base.head)
>> +               if (encoder->type == INTEL_OUTPUT_EDP) {
>> +                       intel_dp = enc_to_intel_dp(&encoder->base);
>> +
>> +                       if (!is_edp_psr(intel_dp))
>> +                               return;
>> +
>> +                       if (!intel_edp_psr_match_conditions(intel_dp))
>> +                               intel_edp_psr_disable(intel_dp);
>> +                       else
>> +                               if (!intel_edp_is_psr_enabled(dev))
>> +                                       intel_edp_psr_do_enable(intel_dp);
>> +               }
>> +}
>> +
>>  static void intel_disable_dp(struct intel_encoder *encoder)
>>  {
>>         struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
>> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
>> index ff09c4c..1f638cf 100644
>> --- a/drivers/gpu/drm/i915/intel_drv.h
>> +++ b/drivers/gpu/drm/i915/intel_drv.h
>> @@ -842,5 +842,6 @@ extern bool intel_set_pch_fifo_underrun_reporting(struct drm_device *dev,
>>
>>  extern void intel_edp_psr_enable(struct intel_dp *intel_dp);
>>  extern void intel_edp_psr_disable(struct intel_dp *intel_dp);
>> +extern void intel_edp_psr_update(struct drm_device *dev);
>>
>>  #endif /* __INTEL_DRV_H__ */
>> --
>> 1.8.1.4
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
>
>
> --
> Paulo Zanoni



--
Rodrigo Vivi
Blog: http://blog.vivi.eng.br



More information about the Intel-gfx mailing list