intel-gfx.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq
@ 2011-04-27  7:41 Feng, Boqun
  2011-04-27  7:41 ` [PATCH 2/2] drm/i915:fix irq miss in bsd ring for g4x Feng, Boqun
  2011-04-27 16:42 ` [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq Keith Packard
  0 siblings, 2 replies; 7+ messages in thread
From: Feng, Boqun @ 2011-04-27  7:41 UTC (permalink / raw)
  To: intel-gfx

Remove ring_put_irq/ring_get_irq:drivers/gpu/drm/i915/intel_ringbuffer.c
, they are only used by bsd_ring_put_irq/bsd_ring_get_irq.
Expand the code in bsd_ring_put_irq/bsd_ring_get_irq.

Signed-off-by: Feng, Boqun <boqun.feng@intel.com>
Reviewed-by: Xiang, Haihao <haihao.xiang@intel.com>
---
 drivers/gpu/drm/i915/intel_ringbuffer.c |   48 +++++++++++-------------------
 1 files changed, 18 insertions(+), 30 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index e9e6f71..06c921f 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -600,7 +600,7 @@ ring_add_request(struct intel_ring_buffer *ring,
 }
 
 static bool
-ring_get_irq(struct intel_ring_buffer *ring, u32 flag)
+gen6_ring_get_irq(struct intel_ring_buffer *ring, u32 gflag, u32 rflag)
 {
 	struct drm_device *dev = ring->dev;
 	drm_i915_private_t *dev_priv = dev->dev_private;
@@ -609,27 +609,33 @@ ring_get_irq(struct intel_ring_buffer *ring, u32 flag)
 	       return false;
 
 	spin_lock(&ring->irq_lock);
-	if (ring->irq_refcount++ == 0)
-		ironlake_enable_irq(dev_priv, flag);
+	if (ring->irq_refcount++ == 0) {
+		ring->irq_mask &= ~rflag;
+		I915_WRITE_IMR(ring, ring->irq_mask);
+		ironlake_enable_irq(dev_priv, gflag);
+	}
 	spin_unlock(&ring->irq_lock);
 
 	return true;
 }
 
 static void
-ring_put_irq(struct intel_ring_buffer *ring, u32 flag)
+gen6_ring_put_irq(struct intel_ring_buffer *ring, u32 gflag, u32 rflag)
 {
 	struct drm_device *dev = ring->dev;
 	drm_i915_private_t *dev_priv = dev->dev_private;
 
 	spin_lock(&ring->irq_lock);
-	if (--ring->irq_refcount == 0)
-		ironlake_disable_irq(dev_priv, flag);
+	if (--ring->irq_refcount == 0) {
+		ring->irq_mask |= rflag;
+		I915_WRITE_IMR(ring, ring->irq_mask);
+		ironlake_disable_irq(dev_priv, gflag);
+	}
 	spin_unlock(&ring->irq_lock);
 }
 
 static bool
-gen6_ring_get_irq(struct intel_ring_buffer *ring, u32 gflag, u32 rflag)
+bsd_ring_get_irq(struct intel_ring_buffer *ring)
 {
 	struct drm_device *dev = ring->dev;
 	drm_i915_private_t *dev_priv = dev->dev_private;
@@ -638,42 +644,24 @@ gen6_ring_get_irq(struct intel_ring_buffer *ring, u32 gflag, u32 rflag)
 	       return false;
 
 	spin_lock(&ring->irq_lock);
-	if (ring->irq_refcount++ == 0) {
-		ring->irq_mask &= ~rflag;
-		I915_WRITE_IMR(ring, ring->irq_mask);
-		ironlake_enable_irq(dev_priv, gflag);
-	}
+	if (ring->irq_refcount++ == 0)
+		ironlake_enable_irq(dev_priv, GT_BSD_USER_INTERRUPT);
 	spin_unlock(&ring->irq_lock);
 
 	return true;
 }
-
 static void
-gen6_ring_put_irq(struct intel_ring_buffer *ring, u32 gflag, u32 rflag)
+bsd_ring_put_irq(struct intel_ring_buffer *ring)
 {
 	struct drm_device *dev = ring->dev;
 	drm_i915_private_t *dev_priv = dev->dev_private;
 
 	spin_lock(&ring->irq_lock);
-	if (--ring->irq_refcount == 0) {
-		ring->irq_mask |= rflag;
-		I915_WRITE_IMR(ring, ring->irq_mask);
-		ironlake_disable_irq(dev_priv, gflag);
-	}
+	if (--ring->irq_refcount == 0)
+		ironlake_disable_irq(dev_priv, GT_BSD_USER_INTERRUPT);
 	spin_unlock(&ring->irq_lock);
 }
 
-static bool
-bsd_ring_get_irq(struct intel_ring_buffer *ring)
-{
-	return ring_get_irq(ring, GT_BSD_USER_INTERRUPT);
-}
-static void
-bsd_ring_put_irq(struct intel_ring_buffer *ring)
-{
-	ring_put_irq(ring, GT_BSD_USER_INTERRUPT);
-}
-
 static int
 ring_dispatch_execbuffer(struct intel_ring_buffer *ring, u32 offset, u32 length)
 {
-- 
1.7.4.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] drm/i915:fix irq miss in bsd ring for g4x
  2011-04-27  7:41 [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq Feng, Boqun
@ 2011-04-27  7:41 ` Feng, Boqun
  2011-04-27 16:42 ` [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq Keith Packard
  1 sibling, 0 replies; 7+ messages in thread
From: Feng, Boqun @ 2011-04-27  7:41 UTC (permalink / raw)
  To: intel-gfx

On g4x, user interrupt in bsd ring is missed.
g4x and ironlake share the same bsd_ring, but their interrupt
control interfaces are different. G4x use I915 while ironlake
use GT. The interrupt mask reg address on g4x should be IMR,
user interrupt bit in bsd ring on g4x is I915_BSD_USER_INTERRUPT

Add conditional judgment about platform to find out which
interrupt interface is to use.

Signed-off-by: Feng, Boqun <boqun.feng@intel.com>
Reviewed-by: Xiang, Haihao <haihao.xiang@intel.com>
---
 drivers/gpu/drm/i915/intel_ringbuffer.c |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 06c921f..48c21aa 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -644,8 +644,12 @@ bsd_ring_get_irq(struct intel_ring_buffer *ring)
 	       return false;
 
 	spin_lock(&ring->irq_lock);
-	if (ring->irq_refcount++ == 0)
-		ironlake_enable_irq(dev_priv, GT_BSD_USER_INTERRUPT);
+	if (ring->irq_refcount++ == 0) {
+		if (IS_G4X(dev))
+			i915_enable_irq(dev_priv, I915_BSD_USER_INTERRUPT);
+		else
+			ironlake_enable_irq(dev_priv, GT_BSD_USER_INTERRUPT);
+	}
 	spin_unlock(&ring->irq_lock);
 
 	return true;
@@ -657,8 +661,12 @@ bsd_ring_put_irq(struct intel_ring_buffer *ring)
 	drm_i915_private_t *dev_priv = dev->dev_private;
 
 	spin_lock(&ring->irq_lock);
-	if (--ring->irq_refcount == 0)
-		ironlake_disable_irq(dev_priv, GT_BSD_USER_INTERRUPT);
+	if (--ring->irq_refcount == 0) {
+		if (IS_G4X(dev))
+			i915_disable_irq(dev_priv, I915_BSD_USER_INTERRUPT);
+		else
+			ironlake_disable_irq(dev_priv, GT_BSD_USER_INTERRUPT);
+	}
 	spin_unlock(&ring->irq_lock);
 }
 
-- 
1.7.4.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq
  2011-04-27  7:41 [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq Feng, Boqun
  2011-04-27  7:41 ` [PATCH 2/2] drm/i915:fix irq miss in bsd ring for g4x Feng, Boqun
@ 2011-04-27 16:42 ` Keith Packard
  2011-04-28  2:06   ` Feng, Boqun
  1 sibling, 1 reply; 7+ messages in thread
From: Keith Packard @ 2011-04-27 16:42 UTC (permalink / raw)
  To: Feng, Boqun, intel-gfx


[-- Attachment #1.1: Type: text/plain, Size: 338 bytes --]

On Wed, 27 Apr 2011 15:41:18 +0800, "Feng, Boqun" <boqun.feng@intel.com> wrote:
> Remove ring_put_irq/ring_get_irq:drivers/gpu/drm/i915/intel_ringbuffer.c
> , they are only used by bsd_ring_put_irq/bsd_ring_get_irq.
> Expand the code in bsd_ring_put_irq/bsd_ring_get_irq.

Why is this change useful?

-- 
keith.packard@intel.com

[-- Attachment #1.2: Type: application/pgp-signature, Size: 189 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq
  2011-04-27 16:42 ` [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq Keith Packard
@ 2011-04-28  2:06   ` Feng, Boqun
  2011-04-28  2:40     ` Keith Packard
  0 siblings, 1 reply; 7+ messages in thread
From: Feng, Boqun @ 2011-04-28  2:06 UTC (permalink / raw)
  To: Keith Packard, intel-gfx

I have discussed this with Chris in my earlier patch.

This change is a clean-up, since ring_put_irq and ring_get_irq are only used by 
bsd_ring_put_irq and bsd_ring_get_irq.

And once this change is made, it is more clear to see the difference between
g4x and ironlake BSD interrupt control interface, because they are handled in
a single function and they are different at the interrupt mask reg addresss as
well as the interrupt flag
.
Thanks
Feng, Boqun

-----Original Message-----
From: Keith Packard [mailto:keithp@keithp.com] 
Sent: Thursday, April 28, 2011 12:43 AM
To: Feng, Boqun; intel-gfx@lists.freedesktop.org
Subject: Re: [Intel-gfx] [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq

On Wed, 27 Apr 2011 15:41:18 +0800, "Feng, Boqun" <boqun.feng@intel.com> wrote:
> Remove ring_put_irq/ring_get_irq:drivers/gpu/drm/i915/intel_ringbuffer.c
> , they are only used by bsd_ring_put_irq/bsd_ring_get_irq.
> Expand the code in bsd_ring_put_irq/bsd_ring_get_irq.

Why is this change useful?

-- 
keith.packard@intel.com

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq
  2011-04-28  2:06   ` Feng, Boqun
@ 2011-04-28  2:40     ` Keith Packard
  2011-04-28  3:23       ` Feng, Boqun
  0 siblings, 1 reply; 7+ messages in thread
From: Keith Packard @ 2011-04-28  2:40 UTC (permalink / raw)
  To: Feng, Boqun, intel-gfx


[-- Attachment #1.1: Type: text/plain, Size: 779 bytes --]

On Thu, 28 Apr 2011 10:06:51 +0800, "Feng, Boqun" <boqun.feng@intel.com> wrote:
> I have discussed this with Chris in my earlier patch.
> 
> This change is a clean-up, since ring_put_irq and ring_get_irq are only used by 
> bsd_ring_put_irq and bsd_ring_get_irq.
> 
> And once this change is made, it is more clear to see the difference between
> g4x and ironlake BSD interrupt control interface, because they are handled in
> a single function and they are different at the interrupt mask reg addresss as
> well as the interrupt flag

please put important details like that in the commit message; having
some way to evaluate the utility of the patch is very important for
something which doesn't actually change how the code works.

-- 
keith.packard@intel.com

[-- Attachment #1.2: Type: application/pgp-signature, Size: 189 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq
  2011-04-28  2:40     ` Keith Packard
@ 2011-04-28  3:23       ` Feng, Boqun
  0 siblings, 0 replies; 7+ messages in thread
From: Feng, Boqun @ 2011-04-28  3:23 UTC (permalink / raw)
  To: Keith Packard, intel-gfx

I got it!
Thanks for reminding me. :)

-----Original Message-----
From: Keith Packard [mailto:keithp@keithp.com] 
Sent: Thursday, April 28, 2011 10:41 AM
To: Feng, Boqun; intel-gfx@lists.freedesktop.org
Subject: RE: [Intel-gfx] [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq

On Thu, 28 Apr 2011 10:06:51 +0800, "Feng, Boqun" <boqun.feng@intel.com> wrote:
> I have discussed this with Chris in my earlier patch.
> 
> This change is a clean-up, since ring_put_irq and ring_get_irq are 
> only used by bsd_ring_put_irq and bsd_ring_get_irq.
> 
> And once this change is made, it is more clear to see the difference 
> between g4x and ironlake BSD interrupt control interface, because they 
> are handled in a single function and they are different at the 
> interrupt mask reg addresss as well as the interrupt flag

please put important details like that in the commit message; having some way to evaluate the utility of the patch is very important for something which doesn't actually change how the code works.

--
keith.packard@intel.com

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 2/2] drm/i915:fix irq miss in bsd ring for g4x
  2011-04-28  6:58 Feng, Boqun
@ 2011-04-28  6:58 ` Feng, Boqun
  0 siblings, 0 replies; 7+ messages in thread
From: Feng, Boqun @ 2011-04-28  6:58 UTC (permalink / raw)
  To: intel-gfx

This patch depends on patch "drm/i915:merge ring_put/get_irq into
bsd_ring_put/get_irq"

On g4x, user interrupt in bsd ring is missed.
g4x and ironlake share the same bsd_ring, but their interrupt control 
interfaces are different, g4x use I915 while ironlake use GT.
The interrupt mask reg address on g4x should be IMR, user interrupt flag
in bsd ring on g4x is I915_BSD_USER_INTERRUPT

Add conditional judgment about dev version to find out which interrupt
control interface is to use.

Signed-off-by: Feng, Boqun <boqun.feng@intel.com>
Reviewed-by: Xiang, Haihao <haihao.xiang@intel.com>
---
 drivers/gpu/drm/i915/intel_ringbuffer.c |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 06c921f..48c21aa 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -644,8 +644,12 @@ bsd_ring_get_irq(struct intel_ring_buffer *ring)
 	       return false;
 
 	spin_lock(&ring->irq_lock);
-	if (ring->irq_refcount++ == 0)
-		ironlake_enable_irq(dev_priv, GT_BSD_USER_INTERRUPT);
+	if (ring->irq_refcount++ == 0) {
+		if (IS_G4X(dev))
+			i915_enable_irq(dev_priv, I915_BSD_USER_INTERRUPT);
+		else
+			ironlake_enable_irq(dev_priv, GT_BSD_USER_INTERRUPT);
+	}
 	spin_unlock(&ring->irq_lock);
 
 	return true;
@@ -657,8 +661,12 @@ bsd_ring_put_irq(struct intel_ring_buffer *ring)
 	drm_i915_private_t *dev_priv = dev->dev_private;
 
 	spin_lock(&ring->irq_lock);
-	if (--ring->irq_refcount == 0)
-		ironlake_disable_irq(dev_priv, GT_BSD_USER_INTERRUPT);
+	if (--ring->irq_refcount == 0) {
+		if (IS_G4X(dev))
+			i915_disable_irq(dev_priv, I915_BSD_USER_INTERRUPT);
+		else
+			ironlake_disable_irq(dev_priv, GT_BSD_USER_INTERRUPT);
+	}
 	spin_unlock(&ring->irq_lock);
 }
 
-- 
1.7.4.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2011-04-28  6:58 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-04-27  7:41 [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq Feng, Boqun
2011-04-27  7:41 ` [PATCH 2/2] drm/i915:fix irq miss in bsd ring for g4x Feng, Boqun
2011-04-27 16:42 ` [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq Keith Packard
2011-04-28  2:06   ` Feng, Boqun
2011-04-28  2:40     ` Keith Packard
2011-04-28  3:23       ` Feng, Boqun
2011-04-28  6:58 Feng, Boqun
2011-04-28  6:58 ` [PATCH 2/2] drm/i915:fix irq miss in bsd ring for g4x Feng, Boqun

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).