Re: [PATCH 5.1 stable] drm/i915: Force 2*96 MHz cdclk on glk/cnl when audio power is enabled

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Daniel Drake <drake@xxxxxxxxxxxx> 於 2019年6月3日 週一 下午4:47寫道:
>
> On Mon, Jun 3, 2019 at 4:27 PM Jian-Hong Pan <jian-hong@xxxxxxxxxxxx> wrote:
> >  static void i915_audio_component_get_power(struct device *kdev)
> >  {
> > -       intel_display_power_get(kdev_to_i915(kdev), POWER_DOMAIN_AUDIO);
> > +       struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
> > +
> > +       intel_display_power_get(dev_priv, POWER_DOMAIN_AUDIO);
> > +
> > +       /* Force CDCLK to 2*BCLK as long as we need audio to be powered. */
> > +       if (dev_priv->audio_power_refcount++ == 0)
> > +               if (IS_CANNONLAKE(dev_priv) || IS_GEMINILAKE(dev_priv))
> > +                       glk_force_audio_cdclk(dev_priv, true);
> >  }
> >
> >  static void i915_audio_component_put_power(struct device *kdev)
> >  {
> > -       intel_display_power_put_unchecked(kdev_to_i915(kdev),
> > -                                         POWER_DOMAIN_AUDIO);
> > +       struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
> > +       intel_wakeref_t cookie;
> > +
> > +       /* Stop forcing CDCLK to 2*BCLK if no need for audio to be powered. */
> > +       if (--dev_priv->audio_power_refcount == 0)
> > +               if (IS_CANNONLAKE(dev_priv) || IS_GEMINILAKE(dev_priv))
> > +                       glk_force_audio_cdclk(dev_priv, false);
> > +
> > +       cookie = intel_display_power_get(dev_priv, POWER_DOMAIN_AUDIO);
> > +       intel_display_power_put(dev_priv, POWER_DOMAIN_AUDIO, cookie);
> >  }
>
> The code above is the rediffed part of the patch. I think the last 2
> lines here are not quite right.
>
> Here, get means "increment reference count" and put means "decrease
> reference count".
>
> Before your patch, i915_audio_component_get_power() does
> intel_display_power_get(), and i915_audio_component_put_power() does
> intel_display_power_put_unchecked(). You can see the symmetry.
>
> After your patch, i915_audio_component_get_power() does
> intel_display_power_get() as before (good), but
> i915_audio_component_put_power() does a 2nd get and then a single put.
> So the reference count is now unbalanced.
>
> I think the last 2 lines of this function should just be left the same
> as they were before:
>        intel_display_power_put_unchecked(kdev_to_i915(kdev),
>                                          POWER_DOMAIN_AUDIO);

Hi Daniel,

Thanks for your reviewing.
I'm going to prepare new Rediff.

Jian-Hong Pan




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux