[Intel-gfx] [PATCH] drm/i915: Move number of scalers initialization to runtime init
Maiti, Nabendu Bikash
nabendu.bikash.maiti at intel.com
Fri Nov 25 10:32:26 UTC 2016
On 11/25/2016 3:14 PM, Chris Wilson wrote:
> On Fri, Nov 25, 2016 at 03:16:58PM +0530, Nabendu Maiti wrote:
>> In future patches, we require greater flexibility in describing
>> the number of scalers available on each CRTC. To ease that transition
>> we move the current assignment to intel_device_info.
>>
>> Scaler structure initialisation is done if scaler is available on the CRTC.
>> Gen9 check is not required as on depending upon numbers of scalers we
>> initialize scalers or return without doing anything in skl_init_scalers.
>>
>> v2: Added Chris's commenents.
> comments :)
Accepted. :)
>
>> Signed-off-by: Nabendu Maiti <nabendu.bikash.maiti at intel.com>
> Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>
>
>> ---
>> drivers/gpu/drm/i915/i915_drv.h | 1 +
>> drivers/gpu/drm/i915/intel_device_info.c | 3 +++
>> drivers/gpu/drm/i915/intel_display.c | 18 ++++++++----------
>> 3 files changed, 12 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
>> index 1ec9619..bb8c5f0 100644
>> --- a/drivers/gpu/drm/i915/i915_drv.h
>> +++ b/drivers/gpu/drm/i915/i915_drv.h
>> @@ -758,6 +758,7 @@ struct intel_device_info {
>> u16 device_id;
>> u8 num_pipes;
>> u8 num_sprites[I915_MAX_PIPES];
>> + u8 num_scalers[I915_MAX_PIPES];
>> u8 gen;
>> u16 gen_mask;
>> u8 ring_mask; /* Rings supported by the HW */
>> diff --git a/drivers/gpu/drm/i915/intel_device_info.c b/drivers/gpu/drm/i915/intel_device_info.c
>> index 185e3bb..ef26fa8 100644
>> --- a/drivers/gpu/drm/i915/intel_device_info.c
>> +++ b/drivers/gpu/drm/i915/intel_device_info.c
>> @@ -282,6 +282,9 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)
>> info->num_sprites[PIPE_A] = 2;
>> info->num_sprites[PIPE_B] = 2;
>> info->num_sprites[PIPE_C] = 1;
>> + info->num_scalers[PIPE_A] = 2;
>> + info->num_scalers[PIPE_B] = 2;
>> + info->num_scalers[PIPE_C] = 1;
>> } else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
>> for_each_pipe(dev_priv, pipe)
>> info->num_sprites[pipe] = 2;
>> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
>> index 5d11002..2062170 100644
>> --- a/drivers/gpu/drm/i915/intel_display.c
>> +++ b/drivers/gpu/drm/i915/intel_display.c
>> @@ -15266,6 +15266,11 @@ static void skl_init_scalers(struct drm_i915_private *dev_priv,
>> &crtc_state->scaler_state;
>> int i;
>>
>> + crtc->num_scalers = dev_priv->info.num_scalers[crtc->pipe];
>> +
>
> Blank here is overkill
>
>> + if (!crtc->num_scalers)
>> + return;
>> +
>
> crtc->num_scalers = <info>;
> if (!ctrc->num_scalers)
> return;
>
> is quite clean.
Accepted.
>
>> for (i = 0; i < crtc->num_scalers; i++) {
>> struct intel_scaler *scaler = &scaler_state->scalers[i];
>>
>> @@ -15297,16 +15302,6 @@ static int intel_crtc_init(struct drm_i915_private *dev_priv, enum pipe pipe)
>> intel_crtc->base.state = &crtc_state->base;
>> crtc_state->base.crtc = &intel_crtc->base;
>>
>> - /* initialize shared scalers */
>> - if (INTEL_GEN(dev_priv) >= 9) {
>> - if (pipe == PIPE_C)
>> - intel_crtc->num_scalers = 1;
>> - else
>> - intel_crtc->num_scalers = SKL_NUM_SCALERS;
>> -
>> - skl_init_scalers(dev_priv, intel_crtc, crtc_state);
>> - }
>> -
>> primary = intel_primary_plane_create(dev_priv, pipe);
>> if (IS_ERR(primary)) {
>> ret = PTR_ERR(primary);
>> @@ -15348,6 +15343,9 @@ static int intel_crtc_init(struct drm_i915_private *dev_priv, enum pipe pipe)
>>
>> intel_crtc->wm.cxsr_allowed = true;
>>
>> + /* initialize shared scalers */
>> + skl_init_scalers(dev_priv, intel_crtc, crtc_state);
>
> As this is now called by all, it really should be
> intel_crtc_init_scalers() and we only need to pass intel_crtc at this
> point.
okey , changing to intel_crtc_init_scalers()
I think we can also potspone it later on by substituting skl_* by
intel_crtc_* or i9xx_crtc_*scaler in next patch. Cleanup needed for
skylake_pfit** and some other scaler functions.
Yes removing dev_priv as folllowing,
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); ?
But crtc_state need to to be passed, Apart from crtc_init ,
haswell_get_pipe_config also call it. We pass the current active
pipe_state. Not sure *config in intel_crtc will serve the same purpose
for both cases.
> -Chris
>
--
Regards,
Nabendu
More information about the Intel-gfx
mailing list