xf86-video-intel: src/i810_reg.h src/reg_dumper/idle.c src/reg_dumper/reg_dumper.h

Eric Anholt anholt at kemper.freedesktop.org
Tue May 13 11:51:53 PDT 2008


 src/i810_reg.h              |   30 ++++++++++++++++++++++
 src/reg_dumper/idle.c       |   58 ++++++++++++++++++++++++++++++++++++++------
 src/reg_dumper/reg_dumper.h |    2 +
 3 files changed, 83 insertions(+), 7 deletions(-)

New commits:
commit 5c1720ecbc5528c40bb48084dc68ef233e9bb43b
Author: Eric Anholt <eric at anholt.net>
Date:   Mon May 12 16:48:05 2008 -0700

    Add i915 support to intel_idle.

diff --git a/src/i810_reg.h b/src/i810_reg.h
index cc4620a..bc42a4f 100644
--- a/src/i810_reg.h
+++ b/src/i810_reg.h
@@ -353,7 +353,37 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 #define IPEIR                  0x2088
 #define IPEHR                  0x208C
+
 #define INST_DONE                0x2090
+# define IDCT_DONE			(1 << 30)
+# define IQ_DONE			(1 << 29)
+# define PR_DONE			(1 << 28)
+# define VLD_DONE			(1 << 27)
+# define IP_DONE			(1 << 26)
+# define FBC_DONE			(1 << 25)
+# define BINNER_DONE			(1 << 24)
+# define SF_DONE			(1 << 23)
+# define SE_DONE			(1 << 22)
+# define WM_DONE			(1 << 21)
+# define IZ_DONE			(1 << 20)
+# define PERSPECTIVE_INTERP_DONE	(1 << 19)
+# define DISPATCHER_DONE		(1 << 18)
+# define PROJECTION_DONE		(1 << 17)
+# define DEPENDENT_ADDRESS_DONE		(1 << 16)
+# define QUAD_CACHE_DONE		(1 << 15)
+# define TEXTURE_FETCH_DONE		(1 << 14)
+# define TEXTURE_DECOMPRESS_DONE	(1 << 13)
+# define SAMPLER_CACHE_DONE		(1 << 12)
+# define FILTER_DONE			(1 << 11)
+# define BYPASS_FIFO_DONE		(1 << 10)
+# define PS_DONE			(1 << 9)
+# define CC_DONE			(1 << 8)
+# define MAP_FILTER_DONE		(1 << 7)
+# define MAP_L2_IDLE			(1 << 6)
+# define RING_2_ENABLE			(1 << 2)
+# define RING_1_ENABLE			(1 << 1)
+# define RING_0_ENABLE			(1 << 0)
+
 #define SCPD0                    0x209c	/* debug */
 #define INST_PS                  0x20c4
 #define IPEIR_I965                  0x2064 /* i965 */
diff --git a/src/reg_dumper/idle.c b/src/reg_dumper/idle.c
index bc9dbb7..50af9c9 100644
--- a/src/reg_dumper/idle.c
+++ b/src/reg_dumper/idle.c
@@ -42,6 +42,36 @@ struct idle_flags {
     unsigned int count;
 };
 
+struct idle_flags i915_idle_flags[] = {
+    {IDCT_DONE, "IDCT"},
+    {IQ_DONE, "IQ"},
+    {PR_DONE, "PR"},
+    {VLD_DONE, "VLD"},
+    {IP_DONE, "IP"},
+    {FBC_DONE, "FBc"},
+    {BINNER_DONE, "BINNER"},
+    {SF_DONE, "SF"},
+    {SE_DONE, "SE"},
+    {WM_DONE, "WM"},
+    {IZ_DONE, "IZ"},
+    {PERSPECTIVE_INTERP_DONE, "perspective interpolation"},
+    {DISPATCHER_DONE, "dispatcher"},
+    {PROJECTION_DONE, "projection and LOD"},
+    {DEPENDENT_ADDRESS_DONE, "dependent address calc"},
+    {TEXTURE_FETCH_DONE, "texture fetch"},
+    {TEXTURE_DECOMPRESS_DONE, "texture decompress"},
+    {SAMPLER_CACHE_DONE, "sampler cache"},
+    {FILTER_DONE, "filter"},
+    {BYPASS_FIFO_DONE, "bypass FIFO"},
+    {PS_DONE, "PS"},
+    {CC_DONE, "CC"},
+    {MAP_FILTER_DONE, "map filter"},
+    {MAP_L2_IDLE, "map L2"},
+
+    {0, "total"},
+    {0, "other"},
+};
+
 struct idle_flags i965_idle_flags[] = {
     {I965_SF_DONE, "SF"},
     {I965_SE_DONE, "SE"},
@@ -60,12 +90,17 @@ struct idle_flags i965_idle_flags[] = {
 
 /* Fills in the "other" and "total" fields' idle flags */
 static void
-setup_other_flags(struct idle_flags *idle_flags, int idle_flag_count)
+setup_other_flags(I830Ptr pI830,
+		  struct idle_flags *idle_flags, int idle_flag_count)
 {
     uint32_t other_idle_flags, total_idle_flags = 0;
     int i;
 
-    other_idle_flags = ~(I965_RING_0_ENABLE);
+    if (IS_I965G(pI830))
+	other_idle_flags = ~(I965_RING_0_ENABLE);
+    else
+	other_idle_flags = ~(RING_0_ENABLE | RING_1_ENABLE | RING_2_ENABLE);
+
     for (i = 0; i < idle_flag_count - 2; i++) {
 	other_idle_flags &= ~idle_flags[i].instdone_flag;
 	total_idle_flags |= idle_flags[i].instdone_flag;
@@ -127,17 +162,26 @@ int main(int argc, char **argv)
     scrn.scrnIndex = 0;
     scrn.pI830 = &i830;
 
-    /* if (IS_I965) { */
-    idle_flags = i965_idle_flags;
-    idle_flag_count = sizeof(i965_idle_flags) / sizeof(i965_idle_flags[0]);
+    if (IS_I965G(pI830)) {
+	idle_flags = i965_idle_flags;
+	idle_flag_count = ARRAY_SIZE(i965_idle_flags);
+    } else {
+	idle_flags = i915_idle_flags;
+	idle_flag_count = ARRAY_SIZE(i915_idle_flags);
+    }
 
-    setup_other_flags(idle_flags, idle_flag_count);
+    setup_other_flags(pI830, idle_flags, idle_flag_count);
 
     for (;;) {
 	int i, j;
 
 	for (i = 0; i < 100; i++) {
-	    uint32_t instdone = INREG(INST_DONE_I965);
+	    uint32_t instdone;
+
+	    if (IS_I965G(pI830))
+		instdone = INREG(INST_DONE_I965);
+	    else
+		instdone = INREG(INST_DONE);
 
 	    for (j = 0; j < idle_flag_count; j++) {
 		if ((instdone & idle_flags[j].instdone_flag) !=
diff --git a/src/reg_dumper/reg_dumper.h b/src/reg_dumper/reg_dumper.h
index 769adb2..9a723b9 100644
--- a/src/reg_dumper/reg_dumper.h
+++ b/src/reg_dumper/reg_dumper.h
@@ -69,6 +69,8 @@ typedef struct _scrn {
 
 #define I830PTR(pScrn) (pScrn->pI830)
 
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
+
 #define INREG8(reg) (*(volatile uint8_t *)((pI830)->mmio + (reg)))
 #define INREG16(reg) (*(volatile uint16_t *)((pI830)->mmio + (reg)))
 #define INREG(reg) (*(volatile uint32_t *)((pI830)->mmio + (reg)))


More information about the xorg-commit mailing list