[i-g-t,2/4] tools/intel_display_poller: Try to fix pipe<->plane handling on gen2/3
diff mbox

Message ID 1441828686-22201-2-git-send-email-ville.syrjala@linux.intel.com
State New
Headers show

Commit Message

Ville Syrjälä Sept. 9, 2015, 7:58 p.m. UTC
From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Check the pipe assignment for each plane (excluding plane C since the
kernel doesn't use that one) and pick the first one that's assigned to
the target pipe.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tools/intel_display_poller.c | 26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

Patch
diff mbox

diff --git a/tools/intel_display_poller.c b/tools/intel_display_poller.c
index ec3e30e..8b66b53 100644
--- a/tools/intel_display_poller.c
+++ b/tools/intel_display_poller.c
@@ -88,6 +88,11 @@  static void write_reg(uint32_t reg, uint32_t val)
 	OUTREG(vlv_offset + reg, val);
 }
 
+static char pipe_name(int pipe)
+{
+	return pipe + 'A';
+}
+
 static int pipe_to_plane(uint32_t devid, int pipe)
 {
 	if (!IS_GEN2(devid) && !IS_GEN3(devid))
@@ -95,13 +100,21 @@  static int pipe_to_plane(uint32_t devid, int pipe)
 
 	switch (pipe) {
 	case 0:
-		if ((read_reg(DSPACNTR) & DISPPLANE_SEL_PIPE_MASK) == DISPPLANE_SEL_PIPE_B)
+		if ((read_reg(DSPACNTR) & DISPPLANE_SEL_PIPE_MASK) == DISPPLANE_SEL_PIPE_A)
+			return 0;
+		if ((read_reg(DSPBCNTR) & DISPPLANE_SEL_PIPE_MASK) == DISPPLANE_SEL_PIPE_A)
 			return 1;
-		return 0;
+		fprintf(stderr, "no plane assigned to pipe %c, assuming %c\n",
+			pipe_name(pipe), pipe_name(pipe));
+		return pipe;
 	case 1:
-		if ((read_reg(DSPACNTR) & DISPPLANE_SEL_PIPE_MASK) == DISPPLANE_SEL_PIPE_A)
+		if ((read_reg(DSPACNTR) & DISPPLANE_SEL_PIPE_MASK) == DISPPLANE_SEL_PIPE_B)
 			return 0;
-		return 1;
+		if ((read_reg(DSPBCNTR) & DISPPLANE_SEL_PIPE_MASK) == DISPPLANE_SEL_PIPE_B)
+			return 1;
+		fprintf(stderr, "no plane assigned to pipe %c, assuming %c\n",
+			pipe_name(pipe), pipe_name(pipe));
+		return pipe;
 	}
 
 	assert(0);
@@ -886,11 +899,6 @@  static void poll_dsl_field(int pipe, uint32_t *min, uint32_t *max, const int cou
 	}
 }
 
-static char pipe_name(int pipe)
-{
-	return pipe + 'A';
-}
-
 static const char *test_name(enum test test, int pipe, int bit, bool test_pixel_count)
 {
 	static char str[32];