Re: [Intel-gfx] [PATCH] drm/i915: hold forcewake around ring hw init

2012-06-04 Thread Jani Nikula

Hi Daniel, please find a couple of comments inline.

BR,
Jani.

On Mon, 04 Jun 2012, Daniel Vetter daniel.vet...@ffwll.ch wrote:
 diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
 index 238a521..a0c76aa 100644
 --- a/drivers/gpu/drm/i915/i915_drv.c
 +++ b/drivers/gpu/drm/i915/i915_drv.c
 @@ -233,6 +233,7 @@ static const struct intel_device_info 
 intel_sandybridge_d_info = {
   .has_blt_ring = 1,
   .has_llc = 1,
   .has_pch_split = 1,
 + .has_force_wake = 1
  };

Don't know if you care, but sticking a comma at the would avoid touching
the line the next time you need to add a field. Ditto below.

  
  static const struct intel_device_info intel_sandybridge_m_info = {
 @@ -243,6 +244,7 @@ static const struct intel_device_info 
 intel_sandybridge_m_info = {
   .has_blt_ring = 1,
   .has_llc = 1,
   .has_pch_split = 1,
 + .has_force_wake = 1
  };
  
  static const struct intel_device_info intel_ivybridge_d_info = {
 @@ -252,6 +254,7 @@ static const struct intel_device_info 
 intel_ivybridge_d_info = {
   .has_blt_ring = 1,
   .has_llc = 1,
   .has_pch_split = 1,
 + .has_force_wake = 1
  };
  
  static const struct intel_device_info intel_ivybridge_m_info = {
 @@ -262,6 +265,7 @@ static const struct intel_device_info 
 intel_ivybridge_m_info = {
   .has_blt_ring = 1,
   .has_llc = 1,
   .has_pch_split = 1,
 + .has_force_wake = 1
  };
  
  static const struct intel_device_info intel_valleyview_m_info = {
 @@ -289,6 +293,7 @@ static const struct intel_device_info 
 intel_haswell_d_info = {
   .has_blt_ring = 1,
   .has_llc = 1,
   .has_pch_split = 1,
 + .has_force_wake = 1
  };
  
  static const struct intel_device_info intel_haswell_m_info = {
 @@ -298,6 +303,7 @@ static const struct intel_device_info 
 intel_haswell_m_info = {
   .has_blt_ring = 1,
   .has_llc = 1,
   .has_pch_split = 1,
 + .has_force_wake = 1
  };
  

[snip]

 diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c 
 b/drivers/gpu/drm/i915/intel_ringbuffer.c
 index 89a5e7f..bdb37f2 100644
 --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
 +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
 @@ -266,10 +266,14 @@ u32 intel_ring_get_active_head(struct intel_ring_buffer 
 *ring)
  
  static int init_ring_common(struct intel_ring_buffer *ring)
  {
 - drm_i915_private_t *dev_priv = ring-dev-dev_private;
 + struct drm_device *dev = ring-dev;
 + drm_i915_private_t *dev_priv = dev-dev_private;
   struct drm_i915_gem_object *obj = ring-obj;
   u32 head;
  
 + if (HAS_FORCE_WAKE(dev))
 + gen6_gt_force_wake_get(dev_priv);
 +
   /* Stop the ring if it's running. */
   I915_WRITE_CTL(ring, 0);
   I915_WRITE_HEAD(ring, 0);
 @@ -328,6 +332,9 @@ static int init_ring_common(struct intel_ring_buffer 
 *ring)
   ring-space = ring_space(ring);
   }
  

Above, outside of patch context, there's an error code path with return
-EIO, which I think would leak dev_priv-forcewake_count.

 + if (HAS_FORCE_WAKE(dev))
 + gen6_gt_force_wake_put(dev_priv);
 +
   return 0;
  }
--
To unsubscribe from this list: send the line unsubscribe stable in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [Intel-gfx] [PATCH] drm/i915: hold forcewake around ring hw init

2012-06-04 Thread Daniel Vetter
On Mon, Jun 04, 2012 at 12:04:41PM +0300, Jani Nikula wrote:
 
 Hi Daniel, please find a couple of comments inline.

Oops, a clear case of -ENOTENOUGHCOFFEE. Thanks for catching these, I'll
follow up with a v2 shortly.
-Daniel
-- 
Daniel Vetter
Mail: dan...@ffwll.ch
Mobile: +41 (0)79 365 57 48
--
To unsubscribe from this list: send the line unsubscribe stable in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [Intel-gfx] [PATCH] drm/i915: hold forcewake around ring hw init

2012-06-04 Thread Chris Wilson
On Mon, 4 Jun 2012 11:16:04 +0200, Daniel Vetter dan...@ffwll.ch wrote:
 On Mon, Jun 04, 2012 at 12:04:41PM +0300, Jani Nikula wrote:
  
  Hi Daniel, please find a couple of comments inline.
 
 Oops, a clear case of -ENOTENOUGHCOFFEE. Thanks for catching these, I'll
 follow up with a v2 shortly.

Fwiw, the w/a looks harmless and is indeed advisable in cases where we
do a lot of writes (which does not really seem to apply here!)
Acked-by: Chris Wilson ch...@chris-wilson.co.uk
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre
--
To unsubscribe from this list: send the line unsubscribe stable in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [Intel-gfx] [PATCH] drm/i915: hold forcewake around ring hw init

2012-06-04 Thread Eugeni Dodonov

On 06/04/2012 06:18 AM, Daniel Vetter wrote:

Empirical evidence suggests that we need to: On at least one ivb
machine when running the hangman i-g-t test, the rings don't properly
initialize properly - the RING_START registers seems to be stuck at
all zeros.

Holding forcewake around this register init sequences makes chip reset
reliable again. Note that this is not the first such issue:

commit f01db988ef6f6c70a6cc36ee71e4a98a68901229
Author: Sean Paulseanp...@chromium.org
Date:   Fri Mar 16 12:43:22 2012 -0400

 drm/i915: Add wait_for in init_ring_common

added delay loops to make RING_START and RING_CTL initialization
reliable on the blt ring at boot-up. So I guess it won't hurt if we do
this unconditionally for all force_wake needing gpus.

To avoid copypasting of the HAS_FORCE_WAKE check I've added a new
intel_info bit for that.

v2: Fixup missing commas in static struct and properly handling the
error case in init_ring_common, both noticed by Jani Nikula.

Cc: stable@vger.kernel.org
Reported-by: Yang Guangguang.a.y...@intel.com
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=50522
Signed-Off-by: Daniel Vetterdaniel.vet...@ffwll.ch


The new .has_forcewake looks nice! Just one very tiny bikeshed below :).

Reviewed-by: Eugeni Dodonov eugeni.dodo...@intel.com


@@ -285,6 +285,7 @@ struct intel_device_info {
u8 is_ivybridge:1;
u8 is_valleyview:1;
u8 has_pch_split:1;
+   u8 has_force_wake:1;
u8 is_haswell:1;
u8 has_fbc:1;
u8 has_pipe_cxsr:1;


While you are on it, maybe it would make sense to move is_haswell up, so 
all the 'is_*' and 'has_*' flags would stay together?


It is partly may fault though, due to the has_pch_split which ended up 
in wrong place, but as you are touching those fields anyway, perhaps we 
could rectify it for the future? :)


Eugeni
--
To unsubscribe from this list: send the line unsubscribe stable in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html