[PATCH 5/6] drm/i915/display: add module parameter to enable DMC wakelock

Luca Coelho luca at coelho.fi
Thu Mar 14 00:11:42 UTC 2024


On Tue, 2024-02-20 at 13:46 -0300, Gustavo Sousa wrote:
> Quoting Luca Coelho (2024-02-07 07:30:06-03:00)
> > This feature should be disabled by default until properly tested and
> > mature.  Add a module parameter to enable the feature for testing,
> > while keeping it disabled by default for now.
> > 
> > Additionally, only allow enabling via module parameter if the display
> > version is greater than 20.
> 
> I would have two separate patches here, one for the display version
> check and another for the module parameter, since we are dealing with
> two different concepts.

Done.


> > Signed-off-by: Luca Coelho <luciano.coelho at intel.com>
> > ---
> > .../gpu/drm/i915/display/intel_display_params.c  |  5 +++++
> > .../gpu/drm/i915/display/intel_display_params.h  |  1 +
> > drivers/gpu/drm/i915/display/intel_dmc_wl.c      | 16 ++++++++++++++--
> > 3 files changed, 20 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_display_params.c b/drivers/gpu/drm/i915/display/intel_display_params.c
> > index 11e03cfb774d..f40b223cc8a1 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display_params.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display_params.c
> > @@ -116,6 +116,11 @@ intel_display_param_named_unsafe(enable_psr2_sel_fetch, bool, 0400,
> >         "(0=disabled, 1=enabled) "
> >         "Default: 1");
> > 
> > +intel_display_param_named_unsafe(enable_dmc_wl, bool, 0400,
> > +        "Enable DMC wakelock "
> > +        "(0=disabled, 1=enabled) "
> > +        "Default: 0");
> > +
> > __maybe_unused
> > static void _param_print_bool(struct drm_printer *p, const char *driver_name,
> >                               const char *name, bool val)
> > diff --git a/drivers/gpu/drm/i915/display/intel_display_params.h b/drivers/gpu/drm/i915/display/intel_display_params.h
> > index 6206cc51df04..bf8dbbdb20a1 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display_params.h
> > +++ b/drivers/gpu/drm/i915/display/intel_display_params.h
> > @@ -46,6 +46,7 @@ struct drm_i915_private;
> >         param(int, enable_psr, -1, 0600) \
> >         param(bool, psr_safest_params, false, 0400) \
> >         param(bool, enable_psr2_sel_fetch, true, 0400) \
> > +        param(bool, enable_dmc_wl, false, 0400) \
> > 
> > #define MEMBER(T, member, ...) T member;
> > struct intel_display_params {
> > diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
> > index abe1ea92cf65..21ab67805ff1 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
> > @@ -79,6 +79,10 @@ void intel_dmc_wl_enable(struct drm_i915_private *i915)
> >         struct intel_dmc_wl *wl = &i915->display.wl;
> >         unsigned long flags;
> > 
> > +        if (!i915->display.params.enable_dmc_wl ||
> > +            DISPLAY_VER(i915) <= 20)
> 
> s/<= 20/< 20/ ?
> 
> > +                return;
> > +
> >         spin_lock_irqsave(&wl->lock, flags);
> > 
> >         if (wl->enabled)
> > @@ -105,6 +109,10 @@ void intel_dmc_wl_disable(struct drm_i915_private *i915)
> >         struct intel_dmc_wl *wl = &i915->display.wl;
> >         unsigned long flags;
> > 
> > +        if (!i915->display.params.enable_dmc_wl ||
> > +            DISPLAY_VER(i915) <= 20)
> 
> s/<= 20/< 20/ ?
> 
> > +                return;
> > +
> >         spin_lock_irqsave(&wl->lock, flags);
> > 
> >         /* FIXME: should we cancel the work? */
> > @@ -135,7 +143,9 @@ void intel_dmc_wl_get(struct drm_i915_private *i915, i915_reg_t reg)
> >         unsigned long flags;
> >         u32 ctl_value;
> > 
> > -        if (!intel_dmc_wl_check_range(reg.reg))
> > +        if (!i915->display.params.enable_dmc_wl ||
> > +            DISPLAY_VER(i915) <= 20 ||
> 
> s/<= 20/< 20/ ?

Right, I fixed all these.


> > +            !intel_dmc_wl_check_range(reg.reg))
> 
> I would keep this condition line into its own "if" statement, just
> because the first two conditions are like "is this thing enabled?" and
> this last one is like "do we need the lock for this reg?".
> 
> >                 return;
> > 
> >         spin_lock_irqsave(&wl->lock, flags);
> > @@ -166,7 +176,9 @@ void intel_dmc_wl_put(struct drm_i915_private *i915, i915_reg_t reg)
> >         struct intel_dmc_wl *wl = &i915->display.wl;
> >         unsigned long flags;
> > 
> > -        if (!intel_dmc_wl_check_range(reg.reg))
> > +        if (!i915->display.params.enable_dmc_wl ||
> > +            DISPLAY_VER(i915) <= 20 ||
> > +            !intel_dmc_wl_check_range(reg.reg))
> 
> Ditto.

Done in both places.

--
Cheers,
Luca.


More information about the Intel-xe mailing list