[Intel-gfx] [PATCH 4/4] drm/i915: Introduce PSR Block Power Domains.

Chris Wilson chris at chris-wilson.co.uk
Thu Aug 4 02:52:06 UTC 2016


On Wed, Aug 03, 2016 at 02:44:38PM -0700, Rodrigo Vivi wrote:
> Issue: By the spec panels can emmit HPD when find some erros.
> Some of the errors we see are on reserved bits of spec so we
> end up not handling any of them.
> 
> Our handling functions uses aux communications. However if the
> link is in a deep off state like in PSR2 for gen9 we will have
> trouble and link is never restablished. Also even with PSR1 case
> we see flickering screens or hard lock depending on the panel.
> 
> Solution: Prevent PSR in some situations where we know link
> shouldn't be off.
> 
> Propose: Reuse the runtime PM domains to block PSR. PSR is not
> a Power Well but it is a power saving runtime component.
> Also it is better reuse something that is stablish and safe
> then get back to old times where we had psr_exits and
> psr_disables spread all over our code.
> 
> Cc: Imre Deak <imre.deak at intel.com>
> Cc: Tarun Vyas <tarun.vyas at intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.c         |  1 +
>  drivers/gpu/drm/i915/i915_reg.h         |  1 +
>  drivers/gpu/drm/i915/intel_display.c    |  2 --
>  drivers/gpu/drm/i915/intel_runtime_pm.c | 56 +++++++++++++++++++++++++++++++++
>  4 files changed, 58 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> index 83afdd0..d1bf060 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -840,6 +840,7 @@ static int i915_driver_init_early(struct drm_i915_private *dev_priv,
>  
>  	intel_pm_setup(&dev_priv->drm);
>  	intel_init_dpio(dev_priv);
> +	intel_psr_init(dev_priv);
>  	intel_power_domains_init(dev_priv);
>  	intel_irq_init(dev_priv);
>  	intel_init_display_hooks(dev_priv);
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index 2f93d4a..1cd939f 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -718,6 +718,7 @@ enum skl_disp_power_wells {
>  	/* Not actual bit groups. Used as IDs for lookup_power_well() */
>  	SKL_DISP_PW_ALWAYS_ON,
>  	SKL_DISP_PW_DC_OFF,
> +	SKL_DISP_PW_PSR_BLOCK,

PSR_BLOCK, psr_blk are not great. I would lose the BLOCK here and
instead use
gen9_psr_wakelock_is_enabled
gen9_psr_wakelock_enable
gen9_psr_wakelock_disable

> +static bool gen9_psr_blk_power_well_enabled(struct drm_i915_private *dev_priv,
> +					    struct i915_power_well *power_well)
> +{
> +	return (dev_priv->psr.rpm_block);

Looks like rpm_block only exists to duplicate rpm state.

> +}
> +
> +static void gen9_psr_blk_power_well_enable(struct drm_i915_private *dev_priv,
> +					   struct i915_power_well *power_well)
> +{
> +	intel_psr_rpm_block(dev_priv);

intel_psr_rpm_block -> intel_psr_block()

> +
> +	WARN_ON(dev_priv->psr.active);
> +}
> +
> +static void gen9_psr_blk_power_well_disable(struct drm_i915_private *dev_priv,
> +					    struct i915_power_well *power_well)
> +{
> +	intel_psr_rpm_unblock(dev_priv);

intel_psr_rpm_unblock -> intel_psr_unblock()

Design looks fine to me.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the Intel-gfx mailing list