[Intel-gfx] [PATCH v7 01/15] drm/i915/display: allow to skip certain power wells

Matt Roper matthew.d.roper at intel.com
Mon Oct 12 22:02:28 UTC 2020


On Mon, Oct 12, 2020 at 02:29:45PM -0700, Lucas De Marchi wrote:
> From: Aditya Swarup <aditya.swarup at intel.com>
> 
> This allows us to skip power wells on a platform allowing it to re-use
> the table from another one instead of having to create a new table from
> scratch that is basically a copy with a few removals.
> 
> Cc: Imre Deak <imre.deak at intel.com>
> Suggested-by: Matt Roper <matthew.d.roper at intel.com>
> Signed-off-by: Aditya Swarup <aditya.swarup at intel.com>
> [ Adapt to base ignore logic on pw id rather than adding a new field,
>   as suggested by Imre ]
> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>

Reviewed-by: Matt Roper <matthew.d.roper at intel.com>

> ---
>  .../drm/i915/display/intel_display_power.c    | 24 ++++++++++++++-----
>  1 file changed, 18 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_power.c b/drivers/gpu/drm/i915/display/intel_display_power.c
> index 7277e58b01f1..5b7f2b67791e 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_power.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_power.c
> @@ -4554,13 +4554,18 @@ static u32 get_allowed_dc_mask(const struct drm_i915_private *dev_priv,
>  static int
>  __set_power_wells(struct i915_power_domains *power_domains,
>  		  const struct i915_power_well_desc *power_well_descs,
> -		  int power_well_count)
> +		  int power_well_descs_sz, u64 skip_mask)
>  {
>  	struct drm_i915_private *i915 = container_of(power_domains,
>  						     struct drm_i915_private,
>  						     power_domains);
>  	u64 power_well_ids = 0;
> -	int i;
> +	int power_well_count = 0;
> +	int i, plt_idx = 0;
> +
> +	for (i = 0; i < power_well_descs_sz; i++)
> +		if (!(BIT_ULL(power_well_descs[i].id) & skip_mask))
> +			power_well_count++;
>  
>  	power_domains->power_well_count = power_well_count;
>  	power_domains->power_wells =
> @@ -4570,10 +4575,14 @@ __set_power_wells(struct i915_power_domains *power_domains,
>  	if (!power_domains->power_wells)
>  		return -ENOMEM;
>  
> -	for (i = 0; i < power_well_count; i++) {
> +	for (i = 0; i < power_well_descs_sz; i++) {
>  		enum i915_power_well_id id = power_well_descs[i].id;
>  
> -		power_domains->power_wells[i].desc = &power_well_descs[i];
> +		if (BIT_ULL(id) & skip_mask)
> +			continue;
> +
> +		power_domains->power_wells[plt_idx++].desc =
> +			&power_well_descs[i];
>  
>  		if (id == DISP_PW_ID_NONE)
>  			continue;
> @@ -4586,9 +4595,12 @@ __set_power_wells(struct i915_power_domains *power_domains,
>  	return 0;
>  }
>  
> -#define set_power_wells(power_domains, __power_well_descs) \
> +#define set_power_wells_mask(power_domains, __power_well_descs, skip_mask) \
>  	__set_power_wells(power_domains, __power_well_descs, \
> -			  ARRAY_SIZE(__power_well_descs))
> +			  ARRAY_SIZE(__power_well_descs), skip_mask)
> +
> +#define set_power_wells(power_domains, __power_well_descs) \
> +	set_power_wells_mask(power_domains, __power_well_descs, 0)
>  
>  /**
>   * intel_power_domains_init - initializes the power domain structures
> -- 
> 2.28.0
> 

-- 
Matt Roper
Graphics Software Engineer
VTT-OSGC Platform Enablement
Intel Corporation
(916) 356-2795


More information about the Intel-gfx mailing list