diff mbox

[7/8] drm/i915: Shrink active_crtcs and active_pipes_changed to u8

Message ID 20170913140900.6972-8-ville.syrjala@linux.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ville Syrjälä Sept. 13, 2017, 2:08 p.m. UTC
From: Ville Syrjälä <ville.syrjala@linux.intel.com>

We only have three pipes, so 8 bits is more than sufficient to track
which is active. Also start using BIT() when populating them.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h      |  2 +-
 drivers/gpu/drm/i915/intel_display.c | 10 +++++-----
 drivers/gpu/drm/i915/intel_drv.h     |  4 ++--
 3 files changed, 8 insertions(+), 8 deletions(-)

Comments

Chris Wilson Sept. 13, 2017, 2:49 p.m. UTC | #1
Quoting Ville Syrjala (2017-09-13 15:08:59)
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> We only have three pipes, so 8 bits is more than sufficient to track
> which is active. Also start using BIT() when populating them.
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h      |  2 +-
>  drivers/gpu/drm/i915/intel_display.c | 10 +++++-----
>  drivers/gpu/drm/i915/intel_drv.h     |  4 ++--
>  3 files changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index d4ec44495c00..f8d7599cff43 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -2383,7 +2383,7 @@ struct drm_i915_private {
>          */
>         struct mutex dpll_lock;
>  
> -       unsigned int active_crtcs;
> +       u8 active_crtcs;
>         /* minimum acceptable cdclk for each pipe */
>         int min_cdclk[I915_MAX_PIPES];
>  
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 35fe8a98080e..c33fce9d9824 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -6032,7 +6032,7 @@ static void intel_crtc_disable_noatomic(struct drm_crtc *crtc,
>                 intel_display_power_put(dev_priv, domain);
>         intel_crtc->enabled_power_domains = 0;
>  
> -       dev_priv->active_crtcs &= ~(1 << intel_crtc->pipe);
> +       dev_priv->active_crtcs &= ~BIT(intel_crtc->pipe);
>         dev_priv->min_cdclk[intel_crtc->pipe] = 0;
>  }
>  
> @@ -11956,12 +11956,12 @@ static int intel_modeset_checks(struct drm_atomic_state *state)
>  
>         for_each_oldnew_intel_crtc_in_state(intel_state, crtc, old_crtc_state, new_crtc_state, i) {
>                 if (new_crtc_state->base.active)
> -                       intel_state->active_crtcs |= 1 << i;
> +                       intel_state->active_crtcs |= BIT(crtc->pipe);
>                 else
> -                       intel_state->active_crtcs &= ~(1 << i);
> +                       intel_state->active_crtcs &= ~BIT(crtc->pipe);

There's an hweight32(intel_state->active_crtcs & (drm_crtc_mask(for_crtc) - 1))

mixing drm_crtc_mask() and BIT(crtc->pipe) leaves a nasty taste. And
lots of hweight32() to cleanup.
>  
>                 if (old_crtc_state->base.active != new_crtc_state->base.active)
> -                       intel_state->active_pipe_changes |= drm_crtc_mask(&crtc->base);
> +                       intel_state->active_pipe_changes |= BIT(crtc->pipe);

Hmm. Looks very odd to be so isolated. It's treated as a bool which
explains why there's no corresponding clear_bit().
-Chris
Ville Syrjälä Sept. 13, 2017, 4:30 p.m. UTC | #2
On Wed, Sep 13, 2017 at 03:49:10PM +0100, Chris Wilson wrote:
> Quoting Ville Syrjala (2017-09-13 15:08:59)
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > 
> > We only have three pipes, so 8 bits is more than sufficient to track
> > which is active. Also start using BIT() when populating them.
> > 
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/i915_drv.h      |  2 +-
> >  drivers/gpu/drm/i915/intel_display.c | 10 +++++-----
> >  drivers/gpu/drm/i915/intel_drv.h     |  4 ++--
> >  3 files changed, 8 insertions(+), 8 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> > index d4ec44495c00..f8d7599cff43 100644
> > --- a/drivers/gpu/drm/i915/i915_drv.h
> > +++ b/drivers/gpu/drm/i915/i915_drv.h
> > @@ -2383,7 +2383,7 @@ struct drm_i915_private {
> >          */
> >         struct mutex dpll_lock;
> >  
> > -       unsigned int active_crtcs;
> > +       u8 active_crtcs;
> >         /* minimum acceptable cdclk for each pipe */
> >         int min_cdclk[I915_MAX_PIPES];
> >  
> > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> > index 35fe8a98080e..c33fce9d9824 100644
> > --- a/drivers/gpu/drm/i915/intel_display.c
> > +++ b/drivers/gpu/drm/i915/intel_display.c
> > @@ -6032,7 +6032,7 @@ static void intel_crtc_disable_noatomic(struct drm_crtc *crtc,
> >                 intel_display_power_put(dev_priv, domain);
> >         intel_crtc->enabled_power_domains = 0;
> >  
> > -       dev_priv->active_crtcs &= ~(1 << intel_crtc->pipe);
> > +       dev_priv->active_crtcs &= ~BIT(intel_crtc->pipe);
> >         dev_priv->min_cdclk[intel_crtc->pipe] = 0;
> >  }
> >  
> > @@ -11956,12 +11956,12 @@ static int intel_modeset_checks(struct drm_atomic_state *state)
> >  
> >         for_each_oldnew_intel_crtc_in_state(intel_state, crtc, old_crtc_state, new_crtc_state, i) {
> >                 if (new_crtc_state->base.active)
> > -                       intel_state->active_crtcs |= 1 << i;
> > +                       intel_state->active_crtcs |= BIT(crtc->pipe);
> >                 else
> > -                       intel_state->active_crtcs &= ~(1 << i);
> > +                       intel_state->active_crtcs &= ~BIT(crtc->pipe);
> 
> There's an hweight32(intel_state->active_crtcs & (drm_crtc_mask(for_crtc) - 1))
> 
> mixing drm_crtc_mask() and BIT(crtc->pipe) leaves a nasty taste.

Hmm. Looks like that mixup goes even deeper in the SKL+ wm code. Not
sure I want to try untangling it all.

> And
> lots of hweight32() to cleanup.
> >  
> >                 if (old_crtc_state->base.active != new_crtc_state->base.active)
> > -                       intel_state->active_pipe_changes |= drm_crtc_mask(&crtc->base);
> > +                       intel_state->active_pipe_changes |= BIT(crtc->pipe);
> 
> Hmm. Looks very odd to be so isolated. It's treated as a bool which
> explains why there's no corresponding clear_bit().
> -Chris
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index d4ec44495c00..f8d7599cff43 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2383,7 +2383,7 @@  struct drm_i915_private {
 	 */
 	struct mutex dpll_lock;
 
-	unsigned int active_crtcs;
+	u8 active_crtcs;
 	/* minimum acceptable cdclk for each pipe */
 	int min_cdclk[I915_MAX_PIPES];
 
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 35fe8a98080e..c33fce9d9824 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -6032,7 +6032,7 @@  static void intel_crtc_disable_noatomic(struct drm_crtc *crtc,
 		intel_display_power_put(dev_priv, domain);
 	intel_crtc->enabled_power_domains = 0;
 
-	dev_priv->active_crtcs &= ~(1 << intel_crtc->pipe);
+	dev_priv->active_crtcs &= ~BIT(intel_crtc->pipe);
 	dev_priv->min_cdclk[intel_crtc->pipe] = 0;
 }
 
@@ -11956,12 +11956,12 @@  static int intel_modeset_checks(struct drm_atomic_state *state)
 
 	for_each_oldnew_intel_crtc_in_state(intel_state, crtc, old_crtc_state, new_crtc_state, i) {
 		if (new_crtc_state->base.active)
-			intel_state->active_crtcs |= 1 << i;
+			intel_state->active_crtcs |= BIT(crtc->pipe);
 		else
-			intel_state->active_crtcs &= ~(1 << i);
+			intel_state->active_crtcs &= ~BIT(crtc->pipe);
 
 		if (old_crtc_state->base.active != new_crtc_state->base.active)
-			intel_state->active_pipe_changes |= drm_crtc_mask(&crtc->base);
+			intel_state->active_pipe_changes |= BIT(crtc->pipe);
 	}
 
 	/*
@@ -14951,7 +14951,7 @@  static void intel_modeset_readout_hw_state(struct drm_device *dev)
 		crtc->active = crtc_state->base.active;
 
 		if (crtc_state->base.active)
-			dev_priv->active_crtcs |= 1 << crtc->pipe;
+			dev_priv->active_crtcs |= BIT(crtc->pipe);
 
 		readout_plane_state(crtc);
 
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 307807672896..96f683256d7e 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -381,9 +381,9 @@  struct intel_atomic_state {
 	 * but the converse is not necessarily true; simply changing a mode may
 	 * not flip the final active status of any CRTC's
 	 */
-	unsigned int active_pipe_changes;
+	u8 active_pipe_changes;
 
-	unsigned int active_crtcs;
+	u8 active_crtcs;
 	/* minimum acceptable cdclk for each pipe */
 	int min_cdclk[I915_MAX_PIPES];