public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
From: Daniel Vetter <daniel@ffwll.ch>
To: Jesse Barnes <jbarnes@virtuousgeek.org>
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 16/23] drm/i915: get/put runtime PM references for GMBUS and DP AUX
Date: Wed, 5 Mar 2014 18:04:52 +0100	[thread overview]
Message-ID: <20140305170452.GI17001@phenom.ffwll.local> (raw)
In-Reply-To: <20140228095512.1c92f458@jbarnes-desktop>

On Fri, Feb 28, 2014 at 09:55:12AM -0800, Jesse Barnes wrote:
> On Fri, 28 Feb 2014 19:38:17 +0200
> Imre Deak <imre.deak@intel.com> wrote:
> 
> > On Fri, 2014-02-28 at 09:13 -0800, Jesse Barnes wrote:
> > > On Thu, 27 Feb 2014 19:26:43 -0300
> > > Paulo Zanoni <przanoni@gmail.com> wrote:
> > > 
> > > > From: Paulo Zanoni <paulo.r.zanoni@intel.com>
> > > > 
> > > > We had these intel_aux_display_runtime_{get,put} abstractions that
> > > > would just get/put PC8 references, but now that runtime PM and PC8
> > > > are the same stuff, we just need the runtime PM references, so just
> > > > get/put runtime PM directly, because that's what the rest of our code
> > > > does.
> > > > 
> > > > Another way to solve this problem would be to add DP_AUX and GMBUS
> > > > power domains, and then use intel_display_power_{get,put}, but every
> > > > power domain already gets/puts runtime PM references, so this would
> > > > just make things more complex.
> > > > 
> > > > Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
> > > > ---
> > > >  drivers/gpu/drm/i915/intel_dp.c  |  4 ++--
> > > >  drivers/gpu/drm/i915/intel_drv.h |  2 --
> > > >  drivers/gpu/drm/i915/intel_i2c.c |  4 ++--
> > > >  drivers/gpu/drm/i915/intel_pm.c  | 11 -----------
> > > >  4 files changed, 4 insertions(+), 17 deletions(-)
> > > > 
> > > > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> > > > index c512d78..79d4844 100644
> > > > --- a/drivers/gpu/drm/i915/intel_dp.c
> > > > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > > > @@ -469,7 +469,7 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
> > > >  
> > > >  	intel_dp_check_edp(intel_dp);
> > > >  
> > > > -	intel_aux_display_runtime_get(dev_priv);
> > > > +	intel_runtime_pm_get(dev_priv);
> > > >  
> > > >  	/* Try to wait for any previous AUX channel activity */
> > > >  	for (try = 0; try < 3; try++) {
> > > > @@ -563,7 +563,7 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
> > > >  	ret = recv_bytes;
> > > >  out:
> > > >  	pm_qos_update_request(&dev_priv->pm_qos, PM_QOS_DEFAULT_VALUE);
> > > > -	intel_aux_display_runtime_put(dev_priv);
> > > > +	intel_runtime_pm_put(dev_priv);
> > > >  
> > > >  	return ret;
> > > >  }
> > > > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> > > > index ea24eae..a2e0cd7 100644
> > > > --- a/drivers/gpu/drm/i915/intel_drv.h
> > > > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > > > @@ -890,8 +890,6 @@ void ironlake_teardown_rc6(struct drm_device *dev);
> > > >  void gen6_update_ring_freq(struct drm_device *dev);
> > > >  void gen6_rps_idle(struct drm_i915_private *dev_priv);
> > > >  void gen6_rps_boost(struct drm_i915_private *dev_priv);
> > > > -void intel_aux_display_runtime_get(struct drm_i915_private *dev_priv);
> > > > -void intel_aux_display_runtime_put(struct drm_i915_private *dev_priv);
> > > >  void intel_runtime_pm_get(struct drm_i915_private *dev_priv);
> > > >  void intel_runtime_pm_put(struct drm_i915_private *dev_priv);
> > > >  void intel_init_runtime_pm(struct drm_i915_private *dev_priv);
> > > > diff --git a/drivers/gpu/drm/i915/intel_i2c.c b/drivers/gpu/drm/i915/intel_i2c.c
> > > > index d33b61d..3d403ce 100644
> > > > --- a/drivers/gpu/drm/i915/intel_i2c.c
> > > > +++ b/drivers/gpu/drm/i915/intel_i2c.c
> > > > @@ -446,7 +446,7 @@ gmbus_xfer(struct i2c_adapter *adapter,
> > > >  	int i, reg_offset;
> > > >  	int ret = 0;
> > > >  
> > > > -	intel_aux_display_runtime_get(dev_priv);
> > > > +	intel_runtime_pm_get(dev_priv);
> > > >  	mutex_lock(&dev_priv->gmbus_mutex);
> > > >  
> > > >  	if (bus->force_bit) {
> > > > @@ -546,7 +546,7 @@ timeout:
> > > >  
> > > >  out:
> > > >  	mutex_unlock(&dev_priv->gmbus_mutex);
> > > > -	intel_aux_display_runtime_put(dev_priv);
> > > > +	intel_runtime_pm_put(dev_priv);
> > > >  	return ret;
> > > >  }
> > > >  
> > > > diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> > > > index 86e6835..1e3580f 100644
> > > > --- a/drivers/gpu/drm/i915/intel_pm.c
> > > > +++ b/drivers/gpu/drm/i915/intel_pm.c
> > > > @@ -5516,17 +5516,6 @@ void intel_power_domains_init_hw(struct drm_device *dev)
> > > >  		I915_WRITE(HSW_PWR_WELL_BIOS, 0);
> > > >  }
> > > >  
> > > > -/* Disables PC8 so we can use the GMBUS and DP AUX interrupts. */
> > > > -void intel_aux_display_runtime_get(struct drm_i915_private *dev_priv)
> > > > -{
> > > > -	hsw_disable_package_c8(dev_priv);
> > > > -}
> > > > -
> > > > -void intel_aux_display_runtime_put(struct drm_i915_private *dev_priv)
> > > > -{
> > > > -	hsw_enable_package_c8(dev_priv);
> > > > -}
> > > > -
> > > >  void intel_runtime_pm_get(struct drm_i915_private *dev_priv)
> > > >  {
> > > >  	struct drm_device *dev = dev_priv->dev;
> > > 
> > > But OTOH, in cases where we have a separate, explicit power well for
> > > display, doesn't the aux_display_runtime_get|put make sense?  We don't
> > > want just global runtime get/put everywhere since we can be finer
> > > grained in may cases, right?
> > 
> > I think here we should just depend on connector->detect and ->get_modes
> > getting the needed power domains, which will also adjust the RPM
> > refcount accordingly.
> 
> That should work too I think, do we have any paths outside those where
> we would do aux poking?  Maybe audio or DDC brightness controls in the
> future?  I think audio is ok today, and we can worry about new stuff as
> it comes along...

Yes, userspace can directly do i2c transactions on gmbus and through i2c
over dp aux also there. And I guess eventually our dp aux helpers in drm
core will grow their own native userspace interface.

I'm not on top of all the changes in our future platforms, iirc there's
been some more fine-grained changes just for the dp aux/gmbus stuff.
Damien/Ville/Rodrigo?
-Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

  parent reply	other threads:[~2014-03-05 17:04 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-27 22:26 [PATCH 00/23] Merge PC8 with runtime PM, v2 Paulo Zanoni
2014-02-27 22:26 ` [PATCH 01/23] drm/i915: Accurately track when we mark the hardware as idle/busy Paulo Zanoni
2014-02-27 22:26 ` [PATCH 02/23] drm/i915: put runtime PM only at the end of intel_mark_idle Paulo Zanoni
2014-02-27 22:26 ` [PATCH 03/23] drm/i915: put runtime PM only when we actually release force_wake Paulo Zanoni
2014-02-27 22:26 ` [PATCH 04/23] drm/i915: kill dev_priv->pc8.gpu_idle Paulo Zanoni
2014-02-28 15:23   ` Imre Deak
2014-02-27 22:26 ` [PATCH 05/23] drm/i915: rename modeset_update_power_wells Paulo Zanoni
2014-02-27 22:26 ` [PATCH 06/23] drm/i915: get/put runtime PM without holding rps.hw_lock Paulo Zanoni
2014-02-27 22:26 ` [PATCH 07/23] drm/i915: add forcewake functions that don't touch runtime PM Paulo Zanoni
2014-02-28  8:44   ` Chris Wilson
2014-02-28 19:38     ` Paulo Zanoni
2014-02-28 19:46       ` Chris Wilson
2014-03-05 16:56   ` Daniel Vetter
2014-02-27 22:26 ` [PATCH 08/23] drm/i915: extract __hsw_do_{en, dis}able_package_c8 Paulo Zanoni
2014-02-27 22:26 ` [PATCH 09/23] drm/i915: make PC8 be part of runtime PM suspend/resume Paulo Zanoni
2014-02-28  9:42   ` Chris Wilson
2014-03-06 22:48     ` Daniel Vetter
2014-02-27 22:26 ` [PATCH 10/23] drm/i915: get/put runtime PM when we get/put a power domain Paulo Zanoni
2014-02-28 15:45   ` Imre Deak
2014-02-28 19:54     ` Paulo Zanoni
2014-02-27 22:26 ` [PATCH 11/23] drm/i915: remove dev_priv->pc8.requirements_met Paulo Zanoni
2014-02-27 22:26 ` [PATCH 12/23] drm/i915: get runtime PM references when the GPU is idle/busy Paulo Zanoni
2014-02-28 17:08   ` Jesse Barnes
2014-02-27 22:26 ` [PATCH 13/23] drm/i915: kill pc8.disable_count Paulo Zanoni
2014-02-28 17:10   ` Jesse Barnes
2014-02-27 22:26 ` [PATCH 14/23] drm/i915: remove an indirection level on PC8 functions Paulo Zanoni
2014-02-28 17:11   ` Jesse Barnes
2014-02-27 22:26 ` [PATCH 15/23] drm/i915: don't get/put PC8 reference on freeze/thaw Paulo Zanoni
2014-02-28 17:11   ` Jesse Barnes
2014-02-27 22:26 ` [PATCH 16/23] drm/i915: get/put runtime PM references for GMBUS and DP AUX Paulo Zanoni
2014-02-28 17:13   ` Jesse Barnes
2014-02-28 17:38     ` Imre Deak
2014-02-28 17:55       ` Jesse Barnes
2014-02-28 18:20         ` Imre Deak
2014-02-28 19:07           ` Paulo Zanoni
2014-03-05 17:04         ` Daniel Vetter [this message]
2014-02-27 22:26 ` [PATCH 17/23] drm/i915: don't get/put PC8 when getting/putting power wells Paulo Zanoni
2014-02-28 17:13   ` Jesse Barnes
2014-02-27 22:26 ` [PATCH 18/23] drm/i915: remove dev_priv->pc8.enabled Paulo Zanoni
2014-02-28 17:14   ` Jesse Barnes
2014-02-27 22:26 ` [PATCH 19/23] drm/i915: move pc8.irqs_disabled to pm.irqs_disabled Paulo Zanoni
2014-02-28 17:15   ` Jesse Barnes
2014-02-28 18:17     ` Paulo Zanoni
2014-02-27 22:26 ` [PATCH 20/23] drm/i915: kill struct i915_package_c8 Paulo Zanoni
2014-02-28 17:16   ` Jesse Barnes
2014-02-27 22:26 ` [PATCH 21/23] drm/i915: rename __hsw_do_{en, dis}able_pc8 Paulo Zanoni
2014-02-28 17:17   ` Jesse Barnes
2014-02-27 22:26 ` [PATCH 22/23] drm/i915: update the PC8 and runtime PM documentation Paulo Zanoni
2014-02-28 17:19   ` Jesse Barnes
2014-02-27 22:26 ` [PATCH 23/23] drm/i915: init pm.suspended earlier Paulo Zanoni
2014-02-28 17:20   ` Jesse Barnes
2014-03-05 17:09 ` [PATCH 00/23] Merge PC8 with runtime PM, v2 Daniel Vetter
2014-03-06 22:23   ` Paulo Zanoni
2014-03-06 22:45     ` Daniel Vetter
2014-03-07  8:51       ` Daniel Vetter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140305170452.GI17001@phenom.ffwll.local \
    --to=daniel@ffwll.ch \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jbarnes@virtuousgeek.org \
    --cc=paulo.r.zanoni@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox