Re: [Intel-gfx] [PATCH 53/89] drm/i915/skl: Gen9 Forcewake

2014-09-10 Thread Mika Kuoppala
Damien Lespiau damien.lesp...@intel.com writes:

 From: Zhe Wang zhe1.w...@intel.com

 Implement common forcewake functions shared by Gen9 features.

 Signed-off-by: Zhe Wang zhe1.w...@intel.com
 Signed-off-by: Damien Lespiau damien.lesp...@intel.com
 ---
  drivers/gpu/drm/i915/i915_drv.h |   5 +-
  drivers/gpu/drm/i915/i915_reg.h |   6 ++
  drivers/gpu/drm/i915/intel_uncore.c | 175 
 +++-
  3 files changed, 184 insertions(+), 2 deletions(-)

 diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
 index 9b0e398..84defa4 100644
 --- a/drivers/gpu/drm/i915/i915_drv.h
 +++ b/drivers/gpu/drm/i915/i915_drv.h
 @@ -535,6 +535,7 @@ struct intel_uncore {
  
   unsigned fw_rendercount;
   unsigned fw_mediacount;
 + unsigned fw_blittercount;
  
   struct timer_list force_wake_timer;
  };
 @@ -2950,7 +2951,9 @@ int vlv_freq_opcode(struct drm_i915_private *dev_priv, 
 int val);
  
  #define FORCEWAKE_RENDER (1  0)
  #define FORCEWAKE_MEDIA  (1  1)
 -#define FORCEWAKE_ALL(FORCEWAKE_RENDER | FORCEWAKE_MEDIA)
 +#define FORCEWAKE_BLITTER(1  2)
 +#define FORCEWAKE_ALL(FORCEWAKE_RENDER | FORCEWAKE_MEDIA | \
 + FORCEWAKE_BLITTER)
  
  
  #define I915_READ8(reg)  
 dev_priv-uncore.funcs.mmio_readb(dev_priv, (reg), true)
 diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
 index 414c2a5..417075d 100644
 --- a/drivers/gpu/drm/i915/i915_reg.h
 +++ b/drivers/gpu/drm/i915/i915_reg.h
 @@ -5738,6 +5738,12 @@ enum punit_power_well {
  #define   VLV_GTLC_PW_MEDIA_STATUS_MASK  (1  5)
  #define   VLV_GTLC_PW_RENDER_STATUS_MASK (1  7)
  #define  FORCEWAKE_MT0xa188 /* 
 multi-threaded */
 +#define  FORCEWAKE_MEDIA_GEN90xa270
 +#define  FORCEWAKE_RENDER_GEN9   0xa278
 +#define  FORCEWAKE_BLITTER_GEN9  0xa188
 +#define  FORCEWAKE_ACK_MEDIA_GEN90x0D88
 +#define  FORCEWAKE_ACK_RENDER_GEN9   0x0D84
 +#define  FORCEWAKE_ACK_BLITTER_GEN9  0x130044
  #define   FORCEWAKE_KERNEL   0x1
  #define   FORCEWAKE_USER 0x2
  #define  FORCEWAKE_MT_ACK0x130040
 diff --git a/drivers/gpu/drm/i915/intel_uncore.c 
 b/drivers/gpu/drm/i915/intel_uncore.c
 index 3b27fb0..7b7fc9e 100644
 --- a/drivers/gpu/drm/i915/intel_uncore.c
 +++ b/drivers/gpu/drm/i915/intel_uncore.c
 @@ -299,6 +299,154 @@ static void vlv_force_wake_put(struct drm_i915_private 
 *dev_priv, int fw_engine)
   spin_unlock_irqrestore(dev_priv-uncore.lock, irqflags);
  }
  
 +static void __gen9_gt_force_wake_mt_reset(struct drm_i915_private *dev_priv)
 +{
 + __raw_i915_write32(dev_priv, FORCEWAKE_RENDER_GEN9,
 + _MASKED_BIT_DISABLE(0x));
 +
 + __raw_i915_write32(dev_priv, FORCEWAKE_MEDIA_GEN9,
 + _MASKED_BIT_DISABLE(0x));
 +
 + __raw_i915_write32(dev_priv, FORCEWAKE_BLITTER_GEN9,
 + _MASKED_BIT_DISABLE(0x));
 +}
 +
 +static void __gen9_force_wake_get(struct drm_i915_private *dev_priv,
 + int fw_engine)
 +{
 + /* Check for Render Engine */
 + if (FORCEWAKE_RENDER  fw_engine) {
 + if (wait_for_atomic((__raw_i915_read32(dev_priv,
 + FORCEWAKE_ACK_RENDER_GEN9) 
 + FORCEWAKE_KERNEL) == 0,
 + FORCEWAKE_ACK_TIMEOUT_MS))
 + DRM_ERROR(Timed out: Render forcewake old ack to 
 clear.\n);
 +
 + __raw_i915_write32(dev_priv, FORCEWAKE_RENDER_GEN9,
 +_MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
 +
 + if (wait_for_atomic((__raw_i915_read32(dev_priv,
 + FORCEWAKE_ACK_RENDER_GEN9) 
 + FORCEWAKE_KERNEL),
 + FORCEWAKE_ACK_TIMEOUT_MS))
 + DRM_ERROR(Timed out: waiting for Render to ack.\n);
 + }
 +
 + /* Check for Media Engine */
 + if (FORCEWAKE_MEDIA  fw_engine) {
 + if (wait_for_atomic((__raw_i915_read32(dev_priv,
 + FORCEWAKE_ACK_MEDIA_GEN9) 
 + FORCEWAKE_KERNEL) == 0,
 + FORCEWAKE_ACK_TIMEOUT_MS))
 + DRM_ERROR(Timed out: Media forcewake old ack to 
 clear.\n);
 +
 + __raw_i915_write32(dev_priv, FORCEWAKE_MEDIA_GEN9,
 +_MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
 +
 + if (wait_for_atomic((__raw_i915_read32(dev_priv,
 + FORCEWAKE_ACK_MEDIA_GEN9) 
 +

[Intel-gfx] [PATCH 53/89] drm/i915/skl: Gen9 Forcewake

2014-09-04 Thread Damien Lespiau
From: Zhe Wang zhe1.w...@intel.com

Implement common forcewake functions shared by Gen9 features.

Signed-off-by: Zhe Wang zhe1.w...@intel.com
Signed-off-by: Damien Lespiau damien.lesp...@intel.com
---
 drivers/gpu/drm/i915/i915_drv.h |   5 +-
 drivers/gpu/drm/i915/i915_reg.h |   6 ++
 drivers/gpu/drm/i915/intel_uncore.c | 175 +++-
 3 files changed, 184 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 9b0e398..84defa4 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -535,6 +535,7 @@ struct intel_uncore {
 
unsigned fw_rendercount;
unsigned fw_mediacount;
+   unsigned fw_blittercount;
 
struct timer_list force_wake_timer;
 };
@@ -2950,7 +2951,9 @@ int vlv_freq_opcode(struct drm_i915_private *dev_priv, 
int val);
 
 #define FORCEWAKE_RENDER   (1  0)
 #define FORCEWAKE_MEDIA(1  1)
-#define FORCEWAKE_ALL  (FORCEWAKE_RENDER | FORCEWAKE_MEDIA)
+#define FORCEWAKE_BLITTER  (1  2)
+#define FORCEWAKE_ALL  (FORCEWAKE_RENDER | FORCEWAKE_MEDIA | \
+   FORCEWAKE_BLITTER)
 
 
 #define I915_READ8(reg)
dev_priv-uncore.funcs.mmio_readb(dev_priv, (reg), true)
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 414c2a5..417075d 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -5738,6 +5738,12 @@ enum punit_power_well {
 #define   VLV_GTLC_PW_MEDIA_STATUS_MASK(1  5)
 #define   VLV_GTLC_PW_RENDER_STATUS_MASK   (1  7)
 #define  FORCEWAKE_MT  0xa188 /* multi-threaded */
+#define  FORCEWAKE_MEDIA_GEN9  0xa270
+#define  FORCEWAKE_RENDER_GEN9 0xa278
+#define  FORCEWAKE_BLITTER_GEN90xa188
+#define  FORCEWAKE_ACK_MEDIA_GEN9  0x0D88
+#define  FORCEWAKE_ACK_RENDER_GEN9 0x0D84
+#define  FORCEWAKE_ACK_BLITTER_GEN90x130044
 #define   FORCEWAKE_KERNEL 0x1
 #define   FORCEWAKE_USER   0x2
 #define  FORCEWAKE_MT_ACK  0x130040
diff --git a/drivers/gpu/drm/i915/intel_uncore.c 
b/drivers/gpu/drm/i915/intel_uncore.c
index 3b27fb0..7b7fc9e 100644
--- a/drivers/gpu/drm/i915/intel_uncore.c
+++ b/drivers/gpu/drm/i915/intel_uncore.c
@@ -299,6 +299,154 @@ static void vlv_force_wake_put(struct drm_i915_private 
*dev_priv, int fw_engine)
spin_unlock_irqrestore(dev_priv-uncore.lock, irqflags);
 }
 
+static void __gen9_gt_force_wake_mt_reset(struct drm_i915_private *dev_priv)
+{
+   __raw_i915_write32(dev_priv, FORCEWAKE_RENDER_GEN9,
+   _MASKED_BIT_DISABLE(0x));
+
+   __raw_i915_write32(dev_priv, FORCEWAKE_MEDIA_GEN9,
+   _MASKED_BIT_DISABLE(0x));
+
+   __raw_i915_write32(dev_priv, FORCEWAKE_BLITTER_GEN9,
+   _MASKED_BIT_DISABLE(0x));
+}
+
+static void __gen9_force_wake_get(struct drm_i915_private *dev_priv,
+   int fw_engine)
+{
+   /* Check for Render Engine */
+   if (FORCEWAKE_RENDER  fw_engine) {
+   if (wait_for_atomic((__raw_i915_read32(dev_priv,
+   FORCEWAKE_ACK_RENDER_GEN9) 
+   FORCEWAKE_KERNEL) == 0,
+   FORCEWAKE_ACK_TIMEOUT_MS))
+   DRM_ERROR(Timed out: Render forcewake old ack to 
clear.\n);
+
+   __raw_i915_write32(dev_priv, FORCEWAKE_RENDER_GEN9,
+  _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
+
+   if (wait_for_atomic((__raw_i915_read32(dev_priv,
+   FORCEWAKE_ACK_RENDER_GEN9) 
+   FORCEWAKE_KERNEL),
+   FORCEWAKE_ACK_TIMEOUT_MS))
+   DRM_ERROR(Timed out: waiting for Render to ack.\n);
+   }
+
+   /* Check for Media Engine */
+   if (FORCEWAKE_MEDIA  fw_engine) {
+   if (wait_for_atomic((__raw_i915_read32(dev_priv,
+   FORCEWAKE_ACK_MEDIA_GEN9) 
+   FORCEWAKE_KERNEL) == 0,
+   FORCEWAKE_ACK_TIMEOUT_MS))
+   DRM_ERROR(Timed out: Media forcewake old ack to 
clear.\n);
+
+   __raw_i915_write32(dev_priv, FORCEWAKE_MEDIA_GEN9,
+  _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
+
+   if (wait_for_atomic((__raw_i915_read32(dev_priv,
+   FORCEWAKE_ACK_MEDIA_GEN9) 
+   FORCEWAKE_KERNEL),
+