[Intel-gfx] [PATCH 12/28] drm/i915/tgl: Add TRANSCODER_A_VDSC power domain

Lucas De Marchi lucas.demarchi at intel.com
Mon Jul 8 21:05:05 UTC 2019


On Mon, Jul 01, 2019 at 08:32:59PM +0300, Ville Syrjälä wrote:
>On Fri, Jun 28, 2019 at 09:31:04AM -0700, Lucas De Marchi wrote:
>> On Fri, Jun 28, 2019 at 12:55:17PM +0300, Ville Syrjälä wrote:
>> >On Tue, Jun 25, 2019 at 10:54:21AM -0700, Lucas De Marchi wrote:
>> >> From: José Roberto de Souza <jose.souza at intel.com>
>> >>
>> >> On TGL the special EDP transcoder is gone and it should be handled by
>> >> transcoder A. Add POWER_DOMAIN_TRANSCODER_A_VDSC to make this
>> >> distinction clear and update vdsc code path.
>> >>
>> >> Cc: Imre Deak <imre.deak at intel.com>
>> >> Signed-off-by: José Roberto de Souza <jose.souza at intel.com>
>> >> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
>> >> ---
>> >>  drivers/gpu/drm/i915/display/intel_display_power.c |  2 ++
>> >>  drivers/gpu/drm/i915/display/intel_display_power.h |  1 +
>> >>  drivers/gpu/drm/i915/display/intel_vdsc.c          | 11 ++++++++---
>> >>  3 files changed, 11 insertions(+), 3 deletions(-)
>> >>
>> >> diff --git a/drivers/gpu/drm/i915/display/intel_display_power.c b/drivers/gpu/drm/i915/display/intel_display_power.c
>> >> index 0c7d4a363deb..15582841fefc 100644
>> >> --- a/drivers/gpu/drm/i915/display/intel_display_power.c
>> >> +++ b/drivers/gpu/drm/i915/display/intel_display_power.c
>> >> @@ -58,6 +58,8 @@ intel_display_power_domain_str(struct drm_i915_private *i915,
>> >>  		return "TRANSCODER_EDP";
>> >>  	case POWER_DOMAIN_TRANSCODER_EDP_VDSC:
>> >>  		return "TRANSCODER_EDP_VDSC";
>> >> +	case POWER_DOMAIN_TRANSCODER_A_VDSC:
>> >> +		return "TRANSCODER_A_VDSC";
>> >>  	case POWER_DOMAIN_TRANSCODER_DSI_A:
>> >>  		return "TRANSCODER_DSI_A";
>> >>  	case POWER_DOMAIN_TRANSCODER_DSI_C:
>> >> diff --git a/drivers/gpu/drm/i915/display/intel_display_power.h b/drivers/gpu/drm/i915/display/intel_display_power.h
>> >> index 79262a5bceb4..7761b493608a 100644
>> >> --- a/drivers/gpu/drm/i915/display/intel_display_power.h
>> >> +++ b/drivers/gpu/drm/i915/display/intel_display_power.h
>> >> @@ -29,6 +29,7 @@ enum intel_display_power_domain {
>> >>  	POWER_DOMAIN_TRANSCODER_D,
>> >>  	POWER_DOMAIN_TRANSCODER_EDP,
>> >>  	POWER_DOMAIN_TRANSCODER_EDP_VDSC,
>> >> +	POWER_DOMAIN_TRANSCODER_A_VDSC,
>> >
>> >Two power domains for essentially the same thing seems a bit wasteful.
>>
>> just reuse the name then?
>>
>> and on gen12+ check for TRANSCODER_A like below?
>
>That was my initial idea yes. In theory it would be nice to have fully
>abstracted power domains but that would lead to a lot of bits getting
>used. I suspect we might have to switch to using the kernel bitmask
>stuff in that case. Not sure how many bits we have free ATM.

we are currently using 45 and with TGL we will jump to 60. 4 more until
we have to swap out that logic in favor of bitmap.h

Lucas De Marchi

>
>>
>> Lucas De Marchi
>>
>> >
>> >>  	POWER_DOMAIN_TRANSCODER_DSI_A,
>> >>  	POWER_DOMAIN_TRANSCODER_DSI_C,
>> >>  	POWER_DOMAIN_PORT_DDI_A_LANES,
>> >> diff --git a/drivers/gpu/drm/i915/display/intel_vdsc.c b/drivers/gpu/drm/i915/display/intel_vdsc.c
>> >> index ffec807b8960..0c75b408d6ba 100644
>> >> --- a/drivers/gpu/drm/i915/display/intel_vdsc.c
>> >> +++ b/drivers/gpu/drm/i915/display/intel_vdsc.c
>> >> @@ -459,16 +459,21 @@ int intel_dp_compute_dsc_params(struct intel_dp *intel_dp,
>> >>  enum intel_display_power_domain
>> >>  intel_dsc_power_domain(const struct intel_crtc_state *crtc_state)
>> >>  {
>> >> +	struct drm_i915_private *dev_priv = to_i915(crtc_state->base.state->dev);
>> >>  	enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
>> >>
>> >>  	/*
>> >> -	 * On ICL VDSC/joining for eDP transcoder uses a separate power well PW2
>> >> -	 * This requires POWER_DOMAIN_TRANSCODER_EDP_VDSC power domain.
>> >> +	 * On ICL+ VDSC/joining for eDP/A transcoder uses a separate power well
>> >> +	 * PW2. This requires
>> >> +	 * POWER_DOMAIN_TRANSCODER_EDP_VDSC/POWER_DOMAIN_TRANSCODER_A_VDSC power
>> >> +	 * domain.
>> >>  	 * For any other transcoder, VDSC/joining uses the power well associated
>> >>  	 * with the pipe/transcoder in use. Hence another reference on the
>> >>  	 * transcoder power domain will suffice.
>> >>  	 */
>> >> -	if (cpu_transcoder == TRANSCODER_EDP)
>> >> +	if (INTEL_GEN(dev_priv) >= 12 && cpu_transcoder == TRANSCODER_A)
>> >> +		return POWER_DOMAIN_TRANSCODER_A_VDSC;
>> >> +	else if (cpu_transcoder == TRANSCODER_EDP)
>> >>  		return POWER_DOMAIN_TRANSCODER_EDP_VDSC;
>> >>  	else
>> >>  		return POWER_DOMAIN_TRANSCODER(cpu_transcoder);
>> >> --
>> >> 2.21.0
>> >>
>> >> _______________________________________________
>> >> Intel-gfx mailing list
>> >> Intel-gfx at lists.freedesktop.org
>> >> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>> >
>> >--
>> >Ville Syrjälä
>> >Intel
>
>-- 
>Ville Syrjälä
>Intel


More information about the Intel-gfx mailing list