All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH] Idleness DRRS:
       [not found] <1505724732-17529-1-git-send-email-lohith.bs@intel.com>
@ 2017-09-18 19:54 ` Rodrigo Vivi
  2017-09-19 10:46   ` Ramalingam C
  2017-09-19 10:14 ` [PATCH] Idleness DRRS: Ramalingam C
  1 sibling, 1 reply; 59+ messages in thread
From: Rodrigo Vivi @ 2017-09-18 19:54 UTC (permalink / raw)
  To: intel-gfx, daniel.vetter, chris; +Cc: ankit.k.nautiyal, paulo.r.zanoni

On Mon, Sep 18, 2017 at 08:52:12AM +0000,  wrote:
> From: Lohith BS <lohith.bs@intel.com>
> 
> 	By default the DRRS state will be at DRRS_HIGH_RR. When a Display
> 	content is Idle for more than 1Sec Idleness will be declared and
> 	DRRS_LOW_RR will be invoked, changing the refresh rate to the
> 	lower most refresh rate supported by the panel. As soon as there
> 	is a display content change there will be a DRRS state transition
> 	as DRRS_LOW_RR--> DRRS_HIGH_RR, changing the refresh rate to the
> 	highest refresh rate supported by the panel.
> 
> To test this, Idleness DRRS IGT will probe the DRRS state at below
> instances and compare with the expected state.
> 
> 	Instance					Expected State
> 1. Immediately after rendering the still image		DRRS_HIGH_RR
> 2. After a delay of 1.2Sec				DRRS_LOW_RR
> 3. After changing the frame buffer			DRRS_HIGH_RR
> 4. After a delay of 1.2Sec				DRRS_LOW_RR
> 5. After changing the frame buffer			DRRS_HIGH_RR
> 6. After a delay of 1.2Sec				DRRS_LOW_RR
> 
> The test checks the driver DRRS state from the debugfs entry. To check the
> actual refresh-rate, the number of vblanks received per sec.
> The refresh-rate calculated is checked against the expected refresh-rate
> with a tolerance value of 2.
> 
> This patch is a continuation of the earlier work
> https://patchwork.freedesktop.org/patch/45472/ towards igt for idleness
> 
> DRRS. The code is tested on Broxton BXT_T platform.
> 
> v2: Addressed the comments and suggestions from Vlad, Marius.
> The signoff details from the earlier work are also included.
> 
> v3: Modified vblank rate calculation by using reply-sequence, provided by
> drmWaitVBlank, as suggested by Chris Wilson.
> 
> v4: As suggested from Chris Wilson and Daniel Vetter
> 	1) Avoided using pthread for calculating vblank refresh rate,
> 	   instead used drmWaitVBlank reply sequence.
> 	2) Avoided using kernel-specific info like transitional delays,
> 	   instead polling mechanism with timeout is used.
> 	3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
> 	   instead of having a separate test.
> 
> v5: This patch adds DRRS as a new feature in the kms_frontbuffer_tracking IGT.
>     DRRS switch to lower vrefresh rate is tested at slow-draw subtest.
> 
> 	Note:
> 	1) Currently kernel doesn't have support to enable and disable the DRRS
> 	   feature dynamically(as in case of PSR). Hence if the panel supports
> 	   DRRS it will be enabled by default.
> 
> 	This is in continuation of last patch "https://patchwork.freedesktop.org/patch/162726/"
> 
> Signed-off-by: Lohith BS <lohith.bs@intel.com>
> Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
> Signed-off-by: Vandana Kannan <vandana.kannan@intel.com>
> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
> ---
>  tests/kms_frontbuffer_tracking.c | 161 ++++++++++++++++++++++++++++++++++++---
>  1 file changed, 152 insertions(+), 9 deletions(-)
> 
> diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
> index a068c8a..4f44109 100644
> --- a/tests/kms_frontbuffer_tracking.c
> +++ b/tests/kms_frontbuffer_tracking.c
> @@ -34,7 +34,7 @@
>  
>  
>  IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
> -		     "its related features: FBC and PSR");
> +		     "its related features: FBC DRRS and PSR");
>  
>  /*
>   * One of the aspects of this test is that, for every subtest, we try different
> @@ -105,8 +105,9 @@ struct test_mode {
>  		FEATURE_NONE  = 0,
>  		FEATURE_FBC   = 1,
>  		FEATURE_PSR   = 2,
> -		FEATURE_COUNT = 4,
> -		FEATURE_DEFAULT = 4,
> +		FEATURE_DRRS  = 4,
> +		FEATURE_COUNT = 6,
> +		FEATURE_DEFAULT = 6,
>  	} feature;
>  
>  	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
> @@ -180,6 +181,9 @@ struct {
>  	bool can_test;
>  } psr = {
>  	.can_test = false,
> +},
> +drrs  = {
> +	.can_test = false,
>  };
>  
>  
> @@ -822,6 +826,52 @@ static void psr_print_status(void)
>  	igt_info("PSR status:\n%s\n", buf);
>  }
>  
> +static bool is_drrs_high(void)
> +{
> +	char buf[256];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS_HIGH_RR");
> +}
> +
> +static bool is_drrs_low(void)
> +{
> +	char buf[256];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS_LOW_RR");
> +}
> +
> +static bool is_drrs_enabled(void)
> +{
> +	char buf[256];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS Supported: Yes");
> +}
> +
> +static bool is_drrs_inactive(void)
> +{
> +	char buf[256];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "No active crtc found");
> +}
> +
> +static void drrs_print_status(void)
> +{
> +	char buf[256];
> +
> +	if (is_drrs_high())
> +		igt_info("DRRS STATUS : DRRS HIGH\n");
> +
> +	if (is_drrs_low())
> +		igt_info("DRRS_STATUS : DRRS LOW\n");
> +
> +	if (is_drrs_inactive())
> +		igt_info("DRRS_STATUS : DRRS DISABLED\n");
> +}
> +
>  static struct timespec fbc_get_last_action(void)
>  {
>  	struct timespec ret = { 0, 0 };
> @@ -1575,6 +1625,25 @@ static void teardown_psr(void)
>  {
>  }
>  
> +static void setup_drrs(void)
> +{
> +	if (get_connector(prim_mode_params.connector_id)->connector_type !=
> +			DRM_MODE_CONNECTOR_eDP) {
> +		igt_info("Can't test DRRS: no usable eDP screen.\n");
> +		return;
> +	}
> +
> +	if (!is_drrs_enabled()) {
> +		igt_info("Can't test DRRS: not supported in the driver.\n");
> +		return;
> +	}
> +	drrs.can_test = true;
> +}
> +
> +static void teardown_drrs(void)
> +{
> +}
> +
>  static void setup_environment(void)
>  {
>  	setup_drm();
> @@ -1582,7 +1651,7 @@ static void setup_environment(void)
>  
>  	setup_fbc();
>  	setup_psr();
> -
> +	setup_drrs();
>  	setup_crcs();
>  }
>  
> @@ -1592,6 +1661,7 @@ static void teardown_environment(void)
>  
>  	teardown_crcs();
>  	teardown_psr();
> +	teardown_drrs();
>  	teardown_fbc();
>  	teardown_modeset();
>  	teardown_drm();
> @@ -1660,6 +1730,11 @@ static void do_flush(const struct test_mode *t)
>  #define ASSERT_PSR_ENABLED		(1 << 6)
>  #define ASSERT_PSR_DISABLED		(1 << 7)
>  
> +#define DRRS_ASSERT_FLAGS               (7 << 8)
> +#define ASSERT_DRRS_HIGH                (1 << 8)
> +#define ASSERT_DRRS_LOW                 (1 << 9)
> +#define ASSERT_DRRS_INACTIVE            (1 << 10)
> +
>  static int adjust_assertion_flags(const struct test_mode *t, int flags)
>  {
>  	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
> @@ -1667,12 +1742,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
>  			flags |= ASSERT_FBC_ENABLED;
>  		if (!(flags & ASSERT_PSR_DISABLED))
>  			flags |= ASSERT_PSR_ENABLED;
> +		if (!((flags & ASSERT_DRRS_LOW) || (flags & ASSERT_DRRS_INACTIVE))) {
> +			flags |= ASSERT_DRRS_HIGH;
> +		}
>  	}
>  
>  	if ((t->feature & FEATURE_FBC) == 0)
>  		flags &= ~FBC_ASSERT_FLAGS;
>  	if ((t->feature & FEATURE_PSR) == 0)
>  		flags &= ~PSR_ASSERT_FLAGS;
> +	if ((t->feature & FEATURE_DRRS) == 0)
> +		flags &= ~DRRS_ASSERT_FLAGS;
>  
>  	return flags;
>  }
> @@ -1704,6 +1784,23 @@ static void do_status_assertions(int flags)
>  		return;
>  	}
>  
> +	if (flags & ASSERT_DRRS_HIGH) {
> +		if (!is_drrs_high()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS HIGH\n");
> +		}
> +	} else if (flags & ASSERT_DRRS_LOW) {
> +		if (!is_drrs_low()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS LOW\n");
> +		}
> +	} else if (flags & ASSERT_DRRS_INACTIVE) {
> +		if (!is_drrs_inactive()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS DISABLED\n");
> +		}
> +	}
> +
>  	if (flags & ASSERT_FBC_ENABLED) {
>  		igt_require(!fbc_not_enough_stolen());
>  		igt_require(!fbc_stride_not_supported());
> @@ -1850,6 +1947,10 @@ static void check_test_requirements(const struct test_mode *t)
>  			      "Can't test PSR without sink CRCs\n");
>  	}
>  
> +	if (t->feature & FEATURE_DRRS)
> +		igt_require_f(drrs.can_test,
> +				"Can't test DRRS with the current outputs\n");
> +
>  	if (opt.only_pipes != PIPE_COUNT)
>  		igt_require(t->pipes == opt.only_pipes);
>  }
> @@ -1971,7 +2072,7 @@ static void rte_subtest(const struct test_mode *t)
>  
>  	unset_all_crtcs();
>  	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
> -		      DONT_ASSERT_CRC);
> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>  
>  	enable_prim_screen_and_wait(t);
>  	set_cursor_for_test(t, &prim_mode_params);
> @@ -2008,6 +2109,24 @@ static bool op_disables_psr(const struct test_mode *t,
>  	return false;
>  }
>  
> +static bool op_sets_drrs_high(const struct test_mode *t,
> +				enum igt_draw_method method)
> +{
> +	if (method != IGT_DRAW_MMAP_GTT)
> +		return false;
> +	if (t->screen == SCREEN_PRIM)
> +		return true;
> +	/* On FBS_SHARED, even if the target is not the DRRS screen
> +	 * (SCREEN_PRIM), all primary planes share the same frontbuffer, so a
> +	 * write to the second screen primary plane - or offscreen plane - will
> +	 * touch the framebuffer that's also used by the primary screen and making
> +	 * DRRS state as high
> +	 */
> +	if (t->fbs == FBS_SHARED && t->plane == PLANE_PRI)
> +		return true;
> +	return false;
> +}
> +
>  /*
>   * draw - draw a set of rectangles on the screen using the provided method
>   *
> @@ -2063,6 +2182,9 @@ static void draw_subtest(const struct test_mode *t)
>  	if (op_disables_psr(t, t->method))
>  		assertions |= ASSERT_PSR_DISABLED;
>  
> +	if (op_sets_drrs_high(t, t->method))
> +		assertions |= ASSERT_DRRS_HIGH;
> +
>  	prepare_subtest(t, pattern);
>  	target = pick_target(t, params);
>  
> @@ -2152,6 +2274,10 @@ static void multidraw_subtest(const struct test_mode *t)
>  				    !wc_used)
>  					assertions |= ASSERT_PSR_DISABLED;
>  
> +				if (op_sets_drrs_high(t, used_method) &&
> +					!wc_used)
> +					assertions |= ASSERT_DRRS_HIGH;
> +
>  				do_assertions(assertions);
>  			}
>  
> @@ -2206,6 +2332,7 @@ static void badformat_subtest(const struct test_mode *t)
>  {
>  	bool fbc_valid = format_is_valid(FEATURE_FBC, t->format);
>  	bool psr_valid = format_is_valid(FEATURE_PSR, t->format);
> +	bool drrs_valid = format_is_valid(FEATURE_DRRS, t->format);
>  	int assertions = ASSERT_NO_ACTION_CHANGE;
>  
>  	prepare_subtest_data(t, NULL);
> @@ -2219,6 +2346,9 @@ static void badformat_subtest(const struct test_mode *t)
>  		assertions |= ASSERT_FBC_DISABLED;
>  	if (!psr_valid)
>  		assertions |= ASSERT_PSR_DISABLED;
> +	if (!drrs_valid)
> +		assertions |= ASSERT_DRRS_HIGH;
> +
>  	do_assertions(assertions);
>  }
>  
> @@ -2277,7 +2407,15 @@ static void slow_draw_subtest(const struct test_mode *t)
>  		sleep(2);
>  
>  		update_wanted_crc(t, &pattern->crcs[t->format][r]);
> -		do_assertions(0);
> +		if (t->feature & FEATURE_PSR) {
> +			do_assertions(0);
> +		}
> +
> +		if (t->feature & FEATURE_DRRS) {
> +			sleep(1);
> +			do_assertions(ASSERT_DRRS_LOW);
> +		}
> +
>  	}
>  }
>  
> @@ -2464,6 +2602,7 @@ static void fliptrack_subtest(const struct test_mode *t, enum flip_type type)
>  		update_wanted_crc(t, &pattern->crcs[t->format][r]);
>  
>  		do_assertions(ASSERT_PSR_DISABLED);
> +		do_assertions(ASSERT_DRRS_HIGH);
>  	}
>  
>  	igt_remove_fb(drm.fd, &fb2);
> @@ -2892,7 +3031,7 @@ static void suspend_subtest(const struct test_mode *t)
>  	sleep(5);
>  	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>  	sleep(5);
> -	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
> +	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | ASSERT_DRRS_HIGH |
>  		      DONT_ASSERT_CRC);
>  
>  	set_mode_for_params(params);
> @@ -2966,7 +3105,7 @@ static void farfromfence_subtest(const struct test_mode *t)
>  		update_wanted_crc(t, &pattern->crcs[t->format][r]);
>  
>  		/* GTT draws disable PSR. */
> -		do_assertions(assertions | ASSERT_PSR_DISABLED);
> +		do_assertions(assertions | ASSERT_PSR_DISABLED | ASSERT_DRRS_HIGH);
>  	}
>  
>  	igt_remove_fb(drm.fd, &tall_fb);
> @@ -3375,6 +3514,10 @@ static const char *feature_str(int feature)
>  		return "psr";
>  	case FEATURE_FBC | FEATURE_PSR:
>  		return "fbcpsr";
> +	case FEATURE_DRRS:
> +		return "drrs";
> +	case FEATURE_FBC | FEATURE_DRRS:
> +		return "fbcdrrs";
>  	default:
>  		igt_assert(false);
>  	}
> @@ -3639,7 +3782,7 @@ int main(int argc, char *argv[])
>  				tilingchange_subtest(&t);
>  		}
>  
> -		if (t.feature & FEATURE_PSR)
> +		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
>  			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
>  				slow_draw_subtest(&t);

I just merged the patch that blocks DRRS if PSR is enabled.

I'm not sure if we now need some changes on this behavirou here forcing PSR flag to be disabled
when testing DRRS.

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

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

* Re: [PATCH] Idleness DRRS:
       [not found] <1505724732-17529-1-git-send-email-lohith.bs@intel.com>
  2017-09-18 19:54 ` [PATCH] Idleness DRRS: Rodrigo Vivi
@ 2017-09-19 10:14 ` Ramalingam C
  1 sibling, 0 replies; 59+ messages in thread
From: Ramalingam C @ 2017-09-19 10:14 UTC (permalink / raw)
  To: Lohith BS, intel-gfx, daniel.vetter, chris, rodrigo.vivi
  Cc: ankit.k.nautiyal, paulo.r.zanoni



On Monday 18 September 2017 02:22 PM, Lohith BS wrote:
> From: Lohith BS <lohith.bs@intel.com>
>
> 	By default the DRRS state will be at DRRS_HIGH_RR. When a Display
> 	content is Idle for more than 1Sec Idleness will be declared and
> 	DRRS_LOW_RR will be invoked, changing the refresh rate to the
> 	lower most refresh rate supported by the panel. As soon as there
> 	is a display content change there will be a DRRS state transition
> 	as DRRS_LOW_RR--> DRRS_HIGH_RR, changing the refresh rate to the
> 	highest refresh rate supported by the panel.
>
> To test this, Idleness DRRS IGT will probe the DRRS state at below
> instances and compare with the expected state.
>
> 	Instance					Expected State
> 1. Immediately after rendering the still image		DRRS_HIGH_RR
> 2. After a delay of 1.2Sec				DRRS_LOW_RR
> 3. After changing the frame buffer			DRRS_HIGH_RR
> 4. After a delay of 1.2Sec				DRRS_LOW_RR
> 5. After changing the frame buffer			DRRS_HIGH_RR
> 6. After a delay of 1.2Sec				DRRS_LOW_RR
>
> The test checks the driver DRRS state from the debugfs entry. To check the
> actual refresh-rate, the number of vblanks received per sec.
> The refresh-rate calculated is checked against the expected refresh-rate
> with a tolerance value of 2.
>
> This patch is a continuation of the earlier work
> https://patchwork.freedesktop.org/patch/45472/ towards igt for idleness
>
> DRRS. The code is tested on Broxton BXT_T platform.
>
> v2: Addressed the comments and suggestions from Vlad, Marius.
> The signoff details from the earlier work are also included.
>
> v3: Modified vblank rate calculation by using reply-sequence, provided by
> drmWaitVBlank, as suggested by Chris Wilson.
>
> v4: As suggested from Chris Wilson and Daniel Vetter
> 	1) Avoided using pthread for calculating vblank refresh rate,
> 	   instead used drmWaitVBlank reply sequence.
> 	2) Avoided using kernel-specific info like transitional delays,
> 	   instead polling mechanism with timeout is used.
> 	3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
> 	   instead of having a separate test.
>
> v5: This patch adds DRRS as a new feature in the kms_frontbuffer_tracking IGT.
>      DRRS switch to lower vrefresh rate is tested at slow-draw subtest.
>
> 	Note:
> 	1) Currently kernel doesn't have support to enable and disable the DRRS
> 	   feature dynamically(as in case of PSR). Hence if the panel supports
> 	   DRRS it will be enabled by default.
>
> 	This is in continuation of last patch "https://patchwork.freedesktop.org/patch/162726/"
>
> Signed-off-by: Lohith BS <lohith.bs@intel.com>
> Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
> Signed-off-by: Vandana Kannan <vandana.kannan@intel.com>
> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
> ---
>   tests/kms_frontbuffer_tracking.c | 161 ++++++++++++++++++++++++++++++++++++---
>   1 file changed, 152 insertions(+), 9 deletions(-)
>
> diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
> index a068c8a..4f44109 100644
> --- a/tests/kms_frontbuffer_tracking.c
> +++ b/tests/kms_frontbuffer_tracking.c
> @@ -34,7 +34,7 @@
>   
>   
>   IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
> -		     "its related features: FBC and PSR");
> +		     "its related features: FBC DRRS and PSR");
As DRRS and PSR cant be tested together it will be more meaningful to 
write as
                                     "its related features: FBC and 
PSR/DRRS");
>   
>   /*
>    * One of the aspects of this test is that, for every subtest, we try different
> @@ -105,8 +105,9 @@ struct test_mode {
>   		FEATURE_NONE  = 0,
>   		FEATURE_FBC   = 1,
>   		FEATURE_PSR   = 2,
> -		FEATURE_COUNT = 4,
> -		FEATURE_DEFAULT = 4,
> +		FEATURE_DRRS  = 4,
> +		FEATURE_COUNT = 6,
> +		FEATURE_DEFAULT = 6,
>   	} feature;
>   
>   	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
> @@ -180,6 +181,9 @@ struct {
>   	bool can_test;
>   } psr = {
>   	.can_test = false,
> +},
> +drrs  = {
> +	.can_test = false,
>   };
>   
>   
> @@ -822,6 +826,52 @@ static void psr_print_status(void)
>   	igt_info("PSR status:\n%s\n", buf);
>   }
>   
> +static bool is_drrs_high(void)
> +{
> +	char buf[256];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS_HIGH_RR");
> +}
> +
> +static bool is_drrs_low(void)
> +{
> +	char buf[256];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS_LOW_RR");
> +}
> +
> +static bool is_drrs_enabled(void)
> +{
> +	char buf[256];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS Supported: Yes");
> +}
> +
> +static bool is_drrs_inactive(void)
> +{
> +	char buf[256];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "No active crtc found");
> +}
> +
> +static void drrs_print_status(void)
> +{
> +	char buf[256];
> +
> +	if (is_drrs_high())
> +		igt_info("DRRS STATUS : DRRS HIGH\n");
> +
> +	if (is_drrs_low())
> +		igt_info("DRRS_STATUS : DRRS LOW\n");
> +
> +	if (is_drrs_inactive())
> +		igt_info("DRRS_STATUS : DRRS DISABLED\n");
> +}
> +
>   static struct timespec fbc_get_last_action(void)
>   {
>   	struct timespec ret = { 0, 0 };
> @@ -1575,6 +1625,25 @@ static void teardown_psr(void)
>   {
>   }
>   
> +static void setup_drrs(void)
> +{
> +	if (get_connector(prim_mode_params.connector_id)->connector_type !=
> +			DRM_MODE_CONNECTOR_eDP) {
> +		igt_info("Can't test DRRS: no usable eDP screen.\n");
> +		return;
> +	}
> +
> +	if (!is_drrs_enabled()) {
> +		igt_info("Can't test DRRS: not supported in the driver.\n");
> +		return;
> +	}
> +	drrs.can_test = true;
As PSR is capable on a sink and src, DRRS wont be used. So drrs.can_test 
is false if psr.can_test  is true.
> +}
> +
> +static void teardown_drrs(void)
> +{
> +}
> +
We can add this if we have means of disabling the DRRS in run time. We 
should remove this.
>   static void setup_environment(void)
>   {
>   	setup_drm();
> @@ -1582,7 +1651,7 @@ static void setup_environment(void)
>   
>   	setup_fbc();
>   	setup_psr();
> -
> +	setup_drrs();
>   	setup_crcs();
>   }
>   
> @@ -1592,6 +1661,7 @@ static void teardown_environment(void)
>   
>   	teardown_crcs();
>   	teardown_psr();
> +	teardown_drrs();
I dont think we need this function call.

--Ram
>   	teardown_fbc();
>   	teardown_modeset();
>   	teardown_drm();
> @@ -1660,6 +1730,11 @@ static void do_flush(const struct test_mode *t)
>   #define ASSERT_PSR_ENABLED		(1 << 6)
>   #define ASSERT_PSR_DISABLED		(1 << 7)
>   
> +#define DRRS_ASSERT_FLAGS               (7 << 8)
> +#define ASSERT_DRRS_HIGH                (1 << 8)
> +#define ASSERT_DRRS_LOW                 (1 << 9)
> +#define ASSERT_DRRS_INACTIVE            (1 << 10)
> +
>   static int adjust_assertion_flags(const struct test_mode *t, int flags)
>   {
>   	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
> @@ -1667,12 +1742,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
>   			flags |= ASSERT_FBC_ENABLED;
>   		if (!(flags & ASSERT_PSR_DISABLED))
>   			flags |= ASSERT_PSR_ENABLED;
> +		if (!((flags & ASSERT_DRRS_LOW) || (flags & ASSERT_DRRS_INACTIVE))) {
> +			flags |= ASSERT_DRRS_HIGH;
> +		}
>   	}
>   
>   	if ((t->feature & FEATURE_FBC) == 0)
>   		flags &= ~FBC_ASSERT_FLAGS;
>   	if ((t->feature & FEATURE_PSR) == 0)
>   		flags &= ~PSR_ASSERT_FLAGS;
> +	if ((t->feature & FEATURE_DRRS) == 0)
> +		flags &= ~DRRS_ASSERT_FLAGS;
>   
>   	return flags;
>   }
> @@ -1704,6 +1784,23 @@ static void do_status_assertions(int flags)
>   		return;
>   	}
>   
> +	if (flags & ASSERT_DRRS_HIGH) {
> +		if (!is_drrs_high()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS HIGH\n");
> +		}
> +	} else if (flags & ASSERT_DRRS_LOW) {
> +		if (!is_drrs_low()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS LOW\n");
> +		}
> +	} else if (flags & ASSERT_DRRS_INACTIVE) {
> +		if (!is_drrs_inactive()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS DISABLED\n");
> +		}
> +	}
> +
>   	if (flags & ASSERT_FBC_ENABLED) {
>   		igt_require(!fbc_not_enough_stolen());
>   		igt_require(!fbc_stride_not_supported());
> @@ -1850,6 +1947,10 @@ static void check_test_requirements(const struct test_mode *t)
>   			      "Can't test PSR without sink CRCs\n");
>   	}
>   
> +	if (t->feature & FEATURE_DRRS)
> +		igt_require_f(drrs.can_test,
> +				"Can't test DRRS with the current outputs\n");
> +
>   	if (opt.only_pipes != PIPE_COUNT)
>   		igt_require(t->pipes == opt.only_pipes);
>   }
> @@ -1971,7 +2072,7 @@ static void rte_subtest(const struct test_mode *t)
>   
>   	unset_all_crtcs();
>   	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
> -		      DONT_ASSERT_CRC);
> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>   
>   	enable_prim_screen_and_wait(t);
>   	set_cursor_for_test(t, &prim_mode_params);
> @@ -2008,6 +2109,24 @@ static bool op_disables_psr(const struct test_mode *t,
>   	return false;
>   }
>   
> +static bool op_sets_drrs_high(const struct test_mode *t,
> +				enum igt_draw_method method)
> +{
> +	if (method != IGT_DRAW_MMAP_GTT)
> +		return false;
> +	if (t->screen == SCREEN_PRIM)
> +		return true;
> +	/* On FBS_SHARED, even if the target is not the DRRS screen
> +	 * (SCREEN_PRIM), all primary planes share the same frontbuffer, so a
> +	 * write to the second screen primary plane - or offscreen plane - will
> +	 * touch the framebuffer that's also used by the primary screen and making
> +	 * DRRS state as high
> +	 */
> +	if (t->fbs == FBS_SHARED && t->plane == PLANE_PRI)
> +		return true;
> +	return false;
> +}
> +
>   /*
>    * draw - draw a set of rectangles on the screen using the provided method
>    *
> @@ -2063,6 +2182,9 @@ static void draw_subtest(const struct test_mode *t)
>   	if (op_disables_psr(t, t->method))
>   		assertions |= ASSERT_PSR_DISABLED;
>   
> +	if (op_sets_drrs_high(t, t->method))
> +		assertions |= ASSERT_DRRS_HIGH;
> +
>   	prepare_subtest(t, pattern);
>   	target = pick_target(t, params);
>   
> @@ -2152,6 +2274,10 @@ static void multidraw_subtest(const struct test_mode *t)
>   				    !wc_used)
>   					assertions |= ASSERT_PSR_DISABLED;
>   
> +				if (op_sets_drrs_high(t, used_method) &&
> +					!wc_used)
> +					assertions |= ASSERT_DRRS_HIGH;
> +
>   				do_assertions(assertions);
>   			}
>   
> @@ -2206,6 +2332,7 @@ static void badformat_subtest(const struct test_mode *t)
>   {
>   	bool fbc_valid = format_is_valid(FEATURE_FBC, t->format);
>   	bool psr_valid = format_is_valid(FEATURE_PSR, t->format);
> +	bool drrs_valid = format_is_valid(FEATURE_DRRS, t->format);
>   	int assertions = ASSERT_NO_ACTION_CHANGE;
>   
>   	prepare_subtest_data(t, NULL);
> @@ -2219,6 +2346,9 @@ static void badformat_subtest(const struct test_mode *t)
>   		assertions |= ASSERT_FBC_DISABLED;
>   	if (!psr_valid)
>   		assertions |= ASSERT_PSR_DISABLED;
> +	if (!drrs_valid)
> +		assertions |= ASSERT_DRRS_HIGH;
> +
>   	do_assertions(assertions);
>   }
>   
> @@ -2277,7 +2407,15 @@ static void slow_draw_subtest(const struct test_mode *t)
>   		sleep(2);
>   
>   		update_wanted_crc(t, &pattern->crcs[t->format][r]);
> -		do_assertions(0);
> +		if (t->feature & FEATURE_PSR) {
> +			do_assertions(0);
> +		}
> +
> +		if (t->feature & FEATURE_DRRS) {
> +			sleep(1);
> +			do_assertions(ASSERT_DRRS_LOW);
> +		}
> +
>   	}
>   }
>   
> @@ -2464,6 +2602,7 @@ static void fliptrack_subtest(const struct test_mode *t, enum flip_type type)
>   		update_wanted_crc(t, &pattern->crcs[t->format][r]);
>   
>   		do_assertions(ASSERT_PSR_DISABLED);
> +		do_assertions(ASSERT_DRRS_HIGH);
>   	}
>   
>   	igt_remove_fb(drm.fd, &fb2);
> @@ -2892,7 +3031,7 @@ static void suspend_subtest(const struct test_mode *t)
>   	sleep(5);
>   	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>   	sleep(5);
> -	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
> +	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | ASSERT_DRRS_HIGH |
>   		      DONT_ASSERT_CRC);
>   
>   	set_mode_for_params(params);
> @@ -2966,7 +3105,7 @@ static void farfromfence_subtest(const struct test_mode *t)
>   		update_wanted_crc(t, &pattern->crcs[t->format][r]);
>   
>   		/* GTT draws disable PSR. */
> -		do_assertions(assertions | ASSERT_PSR_DISABLED);
> +		do_assertions(assertions | ASSERT_PSR_DISABLED | ASSERT_DRRS_HIGH);
>   	}
>   
>   	igt_remove_fb(drm.fd, &tall_fb);
> @@ -3375,6 +3514,10 @@ static const char *feature_str(int feature)
>   		return "psr";
>   	case FEATURE_FBC | FEATURE_PSR:
>   		return "fbcpsr";
> +	case FEATURE_DRRS:
> +		return "drrs";
> +	case FEATURE_FBC | FEATURE_DRRS:
> +		return "fbcdrrs";
>   	default:
>   		igt_assert(false);
>   	}
> @@ -3639,7 +3782,7 @@ int main(int argc, char *argv[])
>   				tilingchange_subtest(&t);
>   		}
>   
> -		if (t.feature & FEATURE_PSR)
> +		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
>   			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
>   				slow_draw_subtest(&t);
>   

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

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

* Re: [PATCH] Idleness DRRS:
  2017-09-18 19:54 ` [PATCH] Idleness DRRS: Rodrigo Vivi
@ 2017-09-19 10:46   ` Ramalingam C
  2017-09-19 18:12     ` Rodrigo Vivi
  0 siblings, 1 reply; 59+ messages in thread
From: Ramalingam C @ 2017-09-19 10:46 UTC (permalink / raw)
  To: Rodrigo Vivi, intel-gfx, daniel.vetter, chris
  Cc: ankit.k.nautiyal, paulo.r.zanoni



On Tuesday 19 September 2017 01:24 AM, Rodrigo Vivi wrote:
> On Mon, Sep 18, 2017 at 08:52:12AM +0000,  wrote:
>> From: Lohith BS <lohith.bs@intel.com>
>>
>> 	By default the DRRS state will be at DRRS_HIGH_RR. When a Display
>> 	content is Idle for more than 1Sec Idleness will be declared and
>> 	DRRS_LOW_RR will be invoked, changing the refresh rate to the
>> 	lower most refresh rate supported by the panel. As soon as there
>> 	is a display content change there will be a DRRS state transition
>> 	as DRRS_LOW_RR--> DRRS_HIGH_RR, changing the refresh rate to the
>> 	highest refresh rate supported by the panel.
>>
>> To test this, Idleness DRRS IGT will probe the DRRS state at below
>> instances and compare with the expected state.
>>
>> 	Instance					Expected State
>> 1. Immediately after rendering the still image		DRRS_HIGH_RR
>> 2. After a delay of 1.2Sec				DRRS_LOW_RR
>> 3. After changing the frame buffer			DRRS_HIGH_RR
>> 4. After a delay of 1.2Sec				DRRS_LOW_RR
>> 5. After changing the frame buffer			DRRS_HIGH_RR
>> 6. After a delay of 1.2Sec				DRRS_LOW_RR
>>
>> The test checks the driver DRRS state from the debugfs entry. To check the
>> actual refresh-rate, the number of vblanks received per sec.
>> The refresh-rate calculated is checked against the expected refresh-rate
>> with a tolerance value of 2.
>>
>> This patch is a continuation of the earlier work
>> https://patchwork.freedesktop.org/patch/45472/ towards igt for idleness
>>
>> DRRS. The code is tested on Broxton BXT_T platform.
>>
>> v2: Addressed the comments and suggestions from Vlad, Marius.
>> The signoff details from the earlier work are also included.
>>
>> v3: Modified vblank rate calculation by using reply-sequence, provided by
>> drmWaitVBlank, as suggested by Chris Wilson.
>>
>> v4: As suggested from Chris Wilson and Daniel Vetter
>> 	1) Avoided using pthread for calculating vblank refresh rate,
>> 	   instead used drmWaitVBlank reply sequence.
>> 	2) Avoided using kernel-specific info like transitional delays,
>> 	   instead polling mechanism with timeout is used.
>> 	3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
>> 	   instead of having a separate test.
>>
>> v5: This patch adds DRRS as a new feature in the kms_frontbuffer_tracking IGT.
>>      DRRS switch to lower vrefresh rate is tested at slow-draw subtest.
>>
>> 	Note:
>> 	1) Currently kernel doesn't have support to enable and disable the DRRS
>> 	   feature dynamically(as in case of PSR). Hence if the panel supports
>> 	   DRRS it will be enabled by default.
>>
>> 	This is in continuation of last patch "https://patchwork.freedesktop.org/patch/162726/"
>>
>> Signed-off-by: Lohith BS <lohith.bs@intel.com>
>> Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
>> Signed-off-by: Vandana Kannan <vandana.kannan@intel.com>
>> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
>> ---
>>   tests/kms_frontbuffer_tracking.c | 161 ++++++++++++++++++++++++++++++++++++---
>>   1 file changed, 152 insertions(+), 9 deletions(-)
>>
>> diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
>> index a068c8a..4f44109 100644
>> --- a/tests/kms_frontbuffer_tracking.c
>> +++ b/tests/kms_frontbuffer_tracking.c
>> @@ -34,7 +34,7 @@
>>   
>>   
>>   IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
>> -		     "its related features: FBC and PSR");
>> +		     "its related features: FBC DRRS and PSR");
>>   
>>   /*
>>    * One of the aspects of this test is that, for every subtest, we try different
>> @@ -105,8 +105,9 @@ struct test_mode {
>>   		FEATURE_NONE  = 0,
>>   		FEATURE_FBC   = 1,
>>   		FEATURE_PSR   = 2,
>> -		FEATURE_COUNT = 4,
>> -		FEATURE_DEFAULT = 4,
>> +		FEATURE_DRRS  = 4,
>> +		FEATURE_COUNT = 6,
>> +		FEATURE_DEFAULT = 6,
>>   	} feature;
>>   
>>   	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
>> @@ -180,6 +181,9 @@ struct {
>>   	bool can_test;
>>   } psr = {
>>   	.can_test = false,
>> +},
>> +drrs  = {
>> +	.can_test = false,
>>   };
>>   
>>   
>> @@ -822,6 +826,52 @@ static void psr_print_status(void)
>>   	igt_info("PSR status:\n%s\n", buf);
>>   }
>>   
>> +static bool is_drrs_high(void)
>> +{
>> +	char buf[256];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +	return strstr(buf, "DRRS_HIGH_RR");
>> +}
>> +
>> +static bool is_drrs_low(void)
>> +{
>> +	char buf[256];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +	return strstr(buf, "DRRS_LOW_RR");
>> +}
>> +
>> +static bool is_drrs_enabled(void)
>> +{
>> +	char buf[256];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +	return strstr(buf, "DRRS Supported: Yes");
>> +}
>> +
>> +static bool is_drrs_inactive(void)
>> +{
>> +	char buf[256];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +	return strstr(buf, "No active crtc found");
>> +}
>> +
>> +static void drrs_print_status(void)
>> +{
>> +	char buf[256];
>> +
>> +	if (is_drrs_high())
>> +		igt_info("DRRS STATUS : DRRS HIGH\n");
>> +
>> +	if (is_drrs_low())
>> +		igt_info("DRRS_STATUS : DRRS LOW\n");
>> +
>> +	if (is_drrs_inactive())
>> +		igt_info("DRRS_STATUS : DRRS DISABLED\n");
>> +}
>> +
>>   static struct timespec fbc_get_last_action(void)
>>   {
>>   	struct timespec ret = { 0, 0 };
>> @@ -1575,6 +1625,25 @@ static void teardown_psr(void)
>>   {
>>   }
>>   
>> +static void setup_drrs(void)
>> +{
>> +	if (get_connector(prim_mode_params.connector_id)->connector_type !=
>> +			DRM_MODE_CONNECTOR_eDP) {
>> +		igt_info("Can't test DRRS: no usable eDP screen.\n");
>> +		return;
>> +	}
>> +
>> +	if (!is_drrs_enabled()) {
>> +		igt_info("Can't test DRRS: not supported in the driver.\n");
>> +		return;
>> +	}
>> +	drrs.can_test = true;
>> +}
>> +
>> +static void teardown_drrs(void)
>> +{
>> +}
>> +
>>   static void setup_environment(void)
>>   {
>>   	setup_drm();
>> @@ -1582,7 +1651,7 @@ static void setup_environment(void)
>>   
>>   	setup_fbc();
>>   	setup_psr();
>> -
>> +	setup_drrs();
>>   	setup_crcs();
>>   }
>>   
>> @@ -1592,6 +1661,7 @@ static void teardown_environment(void)
>>   
>>   	teardown_crcs();
>>   	teardown_psr();
>> +	teardown_drrs();
>>   	teardown_fbc();
>>   	teardown_modeset();
>>   	teardown_drm();
>> @@ -1660,6 +1730,11 @@ static void do_flush(const struct test_mode *t)
>>   #define ASSERT_PSR_ENABLED		(1 << 6)
>>   #define ASSERT_PSR_DISABLED		(1 << 7)
>>   
>> +#define DRRS_ASSERT_FLAGS               (7 << 8)
>> +#define ASSERT_DRRS_HIGH                (1 << 8)
>> +#define ASSERT_DRRS_LOW                 (1 << 9)
>> +#define ASSERT_DRRS_INACTIVE            (1 << 10)
>> +
>>   static int adjust_assertion_flags(const struct test_mode *t, int flags)
>>   {
>>   	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
>> @@ -1667,12 +1742,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
>>   			flags |= ASSERT_FBC_ENABLED;
>>   		if (!(flags & ASSERT_PSR_DISABLED))
>>   			flags |= ASSERT_PSR_ENABLED;
>> +		if (!((flags & ASSERT_DRRS_LOW) || (flags & ASSERT_DRRS_INACTIVE))) {
>> +			flags |= ASSERT_DRRS_HIGH;
>> +		}
>>   	}
>>   
>>   	if ((t->feature & FEATURE_FBC) == 0)
>>   		flags &= ~FBC_ASSERT_FLAGS;
>>   	if ((t->feature & FEATURE_PSR) == 0)
>>   		flags &= ~PSR_ASSERT_FLAGS;
>> +	if ((t->feature & FEATURE_DRRS) == 0)
>> +		flags &= ~DRRS_ASSERT_FLAGS;
>>   
>>   	return flags;
>>   }
>> @@ -1704,6 +1784,23 @@ static void do_status_assertions(int flags)
>>   		return;
>>   	}
>>   
>> +	if (flags & ASSERT_DRRS_HIGH) {
>> +		if (!is_drrs_high()) {
>> +			drrs_print_status();
>> +			igt_assert_f(false, "DRRS HIGH\n");
>> +		}
>> +	} else if (flags & ASSERT_DRRS_LOW) {
>> +		if (!is_drrs_low()) {
>> +			drrs_print_status();
>> +			igt_assert_f(false, "DRRS LOW\n");
>> +		}
>> +	} else if (flags & ASSERT_DRRS_INACTIVE) {
>> +		if (!is_drrs_inactive()) {
>> +			drrs_print_status();
>> +			igt_assert_f(false, "DRRS DISABLED\n");
>> +		}
>> +	}
>> +
>>   	if (flags & ASSERT_FBC_ENABLED) {
>>   		igt_require(!fbc_not_enough_stolen());
>>   		igt_require(!fbc_stride_not_supported());
>> @@ -1850,6 +1947,10 @@ static void check_test_requirements(const struct test_mode *t)
>>   			      "Can't test PSR without sink CRCs\n");
>>   	}
>>   
>> +	if (t->feature & FEATURE_DRRS)
>> +		igt_require_f(drrs.can_test,
>> +				"Can't test DRRS with the current outputs\n");
>> +
>>   	if (opt.only_pipes != PIPE_COUNT)
>>   		igt_require(t->pipes == opt.only_pipes);
>>   }
>> @@ -1971,7 +2072,7 @@ static void rte_subtest(const struct test_mode *t)
>>   
>>   	unset_all_crtcs();
>>   	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
>> -		      DONT_ASSERT_CRC);
>> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>>   
>>   	enable_prim_screen_and_wait(t);
>>   	set_cursor_for_test(t, &prim_mode_params);
>> @@ -2008,6 +2109,24 @@ static bool op_disables_psr(const struct test_mode *t,
>>   	return false;
>>   }
>>   
>> +static bool op_sets_drrs_high(const struct test_mode *t,
>> +				enum igt_draw_method method)
>> +{
>> +	if (method != IGT_DRAW_MMAP_GTT)
>> +		return false;
>> +	if (t->screen == SCREEN_PRIM)
>> +		return true;
>> +	/* On FBS_SHARED, even if the target is not the DRRS screen
>> +	 * (SCREEN_PRIM), all primary planes share the same frontbuffer, so a
>> +	 * write to the second screen primary plane - or offscreen plane - will
>> +	 * touch the framebuffer that's also used by the primary screen and making
>> +	 * DRRS state as high
>> +	 */
>> +	if (t->fbs == FBS_SHARED && t->plane == PLANE_PRI)
>> +		return true;
>> +	return false;
>> +}
>> +
>>   /*
>>    * draw - draw a set of rectangles on the screen using the provided method
>>    *
>> @@ -2063,6 +2182,9 @@ static void draw_subtest(const struct test_mode *t)
>>   	if (op_disables_psr(t, t->method))
>>   		assertions |= ASSERT_PSR_DISABLED;
>>   
>> +	if (op_sets_drrs_high(t, t->method))
>> +		assertions |= ASSERT_DRRS_HIGH;
>> +
>>   	prepare_subtest(t, pattern);
>>   	target = pick_target(t, params);
>>   
>> @@ -2152,6 +2274,10 @@ static void multidraw_subtest(const struct test_mode *t)
>>   				    !wc_used)
>>   					assertions |= ASSERT_PSR_DISABLED;
>>   
>> +				if (op_sets_drrs_high(t, used_method) &&
>> +					!wc_used)
>> +					assertions |= ASSERT_DRRS_HIGH;
>> +
>>   				do_assertions(assertions);
>>   			}
>>   
>> @@ -2206,6 +2332,7 @@ static void badformat_subtest(const struct test_mode *t)
>>   {
>>   	bool fbc_valid = format_is_valid(FEATURE_FBC, t->format);
>>   	bool psr_valid = format_is_valid(FEATURE_PSR, t->format);
>> +	bool drrs_valid = format_is_valid(FEATURE_DRRS, t->format);
>>   	int assertions = ASSERT_NO_ACTION_CHANGE;
>>   
>>   	prepare_subtest_data(t, NULL);
>> @@ -2219,6 +2346,9 @@ static void badformat_subtest(const struct test_mode *t)
>>   		assertions |= ASSERT_FBC_DISABLED;
>>   	if (!psr_valid)
>>   		assertions |= ASSERT_PSR_DISABLED;
>> +	if (!drrs_valid)
>> +		assertions |= ASSERT_DRRS_HIGH;
>> +
>>   	do_assertions(assertions);
>>   }
>>   
>> @@ -2277,7 +2407,15 @@ static void slow_draw_subtest(const struct test_mode *t)
>>   		sleep(2);
>>   
>>   		update_wanted_crc(t, &pattern->crcs[t->format][r]);
>> -		do_assertions(0);
>> +		if (t->feature & FEATURE_PSR) {
>> +			do_assertions(0);
>> +		}
>> +
>> +		if (t->feature & FEATURE_DRRS) {
>> +			sleep(1);
>> +			do_assertions(ASSERT_DRRS_LOW);
>> +		}
>> +
>>   	}
>>   }
>>   
>> @@ -2464,6 +2602,7 @@ static void fliptrack_subtest(const struct test_mode *t, enum flip_type type)
>>   		update_wanted_crc(t, &pattern->crcs[t->format][r]);
>>   
>>   		do_assertions(ASSERT_PSR_DISABLED);
>> +		do_assertions(ASSERT_DRRS_HIGH);
>>   	}
>>   
>>   	igt_remove_fb(drm.fd, &fb2);
>> @@ -2892,7 +3031,7 @@ static void suspend_subtest(const struct test_mode *t)
>>   	sleep(5);
>>   	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>>   	sleep(5);
>> -	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
>> +	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | ASSERT_DRRS_HIGH |
>>   		      DONT_ASSERT_CRC);
>>   
>>   	set_mode_for_params(params);
>> @@ -2966,7 +3105,7 @@ static void farfromfence_subtest(const struct test_mode *t)
>>   		update_wanted_crc(t, &pattern->crcs[t->format][r]);
>>   
>>   		/* GTT draws disable PSR. */
>> -		do_assertions(assertions | ASSERT_PSR_DISABLED);
>> +		do_assertions(assertions | ASSERT_PSR_DISABLED | ASSERT_DRRS_HIGH);
>>   	}
>>   
>>   	igt_remove_fb(drm.fd, &tall_fb);
>> @@ -3375,6 +3514,10 @@ static const char *feature_str(int feature)
>>   		return "psr";
>>   	case FEATURE_FBC | FEATURE_PSR:
>>   		return "fbcpsr";
>> +	case FEATURE_DRRS:
>> +		return "drrs";
>> +	case FEATURE_FBC | FEATURE_DRRS:
>> +		return "fbcdrrs";
>>   	default:
>>   		igt_assert(false);
>>   	}
>> @@ -3639,7 +3782,7 @@ int main(int argc, char *argv[])
>>   				tilingchange_subtest(&t);
>>   		}
>>   
>> -		if (t.feature & FEATURE_PSR)
>> +		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
>>   			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
>>   				slow_draw_subtest(&t);
> I just merged the patch that blocks DRRS if PSR is enabled.
>
> I'm not sure if we now need some changes on this behavirou here forcing PSR flag to be disabled
> when testing DRRS.
Hi,

When PSR is capable on sink and src, this IGT shouldn't test the DRRS.
This will be made sure using the drrs.cat_test flag (set to False if 
PSR.can_test is True)

And had a offline discussion with Paulo on adding the DRRS in the 
frontbuffer tracking test.
At present on a setup, If PSR is not capable and DRRS is capable, DRRS 
is alway enabled.
Idleness detection and corresponding Vrefresh change will be ongoing 
parallel to FBC testing. It is always FBC||DRRS.

in Paulo's opinion having a means of dynamically disabling the DRRS is 
compulsory to find out the regression caused by DRRS.
i.e we can test the combination of features(FBC, FBC||(DRRS/PSR) and 
DRRS/PSR) based on the front buffer tracking,
against the combination of features(FBC, FBC||PSR, PSR) excluding the DRRS.
Difference in the results will call out whether a regression is caused 
due to DRRS or not.

Untill we add a run time disable option for DRRS in kernel, could we 
have the functional test for DRRS merged in the front buffer tracking IGT?
This wont change the current environment for testing if other features 
like FBC, that is done in this IGT.

And this can't be final shape of the IGT but a intermediate one.
Once the disable interface for DRRS is added corresponding 
tear_down_drrs option can be added to this IGT.


--Ram
>
>>   
>> -- 
>> 1.9.1
>>

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

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

* Re: [PATCH] Idleness DRRS:
  2017-09-19 10:46   ` Ramalingam C
@ 2017-09-19 18:12     ` Rodrigo Vivi
  2017-10-31  9:20       ` [PATCH 0/2] DRRS coverage in frontbuffer tracking IGT Ramalingam C
                         ` (20 more replies)
  0 siblings, 21 replies; 59+ messages in thread
From: Rodrigo Vivi @ 2017-09-19 18:12 UTC (permalink / raw)
  To: Ramalingam C; +Cc: paulo.r.zanoni, daniel.vetter, intel-gfx, ankit.k.nautiyal

On Tue, Sep 19, 2017 at 10:46:49AM +0000, Ramalingam C wrote:
> 
> 
> On Tuesday 19 September 2017 01:24 AM, Rodrigo Vivi wrote:
> > On Mon, Sep 18, 2017 at 08:52:12AM +0000,  wrote:
> > > From: Lohith BS <lohith.bs@intel.com>
> > > 
> > > 	By default the DRRS state will be at DRRS_HIGH_RR. When a Display
> > > 	content is Idle for more than 1Sec Idleness will be declared and
> > > 	DRRS_LOW_RR will be invoked, changing the refresh rate to the
> > > 	lower most refresh rate supported by the panel. As soon as there
> > > 	is a display content change there will be a DRRS state transition
> > > 	as DRRS_LOW_RR--> DRRS_HIGH_RR, changing the refresh rate to the
> > > 	highest refresh rate supported by the panel.
> > > 
> > > To test this, Idleness DRRS IGT will probe the DRRS state at below
> > > instances and compare with the expected state.
> > > 
> > > 	Instance					Expected State
> > > 1. Immediately after rendering the still image		DRRS_HIGH_RR
> > > 2. After a delay of 1.2Sec				DRRS_LOW_RR
> > > 3. After changing the frame buffer			DRRS_HIGH_RR
> > > 4. After a delay of 1.2Sec				DRRS_LOW_RR
> > > 5. After changing the frame buffer			DRRS_HIGH_RR
> > > 6. After a delay of 1.2Sec				DRRS_LOW_RR
> > > 
> > > The test checks the driver DRRS state from the debugfs entry. To check the
> > > actual refresh-rate, the number of vblanks received per sec.
> > > The refresh-rate calculated is checked against the expected refresh-rate
> > > with a tolerance value of 2.
> > > 
> > > This patch is a continuation of the earlier work
> > > https://patchwork.freedesktop.org/patch/45472/ towards igt for idleness
> > > 
> > > DRRS. The code is tested on Broxton BXT_T platform.
> > > 
> > > v2: Addressed the comments and suggestions from Vlad, Marius.
> > > The signoff details from the earlier work are also included.
> > > 
> > > v3: Modified vblank rate calculation by using reply-sequence, provided by
> > > drmWaitVBlank, as suggested by Chris Wilson.
> > > 
> > > v4: As suggested from Chris Wilson and Daniel Vetter
> > > 	1) Avoided using pthread for calculating vblank refresh rate,
> > > 	   instead used drmWaitVBlank reply sequence.
> > > 	2) Avoided using kernel-specific info like transitional delays,
> > > 	   instead polling mechanism with timeout is used.
> > > 	3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
> > > 	   instead of having a separate test.
> > > 
> > > v5: This patch adds DRRS as a new feature in the kms_frontbuffer_tracking IGT.
> > >      DRRS switch to lower vrefresh rate is tested at slow-draw subtest.
> > > 
> > > 	Note:
> > > 	1) Currently kernel doesn't have support to enable and disable the DRRS
> > > 	   feature dynamically(as in case of PSR). Hence if the panel supports
> > > 	   DRRS it will be enabled by default.
> > > 
> > > 	This is in continuation of last patch "https://patchwork.freedesktop.org/patch/162726/"
> > > 
> > > Signed-off-by: Lohith BS <lohith.bs@intel.com>
> > > Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
> > > Signed-off-by: Vandana Kannan <vandana.kannan@intel.com>
> > > Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
> > > ---
> > >   tests/kms_frontbuffer_tracking.c | 161 ++++++++++++++++++++++++++++++++++++---
> > >   1 file changed, 152 insertions(+), 9 deletions(-)
> > > 
> > > diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
> > > index a068c8a..4f44109 100644
> > > --- a/tests/kms_frontbuffer_tracking.c
> > > +++ b/tests/kms_frontbuffer_tracking.c
> > > @@ -34,7 +34,7 @@
> > >   IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
> > > -		     "its related features: FBC and PSR");
> > > +		     "its related features: FBC DRRS and PSR");
> > >   /*
> > >    * One of the aspects of this test is that, for every subtest, we try different
> > > @@ -105,8 +105,9 @@ struct test_mode {
> > >   		FEATURE_NONE  = 0,
> > >   		FEATURE_FBC   = 1,
> > >   		FEATURE_PSR   = 2,
> > > -		FEATURE_COUNT = 4,
> > > -		FEATURE_DEFAULT = 4,
> > > +		FEATURE_DRRS  = 4,
> > > +		FEATURE_COUNT = 6,
> > > +		FEATURE_DEFAULT = 6,
> > >   	} feature;
> > >   	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
> > > @@ -180,6 +181,9 @@ struct {
> > >   	bool can_test;
> > >   } psr = {
> > >   	.can_test = false,
> > > +},
> > > +drrs  = {
> > > +	.can_test = false,
> > >   };
> > > @@ -822,6 +826,52 @@ static void psr_print_status(void)
> > >   	igt_info("PSR status:\n%s\n", buf);
> > >   }
> > > +static bool is_drrs_high(void)
> > > +{
> > > +	char buf[256];
> > > +
> > > +	debugfs_read("i915_drrs_status", buf);
> > > +	return strstr(buf, "DRRS_HIGH_RR");
> > > +}
> > > +
> > > +static bool is_drrs_low(void)
> > > +{
> > > +	char buf[256];
> > > +
> > > +	debugfs_read("i915_drrs_status", buf);
> > > +	return strstr(buf, "DRRS_LOW_RR");
> > > +}
> > > +
> > > +static bool is_drrs_enabled(void)
> > > +{
> > > +	char buf[256];
> > > +
> > > +	debugfs_read("i915_drrs_status", buf);
> > > +	return strstr(buf, "DRRS Supported: Yes");
> > > +}
> > > +
> > > +static bool is_drrs_inactive(void)
> > > +{
> > > +	char buf[256];
> > > +
> > > +	debugfs_read("i915_drrs_status", buf);
> > > +	return strstr(buf, "No active crtc found");
> > > +}
> > > +
> > > +static void drrs_print_status(void)
> > > +{
> > > +	char buf[256];
> > > +
> > > +	if (is_drrs_high())
> > > +		igt_info("DRRS STATUS : DRRS HIGH\n");
> > > +
> > > +	if (is_drrs_low())
> > > +		igt_info("DRRS_STATUS : DRRS LOW\n");
> > > +
> > > +	if (is_drrs_inactive())
> > > +		igt_info("DRRS_STATUS : DRRS DISABLED\n");
> > > +}
> > > +
> > >   static struct timespec fbc_get_last_action(void)
> > >   {
> > >   	struct timespec ret = { 0, 0 };
> > > @@ -1575,6 +1625,25 @@ static void teardown_psr(void)
> > >   {
> > >   }
> > > +static void setup_drrs(void)
> > > +{
> > > +	if (get_connector(prim_mode_params.connector_id)->connector_type !=
> > > +			DRM_MODE_CONNECTOR_eDP) {
> > > +		igt_info("Can't test DRRS: no usable eDP screen.\n");
> > > +		return;
> > > +	}
> > > +
> > > +	if (!is_drrs_enabled()) {
> > > +		igt_info("Can't test DRRS: not supported in the driver.\n");
> > > +		return;
> > > +	}
> > > +	drrs.can_test = true;
> > > +}
> > > +
> > > +static void teardown_drrs(void)
> > > +{
> > > +}
> > > +
> > >   static void setup_environment(void)
> > >   {
> > >   	setup_drm();
> > > @@ -1582,7 +1651,7 @@ static void setup_environment(void)
> > >   	setup_fbc();
> > >   	setup_psr();
> > > -
> > > +	setup_drrs();
> > >   	setup_crcs();
> > >   }
> > > @@ -1592,6 +1661,7 @@ static void teardown_environment(void)
> > >   	teardown_crcs();
> > >   	teardown_psr();
> > > +	teardown_drrs();
> > >   	teardown_fbc();
> > >   	teardown_modeset();
> > >   	teardown_drm();
> > > @@ -1660,6 +1730,11 @@ static void do_flush(const struct test_mode *t)
> > >   #define ASSERT_PSR_ENABLED		(1 << 6)
> > >   #define ASSERT_PSR_DISABLED		(1 << 7)
> > > +#define DRRS_ASSERT_FLAGS               (7 << 8)
> > > +#define ASSERT_DRRS_HIGH                (1 << 8)
> > > +#define ASSERT_DRRS_LOW                 (1 << 9)
> > > +#define ASSERT_DRRS_INACTIVE            (1 << 10)
> > > +
> > >   static int adjust_assertion_flags(const struct test_mode *t, int flags)
> > >   {
> > >   	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
> > > @@ -1667,12 +1742,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
> > >   			flags |= ASSERT_FBC_ENABLED;
> > >   		if (!(flags & ASSERT_PSR_DISABLED))
> > >   			flags |= ASSERT_PSR_ENABLED;
> > > +		if (!((flags & ASSERT_DRRS_LOW) || (flags & ASSERT_DRRS_INACTIVE))) {
> > > +			flags |= ASSERT_DRRS_HIGH;
> > > +		}
> > >   	}
> > >   	if ((t->feature & FEATURE_FBC) == 0)
> > >   		flags &= ~FBC_ASSERT_FLAGS;
> > >   	if ((t->feature & FEATURE_PSR) == 0)
> > >   		flags &= ~PSR_ASSERT_FLAGS;
> > > +	if ((t->feature & FEATURE_DRRS) == 0)
> > > +		flags &= ~DRRS_ASSERT_FLAGS;
> > >   	return flags;
> > >   }
> > > @@ -1704,6 +1784,23 @@ static void do_status_assertions(int flags)
> > >   		return;
> > >   	}
> > > +	if (flags & ASSERT_DRRS_HIGH) {
> > > +		if (!is_drrs_high()) {
> > > +			drrs_print_status();
> > > +			igt_assert_f(false, "DRRS HIGH\n");
> > > +		}
> > > +	} else if (flags & ASSERT_DRRS_LOW) {
> > > +		if (!is_drrs_low()) {
> > > +			drrs_print_status();
> > > +			igt_assert_f(false, "DRRS LOW\n");
> > > +		}
> > > +	} else if (flags & ASSERT_DRRS_INACTIVE) {
> > > +		if (!is_drrs_inactive()) {
> > > +			drrs_print_status();
> > > +			igt_assert_f(false, "DRRS DISABLED\n");
> > > +		}
> > > +	}
> > > +
> > >   	if (flags & ASSERT_FBC_ENABLED) {
> > >   		igt_require(!fbc_not_enough_stolen());
> > >   		igt_require(!fbc_stride_not_supported());
> > > @@ -1850,6 +1947,10 @@ static void check_test_requirements(const struct test_mode *t)
> > >   			      "Can't test PSR without sink CRCs\n");
> > >   	}
> > > +	if (t->feature & FEATURE_DRRS)
> > > +		igt_require_f(drrs.can_test,
> > > +				"Can't test DRRS with the current outputs\n");
> > > +
> > >   	if (opt.only_pipes != PIPE_COUNT)
> > >   		igt_require(t->pipes == opt.only_pipes);
> > >   }
> > > @@ -1971,7 +2072,7 @@ static void rte_subtest(const struct test_mode *t)
> > >   	unset_all_crtcs();
> > >   	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
> > > -		      DONT_ASSERT_CRC);
> > > +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
> > >   	enable_prim_screen_and_wait(t);
> > >   	set_cursor_for_test(t, &prim_mode_params);
> > > @@ -2008,6 +2109,24 @@ static bool op_disables_psr(const struct test_mode *t,
> > >   	return false;
> > >   }
> > > +static bool op_sets_drrs_high(const struct test_mode *t,
> > > +				enum igt_draw_method method)
> > > +{
> > > +	if (method != IGT_DRAW_MMAP_GTT)
> > > +		return false;
> > > +	if (t->screen == SCREEN_PRIM)
> > > +		return true;
> > > +	/* On FBS_SHARED, even if the target is not the DRRS screen
> > > +	 * (SCREEN_PRIM), all primary planes share the same frontbuffer, so a
> > > +	 * write to the second screen primary plane - or offscreen plane - will
> > > +	 * touch the framebuffer that's also used by the primary screen and making
> > > +	 * DRRS state as high
> > > +	 */
> > > +	if (t->fbs == FBS_SHARED && t->plane == PLANE_PRI)
> > > +		return true;
> > > +	return false;
> > > +}
> > > +
> > >   /*
> > >    * draw - draw a set of rectangles on the screen using the provided method
> > >    *
> > > @@ -2063,6 +2182,9 @@ static void draw_subtest(const struct test_mode *t)
> > >   	if (op_disables_psr(t, t->method))
> > >   		assertions |= ASSERT_PSR_DISABLED;
> > > +	if (op_sets_drrs_high(t, t->method))
> > > +		assertions |= ASSERT_DRRS_HIGH;
> > > +
> > >   	prepare_subtest(t, pattern);
> > >   	target = pick_target(t, params);
> > > @@ -2152,6 +2274,10 @@ static void multidraw_subtest(const struct test_mode *t)
> > >   				    !wc_used)
> > >   					assertions |= ASSERT_PSR_DISABLED;
> > > +				if (op_sets_drrs_high(t, used_method) &&
> > > +					!wc_used)
> > > +					assertions |= ASSERT_DRRS_HIGH;
> > > +
> > >   				do_assertions(assertions);
> > >   			}
> > > @@ -2206,6 +2332,7 @@ static void badformat_subtest(const struct test_mode *t)
> > >   {
> > >   	bool fbc_valid = format_is_valid(FEATURE_FBC, t->format);
> > >   	bool psr_valid = format_is_valid(FEATURE_PSR, t->format);
> > > +	bool drrs_valid = format_is_valid(FEATURE_DRRS, t->format);
> > >   	int assertions = ASSERT_NO_ACTION_CHANGE;
> > >   	prepare_subtest_data(t, NULL);
> > > @@ -2219,6 +2346,9 @@ static void badformat_subtest(const struct test_mode *t)
> > >   		assertions |= ASSERT_FBC_DISABLED;
> > >   	if (!psr_valid)
> > >   		assertions |= ASSERT_PSR_DISABLED;
> > > +	if (!drrs_valid)
> > > +		assertions |= ASSERT_DRRS_HIGH;
> > > +
> > >   	do_assertions(assertions);
> > >   }
> > > @@ -2277,7 +2407,15 @@ static void slow_draw_subtest(const struct test_mode *t)
> > >   		sleep(2);
> > >   		update_wanted_crc(t, &pattern->crcs[t->format][r]);
> > > -		do_assertions(0);
> > > +		if (t->feature & FEATURE_PSR) {
> > > +			do_assertions(0);
> > > +		}
> > > +
> > > +		if (t->feature & FEATURE_DRRS) {
> > > +			sleep(1);
> > > +			do_assertions(ASSERT_DRRS_LOW);
> > > +		}
> > > +
> > >   	}
> > >   }
> > > @@ -2464,6 +2602,7 @@ static void fliptrack_subtest(const struct test_mode *t, enum flip_type type)
> > >   		update_wanted_crc(t, &pattern->crcs[t->format][r]);
> > >   		do_assertions(ASSERT_PSR_DISABLED);
> > > +		do_assertions(ASSERT_DRRS_HIGH);
> > >   	}
> > >   	igt_remove_fb(drm.fd, &fb2);
> > > @@ -2892,7 +3031,7 @@ static void suspend_subtest(const struct test_mode *t)
> > >   	sleep(5);
> > >   	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
> > >   	sleep(5);
> > > -	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
> > > +	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | ASSERT_DRRS_HIGH |
> > >   		      DONT_ASSERT_CRC);
> > >   	set_mode_for_params(params);
> > > @@ -2966,7 +3105,7 @@ static void farfromfence_subtest(const struct test_mode *t)
> > >   		update_wanted_crc(t, &pattern->crcs[t->format][r]);
> > >   		/* GTT draws disable PSR. */
> > > -		do_assertions(assertions | ASSERT_PSR_DISABLED);
> > > +		do_assertions(assertions | ASSERT_PSR_DISABLED | ASSERT_DRRS_HIGH);
> > >   	}
> > >   	igt_remove_fb(drm.fd, &tall_fb);
> > > @@ -3375,6 +3514,10 @@ static const char *feature_str(int feature)
> > >   		return "psr";
> > >   	case FEATURE_FBC | FEATURE_PSR:
> > >   		return "fbcpsr";
> > > +	case FEATURE_DRRS:
> > > +		return "drrs";
> > > +	case FEATURE_FBC | FEATURE_DRRS:
> > > +		return "fbcdrrs";
> > >   	default:
> > >   		igt_assert(false);
> > >   	}
> > > @@ -3639,7 +3782,7 @@ int main(int argc, char *argv[])
> > >   				tilingchange_subtest(&t);
> > >   		}
> > > -		if (t.feature & FEATURE_PSR)
> > > +		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
> > >   			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
> > >   				slow_draw_subtest(&t);
> > I just merged the patch that blocks DRRS if PSR is enabled.
> > 
> > I'm not sure if we now need some changes on this behavirou here forcing PSR flag to be disabled
> > when testing DRRS.
> Hi,
> 
> When PSR is capable on sink and src, this IGT shouldn't test the DRRS.

I believe the test case needs to be smarter than that.
It should actually always test DRRS, not only when PSR is not capable on sink and src.
But disabling i915 param psr_enable and forcing a modeset PSR src will not be ok anymore
so DRRS can be tested. So, whenever we enable PSR by default we don't break DRRS tests on CI.

> This will be made sure using the drrs.cat_test flag (set to False if
> PSR.can_test is True)
> 
> And had a offline discussion with Paulo on adding the DRRS in the
> frontbuffer tracking test.
> At present on a setup, If PSR is not capable and DRRS is capable, DRRS is
> alway enabled.
> Idleness detection and corresponding Vrefresh change will be ongoing
> parallel to FBC testing. It is always FBC||DRRS.
> 
> in Paulo's opinion having a means of dynamically disabling the DRRS is
> compulsory to find out the regression caused by DRRS.
> i.e we can test the combination of features(FBC, FBC||(DRRS/PSR) and
> DRRS/PSR) based on the front buffer tracking,
> against the combination of features(FBC, FBC||PSR, PSR) excluding the DRRS.
> Difference in the results will call out whether a regression is caused due
> to DRRS or not.
> 
> Untill we add a run time disable option for DRRS in kernel, could we have
> the functional test for DRRS merged in the front buffer tracking IGT?
> This wont change the current environment for testing if other features like
> FBC, that is done in this IGT.
> 
> And this can't be final shape of the IGT but a intermediate one.
> Once the disable interface for DRRS is added corresponding tear_down_drrs
> option can be added to this IGT.
> 
> 
> --Ram
> > 
> > > -- 
> > > 1.9.1
> > > 
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH 0/2] DRRS coverage in frontbuffer tracking IGT
  2017-09-19 18:12     ` Rodrigo Vivi
@ 2017-10-31  9:20       ` Ramalingam C
  2017-10-31  9:20         ` [PATCH 1/2] drm/i915: Runtime disable for eDP DRRS Ramalingam C
                           ` (2 more replies)
  2017-10-31  9:28       ` ✗ Fi.CI.BAT: failure for series starting with [1/2] drm/i915: Runtime disable for eDP DRRS Patchwork
                         ` (19 subsequent siblings)
  20 siblings, 3 replies; 59+ messages in thread
From: Ramalingam C @ 2017-10-31  9:20 UTC (permalink / raw)
  To: intel-gfx, rodrigo.vivi, paulo.r.zanoni, chris

From: "C, Ramalingam" <ramalingam.c@intel.com>

FBC, DRRS and PSR are based on front buffer tracking infra.
So the features in this set, needs to be tested for all possible test
cases of front buffer tracking, individually and in all combinations
of the features.

eDP Idleness DRRS is implemented based on front buffer tracking.
So DRRS is added as a feature to get tested in kms_frontbuffer_tracking.

Till now if DRRS is enabled from VBT(platform) and panel, DRRS will be
always enabled and active. Considering PSR's effectiveness over DRRS,
recently DRRS is not enabled if PSR is enabled.

But to test FBC individually, we need to disable the DRRS and PSR.
This series adds the corresponding changes(module param enable_drrs) to
kernel, to control the DRRS enable path.

With this kernel changes IGT/Userspace will be able to disable the eDP
DRRS in runtime.

C, Ramalingam (2):
  drm/i915: Runtime disable for eDP DRRS
  i915/drrs/debugfs: module param and psr status

 drivers/gpu/drm/i915/i915_debugfs.c | 11 ++++++++++-
 drivers/gpu/drm/i915/i915_params.c  |  3 +++
 drivers/gpu/drm/i915/i915_params.h  |  3 ++-
 drivers/gpu/drm/i915/intel_dp.c     |  6 ++++++
 4 files changed, 21 insertions(+), 2 deletions(-)

BS, Lohith (1):
  tests/kms_frontbuffer_tracking: Idleness DRRS coverage

 tests/kms_frontbuffer_tracking.c | 136 +++++++++++++++++++++++++++++++++++----
 1 file changed, 124 insertions(+), 12 deletions(-)

-- 
2.7.4

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

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

* [PATCH 1/2] drm/i915: Runtime disable for eDP DRRS
  2017-10-31  9:20       ` [PATCH 0/2] DRRS coverage in frontbuffer tracking IGT Ramalingam C
@ 2017-10-31  9:20         ` Ramalingam C
  2017-10-31 18:57           ` Rodrigo Vivi
  2017-10-31  9:20         ` [PATCH 2/2] i915/drrs/debugfs: module param and psr status Ramalingam C
  2017-10-31  9:20         ` [PATCH i-g-t] tests/kms_frontbuffer_tracking: Idleness DRRS coverage Ramalingam C
  2 siblings, 1 reply; 59+ messages in thread
From: Ramalingam C @ 2017-10-31  9:20 UTC (permalink / raw)
  To: intel-gfx, rodrigo.vivi, paulo.r.zanoni, chris

From: "C, Ramalingam" <ramalingam.c@intel.com>

Module parameter enable_drrs(Boolean flag) is added to control the
eDP Idleness drrs enable flow.

Modification to this module parameter will be considered on next
eDP_DRRS enable flow. So after module parameter update, a modeset
will help to modify the feature state as per the module parameter's
current state.

Possibility of disabling the DRRS, enables the testing of the
frontbuffer tracking based features (FBC, DRRS and PSR) as standalone
or any combination of the set.

Signed-off-by: C, Ramalingam <ramalingam.c@intel.com>
---
 drivers/gpu/drm/i915/i915_params.c | 3 +++
 drivers/gpu/drm/i915/i915_params.h | 3 ++-
 drivers/gpu/drm/i915/intel_dp.c    | 6 ++++++
 3 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
index b4faeb6aa2bd..32f06bb74f9d 100644
--- a/drivers/gpu/drm/i915/i915_params.c
+++ b/drivers/gpu/drm/i915/i915_params.c
@@ -190,3 +190,6 @@ i915_param_named(enable_dpcd_backlight, bool, 0600,
 
 i915_param_named(enable_gvt, bool, 0400,
 	"Enable support for Intel GVT-g graphics virtualization host support(default:false)");
+
+i915_param_named_unsafe(enable_drrs, bool, 0600,
+	"Enable DRRS. (True=Enabled, False=Disabled [Default])");
diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
index c7292268ed43..3c6fdce1c122 100644
--- a/drivers/gpu/drm/i915/i915_params.h
+++ b/drivers/gpu/drm/i915/i915_params.h
@@ -67,7 +67,8 @@
 	param(bool, nuclear_pageflip, false) \
 	param(bool, enable_dp_mst, true) \
 	param(bool, enable_dpcd_backlight, false) \
-	param(bool, enable_gvt, false)
+	param(bool, enable_gvt, false) \
+	param(bool, enable_drrs, false)
 
 #define MEMBER(T, member, ...) T member;
 struct i915_params {
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index ca48bce23a6f..ff9964cf15cd 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -5568,6 +5568,11 @@ void intel_edp_drrs_enable(struct intel_dp *intel_dp,
 		return;
 	}
 
+	if (!i915_modparams.enable_drrs) {
+		DRM_DEBUG_KMS("DRRS is disabled from modparams\n");
+		return;
+	}
+
 	mutex_lock(&dev_priv->drrs.mutex);
 	if (WARN_ON(dev_priv->drrs.dp)) {
 		DRM_ERROR("DRRS already enabled\n");
@@ -5817,6 +5822,7 @@ intel_dp_drrs_init(struct intel_connector *intel_connector,
 	}
 
 	dev_priv->drrs.type = dev_priv->vbt.drrs_type;
+	i915_modparams.enable_drrs = true;
 
 	dev_priv->drrs.refresh_rate_type = DRRS_HIGH_RR;
 	DRM_DEBUG_KMS("seamless DRRS supported for eDP panel.\n");
-- 
2.7.4

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

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

* [PATCH 2/2] i915/drrs/debugfs: module param and psr status
  2017-10-31  9:20       ` [PATCH 0/2] DRRS coverage in frontbuffer tracking IGT Ramalingam C
  2017-10-31  9:20         ` [PATCH 1/2] drm/i915: Runtime disable for eDP DRRS Ramalingam C
@ 2017-10-31  9:20         ` Ramalingam C
  2017-11-07 18:40           ` [PATCH v2 2/2] i915/drrs/debugfs: crtc id " Ramalingam C
  2017-10-31  9:20         ` [PATCH i-g-t] tests/kms_frontbuffer_tracking: Idleness DRRS coverage Ramalingam C
  2 siblings, 1 reply; 59+ messages in thread
From: Ramalingam C @ 2017-10-31  9:20 UTC (permalink / raw)
  To: intel-gfx, rodrigo.vivi, paulo.r.zanoni, chris

From: "C, Ramalingam" <ramalingam.c@intel.com>

When DRRS is disabled, i915_drrs_status is updated with the runtime
disable state of drrs due to
	i915_modparams.enable_drrs - module parameters
	psr.enabled -	psr active status

Signed-off-by: C, Ramalingam <ramalingam.c@intel.com>
---
 drivers/gpu/drm/i915/i915_debugfs.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 5b58d2b897c7..0a0ae22fc9c2 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -3569,7 +3569,16 @@ static void drrs_status_per_crtc(struct seq_file *m,
 
 		/* disable_drrs() will make drrs->dp NULL */
 		if (!drrs->dp) {
-			seq_puts(m, "Idleness DRRS: Disabled");
+			seq_puts(m, "Idleness DRRS: Disabled\n");
+
+			if (!i915_modparams.enable_drrs)
+				seq_puts(m,
+				"\tModule parameter enable_drrs is disabled\n");
+
+			if (dev_priv->psr.enabled)
+				seq_puts(m,
+				"\tAs PSR is enabled, DRRS is not enabled\n");
+
 			mutex_unlock(&drrs->mutex);
 			return;
 		}
-- 
2.7.4

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

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

* [PATCH i-g-t] tests/kms_frontbuffer_tracking: Idleness DRRS coverage
  2017-10-31  9:20       ` [PATCH 0/2] DRRS coverage in frontbuffer tracking IGT Ramalingam C
  2017-10-31  9:20         ` [PATCH 1/2] drm/i915: Runtime disable for eDP DRRS Ramalingam C
  2017-10-31  9:20         ` [PATCH 2/2] i915/drrs/debugfs: module param and psr status Ramalingam C
@ 2017-10-31  9:20         ` Ramalingam C
  2017-11-10 16:22           ` [PATCH i-g-t] Idleness DRRS: Lohith BS
  2 siblings, 1 reply; 59+ messages in thread
From: Ramalingam C @ 2017-10-31  9:20 UTC (permalink / raw)
  To: intel-gfx, rodrigo.vivi, paulo.r.zanoni, chris

From: Lohith BS <lohith.bs@intel.com>

By default the DRRS state will be at DRRS_HIGH_RR. When a Display
content is Idle for more than 1Sec Idleness will be declared and
DRRS_LOW_RR will be invoked, changing the refresh rate to the
lower most refresh rate supported by the panel. As soon as there
is a display content change there will be a DRRS state transition
as DRRS_LOW_RR--> DRRS_HIGH_RR, changing the refresh rate to the
highest refresh rate supported by the panel.

To test this, Idleness DRRS IGT will probe the DRRS state at below
instances and compare with the expected state.

        Instance                                        Expected State
    1. Immediately after rendering the still image      DRRS_HIGH_RR
    2. After a delay of 1.2Sec                          DRRS_LOW_RR
    3. After changing the frame buffer                  DRRS_HIGH_RR
    4. After a delay of 1.2Sec                          DRRS_LOW_RR
    5. After changing the frame buffer                  DRRS_HIGH_RR
    6. After a delay of 1.2Sec                          DRRS_LOW_RR

The test checks the driver DRRS state from the debugfs entry.
To check the actual refresh-rate, the number of vblanks received
per sec.
The refresh-rate calculated is checked against the expected refresh-rate
with a tolerance value of 2.

This patch is a continuation of the earlier work
https://patchwork.freedesktop.org/patch/45472/ towards igt for idleness
DRRS. The code is tested on Broxton BXT_T platform.

    v2: Addressed the comments and suggestions from Vlad, Marius.
	The signoff details from the earlier work are also included.

    v3: Modified vblank rate calculation by using reply-sequence,
	provided by drmWaitVBlank, as suggested by Chris Wilson.

    v4: As suggested from Chris Wilson and Daniel Vetter
        1) Avoided using pthread for calculating vblank refresh rate,
           instead used drmWaitVBlank reply sequence.
        2) Avoided using kernel-specific info like transitional delays,
           instead polling mechanism with timeout is used.
        3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
           instead of having a separate test.

    v5: This patch adds DRRS as a new feature in the
	kms_frontbuffer_tracking IGT.
	DRRS switch to lower vrefresh rate is tested at slow-draw
	subtest. This is in continuation of last patch
	"https://patchwork.freedesktop.org/patch/162726/"

    v6: This patch adds runtime enable and disable feature for
	testing DRRS

Signed-off-by: Lohith BS <lohith.bs@intel.com>
Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
---
 tests/kms_frontbuffer_tracking.c | 134 +++++++++++++++++++++++++++++++++++----
 1 file changed, 123 insertions(+), 11 deletions(-)

diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
index a068c8afb6d8..fdb4f57d4698 100644
--- a/tests/kms_frontbuffer_tracking.c
+++ b/tests/kms_frontbuffer_tracking.c
@@ -34,7 +34,7 @@
 
 
 IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
-		     "its related features: FBC and PSR");
+		     "its related features: FBC, DRRS and PSR");
 
 /*
  * One of the aspects of this test is that, for every subtest, we try different
@@ -105,8 +105,9 @@ struct test_mode {
 		FEATURE_NONE  = 0,
 		FEATURE_FBC   = 1,
 		FEATURE_PSR   = 2,
-		FEATURE_COUNT = 4,
-		FEATURE_DEFAULT = 4,
+		FEATURE_DRRS  = 4,
+		FEATURE_COUNT = 6,
+		FEATURE_DEFAULT = 6,
 	} feature;
 
 	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
@@ -178,10 +179,8 @@ struct {
 
 struct {
 	bool can_test;
-} psr = {
-	.can_test = false,
-};
-
+} psr = { .can_test = false,},
+drrs = { .can_test = false,};
 
 #define SINK_CRC_SIZE 12
 typedef struct {
@@ -822,6 +821,54 @@ static void psr_print_status(void)
 	igt_info("PSR status:\n%s\n", buf);
 }
 
+static bool is_drrs_high(void)
+{
+	char buf[256];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS_HIGH_RR");
+}
+
+static bool is_drrs_low(void)
+{
+	char buf[256];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS_LOW_RR");
+}
+
+static bool is_drrs_supported(void)
+{
+	char buf[256];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS Supported: Yes");
+}
+
+static bool is_drrs_inactive(void)
+{
+	char buf[256];
+
+	debugfs_read("i915_drrs_status", buf);
+
+	if (strstr(buf, "No active crtc found"))
+		return true;
+	if (strstr(buf, "Idleness DRRS: Disabled"))
+		return true;
+	if (strstr(buf, "DRRS Supported : No"))
+		return true;
+
+	return false;
+}
+
+static void drrs_print_status(void)
+{
+	char buf[256];
+
+	debugfs_read("i915_drrs_status", buf);
+	igt_info("DRRS STATUS :\n%s\n", buf);
+}
+
 static struct timespec fbc_get_last_action(void)
 {
 	struct timespec ret = { 0, 0 };
@@ -932,10 +979,17 @@ static bool psr_wait_until_enabled(void)
 	return igt_wait(psr_is_enabled(), 5000, 1);
 }
 
+static bool drrs_wait_until_rr_switch_to_low(void)
+{
+	return igt_wait(is_drrs_low(), 5000, 1);
+}
+
 #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
 #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
 #define psr_enable() igt_set_module_param_int("enable_psr", 1)
 #define psr_disable() igt_set_module_param_int("enable_psr", 0)
+#define drrs_enable() igt_set_module_param("enable_drrs", "Y")
+#define drrs_disable() igt_set_module_param("enable_drrs", "N")
 
 static void get_sink_crc(sink_crc_t *crc, bool mandatory)
 {
@@ -1182,6 +1236,7 @@ static void disable_features(const struct test_mode *t)
 
 	fbc_disable();
 	psr_disable();
+	drrs_disable();
 }
 
 static void *busy_thread_func(void *data)
@@ -1575,6 +1630,21 @@ static void teardown_psr(void)
 {
 }
 
+static void setup_drrs(void)
+{
+	if (get_connector(prim_mode_params.connector_id)->connector_type !=
+			DRM_MODE_CONNECTOR_eDP) {
+		igt_info("Can't test DRRS: no usable eDP screen.\n");
+		return;
+	}
+
+	if (!is_drrs_supported()) {
+		igt_info("Can't test DRRS: Not supported.\n");
+		return;
+	}
+	drrs.can_test = true;
+}
+
 static void setup_environment(void)
 {
 	setup_drm();
@@ -1582,7 +1652,7 @@ static void setup_environment(void)
 
 	setup_fbc();
 	setup_psr();
-
+	setup_drrs();
 	setup_crcs();
 }
 
@@ -1660,6 +1730,11 @@ static void do_flush(const struct test_mode *t)
 #define ASSERT_PSR_ENABLED		(1 << 6)
 #define ASSERT_PSR_DISABLED		(1 << 7)
 
+#define DRRS_ASSERT_FLAGS               (7 << 8)
+#define ASSERT_DRRS_HIGH                (1 << 8)
+#define ASSERT_DRRS_LOW                 (1 << 9)
+#define ASSERT_DRRS_INACTIVE            (1 << 10)
+
 static int adjust_assertion_flags(const struct test_mode *t, int flags)
 {
 	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
@@ -1667,12 +1742,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
 			flags |= ASSERT_FBC_ENABLED;
 		if (!(flags & ASSERT_PSR_DISABLED))
 			flags |= ASSERT_PSR_ENABLED;
+		if (!((flags & ASSERT_DRRS_LOW) ||
+			(flags & ASSERT_DRRS_INACTIVE)))
+			flags |= ASSERT_DRRS_HIGH;
 	}
 
 	if ((t->feature & FEATURE_FBC) == 0)
 		flags &= ~FBC_ASSERT_FLAGS;
 	if ((t->feature & FEATURE_PSR) == 0)
 		flags &= ~PSR_ASSERT_FLAGS;
+	if ((t->feature & FEATURE_DRRS) == 0)
+		flags &= ~DRRS_ASSERT_FLAGS;
 
 	return flags;
 }
@@ -1704,6 +1784,23 @@ static void do_status_assertions(int flags)
 		return;
 	}
 
+	if (flags & ASSERT_DRRS_HIGH) {
+		if (!is_drrs_high()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS HIGH\n");
+		}
+	} else if (flags & ASSERT_DRRS_LOW) {
+		if (!drrs_wait_until_rr_switch_to_low()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS LOW\n");
+		}
+	} else if (flags & ASSERT_DRRS_INACTIVE) {
+		if (!is_drrs_inactive()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS INACTIVE\n");
+		}
+	}
+
 	if (flags & ASSERT_FBC_ENABLED) {
 		igt_require(!fbc_not_enough_stolen());
 		igt_require(!fbc_stride_not_supported());
@@ -1831,6 +1928,8 @@ static void enable_features_for_test(const struct test_mode *t)
 		fbc_enable();
 	if (t->feature & FEATURE_PSR)
 		psr_enable();
+	if (t->feature & FEATURE_DRRS)
+		drrs_enable();
 }
 
 static void check_test_requirements(const struct test_mode *t)
@@ -1850,6 +1949,10 @@ static void check_test_requirements(const struct test_mode *t)
 			      "Can't test PSR without sink CRCs\n");
 	}
 
+	if (t->feature & FEATURE_DRRS)
+		igt_require_f(drrs.can_test,
+				"Can't test DRRS with the current outputs\n");
+
 	if (opt.only_pipes != PIPE_COUNT)
 		igt_require(t->pipes == opt.only_pipes);
 }
@@ -1971,7 +2074,7 @@ static void rte_subtest(const struct test_mode *t)
 
 	unset_all_crtcs();
 	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
-		      DONT_ASSERT_CRC);
+		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
 
 	enable_prim_screen_and_wait(t);
 	set_cursor_for_test(t, &prim_mode_params);
@@ -2219,6 +2322,7 @@ static void badformat_subtest(const struct test_mode *t)
 		assertions |= ASSERT_FBC_DISABLED;
 	if (!psr_valid)
 		assertions |= ASSERT_PSR_DISABLED;
+
 	do_assertions(assertions);
 }
 
@@ -2277,7 +2381,11 @@ static void slow_draw_subtest(const struct test_mode *t)
 		sleep(2);
 
 		update_wanted_crc(t, &pattern->crcs[t->format][r]);
-		do_assertions(0);
+
+		if (t->feature & FEATURE_DRRS)
+			do_assertions(ASSERT_DRRS_LOW);
+		else
+			do_assertions(0);
 	}
 }
 
@@ -3375,6 +3483,10 @@ static const char *feature_str(int feature)
 		return "psr";
 	case FEATURE_FBC | FEATURE_PSR:
 		return "fbcpsr";
+	case FEATURE_DRRS:
+		return "drrs";
+	case FEATURE_FBC | FEATURE_DRRS:
+		return "fbcdrrs";
 	default:
 		igt_assert(false);
 	}
@@ -3639,7 +3751,7 @@ int main(int argc, char *argv[])
 				tilingchange_subtest(&t);
 		}
 
-		if (t.feature & FEATURE_PSR)
+		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
 			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
 				slow_draw_subtest(&t);
 
-- 
2.7.4

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

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

* ✗ Fi.CI.BAT: failure for series starting with [1/2] drm/i915: Runtime disable for eDP DRRS
  2017-09-19 18:12     ` Rodrigo Vivi
  2017-10-31  9:20       ` [PATCH 0/2] DRRS coverage in frontbuffer tracking IGT Ramalingam C
@ 2017-10-31  9:28       ` Patchwork
  2017-10-31  9:48       ` ✓ Fi.CI.BAT: success " Patchwork
                         ` (18 subsequent siblings)
  20 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2017-10-31  9:28 UTC (permalink / raw)
  To: Ramalingam C; +Cc: intel-gfx

== Series Details ==

Series: series starting with [1/2] drm/i915: Runtime disable for eDP DRRS
URL   : https://patchwork.freedesktop.org/series/32887/
State : failure

== Summary ==

  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/zconf.lex.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
scripts/kconfig/conf  --silentoldconfig Kconfig
***
*** Configuration file ".config" not found!
***
*** Please run some configurator (e.g. "make oldconfig" or
*** "make menuconfig" or "make xconfig").
***
scripts/kconfig/Makefile:37: recipe for target 'silentoldconfig' failed
make[2]: *** [silentoldconfig] Error 1
Makefile:547: recipe for target 'silentoldconfig' failed
make[1]: *** [silentoldconfig] Error 2
  SYSTBL  arch/x86/entry/syscalls/../../include/generated/asm/syscalls_32.h
  SYSHDR  arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_32.h
  SYSHDR  arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_64.h
  SYSHDR  arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_x32.h
  HOSTCC  arch/x86/tools/relocs_32.o
  HOSTCC  arch/x86/tools/relocs_64.o
  HOSTCC  arch/x86/tools/relocs_common.o
  HOSTLD  arch/x86/tools/relocs
make: *** No rule to make target 'include/config/auto.conf', needed by 'include/config/kernel.release'.  Stop.

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

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

* ✓ Fi.CI.BAT: success for series starting with [1/2] drm/i915: Runtime disable for eDP DRRS
  2017-09-19 18:12     ` Rodrigo Vivi
  2017-10-31  9:20       ` [PATCH 0/2] DRRS coverage in frontbuffer tracking IGT Ramalingam C
  2017-10-31  9:28       ` ✗ Fi.CI.BAT: failure for series starting with [1/2] drm/i915: Runtime disable for eDP DRRS Patchwork
@ 2017-10-31  9:48       ` Patchwork
  2017-10-31 10:33       ` ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage Patchwork
                         ` (17 subsequent siblings)
  20 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2017-10-31  9:48 UTC (permalink / raw)
  To: Ramalingam C; +Cc: intel-gfx

== Series Details ==

Series: series starting with [1/2] drm/i915: Runtime disable for eDP DRRS
URL   : https://patchwork.freedesktop.org/series/32887/
State : success

== Summary ==

Series 32887v1 series starting with [1/2] drm/i915: Runtime disable for eDP DRRS
https://patchwork.freedesktop.org/api/1.0/series/32887/revisions/1/mbox/

Test chamelium:
        Subgroup dp-crc-fast:
                fail       -> PASS       (fi-kbl-7500u) fdo#102514
Test kms_pipe_crc_basic:
        Subgroup suspend-read-crc-pipe-a:
                pass       -> INCOMPLETE (fi-kbl-7560u) fdo#102846

fdo#102514 https://bugs.freedesktop.org/show_bug.cgi?id=102514
fdo#102846 https://bugs.freedesktop.org/show_bug.cgi?id=102846

fi-bdw-5557u     total:289  pass:266  dwarn:0   dfail:0   fail:2   skip:21  time:458s
fi-bdw-gvtdvm    total:289  pass:265  dwarn:0   dfail:0   fail:0   skip:24  time:450s
fi-blb-e6850     total:289  pass:223  dwarn:1   dfail:0   fail:0   skip:65  time:375s
fi-bsw-n3050     total:289  pass:241  dwarn:0   dfail:0   fail:2   skip:46  time:543s
fi-bwr-2160      total:289  pass:183  dwarn:0   dfail:0   fail:0   skip:106 time:264s
fi-bxt-dsi       total:289  pass:257  dwarn:0   dfail:0   fail:2   skip:30  time:507s
fi-bxt-j4205     total:289  pass:258  dwarn:0   dfail:0   fail:2   skip:29  time:505s
fi-byt-j1900     total:289  pass:251  dwarn:1   dfail:0   fail:2   skip:35  time:510s
fi-byt-n2820     total:289  pass:247  dwarn:1   dfail:0   fail:2   skip:39  time:485s
fi-cfl-s         total:289  pass:251  dwarn:4   dfail:0   fail:2   skip:32  time:572s
fi-elk-e7500     total:289  pass:229  dwarn:0   dfail:0   fail:0   skip:60  time:421s
fi-glk-1         total:289  pass:259  dwarn:0   dfail:0   fail:2   skip:28  time:588s
fi-hsw-4770      total:289  pass:260  dwarn:0   dfail:0   fail:2   skip:27  time:448s
fi-hsw-4770r     total:289  pass:260  dwarn:0   dfail:0   fail:2   skip:27  time:444s
fi-ilk-650       total:289  pass:228  dwarn:0   dfail:0   fail:0   skip:61  time:419s
fi-ivb-3520m     total:289  pass:260  dwarn:0   dfail:0   fail:0   skip:29  time:501s
fi-ivb-3770      total:289  pass:260  dwarn:0   dfail:0   fail:0   skip:29  time:462s
fi-kbl-7500u     total:289  pass:262  dwarn:1   dfail:0   fail:2   skip:24  time:505s
fi-kbl-7560u     total:245  pass:228  dwarn:0   dfail:0   fail:0   skip:16 
fi-kbl-7567u     total:289  pass:267  dwarn:0   dfail:0   fail:2   skip:20  time:499s
fi-kbl-r         total:289  pass:260  dwarn:0   dfail:0   fail:2   skip:27  time:592s
fi-pnv-d510      total:289  pass:222  dwarn:1   dfail:0   fail:0   skip:66  time:545s
fi-skl-6260u     total:289  pass:267  dwarn:0   dfail:0   fail:2   skip:20  time:465s
fi-skl-6600u     total:289  pass:260  dwarn:0   dfail:0   fail:2   skip:27  time:598s
fi-skl-6700hq    total:289  pass:261  dwarn:0   dfail:0   fail:2   skip:26  time:660s
fi-skl-6700k     total:289  pass:263  dwarn:0   dfail:0   fail:2   skip:24  time:535s
fi-skl-6770hq    total:289  pass:267  dwarn:0   dfail:0   fail:2   skip:20  time:515s
fi-skl-gvtdvm    total:289  pass:266  dwarn:0   dfail:0   fail:0   skip:23  time:458s
fi-snb-2520m     total:289  pass:250  dwarn:0   dfail:0   fail:0   skip:39  time:559s
fi-snb-2600      total:289  pass:249  dwarn:0   dfail:0   fail:0   skip:40  time:415s
fi-gdg-551 failed to connect after reboot

5cbec54b8fde4142d7e3f09e62fc9e17fb9fe516 drm-tip: 2017y-10m-31d-00h-01m-01s UTC integration manifest
ca8a42579aef i915/drrs/debugfs: module param and psr status
c958c8e33a91 drm/i915: Runtime disable for eDP DRRS

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_6273/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage
  2017-09-19 18:12     ` Rodrigo Vivi
                         ` (2 preceding siblings ...)
  2017-10-31  9:48       ` ✓ Fi.CI.BAT: success " Patchwork
@ 2017-10-31 10:33       ` Patchwork
  2017-11-08  7:26       ` ✓ Fi.CI.BAT: success for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev3) Patchwork
                         ` (16 subsequent siblings)
  20 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2017-10-31 10:33 UTC (permalink / raw)
  To: Ramalingam C; +Cc: intel-gfx

== Series Details ==

Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage
URL   : https://patchwork.freedesktop.org/series/32888/
State : warning

== Summary ==

IGT patchset tested on top of latest successful build
7aac0e88606ce453b111ce80419dc58519db05ad assembler: Fix bashism in run-test.sh

with latest DRM-Tip kernel build CI_DRM_3300
dfe1410689e6 drm-tip: 2017y-10m-31d-09h-42m-59s UTC integration manifest

Testlist changes:
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-move
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-onoff
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-indfb-msflip-blt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-indfb-pgflip-blt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-indfb-plflip-blt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-msflip-blt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-pgflip-blt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-plflip-blt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-fullscreen
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-move
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-onoff
+igt@kms_frontbuffer_tracking@drrs-1p-pri-indfb-multidraw
+igt@kms_frontbuffer_tracking@drrs-1p-rte
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-move
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-onoff
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-msflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-pgflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-plflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-shrfb-msflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-shrfb-pgflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-shrfb-plflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-fullscreen
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-move
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-onoff
+igt@kms_frontbuffer_tracking@drrs-2p-pri-indfb-multidraw
+igt@kms_frontbuffer_tracking@drrs-2p-rte
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-move
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-onoff
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-indfb-msflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-indfb-pgflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-indfb-plflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-shrfb-msflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-shrfb-pgflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-shrfb-plflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-fullscreen
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-move
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-onoff
+igt@kms_frontbuffer_tracking@drrs-farfromfence
+igt@kms_frontbuffer_tracking@drrs-indfb-scaledprimary
+igt@kms_frontbuffer_tracking@drrs-modesetfrombusy
+igt@kms_frontbuffer_tracking@drrs-rgb565-draw-blt
+igt@kms_frontbuffer_tracking@drrs-rgb565-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-rgb565-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-rgb565-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-rgb565-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-rgb565-draw-render
+igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-blt
+igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-render
+igt@kms_frontbuffer_tracking@drrs-shrfb-scaledprimary
+igt@kms_frontbuffer_tracking@drrs-slowdraw
+igt@kms_frontbuffer_tracking@drrs-suspend
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-indfb-fliptrack
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-move
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-onoff
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-indfb-msflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-indfb-pgflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-indfb-plflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-shrfb-msflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-shrfb-pgflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-shrfb-plflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-fullscreen
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-move
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-onoff
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-pri-indfb-multidraw
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-rte
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-shrfb-fliptrack
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-indfb-fliptrack
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-move
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-onoff
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-indfb-msflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-indfb-pgflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-indfb-plflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-shrfb-msflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-shrfb-pgflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-shrfb-plflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-fullscreen
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-move
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-onoff
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-pri-indfb-multidraw
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-rte
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-move
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-onoff
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-indfb-msflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-indfb-pgflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-indfb-plflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-msflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-pgflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-plflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-fullscreen
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-move
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-onoff
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-shrfb-fliptrack
+igt@kms_frontbuffer_tracking@fbcdrrs-badstride
+igt@kms_frontbuffer_tracking@fbcdrrs-farfromfence
+igt@kms_frontbuffer_tracking@fbcdrrs-indfb-scaledprimary
+igt@kms_frontbuffer_tracking@fbcdrrs-modesetfrombusy
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-shrfb-scaledprimary
+igt@kms_frontbuffer_tracking@fbcdrrs-slowdraw
+igt@kms_frontbuffer_tracking@fbcdrrs-stridechange
+igt@kms_frontbuffer_tracking@fbcdrrs-suspend
+igt@kms_frontbuffer_tracking@fbcdrrs-tilingchange

Test kms_frontbuffer_tracking:
        Subgroup basic:
                pass       -> SKIP       (fi-snb-2520m)
                pass       -> SKIP       (fi-snb-2600)
                pass       -> SKIP       (fi-ivb-3520m)
                pass       -> SKIP       (fi-ivb-3770)
                pass       -> SKIP       (fi-byt-j1900)
                pass       -> SKIP       (fi-hsw-4770)
                pass       -> SKIP       (fi-hsw-4770r)
                pass       -> SKIP       (fi-bdw-5557u) fdo#102473
                pass       -> SKIP       (fi-bdw-gvtdvm)
                pass       -> SKIP       (fi-bsw-n3050)
                pass       -> SKIP       (fi-skl-6260u)
                pass       -> SKIP       (fi-skl-6600u)
     

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_449/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 1/2] drm/i915: Runtime disable for eDP DRRS
  2017-10-31  9:20         ` [PATCH 1/2] drm/i915: Runtime disable for eDP DRRS Ramalingam C
@ 2017-10-31 18:57           ` Rodrigo Vivi
  2017-11-01 16:44             ` C, Ramalingam
  0 siblings, 1 reply; 59+ messages in thread
From: Rodrigo Vivi @ 2017-10-31 18:57 UTC (permalink / raw)
  To: Ramalingam C; +Cc: intel-gfx, paulo.r.zanoni

On Tue, Oct 31, 2017 at 09:20:42AM +0000, Ramalingam C wrote:
> From: "C, Ramalingam" <ramalingam.c@intel.com>
> 
> Module parameter enable_drrs(Boolean flag) is added to control the
> eDP Idleness drrs enable flow.

This goes on the opposite direction of the current trends.

Well, I'm a big fan of the parameters, but there's a big effort
going on to remove all kernel parameters. I believe it will
be just a matter of time that we have to remove fbc and psr as well.
So probably not a good idea to add something now that we will
have to rework soon.

Maybe we could add a on/off toggle on DRRS now and then
when we remove the parameter for fbc and psr we also add toggles
on debugfs...

Thanks,
Rodrigo.

> 
> Modification to this module parameter will be considered on next
> eDP_DRRS enable flow. So after module parameter update, a modeset
> will help to modify the feature state as per the module parameter's
> current state.
> 
> Possibility of disabling the DRRS, enables the testing of the
> frontbuffer tracking based features (FBC, DRRS and PSR) as standalone
> or any combination of the set.
> 
> Signed-off-by: C, Ramalingam <ramalingam.c@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_params.c | 3 +++
>  drivers/gpu/drm/i915/i915_params.h | 3 ++-
>  drivers/gpu/drm/i915/intel_dp.c    | 6 ++++++
>  3 files changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
> index b4faeb6aa2bd..32f06bb74f9d 100644
> --- a/drivers/gpu/drm/i915/i915_params.c
> +++ b/drivers/gpu/drm/i915/i915_params.c
> @@ -190,3 +190,6 @@ i915_param_named(enable_dpcd_backlight, bool, 0600,
>  
>  i915_param_named(enable_gvt, bool, 0400,
>  	"Enable support for Intel GVT-g graphics virtualization host support(default:false)");
> +
> +i915_param_named_unsafe(enable_drrs, bool, 0600,
> +	"Enable DRRS. (True=Enabled, False=Disabled [Default])");
> diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
> index c7292268ed43..3c6fdce1c122 100644
> --- a/drivers/gpu/drm/i915/i915_params.h
> +++ b/drivers/gpu/drm/i915/i915_params.h
> @@ -67,7 +67,8 @@
>  	param(bool, nuclear_pageflip, false) \
>  	param(bool, enable_dp_mst, true) \
>  	param(bool, enable_dpcd_backlight, false) \
> -	param(bool, enable_gvt, false)
> +	param(bool, enable_gvt, false) \
> +	param(bool, enable_drrs, false)
>  
>  #define MEMBER(T, member, ...) T member;
>  struct i915_params {
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index ca48bce23a6f..ff9964cf15cd 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -5568,6 +5568,11 @@ void intel_edp_drrs_enable(struct intel_dp *intel_dp,
>  		return;
>  	}
>  
> +	if (!i915_modparams.enable_drrs) {
> +		DRM_DEBUG_KMS("DRRS is disabled from modparams\n");
> +		return;
> +	}
> +
>  	mutex_lock(&dev_priv->drrs.mutex);
>  	if (WARN_ON(dev_priv->drrs.dp)) {
>  		DRM_ERROR("DRRS already enabled\n");
> @@ -5817,6 +5822,7 @@ intel_dp_drrs_init(struct intel_connector *intel_connector,
>  	}
>  
>  	dev_priv->drrs.type = dev_priv->vbt.drrs_type;
> +	i915_modparams.enable_drrs = true;
>  
>  	dev_priv->drrs.refresh_rate_type = DRRS_HIGH_RR;
>  	DRM_DEBUG_KMS("seamless DRRS supported for eDP panel.\n");
> -- 
> 2.7.4
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 1/2] drm/i915: Runtime disable for eDP DRRS
  2017-10-31 18:57           ` Rodrigo Vivi
@ 2017-11-01 16:44             ` C, Ramalingam
  2017-11-07 18:38               ` [PATCH v2 " Ramalingam C
  0 siblings, 1 reply; 59+ messages in thread
From: C, Ramalingam @ 2017-11-01 16:44 UTC (permalink / raw)
  To: Vivi, Rodrigo; +Cc: intel-gfx, Zanoni, Paulo R


> -----Original Message-----
> From: Vivi, Rodrigo
> Sent: Wednesday, November 1, 2017 12:27 AM
> To: C, Ramalingam <ramalingam.c@intel.com>
> Cc: intel-gfx@lists.freedesktop.org; Zanoni, Paulo R
> <paulo.r.zanoni@intel.com>; chris@chris-wilson.co.uk
> Subject: Re: [PATCH 1/2] drm/i915: Runtime disable for eDP DRRS
> 
> On Tue, Oct 31, 2017 at 09:20:42AM +0000, Ramalingam C wrote:
> > From: "C, Ramalingam" <ramalingam.c@intel.com>
> >
> > Module parameter enable_drrs(Boolean flag) is added to control the
> > eDP Idleness drrs enable flow.
> 
> This goes on the opposite direction of the current trends.
> 
> Well, I'm a big fan of the parameters, but there's a big effort
> going on to remove all kernel parameters. I believe it will
> be just a matter of time that we have to remove fbc and psr as well.
> So probably not a good idea to add something now that we will
> have to rework soon.
> 
> Maybe we could add a on/off toggle on DRRS now and then
> when we remove the parameter for fbc and psr we also add toggles
> on debugfs...

Based on our offline discussion, I will use the debugfs to toggle the DRRS instead of modparams.
Once the code is ready I will share it for the review.

Thanks
--Ram
> 
> Thanks,
> Rodrigo.
> 
> >
> > Modification to this module parameter will be considered on next
> > eDP_DRRS enable flow. So after module parameter update, a modeset
> > will help to modify the feature state as per the module parameter's
> > current state.
> >
> > Possibility of disabling the DRRS, enables the testing of the
> > frontbuffer tracking based features (FBC, DRRS and PSR) as standalone
> > or any combination of the set.
> >
> > Signed-off-by: C, Ramalingam <ramalingam.c@intel.com>
> > ---
> >  drivers/gpu/drm/i915/i915_params.c | 3 +++
> >  drivers/gpu/drm/i915/i915_params.h | 3 ++-
> >  drivers/gpu/drm/i915/intel_dp.c    | 6 ++++++
> >  3 files changed, 11 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_params.c
> b/drivers/gpu/drm/i915/i915_params.c
> > index b4faeb6aa2bd..32f06bb74f9d 100644
> > --- a/drivers/gpu/drm/i915/i915_params.c
> > +++ b/drivers/gpu/drm/i915/i915_params.c
> > @@ -190,3 +190,6 @@ i915_param_named(enable_dpcd_backlight, bool,
> 0600,
> >
> >  i915_param_named(enable_gvt, bool, 0400,
> >  	"Enable support for Intel GVT-g graphics virtualization host
> support(default:false)");
> > +
> > +i915_param_named_unsafe(enable_drrs, bool, 0600,
> > +	"Enable DRRS. (True=Enabled, False=Disabled [Default])");
> > diff --git a/drivers/gpu/drm/i915/i915_params.h
> b/drivers/gpu/drm/i915/i915_params.h
> > index c7292268ed43..3c6fdce1c122 100644
> > --- a/drivers/gpu/drm/i915/i915_params.h
> > +++ b/drivers/gpu/drm/i915/i915_params.h
> > @@ -67,7 +67,8 @@
> >  	param(bool, nuclear_pageflip, false) \
> >  	param(bool, enable_dp_mst, true) \
> >  	param(bool, enable_dpcd_backlight, false) \
> > -	param(bool, enable_gvt, false)
> > +	param(bool, enable_gvt, false) \
> > +	param(bool, enable_drrs, false)
> >
> >  #define MEMBER(T, member, ...) T member;
> >  struct i915_params {
> > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> > index ca48bce23a6f..ff9964cf15cd 100644
> > --- a/drivers/gpu/drm/i915/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > @@ -5568,6 +5568,11 @@ void intel_edp_drrs_enable(struct intel_dp
> *intel_dp,
> >  		return;
> >  	}
> >
> > +	if (!i915_modparams.enable_drrs) {
> > +		DRM_DEBUG_KMS("DRRS is disabled from modparams\n");
> > +		return;
> > +	}
> > +
> >  	mutex_lock(&dev_priv->drrs.mutex);
> >  	if (WARN_ON(dev_priv->drrs.dp)) {
> >  		DRM_ERROR("DRRS already enabled\n");
> > @@ -5817,6 +5822,7 @@ intel_dp_drrs_init(struct intel_connector
> *intel_connector,
> >  	}
> >
> >  	dev_priv->drrs.type = dev_priv->vbt.drrs_type;
> > +	i915_modparams.enable_drrs = true;
> >
> >  	dev_priv->drrs.refresh_rate_type = DRRS_HIGH_RR;
> >  	DRM_DEBUG_KMS("seamless DRRS supported for eDP panel.\n");
> > --
> > 2.7.4
> >
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH v2 1/2] drm/i915: Runtime disable for eDP DRRS
  2017-11-01 16:44             ` C, Ramalingam
@ 2017-11-07 18:38               ` Ramalingam C
  2017-11-17 18:53                 ` Rodrigo Vivi
  0 siblings, 1 reply; 59+ messages in thread
From: Ramalingam C @ 2017-11-07 18:38 UTC (permalink / raw)
  To: paulo.r.zanoni, rodrigo.vivi, intel-gfx

From: "C, Ramalingam" <ramalingam.c@intel.com>

Debugfs called i915_drrs_ctl is added to enable and disable the
eDP DRRS. Writing 0 will disable the feature, whereas non-zero
will enable the feature.

Possibility of disabling the DRRS, enables the testing of the
frontbuffer tracking based features (FBC, DRRS and PSR) as
standalone or any combination of the set.

[v2]: ctl interface is moved from module parameter to debugfs [Rodrigo]

Signed-off-by: C, Ramalingam <ramalingam.c@intel.com>
---
 drivers/gpu/drm/i915/i915_debugfs.c | 43 ++++++++++++++++++++++++++++++++++++-
 1 file changed, 42 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 0bb6e01121fc..0c1501fe4c9f 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -4747,6 +4747,46 @@ static const struct file_operations i915_hpd_storm_ctl_fops = {
 	.write = i915_hpd_storm_ctl_write
 };
 
+static int i915_drrs_ctl_set(void *data, u64 val)
+{
+	struct drm_i915_private *dev_priv = data;
+	struct drm_device *dev = &dev_priv->drm;
+	struct intel_crtc *intel_crtc;
+	struct intel_encoder *encoder;
+	struct intel_dp *intel_dp;
+
+	if (INTEL_GEN(dev_priv) < 7)
+		return -ENODEV;
+
+	drm_modeset_lock_all(dev);
+	for_each_intel_crtc(dev, intel_crtc) {
+		if (!intel_crtc->base.state->active ||
+					!intel_crtc->config->has_drrs)
+			continue;
+
+		for_each_encoder_on_crtc(dev, &intel_crtc->base, encoder) {
+			if (encoder->type != INTEL_OUTPUT_EDP)
+				continue;
+
+			DRM_DEBUG_DRIVER("Manually %sabling DRRS. %llu\n",
+						val ? "en" : "dis", val);
+
+			intel_dp = enc_to_intel_dp(&encoder->base);
+			if (val)
+				intel_edp_drrs_enable(intel_dp,
+							intel_crtc->config);
+			else
+				intel_edp_drrs_disable(intel_dp,
+							intel_crtc->config);
+		}
+	}
+	drm_modeset_unlock_all(dev);
+
+	return 0;
+}
+
+DEFINE_SIMPLE_ATTRIBUTE(i915_drrs_ctl_fops, NULL, i915_drrs_ctl_set, "%llu\n");
+
 static const struct drm_info_list i915_debugfs_list[] = {
 	{"i915_capabilities", i915_capabilities, 0},
 	{"i915_gem_objects", i915_gem_object_info, 0},
@@ -4828,7 +4868,8 @@ static const struct i915_debugfs_files {
 	{"i915_dp_test_active", &i915_displayport_test_active_fops},
 	{"i915_guc_log_control", &i915_guc_log_control_fops},
 	{"i915_hpd_storm_ctl", &i915_hpd_storm_ctl_fops},
-	{"i915_ipc_status", &i915_ipc_status_fops}
+	{"i915_ipc_status", &i915_ipc_status_fops},
+	{"i915_drrs_ctl", &i915_drrs_ctl_fops}
 };
 
 int i915_debugfs_register(struct drm_i915_private *dev_priv)
-- 
2.7.4

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

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

* [PATCH v2 2/2] i915/drrs/debugfs: crtc id and psr status
  2017-10-31  9:20         ` [PATCH 2/2] i915/drrs/debugfs: module param and psr status Ramalingam C
@ 2017-11-07 18:40           ` Ramalingam C
  2017-11-17 18:56             ` Rodrigo Vivi
  0 siblings, 1 reply; 59+ messages in thread
From: Ramalingam C @ 2017-11-07 18:40 UTC (permalink / raw)
  To: paulo.r.zanoni, rodrigo.vivi, chris, intel-gfx

From: "C, Ramalingam" <ramalingam.c@intel.com>

Existing debugfs entry i915_drrs_status is updated with crtc id and
if PSR is cause for DRRS disabled state.

[v2]: Dropped the module parameter details as ctl moved from module
      parameter to debugfs. [Rodrigo]

Signed-off-by: C, Ramalingam <ramalingam.c@intel.com>
---
 drivers/gpu/drm/i915/i915_debugfs.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 0c1501fe4c9f..6c2e8346b9a7 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -3567,7 +3567,10 @@ static void drrs_status_per_crtc(struct seq_file *m,
 
 		/* disable_drrs() will make drrs->dp NULL */
 		if (!drrs->dp) {
-			seq_puts(m, "Idleness DRRS: Disabled");
+			seq_puts(m, "Idleness DRRS: Disabled\n");
+			if (dev_priv->psr.enabled)
+				seq_puts(m,
+				"\tAs PSR is enabled, DRRS is not enabled\n");
 			mutex_unlock(&drrs->mutex);
 			return;
 		}
@@ -3611,7 +3614,7 @@ static int i915_drrs_status(struct seq_file *m, void *unused)
 	for_each_intel_crtc(dev, intel_crtc) {
 		if (intel_crtc->base.state->active) {
 			active_crtc_cnt++;
-			seq_printf(m, "\nCRTC %d:  ", active_crtc_cnt);
+			seq_printf(m, "\nCRTC %d: ", intel_crtc->base.base.id);
 
 			drrs_status_per_crtc(m, dev, intel_crtc);
 		}
-- 
2.7.4

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

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

* ✓ Fi.CI.BAT: success for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev3)
  2017-09-19 18:12     ` Rodrigo Vivi
                         ` (3 preceding siblings ...)
  2017-10-31 10:33       ` ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage Patchwork
@ 2017-11-08  7:26       ` Patchwork
  2017-11-08  8:11       ` ✗ Fi.CI.IGT: warning " Patchwork
                         ` (15 subsequent siblings)
  20 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2017-11-08  7:26 UTC (permalink / raw)
  To: Ramalingam C; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev3)
URL   : https://patchwork.freedesktop.org/series/32887/
State : success

== Summary ==

Series 32887v3 series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS
https://patchwork.freedesktop.org/api/1.0/series/32887/revisions/3/mbox/

Test core_auth:
        Subgroup basic-auth:
                pass       -> DMESG-WARN (fi-bsw-n3050) fdo#103479
Test gem_exec_reloc:
        Subgroup basic-cpu-gtt-active:
                pass       -> FAIL       (fi-gdg-551) fdo#102582 +1
Test kms_cursor_legacy:
        Subgroup basic-busy-flip-before-cursor-legacy:
                pass       -> FAIL       (fi-gdg-551) fdo#102618
Test kms_pipe_crc_basic:
        Subgroup read-crc-pipe-b:
                skip       -> PASS       (fi-hsw-4770r)

fdo#103479 https://bugs.freedesktop.org/show_bug.cgi?id=103479
fdo#102582 https://bugs.freedesktop.org/show_bug.cgi?id=102582
fdo#102618 https://bugs.freedesktop.org/show_bug.cgi?id=102618

fi-bdw-5557u     total:289  pass:268  dwarn:0   dfail:0   fail:0   skip:21  time:451s
fi-bdw-gvtdvm    total:289  pass:265  dwarn:0   dfail:0   fail:0   skip:24  time:455s
fi-blb-e6850     total:289  pass:223  dwarn:1   dfail:0   fail:0   skip:65  time:380s
fi-bsw-n3050     total:289  pass:242  dwarn:1   dfail:0   fail:0   skip:46  time:544s
fi-bwr-2160      total:289  pass:183  dwarn:0   dfail:0   fail:0   skip:106 time:276s
fi-bxt-dsi       total:289  pass:259  dwarn:0   dfail:0   fail:0   skip:30  time:507s
fi-bxt-j4205     total:289  pass:260  dwarn:0   dfail:0   fail:0   skip:29  time:504s
fi-byt-j1900     total:289  pass:253  dwarn:1   dfail:0   fail:0   skip:35  time:513s
fi-byt-n2820     total:289  pass:249  dwarn:1   dfail:0   fail:0   skip:39  time:487s
fi-cfl-s         total:289  pass:254  dwarn:3   dfail:0   fail:0   skip:32  time:553s
fi-cnl-y         total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:608s
fi-elk-e7500     total:289  pass:229  dwarn:0   dfail:0   fail:0   skip:60  time:430s
fi-gdg-551       total:289  pass:175  dwarn:1   dfail:0   fail:4   skip:109 time:271s
fi-glk-1         total:289  pass:261  dwarn:0   dfail:0   fail:0   skip:28  time:588s
fi-glk-dsi       total:289  pass:258  dwarn:0   dfail:0   fail:1   skip:30  time:492s
fi-hsw-4770      total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:431s
fi-hsw-4770r     total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:434s
fi-ilk-650       total:289  pass:228  dwarn:0   dfail:0   fail:0   skip:61  time:427s
fi-ivb-3520m     total:289  pass:260  dwarn:0   dfail:0   fail:0   skip:29  time:500s
fi-ivb-3770      total:289  pass:260  dwarn:0   dfail:0   fail:0   skip:29  time:459s
fi-kbl-7500u     total:289  pass:264  dwarn:1   dfail:0   fail:0   skip:24  time:502s
fi-kbl-7560u     total:289  pass:270  dwarn:0   dfail:0   fail:0   skip:19  time:575s
fi-kbl-7567u     total:289  pass:269  dwarn:0   dfail:0   fail:0   skip:20  time:480s
fi-kbl-r         total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:588s
fi-pnv-d510      total:289  pass:222  dwarn:1   dfail:0   fail:0   skip:66  time:571s
fi-skl-6260u     total:289  pass:269  dwarn:0   dfail:0   fail:0   skip:20  time:454s
fi-skl-6600u     total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:591s
fi-skl-6700hq    total:289  pass:263  dwarn:0   dfail:0   fail:0   skip:26  time:652s
fi-skl-6700k     total:289  pass:265  dwarn:0   dfail:0   fail:0   skip:24  time:518s
fi-skl-6770hq    total:289  pass:269  dwarn:0   dfail:0   fail:0   skip:20  time:506s
fi-skl-gvtdvm    total:289  pass:266  dwarn:0   dfail:0   fail:0   skip:23  time:463s
fi-snb-2520m     total:289  pass:250  dwarn:0   dfail:0   fail:0   skip:39  time:572s
fi-snb-2600      total:289  pass:249  dwarn:0   dfail:0   fail:0   skip:40  time:424s

eb031b266f224a2b9ded3b0b5c425991fea8f8c5 drm-tip: 2017y-11m-07d-14h-27m-25s UTC integration manifest
c3f6b5f63bb0 i915/drrs/debugfs: crtc id and psr status
eb9c483dfade drm/i915: Runtime disable for eDP DRRS

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_6998/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* ✗ Fi.CI.IGT: warning for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev3)
  2017-09-19 18:12     ` Rodrigo Vivi
                         ` (4 preceding siblings ...)
  2017-11-08  7:26       ` ✓ Fi.CI.BAT: success for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev3) Patchwork
@ 2017-11-08  8:11       ` Patchwork
  2017-11-10 16:49       ` ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev2) Patchwork
                         ` (14 subsequent siblings)
  20 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2017-11-08  8:11 UTC (permalink / raw)
  To: Ramalingam C; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev3)
URL   : https://patchwork.freedesktop.org/series/32887/
State : warning

== Summary ==

Test kms_setmode:
        Subgroup basic:
                fail       -> PASS       (shard-hsw) fdo#99912
Test drv_module_reload:
        Subgroup basic-reload:
                dmesg-warn -> PASS       (shard-hsw) fdo#102707
Test kms_cursor_crc:
        Subgroup cursor-128x42-offscreen:
                pass       -> SKIP       (shard-hsw)
Test drm_read:
        Subgroup invalid-buffer:
                pass       -> SKIP       (shard-hsw)

fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912
fdo#102707 https://bugs.freedesktop.org/show_bug.cgi?id=102707

shard-hsw        total:2540 pass:1431 dwarn:1   dfail:0   fail:9   skip:1099 time:9230s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_6998/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH i-g-t] Idleness DRRS:
  2017-10-31  9:20         ` [PATCH i-g-t] tests/kms_frontbuffer_tracking: Idleness DRRS coverage Ramalingam C
@ 2017-11-10 16:22           ` Lohith BS
  2017-12-06 15:13             ` [PATCH i-g-t v8] tests/kms_frontbuffer_tracking: Including DRRS test coverage Lohith BS
  0 siblings, 1 reply; 59+ messages in thread
From: Lohith BS @ 2017-11-10 16:22 UTC (permalink / raw)
  To: paulo.r.zanoni, rodrigo.vivi, chris, intel-gfx; +Cc: ankit.k.nautiyal

        By default the DRRS state will be at DRRS_HIGH_RR. When a Display
        content is Idle for more than 1Sec Idleness will be declared and
        DRRS_LOW_RR will be invoked, changing the refresh rate to the
        lower most refresh rate supported by the panel. As soon as there
        is a display content change there will be a DRRS state transition
        as DRRS_LOW_RR--> DRRS_HIGH_RR, changing the refresh rate to the
        highest refresh rate supported by the panel.

    To test this, Idleness DRRS IGT will probe the DRRS state at below
    instances and compare with the expected state.

        Instance                                        Expected State
    1. Immediately after rendering the still image              DRRS_HIGH_RR
    2. After a delay of 1.2Sec                          DRRS_LOW_RR
    3. After changing the frame buffer                  DRRS_HIGH_RR
    4. After a delay of 1.2Sec                          DRRS_LOW_RR
    5. After changing the frame buffer                  DRRS_HIGH_RR
    6. After a delay of 1.2Sec                          DRRS_LOW_RR

    The test checks the driver DRRS state from the debugfs entry. To check the
    actual refresh-rate, the number of vblanks received per sec.
    The refresh-rate calculated is checked against the expected refresh-rate
    with a tolerance value of 2.

    This patch is a continuation of the earlier work
    https://patchwork.freedesktop.org/patch/45472/ towards igt for idleness

    DRRS. The code is tested on Broxton BXT_T platform.

    v2: Addressed the comments and suggestions from Vlad, Marius.
    The signoff details from the earlier work are also included.

    v3: Modified vblank rate calculation by using reply-sequence, provided by
    drmWaitVBlank, as suggested by Chris Wilson.

    v4: As suggested from Chris Wilson and Daniel Vetter
        1) Avoided using pthread for calculating vblank refresh rate,
           instead used drmWaitVBlank reply sequence.
        2) Avoided using kernel-specific info like transitional delays,
           instead polling mechanism with timeout is used.
        3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
           instead of having a separate test.

    v5: This patch adds DRRS as a new feature in the kms_frontbuffer_tracking IGT.
        DRRS switch to lower vrefresh rate is tested at slow-draw subtest.

        Note:
        1) Currently kernel doesn't have support to enable and disable the DRRS
           feature dynamically(as in case of PSR). Hence if the panel supports
           DRRS it will be enabled by default.

        This is in continuation of last patch "https://patchwork.freedesktop.org/patch/162726/"

    v6: This patch adds runtime enable and disable feature for testing DRRS

    v7: This patch adds runtime enable and disable feature for testing DRRS through debugfs entry
	"i915_drrs_ctl".

Signed-off-by: Lohith BS <lohith.bs@intel.com>
Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
Signed-off-by: Vandana Kannan <vandana.kannan@intel.com>
Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
---
 tests/kms_frontbuffer_tracking.c | 166 +++++++++++++++++++++++++++++++++++----
 1 file changed, 151 insertions(+), 15 deletions(-)

diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
index a068c8a..b06d304 100644
--- a/tests/kms_frontbuffer_tracking.c
+++ b/tests/kms_frontbuffer_tracking.c
@@ -34,7 +34,7 @@
 
 
 IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
-		     "its related features: FBC and PSR");
+			"its related features: FBC, DRRS and PSR");
 
 /*
  * One of the aspects of this test is that, for every subtest, we try different
@@ -105,8 +105,9 @@ struct test_mode {
 		FEATURE_NONE  = 0,
 		FEATURE_FBC   = 1,
 		FEATURE_PSR   = 2,
-		FEATURE_COUNT = 4,
-		FEATURE_DEFAULT = 4,
+		FEATURE_DRRS  = 4,
+		FEATURE_COUNT = 6,
+		FEATURE_DEFAULT = 6,
 	} feature;
 
 	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
@@ -156,6 +157,7 @@ struct rect {
 struct {
 	int fd;
 	int debugfs;
+	int drrs_debugfs_fd;
 	drmModeResPtr res;
 	drmModeConnectorPtr connectors[MAX_CONNECTORS];
 	drmModeEncoderPtr encoders[MAX_ENCODERS];
@@ -178,10 +180,8 @@ struct {
 
 struct {
 	bool can_test;
-} psr = {
-	.can_test = false,
-};
-
+} psr = { .can_test = false,},
+drrs = { .can_test = false,};
 
 #define SINK_CRC_SIZE 12
 typedef struct {
@@ -775,8 +775,8 @@ static bool set_mode_for_params(struct modeset_params *params)
 	int rc;
 
 	rc = drmModeSetCrtc(drm.fd, params->crtc_id, params->fb.fb->fb_id,
-			    params->fb.x, params->fb.y,
-			    &params->connector_id, 1, params->mode);
+				params->fb.x, params->fb.y,
+				&params->connector_id, 1, params->mode);
 	return (rc == 0);
 }
 
@@ -822,6 +822,63 @@ static void psr_print_status(void)
 	igt_info("PSR status:\n%s\n", buf);
 }
 
+void drrs_set(unsigned int val)
+{
+	char buf[16];
+
+	igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val);
+	snprintf(buf, sizeof(buf), "%d", val);
+	igt_assert_eq(write(drm.drrs_debugfs_fd, buf, strlen(buf)), strlen(buf));
+}
+
+static bool is_drrs_high(void)
+{
+	char buf[256];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS_HIGH_RR");
+}
+
+static bool is_drrs_low(void)
+{
+	char buf[256];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS_LOW_RR");
+}
+
+static bool is_drrs_supported(void)
+{
+	char buf[256];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS Supported: Yes");
+}
+
+static bool is_drrs_inactive(void)
+{
+	char buf[256];
+
+	debugfs_read("i915_drrs_status", buf);
+
+	if (strstr(buf, "No active crtc found"))
+		return true;
+	if (strstr(buf, "Idleness DRRS: Disabled"))
+		return true;
+	if (strstr(buf, "DRRS Supported : No"))
+		return true;
+
+	return false;
+}
+
+static void drrs_print_status(void)
+{
+	char buf[256];
+
+	debugfs_read("i915_drrs_status", buf);
+	igt_info("DRRS STATUS :\n%s\n", buf);
+}
+
 static struct timespec fbc_get_last_action(void)
 {
 	struct timespec ret = { 0, 0 };
@@ -932,10 +989,17 @@ static bool psr_wait_until_enabled(void)
 	return igt_wait(psr_is_enabled(), 5000, 1);
 }
 
+static bool drrs_wait_until_rr_switch_to_low(void)
+{
+	return igt_wait(is_drrs_low(), 5000, 1);
+}
+
 #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
 #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
 #define psr_enable() igt_set_module_param_int("enable_psr", 1)
 #define psr_disable() igt_set_module_param_int("enable_psr", 0)
+#define drrs_enable() drrs_set(1)
+#define drrs_disable() drrs_set(0)
 
 static void get_sink_crc(sink_crc_t *crc, bool mandatory)
 {
@@ -1182,6 +1246,7 @@ static void disable_features(const struct test_mode *t)
 
 	fbc_disable();
 	psr_disable();
+	drrs_disable();
 }
 
 static void *busy_thread_func(void *data)
@@ -1506,6 +1571,11 @@ static void teardown_crcs(void)
 	igt_pipe_crc_free(pipe_crc);
 }
 
+static void teardown_drrs(void)
+{
+	if (drm.drrs_debugfs_fd != -1)
+		close(drm.drrs_debugfs_fd);
+}
 static bool fbc_supported_on_chipset(void)
 {
 	char buf[128];
@@ -1575,6 +1645,30 @@ static void teardown_psr(void)
 {
 }
 
+static void setup_drrs(void)
+{
+	int is_drrs_debug_ctl;
+	if (get_connector(prim_mode_params.connector_id)->connector_type !=
+			DRM_MODE_CONNECTOR_eDP) {
+		igt_info("Can't test DRRS: no usable eDP screen.\n");
+		return;
+	}
+
+	if (!is_drrs_supported()) {
+		igt_info("Can't test DRRS: Not supported.\n");
+		return;
+	}
+
+	drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY);
+
+	if (drm.drrs_debugfs_fd > 0) {
+		drrs.can_test = true;
+	} else {
+		igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n");
+		drrs.can_test = false;
+	}
+}
+
 static void setup_environment(void)
 {
 	setup_drm();
@@ -1582,7 +1676,7 @@ static void setup_environment(void)
 
 	setup_fbc();
 	setup_psr();
-
+	setup_drrs();
 	setup_crcs();
 }
 
@@ -1594,6 +1688,7 @@ static void teardown_environment(void)
 	teardown_psr();
 	teardown_fbc();
 	teardown_modeset();
+	teardown_drrs();
 	teardown_drm();
 }
 
@@ -1660,6 +1755,11 @@ static void do_flush(const struct test_mode *t)
 #define ASSERT_PSR_ENABLED		(1 << 6)
 #define ASSERT_PSR_DISABLED		(1 << 7)
 
+#define DRRS_ASSERT_FLAGS               (7 << 8)
+#define ASSERT_DRRS_HIGH                (1 << 8)
+#define ASSERT_DRRS_LOW                 (1 << 9)
+#define ASSERT_DRRS_INACTIVE            (1 << 10)
+
 static int adjust_assertion_flags(const struct test_mode *t, int flags)
 {
 	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
@@ -1667,12 +1767,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
 			flags |= ASSERT_FBC_ENABLED;
 		if (!(flags & ASSERT_PSR_DISABLED))
 			flags |= ASSERT_PSR_ENABLED;
+		if (!((flags & ASSERT_DRRS_LOW) || (flags & ASSERT_DRRS_INACTIVE))) {
+			flags |= ASSERT_DRRS_HIGH;
+		}
 	}
 
 	if ((t->feature & FEATURE_FBC) == 0)
 		flags &= ~FBC_ASSERT_FLAGS;
 	if ((t->feature & FEATURE_PSR) == 0)
 		flags &= ~PSR_ASSERT_FLAGS;
+	if ((t->feature & FEATURE_DRRS) == 0)
+		flags &= ~DRRS_ASSERT_FLAGS;
 
 	return flags;
 }
@@ -1704,6 +1809,23 @@ static void do_status_assertions(int flags)
 		return;
 	}
 
+	if (flags & ASSERT_DRRS_HIGH) {
+		if (!is_drrs_high()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS HIGH\n");
+		}
+	} else if (flags & ASSERT_DRRS_LOW) {
+		if (!drrs_wait_until_rr_switch_to_low()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS LOW\n");
+		}
+	} else if (flags & ASSERT_DRRS_INACTIVE) {
+		if (!is_drrs_inactive()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS INACTIVE\n");
+		}
+	}
+
 	if (flags & ASSERT_FBC_ENABLED) {
 		igt_require(!fbc_not_enough_stolen());
 		igt_require(!fbc_stride_not_supported());
@@ -1831,6 +1953,8 @@ static void enable_features_for_test(const struct test_mode *t)
 		fbc_enable();
 	if (t->feature & FEATURE_PSR)
 		psr_enable();
+	if (t->feature & FEATURE_DRRS)
+		drrs_enable();
 }
 
 static void check_test_requirements(const struct test_mode *t)
@@ -1850,6 +1974,10 @@ static void check_test_requirements(const struct test_mode *t)
 			      "Can't test PSR without sink CRCs\n");
 	}
 
+	if (t->feature & FEATURE_DRRS)
+		igt_require_f(drrs.can_test,
+				"Can't test DRRS with the current outputs\n");
+
 	if (opt.only_pipes != PIPE_COUNT)
 		igt_require(t->pipes == opt.only_pipes);
 }
@@ -1971,7 +2099,7 @@ static void rte_subtest(const struct test_mode *t)
 
 	unset_all_crtcs();
 	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
-		      DONT_ASSERT_CRC);
+		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
 
 	enable_prim_screen_and_wait(t);
 	set_cursor_for_test(t, &prim_mode_params);
@@ -2219,6 +2347,7 @@ static void badformat_subtest(const struct test_mode *t)
 		assertions |= ASSERT_FBC_DISABLED;
 	if (!psr_valid)
 		assertions |= ASSERT_PSR_DISABLED;
+
 	do_assertions(assertions);
 }
 
@@ -2277,7 +2406,11 @@ static void slow_draw_subtest(const struct test_mode *t)
 		sleep(2);
 
 		update_wanted_crc(t, &pattern->crcs[t->format][r]);
-		do_assertions(0);
+
+		if (t->feature & FEATURE_DRRS)
+			do_assertions(ASSERT_DRRS_LOW);
+		else
+			do_assertions(0);
 	}
 }
 
@@ -2892,8 +3025,7 @@ static void suspend_subtest(const struct test_mode *t)
 	sleep(5);
 	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
 	sleep(5);
-	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
-		      DONT_ASSERT_CRC);
+	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | DONT_ASSERT_CRC);
 
 	set_mode_for_params(params);
 	do_assertions(0);
@@ -3375,6 +3507,10 @@ static const char *feature_str(int feature)
 		return "psr";
 	case FEATURE_FBC | FEATURE_PSR:
 		return "fbcpsr";
+	case FEATURE_DRRS:
+		return "drrs";
+	case FEATURE_FBC | FEATURE_DRRS:
+		return "fbcdrrs";
 	default:
 		igt_assert(false);
 	}
@@ -3639,7 +3775,7 @@ int main(int argc, char *argv[])
 				tilingchange_subtest(&t);
 		}
 
-		if (t.feature & FEATURE_PSR)
+		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
 			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
 				slow_draw_subtest(&t);
 
-- 
1.9.1

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

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

* ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev2)
  2017-09-19 18:12     ` Rodrigo Vivi
                         ` (5 preceding siblings ...)
  2017-11-08  8:11       ` ✗ Fi.CI.IGT: warning " Patchwork
@ 2017-11-10 16:49       ` Patchwork
  2017-11-20  4:46       ` ✗ Fi.CI.BAT: warning for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4) Patchwork
                         ` (13 subsequent siblings)
  20 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2017-11-10 16:49 UTC (permalink / raw)
  To: Lohith BS; +Cc: intel-gfx

== Series Details ==

Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev2)
URL   : https://patchwork.freedesktop.org/series/32888/
State : warning

== Summary ==

IGT patchset tested on top of latest successful build
7d75119b7f23fb49af52463da9bcd62e64fe6a6f lib: Always enable ftrace-dump-on-oops

with latest DRM-Tip kernel build CI_DRM_3331
6f3dca38f7a9 drm-tip: 2017y-11m-10d-12h-56m-44s UTC integration manifest

Testlist changes:
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-move
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-onoff
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-indfb-msflip-blt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-indfb-pgflip-blt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-indfb-plflip-blt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-msflip-blt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-pgflip-blt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-plflip-blt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-fullscreen
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-move
+igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-onoff
+igt@kms_frontbuffer_tracking@drrs-1p-pri-indfb-multidraw
+igt@kms_frontbuffer_tracking@drrs-1p-rte
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-move
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-onoff
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-msflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-pgflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-plflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-shrfb-msflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-shrfb-pgflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-shrfb-plflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-fullscreen
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-move
+igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-onoff
+igt@kms_frontbuffer_tracking@drrs-2p-pri-indfb-multidraw
+igt@kms_frontbuffer_tracking@drrs-2p-rte
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-move
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-onoff
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-indfb-msflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-indfb-pgflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-indfb-plflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-shrfb-msflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-shrfb-pgflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-shrfb-plflip-blt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-blt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-render
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-fullscreen
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-move
+igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-onoff
+igt@kms_frontbuffer_tracking@drrs-farfromfence
+igt@kms_frontbuffer_tracking@drrs-indfb-scaledprimary
+igt@kms_frontbuffer_tracking@drrs-modesetfrombusy
+igt@kms_frontbuffer_tracking@drrs-rgb565-draw-blt
+igt@kms_frontbuffer_tracking@drrs-rgb565-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-rgb565-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-rgb565-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-rgb565-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-rgb565-draw-render
+igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-blt
+igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-wc
+igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-pwrite
+igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-render
+igt@kms_frontbuffer_tracking@drrs-shrfb-scaledprimary
+igt@kms_frontbuffer_tracking@drrs-slowdraw
+igt@kms_frontbuffer_tracking@drrs-suspend
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-indfb-fliptrack
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-move
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-onoff
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-indfb-msflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-indfb-pgflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-indfb-plflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-shrfb-msflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-shrfb-pgflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-shrfb-plflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-fullscreen
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-move
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-onoff
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-pri-indfb-multidraw
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-rte
+igt@kms_frontbuffer_tracking@fbcdrrs-1p-shrfb-fliptrack
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-indfb-fliptrack
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-move
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-onoff
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-indfb-msflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-indfb-pgflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-indfb-plflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-shrfb-msflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-shrfb-pgflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-shrfb-plflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-fullscreen
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-move
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-onoff
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-pri-indfb-multidraw
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-rte
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-move
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-onoff
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-indfb-msflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-indfb-pgflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-indfb-plflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-msflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-pgflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-plflip-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-fullscreen
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-move
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-onoff
+igt@kms_frontbuffer_tracking@fbcdrrs-2p-shrfb-fliptrack
+igt@kms_frontbuffer_tracking@fbcdrrs-badstride
+igt@kms_frontbuffer_tracking@fbcdrrs-farfromfence
+igt@kms_frontbuffer_tracking@fbcdrrs-indfb-scaledprimary
+igt@kms_frontbuffer_tracking@fbcdrrs-modesetfrombusy
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-blt
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-mmap-cpu
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-mmap-gtt
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-mmap-wc
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-pwrite
+igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-render
+igt@kms_frontbuffer_tracking@fbcdrrs-shrfb-scaledprimary
+igt@kms_frontbuffer_tracking@fbcdrrs-slowdraw
+igt@kms_frontbuffer_tracking@fbcdrrs-stridechange
+igt@kms_frontbuffer_tracking@fbcdrrs-suspend
+igt@kms_frontbuffer_tracking@fbcdrrs-tilingchange

Test gem_exec_suspend:
        Subgroup basic-s3:
                dmesg-fail -> PASS       (fi-kbl-7560u) fdo#103039
        Subgroup basic-s4-devices:
                dmesg-fail -> PASS       (fi-kbl-7560u) fdo#102846
Test gem_flink_basic:
        Subgroup bad-flink:
                dmesg-warn -> PASS       (fi-kbl-7560u) fdo#103049 +4
Test gem_linear_blits:
        Subgroup basic:
                incomplete -> PASS       (fi-kbl-7560u) fdo#103163
Test kms_frontbuffer_tracking:
        Subgroup basic:
                pass       -> SKIP       (fi-snb-2520m)
                pass       -> SKIP       (fi-snb-2600)
                pass       -> SKIP       (fi-ivb-3520m)
                pass       -> SKIP       (fi-ivb-3770)
          

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_490/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v2 1/2] drm/i915: Runtime disable for eDP DRRS
  2017-11-07 18:38               ` [PATCH v2 " Ramalingam C
@ 2017-11-17 18:53                 ` Rodrigo Vivi
  2017-11-19 14:55                   ` C, Ramalingam
  0 siblings, 1 reply; 59+ messages in thread
From: Rodrigo Vivi @ 2017-11-17 18:53 UTC (permalink / raw)
  To: Ramalingam C; +Cc: intel-gfx, paulo.r.zanoni

On Tue, Nov 07, 2017 at 06:38:23PM +0000, Ramalingam C wrote:
> From: "C, Ramalingam" <ramalingam.c@intel.com>
> 
> Debugfs called i915_drrs_ctl is added to enable and disable the
> eDP DRRS. Writing 0 will disable the feature, whereas non-zero
> will enable the feature.
> 
> Possibility of disabling the DRRS, enables the testing of the
> frontbuffer tracking based features (FBC, DRRS and PSR) as
> standalone or any combination of the set.
> 
> [v2]: ctl interface is moved from module parameter to debugfs [Rodrigo]

Thanks

> 
> Signed-off-by: C, Ramalingam <ramalingam.c@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_debugfs.c | 43 ++++++++++++++++++++++++++++++++++++-
>  1 file changed, 42 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index 0bb6e01121fc..0c1501fe4c9f 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -4747,6 +4747,46 @@ static const struct file_operations i915_hpd_storm_ctl_fops = {
>  	.write = i915_hpd_storm_ctl_write
>  };
>  
> +static int i915_drrs_ctl_set(void *data, u64 val)
> +{
> +	struct drm_i915_private *dev_priv = data;
> +	struct drm_device *dev = &dev_priv->drm;
> +	struct intel_crtc *intel_crtc;
> +	struct intel_encoder *encoder;
> +	struct intel_dp *intel_dp;
> +
> +	if (INTEL_GEN(dev_priv) < 7)

I believe we need to define a HAS_DRRS(dev_priv)
which based on what is on intel_cpu_transcoder_set_m_n would be
(IS_CHERRYVIEW(dev_priv) || INTEL_GEN(dev_priv) < 8)

> +		return -ENODEV;
> +
> +	drm_modeset_lock_all(dev);

my first reaction to this was: "why do you need to lock all modeset?!"
But this simplify a lot the logic here...
This assure that drrs is really not getting changed from other places.

> +	for_each_intel_crtc(dev, intel_crtc) {
> +		if (!intel_crtc->base.state->active ||
> +					!intel_crtc->config->has_drrs)

I was going to say that this check already happens inside
enable and disable functions... But I see the reason why to
check before the unecessary noise.

> +			continue;
> +
> +		for_each_encoder_on_crtc(dev, &intel_crtc->base, encoder) {
> +			if (encoder->type != INTEL_OUTPUT_EDP)
> +				continue;
> +
> +			DRM_DEBUG_DRIVER("Manually %sabling DRRS. %llu\n",
> +						val ? "en" : "dis", val);
> +
> +			intel_dp = enc_to_intel_dp(&encoder->base);
> +			if (val)
> +				intel_edp_drrs_enable(intel_dp,
> +							intel_crtc->config);
> +			else
> +				intel_edp_drrs_disable(intel_dp,
> +							intel_crtc->config);
> +		}
> +	}
> +	drm_modeset_unlock_all(dev);
> +
> +	return 0;
> +}

It seems simple and effective. Simpler than I imagined...
My only question is about that HAS_DRRS and when to skip here...

> +
> +DEFINE_SIMPLE_ATTRIBUTE(i915_drrs_ctl_fops, NULL, i915_drrs_ctl_set, "%llu\n");
> +
>  static const struct drm_info_list i915_debugfs_list[] = {
>  	{"i915_capabilities", i915_capabilities, 0},
>  	{"i915_gem_objects", i915_gem_object_info, 0},
> @@ -4828,7 +4868,8 @@ static const struct i915_debugfs_files {
>  	{"i915_dp_test_active", &i915_displayport_test_active_fops},
>  	{"i915_guc_log_control", &i915_guc_log_control_fops},
>  	{"i915_hpd_storm_ctl", &i915_hpd_storm_ctl_fops},
> -	{"i915_ipc_status", &i915_ipc_status_fops}
> +	{"i915_ipc_status", &i915_ipc_status_fops},
> +	{"i915_drrs_ctl", &i915_drrs_ctl_fops}
>  };
>  
>  int i915_debugfs_register(struct drm_i915_private *dev_priv)
> -- 
> 2.7.4
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v2 2/2] i915/drrs/debugfs: crtc id and psr status
  2017-11-07 18:40           ` [PATCH v2 2/2] i915/drrs/debugfs: crtc id " Ramalingam C
@ 2017-11-17 18:56             ` Rodrigo Vivi
  2017-11-20  3:39               ` C, Ramalingam
  2017-11-20  4:23               ` [PATCH v3] i915/drrs/debugfs: psr status info addition Ramalingam C
  0 siblings, 2 replies; 59+ messages in thread
From: Rodrigo Vivi @ 2017-11-17 18:56 UTC (permalink / raw)
  To: Ramalingam C; +Cc: intel-gfx, paulo.r.zanoni

On Tue, Nov 07, 2017 at 06:40:08PM +0000, Ramalingam C wrote:
> From: "C, Ramalingam" <ramalingam.c@intel.com>
> 
> Existing debugfs entry i915_drrs_status is updated with crtc id and
> if PSR is cause for DRRS disabled state.
> 
> [v2]: Dropped the module parameter details as ctl moved from module
>       parameter to debugfs. [Rodrigo]
> 
> Signed-off-by: C, Ramalingam <ramalingam.c@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_debugfs.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index 0c1501fe4c9f..6c2e8346b9a7 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -3567,7 +3567,10 @@ static void drrs_status_per_crtc(struct seq_file *m,
>  
>  		/* disable_drrs() will make drrs->dp NULL */
>  		if (!drrs->dp) {
> -			seq_puts(m, "Idleness DRRS: Disabled");
> +			seq_puts(m, "Idleness DRRS: Disabled\n");
> +			if (dev_priv->psr.enabled)
> +				seq_puts(m,
> +				"\tAs PSR is enabled, DRRS is not enabled\n");

this seems good...

>  			mutex_unlock(&drrs->mutex);
>  			return;
>  		}
> @@ -3611,7 +3614,7 @@ static int i915_drrs_status(struct seq_file *m, void *unused)
>  	for_each_intel_crtc(dev, intel_crtc) {
>  		if (intel_crtc->base.state->active) {
>  			active_crtc_cnt++;
> -			seq_printf(m, "\nCRTC %d:  ", active_crtc_cnt);
> +			seq_printf(m, "\nCRTC %d: ", intel_crtc->base.base.id);

this seems for a separated patch...
or at least missing an explanation why...

>  
>  			drrs_status_per_crtc(m, dev, intel_crtc);
>  		}
> -- 
> 2.7.4
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v2 1/2] drm/i915: Runtime disable for eDP DRRS
  2017-11-17 18:53                 ` Rodrigo Vivi
@ 2017-11-19 14:55                   ` C, Ramalingam
  2017-11-21 20:59                     ` Rodrigo Vivi
  0 siblings, 1 reply; 59+ messages in thread
From: C, Ramalingam @ 2017-11-19 14:55 UTC (permalink / raw)
  To: Vivi, Rodrigo; +Cc: intel-gfx, Zanoni, Paulo R

Thanks for reviewing these changes Rodrigo.

> -----Original Message-----
> From: Vivi, Rodrigo
> Sent: Saturday, November 18, 2017 12:24 AM
> To: C, Ramalingam <ramalingam.c@intel.com>
> Cc: Zanoni, Paulo R <paulo.r.zanoni@intel.com>; intel-
> gfx@lists.freedesktop.org
> Subject: Re: [Intel-gfx] [PATCH v2 1/2] drm/i915: Runtime disable for eDP DRRS
> 
> On Tue, Nov 07, 2017 at 06:38:23PM +0000, Ramalingam C wrote:
> > From: "C, Ramalingam" <ramalingam.c@intel.com>
> >
> > Debugfs called i915_drrs_ctl is added to enable and disable the eDP
> > DRRS. Writing 0 will disable the feature, whereas non-zero will enable
> > the feature.
> >
> > Possibility of disabling the DRRS, enables the testing of the
> > frontbuffer tracking based features (FBC, DRRS and PSR) as standalone
> > or any combination of the set.
> >
> > [v2]: ctl interface is moved from module parameter to debugfs
> > [Rodrigo]
> 
> Thanks
> 
> >
> > Signed-off-by: C, Ramalingam <ramalingam.c@intel.com>
> > ---
> >  drivers/gpu/drm/i915/i915_debugfs.c | 43
> > ++++++++++++++++++++++++++++++++++++-
> >  1 file changed, 42 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c
> > b/drivers/gpu/drm/i915/i915_debugfs.c
> > index 0bb6e01121fc..0c1501fe4c9f 100644
> > --- a/drivers/gpu/drm/i915/i915_debugfs.c
> > +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> > @@ -4747,6 +4747,46 @@ static const struct file_operations
> i915_hpd_storm_ctl_fops = {
> >  	.write = i915_hpd_storm_ctl_write
> >  };
> >
> > +static int i915_drrs_ctl_set(void *data, u64 val) {
> > +	struct drm_i915_private *dev_priv = data;
> > +	struct drm_device *dev = &dev_priv->drm;
> > +	struct intel_crtc *intel_crtc;
> > +	struct intel_encoder *encoder;
> > +	struct intel_dp *intel_dp;
> > +
> > +	if (INTEL_GEN(dev_priv) < 7)
> 
> I believe we need to define a HAS_DRRS(dev_priv) which based on what is on
> intel_cpu_transcoder_set_m_n would be
> (IS_CHERRYVIEW(dev_priv) || INTEL_GEN(dev_priv) < 8)

Actually programming of pll divider m and n changes between platforms. Hence this check was there.
But all the platforms from Gen 7 has the DRRS support. Do we still need a macro for this check?

-Ram
> 
> > +		return -ENODEV;
> > +
> > +	drm_modeset_lock_all(dev);
> 
> my first reaction to this was: "why do you need to lock all modeset?!"
> But this simplify a lot the logic here...
> This assure that drrs is really not getting changed from other places.
> 
> > +	for_each_intel_crtc(dev, intel_crtc) {
> > +		if (!intel_crtc->base.state->active ||
> > +					!intel_crtc->config->has_drrs)
> 
> I was going to say that this check already happens inside enable and disable
> functions... But I see the reason why to check before the unecessary noise.
> 
> > +			continue;
> > +
> > +		for_each_encoder_on_crtc(dev, &intel_crtc->base, encoder) {
> > +			if (encoder->type != INTEL_OUTPUT_EDP)
> > +				continue;
> > +
> > +			DRM_DEBUG_DRIVER("Manually %sabling DRRS.
> %llu\n",
> > +						val ? "en" : "dis", val);
> > +
> > +			intel_dp = enc_to_intel_dp(&encoder->base);
> > +			if (val)
> > +				intel_edp_drrs_enable(intel_dp,
> > +							intel_crtc->config);
> > +			else
> > +				intel_edp_drrs_disable(intel_dp,
> > +							intel_crtc->config);
> > +		}
> > +	}
> > +	drm_modeset_unlock_all(dev);
> > +
> > +	return 0;
> > +}
> 
> It seems simple and effective. Simpler than I imagined...
> My only question is about that HAS_DRRS and when to skip here...
> 
> > +
> > +DEFINE_SIMPLE_ATTRIBUTE(i915_drrs_ctl_fops, NULL, i915_drrs_ctl_set,
> > +"%llu\n");
> > +
> >  static const struct drm_info_list i915_debugfs_list[] = {
> >  	{"i915_capabilities", i915_capabilities, 0},
> >  	{"i915_gem_objects", i915_gem_object_info, 0}, @@ -4828,7 +4868,8
> @@
> > static const struct i915_debugfs_files {
> >  	{"i915_dp_test_active", &i915_displayport_test_active_fops},
> >  	{"i915_guc_log_control", &i915_guc_log_control_fops},
> >  	{"i915_hpd_storm_ctl", &i915_hpd_storm_ctl_fops},
> > -	{"i915_ipc_status", &i915_ipc_status_fops}
> > +	{"i915_ipc_status", &i915_ipc_status_fops},
> > +	{"i915_drrs_ctl", &i915_drrs_ctl_fops}
> >  };
> >
> >  int i915_debugfs_register(struct drm_i915_private *dev_priv)
> > --
> > 2.7.4
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v2 2/2] i915/drrs/debugfs: crtc id and psr status
  2017-11-17 18:56             ` Rodrigo Vivi
@ 2017-11-20  3:39               ` C, Ramalingam
  2017-11-20  4:23               ` [PATCH v3] i915/drrs/debugfs: psr status info addition Ramalingam C
  1 sibling, 0 replies; 59+ messages in thread
From: C, Ramalingam @ 2017-11-20  3:39 UTC (permalink / raw)
  To: Vivi, Rodrigo; +Cc: intel-gfx, Zanoni, Paulo R


> -----Original Message-----
> From: Vivi, Rodrigo
> Sent: Saturday, November 18, 2017 12:26 AM
> To: C, Ramalingam <ramalingam.c@intel.com>
> Cc: Zanoni, Paulo R <paulo.r.zanoni@intel.com>; chris@chris-wilson.co.uk;
> intel-gfx@lists.freedesktop.org
> Subject: Re: [Intel-gfx] [PATCH v2 2/2] i915/drrs/debugfs: crtc id and psr status
> 
> On Tue, Nov 07, 2017 at 06:40:08PM +0000, Ramalingam C wrote:
> > From: "C, Ramalingam" <ramalingam.c@intel.com>
> >
> > Existing debugfs entry i915_drrs_status is updated with crtc id and if
> > PSR is cause for DRRS disabled state.
> >
> > [v2]: Dropped the module parameter details as ctl moved from module
> >       parameter to debugfs. [Rodrigo]
> >
> > Signed-off-by: C, Ramalingam <ramalingam.c@intel.com>
> > ---
> >  drivers/gpu/drm/i915/i915_debugfs.c | 7 +++++--
> >  1 file changed, 5 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c
> > b/drivers/gpu/drm/i915/i915_debugfs.c
> > index 0c1501fe4c9f..6c2e8346b9a7 100644
> > --- a/drivers/gpu/drm/i915/i915_debugfs.c
> > +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> > @@ -3567,7 +3567,10 @@ static void drrs_status_per_crtc(struct
> > seq_file *m,
> >
> >  		/* disable_drrs() will make drrs->dp NULL */
> >  		if (!drrs->dp) {
> > -			seq_puts(m, "Idleness DRRS: Disabled");
> > +			seq_puts(m, "Idleness DRRS: Disabled\n");
> > +			if (dev_priv->psr.enabled)
> > +				seq_puts(m,
> > +				"\tAs PSR is enabled, DRRS is not enabled\n");
> 
> this seems good...
> 
> >  			mutex_unlock(&drrs->mutex);
> >  			return;
> >  		}
> > @@ -3611,7 +3614,7 @@ static int i915_drrs_status(struct seq_file *m, void
> *unused)
> >  	for_each_intel_crtc(dev, intel_crtc) {
> >  		if (intel_crtc->base.state->active) {
> >  			active_crtc_cnt++;
> > -			seq_printf(m, "\nCRTC %d:  ", active_crtc_cnt);
> > +			seq_printf(m, "\nCRTC %d: ", intel_crtc->base.base.id);
> 
> this seems for a separated patch...
> or at least missing an explanation why...
This changes not needed for debugfs control of drrs. As of now debugfs provides the crtc index in the active crtc list. Instead providing the crtc id might help to identify the crtc, that the debuginfo is associated to.

Anyway as there is no usecase that need this change, I will remove it from this patch.

Thanks
-Ram
> 
> >
> >  			drrs_status_per_crtc(m, dev, intel_crtc);
> >  		}
> > --
> > 2.7.4
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH v3] i915/drrs/debugfs: psr status info addition
  2017-11-17 18:56             ` Rodrigo Vivi
  2017-11-20  3:39               ` C, Ramalingam
@ 2017-11-20  4:23               ` Ramalingam C
  2017-11-21 20:56                 ` Rodrigo Vivi
  1 sibling, 1 reply; 59+ messages in thread
From: Ramalingam C @ 2017-11-20  4:23 UTC (permalink / raw)
  To: rodrigo.vivi, paulo.r.zanoni, intel-gfx

From: "C, Ramalingam" <ramalingam.c@intel.com>

Existing debugfs entry i915_drrs_status is updated with whether PSR
is the cause for DRRS disabled state.

[v2]: Dropped the module parameter details as ctl moved from module
      parameter to debugfs. [Rodrigo]

[v3]: Crtc ID information is dropped as there is no immediate usecase.
      [Rodrigo].

Signed-off-by: C, Ramalingam <ramalingam.c@intel.com>
---
 drivers/gpu/drm/i915/i915_debugfs.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 0c1501fe4c9f..ea36d4e4d881 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -3567,7 +3567,10 @@ static void drrs_status_per_crtc(struct seq_file *m,
 
 		/* disable_drrs() will make drrs->dp NULL */
 		if (!drrs->dp) {
-			seq_puts(m, "Idleness DRRS: Disabled");
+			seq_puts(m, "Idleness DRRS: Disabled\n");
+			if (dev_priv->psr.enabled)
+				seq_puts(m,
+				"\tAs PSR is enabled, DRRS is not enabled\n");
 			mutex_unlock(&drrs->mutex);
 			return;
 		}
-- 
2.7.4

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

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

* ✗ Fi.CI.BAT: warning for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4)
  2017-09-19 18:12     ` Rodrigo Vivi
                         ` (6 preceding siblings ...)
  2017-11-10 16:49       ` ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev2) Patchwork
@ 2017-11-20  4:46       ` Patchwork
  2017-12-06 16:32       ` ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev3) Patchwork
                         ` (12 subsequent siblings)
  20 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2017-11-20  4:46 UTC (permalink / raw)
  To: Ramalingam C; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4)
URL   : https://patchwork.freedesktop.org/series/32887/
State : warning

== Summary ==

Series 32887v4 series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS
https://patchwork.freedesktop.org/api/1.0/series/32887/revisions/4/mbox/

Test kms_pipe_crc_basic:
        Subgroup suspend-read-crc-pipe-b:
                incomplete -> PASS       (fi-snb-2520m) fdo#103713
Test pm_rpm:
        Subgroup basic-rte:
                pass       -> SKIP       (fi-hsw-4770r)

fdo#103713 https://bugs.freedesktop.org/show_bug.cgi?id=103713

fi-bdw-5557u     total:289  pass:268  dwarn:0   dfail:0   fail:0   skip:21  time:442s
fi-bdw-gvtdvm    total:289  pass:265  dwarn:0   dfail:0   fail:0   skip:24  time:463s
fi-blb-e6850     total:289  pass:223  dwarn:1   dfail:0   fail:0   skip:65  time:379s
fi-bsw-n3050     total:289  pass:243  dwarn:0   dfail:0   fail:0   skip:46  time:542s
fi-bwr-2160      total:289  pass:183  dwarn:0   dfail:0   fail:0   skip:106 time:278s
fi-bxt-dsi       total:289  pass:259  dwarn:0   dfail:0   fail:0   skip:30  time:508s
fi-bxt-j4205     total:289  pass:260  dwarn:0   dfail:0   fail:0   skip:29  time:509s
fi-byt-j1900     total:289  pass:254  dwarn:0   dfail:0   fail:0   skip:35  time:501s
fi-byt-n2820     total:289  pass:250  dwarn:0   dfail:0   fail:0   skip:39  time:497s
fi-gdg-551       total:289  pass:178  dwarn:1   dfail:0   fail:1   skip:109 time:267s
fi-glk-1         total:289  pass:261  dwarn:0   dfail:0   fail:0   skip:28  time:537s
fi-hsw-4770      total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:429s
fi-hsw-4770r     total:289  pass:261  dwarn:0   dfail:0   fail:0   skip:28  time:441s
fi-ilk-650       total:289  pass:228  dwarn:0   dfail:0   fail:0   skip:61  time:433s
fi-ivb-3520m     total:289  pass:260  dwarn:0   dfail:0   fail:0   skip:29  time:472s
fi-ivb-3770      total:289  pass:260  dwarn:0   dfail:0   fail:0   skip:29  time:457s
fi-kbl-7500u     total:289  pass:264  dwarn:1   dfail:0   fail:0   skip:24  time:486s
fi-kbl-7560u     total:289  pass:270  dwarn:0   dfail:0   fail:0   skip:19  time:518s
fi-kbl-7567u     total:289  pass:269  dwarn:0   dfail:0   fail:0   skip:20  time:478s
fi-kbl-r         total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:535s
fi-pnv-d510      total:289  pass:222  dwarn:1   dfail:0   fail:0   skip:66  time:581s
fi-skl-6260u     total:289  pass:269  dwarn:0   dfail:0   fail:0   skip:20  time:455s
fi-skl-6600u     total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:549s
fi-skl-6700hq    total:289  pass:263  dwarn:0   dfail:0   fail:0   skip:26  time:573s
fi-skl-6700k     total:289  pass:265  dwarn:0   dfail:0   fail:0   skip:24  time:527s
fi-skl-6770hq    total:289  pass:269  dwarn:0   dfail:0   fail:0   skip:20  time:497s
fi-skl-gvtdvm    total:289  pass:266  dwarn:0   dfail:0   fail:0   skip:23  time:460s
fi-snb-2520m     total:289  pass:250  dwarn:0   dfail:0   fail:0   skip:39  time:557s
fi-snb-2600      total:289  pass:249  dwarn:0   dfail:0   fail:0   skip:40  time:422s
Blacklisted hosts:
fi-cfl-s2        total:289  pass:263  dwarn:0   dfail:0   fail:0   skip:26  time:607s
fi-glk-dsi       total:156  pass:133  dwarn:0   dfail:0   fail:0   skip:22 

b4da24717364bc69bb981a1536be64413a582f3a drm-tip: 2017y-11m-17d-22h-46m-53s UTC integration manifest
6141dfec7eab i915/drrs/debugfs: psr status info addition
3907c7962b59 drm/i915: Runtime disable for eDP DRRS

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_7196/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v3] i915/drrs/debugfs: psr status info addition
  2017-11-20  4:23               ` [PATCH v3] i915/drrs/debugfs: psr status info addition Ramalingam C
@ 2017-11-21 20:56                 ` Rodrigo Vivi
  0 siblings, 0 replies; 59+ messages in thread
From: Rodrigo Vivi @ 2017-11-21 20:56 UTC (permalink / raw)
  To: Ramalingam C; +Cc: intel-gfx, paulo.r.zanoni

On Mon, Nov 20, 2017 at 04:23:47AM +0000, Ramalingam C wrote:
> From: "C, Ramalingam" <ramalingam.c@intel.com>
> 
> Existing debugfs entry i915_drrs_status is updated with whether PSR
> is the cause for DRRS disabled state.
> 
> [v2]: Dropped the module parameter details as ctl moved from module
>       parameter to debugfs. [Rodrigo]
> 
> [v3]: Crtc ID information is dropped as there is no immediate usecase.
>       [Rodrigo].
> 
> Signed-off-by: C, Ramalingam <ramalingam.c@intel.com>

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

> ---
>  drivers/gpu/drm/i915/i915_debugfs.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index 0c1501fe4c9f..ea36d4e4d881 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -3567,7 +3567,10 @@ static void drrs_status_per_crtc(struct seq_file *m,
>  
>  		/* disable_drrs() will make drrs->dp NULL */
>  		if (!drrs->dp) {
> -			seq_puts(m, "Idleness DRRS: Disabled");
> +			seq_puts(m, "Idleness DRRS: Disabled\n");
> +			if (dev_priv->psr.enabled)
> +				seq_puts(m,
> +				"\tAs PSR is enabled, DRRS is not enabled\n");
>  			mutex_unlock(&drrs->mutex);
>  			return;
>  		}
> -- 
> 2.7.4
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v2 1/2] drm/i915: Runtime disable for eDP DRRS
  2017-11-19 14:55                   ` C, Ramalingam
@ 2017-11-21 20:59                     ` Rodrigo Vivi
  0 siblings, 0 replies; 59+ messages in thread
From: Rodrigo Vivi @ 2017-11-21 20:59 UTC (permalink / raw)
  To: C, Ramalingam; +Cc: intel-gfx, Zanoni, Paulo R

On Sun, Nov 19, 2017 at 02:55:06PM +0000, C, Ramalingam wrote:
> Thanks for reviewing these changes Rodrigo.
> 
> > -----Original Message-----
> > From: Vivi, Rodrigo
> > Sent: Saturday, November 18, 2017 12:24 AM
> > To: C, Ramalingam <ramalingam.c@intel.com>
> > Cc: Zanoni, Paulo R <paulo.r.zanoni@intel.com>; intel-
> > gfx@lists.freedesktop.org
> > Subject: Re: [Intel-gfx] [PATCH v2 1/2] drm/i915: Runtime disable for eDP DRRS
> > 
> > On Tue, Nov 07, 2017 at 06:38:23PM +0000, Ramalingam C wrote:
> > > From: "C, Ramalingam" <ramalingam.c@intel.com>
> > >
> > > Debugfs called i915_drrs_ctl is added to enable and disable the eDP
> > > DRRS. Writing 0 will disable the feature, whereas non-zero will enable
> > > the feature.
> > >
> > > Possibility of disabling the DRRS, enables the testing of the
> > > frontbuffer tracking based features (FBC, DRRS and PSR) as standalone
> > > or any combination of the set.
> > >
> > > [v2]: ctl interface is moved from module parameter to debugfs
> > > [Rodrigo]
> > 
> > Thanks
> > 
> > >
> > > Signed-off-by: C, Ramalingam <ramalingam.c@intel.com>
> > > ---
> > >  drivers/gpu/drm/i915/i915_debugfs.c | 43
> > > ++++++++++++++++++++++++++++++++++++-
> > >  1 file changed, 42 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c
> > > b/drivers/gpu/drm/i915/i915_debugfs.c
> > > index 0bb6e01121fc..0c1501fe4c9f 100644
> > > --- a/drivers/gpu/drm/i915/i915_debugfs.c
> > > +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> > > @@ -4747,6 +4747,46 @@ static const struct file_operations
> > i915_hpd_storm_ctl_fops = {
> > >  	.write = i915_hpd_storm_ctl_write
> > >  };
> > >
> > > +static int i915_drrs_ctl_set(void *data, u64 val) {
> > > +	struct drm_i915_private *dev_priv = data;
> > > +	struct drm_device *dev = &dev_priv->drm;
> > > +	struct intel_crtc *intel_crtc;
> > > +	struct intel_encoder *encoder;
> > > +	struct intel_dp *intel_dp;
> > > +
> > > +	if (INTEL_GEN(dev_priv) < 7)
> > 
> > I believe we need to define a HAS_DRRS(dev_priv) which based on what is on
> > intel_cpu_transcoder_set_m_n would be
> > (IS_CHERRYVIEW(dev_priv) || INTEL_GEN(dev_priv) < 8)
> 
> Actually programming of pll divider m and n changes between platforms. Hence this check was there.
> But all the platforms from Gen 7 has the DRRS support. Do we still need a macro for this check?

Ohh! just now I noticed that this was actually "< 8" there...

Yeap, so no more concerns on this patch. Thanks for the explanation.

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

> 
> -Ram
> > 
> > > +		return -ENODEV;
> > > +
> > > +	drm_modeset_lock_all(dev);
> > 
> > my first reaction to this was: "why do you need to lock all modeset?!"
> > But this simplify a lot the logic here...
> > This assure that drrs is really not getting changed from other places.
> > 
> > > +	for_each_intel_crtc(dev, intel_crtc) {
> > > +		if (!intel_crtc->base.state->active ||
> > > +					!intel_crtc->config->has_drrs)
> > 
> > I was going to say that this check already happens inside enable and disable
> > functions... But I see the reason why to check before the unecessary noise.
> > 
> > > +			continue;
> > > +
> > > +		for_each_encoder_on_crtc(dev, &intel_crtc->base, encoder) {
> > > +			if (encoder->type != INTEL_OUTPUT_EDP)
> > > +				continue;
> > > +
> > > +			DRM_DEBUG_DRIVER("Manually %sabling DRRS.
> > %llu\n",
> > > +						val ? "en" : "dis", val);
> > > +
> > > +			intel_dp = enc_to_intel_dp(&encoder->base);
> > > +			if (val)
> > > +				intel_edp_drrs_enable(intel_dp,
> > > +							intel_crtc->config);
> > > +			else
> > > +				intel_edp_drrs_disable(intel_dp,
> > > +							intel_crtc->config);
> > > +		}
> > > +	}
> > > +	drm_modeset_unlock_all(dev);
> > > +
> > > +	return 0;
> > > +}
> > 
> > It seems simple and effective. Simpler than I imagined...
> > My only question is about that HAS_DRRS and when to skip here...
> > 
> > > +
> > > +DEFINE_SIMPLE_ATTRIBUTE(i915_drrs_ctl_fops, NULL, i915_drrs_ctl_set,
> > > +"%llu\n");
> > > +
> > >  static const struct drm_info_list i915_debugfs_list[] = {
> > >  	{"i915_capabilities", i915_capabilities, 0},
> > >  	{"i915_gem_objects", i915_gem_object_info, 0}, @@ -4828,7 +4868,8
> > @@
> > > static const struct i915_debugfs_files {
> > >  	{"i915_dp_test_active", &i915_displayport_test_active_fops},
> > >  	{"i915_guc_log_control", &i915_guc_log_control_fops},
> > >  	{"i915_hpd_storm_ctl", &i915_hpd_storm_ctl_fops},
> > > -	{"i915_ipc_status", &i915_ipc_status_fops}
> > > +	{"i915_ipc_status", &i915_ipc_status_fops},
> > > +	{"i915_drrs_ctl", &i915_drrs_ctl_fops}
> > >  };
> > >
> > >  int i915_debugfs_register(struct drm_i915_private *dev_priv)
> > > --
> > > 2.7.4
> > >
> > > _______________________________________________
> > > Intel-gfx mailing list
> > > Intel-gfx@lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH i-g-t v8] tests/kms_frontbuffer_tracking: Including DRRS test coverage
  2017-11-10 16:22           ` [PATCH i-g-t] Idleness DRRS: Lohith BS
@ 2017-12-06 15:13             ` Lohith BS
  2017-12-06 18:30               ` Paulo Zanoni
  2017-12-11 13:12               ` [PATCH i-g-t v9] " Lohith BS
  0 siblings, 2 replies; 59+ messages in thread
From: Lohith BS @ 2017-12-06 15:13 UTC (permalink / raw)
  To: intel-gfx, rodrigo.vivi, jani.saarinen, daniel.vetter, chris,
	marius.c.vlad
  Cc: ankit.k.nautiyal, paulo.r.zanoni

Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's
refresh rate to the lowest vrefresh supported by panel, when frame is
not flipped for more than a Sec.

In kernel, DRRS uses the front buffer tracking infrastructure.
Hence DRRS test coverage is added along with other frontbuffer tracking
based features such as FBC and PSR tests.

Here, we are testing DRRS with other features in all possible
combinations, in all required test cases, to capture any possible
regression.

v2: Addressed the comments and suggestions from Vlad, Marius.
    The signoff details from the earlier work are also included.

v3: Modified vblank rate calculation by using reply-sequence,
    provided by drmWaitVBlank, as suggested by Chris Wilson.

v4: As suggested from Chris Wilson and Daniel Vetter
    1) Avoided using pthread for calculating vblank refresh rate,
       instead used drmWaitVBlank reply sequence.
    2) Avoided using kernel-specific info like transitional delays,
       instead polling mechanism with timeout is used.
    3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
       instead of having a separate test.

v5: This patch adds DRRS as a new feature in the
    kms_frontbuffer_tracking IGT.
    DRRS switch to lower vrefresh rate is tested at slow-draw subtest.

    Note:
    1) Currently kernel doesn't have support to enable and disable
       the DRRS feature dynamically(as in case of PSR). Hence if the
       panel supports DRRS it will be enabled by default.

    This is in continuation of last patch
	"https://patchwork.freedesktop.org/patch/162726/"

v6: This patch adds runtime enable and disable feature for testing DRRS

v7: This patch adds runtime enable and disable feature for testing DRRS
    through debugfs entry "i915_drrs_ctl".

v8: Commit message is updated to reflect current implementation.

Signed-off-by: Lohith BS <lohith.bs@intel.com>
Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
---
 tests/kms_frontbuffer_tracking.c | 166 +++++++++++++++++++++++++++++++++++----
 1 file changed, 151 insertions(+), 15 deletions(-)

diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
index a068c8a..b06d304 100644
--- a/tests/kms_frontbuffer_tracking.c
+++ b/tests/kms_frontbuffer_tracking.c
@@ -34,7 +34,7 @@
 
 
 IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
-		     "its related features: FBC and PSR");
+			"its related features: FBC, DRRS and PSR");
 
 /*
  * One of the aspects of this test is that, for every subtest, we try different
@@ -105,8 +105,9 @@ struct test_mode {
 		FEATURE_NONE  = 0,
 		FEATURE_FBC   = 1,
 		FEATURE_PSR   = 2,
-		FEATURE_COUNT = 4,
-		FEATURE_DEFAULT = 4,
+		FEATURE_DRRS  = 4,
+		FEATURE_COUNT = 6,
+		FEATURE_DEFAULT = 6,
 	} feature;
 
 	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
@@ -156,6 +157,7 @@ struct rect {
 struct {
 	int fd;
 	int debugfs;
+	int drrs_debugfs_fd;
 	drmModeResPtr res;
 	drmModeConnectorPtr connectors[MAX_CONNECTORS];
 	drmModeEncoderPtr encoders[MAX_ENCODERS];
@@ -178,10 +180,8 @@ struct {
 
 struct {
 	bool can_test;
-} psr = {
-	.can_test = false,
-};
-
+} psr = { .can_test = false,},
+drrs = { .can_test = false,};
 
 #define SINK_CRC_SIZE 12
 typedef struct {
@@ -775,8 +775,8 @@ static bool set_mode_for_params(struct modeset_params *params)
 	int rc;
 
 	rc = drmModeSetCrtc(drm.fd, params->crtc_id, params->fb.fb->fb_id,
-			    params->fb.x, params->fb.y,
-			    &params->connector_id, 1, params->mode);
+				params->fb.x, params->fb.y,
+				&params->connector_id, 1, params->mode);
 	return (rc == 0);
 }
 
@@ -822,6 +822,63 @@ static void psr_print_status(void)
 	igt_info("PSR status:\n%s\n", buf);
 }
 
+void drrs_set(unsigned int val)
+{
+	char buf[16];
+
+	igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val);
+	snprintf(buf, sizeof(buf), "%d", val);
+	igt_assert_eq(write(drm.drrs_debugfs_fd, buf, strlen(buf)), strlen(buf));
+}
+
+static bool is_drrs_high(void)
+{
+	char buf[256];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS_HIGH_RR");
+}
+
+static bool is_drrs_low(void)
+{
+	char buf[256];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS_LOW_RR");
+}
+
+static bool is_drrs_supported(void)
+{
+	char buf[256];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS Supported: Yes");
+}
+
+static bool is_drrs_inactive(void)
+{
+	char buf[256];
+
+	debugfs_read("i915_drrs_status", buf);
+
+	if (strstr(buf, "No active crtc found"))
+		return true;
+	if (strstr(buf, "Idleness DRRS: Disabled"))
+		return true;
+	if (strstr(buf, "DRRS Supported : No"))
+		return true;
+
+	return false;
+}
+
+static void drrs_print_status(void)
+{
+	char buf[256];
+
+	debugfs_read("i915_drrs_status", buf);
+	igt_info("DRRS STATUS :\n%s\n", buf);
+}
+
 static struct timespec fbc_get_last_action(void)
 {
 	struct timespec ret = { 0, 0 };
@@ -932,10 +989,17 @@ static bool psr_wait_until_enabled(void)
 	return igt_wait(psr_is_enabled(), 5000, 1);
 }
 
+static bool drrs_wait_until_rr_switch_to_low(void)
+{
+	return igt_wait(is_drrs_low(), 5000, 1);
+}
+
 #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
 #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
 #define psr_enable() igt_set_module_param_int("enable_psr", 1)
 #define psr_disable() igt_set_module_param_int("enable_psr", 0)
+#define drrs_enable() drrs_set(1)
+#define drrs_disable() drrs_set(0)
 
 static void get_sink_crc(sink_crc_t *crc, bool mandatory)
 {
@@ -1182,6 +1246,7 @@ static void disable_features(const struct test_mode *t)
 
 	fbc_disable();
 	psr_disable();
+	drrs_disable();
 }
 
 static void *busy_thread_func(void *data)
@@ -1506,6 +1571,11 @@ static void teardown_crcs(void)
 	igt_pipe_crc_free(pipe_crc);
 }
 
+static void teardown_drrs(void)
+{
+	if (drm.drrs_debugfs_fd != -1)
+		close(drm.drrs_debugfs_fd);
+}
 static bool fbc_supported_on_chipset(void)
 {
 	char buf[128];
@@ -1575,6 +1645,30 @@ static void teardown_psr(void)
 {
 }
 
+static void setup_drrs(void)
+{
+	int is_drrs_debug_ctl;
+	if (get_connector(prim_mode_params.connector_id)->connector_type !=
+			DRM_MODE_CONNECTOR_eDP) {
+		igt_info("Can't test DRRS: no usable eDP screen.\n");
+		return;
+	}
+
+	if (!is_drrs_supported()) {
+		igt_info("Can't test DRRS: Not supported.\n");
+		return;
+	}
+
+	drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY);
+
+	if (drm.drrs_debugfs_fd > 0) {
+		drrs.can_test = true;
+	} else {
+		igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n");
+		drrs.can_test = false;
+	}
+}
+
 static void setup_environment(void)
 {
 	setup_drm();
@@ -1582,7 +1676,7 @@ static void setup_environment(void)
 
 	setup_fbc();
 	setup_psr();
-
+	setup_drrs();
 	setup_crcs();
 }
 
@@ -1594,6 +1688,7 @@ static void teardown_environment(void)
 	teardown_psr();
 	teardown_fbc();
 	teardown_modeset();
+	teardown_drrs();
 	teardown_drm();
 }
 
@@ -1660,6 +1755,11 @@ static void do_flush(const struct test_mode *t)
 #define ASSERT_PSR_ENABLED		(1 << 6)
 #define ASSERT_PSR_DISABLED		(1 << 7)
 
+#define DRRS_ASSERT_FLAGS               (7 << 8)
+#define ASSERT_DRRS_HIGH                (1 << 8)
+#define ASSERT_DRRS_LOW                 (1 << 9)
+#define ASSERT_DRRS_INACTIVE            (1 << 10)
+
 static int adjust_assertion_flags(const struct test_mode *t, int flags)
 {
 	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
@@ -1667,12 +1767,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
 			flags |= ASSERT_FBC_ENABLED;
 		if (!(flags & ASSERT_PSR_DISABLED))
 			flags |= ASSERT_PSR_ENABLED;
+		if (!((flags & ASSERT_DRRS_LOW) || (flags & ASSERT_DRRS_INACTIVE))) {
+			flags |= ASSERT_DRRS_HIGH;
+		}
 	}
 
 	if ((t->feature & FEATURE_FBC) == 0)
 		flags &= ~FBC_ASSERT_FLAGS;
 	if ((t->feature & FEATURE_PSR) == 0)
 		flags &= ~PSR_ASSERT_FLAGS;
+	if ((t->feature & FEATURE_DRRS) == 0)
+		flags &= ~DRRS_ASSERT_FLAGS;
 
 	return flags;
 }
@@ -1704,6 +1809,23 @@ static void do_status_assertions(int flags)
 		return;
 	}
 
+	if (flags & ASSERT_DRRS_HIGH) {
+		if (!is_drrs_high()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS HIGH\n");
+		}
+	} else if (flags & ASSERT_DRRS_LOW) {
+		if (!drrs_wait_until_rr_switch_to_low()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS LOW\n");
+		}
+	} else if (flags & ASSERT_DRRS_INACTIVE) {
+		if (!is_drrs_inactive()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS INACTIVE\n");
+		}
+	}
+
 	if (flags & ASSERT_FBC_ENABLED) {
 		igt_require(!fbc_not_enough_stolen());
 		igt_require(!fbc_stride_not_supported());
@@ -1831,6 +1953,8 @@ static void enable_features_for_test(const struct test_mode *t)
 		fbc_enable();
 	if (t->feature & FEATURE_PSR)
 		psr_enable();
+	if (t->feature & FEATURE_DRRS)
+		drrs_enable();
 }
 
 static void check_test_requirements(const struct test_mode *t)
@@ -1850,6 +1974,10 @@ static void check_test_requirements(const struct test_mode *t)
 			      "Can't test PSR without sink CRCs\n");
 	}
 
+	if (t->feature & FEATURE_DRRS)
+		igt_require_f(drrs.can_test,
+				"Can't test DRRS with the current outputs\n");
+
 	if (opt.only_pipes != PIPE_COUNT)
 		igt_require(t->pipes == opt.only_pipes);
 }
@@ -1971,7 +2099,7 @@ static void rte_subtest(const struct test_mode *t)
 
 	unset_all_crtcs();
 	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
-		      DONT_ASSERT_CRC);
+		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
 
 	enable_prim_screen_and_wait(t);
 	set_cursor_for_test(t, &prim_mode_params);
@@ -2219,6 +2347,7 @@ static void badformat_subtest(const struct test_mode *t)
 		assertions |= ASSERT_FBC_DISABLED;
 	if (!psr_valid)
 		assertions |= ASSERT_PSR_DISABLED;
+
 	do_assertions(assertions);
 }
 
@@ -2277,7 +2406,11 @@ static void slow_draw_subtest(const struct test_mode *t)
 		sleep(2);
 
 		update_wanted_crc(t, &pattern->crcs[t->format][r]);
-		do_assertions(0);
+
+		if (t->feature & FEATURE_DRRS)
+			do_assertions(ASSERT_DRRS_LOW);
+		else
+			do_assertions(0);
 	}
 }
 
@@ -2892,8 +3025,7 @@ static void suspend_subtest(const struct test_mode *t)
 	sleep(5);
 	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
 	sleep(5);
-	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
-		      DONT_ASSERT_CRC);
+	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | DONT_ASSERT_CRC);
 
 	set_mode_for_params(params);
 	do_assertions(0);
@@ -3375,6 +3507,10 @@ static const char *feature_str(int feature)
 		return "psr";
 	case FEATURE_FBC | FEATURE_PSR:
 		return "fbcpsr";
+	case FEATURE_DRRS:
+		return "drrs";
+	case FEATURE_FBC | FEATURE_DRRS:
+		return "fbcdrrs";
 	default:
 		igt_assert(false);
 	}
@@ -3639,7 +3775,7 @@ int main(int argc, char *argv[])
 				tilingchange_subtest(&t);
 		}
 
-		if (t.feature & FEATURE_PSR)
+		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
 			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
 				slow_draw_subtest(&t);
 
-- 
1.9.1

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

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

* ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev3)
  2017-09-19 18:12     ` Rodrigo Vivi
                         ` (7 preceding siblings ...)
  2017-11-20  4:46       ` ✗ Fi.CI.BAT: warning for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4) Patchwork
@ 2017-12-06 16:32       ` Patchwork
  2017-12-11 15:56       ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev4) Patchwork
                         ` (11 subsequent siblings)
  20 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2017-12-06 16:32 UTC (permalink / raw)
  To: Lohith BS; +Cc: intel-gfx

== Series Details ==

Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev3)
URL   : https://patchwork.freedesktop.org/series/32888/
State : warning

== Summary ==

IGT patchset tested on top of latest successful build
1db12466cb5ad8483cd469753d2e312a62d717b7 meson: build a full dependency for lib_igt_perf

with latest DRM-Tip kernel build CI_DRM_3465
01b30547063a drm-tip: 2017y-12m-06d-15h-18m-33s UTC integration manifest

Testlist changes:
+++ 285 lines
--- 0 lines

Test debugfs_test:
        Subgroup read_all_entries:
                dmesg-warn -> DMESG-FAIL (fi-elk-e7500) fdo#103989 +1
Test kms_frontbuffer_tracking:
        Subgroup basic:
                pass       -> SKIP       (fi-snb-2520m)
                pass       -> SKIP       (fi-snb-2600)
                pass       -> SKIP       (fi-ivb-3520m)
                pass       -> SKIP       (fi-ivb-3770)
                pass       -> SKIP       (fi-byt-j1900)
                pass       -> SKIP       (fi-byt-n2820)
                pass       -> SKIP       (fi-hsw-4770)
                pass       -> SKIP       (fi-bdw-5557u) fdo#102473
                pass       -> SKIP       (fi-bsw-n3050)
                pass       -> SKIP       (fi-skl-6260u)
                pass       -> SKIP       (fi-skl-6600u)
                pass       -> SKIP       (fi-skl-6700hq)
                pass       -> SKIP       (fi-skl-6700k) fdo#103735
                pass       -> SKIP       (fi-skl-6770hq)
                pass       -> SKIP       (fi-bxt-dsi)
                pass       -> SKIP       (fi-bxt-j4205)
                pass       -> SKIP       (fi-kbl-7560u)
                pass       -> SKIP       (fi-kbl-7567u)
                pass       -> SKIP       (fi-kbl-r)
                pass       -> SKIP       (fi-glk-1) fdo#103167
Test kms_pipe_crc_basic:
        Subgroup hang-read-crc-pipe-a:
                notrun     -> INCOMPLETE (fi-elk-e7500)
        Subgroup suspend-read-crc-pipe-b:
                pass       -> INCOMPLETE (fi-snb-2520m) fdo#103713

fdo#103989 https://bugs.freedesktop.org/show_bug.cgi?id=103989
fdo#102473 https://bugs.freedesktop.org/show_bug.cgi?id=102473
fdo#103735 https://bugs.freedesktop.org/show_bug.cgi?id=103735
fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
fdo#103713 https://bugs.freedesktop.org/show_bug.cgi?id=103713

fi-bdw-5557u     total:288  pass:266  dwarn:0   dfail:0   fail:0   skip:22  time:439s
fi-blb-e6850     total:288  pass:223  dwarn:1   dfail:0   fail:0   skip:64  time:392s
fi-bsw-n3050     total:288  pass:241  dwarn:0   dfail:0   fail:0   skip:47  time:519s
fi-bwr-2160      total:288  pass:183  dwarn:0   dfail:0   fail:0   skip:105 time:284s
fi-bxt-dsi       total:288  pass:257  dwarn:0   dfail:0   fail:0   skip:31  time:508s
fi-bxt-j4205     total:288  pass:258  dwarn:0   dfail:0   fail:0   skip:30  time:510s
fi-byt-j1900     total:288  pass:252  dwarn:0   dfail:0   fail:0   skip:36  time:488s
fi-byt-n2820     total:288  pass:248  dwarn:0   dfail:0   fail:0   skip:40  time:477s
fi-elk-e7500     total:229  pass:167  dwarn:14  dfail:1   fail:0   skip:46 
fi-gdg-551       total:288  pass:178  dwarn:1   dfail:0   fail:1   skip:108 time:269s
fi-glk-1         total:288  pass:259  dwarn:0   dfail:0   fail:0   skip:29  time:530s
fi-hsw-4770      total:288  pass:260  dwarn:0   dfail:0   fail:0   skip:28  time:369s
fi-hsw-4770r     total:288  pass:224  dwarn:0   dfail:0   fail:0   skip:64  time:260s
fi-ivb-3520m     total:288  pass:258  dwarn:0   dfail:0   fail:0   skip:30  time:479s
fi-ivb-3770      total:288  pass:258  dwarn:0   dfail:0   fail:0   skip:30  time:455s
fi-kbl-7560u     total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:523s
fi-kbl-7567u     total:288  pass:267  dwarn:0   dfail:0   fail:0   skip:21  time:475s
fi-kbl-r         total:288  pass:260  dwarn:0   dfail:0   fail:0   skip:28  time:530s
fi-skl-6260u     total:288  pass:267  dwarn:0   dfail:0   fail:0   skip:21  time:458s
fi-skl-6600u     total:288  pass:260  dwarn:0   dfail:0   fail:0   skip:28  time:539s
fi-skl-6700hq    total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:554s
fi-skl-6700k     total:288  pass:263  dwarn:0   dfail:0   fail:0   skip:25  time:513s
fi-skl-6770hq    total:288  pass:267  dwarn:0   dfail:0   fail:0   skip:21  time:493s
fi-snb-2520m     total:245  pass:210  dwarn:0   dfail:0   fail:0   skip:34 
fi-snb-2600      total:288  pass:247  dwarn:0   dfail:0   fail:0   skip:41  time:424s
Blacklisted hosts:
fi-cfl-s2        total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:611s
fi-cnl-y         total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:615s
fi-glk-dsi       total:288  pass:257  dwarn:0   dfail:0   fail:0   skip:31  time:490s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_601/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH i-g-t v8] tests/kms_frontbuffer_tracking: Including DRRS test coverage
  2017-12-06 15:13             ` [PATCH i-g-t v8] tests/kms_frontbuffer_tracking: Including DRRS test coverage Lohith BS
@ 2017-12-06 18:30               ` Paulo Zanoni
  2017-12-11 13:12               ` [PATCH i-g-t v9] " Lohith BS
  1 sibling, 0 replies; 59+ messages in thread
From: Paulo Zanoni @ 2017-12-06 18:30 UTC (permalink / raw)
  To: Lohith BS, intel-gfx, rodrigo.vivi, jani.saarinen, daniel.vetter,
	chris, marius.c.vlad
  Cc: ankit.k.nautiyal

Em Qua, 2017-12-06 às 20:43 +0530, Lohith BS escreveu:
> Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's
> refresh rate to the lowest vrefresh supported by panel, when frame is
> not flipped for more than a Sec.
> 
> In kernel, DRRS uses the front buffer tracking infrastructure.
> Hence DRRS test coverage is added along with other frontbuffer
> tracking
> based features such as FBC and PSR tests.
> 
> Here, we are testing DRRS with other features in all possible
> combinations, in all required test cases, to capture any possible
> regression.
> 
> v2: Addressed the comments and suggestions from Vlad, Marius.
>     The signoff details from the earlier work are also included.
> 
> v3: Modified vblank rate calculation by using reply-sequence,
>     provided by drmWaitVBlank, as suggested by Chris Wilson.
> 
> v4: As suggested from Chris Wilson and Daniel Vetter
>     1) Avoided using pthread for calculating vblank refresh rate,
>        instead used drmWaitVBlank reply sequence.
>     2) Avoided using kernel-specific info like transitional delays,
>        instead polling mechanism with timeout is used.
>     3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
>        instead of having a separate test.
> 
> v5: This patch adds DRRS as a new feature in the
>     kms_frontbuffer_tracking IGT.
>     DRRS switch to lower vrefresh rate is tested at slow-draw
> subtest.
> 
>     Note:
>     1) Currently kernel doesn't have support to enable and disable
>        the DRRS feature dynamically(as in case of PSR). Hence if the
>        panel supports DRRS it will be enabled by default.
> 
>     This is in continuation of last patch
> 	"https://patchwork.freedesktop.org/patch/162726/"
> 
> v6: This patch adds runtime enable and disable feature for testing
> DRRS
> 
> v7: This patch adds runtime enable and disable feature for testing
> DRRS
>     through debugfs entry "i915_drrs_ctl".
> 
> v8: Commit message is updated to reflect current implementation.


Not a full review, but: coding style and indentation needs to be fixed.

There are a few chunks where the only thing the patch does is make
indentation wrong.

There are chunks that only add blank lines.

There are chunks that leave functions without empty lines between them.

There are chunks that add code that do not follow the coding style used
by the rest of the file (which is the same style used by the Kernel).

There are chunks that use white spaces in places where tabs should be
used.

Please review your own patch before we can review it.

FEATURE_COUNT needs to be 8. Any undesired combinations need explicit
code to avoid them with a nice comment explaining why.

> 
> Signed-off-by: Lohith BS <lohith.bs@intel.com>
> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
> ---
>  tests/kms_frontbuffer_tracking.c | 166
> +++++++++++++++++++++++++++++++++++----
>  1 file changed, 151 insertions(+), 15 deletions(-)
> 
> diff --git a/tests/kms_frontbuffer_tracking.c
> b/tests/kms_frontbuffer_tracking.c
> index a068c8a..b06d304 100644
> --- a/tests/kms_frontbuffer_tracking.c
> +++ b/tests/kms_frontbuffer_tracking.c
> @@ -34,7 +34,7 @@
>  
>  
>  IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking
> mechanism and "
> -		     "its related features: FBC and PSR");
> +			"its related features: FBC, DRRS and PSR");
>  
>  /*
>   * One of the aspects of this test is that, for every subtest, we
> try different
> @@ -105,8 +105,9 @@ struct test_mode {
>  		FEATURE_NONE  = 0,
>  		FEATURE_FBC   = 1,
>  		FEATURE_PSR   = 2,
> -		FEATURE_COUNT = 4,
> -		FEATURE_DEFAULT = 4,
> +		FEATURE_DRRS  = 4,
> +		FEATURE_COUNT = 6,
> +		FEATURE_DEFAULT = 6,
>  	} feature;
>  
>  	/* Possible pixel formats. We just use FORMAT_DEFAULT for
> most tests and
> @@ -156,6 +157,7 @@ struct rect {
>  struct {
>  	int fd;
>  	int debugfs;
> +	int drrs_debugfs_fd;
>  	drmModeResPtr res;
>  	drmModeConnectorPtr connectors[MAX_CONNECTORS];
>  	drmModeEncoderPtr encoders[MAX_ENCODERS];
> @@ -178,10 +180,8 @@ struct {
>  
>  struct {
>  	bool can_test;
> -} psr = {
> -	.can_test = false,
> -};
> -
> +} psr = { .can_test = false,},
> +drrs = { .can_test = false,};
>  
>  #define SINK_CRC_SIZE 12
>  typedef struct {
> @@ -775,8 +775,8 @@ static bool set_mode_for_params(struct
> modeset_params *params)
>  	int rc;
>  
>  	rc = drmModeSetCrtc(drm.fd, params->crtc_id, params->fb.fb-
> >fb_id,
> -			    params->fb.x, params->fb.y,
> -			    &params->connector_id, 1, params->mode);
> +				params->fb.x, params->fb.y,
> +				&params->connector_id, 1, params-
> >mode);
>  	return (rc == 0);
>  }
>  
> @@ -822,6 +822,63 @@ static void psr_print_status(void)
>  	igt_info("PSR status:\n%s\n", buf);
>  }
>  
> +void drrs_set(unsigned int val)
> +{
> +	char buf[16];
> +
> +	igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" :
> "dis", val);
> +	snprintf(buf, sizeof(buf), "%d", val);
> +	igt_assert_eq(write(drm.drrs_debugfs_fd, buf, strlen(buf)),
> strlen(buf));
> +}
> +
> +static bool is_drrs_high(void)
> +{
> +	char buf[256];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS_HIGH_RR");
> +}
> +
> +static bool is_drrs_low(void)
> +{
> +	char buf[256];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS_LOW_RR");
> +}
> +
> +static bool is_drrs_supported(void)
> +{
> +	char buf[256];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS Supported: Yes");
> +}
> +
> +static bool is_drrs_inactive(void)
> +{
> +	char buf[256];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +
> +	if (strstr(buf, "No active crtc found"))
> +		return true;
> +	if (strstr(buf, "Idleness DRRS: Disabled"))
> +		return true;
> +	if (strstr(buf, "DRRS Supported : No"))
> +		return true;
> +
> +	return false;
> +}
> +
> +static void drrs_print_status(void)
> +{
> +	char buf[256];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	igt_info("DRRS STATUS :\n%s\n", buf);
> +}
> +
>  static struct timespec fbc_get_last_action(void)
>  {
>  	struct timespec ret = { 0, 0 };
> @@ -932,10 +989,17 @@ static bool psr_wait_until_enabled(void)
>  	return igt_wait(psr_is_enabled(), 5000, 1);
>  }
>  
> +static bool drrs_wait_until_rr_switch_to_low(void)
> +{
> +	return igt_wait(is_drrs_low(), 5000, 1);
> +}
> +
>  #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
>  #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
>  #define psr_enable() igt_set_module_param_int("enable_psr", 1)
>  #define psr_disable() igt_set_module_param_int("enable_psr", 0)
> +#define drrs_enable() drrs_set(1)
> +#define drrs_disable() drrs_set(0)
>  
>  static void get_sink_crc(sink_crc_t *crc, bool mandatory)
>  {
> @@ -1182,6 +1246,7 @@ static void disable_features(const struct
> test_mode *t)
>  
>  	fbc_disable();
>  	psr_disable();
> +	drrs_disable();
>  }
>  
>  static void *busy_thread_func(void *data)
> @@ -1506,6 +1571,11 @@ static void teardown_crcs(void)
>  	igt_pipe_crc_free(pipe_crc);
>  }
>  
> +static void teardown_drrs(void)
> +{
> +	if (drm.drrs_debugfs_fd != -1)
> +		close(drm.drrs_debugfs_fd);
> +}
>  static bool fbc_supported_on_chipset(void)
>  {
>  	char buf[128];
> @@ -1575,6 +1645,30 @@ static void teardown_psr(void)
>  {
>  }
>  
> +static void setup_drrs(void)
> +{
> +	int is_drrs_debug_ctl;
> +	if (get_connector(prim_mode_params.connector_id)-
> >connector_type !=
> +			DRM_MODE_CONNECTOR_eDP) {
> +		igt_info("Can't test DRRS: no usable eDP
> screen.\n");
> +		return;
> +	}
> +
> +	if (!is_drrs_supported()) {
> +		igt_info("Can't test DRRS: Not supported.\n");
> +		return;
> +	}
> +
> +	drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl",
> O_WRONLY);
> +
> +	if (drm.drrs_debugfs_fd > 0) {
> +		drrs.can_test = true;
> +	} else {
> +		igt_info("Can't test DRRS: Debugfs entry
> i915_drrs_ctl not found.\n");
> +		drrs.can_test = false;
> +	}
> +}
> +
>  static void setup_environment(void)
>  {
>  	setup_drm();
> @@ -1582,7 +1676,7 @@ static void setup_environment(void)
>  
>  	setup_fbc();
>  	setup_psr();
> -
> +	setup_drrs();
>  	setup_crcs();
>  }
>  
> @@ -1594,6 +1688,7 @@ static void teardown_environment(void)
>  	teardown_psr();
>  	teardown_fbc();
>  	teardown_modeset();
> +	teardown_drrs();
>  	teardown_drm();
>  }
>  
> @@ -1660,6 +1755,11 @@ static void do_flush(const struct test_mode
> *t)
>  #define ASSERT_PSR_ENABLED		(1 << 6)
>  #define ASSERT_PSR_DISABLED		(1 << 7)
>  
> +#define DRRS_ASSERT_FLAGS               (7 << 8)
> +#define ASSERT_DRRS_HIGH                (1 << 8)
> +#define ASSERT_DRRS_LOW                 (1 << 9)
> +#define ASSERT_DRRS_INACTIVE            (1 << 10)
> +
>  static int adjust_assertion_flags(const struct test_mode *t, int
> flags)
>  {
>  	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
> @@ -1667,12 +1767,17 @@ static int adjust_assertion_flags(const
> struct test_mode *t, int flags)
>  			flags |= ASSERT_FBC_ENABLED;
>  		if (!(flags & ASSERT_PSR_DISABLED))
>  			flags |= ASSERT_PSR_ENABLED;
> +		if (!((flags & ASSERT_DRRS_LOW) || (flags &
> ASSERT_DRRS_INACTIVE))) {
> +			flags |= ASSERT_DRRS_HIGH;
> +		}
>  	}
>  
>  	if ((t->feature & FEATURE_FBC) == 0)
>  		flags &= ~FBC_ASSERT_FLAGS;
>  	if ((t->feature & FEATURE_PSR) == 0)
>  		flags &= ~PSR_ASSERT_FLAGS;
> +	if ((t->feature & FEATURE_DRRS) == 0)
> +		flags &= ~DRRS_ASSERT_FLAGS;
>  
>  	return flags;
>  }
> @@ -1704,6 +1809,23 @@ static void do_status_assertions(int flags)
>  		return;
>  	}
>  
> +	if (flags & ASSERT_DRRS_HIGH) {
> +		if (!is_drrs_high()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS HIGH\n");
> +		}
> +	} else if (flags & ASSERT_DRRS_LOW) {
> +		if (!drrs_wait_until_rr_switch_to_low()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS LOW\n");
> +		}
> +	} else if (flags & ASSERT_DRRS_INACTIVE) {
> +		if (!is_drrs_inactive()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS INACTIVE\n");
> +		}
> +	}
> +
>  	if (flags & ASSERT_FBC_ENABLED) {
>  		igt_require(!fbc_not_enough_stolen());
>  		igt_require(!fbc_stride_not_supported());
> @@ -1831,6 +1953,8 @@ static void enable_features_for_test(const
> struct test_mode *t)
>  		fbc_enable();
>  	if (t->feature & FEATURE_PSR)
>  		psr_enable();
> +	if (t->feature & FEATURE_DRRS)
> +		drrs_enable();
>  }
>  
>  static void check_test_requirements(const struct test_mode *t)
> @@ -1850,6 +1974,10 @@ static void check_test_requirements(const
> struct test_mode *t)
>  			      "Can't test PSR without sink CRCs\n");
>  	}
>  
> +	if (t->feature & FEATURE_DRRS)
> +		igt_require_f(drrs.can_test,
> +				"Can't test DRRS with the current
> outputs\n");
> +
>  	if (opt.only_pipes != PIPE_COUNT)
>  		igt_require(t->pipes == opt.only_pipes);
>  }
> @@ -1971,7 +2099,7 @@ static void rte_subtest(const struct test_mode
> *t)
>  
>  	unset_all_crtcs();
>  	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
> -		      DONT_ASSERT_CRC);
> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>  
>  	enable_prim_screen_and_wait(t);
>  	set_cursor_for_test(t, &prim_mode_params);
> @@ -2219,6 +2347,7 @@ static void badformat_subtest(const struct
> test_mode *t)
>  		assertions |= ASSERT_FBC_DISABLED;
>  	if (!psr_valid)
>  		assertions |= ASSERT_PSR_DISABLED;
> +
>  	do_assertions(assertions);
>  }
>  
> @@ -2277,7 +2406,11 @@ static void slow_draw_subtest(const struct
> test_mode *t)
>  		sleep(2);
>  
>  		update_wanted_crc(t, &pattern->crcs[t->format][r]);
> -		do_assertions(0);
> +
> +		if (t->feature & FEATURE_DRRS)
> +			do_assertions(ASSERT_DRRS_LOW);
> +		else
> +			do_assertions(0);
>  	}
>  }
>  
> @@ -2892,8 +3025,7 @@ static void suspend_subtest(const struct
> test_mode *t)
>  	sleep(5);
>  	igt_system_suspend_autoresume(SUSPEND_STATE_MEM,
> SUSPEND_TEST_NONE);
>  	sleep(5);
> -	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
> -		      DONT_ASSERT_CRC);
> +	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
> DONT_ASSERT_CRC);
>  
>  	set_mode_for_params(params);
>  	do_assertions(0);
> @@ -3375,6 +3507,10 @@ static const char *feature_str(int feature)
>  		return "psr";
>  	case FEATURE_FBC | FEATURE_PSR:
>  		return "fbcpsr";
> +	case FEATURE_DRRS:
> +		return "drrs";
> +	case FEATURE_FBC | FEATURE_DRRS:
> +		return "fbcdrrs";
>  	default:
>  		igt_assert(false);
>  	}
> @@ -3639,7 +3775,7 @@ int main(int argc, char *argv[])
>  				tilingchange_subtest(&t);
>  		}
>  
> -		if (t.feature & FEATURE_PSR)
> +		if ((t.feature & FEATURE_PSR) || (t.feature &
> FEATURE_DRRS))
>  			igt_subtest_f("%s-slowdraw",
> feature_str(t.feature))
>  				slow_draw_subtest(&t);
>  
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH i-g-t v9] tests/kms_frontbuffer_tracking: Including DRRS test coverage
  2017-12-06 15:13             ` [PATCH i-g-t v8] tests/kms_frontbuffer_tracking: Including DRRS test coverage Lohith BS
  2017-12-06 18:30               ` Paulo Zanoni
@ 2017-12-11 13:12               ` Lohith BS
  2018-01-01 13:45                 ` [PATCH i-g-t v10] " Lohith BS
  1 sibling, 1 reply; 59+ messages in thread
From: Lohith BS @ 2017-12-11 13:12 UTC (permalink / raw)
  To: intel-gfx, rodrigo.vivi, jani.saarinen, daniel.vetter, chris
  Cc: ankit.k.nautiyal, paulo.r.zanoni

Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's
refresh rate to the lowest vrefresh supported by panel, when frame is
not flipped for more than a Sec.

In kernel, DRRS uses the front buffer tracking infrastructure.
Hence DRRS test coverage is added along with other frontbuffer tracking
based features such as FBC and PSR tests.

Here, we are testing DRRS with other features in all possible
combinations, in all required test cases, to capture any possible
regression.

v2: Addressed the comments and suggestions from Vlad, Marius.
    The signoff details from the earlier work are also included.

v3: Modified vblank rate calculation by using reply-sequence,
    provided by drmWaitVBlank, as suggested by Chris Wilson.

v4: As suggested from Chris Wilson and Daniel Vetter
    1) Avoided using pthread for calculating vblank refresh rate,
       instead used drmWaitVBlank reply sequence.
    2) Avoided using kernel-specific info like transitional delays,
       instead polling mechanism with timeout is used.
    3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
       instead of having a separate test.

v5: This patch adds DRRS as a new feature in the
    kms_frontbuffer_tracking IGT.
    DRRS switch to lower vrefresh rate is tested at slow-draw subtest.

    Note:
    1) Currently kernel doesn't have support to enable and disable
       the DRRS feature dynamically(as in case of PSR). Hence if the
       panel supports DRRS it will be enabled by default.

    This is in continuation of last patch
	"https://patchwork.freedesktop.org/patch/162726/"

v6: This patch adds runtime enable and disable feature for testing DRRS

v7: This patch adds runtime enable and disable feature for testing DRRS
    through debugfs entry "i915_drrs_ctl".

v8: Commit message is updated to reflect current implementation.

v9: Addressed Paulo Zanoni comments.
    Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL.

Signed-off-by: Lohith BS <lohith.bs@intel.com>
Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
---
 tests/kms_frontbuffer_tracking.c | 183 +++++++++++++++++++++++++++++++++++++--
 1 file changed, 176 insertions(+), 7 deletions(-)

diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
index a068c8a..19e38cb 100644
--- a/tests/kms_frontbuffer_tracking.c
+++ b/tests/kms_frontbuffer_tracking.c
@@ -34,7 +34,7 @@
 
 
 IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
-		     "its related features: FBC and PSR");
+		     "its related features: FBC, PSR and DRRS");
 
 /*
  * One of the aspects of this test is that, for every subtest, we try different
@@ -105,8 +105,9 @@ struct test_mode {
 		FEATURE_NONE  = 0,
 		FEATURE_FBC   = 1,
 		FEATURE_PSR   = 2,
-		FEATURE_COUNT = 4,
-		FEATURE_DEFAULT = 4,
+		FEATURE_DRRS  = 4,
+		FEATURE_COUNT = 8,
+		FEATURE_DEFAULT = 8,
 	} feature;
 
 	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
@@ -156,6 +157,7 @@ struct rect {
 struct {
 	int fd;
 	int debugfs;
+	int drrs_debugfs_fd;
 	drmModeResPtr res;
 	drmModeConnectorPtr connectors[MAX_CONNECTORS];
 	drmModeEncoderPtr encoders[MAX_ENCODERS];
@@ -182,6 +184,15 @@ struct {
 	.can_test = false,
 };
 
+#define MAX_DRRS_STATUS_BUF_LEN 256
+
+struct {
+	bool can_test;
+	bool is_psr_drrs_combo;
+} drrs = {
+	.can_test = false,
+	.is_psr_drrs_combo = false,
+};
 
 #define SINK_CRC_SIZE 12
 typedef struct {
@@ -822,6 +833,64 @@ static void psr_print_status(void)
 	igt_info("PSR status:\n%s\n", buf);
 }
 
+void drrs_set(unsigned int val)
+{
+	char buf[2];
+
+	igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val);
+	snprintf(buf, sizeof(buf), "%d", val);
+	igt_assert_eq(write(drm.drrs_debugfs_fd,
+		      buf, strlen(buf)), strlen(buf));
+}
+
+static bool is_drrs_high(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS_HIGH_RR");
+}
+
+static bool is_drrs_low(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS_LOW_RR");
+}
+
+static bool is_drrs_supported(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS Supported: Yes");
+}
+
+static bool is_drrs_inactive(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+
+	if (strstr(buf, "No active crtc found"))
+		return true;
+	if (strstr(buf, "Idleness DRRS: Disabled"))
+		return true;
+	if (strstr(buf, "DRRS Supported : No"))
+		return true;
+
+	return false;
+}
+
+static void drrs_print_status(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+	igt_info("DRRS STATUS :\n%s\n", buf);
+}
+
 static struct timespec fbc_get_last_action(void)
 {
 	struct timespec ret = { 0, 0 };
@@ -932,10 +1001,17 @@ static bool psr_wait_until_enabled(void)
 	return igt_wait(psr_is_enabled(), 5000, 1);
 }
 
+static bool drrs_wait_until_rr_switch_to_low(void)
+{
+	return igt_wait(is_drrs_low(), 5000, 1);
+}
+
 #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
 #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
 #define psr_enable() igt_set_module_param_int("enable_psr", 1)
 #define psr_disable() igt_set_module_param_int("enable_psr", 0)
+#define drrs_enable()	drrs_set(1)
+#define drrs_disable()	drrs_set(0)
 
 static void get_sink_crc(sink_crc_t *crc, bool mandatory)
 {
@@ -1182,6 +1258,7 @@ static void disable_features(const struct test_mode *t)
 
 	fbc_disable();
 	psr_disable();
+	drrs_disable();
 }
 
 static void *busy_thread_func(void *data)
@@ -1506,6 +1583,12 @@ static void teardown_crcs(void)
 	igt_pipe_crc_free(pipe_crc);
 }
 
+static void teardown_drrs(void)
+{
+	if (drm.drrs_debugfs_fd != -1)
+		close(drm.drrs_debugfs_fd);
+}
+
 static bool fbc_supported_on_chipset(void)
 {
 	char buf[128];
@@ -1575,6 +1658,29 @@ static void teardown_psr(void)
 {
 }
 
+static void setup_drrs(void)
+{
+	if (get_connector(prim_mode_params.connector_id)->connector_type !=
+		DRM_MODE_CONNECTOR_eDP) {
+		igt_info("Can't test DRRS: no usable eDP screen.\n");
+		return;
+	}
+
+	if (!is_drrs_supported()) {
+		igt_info("Can't test DRRS: Not supported.\n");
+		return;
+	}
+
+	drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY);
+
+	if (drm.drrs_debugfs_fd > 0) {
+		drrs.can_test = true;
+	} else {
+		igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n");
+		drrs.can_test = false;
+	}
+}
+
 static void setup_environment(void)
 {
 	setup_drm();
@@ -1582,7 +1688,7 @@ static void setup_environment(void)
 
 	setup_fbc();
 	setup_psr();
-
+	setup_drrs();
 	setup_crcs();
 }
 
@@ -1594,6 +1700,7 @@ static void teardown_environment(void)
 	teardown_psr();
 	teardown_fbc();
 	teardown_modeset();
+	teardown_drrs();
 	teardown_drm();
 }
 
@@ -1660,6 +1767,11 @@ static void do_flush(const struct test_mode *t)
 #define ASSERT_PSR_ENABLED		(1 << 6)
 #define ASSERT_PSR_DISABLED		(1 << 7)
 
+#define DRRS_ASSERT_FLAGS		(7 << 8)
+#define ASSERT_DRRS_HIGH		(1 << 8)
+#define ASSERT_DRRS_LOW		(1 << 9)
+#define ASSERT_DRRS_INACTIVE		(1 << 10)
+
 static int adjust_assertion_flags(const struct test_mode *t, int flags)
 {
 	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
@@ -1667,12 +1779,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
 			flags |= ASSERT_FBC_ENABLED;
 		if (!(flags & ASSERT_PSR_DISABLED))
 			flags |= ASSERT_PSR_ENABLED;
+		if (!((flags & ASSERT_DRRS_LOW) ||
+			(flags & ASSERT_DRRS_INACTIVE)))
+			flags |= ASSERT_DRRS_HIGH;
 	}
 
 	if ((t->feature & FEATURE_FBC) == 0)
 		flags &= ~FBC_ASSERT_FLAGS;
 	if ((t->feature & FEATURE_PSR) == 0)
 		flags &= ~PSR_ASSERT_FLAGS;
+	if ((t->feature & FEATURE_DRRS) == 0)
+		flags &= ~DRRS_ASSERT_FLAGS;
 
 	return flags;
 }
@@ -1704,6 +1821,23 @@ static void do_status_assertions(int flags)
 		return;
 	}
 
+	if (flags & ASSERT_DRRS_HIGH) {
+		if (!is_drrs_high()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS HIGH\n");
+		}
+	} else if (flags & ASSERT_DRRS_LOW) {
+		if (!drrs_wait_until_rr_switch_to_low()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS LOW\n");
+		}
+	} else if (flags & ASSERT_DRRS_INACTIVE) {
+		if (!is_drrs_inactive()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS INACTIVE\n");
+		}
+	}
+
 	if (flags & ASSERT_FBC_ENABLED) {
 		igt_require(!fbc_not_enough_stolen());
 		igt_require(!fbc_stride_not_supported());
@@ -1831,6 +1965,8 @@ static void enable_features_for_test(const struct test_mode *t)
 		fbc_enable();
 	if (t->feature & FEATURE_PSR)
 		psr_enable();
+	if (t->feature & FEATURE_DRRS)
+		drrs_enable();
 }
 
 static void check_test_requirements(const struct test_mode *t)
@@ -1850,6 +1986,20 @@ static void check_test_requirements(const struct test_mode *t)
 			      "Can't test PSR without sink CRCs\n");
 	}
 
+	if (t->feature & FEATURE_DRRS)
+		igt_require_f(drrs.can_test,
+			      "Can't test DRRS with the current outputs\n");
+
+	/*
+	 * In kernel, When PSR is enabled, DRRS will be disabled. So If a test
+	 * case needs DRRS + PSR enabled, that will be skipped.
+	 */
+	drrs.is_psr_drrs_combo = ((t->feature & FEATURE_PSR) &&
+				  (t->feature & FEATURE_DRRS));
+
+	igt_require_f(!drrs.is_psr_drrs_combo,
+		      "Can't test PSR and DRRS together\n");
+
 	if (opt.only_pipes != PIPE_COUNT)
 		igt_require(t->pipes == opt.only_pipes);
 }
@@ -1971,7 +2121,7 @@ static void rte_subtest(const struct test_mode *t)
 
 	unset_all_crtcs();
 	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
-		      DONT_ASSERT_CRC);
+		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
 
 	enable_prim_screen_and_wait(t);
 	set_cursor_for_test(t, &prim_mode_params);
@@ -2063,6 +2213,13 @@ static void draw_subtest(const struct test_mode *t)
 	if (op_disables_psr(t, t->method))
 		assertions |= ASSERT_PSR_DISABLED;
 
+	/*
+	 * On FBS_INDIVIDUAL, write to offscreen plane will not touch the
+	 * current frambuffer. Hence assert for DRRS_LOW.
+	 */
+	if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN))
+		assertions |= ASSERT_DRRS_LOW;
+
 	prepare_subtest(t, pattern);
 	target = pick_target(t, params);
 
@@ -2277,7 +2434,11 @@ static void slow_draw_subtest(const struct test_mode *t)
 		sleep(2);
 
 		update_wanted_crc(t, &pattern->crcs[t->format][r]);
-		do_assertions(0);
+
+		if (t->feature & FEATURE_DRRS)
+			do_assertions(ASSERT_DRRS_LOW);
+		else
+			do_assertions(0);
 	}
 }
 
@@ -3375,6 +3536,14 @@ static const char *feature_str(int feature)
 		return "psr";
 	case FEATURE_FBC | FEATURE_PSR:
 		return "fbcpsr";
+	case FEATURE_DRRS:
+		return "drrs";
+	case FEATURE_FBC | FEATURE_DRRS:
+		return "fbcdrrs";
+	case FEATURE_PSR | FEATURE_DRRS:
+		return "psrdrrs";
+	case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS:
+		return "fbcpsrdrrs";
 	default:
 		igt_assert(false);
 	}
@@ -3639,7 +3808,7 @@ int main(int argc, char *argv[])
 				tilingchange_subtest(&t);
 		}
 
-		if (t.feature & FEATURE_PSR)
+		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
 			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
 				slow_draw_subtest(&t);
 
-- 
1.9.1

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

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

* ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev4)
  2017-09-19 18:12     ` Rodrigo Vivi
                         ` (8 preceding siblings ...)
  2017-12-06 16:32       ` ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev3) Patchwork
@ 2017-12-11 15:56       ` Patchwork
  2017-12-11 17:11       ` ✗ Fi.CI.IGT: failure " Patchwork
                         ` (10 subsequent siblings)
  20 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2017-12-11 15:56 UTC (permalink / raw)
  To: Lohith BS; +Cc: intel-gfx

== Series Details ==

Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev4)
URL   : https://patchwork.freedesktop.org/series/32888/
State : success

== Summary ==

IGT patchset tested on top of latest successful build
4d40a6776f08dd87b7e007da691b73d45a9bf1fa igt_fb: Add support for drawing to non-32bit Y/Yf tiled FBs

with latest DRM-Tip kernel build CI_DRM_3497
bb55ba9311de drm-tip: 2017y-12m-11d-11h-51m-11s UTC integration manifest

Testlist changes:
+++ 570 lines
--- 0 lines

Test debugfs_test:
        Subgroup read_all_entries:
                dmesg-fail -> FAIL       (fi-elk-e7500) fdo#103989 +1

fdo#103989 https://bugs.freedesktop.org/show_bug.cgi?id=103989

fi-bdw-5557u     total:288  pass:267  dwarn:0   dfail:0   fail:0   skip:21  time:440s
fi-bdw-gvtdvm    total:288  pass:264  dwarn:0   dfail:0   fail:0   skip:24  time:447s
fi-blb-e6850     total:288  pass:223  dwarn:1   dfail:0   fail:0   skip:64  time:382s
fi-bsw-n3050     total:288  pass:242  dwarn:0   dfail:0   fail:0   skip:46  time:519s
fi-bwr-2160      total:288  pass:183  dwarn:0   dfail:0   fail:0   skip:105 time:280s
fi-bxt-dsi       total:288  pass:258  dwarn:0   dfail:0   fail:0   skip:30  time:503s
fi-bxt-j4205     total:288  pass:259  dwarn:0   dfail:0   fail:0   skip:29  time:508s
fi-byt-j1900     total:288  pass:253  dwarn:0   dfail:0   fail:0   skip:35  time:486s
fi-byt-n2820     total:288  pass:249  dwarn:0   dfail:0   fail:0   skip:39  time:483s
fi-elk-e7500     total:224  pass:162  dwarn:15  dfail:0   fail:1   skip:45 
fi-gdg-551       total:288  pass:178  dwarn:1   dfail:0   fail:1   skip:108 time:271s
fi-glk-1         total:288  pass:260  dwarn:0   dfail:0   fail:0   skip:28  time:539s
fi-hsw-4770      total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:371s
fi-hsw-4770r     total:288  pass:224  dwarn:0   dfail:0   fail:0   skip:64  time:259s
fi-ilk-650       total:288  pass:228  dwarn:0   dfail:0   fail:0   skip:60  time:395s
fi-ivb-3770      total:288  pass:259  dwarn:0   dfail:0   fail:0   skip:29  time:456s
fi-kbl-7500u     total:288  pass:263  dwarn:1   dfail:0   fail:0   skip:24  time:486s
fi-kbl-7560u     total:288  pass:269  dwarn:0   dfail:0   fail:0   skip:19  time:528s
fi-kbl-7567u     total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:474s
fi-pnv-d510      total:288  pass:222  dwarn:1   dfail:0   fail:0   skip:65  time:603s
fi-skl-6600u     total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:541s
fi-skl-6700hq    total:288  pass:262  dwarn:0   dfail:0   fail:0   skip:26  time:567s
fi-skl-6700k     total:288  pass:264  dwarn:0   dfail:0   fail:0   skip:24  time:516s
fi-skl-6770hq    total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:493s
fi-skl-gvtdvm    total:288  pass:265  dwarn:0   dfail:0   fail:0   skip:23  time:447s
fi-snb-2520m     total:288  pass:249  dwarn:0   dfail:0   fail:0   skip:39  time:552s
fi-snb-2600      total:288  pass:248  dwarn:0   dfail:0   fail:0   skip:40  time:417s
Blacklisted hosts:
fi-cfl-s2        total:288  pass:262  dwarn:0   dfail:0   fail:0   skip:26  time:607s
fi-cnl-y         total:288  pass:262  dwarn:0   dfail:0   fail:0   skip:26  time:639s
fi-glk-dsi       total:288  pass:258  dwarn:0   dfail:0   fail:0   skip:30  time:490s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_643/issues.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* ✗ Fi.CI.IGT: failure for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev4)
  2017-09-19 18:12     ` Rodrigo Vivi
                         ` (9 preceding siblings ...)
  2017-12-11 15:56       ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev4) Patchwork
@ 2017-12-11 17:11       ` Patchwork
  2017-12-28 15:59       ` ✓ Fi.CI.BAT: success for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4) Patchwork
                         ` (9 subsequent siblings)
  20 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2017-12-11 17:11 UTC (permalink / raw)
  To: Lohith BS; +Cc: intel-gfx

== Series Details ==

Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev4)
URL   : https://patchwork.freedesktop.org/series/32888/
State : failure

== Summary ==

Test kms_frontbuffer_tracking:
        Subgroup fbc-1p-primscrn-spr-indfb-fullscreen:
                pass       -> FAIL       (shard-snb) fdo#101623 +58
        Subgroup fbc-rgb565-draw-mmap-cpu:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-indfb-plflip-blt:
                pass       -> FAIL       (shard-snb) fdo#103167 +42
        Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-gtt:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-cur-indfb-draw-mmap-cpu:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-pri-indfb-draw-mmap-wc:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-spr-indfb-move:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-rgb101010-draw-mmap-gtt:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-spr-indfb-draw-pwrite:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-offscren-pri-indfb-draw-mmap-wc:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-tilingchange:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-cur-indfb-draw-mmap-wc:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-pri-indfb-draw-pwrite:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-rgb101010-draw-pwrite:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-cur-indfb-onoff:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-spr-indfb-onoff:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-cpu:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-suspend:
                pass       -> FAIL       (shard-hsw) fdo#103540
        Subgroup fbc-rgb101010-draw-blt:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
Test kms_flip:
        Subgroup vblank-vs-suspend-interruptible:
                incomplete -> PASS       (shard-hsw) fdo#100368
        Subgroup flip-vs-modeset-vs-hang:
                pass       -> DMESG-WARN (shard-snb) fdo#103821
        Subgroup vblank-vs-modeset-suspend:
                pass       -> INCOMPLETE (shard-hsw)
Test drv_suspend:
        Subgroup debugfs-reader:
                pass       -> SKIP       (shard-snb)
Test gem_eio:
        Subgroup in-flight-suspend:
                skip       -> PASS       (shard-snb)
                pass       -> INCOMPLETE (shard-hsw)
Test perf:
        Subgroup oa-formats:
                pass       -> FAIL       (shard-hsw) fdo#104151
        Subgroup blocking:
                pass       -> FAIL       (shard-hsw) fdo#102252
Test gem_softpin:
        Subgroup noreloc-s4:
                dmesg-fail -> FAIL       (shard-hsw) fdo#103375 +1
Test gem_tiled_swapping:
        Subgroup non-threaded:
                incomplete -> PASS       (shard-hsw) fdo#104009

fdo#101623 https://bugs.freedesktop.org/show_bug.cgi?id=101623
fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
fdo#103540 https://bugs.freedesktop.org/show_bug.cgi?id=103540
fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368
fdo#103821 https://bugs.freedesktop.org/show_bug.cgi?id=103821
fdo#104151 https://bugs.freedesktop.org/show_bug.cgi?id=104151
fdo#102252 https://bugs.freedesktop.org/show_bug.cgi?id=102252
fdo#103375 https://bugs.freedesktop.org/show_bug.cgi?id=103375
fdo#104009 https://bugs.freedesktop.org/show_bug.cgi?id=104009

shard-hsw        total:3222 pass:1444 dwarn:1   dfail:0   fail:81  skip:1694 time:8674s
shard-snb        total:3262 pass:1241 dwarn:2   dfail:0   fail:79  skip:1940 time:8062s
Blacklisted hosts:
shard-apl        total:3262 pass:1616 dwarn:1   dfail:0   fail:94  skip:1550 time:13728s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_643/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* ✓ Fi.CI.BAT: success for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4)
  2017-09-19 18:12     ` Rodrigo Vivi
                         ` (10 preceding siblings ...)
  2017-12-11 17:11       ` ✗ Fi.CI.IGT: failure " Patchwork
@ 2017-12-28 15:59       ` Patchwork
  2017-12-28 16:45       ` ✓ Fi.CI.IGT: " Patchwork
                         ` (8 subsequent siblings)
  20 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2017-12-28 15:59 UTC (permalink / raw)
  To: Ramalingam C; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4)
URL   : https://patchwork.freedesktop.org/series/32887/
State : success

== Summary ==

Series 32887v4 series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS
https://patchwork.freedesktop.org/api/1.0/series/32887/revisions/4/mbox/

Test debugfs_test:
        Subgroup read_all_entries:
                dmesg-fail -> DMESG-WARN (fi-elk-e7500) fdo#103989
Test kms_pipe_crc_basic:
        Subgroup suspend-read-crc-pipe-b:
                pass       -> DMESG-WARN (fi-kbl-r) fdo#104172

fdo#103989 https://bugs.freedesktop.org/show_bug.cgi?id=103989
fdo#104172 https://bugs.freedesktop.org/show_bug.cgi?id=104172

fi-bdw-5557u     total:288  pass:267  dwarn:0   dfail:0   fail:0   skip:21  time:433s
fi-blb-e6850     total:288  pass:223  dwarn:1   dfail:0   fail:0   skip:64  time:383s
fi-bsw-n3050     total:288  pass:242  dwarn:0   dfail:0   fail:0   skip:46  time:495s
fi-bwr-2160      total:288  pass:183  dwarn:0   dfail:0   fail:0   skip:105 time:276s
fi-bxt-dsi       total:288  pass:258  dwarn:0   dfail:0   fail:0   skip:30  time:492s
fi-bxt-j4205     total:288  pass:259  dwarn:0   dfail:0   fail:0   skip:29  time:495s
fi-byt-j1900     total:288  pass:253  dwarn:0   dfail:0   fail:0   skip:35  time:474s
fi-byt-n2820     total:288  pass:249  dwarn:0   dfail:0   fail:0   skip:39  time:463s
fi-elk-e7500     total:224  pass:163  dwarn:15  dfail:0   fail:0   skip:45 
fi-gdg-551       total:288  pass:179  dwarn:0   dfail:0   fail:1   skip:108 time:265s
fi-glk-1         total:288  pass:260  dwarn:0   dfail:0   fail:0   skip:28  time:530s
fi-hsw-4770      total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:406s
fi-hsw-4770r     total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:411s
fi-ilk-650       total:288  pass:228  dwarn:0   dfail:0   fail:0   skip:60  time:421s
fi-ivb-3520m     total:288  pass:259  dwarn:0   dfail:0   fail:0   skip:29  time:473s
fi-ivb-3770      total:288  pass:255  dwarn:0   dfail:0   fail:0   skip:33  time:425s
fi-kbl-7500u     total:288  pass:263  dwarn:1   dfail:0   fail:0   skip:24  time:475s
fi-kbl-7560u     total:288  pass:268  dwarn:1   dfail:0   fail:0   skip:19  time:525s
fi-kbl-7567u     total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:467s
fi-kbl-r         total:288  pass:260  dwarn:1   dfail:0   fail:0   skip:27  time:521s
fi-pnv-d510      total:288  pass:222  dwarn:1   dfail:0   fail:0   skip:65  time:576s
fi-skl-6260u     total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:447s
fi-skl-6600u     total:288  pass:260  dwarn:1   dfail:0   fail:0   skip:27  time:530s
fi-skl-6700hq    total:288  pass:262  dwarn:0   dfail:0   fail:0   skip:26  time:548s
fi-skl-6700k2    total:288  pass:264  dwarn:0   dfail:0   fail:0   skip:24  time:511s
fi-skl-6770hq    total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:486s
fi-skl-gvtdvm    total:288  pass:265  dwarn:0   dfail:0   fail:0   skip:23  time:444s
fi-snb-2520m     total:288  pass:248  dwarn:0   dfail:0   fail:0   skip:40  time:548s
fi-snb-2600      total:288  pass:248  dwarn:0   dfail:0   fail:0   skip:40  time:413s
Blacklisted hosts:
fi-cfl-s2        total:288  pass:262  dwarn:0   dfail:0   fail:0   skip:26  time:597s
fi-glk-dsi       total:288  pass:258  dwarn:0   dfail:0   fail:0   skip:30  time:477s

42a41a56eb45fc94c3beec3968faffb97ba3e375 drm-tip: 2017y-12m-27d-14h-36m-54s UTC integration manifest
0126beb4cc7e i915/drrs/debugfs: psr status info addition
f7d75ffe3b38 drm/i915: Runtime disable for eDP DRRS

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_7587/issues.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* ✓ Fi.CI.IGT: success for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4)
  2017-09-19 18:12     ` Rodrigo Vivi
                         ` (11 preceding siblings ...)
  2017-12-28 15:59       ` ✓ Fi.CI.BAT: success for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4) Patchwork
@ 2017-12-28 16:45       ` Patchwork
  2018-01-02 10:37       ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev5) Patchwork
                         ` (7 subsequent siblings)
  20 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2017-12-28 16:45 UTC (permalink / raw)
  To: Ramalingam C; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4)
URL   : https://patchwork.freedesktop.org/series/32887/
State : success

== Summary ==

Test gem_tiled_swapping:
        Subgroup non-threaded:
                incomplete -> PASS       (shard-hsw) fdo#104218

fdo#104218 https://bugs.freedesktop.org/show_bug.cgi?id=104218

shard-hsw        total:2713 pass:1538 dwarn:1   dfail:0   fail:10  skip:1164 time:9467s
shard-snb        total:2713 pass:1311 dwarn:1   dfail:1   fail:9   skip:1391 time:8048s
Blacklisted hosts:
shard-apl        total:2713 pass:1686 dwarn:2   dfail:0   fail:23  skip:1001 time:13784s
shard-kbl        total:2713 pass:1803 dwarn:3   dfail:0   fail:26  skip:881 time:11097s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_7587/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH i-g-t v10] tests/kms_frontbuffer_tracking: Including DRRS test coverage
  2017-12-11 13:12               ` [PATCH i-g-t v9] " Lohith BS
@ 2018-01-01 13:45                 ` Lohith BS
  2018-01-02 20:34                   ` Rodrigo Vivi
  2018-01-03 15:02                   ` [PATCH i-g-t v11] " Lohith BS
  0 siblings, 2 replies; 59+ messages in thread
From: Lohith BS @ 2018-01-01 13:45 UTC (permalink / raw)
  To: intel-gfx, rodrigo.vivi, jani.saarinen, daniel.vetter, chris,
	marius.c.vlad, jari.tahvanainen
  Cc: ankit.k.nautiyal, paulo.r.zanoni

Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's
refresh rate to the lowest vrefresh supported by panel, when frame is
not flipped for more than a Sec.

In kernel, DRRS uses the front buffer tracking infrastructure.
Hence DRRS test coverage is added along with other frontbuffer tracking
based features such as FBC and PSR tests.

Here, we are testing DRRS with other features in all possible
combinations, in all required test cases, to capture any possible
regression.

v2: Addressed the comments and suggestions from Vlad, Marius.
    The signoff details from the earlier work are also included.

v3: Modified vblank rate calculation by using reply-sequence,
    provided by drmWaitVBlank, as suggested by Chris Wilson.

v4: As suggested from Chris Wilson and Daniel Vetter
    1) Avoided using pthread for calculating vblank refresh rate,
       instead used drmWaitVBlank reply sequence.
    2) Avoided using kernel-specific info like transitional delays,
       instead polling mechanism with timeout is used.
    3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
       instead of having a separate test.

v5: This patch adds DRRS as a new feature in the
    kms_frontbuffer_tracking IGT.
    DRRS switch to lower vrefresh rate is tested at slow-draw subtest.

    Note:
    1) Currently kernel doesn't have support to enable and disable
       the DRRS feature dynamically(as in case of PSR). Hence if the
       panel supports DRRS it will be enabled by default.

    This is in continuation of last patch
	"https://patchwork.freedesktop.org/patch/162726/"

v6: This patch adds runtime enable and disable feature for testing DRRS

v7: This patch adds runtime enable and disable feature for testing DRRS
    through debugfs entry "i915_drrs_ctl".

v8: Commit message is updated to reflect current implementation.

v9: Addressed Paulo Zanoni comments.
    Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL.

v10: Corrected DRRS state expectation in suspend related subtests.

Signed-off-by: Lohith BS <lohith.bs@intel.com>
Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
---
 tests/kms_frontbuffer_tracking.c | 188 +++++++++++++++++++++++++++++++++++++--
 1 file changed, 179 insertions(+), 9 deletions(-)

diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
index 1601cab..1039c9e 100644
--- a/tests/kms_frontbuffer_tracking.c
+++ b/tests/kms_frontbuffer_tracking.c
@@ -34,7 +34,7 @@
 
 
 IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
-		     "its related features: FBC and PSR");
+		     "its related features: FBC, PSR and DRRS");
 
 /*
  * One of the aspects of this test is that, for every subtest, we try different
@@ -105,8 +105,9 @@ struct test_mode {
 		FEATURE_NONE  = 0,
 		FEATURE_FBC   = 1,
 		FEATURE_PSR   = 2,
-		FEATURE_COUNT = 4,
-		FEATURE_DEFAULT = 4,
+		FEATURE_DRRS  = 4,
+		FEATURE_COUNT = 8,
+		FEATURE_DEFAULT = 8,
 	} feature;
 
 	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
@@ -156,6 +157,7 @@ struct rect {
 struct {
 	int fd;
 	int debugfs;
+	int drrs_debugfs_fd;
 	drmModeResPtr res;
 	drmModeConnectorPtr connectors[MAX_CONNECTORS];
 	drmModeEncoderPtr encoders[MAX_ENCODERS];
@@ -182,6 +184,15 @@ struct {
 	.can_test = false,
 };
 
+#define MAX_DRRS_STATUS_BUF_LEN 256
+
+struct {
+	bool can_test;
+	bool is_psr_drrs_combo;
+} drrs = {
+	.can_test = false,
+	.is_psr_drrs_combo = false,
+};
 
 #define SINK_CRC_SIZE 12
 typedef struct {
@@ -825,6 +836,64 @@ static void psr_print_status(void)
 	igt_info("PSR status:\n%s\n", buf);
 }
 
+void drrs_set(unsigned int val)
+{
+	char buf[2];
+
+	igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val);
+	snprintf(buf, sizeof(buf), "%d", val);
+	igt_assert_eq(write(drm.drrs_debugfs_fd,
+		      buf, strlen(buf)), strlen(buf));
+}
+
+static bool is_drrs_high(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS_HIGH_RR");
+}
+
+static bool is_drrs_low(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS_LOW_RR");
+}
+
+static bool is_drrs_supported(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS Supported: Yes");
+}
+
+static bool is_drrs_inactive(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+
+	if (strstr(buf, "No active crtc found"))
+		return true;
+	if (strstr(buf, "Idleness DRRS: Disabled"))
+		return true;
+	if (strstr(buf, "DRRS Supported : No"))
+		return true;
+
+	return false;
+}
+
+static void drrs_print_status(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+	igt_info("DRRS STATUS :\n%s\n", buf);
+}
+
 static struct timespec fbc_get_last_action(void)
 {
 	struct timespec ret = { 0, 0 };
@@ -935,10 +1004,17 @@ static bool psr_wait_until_enabled(void)
 	return igt_wait(psr_is_enabled(), 5000, 1);
 }
 
+static bool drrs_wait_until_rr_switch_to_low(void)
+{
+	return igt_wait(is_drrs_low(), 5000, 1);
+}
+
 #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
 #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
 #define psr_enable() igt_set_module_param_int("enable_psr", 1)
 #define psr_disable() igt_set_module_param_int("enable_psr", 0)
+#define drrs_enable()	drrs_set(1)
+#define drrs_disable()	drrs_set(0)
 
 static void get_sink_crc(sink_crc_t *crc, bool mandatory)
 {
@@ -1184,6 +1260,7 @@ static void disable_features(const struct test_mode *t)
 
 	fbc_disable();
 	psr_disable();
+	drrs_disable();
 }
 
 static void *busy_thread_func(void *data)
@@ -1508,6 +1585,12 @@ static void teardown_crcs(void)
 	igt_pipe_crc_free(pipe_crc);
 }
 
+static void teardown_drrs(void)
+{
+	if (drm.drrs_debugfs_fd != -1)
+		close(drm.drrs_debugfs_fd);
+}
+
 static bool fbc_supported_on_chipset(void)
 {
 	char buf[128];
@@ -1577,6 +1660,29 @@ static void teardown_psr(void)
 {
 }
 
+static void setup_drrs(void)
+{
+	if (get_connector(prim_mode_params.connector_id)->connector_type !=
+	    DRM_MODE_CONNECTOR_eDP) {
+		igt_info("Can't test DRRS: no usable eDP screen.\n");
+		return;
+	}
+
+	if (!is_drrs_supported()) {
+		igt_info("Can't test DRRS: Not supported.\n");
+		return;
+	}
+
+	drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY);
+
+	if (drm.drrs_debugfs_fd > 0) {
+		drrs.can_test = true;
+	} else {
+		igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n");
+		drrs.can_test = false;
+	}
+}
+
 static void setup_environment(void)
 {
 	setup_drm();
@@ -1584,6 +1690,7 @@ static void setup_environment(void)
 
 	setup_fbc();
 	setup_psr();
+	setup_drrs();
 
 	setup_crcs();
 }
@@ -1596,6 +1703,7 @@ static void teardown_environment(void)
 	teardown_psr();
 	teardown_fbc();
 	teardown_modeset();
+	teardown_drrs();
 	teardown_drm();
 }
 
@@ -1662,6 +1770,11 @@ static void do_flush(const struct test_mode *t)
 #define ASSERT_PSR_ENABLED		(1 << 6)
 #define ASSERT_PSR_DISABLED		(1 << 7)
 
+#define DRRS_ASSERT_FLAGS		(7 << 8)
+#define ASSERT_DRRS_HIGH		(1 << 8)
+#define ASSERT_DRRS_LOW		(1 << 9)
+#define ASSERT_DRRS_INACTIVE		(1 << 10)
+
 static int adjust_assertion_flags(const struct test_mode *t, int flags)
 {
 	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
@@ -1669,12 +1782,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
 			flags |= ASSERT_FBC_ENABLED;
 		if (!(flags & ASSERT_PSR_DISABLED))
 			flags |= ASSERT_PSR_ENABLED;
+		if (!((flags & ASSERT_DRRS_LOW) ||
+		    (flags & ASSERT_DRRS_INACTIVE)))
+			flags |= ASSERT_DRRS_HIGH;
 	}
 
 	if ((t->feature & FEATURE_FBC) == 0)
 		flags &= ~FBC_ASSERT_FLAGS;
 	if ((t->feature & FEATURE_PSR) == 0)
 		flags &= ~PSR_ASSERT_FLAGS;
+	if ((t->feature & FEATURE_DRRS) == 0)
+		flags &= ~DRRS_ASSERT_FLAGS;
 
 	return flags;
 }
@@ -1706,6 +1824,23 @@ static void do_status_assertions(int flags)
 		return;
 	}
 
+	if (flags & ASSERT_DRRS_HIGH) {
+		if (!is_drrs_high()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS HIGH\n");
+		}
+	} else if (flags & ASSERT_DRRS_LOW) {
+		if (!drrs_wait_until_rr_switch_to_low()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS LOW\n");
+		}
+	} else if (flags & ASSERT_DRRS_INACTIVE) {
+		if (!is_drrs_inactive()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS INACTIVE\n");
+		}
+	}
+
 	if (flags & ASSERT_FBC_ENABLED) {
 		igt_require(!fbc_not_enough_stolen());
 		igt_require(!fbc_stride_not_supported());
@@ -1833,6 +1968,8 @@ static void enable_features_for_test(const struct test_mode *t)
 		fbc_enable();
 	if (t->feature & FEATURE_PSR)
 		psr_enable();
+	if (t->feature & FEATURE_DRRS)
+		drrs_enable();
 }
 
 static void check_test_requirements(const struct test_mode *t)
@@ -1852,6 +1989,20 @@ static void check_test_requirements(const struct test_mode *t)
 			      "Can't test PSR without sink CRCs\n");
 	}
 
+	if (t->feature & FEATURE_DRRS)
+		igt_require_f(drrs.can_test,
+			      "Can't test DRRS with the current outputs\n");
+
+	/*
+	 * In kernel, When PSR is enabled, DRRS will be disabled. So If a test
+	 * case needs DRRS + PSR enabled, that will be skipped.
+	 */
+	drrs.is_psr_drrs_combo = ((t->feature & FEATURE_PSR) &&
+				  (t->feature & FEATURE_DRRS));
+
+	igt_require_f(!drrs.is_psr_drrs_combo,
+		      "Can't test PSR and DRRS together\n");
+
 	if (opt.only_pipes != PIPE_COUNT)
 		igt_require(t->pipes == opt.only_pipes);
 }
@@ -1973,7 +2124,7 @@ static void rte_subtest(const struct test_mode *t)
 
 	unset_all_crtcs();
 	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
-		      DONT_ASSERT_CRC);
+		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
 
 	enable_prim_screen_and_wait(t);
 	set_cursor_for_test(t, &prim_mode_params);
@@ -2065,6 +2216,13 @@ static void draw_subtest(const struct test_mode *t)
 	if (op_disables_psr(t, t->method))
 		assertions |= ASSERT_PSR_DISABLED;
 
+	/*
+	 * On FBS_INDIVIDUAL, write to offscreen plane will not touch the
+	 * current frambuffer. Hence assert for DRRS_LOW.
+	 */
+	if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN))
+		assertions |= ASSERT_DRRS_LOW;
+
 	prepare_subtest(t, pattern);
 	target = pick_target(t, params);
 
@@ -2273,7 +2431,11 @@ static void slow_draw_subtest(const struct test_mode *t)
 		sleep(2);
 
 		update_wanted_crc(t, &pattern->crcs[t->format][r]);
-		do_assertions(0);
+
+		if (t->feature & FEATURE_DRRS)
+			do_assertions(ASSERT_DRRS_LOW);
+		else
+			do_assertions(0);
 	}
 }
 
@@ -2882,17 +3044,17 @@ static void suspend_subtest(const struct test_mode *t)
 	sleep(5);
 	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
 	sleep(5);
-	do_assertions(0);
+	do_assertions(ASSERT_DRRS_LOW);
 
 	unset_all_crtcs();
 	sleep(5);
 	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
 	sleep(5);
 	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
-		      DONT_ASSERT_CRC);
+		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
 
 	set_mode_for_params(params);
-	do_assertions(0);
+	do_assertions(ASSERT_DRRS_HIGH);
 }
 
 /**
@@ -3371,6 +3533,14 @@ static const char *feature_str(int feature)
 		return "psr";
 	case FEATURE_FBC | FEATURE_PSR:
 		return "fbcpsr";
+	case FEATURE_DRRS:
+		return "drrs";
+	case FEATURE_FBC | FEATURE_DRRS:
+		return "fbcdrrs";
+	case FEATURE_PSR | FEATURE_DRRS:
+		return "psrdrrs";
+	case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS:
+		return "fbcpsrdrrs";
 	default:
 		igt_assert(false);
 	}
@@ -3635,7 +3805,7 @@ int main(int argc, char *argv[])
 				tilingchange_subtest(&t);
 		}
 
-		if (t.feature & FEATURE_PSR)
+		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
 			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
 				slow_draw_subtest(&t);
 
-- 
1.9.1

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

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

* ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev5)
  2017-09-19 18:12     ` Rodrigo Vivi
                         ` (12 preceding siblings ...)
  2017-12-28 16:45       ` ✓ Fi.CI.IGT: " Patchwork
@ 2018-01-02 10:37       ` Patchwork
  2018-01-02 13:26       ` ✗ Fi.CI.IGT: failure " Patchwork
                         ` (6 subsequent siblings)
  20 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2018-01-02 10:37 UTC (permalink / raw)
  To: Lohith BS; +Cc: intel-gfx

== Series Details ==

Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev5)
URL   : https://patchwork.freedesktop.org/series/32888/
State : success

== Summary ==

IGT patchset tested on top of latest successful build
4cd4cc4873fc1c916b6bf7b058b12294e16dfd98 lib: Convert sw_sync to use sync_file uapi imported from the kernel

with latest DRM-Tip kernel build CI_DRM_3586
16432d39f2cb drm-tip: 2017y-12m-30d-02h-25m-26s UTC integration manifest

Testlist changes:
+++ 570 lines
--- 0 lines

Test debugfs_test:
        Subgroup read_all_entries:
                pass       -> INCOMPLETE (fi-snb-2520m) fdo#103713
Test kms_pipe_crc_basic:
        Subgroup suspend-read-crc-pipe-a:
                dmesg-warn -> PASS       (fi-kbl-r) fdo#104172 +1

fdo#103713 https://bugs.freedesktop.org/show_bug.cgi?id=103713
fdo#104172 https://bugs.freedesktop.org/show_bug.cgi?id=104172

fi-bdw-5557u     total:288  pass:267  dwarn:0   dfail:0   fail:0   skip:21  time:438s
fi-bdw-gvtdvm    total:288  pass:264  dwarn:0   dfail:0   fail:0   skip:24  time:437s
fi-blb-e6850     total:288  pass:223  dwarn:1   dfail:0   fail:0   skip:64  time:381s
fi-bsw-n3050     total:288  pass:242  dwarn:0   dfail:0   fail:0   skip:46  time:498s
fi-bwr-2160      total:288  pass:183  dwarn:0   dfail:0   fail:0   skip:105 time:277s
fi-bxt-dsi       total:288  pass:258  dwarn:0   dfail:0   fail:0   skip:30  time:500s
fi-bxt-j4205     total:288  pass:259  dwarn:0   dfail:0   fail:0   skip:29  time:486s
fi-byt-j1900     total:288  pass:253  dwarn:0   dfail:0   fail:0   skip:35  time:479s
fi-byt-n2820     total:288  pass:249  dwarn:0   dfail:0   fail:0   skip:39  time:469s
fi-elk-e7500     total:224  pass:163  dwarn:14  dfail:1   fail:0   skip:45 
fi-gdg-551       total:288  pass:179  dwarn:0   dfail:0   fail:1   skip:108 time:265s
fi-glk-1         total:288  pass:260  dwarn:0   dfail:0   fail:0   skip:28  time:540s
fi-hsw-4770      total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:406s
fi-hsw-4770r     total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:413s
fi-ilk-650       total:288  pass:228  dwarn:0   dfail:0   fail:0   skip:60  time:429s
fi-ivb-3520m     total:288  pass:259  dwarn:0   dfail:0   fail:0   skip:29  time:479s
fi-ivb-3770      total:288  pass:255  dwarn:0   dfail:0   fail:0   skip:33  time:431s
fi-kbl-7500u     total:288  pass:263  dwarn:1   dfail:0   fail:0   skip:24  time:482s
fi-kbl-7560u     total:288  pass:268  dwarn:1   dfail:0   fail:0   skip:19  time:521s
fi-kbl-7567u     total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:465s
fi-kbl-r         total:288  pass:260  dwarn:1   dfail:0   fail:0   skip:27  time:521s
fi-pnv-d510      total:288  pass:222  dwarn:1   dfail:0   fail:0   skip:65  time:594s
fi-skl-6260u     total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:452s
fi-skl-6600u     total:288  pass:260  dwarn:1   dfail:0   fail:0   skip:27  time:530s
fi-skl-6700hq    total:288  pass:261  dwarn:1   dfail:0   fail:0   skip:26  time:557s
fi-skl-6700k2    total:288  pass:264  dwarn:0   dfail:0   fail:0   skip:24  time:517s
fi-skl-6770hq    total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:504s
fi-skl-gvtdvm    total:288  pass:265  dwarn:0   dfail:0   fail:0   skip:23  time:442s
fi-snb-2520m     total:3    pass:2    dwarn:0   dfail:0   fail:0   skip:0  
fi-snb-2600      total:288  pass:248  dwarn:0   dfail:0   fail:0   skip:40  time:417s
Blacklisted hosts:
fi-cfl-s2        total:288  pass:262  dwarn:0   dfail:0   fail:0   skip:26  time:596s
fi-cnl-y         total:265  pass:239  dwarn:0   dfail:0   fail:0   skip:25 
fi-glk-dsi       total:288  pass:258  dwarn:0   dfail:0   fail:0   skip:30  time:481s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_734/issues.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* ✗ Fi.CI.IGT: failure for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev5)
  2017-09-19 18:12     ` Rodrigo Vivi
                         ` (13 preceding siblings ...)
  2018-01-02 10:37       ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev5) Patchwork
@ 2018-01-02 13:26       ` Patchwork
  2018-01-03 15:30       ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev6) Patchwork
                         ` (5 subsequent siblings)
  20 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2018-01-02 13:26 UTC (permalink / raw)
  To: Lohith BS; +Cc: intel-gfx

== Series Details ==

Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev5)
URL   : https://patchwork.freedesktop.org/series/32888/
State : failure

== Summary ==

Test kms_frontbuffer_tracking:
        Subgroup fbc-rgb565-draw-mmap-wc:
                pass       -> FAIL       (shard-snb) fdo#101623 +60
        Subgroup fbc-rgb101010-draw-mmap-cpu:
                pass       -> FAIL       (shard-snb) fdo#103167 +43
        Subgroup fbc-1p-primscrn-cur-indfb-draw-mmap-cpu:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-offscren-pri-indfb-draw-mmap-wc:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-cur-indfb-onoff:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-spr-indfb-draw-pwrite:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-rgb101010-draw-blt:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-pri-indfb-draw-mmap-wc:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-tilingchange:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-spr-indfb-onoff:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-rgb101010-draw-pwrite:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-gtt:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-rgb565-draw-mmap-cpu:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-rgb101010-draw-mmap-gtt:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-cur-indfb-draw-mmap-wc:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-pri-indfb-draw-pwrite:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-cpu:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-suspend:
                pass       -> FAIL       (shard-hsw) fdo#103540
Test kms_flip:
        Subgroup wf_vblank-vs-modeset-interruptible:
                dmesg-warn -> PASS       (shard-hsw) fdo#102614
Test gem_tiled_swapping:
        Subgroup non-threaded:
                pass       -> INCOMPLETE (shard-snb) fdo#104218
Test drv_suspend:
        Subgroup fence-restore-tiled2untiled-hibernate:
                dmesg-fail -> FAIL       (shard-snb) fdo#103375

fdo#101623 https://bugs.freedesktop.org/show_bug.cgi?id=101623
fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
fdo#103540 https://bugs.freedesktop.org/show_bug.cgi?id=103540
fdo#102614 https://bugs.freedesktop.org/show_bug.cgi?id=102614
fdo#104218 https://bugs.freedesktop.org/show_bug.cgi?id=104218
fdo#103375 https://bugs.freedesktop.org/show_bug.cgi?id=103375

shard-hsw        total:3283 pass:1470 dwarn:1   dfail:0   fail:79  skip:1733 time:9220s
shard-snb        total:3242 pass:1230 dwarn:1   dfail:0   fail:78  skip:1932 time:7792s
Blacklisted hosts:
shard-apl        total:3261 pass:1591 dwarn:1   dfail:0   fail:97  skip:1570 time:13183s
shard-kbl        total:3265 pass:1672 dwarn:42  dfail:2   fail:98  skip:1450 time:10596s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_734/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH i-g-t v10] tests/kms_frontbuffer_tracking: Including DRRS test coverage
  2018-01-01 13:45                 ` [PATCH i-g-t v10] " Lohith BS
@ 2018-01-02 20:34                   ` Rodrigo Vivi
  2018-01-03 16:02                     ` Bs, Lohith
  2018-01-03 15:02                   ` [PATCH i-g-t v11] " Lohith BS
  1 sibling, 1 reply; 59+ messages in thread
From: Rodrigo Vivi @ 2018-01-02 20:34 UTC (permalink / raw)
  To: Lohith BS
  Cc: paulo.r.zanoni, jari.tahvanainen, daniel.vetter, intel-gfx,
	marius.c.vlad, ankit.k.nautiyal

On Mon, Jan 01, 2018 at 01:45:32PM +0000, Lohith BS wrote:
> Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's
> refresh rate to the lowest vrefresh supported by panel, when frame is
> not flipped for more than a Sec.
> 
> In kernel, DRRS uses the front buffer tracking infrastructure.
> Hence DRRS test coverage is added along with other frontbuffer tracking
> based features such as FBC and PSR tests.
> 
> Here, we are testing DRRS with other features in all possible
> combinations, in all required test cases, to capture any possible
> regression.
> 
> v2: Addressed the comments and suggestions from Vlad, Marius.
>     The signoff details from the earlier work are also included.
> 
> v3: Modified vblank rate calculation by using reply-sequence,
>     provided by drmWaitVBlank, as suggested by Chris Wilson.
> 
> v4: As suggested from Chris Wilson and Daniel Vetter
>     1) Avoided using pthread for calculating vblank refresh rate,
>        instead used drmWaitVBlank reply sequence.
>     2) Avoided using kernel-specific info like transitional delays,
>        instead polling mechanism with timeout is used.
>     3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
>        instead of having a separate test.
> 
> v5: This patch adds DRRS as a new feature in the
>     kms_frontbuffer_tracking IGT.
>     DRRS switch to lower vrefresh rate is tested at slow-draw subtest.
> 
>     Note:
>     1) Currently kernel doesn't have support to enable and disable
>        the DRRS feature dynamically(as in case of PSR). Hence if the
>        panel supports DRRS it will be enabled by default.
> 
>     This is in continuation of last patch
> 	"https://patchwork.freedesktop.org/patch/162726/"
> 
> v6: This patch adds runtime enable and disable feature for testing DRRS
> 
> v7: This patch adds runtime enable and disable feature for testing DRRS
>     through debugfs entry "i915_drrs_ctl".
> 
> v8: Commit message is updated to reflect current implementation.
> 
> v9: Addressed Paulo Zanoni comments.
>     Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL.
> 
> v10: Corrected DRRS state expectation in suspend related subtests.
> 
> Signed-off-by: Lohith BS <lohith.bs@intel.com>
> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
> ---
>  tests/kms_frontbuffer_tracking.c | 188 +++++++++++++++++++++++++++++++++++++--
>  1 file changed, 179 insertions(+), 9 deletions(-)
> 
> diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
> index 1601cab..1039c9e 100644
> --- a/tests/kms_frontbuffer_tracking.c
> +++ b/tests/kms_frontbuffer_tracking.c
> @@ -34,7 +34,7 @@
>  
>  
>  IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
> -		     "its related features: FBC and PSR");
> +		     "its related features: FBC, PSR and DRRS");
>  
>  /*
>   * One of the aspects of this test is that, for every subtest, we try different
> @@ -105,8 +105,9 @@ struct test_mode {
>  		FEATURE_NONE  = 0,
>  		FEATURE_FBC   = 1,
>  		FEATURE_PSR   = 2,
> -		FEATURE_COUNT = 4,
> -		FEATURE_DEFAULT = 4,
> +		FEATURE_DRRS  = 4,
> +		FEATURE_COUNT = 8,
> +		FEATURE_DEFAULT = 8,
>  	} feature;
>  
>  	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
> @@ -156,6 +157,7 @@ struct rect {
>  struct {
>  	int fd;
>  	int debugfs;
> +	int drrs_debugfs_fd;
>  	drmModeResPtr res;
>  	drmModeConnectorPtr connectors[MAX_CONNECTORS];
>  	drmModeEncoderPtr encoders[MAX_ENCODERS];
> @@ -182,6 +184,15 @@ struct {
>  	.can_test = false,
>  };
>  
> +#define MAX_DRRS_STATUS_BUF_LEN 256
> +
> +struct {
> +	bool can_test;
> +	bool is_psr_drrs_combo;

Why do you need this is_psr_drrs_combo at all?

> +} drrs = {
> +	.can_test = false,
> +	.is_psr_drrs_combo = false,
> +};
>  
>  #define SINK_CRC_SIZE 12
>  typedef struct {
> @@ -825,6 +836,64 @@ static void psr_print_status(void)
>  	igt_info("PSR status:\n%s\n", buf);
>  }
>  
> +void drrs_set(unsigned int val)
> +{
> +	char buf[2];
> +
> +	igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val);
> +	snprintf(buf, sizeof(buf), "%d", val);
> +	igt_assert_eq(write(drm.drrs_debugfs_fd,
> +		      buf, strlen(buf)), strlen(buf));
> +}
> +
> +static bool is_drrs_high(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS_HIGH_RR");
> +}
> +
> +static bool is_drrs_low(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS_LOW_RR");
> +}
> +
> +static bool is_drrs_supported(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS Supported: Yes");
> +}
> +
> +static bool is_drrs_inactive(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +
> +	if (strstr(buf, "No active crtc found"))
> +		return true;
> +	if (strstr(buf, "Idleness DRRS: Disabled"))
> +		return true;
> +	if (strstr(buf, "DRRS Supported : No"))
> +		return true;
> +
> +	return false;
> +}
> +
> +static void drrs_print_status(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	igt_info("DRRS STATUS :\n%s\n", buf);
> +}
> +
>  static struct timespec fbc_get_last_action(void)
>  {
>  	struct timespec ret = { 0, 0 };
> @@ -935,10 +1004,17 @@ static bool psr_wait_until_enabled(void)
>  	return igt_wait(psr_is_enabled(), 5000, 1);
>  }
>  
> +static bool drrs_wait_until_rr_switch_to_low(void)
> +{
> +	return igt_wait(is_drrs_low(), 5000, 1);
> +}
> +
>  #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
>  #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
>  #define psr_enable() igt_set_module_param_int("enable_psr", 1)
>  #define psr_disable() igt_set_module_param_int("enable_psr", 0)
> +#define drrs_enable()	drrs_set(1)
> +#define drrs_disable()	drrs_set(0)
>  
>  static void get_sink_crc(sink_crc_t *crc, bool mandatory)
>  {
> @@ -1184,6 +1260,7 @@ static void disable_features(const struct test_mode *t)
>  
>  	fbc_disable();
>  	psr_disable();
> +	drrs_disable();
>  }
>  
>  static void *busy_thread_func(void *data)
> @@ -1508,6 +1585,12 @@ static void teardown_crcs(void)
>  	igt_pipe_crc_free(pipe_crc);
>  }
>  
> +static void teardown_drrs(void)
> +{
> +	if (drm.drrs_debugfs_fd != -1)
> +		close(drm.drrs_debugfs_fd);
> +}
> +
>  static bool fbc_supported_on_chipset(void)
>  {
>  	char buf[128];
> @@ -1577,6 +1660,29 @@ static void teardown_psr(void)
>  {
>  }
>  
> +static void setup_drrs(void)
> +{
> +	if (get_connector(prim_mode_params.connector_id)->connector_type !=
> +	    DRM_MODE_CONNECTOR_eDP) {
> +		igt_info("Can't test DRRS: no usable eDP screen.\n");
> +		return;
> +	}
> +
> +	if (!is_drrs_supported()) {
> +		igt_info("Can't test DRRS: Not supported.\n");
> +		return;
> +	}
> +
> +	drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY);
> +
> +	if (drm.drrs_debugfs_fd > 0) {
> +		drrs.can_test = true;
> +	} else {
> +		igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n");
> +		drrs.can_test = false;
> +	}
> +}
> +
>  static void setup_environment(void)
>  {
>  	setup_drm();
> @@ -1584,6 +1690,7 @@ static void setup_environment(void)
>  
>  	setup_fbc();
>  	setup_psr();
> +	setup_drrs();
>  
>  	setup_crcs();
>  }
> @@ -1596,6 +1703,7 @@ static void teardown_environment(void)
>  	teardown_psr();
>  	teardown_fbc();
>  	teardown_modeset();
> +	teardown_drrs();
>  	teardown_drm();
>  }
>  
> @@ -1662,6 +1770,11 @@ static void do_flush(const struct test_mode *t)
>  #define ASSERT_PSR_ENABLED		(1 << 6)
>  #define ASSERT_PSR_DISABLED		(1 << 7)
>  
> +#define DRRS_ASSERT_FLAGS		(7 << 8)
> +#define ASSERT_DRRS_HIGH		(1 << 8)
> +#define ASSERT_DRRS_LOW		(1 << 9)
> +#define ASSERT_DRRS_INACTIVE		(1 << 10)
> +
>  static int adjust_assertion_flags(const struct test_mode *t, int flags)
>  {
>  	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
> @@ -1669,12 +1782,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
>  			flags |= ASSERT_FBC_ENABLED;
>  		if (!(flags & ASSERT_PSR_DISABLED))
>  			flags |= ASSERT_PSR_ENABLED;
> +		if (!((flags & ASSERT_DRRS_LOW) ||
> +		    (flags & ASSERT_DRRS_INACTIVE)))
> +			flags |= ASSERT_DRRS_HIGH;
>  	}
>  
>  	if ((t->feature & FEATURE_FBC) == 0)
>  		flags &= ~FBC_ASSERT_FLAGS;
>  	if ((t->feature & FEATURE_PSR) == 0)
>  		flags &= ~PSR_ASSERT_FLAGS;
> +	if ((t->feature & FEATURE_DRRS) == 0)
> +		flags &= ~DRRS_ASSERT_FLAGS;
>  
>  	return flags;
>  }
> @@ -1706,6 +1824,23 @@ static void do_status_assertions(int flags)
>  		return;
>  	}
>  
> +	if (flags & ASSERT_DRRS_HIGH) {
> +		if (!is_drrs_high()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS HIGH\n");
> +		}
> +	} else if (flags & ASSERT_DRRS_LOW) {
> +		if (!drrs_wait_until_rr_switch_to_low()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS LOW\n");
> +		}
> +	} else if (flags & ASSERT_DRRS_INACTIVE) {
> +		if (!is_drrs_inactive()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS INACTIVE\n");
> +		}
> +	}
> +
>  	if (flags & ASSERT_FBC_ENABLED) {
>  		igt_require(!fbc_not_enough_stolen());
>  		igt_require(!fbc_stride_not_supported());
> @@ -1833,6 +1968,8 @@ static void enable_features_for_test(const struct test_mode *t)
>  		fbc_enable();
>  	if (t->feature & FEATURE_PSR)
>  		psr_enable();
> +	if (t->feature & FEATURE_DRRS)
> +		drrs_enable();
>  }
>  
>  static void check_test_requirements(const struct test_mode *t)
> @@ -1852,6 +1989,20 @@ static void check_test_requirements(const struct test_mode *t)
>  			      "Can't test PSR without sink CRCs\n");
>  	}
>  
> +	if (t->feature & FEATURE_DRRS)
> +		igt_require_f(drrs.can_test,
> +			      "Can't test DRRS with the current outputs\n");
> +
> +	/*
> +	 * In kernel, When PSR is enabled, DRRS will be disabled. So If a test
> +	 * case needs DRRS + PSR enabled, that will be skipped.
> +	 */
> +	drrs.is_psr_drrs_combo = ((t->feature & FEATURE_PSR) &&
> +				  (t->feature & FEATURE_DRRS));
> +
> +	igt_require_f(!drrs.is_psr_drrs_combo,
> +		      "Can't test PSR and DRRS together\n");

it seems you don't have to save that on global scruct for this local
usage only.

but also why not just

	/*
	 * In kernel, When PSR is enabled, DRRS will be disabled. So If a test
	 * case needs DRRS + PSR enabled, that will be skipped.
	 */
	igt_require_f(!((t->feature & FEATURE_PSR) &&
				  (t->feature & FEATURE_DRRS)),
		      "Can't test PSR and DRRS together\n");


everything else lgtm...

> +
>  	if (opt.only_pipes != PIPE_COUNT)
>  		igt_require(t->pipes == opt.only_pipes);
>  }
> @@ -1973,7 +2124,7 @@ static void rte_subtest(const struct test_mode *t)
>  
>  	unset_all_crtcs();
>  	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
> -		      DONT_ASSERT_CRC);
> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>  
>  	enable_prim_screen_and_wait(t);
>  	set_cursor_for_test(t, &prim_mode_params);
> @@ -2065,6 +2216,13 @@ static void draw_subtest(const struct test_mode *t)
>  	if (op_disables_psr(t, t->method))
>  		assertions |= ASSERT_PSR_DISABLED;
>  
> +	/*
> +	 * On FBS_INDIVIDUAL, write to offscreen plane will not touch the
> +	 * current frambuffer. Hence assert for DRRS_LOW.
> +	 */
> +	if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN))
> +		assertions |= ASSERT_DRRS_LOW;
> +
>  	prepare_subtest(t, pattern);
>  	target = pick_target(t, params);
>  
> @@ -2273,7 +2431,11 @@ static void slow_draw_subtest(const struct test_mode *t)
>  		sleep(2);
>  
>  		update_wanted_crc(t, &pattern->crcs[t->format][r]);
> -		do_assertions(0);
> +
> +		if (t->feature & FEATURE_DRRS)
> +			do_assertions(ASSERT_DRRS_LOW);
> +		else
> +			do_assertions(0);
>  	}
>  }
>  
> @@ -2882,17 +3044,17 @@ static void suspend_subtest(const struct test_mode *t)
>  	sleep(5);
>  	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>  	sleep(5);
> -	do_assertions(0);
> +	do_assertions(ASSERT_DRRS_LOW);
>  
>  	unset_all_crtcs();
>  	sleep(5);
>  	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>  	sleep(5);
>  	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
> -		      DONT_ASSERT_CRC);
> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>  
>  	set_mode_for_params(params);
> -	do_assertions(0);
> +	do_assertions(ASSERT_DRRS_HIGH);
>  }
>  
>  /**
> @@ -3371,6 +3533,14 @@ static const char *feature_str(int feature)
>  		return "psr";
>  	case FEATURE_FBC | FEATURE_PSR:
>  		return "fbcpsr";
> +	case FEATURE_DRRS:
> +		return "drrs";
> +	case FEATURE_FBC | FEATURE_DRRS:
> +		return "fbcdrrs";
> +	case FEATURE_PSR | FEATURE_DRRS:
> +		return "psrdrrs";
> +	case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS:
> +		return "fbcpsrdrrs";
>  	default:
>  		igt_assert(false);
>  	}
> @@ -3635,7 +3805,7 @@ int main(int argc, char *argv[])
>  				tilingchange_subtest(&t);
>  		}
>  
> -		if (t.feature & FEATURE_PSR)
> +		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
>  			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
>  				slow_draw_subtest(&t);
>  
> -- 
> 1.9.1
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH i-g-t v11] tests/kms_frontbuffer_tracking: Including DRRS test coverage
  2018-01-01 13:45                 ` [PATCH i-g-t v10] " Lohith BS
  2018-01-02 20:34                   ` Rodrigo Vivi
@ 2018-01-03 15:02                   ` Lohith BS
  2018-01-03 19:21                     ` Rodrigo Vivi
  2018-01-05 11:40                     ` [PATCH i-g-t v12] " Lohith BS
  1 sibling, 2 replies; 59+ messages in thread
From: Lohith BS @ 2018-01-03 15:02 UTC (permalink / raw)
  To: intel-gfx, paulo.r.zanoni, rodrigo.vivi, jani.saarinen,
	daniel.vetter, chris, jari.tahvanainen
  Cc: ankit.k.nautiyal

Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's
refresh rate to the lowest vrefresh supported by panel, when frame is
not flipped for more than a Sec.

In kernel, DRRS uses the front buffer tracking infrastructure.
Hence DRRS test coverage is added along with other frontbuffer tracking
based features such as FBC and PSR tests.

Here, we are testing DRRS with other features in all possible
combinations, in all required test cases, to capture any possible
regression.

v2: Addressed the comments and suggestions from Vlad, Marius.
    The signoff details from the earlier work are also included.

v3: Modified vblank rate calculation by using reply-sequence,
    provided by drmWaitVBlank, as suggested by Chris Wilson.

v4: As suggested from Chris Wilson and Daniel Vetter
    1) Avoided using pthread for calculating vblank refresh rate,
       instead used drmWaitVBlank reply sequence.
    2) Avoided using kernel-specific info like transitional delays,
       instead polling mechanism with timeout is used.
    3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
       instead of having a separate test.

v5: This patch adds DRRS as a new feature in the
    kms_frontbuffer_tracking IGT.
    DRRS switch to lower vrefresh rate is tested at slow-draw subtest.

    Note:
    1) Currently kernel doesn't have support to enable and disable
       the DRRS feature dynamically(as in case of PSR). Hence if the
       panel supports DRRS it will be enabled by default.

    This is in continuation of last patch
	"https://patchwork.freedesktop.org/patch/162726/"

v6: This patch adds runtime enable and disable feature for testing DRRS

v7: This patch adds runtime enable and disable feature for testing DRRS
    through debugfs entry "i915_drrs_ctl".

v8: Commit message is updated to reflect current implementation.

v9: Addressed Paulo Zanoni comments.
    Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL.

v10: Corrected DRRS state expectation in suspend related subtests.

v11: Removing the global flag is_psr_drrs_combo [Rodrigo].

Signed-off-by: Lohith BS <lohith.bs@intel.com>
Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
---
 tests/kms_frontbuffer_tracking.c | 184 +++++++++++++++++++++++++++++++++++++--
 1 file changed, 175 insertions(+), 9 deletions(-)

diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
index 1601cab..7876a12 100644
--- a/tests/kms_frontbuffer_tracking.c
+++ b/tests/kms_frontbuffer_tracking.c
@@ -34,7 +34,7 @@
 
 
 IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
-		     "its related features: FBC and PSR");
+		     "its related features: FBC, PSR and DRRS");
 
 /*
  * One of the aspects of this test is that, for every subtest, we try different
@@ -105,8 +105,9 @@ struct test_mode {
 		FEATURE_NONE  = 0,
 		FEATURE_FBC   = 1,
 		FEATURE_PSR   = 2,
-		FEATURE_COUNT = 4,
-		FEATURE_DEFAULT = 4,
+		FEATURE_DRRS  = 4,
+		FEATURE_COUNT = 8,
+		FEATURE_DEFAULT = 8,
 	} feature;
 
 	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
@@ -156,6 +157,7 @@ struct rect {
 struct {
 	int fd;
 	int debugfs;
+	int drrs_debugfs_fd;
 	drmModeResPtr res;
 	drmModeConnectorPtr connectors[MAX_CONNECTORS];
 	drmModeEncoderPtr encoders[MAX_ENCODERS];
@@ -182,6 +184,13 @@ struct {
 	.can_test = false,
 };
 
+#define MAX_DRRS_STATUS_BUF_LEN 256
+
+struct {
+	bool can_test;
+} drrs = {
+	.can_test = false,
+};
 
 #define SINK_CRC_SIZE 12
 typedef struct {
@@ -825,6 +834,64 @@ static void psr_print_status(void)
 	igt_info("PSR status:\n%s\n", buf);
 }
 
+void drrs_set(unsigned int val)
+{
+	char buf[2];
+
+	igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val);
+	snprintf(buf, sizeof(buf), "%d", val);
+	igt_assert_eq(write(drm.drrs_debugfs_fd,
+		      buf, strlen(buf)), strlen(buf));
+}
+
+static bool is_drrs_high(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS_HIGH_RR");
+}
+
+static bool is_drrs_low(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS_LOW_RR");
+}
+
+static bool is_drrs_supported(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS Supported: Yes");
+}
+
+static bool is_drrs_inactive(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+
+	if (strstr(buf, "No active crtc found"))
+		return true;
+	if (strstr(buf, "Idleness DRRS: Disabled"))
+		return true;
+	if (strstr(buf, "DRRS Supported : No"))
+		return true;
+
+	return false;
+}
+
+static void drrs_print_status(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+	igt_info("DRRS STATUS :\n%s\n", buf);
+}
+
 static struct timespec fbc_get_last_action(void)
 {
 	struct timespec ret = { 0, 0 };
@@ -935,10 +1002,17 @@ static bool psr_wait_until_enabled(void)
 	return igt_wait(psr_is_enabled(), 5000, 1);
 }
 
+static bool drrs_wait_until_rr_switch_to_low(void)
+{
+	return igt_wait(is_drrs_low(), 5000, 1);
+}
+
 #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
 #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
 #define psr_enable() igt_set_module_param_int("enable_psr", 1)
 #define psr_disable() igt_set_module_param_int("enable_psr", 0)
+#define drrs_enable()	drrs_set(1)
+#define drrs_disable()	drrs_set(0)
 
 static void get_sink_crc(sink_crc_t *crc, bool mandatory)
 {
@@ -1184,6 +1258,7 @@ static void disable_features(const struct test_mode *t)
 
 	fbc_disable();
 	psr_disable();
+	drrs_disable();
 }
 
 static void *busy_thread_func(void *data)
@@ -1508,6 +1583,12 @@ static void teardown_crcs(void)
 	igt_pipe_crc_free(pipe_crc);
 }
 
+static void teardown_drrs(void)
+{
+	if (drm.drrs_debugfs_fd != -1)
+		close(drm.drrs_debugfs_fd);
+}
+
 static bool fbc_supported_on_chipset(void)
 {
 	char buf[128];
@@ -1577,6 +1658,29 @@ static void teardown_psr(void)
 {
 }
 
+static void setup_drrs(void)
+{
+	if (get_connector(prim_mode_params.connector_id)->connector_type !=
+	    DRM_MODE_CONNECTOR_eDP) {
+		igt_info("Can't test DRRS: no usable eDP screen.\n");
+		return;
+	}
+
+	if (!is_drrs_supported()) {
+		igt_info("Can't test DRRS: Not supported.\n");
+		return;
+	}
+
+	drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY);
+
+	if (drm.drrs_debugfs_fd > 0) {
+		drrs.can_test = true;
+	} else {
+		igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n");
+		drrs.can_test = false;
+	}
+}
+
 static void setup_environment(void)
 {
 	setup_drm();
@@ -1584,6 +1688,7 @@ static void setup_environment(void)
 
 	setup_fbc();
 	setup_psr();
+	setup_drrs();
 
 	setup_crcs();
 }
@@ -1596,6 +1701,7 @@ static void teardown_environment(void)
 	teardown_psr();
 	teardown_fbc();
 	teardown_modeset();
+	teardown_drrs();
 	teardown_drm();
 }
 
@@ -1662,6 +1768,11 @@ static void do_flush(const struct test_mode *t)
 #define ASSERT_PSR_ENABLED		(1 << 6)
 #define ASSERT_PSR_DISABLED		(1 << 7)
 
+#define DRRS_ASSERT_FLAGS		(7 << 8)
+#define ASSERT_DRRS_HIGH		(1 << 8)
+#define ASSERT_DRRS_LOW		(1 << 9)
+#define ASSERT_DRRS_INACTIVE		(1 << 10)
+
 static int adjust_assertion_flags(const struct test_mode *t, int flags)
 {
 	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
@@ -1669,12 +1780,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
 			flags |= ASSERT_FBC_ENABLED;
 		if (!(flags & ASSERT_PSR_DISABLED))
 			flags |= ASSERT_PSR_ENABLED;
+		if (!((flags & ASSERT_DRRS_LOW) ||
+		    (flags & ASSERT_DRRS_INACTIVE)))
+			flags |= ASSERT_DRRS_HIGH;
 	}
 
 	if ((t->feature & FEATURE_FBC) == 0)
 		flags &= ~FBC_ASSERT_FLAGS;
 	if ((t->feature & FEATURE_PSR) == 0)
 		flags &= ~PSR_ASSERT_FLAGS;
+	if ((t->feature & FEATURE_DRRS) == 0)
+		flags &= ~DRRS_ASSERT_FLAGS;
 
 	return flags;
 }
@@ -1706,6 +1822,23 @@ static void do_status_assertions(int flags)
 		return;
 	}
 
+	if (flags & ASSERT_DRRS_HIGH) {
+		if (!is_drrs_high()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS HIGH\n");
+		}
+	} else if (flags & ASSERT_DRRS_LOW) {
+		if (!drrs_wait_until_rr_switch_to_low()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS LOW\n");
+		}
+	} else if (flags & ASSERT_DRRS_INACTIVE) {
+		if (!is_drrs_inactive()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS INACTIVE\n");
+		}
+	}
+
 	if (flags & ASSERT_FBC_ENABLED) {
 		igt_require(!fbc_not_enough_stolen());
 		igt_require(!fbc_stride_not_supported());
@@ -1833,6 +1966,8 @@ static void enable_features_for_test(const struct test_mode *t)
 		fbc_enable();
 	if (t->feature & FEATURE_PSR)
 		psr_enable();
+	if (t->feature & FEATURE_DRRS)
+		drrs_enable();
 }
 
 static void check_test_requirements(const struct test_mode *t)
@@ -1852,6 +1987,18 @@ static void check_test_requirements(const struct test_mode *t)
 			      "Can't test PSR without sink CRCs\n");
 	}
 
+	if (t->feature & FEATURE_DRRS)
+		igt_require_f(drrs.can_test,
+			      "Can't test DRRS with the current outputs\n");
+
+	/*
+	 * In kernel, When PSR is enabled, DRRS will be disabled. So If a test
+	 * case needs DRRS + PSR enabled, that will be skipped.
+	 */
+	igt_require_f(!((t->feature & FEATURE_PSR) &&
+		      (t->feature & FEATURE_DRRS)),
+		      "Can't test PSR and DRRS together\n");
+
 	if (opt.only_pipes != PIPE_COUNT)
 		igt_require(t->pipes == opt.only_pipes);
 }
@@ -1973,7 +2120,7 @@ static void rte_subtest(const struct test_mode *t)
 
 	unset_all_crtcs();
 	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
-		      DONT_ASSERT_CRC);
+		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
 
 	enable_prim_screen_and_wait(t);
 	set_cursor_for_test(t, &prim_mode_params);
@@ -2065,6 +2212,13 @@ static void draw_subtest(const struct test_mode *t)
 	if (op_disables_psr(t, t->method))
 		assertions |= ASSERT_PSR_DISABLED;
 
+	/*
+	 * On FBS_INDIVIDUAL, write to offscreen plane will not touch the
+	 * current frambuffer. Hence assert for DRRS_LOW.
+	 */
+	if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN))
+		assertions |= ASSERT_DRRS_LOW;
+
 	prepare_subtest(t, pattern);
 	target = pick_target(t, params);
 
@@ -2273,7 +2427,11 @@ static void slow_draw_subtest(const struct test_mode *t)
 		sleep(2);
 
 		update_wanted_crc(t, &pattern->crcs[t->format][r]);
-		do_assertions(0);
+
+		if (t->feature & FEATURE_DRRS)
+			do_assertions(ASSERT_DRRS_LOW);
+		else
+			do_assertions(0);
 	}
 }
 
@@ -2882,17 +3040,17 @@ static void suspend_subtest(const struct test_mode *t)
 	sleep(5);
 	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
 	sleep(5);
-	do_assertions(0);
+	do_assertions(ASSERT_DRRS_LOW);
 
 	unset_all_crtcs();
 	sleep(5);
 	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
 	sleep(5);
 	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
-		      DONT_ASSERT_CRC);
+		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
 
 	set_mode_for_params(params);
-	do_assertions(0);
+	do_assertions(ASSERT_DRRS_HIGH);
 }
 
 /**
@@ -3371,6 +3529,14 @@ static const char *feature_str(int feature)
 		return "psr";
 	case FEATURE_FBC | FEATURE_PSR:
 		return "fbcpsr";
+	case FEATURE_DRRS:
+		return "drrs";
+	case FEATURE_FBC | FEATURE_DRRS:
+		return "fbcdrrs";
+	case FEATURE_PSR | FEATURE_DRRS:
+		return "psrdrrs";
+	case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS:
+		return "fbcpsrdrrs";
 	default:
 		igt_assert(false);
 	}
@@ -3635,7 +3801,7 @@ int main(int argc, char *argv[])
 				tilingchange_subtest(&t);
 		}
 
-		if (t.feature & FEATURE_PSR)
+		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
 			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
 				slow_draw_subtest(&t);
 
-- 
1.9.1

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

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

* ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev6)
  2017-09-19 18:12     ` Rodrigo Vivi
                         ` (14 preceding siblings ...)
  2018-01-02 13:26       ` ✗ Fi.CI.IGT: failure " Patchwork
@ 2018-01-03 15:30       ` Patchwork
  2018-01-03 18:49       ` ✗ Fi.CI.IGT: failure " Patchwork
                         ` (4 subsequent siblings)
  20 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2018-01-03 15:30 UTC (permalink / raw)
  To: Lohith BS; +Cc: intel-gfx

== Series Details ==

Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev6)
URL   : https://patchwork.freedesktop.org/series/32888/
State : success

== Summary ==

IGT patchset tested on top of latest successful build
58bd37d347d1369ecd272ff778057ee8004d6b15 kms_atomic_transition: Remove skip_on_unsupported_nonblocking_modeset.

with latest DRM-Tip kernel build CI_DRM_3594
c7b14d3fc187 drm-tip: 2018y-01m-03d-14h-04m-27s UTC integration manifest

Testlist changes:
+++ 570 lines
--- 0 lines

fi-bdw-5557u     total:288  pass:267  dwarn:0   dfail:0   fail:0   skip:21  time:435s
fi-bdw-gvtdvm    total:288  pass:264  dwarn:0   dfail:0   fail:0   skip:24  time:443s
fi-blb-e6850     total:288  pass:223  dwarn:1   dfail:0   fail:0   skip:64  time:393s
fi-bsw-n3050     total:288  pass:242  dwarn:0   dfail:0   fail:0   skip:46  time:505s
fi-bwr-2160      total:288  pass:183  dwarn:0   dfail:0   fail:0   skip:105 time:276s
fi-bxt-dsi       total:288  pass:258  dwarn:0   dfail:0   fail:0   skip:30  time:494s
fi-bxt-j4205     total:288  pass:259  dwarn:0   dfail:0   fail:0   skip:29  time:494s
fi-byt-j1900     total:288  pass:253  dwarn:0   dfail:0   fail:0   skip:35  time:483s
fi-byt-n2820     total:288  pass:249  dwarn:0   dfail:0   fail:0   skip:39  time:470s
fi-elk-e7500     total:224  pass:168  dwarn:10  dfail:0   fail:0   skip:45 
fi-gdg-551       total:288  pass:179  dwarn:0   dfail:0   fail:1   skip:108 time:264s
fi-glk-1         total:288  pass:260  dwarn:0   dfail:0   fail:0   skip:28  time:525s
fi-hsw-4770      total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:404s
fi-hsw-4770r     total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:418s
fi-ilk-650       total:288  pass:228  dwarn:0   dfail:0   fail:0   skip:60  time:426s
fi-ivb-3520m     total:288  pass:259  dwarn:0   dfail:0   fail:0   skip:29  time:473s
fi-ivb-3770      total:288  pass:255  dwarn:0   dfail:0   fail:0   skip:33  time:430s
fi-kbl-7500u     total:288  pass:263  dwarn:1   dfail:0   fail:0   skip:24  time:482s
fi-kbl-7560u     total:288  pass:268  dwarn:1   dfail:0   fail:0   skip:19  time:511s
fi-kbl-7567u     total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:466s
fi-kbl-r         total:288  pass:260  dwarn:1   dfail:0   fail:0   skip:27  time:514s
fi-pnv-d510      total:288  pass:222  dwarn:1   dfail:0   fail:0   skip:65  time:588s
fi-skl-6260u     total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:458s
fi-skl-6600u     total:288  pass:260  dwarn:1   dfail:0   fail:0   skip:27  time:524s
fi-skl-6700hq    total:288  pass:261  dwarn:1   dfail:0   fail:0   skip:26  time:542s
fi-skl-6700k2    total:288  pass:264  dwarn:0   dfail:0   fail:0   skip:24  time:510s
fi-skl-6770hq    total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:510s
fi-skl-gvtdvm    total:288  pass:265  dwarn:0   dfail:0   fail:0   skip:23  time:449s
fi-snb-2520m     total:288  pass:248  dwarn:0   dfail:0   fail:0   skip:40  time:543s
fi-snb-2600      total:288  pass:248  dwarn:0   dfail:0   fail:0   skip:40  time:413s
Blacklisted hosts:
fi-cfl-s2        total:288  pass:262  dwarn:0   dfail:0   fail:0   skip:26  time:572s
fi-glk-dsi       total:288  pass:257  dwarn:0   dfail:0   fail:1   skip:30  time:501s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_737/issues.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH i-g-t v10] tests/kms_frontbuffer_tracking: Including DRRS test coverage
  2018-01-02 20:34                   ` Rodrigo Vivi
@ 2018-01-03 16:02                     ` Bs, Lohith
  0 siblings, 0 replies; 59+ messages in thread
From: Bs, Lohith @ 2018-01-03 16:02 UTC (permalink / raw)
  To: Rodrigo Vivi
  Cc: paulo.r.zanoni, jari.tahvanainen, daniel.vetter, intel-gfx,
	marius.c.vlad, ankit.k.nautiyal


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

Hi Rodrigo,

Thank you for your valuable comments, the same has been addressed and a 
new patch had been pushed with the changes.

Request you to have a look at the new patch-set[v11] and provide your 
comments if any.


On 1/3/2018 2:04 AM, Rodrigo Vivi wrote:
> On Mon, Jan 01, 2018 at 01:45:32PM +0000, Lohith BS wrote:
>> Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's
>> refresh rate to the lowest vrefresh supported by panel, when frame is
>> not flipped for more than a Sec.
>>
>> In kernel, DRRS uses the front buffer tracking infrastructure.
>> Hence DRRS test coverage is added along with other frontbuffer tracking
>> based features such as FBC and PSR tests.
>>
>> Here, we are testing DRRS with other features in all possible
>> combinations, in all required test cases, to capture any possible
>> regression.
>>
>> v2: Addressed the comments and suggestions from Vlad, Marius.
>>      The signoff details from the earlier work are also included.
>>
>> v3: Modified vblank rate calculation by using reply-sequence,
>>      provided by drmWaitVBlank, as suggested by Chris Wilson.
>>
>> v4: As suggested from Chris Wilson and Daniel Vetter
>>      1) Avoided using pthread for calculating vblank refresh rate,
>>         instead used drmWaitVBlank reply sequence.
>>      2) Avoided using kernel-specific info like transitional delays,
>>         instead polling mechanism with timeout is used.
>>      3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
>>         instead of having a separate test.
>>
>> v5: This patch adds DRRS as a new feature in the
>>      kms_frontbuffer_tracking IGT.
>>      DRRS switch to lower vrefresh rate is tested at slow-draw subtest.
>>
>>      Note:
>>      1) Currently kernel doesn't have support to enable and disable
>>         the DRRS feature dynamically(as in case of PSR). Hence if the
>>         panel supports DRRS it will be enabled by default.
>>
>>      This is in continuation of last patch
>> 	"https://patchwork.freedesktop.org/patch/162726/"
>>
>> v6: This patch adds runtime enable and disable feature for testing DRRS
>>
>> v7: This patch adds runtime enable and disable feature for testing DRRS
>>      through debugfs entry "i915_drrs_ctl".
>>
>> v8: Commit message is updated to reflect current implementation.
>>
>> v9: Addressed Paulo Zanoni comments.
>>      Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL.
>>
>> v10: Corrected DRRS state expectation in suspend related subtests.
>>
>> Signed-off-by: Lohith BS <lohith.bs@intel.com>
>> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
>> ---
>>   tests/kms_frontbuffer_tracking.c | 188 +++++++++++++++++++++++++++++++++++++--
>>   1 file changed, 179 insertions(+), 9 deletions(-)
>>
>> diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
>> index 1601cab..1039c9e 100644
>> --- a/tests/kms_frontbuffer_tracking.c
>> +++ b/tests/kms_frontbuffer_tracking.c
>> @@ -34,7 +34,7 @@
>>   
>>   
>>   IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
>> -		     "its related features: FBC and PSR");
>> +		     "its related features: FBC, PSR and DRRS");
>>   
>>   /*
>>    * One of the aspects of this test is that, for every subtest, we try different
>> @@ -105,8 +105,9 @@ struct test_mode {
>>   		FEATURE_NONE  = 0,
>>   		FEATURE_FBC   = 1,
>>   		FEATURE_PSR   = 2,
>> -		FEATURE_COUNT = 4,
>> -		FEATURE_DEFAULT = 4,
>> +		FEATURE_DRRS  = 4,
>> +		FEATURE_COUNT = 8,
>> +		FEATURE_DEFAULT = 8,
>>   	} feature;
>>   
>>   	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
>> @@ -156,6 +157,7 @@ struct rect {
>>   struct {
>>   	int fd;
>>   	int debugfs;
>> +	int drrs_debugfs_fd;
>>   	drmModeResPtr res;
>>   	drmModeConnectorPtr connectors[MAX_CONNECTORS];
>>   	drmModeEncoderPtr encoders[MAX_ENCODERS];
>> @@ -182,6 +184,15 @@ struct {
>>   	.can_test = false,
>>   };
>>   
>> +#define MAX_DRRS_STATUS_BUF_LEN 256
>> +
>> +struct {
>> +	bool can_test;
>> +	bool is_psr_drrs_combo;
> Why do you need this is_psr_drrs_combo at all?
>
>> +} drrs = {
>> +	.can_test = false,
>> +	.is_psr_drrs_combo = false,
>> +};
>>   
>>   #define SINK_CRC_SIZE 12
>>   typedef struct {
>> @@ -825,6 +836,64 @@ static void psr_print_status(void)
>>   	igt_info("PSR status:\n%s\n", buf);
>>   }
>>   
>> +void drrs_set(unsigned int val)
>> +{
>> +	char buf[2];
>> +
>> +	igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val);
>> +	snprintf(buf, sizeof(buf), "%d", val);
>> +	igt_assert_eq(write(drm.drrs_debugfs_fd,
>> +		      buf, strlen(buf)), strlen(buf));
>> +}
>> +
>> +static bool is_drrs_high(void)
>> +{
>> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +	return strstr(buf, "DRRS_HIGH_RR");
>> +}
>> +
>> +static bool is_drrs_low(void)
>> +{
>> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +	return strstr(buf, "DRRS_LOW_RR");
>> +}
>> +
>> +static bool is_drrs_supported(void)
>> +{
>> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +	return strstr(buf, "DRRS Supported: Yes");
>> +}
>> +
>> +static bool is_drrs_inactive(void)
>> +{
>> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +
>> +	if (strstr(buf, "No active crtc found"))
>> +		return true;
>> +	if (strstr(buf, "Idleness DRRS: Disabled"))
>> +		return true;
>> +	if (strstr(buf, "DRRS Supported : No"))
>> +		return true;
>> +
>> +	return false;
>> +}
>> +
>> +static void drrs_print_status(void)
>> +{
>> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +	igt_info("DRRS STATUS :\n%s\n", buf);
>> +}
>> +
>>   static struct timespec fbc_get_last_action(void)
>>   {
>>   	struct timespec ret = { 0, 0 };
>> @@ -935,10 +1004,17 @@ static bool psr_wait_until_enabled(void)
>>   	return igt_wait(psr_is_enabled(), 5000, 1);
>>   }
>>   
>> +static bool drrs_wait_until_rr_switch_to_low(void)
>> +{
>> +	return igt_wait(is_drrs_low(), 5000, 1);
>> +}
>> +
>>   #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
>>   #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
>>   #define psr_enable() igt_set_module_param_int("enable_psr", 1)
>>   #define psr_disable() igt_set_module_param_int("enable_psr", 0)
>> +#define drrs_enable()	drrs_set(1)
>> +#define drrs_disable()	drrs_set(0)
>>   
>>   static void get_sink_crc(sink_crc_t *crc, bool mandatory)
>>   {
>> @@ -1184,6 +1260,7 @@ static void disable_features(const struct test_mode *t)
>>   
>>   	fbc_disable();
>>   	psr_disable();
>> +	drrs_disable();
>>   }
>>   
>>   static void *busy_thread_func(void *data)
>> @@ -1508,6 +1585,12 @@ static void teardown_crcs(void)
>>   	igt_pipe_crc_free(pipe_crc);
>>   }
>>   
>> +static void teardown_drrs(void)
>> +{
>> +	if (drm.drrs_debugfs_fd != -1)
>> +		close(drm.drrs_debugfs_fd);
>> +}
>> +
>>   static bool fbc_supported_on_chipset(void)
>>   {
>>   	char buf[128];
>> @@ -1577,6 +1660,29 @@ static void teardown_psr(void)
>>   {
>>   }
>>   
>> +static void setup_drrs(void)
>> +{
>> +	if (get_connector(prim_mode_params.connector_id)->connector_type !=
>> +	    DRM_MODE_CONNECTOR_eDP) {
>> +		igt_info("Can't test DRRS: no usable eDP screen.\n");
>> +		return;
>> +	}
>> +
>> +	if (!is_drrs_supported()) {
>> +		igt_info("Can't test DRRS: Not supported.\n");
>> +		return;
>> +	}
>> +
>> +	drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY);
>> +
>> +	if (drm.drrs_debugfs_fd > 0) {
>> +		drrs.can_test = true;
>> +	} else {
>> +		igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n");
>> +		drrs.can_test = false;
>> +	}
>> +}
>> +
>>   static void setup_environment(void)
>>   {
>>   	setup_drm();
>> @@ -1584,6 +1690,7 @@ static void setup_environment(void)
>>   
>>   	setup_fbc();
>>   	setup_psr();
>> +	setup_drrs();
>>   
>>   	setup_crcs();
>>   }
>> @@ -1596,6 +1703,7 @@ static void teardown_environment(void)
>>   	teardown_psr();
>>   	teardown_fbc();
>>   	teardown_modeset();
>> +	teardown_drrs();
>>   	teardown_drm();
>>   }
>>   
>> @@ -1662,6 +1770,11 @@ static void do_flush(const struct test_mode *t)
>>   #define ASSERT_PSR_ENABLED		(1 << 6)
>>   #define ASSERT_PSR_DISABLED		(1 << 7)
>>   
>> +#define DRRS_ASSERT_FLAGS		(7 << 8)
>> +#define ASSERT_DRRS_HIGH		(1 << 8)
>> +#define ASSERT_DRRS_LOW		(1 << 9)
>> +#define ASSERT_DRRS_INACTIVE		(1 << 10)
>> +
>>   static int adjust_assertion_flags(const struct test_mode *t, int flags)
>>   {
>>   	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
>> @@ -1669,12 +1782,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
>>   			flags |= ASSERT_FBC_ENABLED;
>>   		if (!(flags & ASSERT_PSR_DISABLED))
>>   			flags |= ASSERT_PSR_ENABLED;
>> +		if (!((flags & ASSERT_DRRS_LOW) ||
>> +		    (flags & ASSERT_DRRS_INACTIVE)))
>> +			flags |= ASSERT_DRRS_HIGH;
>>   	}
>>   
>>   	if ((t->feature & FEATURE_FBC) == 0)
>>   		flags &= ~FBC_ASSERT_FLAGS;
>>   	if ((t->feature & FEATURE_PSR) == 0)
>>   		flags &= ~PSR_ASSERT_FLAGS;
>> +	if ((t->feature & FEATURE_DRRS) == 0)
>> +		flags &= ~DRRS_ASSERT_FLAGS;
>>   
>>   	return flags;
>>   }
>> @@ -1706,6 +1824,23 @@ static void do_status_assertions(int flags)
>>   		return;
>>   	}
>>   
>> +	if (flags & ASSERT_DRRS_HIGH) {
>> +		if (!is_drrs_high()) {
>> +			drrs_print_status();
>> +			igt_assert_f(false, "DRRS HIGH\n");
>> +		}
>> +	} else if (flags & ASSERT_DRRS_LOW) {
>> +		if (!drrs_wait_until_rr_switch_to_low()) {
>> +			drrs_print_status();
>> +			igt_assert_f(false, "DRRS LOW\n");
>> +		}
>> +	} else if (flags & ASSERT_DRRS_INACTIVE) {
>> +		if (!is_drrs_inactive()) {
>> +			drrs_print_status();
>> +			igt_assert_f(false, "DRRS INACTIVE\n");
>> +		}
>> +	}
>> +
>>   	if (flags & ASSERT_FBC_ENABLED) {
>>   		igt_require(!fbc_not_enough_stolen());
>>   		igt_require(!fbc_stride_not_supported());
>> @@ -1833,6 +1968,8 @@ static void enable_features_for_test(const struct test_mode *t)
>>   		fbc_enable();
>>   	if (t->feature & FEATURE_PSR)
>>   		psr_enable();
>> +	if (t->feature & FEATURE_DRRS)
>> +		drrs_enable();
>>   }
>>   
>>   static void check_test_requirements(const struct test_mode *t)
>> @@ -1852,6 +1989,20 @@ static void check_test_requirements(const struct test_mode *t)
>>   			      "Can't test PSR without sink CRCs\n");
>>   	}
>>   
>> +	if (t->feature & FEATURE_DRRS)
>> +		igt_require_f(drrs.can_test,
>> +			      "Can't test DRRS with the current outputs\n");
>> +
>> +	/*
>> +	 * In kernel, When PSR is enabled, DRRS will be disabled. So If a test
>> +	 * case needs DRRS + PSR enabled, that will be skipped.
>> +	 */
>> +	drrs.is_psr_drrs_combo = ((t->feature & FEATURE_PSR) &&
>> +				  (t->feature & FEATURE_DRRS));
>> +
>> +	igt_require_f(!drrs.is_psr_drrs_combo,
>> +		      "Can't test PSR and DRRS together\n");
> it seems you don't have to save that on global scruct for this local
> usage only.
>
> but also why not just
>
> 	/*
> 	 * In kernel, When PSR is enabled, DRRS will be disabled. So If a test
> 	 * case needs DRRS + PSR enabled, that will be skipped.
> 	 */
> 	igt_require_f(!((t->feature & FEATURE_PSR) &&
> 				  (t->feature & FEATURE_DRRS)),
> 		      "Can't test PSR and DRRS together\n");
>
>
> everything else lgtm...
>
>> +
>>   	if (opt.only_pipes != PIPE_COUNT)
>>   		igt_require(t->pipes == opt.only_pipes);
>>   }
>> @@ -1973,7 +2124,7 @@ static void rte_subtest(const struct test_mode *t)
>>   
>>   	unset_all_crtcs();
>>   	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
>> -		      DONT_ASSERT_CRC);
>> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>>   
>>   	enable_prim_screen_and_wait(t);
>>   	set_cursor_for_test(t, &prim_mode_params);
>> @@ -2065,6 +2216,13 @@ static void draw_subtest(const struct test_mode *t)
>>   	if (op_disables_psr(t, t->method))
>>   		assertions |= ASSERT_PSR_DISABLED;
>>   
>> +	/*
>> +	 * On FBS_INDIVIDUAL, write to offscreen plane will not touch the
>> +	 * current frambuffer. Hence assert for DRRS_LOW.
>> +	 */
>> +	if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN))
>> +		assertions |= ASSERT_DRRS_LOW;
>> +
>>   	prepare_subtest(t, pattern);
>>   	target = pick_target(t, params);
>>   
>> @@ -2273,7 +2431,11 @@ static void slow_draw_subtest(const struct test_mode *t)
>>   		sleep(2);
>>   
>>   		update_wanted_crc(t, &pattern->crcs[t->format][r]);
>> -		do_assertions(0);
>> +
>> +		if (t->feature & FEATURE_DRRS)
>> +			do_assertions(ASSERT_DRRS_LOW);
>> +		else
>> +			do_assertions(0);
>>   	}
>>   }
>>   
>> @@ -2882,17 +3044,17 @@ static void suspend_subtest(const struct test_mode *t)
>>   	sleep(5);
>>   	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>>   	sleep(5);
>> -	do_assertions(0);
>> +	do_assertions(ASSERT_DRRS_LOW);
>>   
>>   	unset_all_crtcs();
>>   	sleep(5);
>>   	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>>   	sleep(5);
>>   	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
>> -		      DONT_ASSERT_CRC);
>> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>>   
>>   	set_mode_for_params(params);
>> -	do_assertions(0);
>> +	do_assertions(ASSERT_DRRS_HIGH);
>>   }
>>   
>>   /**
>> @@ -3371,6 +3533,14 @@ static const char *feature_str(int feature)
>>   		return "psr";
>>   	case FEATURE_FBC | FEATURE_PSR:
>>   		return "fbcpsr";
>> +	case FEATURE_DRRS:
>> +		return "drrs";
>> +	case FEATURE_FBC | FEATURE_DRRS:
>> +		return "fbcdrrs";
>> +	case FEATURE_PSR | FEATURE_DRRS:
>> +		return "psrdrrs";
>> +	case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS:
>> +		return "fbcpsrdrrs";
>>   	default:
>>   		igt_assert(false);
>>   	}
>> @@ -3635,7 +3805,7 @@ int main(int argc, char *argv[])
>>   				tilingchange_subtest(&t);
>>   		}
>>   
>> -		if (t.feature & FEATURE_PSR)
>> +		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
>>   			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
>>   				slow_draw_subtest(&t);
>>   
>> -- 
>> 1.9.1
>>


[-- Attachment #1.2: Type: text/html, Size: 48864 bytes --]

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

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

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

* ✗ Fi.CI.IGT: failure for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev6)
  2017-09-19 18:12     ` Rodrigo Vivi
                         ` (15 preceding siblings ...)
  2018-01-03 15:30       ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev6) Patchwork
@ 2018-01-03 18:49       ` Patchwork
  2018-01-05 12:04       ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev7) Patchwork
                         ` (3 subsequent siblings)
  20 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2018-01-03 18:49 UTC (permalink / raw)
  To: Bs, Lohith; +Cc: intel-gfx

== Series Details ==

Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev6)
URL   : https://patchwork.freedesktop.org/series/32888/
State : failure

== Summary ==

Test kms_frontbuffer_tracking:
        Subgroup fbc-rgb101010-draw-mmap-gtt:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-shrfb-pgflip-blt:
                pass       -> FAIL       (shard-snb) fdo#101623 +59
        Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-wc:
                pass       -> FAIL       (shard-snb) fdo#103167 +42
        Subgroup fbc-1p-primscrn-cur-indfb-draw-mmap-wc:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-cur-indfb-onoff:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-spr-indfb-onoff:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-cur-indfb-draw-mmap-cpu:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-rgb101010-draw-blt:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-offscren-pri-indfb-draw-mmap-wc:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-gtt:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-spr-indfb-draw-pwrite:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-suspend:
                pass       -> FAIL       (shard-hsw) fdo#103540
        Subgroup fbc-1p-primscrn-pri-indfb-draw-mmap-wc:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-rgb101010-draw-pwrite:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-rgb565-draw-mmap-cpu:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-tilingchange:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-pri-indfb-draw-pwrite:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-cpu:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
Test kms_pipe_crc_basic:
        Subgroup suspend-read-crc-pipe-b:
                pass       -> SKIP       (shard-snb) fdo#103375
Test kms_draw_crc:
        Subgroup draw-method-xrgb2101010-blt-untiled:
                skip       -> PASS       (shard-hsw)
Test kms_flip:
        Subgroup flip-vs-dpms-off-vs-modeset-interruptible:
                skip       -> PASS       (shard-hsw)
Test kms_chv_cursor_fail:
        Subgroup pipe-a-128x128-right-edge:
                skip       -> PASS       (shard-hsw)
Test kms_busy:
        Subgroup basic-flip-b:
                skip       -> PASS       (shard-hsw)
Test kms_cursor_crc:
        Subgroup cursor-128x128-sliding:
                skip       -> PASS       (shard-hsw)

fdo#101623 https://bugs.freedesktop.org/show_bug.cgi?id=101623
fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
fdo#103540 https://bugs.freedesktop.org/show_bug.cgi?id=103540
fdo#103375 https://bugs.freedesktop.org/show_bug.cgi?id=103375

shard-hsw        total:3256 pass:1458 dwarn:1   dfail:0   fail:79  skip:1717 time:8960s
shard-snb        total:3283 pass:1242 dwarn:1   dfail:0   fail:79  skip:1961 time:7956s
Blacklisted hosts:
shard-apl        total:3261 pass:1594 dwarn:1   dfail:0   fail:95  skip:1570 time:13183s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_737/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH i-g-t v11] tests/kms_frontbuffer_tracking: Including DRRS test coverage
  2018-01-03 15:02                   ` [PATCH i-g-t v11] " Lohith BS
@ 2018-01-03 19:21                     ` Rodrigo Vivi
  2018-01-03 22:14                       ` Ramalingam C
  2018-01-05 11:40                     ` [PATCH i-g-t v12] " Lohith BS
  1 sibling, 1 reply; 59+ messages in thread
From: Rodrigo Vivi @ 2018-01-03 19:21 UTC (permalink / raw)
  To: Lohith BS
  Cc: paulo.r.zanoni, jari.tahvanainen, daniel.vetter, intel-gfx,
	ankit.k.nautiyal

On Wed, Jan 03, 2018 at 03:02:07PM +0000, Lohith BS wrote:
> Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's
> refresh rate to the lowest vrefresh supported by panel, when frame is
> not flipped for more than a Sec.
> 
> In kernel, DRRS uses the front buffer tracking infrastructure.
> Hence DRRS test coverage is added along with other frontbuffer tracking
> based features such as FBC and PSR tests.
> 
> Here, we are testing DRRS with other features in all possible
> combinations, in all required test cases, to capture any possible
> regression.
> 
> v2: Addressed the comments and suggestions from Vlad, Marius.
>     The signoff details from the earlier work are also included.
> 
> v3: Modified vblank rate calculation by using reply-sequence,
>     provided by drmWaitVBlank, as suggested by Chris Wilson.
> 
> v4: As suggested from Chris Wilson and Daniel Vetter
>     1) Avoided using pthread for calculating vblank refresh rate,
>        instead used drmWaitVBlank reply sequence.
>     2) Avoided using kernel-specific info like transitional delays,
>        instead polling mechanism with timeout is used.
>     3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
>        instead of having a separate test.
> 
> v5: This patch adds DRRS as a new feature in the
>     kms_frontbuffer_tracking IGT.
>     DRRS switch to lower vrefresh rate is tested at slow-draw subtest.
> 
>     Note:
>     1) Currently kernel doesn't have support to enable and disable
>        the DRRS feature dynamically(as in case of PSR). Hence if the
>        panel supports DRRS it will be enabled by default.
> 
>     This is in continuation of last patch
> 	"https://patchwork.freedesktop.org/patch/162726/"
> 
> v6: This patch adds runtime enable and disable feature for testing DRRS
> 
> v7: This patch adds runtime enable and disable feature for testing DRRS
>     through debugfs entry "i915_drrs_ctl".
> 
> v8: Commit message is updated to reflect current implementation.
> 
> v9: Addressed Paulo Zanoni comments.
>     Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL.
> 
> v10: Corrected DRRS state expectation in suspend related subtests.
> 
> v11: Removing the global flag is_psr_drrs_combo [Rodrigo].
> 
> Signed-off-by: Lohith BS <lohith.bs@intel.com>
> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
> ---
>  tests/kms_frontbuffer_tracking.c | 184 +++++++++++++++++++++++++++++++++++++--
>  1 file changed, 175 insertions(+), 9 deletions(-)
> 
> diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
> index 1601cab..7876a12 100644
> --- a/tests/kms_frontbuffer_tracking.c
> +++ b/tests/kms_frontbuffer_tracking.c
> @@ -34,7 +34,7 @@
>  
>  
>  IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
> -		     "its related features: FBC and PSR");
> +		     "its related features: FBC, PSR and DRRS");
>  
>  /*
>   * One of the aspects of this test is that, for every subtest, we try different
> @@ -105,8 +105,9 @@ struct test_mode {
>  		FEATURE_NONE  = 0,
>  		FEATURE_FBC   = 1,
>  		FEATURE_PSR   = 2,
> -		FEATURE_COUNT = 4,
> -		FEATURE_DEFAULT = 4,
> +		FEATURE_DRRS  = 4,
> +		FEATURE_COUNT = 8,
> +		FEATURE_DEFAULT = 8,
>  	} feature;
>  
>  	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
> @@ -156,6 +157,7 @@ struct rect {
>  struct {
>  	int fd;
>  	int debugfs;
> +	int drrs_debugfs_fd;
>  	drmModeResPtr res;
>  	drmModeConnectorPtr connectors[MAX_CONNECTORS];
>  	drmModeEncoderPtr encoders[MAX_ENCODERS];
> @@ -182,6 +184,13 @@ struct {
>  	.can_test = false,
>  };
>  
> +#define MAX_DRRS_STATUS_BUF_LEN 256
> +
> +struct {
> +	bool can_test;
> +} drrs = {
> +	.can_test = false,
> +};
>  
>  #define SINK_CRC_SIZE 12
>  typedef struct {
> @@ -825,6 +834,64 @@ static void psr_print_status(void)
>  	igt_info("PSR status:\n%s\n", buf);
>  }
>  
> +void drrs_set(unsigned int val)
> +{
> +	char buf[2];
> +
> +	igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val);
> +	snprintf(buf, sizeof(buf), "%d", val);
> +	igt_assert_eq(write(drm.drrs_debugfs_fd,
> +		      buf, strlen(buf)), strlen(buf));
> +}
> +
> +static bool is_drrs_high(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS_HIGH_RR");
> +}
> +
> +static bool is_drrs_low(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS_LOW_RR");
> +}
> +
> +static bool is_drrs_supported(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS Supported: Yes");
> +}
> +
> +static bool is_drrs_inactive(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +
> +	if (strstr(buf, "No active crtc found"))
> +		return true;
> +	if (strstr(buf, "Idleness DRRS: Disabled"))
> +		return true;
> +	if (strstr(buf, "DRRS Supported : No"))

sorry for not asking on the previous email, but since drrs status
print this for other connected outputs I believe this will cause a
false positive in the case you have

CRTC 1:  DP-1:
	VBT: DRRS_type: None

	DRRS Supported : No

CRTC 2:  eDP-1:
	VBT: DRRS_type: whatever

	DRRS Supported : Yes


won't it?

> +		return true;
> +
> +	return false;
> +}
> +
> +static void drrs_print_status(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	igt_info("DRRS STATUS :\n%s\n", buf);
> +}
> +
>  static struct timespec fbc_get_last_action(void)
>  {
>  	struct timespec ret = { 0, 0 };
> @@ -935,10 +1002,17 @@ static bool psr_wait_until_enabled(void)
>  	return igt_wait(psr_is_enabled(), 5000, 1);
>  }
>  
> +static bool drrs_wait_until_rr_switch_to_low(void)
> +{
> +	return igt_wait(is_drrs_low(), 5000, 1);
> +}
> +
>  #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
>  #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
>  #define psr_enable() igt_set_module_param_int("enable_psr", 1)
>  #define psr_disable() igt_set_module_param_int("enable_psr", 0)
> +#define drrs_enable()	drrs_set(1)
> +#define drrs_disable()	drrs_set(0)
>  
>  static void get_sink_crc(sink_crc_t *crc, bool mandatory)
>  {
> @@ -1184,6 +1258,7 @@ static void disable_features(const struct test_mode *t)
>  
>  	fbc_disable();
>  	psr_disable();
> +	drrs_disable();
>  }
>  
>  static void *busy_thread_func(void *data)
> @@ -1508,6 +1583,12 @@ static void teardown_crcs(void)
>  	igt_pipe_crc_free(pipe_crc);
>  }
>  
> +static void teardown_drrs(void)
> +{
> +	if (drm.drrs_debugfs_fd != -1)
> +		close(drm.drrs_debugfs_fd);
> +}
> +
>  static bool fbc_supported_on_chipset(void)
>  {
>  	char buf[128];
> @@ -1577,6 +1658,29 @@ static void teardown_psr(void)
>  {
>  }
>  
> +static void setup_drrs(void)
> +{
> +	if (get_connector(prim_mode_params.connector_id)->connector_type !=
> +	    DRM_MODE_CONNECTOR_eDP) {
> +		igt_info("Can't test DRRS: no usable eDP screen.\n");
> +		return;
> +	}
> +
> +	if (!is_drrs_supported()) {
> +		igt_info("Can't test DRRS: Not supported.\n");
> +		return;
> +	}
> +
> +	drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY);
> +
> +	if (drm.drrs_debugfs_fd > 0) {
> +		drrs.can_test = true;
> +	} else {
> +		igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n");
> +		drrs.can_test = false;
> +	}
> +}
> +
>  static void setup_environment(void)
>  {
>  	setup_drm();
> @@ -1584,6 +1688,7 @@ static void setup_environment(void)
>  
>  	setup_fbc();
>  	setup_psr();
> +	setup_drrs();
>  
>  	setup_crcs();
>  }
> @@ -1596,6 +1701,7 @@ static void teardown_environment(void)
>  	teardown_psr();
>  	teardown_fbc();
>  	teardown_modeset();
> +	teardown_drrs();
>  	teardown_drm();
>  }
>  
> @@ -1662,6 +1768,11 @@ static void do_flush(const struct test_mode *t)
>  #define ASSERT_PSR_ENABLED		(1 << 6)
>  #define ASSERT_PSR_DISABLED		(1 << 7)
>  
> +#define DRRS_ASSERT_FLAGS		(7 << 8)
> +#define ASSERT_DRRS_HIGH		(1 << 8)
> +#define ASSERT_DRRS_LOW		(1 << 9)
> +#define ASSERT_DRRS_INACTIVE		(1 << 10)
> +
>  static int adjust_assertion_flags(const struct test_mode *t, int flags)
>  {
>  	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
> @@ -1669,12 +1780,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
>  			flags |= ASSERT_FBC_ENABLED;
>  		if (!(flags & ASSERT_PSR_DISABLED))
>  			flags |= ASSERT_PSR_ENABLED;
> +		if (!((flags & ASSERT_DRRS_LOW) ||
> +		    (flags & ASSERT_DRRS_INACTIVE)))
> +			flags |= ASSERT_DRRS_HIGH;
>  	}
>  
>  	if ((t->feature & FEATURE_FBC) == 0)
>  		flags &= ~FBC_ASSERT_FLAGS;
>  	if ((t->feature & FEATURE_PSR) == 0)
>  		flags &= ~PSR_ASSERT_FLAGS;
> +	if ((t->feature & FEATURE_DRRS) == 0)
> +		flags &= ~DRRS_ASSERT_FLAGS;
>  
>  	return flags;
>  }
> @@ -1706,6 +1822,23 @@ static void do_status_assertions(int flags)
>  		return;
>  	}
>  
> +	if (flags & ASSERT_DRRS_HIGH) {
> +		if (!is_drrs_high()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS HIGH\n");
> +		}
> +	} else if (flags & ASSERT_DRRS_LOW) {
> +		if (!drrs_wait_until_rr_switch_to_low()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS LOW\n");
> +		}
> +	} else if (flags & ASSERT_DRRS_INACTIVE) {
> +		if (!is_drrs_inactive()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS INACTIVE\n");
> +		}
> +	}
> +
>  	if (flags & ASSERT_FBC_ENABLED) {
>  		igt_require(!fbc_not_enough_stolen());
>  		igt_require(!fbc_stride_not_supported());
> @@ -1833,6 +1966,8 @@ static void enable_features_for_test(const struct test_mode *t)
>  		fbc_enable();
>  	if (t->feature & FEATURE_PSR)
>  		psr_enable();
> +	if (t->feature & FEATURE_DRRS)
> +		drrs_enable();
>  }
>  
>  static void check_test_requirements(const struct test_mode *t)
> @@ -1852,6 +1987,18 @@ static void check_test_requirements(const struct test_mode *t)
>  			      "Can't test PSR without sink CRCs\n");
>  	}
>  
> +	if (t->feature & FEATURE_DRRS)
> +		igt_require_f(drrs.can_test,
> +			      "Can't test DRRS with the current outputs\n");
> +
> +	/*
> +	 * In kernel, When PSR is enabled, DRRS will be disabled. So If a test
> +	 * case needs DRRS + PSR enabled, that will be skipped.
> +	 */
> +	igt_require_f(!((t->feature & FEATURE_PSR) &&
> +		      (t->feature & FEATURE_DRRS)),
> +		      "Can't test PSR and DRRS together\n");
> +
>  	if (opt.only_pipes != PIPE_COUNT)
>  		igt_require(t->pipes == opt.only_pipes);
>  }
> @@ -1973,7 +2120,7 @@ static void rte_subtest(const struct test_mode *t)
>  
>  	unset_all_crtcs();
>  	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
> -		      DONT_ASSERT_CRC);
> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>  
>  	enable_prim_screen_and_wait(t);
>  	set_cursor_for_test(t, &prim_mode_params);
> @@ -2065,6 +2212,13 @@ static void draw_subtest(const struct test_mode *t)
>  	if (op_disables_psr(t, t->method))
>  		assertions |= ASSERT_PSR_DISABLED;
>  
> +	/*
> +	 * On FBS_INDIVIDUAL, write to offscreen plane will not touch the
> +	 * current frambuffer. Hence assert for DRRS_LOW.
> +	 */
> +	if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN))
> +		assertions |= ASSERT_DRRS_LOW;
> +
>  	prepare_subtest(t, pattern);
>  	target = pick_target(t, params);
>  
> @@ -2273,7 +2427,11 @@ static void slow_draw_subtest(const struct test_mode *t)
>  		sleep(2);
>  
>  		update_wanted_crc(t, &pattern->crcs[t->format][r]);
> -		do_assertions(0);
> +
> +		if (t->feature & FEATURE_DRRS)
> +			do_assertions(ASSERT_DRRS_LOW);
> +		else
> +			do_assertions(0);
>  	}
>  }
>  
> @@ -2882,17 +3040,17 @@ static void suspend_subtest(const struct test_mode *t)
>  	sleep(5);
>  	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>  	sleep(5);
> -	do_assertions(0);
> +	do_assertions(ASSERT_DRRS_LOW);
>  
>  	unset_all_crtcs();
>  	sleep(5);
>  	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>  	sleep(5);
>  	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
> -		      DONT_ASSERT_CRC);
> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>  
>  	set_mode_for_params(params);
> -	do_assertions(0);
> +	do_assertions(ASSERT_DRRS_HIGH);

I don't understand why we had this do_assertions(0) here,
but how sure you are that this is high and previous is low?

>  }
>  
>  /**
> @@ -3371,6 +3529,14 @@ static const char *feature_str(int feature)
>  		return "psr";
>  	case FEATURE_FBC | FEATURE_PSR:
>  		return "fbcpsr";
> +	case FEATURE_DRRS:
> +		return "drrs";
> +	case FEATURE_FBC | FEATURE_DRRS:
> +		return "fbcdrrs";
> +	case FEATURE_PSR | FEATURE_DRRS:
> +		return "psrdrrs";
> +	case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS:
> +		return "fbcpsrdrrs";
>  	default:
>  		igt_assert(false);
>  	}
> @@ -3635,7 +3801,7 @@ int main(int argc, char *argv[])
>  				tilingchange_subtest(&t);
>  		}
>  
> -		if (t.feature & FEATURE_PSR)
> +		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
>  			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
>  				slow_draw_subtest(&t);
>  
> -- 
> 1.9.1
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH i-g-t v11] tests/kms_frontbuffer_tracking: Including DRRS test coverage
  2018-01-03 19:21                     ` Rodrigo Vivi
@ 2018-01-03 22:14                       ` Ramalingam C
  0 siblings, 0 replies; 59+ messages in thread
From: Ramalingam C @ 2018-01-03 22:14 UTC (permalink / raw)
  To: Rodrigo Vivi, Lohith BS
  Cc: paulo.r.zanoni, jari.tahvanainen, daniel.vetter, intel-gfx,
	ankit.k.nautiyal



On Thursday 04 January 2018 12:51 AM, Rodrigo Vivi wrote:
> On Wed, Jan 03, 2018 at 03:02:07PM +0000, Lohith BS wrote:
>> Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's
>> refresh rate to the lowest vrefresh supported by panel, when frame is
>> not flipped for more than a Sec.
>>
>> In kernel, DRRS uses the front buffer tracking infrastructure.
>> Hence DRRS test coverage is added along with other frontbuffer tracking
>> based features such as FBC and PSR tests.
>>
>> Here, we are testing DRRS with other features in all possible
>> combinations, in all required test cases, to capture any possible
>> regression.
>>
>> v2: Addressed the comments and suggestions from Vlad, Marius.
>>      The signoff details from the earlier work are also included.
>>
>> v3: Modified vblank rate calculation by using reply-sequence,
>>      provided by drmWaitVBlank, as suggested by Chris Wilson.
>>
>> v4: As suggested from Chris Wilson and Daniel Vetter
>>      1) Avoided using pthread for calculating vblank refresh rate,
>>         instead used drmWaitVBlank reply sequence.
>>      2) Avoided using kernel-specific info like transitional delays,
>>         instead polling mechanism with timeout is used.
>>      3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
>>         instead of having a separate test.
>>
>> v5: This patch adds DRRS as a new feature in the
>>      kms_frontbuffer_tracking IGT.
>>      DRRS switch to lower vrefresh rate is tested at slow-draw subtest.
>>
>>      Note:
>>      1) Currently kernel doesn't have support to enable and disable
>>         the DRRS feature dynamically(as in case of PSR). Hence if the
>>         panel supports DRRS it will be enabled by default.
>>
>>      This is in continuation of last patch
>> 	"https://patchwork.freedesktop.org/patch/162726/"
>>
>> v6: This patch adds runtime enable and disable feature for testing DRRS
>>
>> v7: This patch adds runtime enable and disable feature for testing DRRS
>>      through debugfs entry "i915_drrs_ctl".
>>
>> v8: Commit message is updated to reflect current implementation.
>>
>> v9: Addressed Paulo Zanoni comments.
>>      Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL.
>>
>> v10: Corrected DRRS state expectation in suspend related subtests.
>>
>> v11: Removing the global flag is_psr_drrs_combo [Rodrigo].
>>
>> Signed-off-by: Lohith BS <lohith.bs@intel.com>
>> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
>> ---
>>   tests/kms_frontbuffer_tracking.c | 184 +++++++++++++++++++++++++++++++++++++--
>>   1 file changed, 175 insertions(+), 9 deletions(-)
>>
>> diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
>> index 1601cab..7876a12 100644
>> --- a/tests/kms_frontbuffer_tracking.c
>> +++ b/tests/kms_frontbuffer_tracking.c
>> @@ -34,7 +34,7 @@
>>   
>>   
>>   IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
>> -		     "its related features: FBC and PSR");
>> +		     "its related features: FBC, PSR and DRRS");
>>   
>>   /*
>>    * One of the aspects of this test is that, for every subtest, we try different
>> @@ -105,8 +105,9 @@ struct test_mode {
>>   		FEATURE_NONE  = 0,
>>   		FEATURE_FBC   = 1,
>>   		FEATURE_PSR   = 2,
>> -		FEATURE_COUNT = 4,
>> -		FEATURE_DEFAULT = 4,
>> +		FEATURE_DRRS  = 4,
>> +		FEATURE_COUNT = 8,
>> +		FEATURE_DEFAULT = 8,
>>   	} feature;
>>   
>>   	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
>> @@ -156,6 +157,7 @@ struct rect {
>>   struct {
>>   	int fd;
>>   	int debugfs;
>> +	int drrs_debugfs_fd;
>>   	drmModeResPtr res;
>>   	drmModeConnectorPtr connectors[MAX_CONNECTORS];
>>   	drmModeEncoderPtr encoders[MAX_ENCODERS];
>> @@ -182,6 +184,13 @@ struct {
>>   	.can_test = false,
>>   };
>>   
>> +#define MAX_DRRS_STATUS_BUF_LEN 256
>> +
>> +struct {
>> +	bool can_test;
>> +} drrs = {
>> +	.can_test = false,
>> +};
>>   
>>   #define SINK_CRC_SIZE 12
>>   typedef struct {
>> @@ -825,6 +834,64 @@ static void psr_print_status(void)
>>   	igt_info("PSR status:\n%s\n", buf);
>>   }
>>   
>> +void drrs_set(unsigned int val)
>> +{
>> +	char buf[2];
>> +
>> +	igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val);
>> +	snprintf(buf, sizeof(buf), "%d", val);
>> +	igt_assert_eq(write(drm.drrs_debugfs_fd,
>> +		      buf, strlen(buf)), strlen(buf));
>> +}
>> +
>> +static bool is_drrs_high(void)
>> +{
>> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +	return strstr(buf, "DRRS_HIGH_RR");
>> +}
>> +
>> +static bool is_drrs_low(void)
>> +{
>> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +	return strstr(buf, "DRRS_LOW_RR");
>> +}
>> +
>> +static bool is_drrs_supported(void)
>> +{
>> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +	return strstr(buf, "DRRS Supported: Yes");
>> +}
>> +
>> +static bool is_drrs_inactive(void)
>> +{
>> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +
>> +	if (strstr(buf, "No active crtc found"))
>> +		return true;
>> +	if (strstr(buf, "Idleness DRRS: Disabled"))
>> +		return true;
>> +	if (strstr(buf, "DRRS Supported : No"))
> sorry for not asking on the previous email, but since drrs status
> print this for other connected outputs I believe this will cause a
> false positive in the case you have
>
> CRTC 1:  DP-1:
> 	VBT: DRRS_type: None
>
> 	DRRS Supported : No
>
> CRTC 2:  eDP-1:
> 	VBT: DRRS_type: whatever
>
> 	DRRS Supported : Yes
>
>
> won't it?
Thats a good catch. We should not be deciding inactiveness based on 
DRRS_Supported state. as that will be populated for all active crtcs 
with yes and nos. our tests didn't catch as they were having single edp 
display.
so how about alternatively detecting the drrs_inactive state by negating 
the active state of the DRRS. DRRS active state is possible only on one 
crtc which has eDP connector.

so func should look like

static bool is_drrs_inactive(void)
{
	char buf[MAX_DRRS_STATUS_BUF_LEN];

	debugfs_read("i915_drrs_status", buf);

	if (strstr(buf, "DRRS_State: "))
		return false;

	return true;
}

>> +		return true;
>> +
>> +	return false;
>> +}
>> +
>> +static void drrs_print_status(void)
>> +{
>> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +	igt_info("DRRS STATUS :\n%s\n", buf);
>> +}
>> +
>>   static struct timespec fbc_get_last_action(void)
>>   {
>>   	struct timespec ret = { 0, 0 };
>> @@ -935,10 +1002,17 @@ static bool psr_wait_until_enabled(void)
>>   	return igt_wait(psr_is_enabled(), 5000, 1);
>>   }
>>   
>> +static bool drrs_wait_until_rr_switch_to_low(void)
>> +{
>> +	return igt_wait(is_drrs_low(), 5000, 1);
>> +}
>> +
>>   #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
>>   #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
>>   #define psr_enable() igt_set_module_param_int("enable_psr", 1)
>>   #define psr_disable() igt_set_module_param_int("enable_psr", 0)
>> +#define drrs_enable()	drrs_set(1)
>> +#define drrs_disable()	drrs_set(0)
>>   
>>   static void get_sink_crc(sink_crc_t *crc, bool mandatory)
>>   {
>> @@ -1184,6 +1258,7 @@ static void disable_features(const struct test_mode *t)
>>   
>>   	fbc_disable();
>>   	psr_disable();
>> +	drrs_disable();
>>   }
>>   
>>   static void *busy_thread_func(void *data)
>> @@ -1508,6 +1583,12 @@ static void teardown_crcs(void)
>>   	igt_pipe_crc_free(pipe_crc);
>>   }
>>   
>> +static void teardown_drrs(void)
>> +{
>> +	if (drm.drrs_debugfs_fd != -1)
>> +		close(drm.drrs_debugfs_fd);
>> +}
>> +
>>   static bool fbc_supported_on_chipset(void)
>>   {
>>   	char buf[128];
>> @@ -1577,6 +1658,29 @@ static void teardown_psr(void)
>>   {
>>   }
>>   
>> +static void setup_drrs(void)
>> +{
>> +	if (get_connector(prim_mode_params.connector_id)->connector_type !=
>> +	    DRM_MODE_CONNECTOR_eDP) {
>> +		igt_info("Can't test DRRS: no usable eDP screen.\n");
>> +		return;
>> +	}
>> +
>> +	if (!is_drrs_supported()) {
>> +		igt_info("Can't test DRRS: Not supported.\n");
>> +		return;
>> +	}
>> +
>> +	drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY);
>> +
>> +	if (drm.drrs_debugfs_fd > 0) {
>> +		drrs.can_test = true;
>> +	} else {
>> +		igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n");
>> +		drrs.can_test = false;
>> +	}
>> +}
>> +
>>   static void setup_environment(void)
>>   {
>>   	setup_drm();
>> @@ -1584,6 +1688,7 @@ static void setup_environment(void)
>>   
>>   	setup_fbc();
>>   	setup_psr();
>> +	setup_drrs();
>>   
>>   	setup_crcs();
>>   }
>> @@ -1596,6 +1701,7 @@ static void teardown_environment(void)
>>   	teardown_psr();
>>   	teardown_fbc();
>>   	teardown_modeset();
>> +	teardown_drrs();
>>   	teardown_drm();
>>   }
>>   
>> @@ -1662,6 +1768,11 @@ static void do_flush(const struct test_mode *t)
>>   #define ASSERT_PSR_ENABLED		(1 << 6)
>>   #define ASSERT_PSR_DISABLED		(1 << 7)
>>   
>> +#define DRRS_ASSERT_FLAGS		(7 << 8)
>> +#define ASSERT_DRRS_HIGH		(1 << 8)
>> +#define ASSERT_DRRS_LOW		(1 << 9)
>> +#define ASSERT_DRRS_INACTIVE		(1 << 10)
>> +
>>   static int adjust_assertion_flags(const struct test_mode *t, int flags)
>>   {
>>   	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
>> @@ -1669,12 +1780,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
>>   			flags |= ASSERT_FBC_ENABLED;
>>   		if (!(flags & ASSERT_PSR_DISABLED))
>>   			flags |= ASSERT_PSR_ENABLED;
>> +		if (!((flags & ASSERT_DRRS_LOW) ||
>> +		    (flags & ASSERT_DRRS_INACTIVE)))
>> +			flags |= ASSERT_DRRS_HIGH;
>>   	}
>>   
>>   	if ((t->feature & FEATURE_FBC) == 0)
>>   		flags &= ~FBC_ASSERT_FLAGS;
>>   	if ((t->feature & FEATURE_PSR) == 0)
>>   		flags &= ~PSR_ASSERT_FLAGS;
>> +	if ((t->feature & FEATURE_DRRS) == 0)
>> +		flags &= ~DRRS_ASSERT_FLAGS;
>>   
>>   	return flags;
>>   }
>> @@ -1706,6 +1822,23 @@ static void do_status_assertions(int flags)
>>   		return;
>>   	}
>>   
>> +	if (flags & ASSERT_DRRS_HIGH) {
>> +		if (!is_drrs_high()) {
>> +			drrs_print_status();
>> +			igt_assert_f(false, "DRRS HIGH\n");
>> +		}
>> +	} else if (flags & ASSERT_DRRS_LOW) {
>> +		if (!drrs_wait_until_rr_switch_to_low()) {
>> +			drrs_print_status();
>> +			igt_assert_f(false, "DRRS LOW\n");
>> +		}
>> +	} else if (flags & ASSERT_DRRS_INACTIVE) {
>> +		if (!is_drrs_inactive()) {
>> +			drrs_print_status();
>> +			igt_assert_f(false, "DRRS INACTIVE\n");
>> +		}
>> +	}
>> +
>>   	if (flags & ASSERT_FBC_ENABLED) {
>>   		igt_require(!fbc_not_enough_stolen());
>>   		igt_require(!fbc_stride_not_supported());
>> @@ -1833,6 +1966,8 @@ static void enable_features_for_test(const struct test_mode *t)
>>   		fbc_enable();
>>   	if (t->feature & FEATURE_PSR)
>>   		psr_enable();
>> +	if (t->feature & FEATURE_DRRS)
>> +		drrs_enable();
>>   }
>>   
>>   static void check_test_requirements(const struct test_mode *t)
>> @@ -1852,6 +1987,18 @@ static void check_test_requirements(const struct test_mode *t)
>>   			      "Can't test PSR without sink CRCs\n");
>>   	}
>>   
>> +	if (t->feature & FEATURE_DRRS)
>> +		igt_require_f(drrs.can_test,
>> +			      "Can't test DRRS with the current outputs\n");
>> +
>> +	/*
>> +	 * In kernel, When PSR is enabled, DRRS will be disabled. So If a test
>> +	 * case needs DRRS + PSR enabled, that will be skipped.
>> +	 */
>> +	igt_require_f(!((t->feature & FEATURE_PSR) &&
>> +		      (t->feature & FEATURE_DRRS)),
>> +		      "Can't test PSR and DRRS together\n");
>> +
>>   	if (opt.only_pipes != PIPE_COUNT)
>>   		igt_require(t->pipes == opt.only_pipes);
>>   }
>> @@ -1973,7 +2120,7 @@ static void rte_subtest(const struct test_mode *t)
>>   
>>   	unset_all_crtcs();
>>   	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
>> -		      DONT_ASSERT_CRC);
>> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>>   
>>   	enable_prim_screen_and_wait(t);
>>   	set_cursor_for_test(t, &prim_mode_params);
>> @@ -2065,6 +2212,13 @@ static void draw_subtest(const struct test_mode *t)
>>   	if (op_disables_psr(t, t->method))
>>   		assertions |= ASSERT_PSR_DISABLED;
>>   
>> +	/*
>> +	 * On FBS_INDIVIDUAL, write to offscreen plane will not touch the
>> +	 * current frambuffer. Hence assert for DRRS_LOW.
>> +	 */
>> +	if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN))
>> +		assertions |= ASSERT_DRRS_LOW;
>> +
>>   	prepare_subtest(t, pattern);
>>   	target = pick_target(t, params);
>>   
>> @@ -2273,7 +2427,11 @@ static void slow_draw_subtest(const struct test_mode *t)
>>   		sleep(2);
>>   
>>   		update_wanted_crc(t, &pattern->crcs[t->format][r]);
>> -		do_assertions(0);
>> +
>> +		if (t->feature & FEATURE_DRRS)
>> +			do_assertions(ASSERT_DRRS_LOW);
>> +		else
>> +			do_assertions(0);
>>   	}
>>   }
>>   
>> @@ -2882,17 +3040,17 @@ static void suspend_subtest(const struct test_mode *t)
>>   	sleep(5);
>>   	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>>   	sleep(5);
>> -	do_assertions(0);
>> +	do_assertions(ASSERT_DRRS_LOW);
>>   
>>   	unset_all_crtcs();
>>   	sleep(5);
>>   	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>>   	sleep(5);
>>   	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
>> -		      DONT_ASSERT_CRC);
>> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>>   
>>   	set_mode_for_params(params);
>> -	do_assertions(0);
>> +	do_assertions(ASSERT_DRRS_HIGH);
> I don't understand why we had this do_assertions(0) here,
> but how sure you are that this is high and previous is low?
Actually  passing 0 or ASSERT_DRRS_HIGH to do_assertion is same. if DRRS 
is enabled and assert flag doesn't have DRRS_LOW || DRRS_INACTIVE,
adjust_assertion_flags() will set ASSERT_DRRS_HIGH in the flag.
i.e If a feature is enabled but no assert flag is passed for that 
feature adjust_assertion_flags() sets the default state of the features 
as assert flag.
so yes do_assertions(0) shouldn't be touched at its last occurrence.

regarding high and low state expectation: at earlier stage we have the 
delay of 5Sec after resume with all crtcs on. so if DRRS is enabled, its 
state will be DRRS_LOW.
In middle stage, since no active crtc, DRRS will be inactive. And in 
later stage after mode set there is not enough delay to enter into 
DRRS_LOW so DRRS_HIGH should be expected.

Above DRRS state expectation theory is tested to be correct on GLK and 
other platforms.

-Ram
>
>>   }
>>   
>>   /**
>> @@ -3371,6 +3529,14 @@ static const char *feature_str(int feature)
>>   		return "psr";
>>   	case FEATURE_FBC | FEATURE_PSR:
>>   		return "fbcpsr";
>> +	case FEATURE_DRRS:
>> +		return "drrs";
>> +	case FEATURE_FBC | FEATURE_DRRS:
>> +		return "fbcdrrs";
>> +	case FEATURE_PSR | FEATURE_DRRS:
>> +		return "psrdrrs";
>> +	case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS:
>> +		return "fbcpsrdrrs";
>>   	default:
>>   		igt_assert(false);
>>   	}
>> @@ -3635,7 +3801,7 @@ int main(int argc, char *argv[])
>>   				tilingchange_subtest(&t);
>>   		}
>>   
>> -		if (t.feature & FEATURE_PSR)
>> +		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
>>   			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
>>   				slow_draw_subtest(&t);
>>   
>> -- 
>> 1.9.1
>>

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

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

* [PATCH i-g-t v12] tests/kms_frontbuffer_tracking: Including DRRS test coverage
  2018-01-03 15:02                   ` [PATCH i-g-t v11] " Lohith BS
  2018-01-03 19:21                     ` Rodrigo Vivi
@ 2018-01-05 11:40                     ` Lohith BS
  2018-01-05 17:55                       ` Rodrigo Vivi
  2018-01-10 14:47                       ` [PATCH i-g-t v13] " Lohith BS
  1 sibling, 2 replies; 59+ messages in thread
From: Lohith BS @ 2018-01-05 11:40 UTC (permalink / raw)
  To: intel-gfx, rodrigo.vivi, jani.saarinen, daniel.vetter, chris,
	jari.tahvanainen
  Cc: ankit.k.nautiyal, paulo.r.zanoni

Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's
refresh rate to the lowest vrefresh supported by panel, when frame is
not flipped for more than a Sec.

In kernel, DRRS uses the front buffer tracking infrastructure.
Hence DRRS test coverage is added along with other frontbuffer tracking
based features such as FBC and PSR tests.

Here, we are testing DRRS with other features in all possible
combinations, in all required test cases, to capture any possible
regression.

v2: Addressed the comments and suggestions from Vlad, Marius.
    The signoff details from the earlier work are also included.

v3: Modified vblank rate calculation by using reply-sequence,
    provided by drmWaitVBlank, as suggested by Chris Wilson.

v4: As suggested from Chris Wilson and Daniel Vetter
    1) Avoided using pthread for calculating vblank refresh rate,
       instead used drmWaitVBlank reply sequence.
    2) Avoided using kernel-specific info like transitional delays,
       instead polling mechanism with timeout is used.
    3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
       instead of having a separate test.

v5: This patch adds DRRS as a new feature in the
    kms_frontbuffer_tracking IGT.
    DRRS switch to lower vrefresh rate is tested at slow-draw subtest.

    Note:
    1) Currently kernel doesn't have support to enable and disable
       the DRRS feature dynamically(as in case of PSR). Hence if the
       panel supports DRRS it will be enabled by default.

    This is in continuation of last patch
	"https://patchwork.freedesktop.org/patch/162726/"

v6: This patch adds runtime enable and disable feature for testing DRRS

v7: This patch adds runtime enable and disable feature for testing DRRS
    through debugfs entry "i915_drrs_ctl".

v8: Commit message is updated to reflect current implementation.

v9: Addressed Paulo Zanoni comments.
    Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL.

v10: Corrected DRRS state expectation in suspend related subtests.

v11: Removing the global flag is_psr_drrs_combo [Rodrigo].

v12: Rewriting the DRRS inactive deduction [Rodrigo].

Signed-off-by: Lohith BS <lohith.bs@intel.com>
Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
---
 tests/kms_frontbuffer_tracking.c | 178 +++++++++++++++++++++++++++++++++++++--
 1 file changed, 170 insertions(+), 8 deletions(-)

diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
index 1601cab..4b87273 100644
--- a/tests/kms_frontbuffer_tracking.c
+++ b/tests/kms_frontbuffer_tracking.c
@@ -34,7 +34,7 @@
 
 
 IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
-		     "its related features: FBC and PSR");
+		     "its related features: FBC, PSR and DRRS");
 
 /*
  * One of the aspects of this test is that, for every subtest, we try different
@@ -105,8 +105,9 @@ struct test_mode {
 		FEATURE_NONE  = 0,
 		FEATURE_FBC   = 1,
 		FEATURE_PSR   = 2,
-		FEATURE_COUNT = 4,
-		FEATURE_DEFAULT = 4,
+		FEATURE_DRRS  = 4,
+		FEATURE_COUNT = 8,
+		FEATURE_DEFAULT = 8,
 	} feature;
 
 	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
@@ -156,6 +157,7 @@ struct rect {
 struct {
 	int fd;
 	int debugfs;
+	int drrs_debugfs_fd;
 	drmModeResPtr res;
 	drmModeConnectorPtr connectors[MAX_CONNECTORS];
 	drmModeEncoderPtr encoders[MAX_ENCODERS];
@@ -182,6 +184,13 @@ struct {
 	.can_test = false,
 };
 
+#define MAX_DRRS_STATUS_BUF_LEN 256
+
+struct {
+	bool can_test;
+} drrs = {
+	.can_test = false,
+};
 
 #define SINK_CRC_SIZE 12
 typedef struct {
@@ -825,6 +834,60 @@ static void psr_print_status(void)
 	igt_info("PSR status:\n%s\n", buf);
 }
 
+void drrs_set(unsigned int val)
+{
+	char buf[2];
+
+	igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val);
+	snprintf(buf, sizeof(buf), "%d", val);
+	igt_assert_eq(write(drm.drrs_debugfs_fd,
+		      buf, strlen(buf)), strlen(buf));
+}
+
+static bool is_drrs_high(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS_HIGH_RR");
+}
+
+static bool is_drrs_low(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS_LOW_RR");
+}
+
+static bool is_drrs_supported(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS Supported: Yes");
+}
+
+static bool is_drrs_inactive(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+
+	if (strstr(buf, "DRRS_State: "))
+		return false;
+
+	return true;
+}
+
+static void drrs_print_status(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+	igt_info("DRRS STATUS :\n%s\n", buf);
+}
+
 static struct timespec fbc_get_last_action(void)
 {
 	struct timespec ret = { 0, 0 };
@@ -935,10 +998,17 @@ static bool psr_wait_until_enabled(void)
 	return igt_wait(psr_is_enabled(), 5000, 1);
 }
 
+static bool drrs_wait_until_rr_switch_to_low(void)
+{
+	return igt_wait(is_drrs_low(), 5000, 1);
+}
+
 #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
 #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
 #define psr_enable() igt_set_module_param_int("enable_psr", 1)
 #define psr_disable() igt_set_module_param_int("enable_psr", 0)
+#define drrs_enable()	drrs_set(1)
+#define drrs_disable()	drrs_set(0)
 
 static void get_sink_crc(sink_crc_t *crc, bool mandatory)
 {
@@ -1184,6 +1254,7 @@ static void disable_features(const struct test_mode *t)
 
 	fbc_disable();
 	psr_disable();
+	drrs_disable();
 }
 
 static void *busy_thread_func(void *data)
@@ -1508,6 +1579,12 @@ static void teardown_crcs(void)
 	igt_pipe_crc_free(pipe_crc);
 }
 
+static void teardown_drrs(void)
+{
+	if (drm.drrs_debugfs_fd != -1)
+		close(drm.drrs_debugfs_fd);
+}
+
 static bool fbc_supported_on_chipset(void)
 {
 	char buf[128];
@@ -1577,6 +1654,29 @@ static void teardown_psr(void)
 {
 }
 
+static void setup_drrs(void)
+{
+	if (get_connector(prim_mode_params.connector_id)->connector_type !=
+	    DRM_MODE_CONNECTOR_eDP) {
+		igt_info("Can't test DRRS: no usable eDP screen.\n");
+		return;
+	}
+
+	if (!is_drrs_supported()) {
+		igt_info("Can't test DRRS: Not supported.\n");
+		return;
+	}
+
+	drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY);
+
+	if (drm.drrs_debugfs_fd > 0) {
+		drrs.can_test = true;
+	} else {
+		igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n");
+		drrs.can_test = false;
+	}
+}
+
 static void setup_environment(void)
 {
 	setup_drm();
@@ -1584,6 +1684,7 @@ static void setup_environment(void)
 
 	setup_fbc();
 	setup_psr();
+	setup_drrs();
 
 	setup_crcs();
 }
@@ -1596,6 +1697,7 @@ static void teardown_environment(void)
 	teardown_psr();
 	teardown_fbc();
 	teardown_modeset();
+	teardown_drrs();
 	teardown_drm();
 }
 
@@ -1662,6 +1764,11 @@ static void do_flush(const struct test_mode *t)
 #define ASSERT_PSR_ENABLED		(1 << 6)
 #define ASSERT_PSR_DISABLED		(1 << 7)
 
+#define DRRS_ASSERT_FLAGS		(7 << 8)
+#define ASSERT_DRRS_HIGH		(1 << 8)
+#define ASSERT_DRRS_LOW		(1 << 9)
+#define ASSERT_DRRS_INACTIVE		(1 << 10)
+
 static int adjust_assertion_flags(const struct test_mode *t, int flags)
 {
 	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
@@ -1669,12 +1776,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
 			flags |= ASSERT_FBC_ENABLED;
 		if (!(flags & ASSERT_PSR_DISABLED))
 			flags |= ASSERT_PSR_ENABLED;
+		if (!((flags & ASSERT_DRRS_LOW) ||
+		    (flags & ASSERT_DRRS_INACTIVE)))
+			flags |= ASSERT_DRRS_HIGH;
 	}
 
 	if ((t->feature & FEATURE_FBC) == 0)
 		flags &= ~FBC_ASSERT_FLAGS;
 	if ((t->feature & FEATURE_PSR) == 0)
 		flags &= ~PSR_ASSERT_FLAGS;
+	if ((t->feature & FEATURE_DRRS) == 0)
+		flags &= ~DRRS_ASSERT_FLAGS;
 
 	return flags;
 }
@@ -1706,6 +1818,23 @@ static void do_status_assertions(int flags)
 		return;
 	}
 
+	if (flags & ASSERT_DRRS_HIGH) {
+		if (!is_drrs_high()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS HIGH\n");
+		}
+	} else if (flags & ASSERT_DRRS_LOW) {
+		if (!drrs_wait_until_rr_switch_to_low()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS LOW\n");
+		}
+	} else if (flags & ASSERT_DRRS_INACTIVE) {
+		if (!is_drrs_inactive()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS INACTIVE\n");
+		}
+	}
+
 	if (flags & ASSERT_FBC_ENABLED) {
 		igt_require(!fbc_not_enough_stolen());
 		igt_require(!fbc_stride_not_supported());
@@ -1833,6 +1962,8 @@ static void enable_features_for_test(const struct test_mode *t)
 		fbc_enable();
 	if (t->feature & FEATURE_PSR)
 		psr_enable();
+	if (t->feature & FEATURE_DRRS)
+		drrs_enable();
 }
 
 static void check_test_requirements(const struct test_mode *t)
@@ -1852,6 +1983,18 @@ static void check_test_requirements(const struct test_mode *t)
 			      "Can't test PSR without sink CRCs\n");
 	}
 
+	if (t->feature & FEATURE_DRRS)
+		igt_require_f(drrs.can_test,
+			      "Can't test DRRS with the current outputs\n");
+
+	/*
+	 * In kernel, When PSR is enabled, DRRS will be disabled. So If a test
+	 * case needs DRRS + PSR enabled, that will be skipped.
+	 */
+	igt_require_f(!((t->feature & FEATURE_PSR) &&
+		      (t->feature & FEATURE_DRRS)),
+		      "Can't test PSR and DRRS together\n");
+
 	if (opt.only_pipes != PIPE_COUNT)
 		igt_require(t->pipes == opt.only_pipes);
 }
@@ -1973,7 +2116,7 @@ static void rte_subtest(const struct test_mode *t)
 
 	unset_all_crtcs();
 	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
-		      DONT_ASSERT_CRC);
+		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
 
 	enable_prim_screen_and_wait(t);
 	set_cursor_for_test(t, &prim_mode_params);
@@ -2065,6 +2208,13 @@ static void draw_subtest(const struct test_mode *t)
 	if (op_disables_psr(t, t->method))
 		assertions |= ASSERT_PSR_DISABLED;
 
+	/*
+	 * On FBS_INDIVIDUAL, write to offscreen plane will not touch the
+	 * current frambuffer. Hence assert for DRRS_LOW.
+	 */
+	if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN))
+		assertions |= ASSERT_DRRS_LOW;
+
 	prepare_subtest(t, pattern);
 	target = pick_target(t, params);
 
@@ -2273,7 +2423,11 @@ static void slow_draw_subtest(const struct test_mode *t)
 		sleep(2);
 
 		update_wanted_crc(t, &pattern->crcs[t->format][r]);
-		do_assertions(0);
+
+		if (t->feature & FEATURE_DRRS)
+			do_assertions(ASSERT_DRRS_LOW);
+		else
+			do_assertions(0);
 	}
 }
 
@@ -2882,14 +3036,14 @@ static void suspend_subtest(const struct test_mode *t)
 	sleep(5);
 	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
 	sleep(5);
-	do_assertions(0);
+	do_assertions(ASSERT_DRRS_LOW);
 
 	unset_all_crtcs();
 	sleep(5);
 	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
 	sleep(5);
 	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
-		      DONT_ASSERT_CRC);
+		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
 
 	set_mode_for_params(params);
 	do_assertions(0);
@@ -3371,6 +3525,14 @@ static const char *feature_str(int feature)
 		return "psr";
 	case FEATURE_FBC | FEATURE_PSR:
 		return "fbcpsr";
+	case FEATURE_DRRS:
+		return "drrs";
+	case FEATURE_FBC | FEATURE_DRRS:
+		return "fbcdrrs";
+	case FEATURE_PSR | FEATURE_DRRS:
+		return "psrdrrs";
+	case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS:
+		return "fbcpsrdrrs";
 	default:
 		igt_assert(false);
 	}
@@ -3635,7 +3797,7 @@ int main(int argc, char *argv[])
 				tilingchange_subtest(&t);
 		}
 
-		if (t.feature & FEATURE_PSR)
+		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
 			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
 				slow_draw_subtest(&t);
 
-- 
1.9.1

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

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

* ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev7)
  2017-09-19 18:12     ` Rodrigo Vivi
                         ` (16 preceding siblings ...)
  2018-01-03 18:49       ` ✗ Fi.CI.IGT: failure " Patchwork
@ 2018-01-05 12:04       ` Patchwork
  2018-01-05 13:25       ` ✗ Fi.CI.IGT: failure " Patchwork
                         ` (2 subsequent siblings)
  20 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2018-01-05 12:04 UTC (permalink / raw)
  To: Lohith BS; +Cc: intel-gfx

== Series Details ==

Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev7)
URL   : https://patchwork.freedesktop.org/series/32888/
State : success

== Summary ==

IGT patchset tested on top of latest successful build
6db24416fdcdf5571125f9005089241cc6ba2652 lib/gem: Reset the global seqno at the start of each test

with latest DRM-Tip kernel build CI_DRM_3604
914d61a8fb5f drm-tip: 2018y-01m-05d-09h-12m-18s UTC integration manifest

Testlist changes:
+++ 570 lines
--- 0 lines

Test gem_exec_suspend:
        Subgroup basic-s4-devices:
                pass       -> DMESG-WARN (fi-elk-e7500) fdo#103989
Test kms_pipe_crc_basic:
        Subgroup suspend-read-crc-pipe-a:
                pass       -> DMESG-WARN (fi-snb-2600) fdo#102365
                pass       -> DMESG-WARN (fi-kbl-r) fdo#104172 +1
Test kms_psr_sink_crc:
        Subgroup psr_basic:
                dmesg-warn -> PASS       (fi-skl-6700hq) fdo#104260

fdo#103989 https://bugs.freedesktop.org/show_bug.cgi?id=103989
fdo#102365 https://bugs.freedesktop.org/show_bug.cgi?id=102365
fdo#104172 https://bugs.freedesktop.org/show_bug.cgi?id=104172
fdo#104260 https://bugs.freedesktop.org/show_bug.cgi?id=104260

fi-bdw-5557u     total:288  pass:267  dwarn:0   dfail:0   fail:0   skip:21  time:426s
fi-bdw-gvtdvm    total:288  pass:264  dwarn:0   dfail:0   fail:0   skip:24  time:424s
fi-blb-e6850     total:288  pass:223  dwarn:1   dfail:0   fail:0   skip:64  time:368s
fi-bsw-n3050     total:288  pass:242  dwarn:0   dfail:0   fail:0   skip:46  time:487s
fi-bwr-2160      total:288  pass:183  dwarn:0   dfail:0   fail:0   skip:105 time:278s
fi-bxt-dsi       total:288  pass:258  dwarn:0   dfail:0   fail:0   skip:30  time:478s
fi-bxt-j4205     total:288  pass:259  dwarn:0   dfail:0   fail:0   skip:29  time:492s
fi-byt-j1900     total:288  pass:253  dwarn:0   dfail:0   fail:0   skip:35  time:466s
fi-byt-n2820     total:288  pass:249  dwarn:0   dfail:0   fail:0   skip:39  time:460s
fi-elk-e7500     total:224  pass:168  dwarn:10  dfail:0   fail:0   skip:45 
fi-glk-1         total:288  pass:260  dwarn:0   dfail:0   fail:0   skip:28  time:511s
fi-hsw-4770      total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:393s
fi-hsw-4770r     total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:402s
fi-ilk-650       total:288  pass:228  dwarn:0   dfail:0   fail:0   skip:60  time:412s
fi-ivb-3520m     total:288  pass:259  dwarn:0   dfail:0   fail:0   skip:29  time:460s
fi-ivb-3770      total:288  pass:255  dwarn:0   dfail:0   fail:0   skip:33  time:411s
fi-kbl-7500u     total:288  pass:263  dwarn:1   dfail:0   fail:0   skip:24  time:467s
fi-kbl-7560u     total:288  pass:268  dwarn:1   dfail:0   fail:0   skip:19  time:500s
fi-kbl-7567u     total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:452s
fi-kbl-r         total:288  pass:260  dwarn:1   dfail:0   fail:0   skip:27  time:500s
fi-pnv-d510      total:288  pass:222  dwarn:1   dfail:0   fail:0   skip:65  time:578s
fi-skl-6260u     total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:433s
fi-skl-6600u     total:288  pass:260  dwarn:1   dfail:0   fail:0   skip:27  time:508s
fi-skl-6700hq    total:288  pass:262  dwarn:0   dfail:0   fail:0   skip:26  time:531s
fi-skl-6700k2    total:288  pass:264  dwarn:0   dfail:0   fail:0   skip:24  time:494s
fi-skl-6770hq    total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:491s
fi-skl-gvtdvm    total:288  pass:265  dwarn:0   dfail:0   fail:0   skip:23  time:434s
fi-snb-2520m     total:288  pass:248  dwarn:0   dfail:0   fail:0   skip:40  time:521s
fi-snb-2600      total:288  pass:247  dwarn:1   dfail:0   fail:0   skip:40  time:399s
Blacklisted hosts:
fi-cfl-s2        total:288  pass:262  dwarn:0   dfail:0   fail:0   skip:26  time:566s
fi-cnl-y         total:224  pass:199  dwarn:0   dfail:0   fail:0   skip:24 

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_749/issues.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* ✗ Fi.CI.IGT: failure for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev7)
  2017-09-19 18:12     ` Rodrigo Vivi
                         ` (17 preceding siblings ...)
  2018-01-05 12:04       ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev7) Patchwork
@ 2018-01-05 13:25       ` Patchwork
  2018-01-10 15:11       ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev8) Patchwork
  2018-01-10 16:14       ` ✓ Fi.CI.IGT: " Patchwork
  20 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2018-01-05 13:25 UTC (permalink / raw)
  To: Lohith BS; +Cc: intel-gfx

== Series Details ==

Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev7)
URL   : https://patchwork.freedesktop.org/series/32888/
State : failure

== Summary ==

Test kms_frontbuffer_tracking:
        Subgroup fbc-1p-pri-indfb-multidraw:
                pass       -> FAIL       (shard-snb) fdo#103167 +43
        Subgroup fbc-stridechange:
                pass       -> FAIL       (shard-snb) fdo#101623 +61
        Subgroup fbc-tilingchange:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-rgb565-draw-mmap-cpu:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-rgb101010-draw-blt:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-cpu:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-pri-indfb-draw-pwrite:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-offscren-pri-indfb-draw-mmap-wc:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-cur-indfb-onoff:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-suspend:
                pass       -> FAIL       (shard-hsw) fdo#103540
        Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-gtt:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-spr-indfb-onoff:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-pri-indfb-draw-mmap-wc:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-spr-indfb-draw-pwrite:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-rgb101010-draw-pwrite:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-rgb101010-draw-mmap-gtt:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-cur-indfb-draw-mmap-wc:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
        Subgroup fbc-1p-primscrn-cur-indfb-draw-mmap-cpu:
                pass       -> FAIL       (shard-snb)
                pass       -> FAIL       (shard-hsw)
Test kms_flip:
        Subgroup basic-flip-vs-dpms:
                dmesg-warn -> PASS       (shard-hsw) fdo#102614
        Subgroup vblank-vs-modeset-suspend-interruptible:
                skip       -> PASS       (shard-snb)
Test perf:
        Subgroup polling:
                pass       -> FAIL       (shard-hsw) fdo#102252
Test kms_busy:
        Subgroup extended-modeset-hang-oldfb-with-reset-render-a:
                skip       -> PASS       (shard-snb)
Test kms_setmode:
        Subgroup basic:
                pass       -> FAIL       (shard-hsw) fdo#99912
Test gem_tiled_swapping:
        Subgroup non-threaded:
                incomplete -> PASS       (shard-hsw) fdo#104218
Test kms_cursor_legacy:
        Subgroup cursor-vs-flip-toggle:
                skip       -> PASS       (shard-hsw)

fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
fdo#101623 https://bugs.freedesktop.org/show_bug.cgi?id=101623
fdo#103540 https://bugs.freedesktop.org/show_bug.cgi?id=103540
fdo#102614 https://bugs.freedesktop.org/show_bug.cgi?id=102614
fdo#102252 https://bugs.freedesktop.org/show_bug.cgi?id=102252
fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912
fdo#104218 https://bugs.freedesktop.org/show_bug.cgi?id=104218

shard-hsw        total:3283 pass:1469 dwarn:1   dfail:0   fail:80  skip:1733 time:8832s
shard-snb        total:3283 pass:1243 dwarn:1   dfail:0   fail:79  skip:1960 time:7729s
Blacklisted hosts:
shard-apl        total:3283 pass:1612 dwarn:1   dfail:0   fail:99  skip:1571 time:13272s
shard-kbl        total:3283 pass:1738 dwarn:1   dfail:0   fail:96  skip:1448 time:10400s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_749/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH i-g-t v12] tests/kms_frontbuffer_tracking: Including DRRS test coverage
  2018-01-05 11:40                     ` [PATCH i-g-t v12] " Lohith BS
@ 2018-01-05 17:55                       ` Rodrigo Vivi
  2018-01-06 10:48                         ` Ramalingam C
  2018-01-10 14:47                       ` [PATCH i-g-t v13] " Lohith BS
  1 sibling, 1 reply; 59+ messages in thread
From: Rodrigo Vivi @ 2018-01-05 17:55 UTC (permalink / raw)
  To: Lohith BS
  Cc: paulo.r.zanoni, jari.tahvanainen, daniel.vetter, intel-gfx,
	ankit.k.nautiyal

On Fri, Jan 05, 2018 at 11:40:29AM +0000, Lohith BS wrote:
> Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's
> refresh rate to the lowest vrefresh supported by panel, when frame is
> not flipped for more than a Sec.
> 
> In kernel, DRRS uses the front buffer tracking infrastructure.
> Hence DRRS test coverage is added along with other frontbuffer tracking
> based features such as FBC and PSR tests.
> 
> Here, we are testing DRRS with other features in all possible
> combinations, in all required test cases, to capture any possible
> regression.
> 
> v2: Addressed the comments and suggestions from Vlad, Marius.
>     The signoff details from the earlier work are also included.
> 
> v3: Modified vblank rate calculation by using reply-sequence,
>     provided by drmWaitVBlank, as suggested by Chris Wilson.
> 
> v4: As suggested from Chris Wilson and Daniel Vetter
>     1) Avoided using pthread for calculating vblank refresh rate,
>        instead used drmWaitVBlank reply sequence.
>     2) Avoided using kernel-specific info like transitional delays,
>        instead polling mechanism with timeout is used.
>     3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
>        instead of having a separate test.
> 
> v5: This patch adds DRRS as a new feature in the
>     kms_frontbuffer_tracking IGT.
>     DRRS switch to lower vrefresh rate is tested at slow-draw subtest.
> 
>     Note:
>     1) Currently kernel doesn't have support to enable and disable
>        the DRRS feature dynamically(as in case of PSR). Hence if the
>        panel supports DRRS it will be enabled by default.
> 
>     This is in continuation of last patch
> 	"https://patchwork.freedesktop.org/patch/162726/"
> 
> v6: This patch adds runtime enable and disable feature for testing DRRS
> 
> v7: This patch adds runtime enable and disable feature for testing DRRS
>     through debugfs entry "i915_drrs_ctl".
> 
> v8: Commit message is updated to reflect current implementation.
> 
> v9: Addressed Paulo Zanoni comments.
>     Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL.
> 
> v10: Corrected DRRS state expectation in suspend related subtests.
> 
> v11: Removing the global flag is_psr_drrs_combo [Rodrigo].
> 
> v12: Rewriting the DRRS inactive deduction [Rodrigo].
> 
> Signed-off-by: Lohith BS <lohith.bs@intel.com>
> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>

I was almost adding the rv-b here, but I will step back while CI is not
fully happy with the patch:

https://patchwork.freedesktop.org/series/32888/

regressed many sub-tests on snb and hsw...

> ---
>  tests/kms_frontbuffer_tracking.c | 178 +++++++++++++++++++++++++++++++++++++--
>  1 file changed, 170 insertions(+), 8 deletions(-)
> 
> diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
> index 1601cab..4b87273 100644
> --- a/tests/kms_frontbuffer_tracking.c
> +++ b/tests/kms_frontbuffer_tracking.c
> @@ -34,7 +34,7 @@
>  
>  
>  IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
> -		     "its related features: FBC and PSR");
> +		     "its related features: FBC, PSR and DRRS");
>  
>  /*
>   * One of the aspects of this test is that, for every subtest, we try different
> @@ -105,8 +105,9 @@ struct test_mode {
>  		FEATURE_NONE  = 0,
>  		FEATURE_FBC   = 1,
>  		FEATURE_PSR   = 2,
> -		FEATURE_COUNT = 4,
> -		FEATURE_DEFAULT = 4,
> +		FEATURE_DRRS  = 4,
> +		FEATURE_COUNT = 8,
> +		FEATURE_DEFAULT = 8,
>  	} feature;
>  
>  	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
> @@ -156,6 +157,7 @@ struct rect {
>  struct {
>  	int fd;
>  	int debugfs;
> +	int drrs_debugfs_fd;
>  	drmModeResPtr res;
>  	drmModeConnectorPtr connectors[MAX_CONNECTORS];
>  	drmModeEncoderPtr encoders[MAX_ENCODERS];
> @@ -182,6 +184,13 @@ struct {
>  	.can_test = false,
>  };
>  
> +#define MAX_DRRS_STATUS_BUF_LEN 256
> +
> +struct {
> +	bool can_test;
> +} drrs = {
> +	.can_test = false,
> +};
>  
>  #define SINK_CRC_SIZE 12
>  typedef struct {
> @@ -825,6 +834,60 @@ static void psr_print_status(void)
>  	igt_info("PSR status:\n%s\n", buf);
>  }
>  
> +void drrs_set(unsigned int val)
> +{
> +	char buf[2];
> +
> +	igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val);
> +	snprintf(buf, sizeof(buf), "%d", val);
> +	igt_assert_eq(write(drm.drrs_debugfs_fd,
> +		      buf, strlen(buf)), strlen(buf));
> +}
> +
> +static bool is_drrs_high(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS_HIGH_RR");
> +}
> +
> +static bool is_drrs_low(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS_LOW_RR");
> +}
> +
> +static bool is_drrs_supported(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS Supported: Yes");
> +}
> +
> +static bool is_drrs_inactive(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +
> +	if (strstr(buf, "DRRS_State: "))
> +		return false;
> +
> +	return true;
> +}
> +
> +static void drrs_print_status(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	igt_info("DRRS STATUS :\n%s\n", buf);
> +}
> +
>  static struct timespec fbc_get_last_action(void)
>  {
>  	struct timespec ret = { 0, 0 };
> @@ -935,10 +998,17 @@ static bool psr_wait_until_enabled(void)
>  	return igt_wait(psr_is_enabled(), 5000, 1);
>  }
>  
> +static bool drrs_wait_until_rr_switch_to_low(void)
> +{
> +	return igt_wait(is_drrs_low(), 5000, 1);
> +}
> +
>  #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
>  #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
>  #define psr_enable() igt_set_module_param_int("enable_psr", 1)
>  #define psr_disable() igt_set_module_param_int("enable_psr", 0)
> +#define drrs_enable()	drrs_set(1)
> +#define drrs_disable()	drrs_set(0)
>  
>  static void get_sink_crc(sink_crc_t *crc, bool mandatory)
>  {
> @@ -1184,6 +1254,7 @@ static void disable_features(const struct test_mode *t)
>  
>  	fbc_disable();
>  	psr_disable();
> +	drrs_disable();
>  }
>  
>  static void *busy_thread_func(void *data)
> @@ -1508,6 +1579,12 @@ static void teardown_crcs(void)
>  	igt_pipe_crc_free(pipe_crc);
>  }
>  
> +static void teardown_drrs(void)
> +{
> +	if (drm.drrs_debugfs_fd != -1)
> +		close(drm.drrs_debugfs_fd);
> +}
> +
>  static bool fbc_supported_on_chipset(void)
>  {
>  	char buf[128];
> @@ -1577,6 +1654,29 @@ static void teardown_psr(void)
>  {
>  }
>  
> +static void setup_drrs(void)
> +{
> +	if (get_connector(prim_mode_params.connector_id)->connector_type !=
> +	    DRM_MODE_CONNECTOR_eDP) {
> +		igt_info("Can't test DRRS: no usable eDP screen.\n");
> +		return;
> +	}
> +
> +	if (!is_drrs_supported()) {
> +		igt_info("Can't test DRRS: Not supported.\n");
> +		return;
> +	}
> +
> +	drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY);
> +
> +	if (drm.drrs_debugfs_fd > 0) {
> +		drrs.can_test = true;
> +	} else {
> +		igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n");
> +		drrs.can_test = false;
> +	}
> +}
> +
>  static void setup_environment(void)
>  {
>  	setup_drm();
> @@ -1584,6 +1684,7 @@ static void setup_environment(void)
>  
>  	setup_fbc();
>  	setup_psr();
> +	setup_drrs();
>  
>  	setup_crcs();
>  }
> @@ -1596,6 +1697,7 @@ static void teardown_environment(void)
>  	teardown_psr();
>  	teardown_fbc();
>  	teardown_modeset();
> +	teardown_drrs();
>  	teardown_drm();
>  }
>  
> @@ -1662,6 +1764,11 @@ static void do_flush(const struct test_mode *t)
>  #define ASSERT_PSR_ENABLED		(1 << 6)
>  #define ASSERT_PSR_DISABLED		(1 << 7)
>  
> +#define DRRS_ASSERT_FLAGS		(7 << 8)
> +#define ASSERT_DRRS_HIGH		(1 << 8)
> +#define ASSERT_DRRS_LOW		(1 << 9)
> +#define ASSERT_DRRS_INACTIVE		(1 << 10)
> +
>  static int adjust_assertion_flags(const struct test_mode *t, int flags)
>  {
>  	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
> @@ -1669,12 +1776,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
>  			flags |= ASSERT_FBC_ENABLED;
>  		if (!(flags & ASSERT_PSR_DISABLED))
>  			flags |= ASSERT_PSR_ENABLED;
> +		if (!((flags & ASSERT_DRRS_LOW) ||
> +		    (flags & ASSERT_DRRS_INACTIVE)))
> +			flags |= ASSERT_DRRS_HIGH;
>  	}
>  
>  	if ((t->feature & FEATURE_FBC) == 0)
>  		flags &= ~FBC_ASSERT_FLAGS;
>  	if ((t->feature & FEATURE_PSR) == 0)
>  		flags &= ~PSR_ASSERT_FLAGS;
> +	if ((t->feature & FEATURE_DRRS) == 0)
> +		flags &= ~DRRS_ASSERT_FLAGS;
>  
>  	return flags;
>  }
> @@ -1706,6 +1818,23 @@ static void do_status_assertions(int flags)
>  		return;
>  	}
>  
> +	if (flags & ASSERT_DRRS_HIGH) {
> +		if (!is_drrs_high()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS HIGH\n");
> +		}
> +	} else if (flags & ASSERT_DRRS_LOW) {
> +		if (!drrs_wait_until_rr_switch_to_low()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS LOW\n");
> +		}
> +	} else if (flags & ASSERT_DRRS_INACTIVE) {
> +		if (!is_drrs_inactive()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS INACTIVE\n");
> +		}
> +	}
> +
>  	if (flags & ASSERT_FBC_ENABLED) {
>  		igt_require(!fbc_not_enough_stolen());
>  		igt_require(!fbc_stride_not_supported());
> @@ -1833,6 +1962,8 @@ static void enable_features_for_test(const struct test_mode *t)
>  		fbc_enable();
>  	if (t->feature & FEATURE_PSR)
>  		psr_enable();
> +	if (t->feature & FEATURE_DRRS)
> +		drrs_enable();
>  }
>  
>  static void check_test_requirements(const struct test_mode *t)
> @@ -1852,6 +1983,18 @@ static void check_test_requirements(const struct test_mode *t)
>  			      "Can't test PSR without sink CRCs\n");
>  	}
>  
> +	if (t->feature & FEATURE_DRRS)
> +		igt_require_f(drrs.can_test,
> +			      "Can't test DRRS with the current outputs\n");
> +
> +	/*
> +	 * In kernel, When PSR is enabled, DRRS will be disabled. So If a test
> +	 * case needs DRRS + PSR enabled, that will be skipped.
> +	 */
> +	igt_require_f(!((t->feature & FEATURE_PSR) &&
> +		      (t->feature & FEATURE_DRRS)),
> +		      "Can't test PSR and DRRS together\n");
> +
>  	if (opt.only_pipes != PIPE_COUNT)
>  		igt_require(t->pipes == opt.only_pipes);
>  }
> @@ -1973,7 +2116,7 @@ static void rte_subtest(const struct test_mode *t)
>  
>  	unset_all_crtcs();
>  	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
> -		      DONT_ASSERT_CRC);
> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>  
>  	enable_prim_screen_and_wait(t);
>  	set_cursor_for_test(t, &prim_mode_params);
> @@ -2065,6 +2208,13 @@ static void draw_subtest(const struct test_mode *t)
>  	if (op_disables_psr(t, t->method))
>  		assertions |= ASSERT_PSR_DISABLED;
>  
> +	/*
> +	 * On FBS_INDIVIDUAL, write to offscreen plane will not touch the
> +	 * current frambuffer. Hence assert for DRRS_LOW.
> +	 */
> +	if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN))
> +		assertions |= ASSERT_DRRS_LOW;
> +
>  	prepare_subtest(t, pattern);
>  	target = pick_target(t, params);
>  
> @@ -2273,7 +2423,11 @@ static void slow_draw_subtest(const struct test_mode *t)
>  		sleep(2);
>  
>  		update_wanted_crc(t, &pattern->crcs[t->format][r]);
> -		do_assertions(0);
> +
> +		if (t->feature & FEATURE_DRRS)
> +			do_assertions(ASSERT_DRRS_LOW);
> +		else
> +			do_assertions(0);
>  	}
>  }
>  
> @@ -2882,14 +3036,14 @@ static void suspend_subtest(const struct test_mode *t)
>  	sleep(5);
>  	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>  	sleep(5);
> -	do_assertions(0);
> +	do_assertions(ASSERT_DRRS_LOW);
>  
>  	unset_all_crtcs();
>  	sleep(5);
>  	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>  	sleep(5);
>  	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
> -		      DONT_ASSERT_CRC);
> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>  
>  	set_mode_for_params(params);
>  	do_assertions(0);
> @@ -3371,6 +3525,14 @@ static const char *feature_str(int feature)
>  		return "psr";
>  	case FEATURE_FBC | FEATURE_PSR:
>  		return "fbcpsr";
> +	case FEATURE_DRRS:
> +		return "drrs";
> +	case FEATURE_FBC | FEATURE_DRRS:
> +		return "fbcdrrs";
> +	case FEATURE_PSR | FEATURE_DRRS:
> +		return "psrdrrs";
> +	case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS:
> +		return "fbcpsrdrrs";
>  	default:
>  		igt_assert(false);
>  	}
> @@ -3635,7 +3797,7 @@ int main(int argc, char *argv[])
>  				tilingchange_subtest(&t);
>  		}
>  
> -		if (t.feature & FEATURE_PSR)
> +		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
>  			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
>  				slow_draw_subtest(&t);
>  
> -- 
> 1.9.1
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH i-g-t v12] tests/kms_frontbuffer_tracking: Including DRRS test coverage
  2018-01-05 17:55                       ` Rodrigo Vivi
@ 2018-01-06 10:48                         ` Ramalingam C
  2018-01-06 13:37                           ` Ramalingam C
  0 siblings, 1 reply; 59+ messages in thread
From: Ramalingam C @ 2018-01-06 10:48 UTC (permalink / raw)
  To: Rodrigo Vivi, Lohith BS
  Cc: paulo.r.zanoni, jari.tahvanainen, daniel.vetter, intel-gfx,
	ankit.k.nautiyal



On Friday 05 January 2018 11:25 PM, Rodrigo Vivi wrote:
> On Fri, Jan 05, 2018 at 11:40:29AM +0000, Lohith BS wrote:
>> Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's
>> refresh rate to the lowest vrefresh supported by panel, when frame is
>> not flipped for more than a Sec.
>>
>> In kernel, DRRS uses the front buffer tracking infrastructure.
>> Hence DRRS test coverage is added along with other frontbuffer tracking
>> based features such as FBC and PSR tests.
>>
>> Here, we are testing DRRS with other features in all possible
>> combinations, in all required test cases, to capture any possible
>> regression.
>>
>> v2: Addressed the comments and suggestions from Vlad, Marius.
>>      The signoff details from the earlier work are also included.
>>
>> v3: Modified vblank rate calculation by using reply-sequence,
>>      provided by drmWaitVBlank, as suggested by Chris Wilson.
>>
>> v4: As suggested from Chris Wilson and Daniel Vetter
>>      1) Avoided using pthread for calculating vblank refresh rate,
>>         instead used drmWaitVBlank reply sequence.
>>      2) Avoided using kernel-specific info like transitional delays,
>>         instead polling mechanism with timeout is used.
>>      3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
>>         instead of having a separate test.
>>
>> v5: This patch adds DRRS as a new feature in the
>>      kms_frontbuffer_tracking IGT.
>>      DRRS switch to lower vrefresh rate is tested at slow-draw subtest.
>>
>>      Note:
>>      1) Currently kernel doesn't have support to enable and disable
>>         the DRRS feature dynamically(as in case of PSR). Hence if the
>>         panel supports DRRS it will be enabled by default.
>>
>>      This is in continuation of last patch
>> 	"https://patchwork.freedesktop.org/patch/162726/"
>>
>> v6: This patch adds runtime enable and disable feature for testing DRRS
>>
>> v7: This patch adds runtime enable and disable feature for testing DRRS
>>      through debugfs entry "i915_drrs_ctl".
>>
>> v8: Commit message is updated to reflect current implementation.
>>
>> v9: Addressed Paulo Zanoni comments.
>>      Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL.
>>
>> v10: Corrected DRRS state expectation in suspend related subtests.
>>
>> v11: Removing the global flag is_psr_drrs_combo [Rodrigo].
>>
>> v12: Rewriting the DRRS inactive deduction [Rodrigo].
>>
>> Signed-off-by: Lohith BS <lohith.bs@intel.com>
>> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
> I was almost adding the rv-b here, but I will step back while CI is not
> fully happy with the patch:
>
> https://patchwork.freedesktop.org/series/32888/
>
> regressed many sub-tests on snb and hsw...
Rodrigo, please share the logs for regressions. We will analyze it.

Thanks
-Ram
>
>> ---
>>   tests/kms_frontbuffer_tracking.c | 178 +++++++++++++++++++++++++++++++++++++--
>>   1 file changed, 170 insertions(+), 8 deletions(-)
>>
>> diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
>> index 1601cab..4b87273 100644
>> --- a/tests/kms_frontbuffer_tracking.c
>> +++ b/tests/kms_frontbuffer_tracking.c
>> @@ -34,7 +34,7 @@
>>   
>>   
>>   IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
>> -		     "its related features: FBC and PSR");
>> +		     "its related features: FBC, PSR and DRRS");
>>   
>>   /*
>>    * One of the aspects of this test is that, for every subtest, we try different
>> @@ -105,8 +105,9 @@ struct test_mode {
>>   		FEATURE_NONE  = 0,
>>   		FEATURE_FBC   = 1,
>>   		FEATURE_PSR   = 2,
>> -		FEATURE_COUNT = 4,
>> -		FEATURE_DEFAULT = 4,
>> +		FEATURE_DRRS  = 4,
>> +		FEATURE_COUNT = 8,
>> +		FEATURE_DEFAULT = 8,
>>   	} feature;
>>   
>>   	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
>> @@ -156,6 +157,7 @@ struct rect {
>>   struct {
>>   	int fd;
>>   	int debugfs;
>> +	int drrs_debugfs_fd;
>>   	drmModeResPtr res;
>>   	drmModeConnectorPtr connectors[MAX_CONNECTORS];
>>   	drmModeEncoderPtr encoders[MAX_ENCODERS];
>> @@ -182,6 +184,13 @@ struct {
>>   	.can_test = false,
>>   };
>>   
>> +#define MAX_DRRS_STATUS_BUF_LEN 256
>> +
>> +struct {
>> +	bool can_test;
>> +} drrs = {
>> +	.can_test = false,
>> +};
>>   
>>   #define SINK_CRC_SIZE 12
>>   typedef struct {
>> @@ -825,6 +834,60 @@ static void psr_print_status(void)
>>   	igt_info("PSR status:\n%s\n", buf);
>>   }
>>   
>> +void drrs_set(unsigned int val)
>> +{
>> +	char buf[2];
>> +
>> +	igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val);
>> +	snprintf(buf, sizeof(buf), "%d", val);
>> +	igt_assert_eq(write(drm.drrs_debugfs_fd,
>> +		      buf, strlen(buf)), strlen(buf));
>> +}
>> +
>> +static bool is_drrs_high(void)
>> +{
>> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +	return strstr(buf, "DRRS_HIGH_RR");
>> +}
>> +
>> +static bool is_drrs_low(void)
>> +{
>> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +	return strstr(buf, "DRRS_LOW_RR");
>> +}
>> +
>> +static bool is_drrs_supported(void)
>> +{
>> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +	return strstr(buf, "DRRS Supported: Yes");
>> +}
>> +
>> +static bool is_drrs_inactive(void)
>> +{
>> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +
>> +	if (strstr(buf, "DRRS_State: "))
>> +		return false;
>> +
>> +	return true;
>> +}
>> +
>> +static void drrs_print_status(void)
>> +{
>> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +	igt_info("DRRS STATUS :\n%s\n", buf);
>> +}
>> +
>>   static struct timespec fbc_get_last_action(void)
>>   {
>>   	struct timespec ret = { 0, 0 };
>> @@ -935,10 +998,17 @@ static bool psr_wait_until_enabled(void)
>>   	return igt_wait(psr_is_enabled(), 5000, 1);
>>   }
>>   
>> +static bool drrs_wait_until_rr_switch_to_low(void)
>> +{
>> +	return igt_wait(is_drrs_low(), 5000, 1);
>> +}
>> +
>>   #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
>>   #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
>>   #define psr_enable() igt_set_module_param_int("enable_psr", 1)
>>   #define psr_disable() igt_set_module_param_int("enable_psr", 0)
>> +#define drrs_enable()	drrs_set(1)
>> +#define drrs_disable()	drrs_set(0)
>>   
>>   static void get_sink_crc(sink_crc_t *crc, bool mandatory)
>>   {
>> @@ -1184,6 +1254,7 @@ static void disable_features(const struct test_mode *t)
>>   
>>   	fbc_disable();
>>   	psr_disable();
>> +	drrs_disable();
>>   }
>>   
>>   static void *busy_thread_func(void *data)
>> @@ -1508,6 +1579,12 @@ static void teardown_crcs(void)
>>   	igt_pipe_crc_free(pipe_crc);
>>   }
>>   
>> +static void teardown_drrs(void)
>> +{
>> +	if (drm.drrs_debugfs_fd != -1)
>> +		close(drm.drrs_debugfs_fd);
>> +}
>> +
>>   static bool fbc_supported_on_chipset(void)
>>   {
>>   	char buf[128];
>> @@ -1577,6 +1654,29 @@ static void teardown_psr(void)
>>   {
>>   }
>>   
>> +static void setup_drrs(void)
>> +{
>> +	if (get_connector(prim_mode_params.connector_id)->connector_type !=
>> +	    DRM_MODE_CONNECTOR_eDP) {
>> +		igt_info("Can't test DRRS: no usable eDP screen.\n");
>> +		return;
>> +	}
>> +
>> +	if (!is_drrs_supported()) {
>> +		igt_info("Can't test DRRS: Not supported.\n");
>> +		return;
>> +	}
>> +
>> +	drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY);
>> +
>> +	if (drm.drrs_debugfs_fd > 0) {
>> +		drrs.can_test = true;
>> +	} else {
>> +		igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n");
>> +		drrs.can_test = false;
>> +	}
>> +}
>> +
>>   static void setup_environment(void)
>>   {
>>   	setup_drm();
>> @@ -1584,6 +1684,7 @@ static void setup_environment(void)
>>   
>>   	setup_fbc();
>>   	setup_psr();
>> +	setup_drrs();
>>   
>>   	setup_crcs();
>>   }
>> @@ -1596,6 +1697,7 @@ static void teardown_environment(void)
>>   	teardown_psr();
>>   	teardown_fbc();
>>   	teardown_modeset();
>> +	teardown_drrs();
>>   	teardown_drm();
>>   }
>>   
>> @@ -1662,6 +1764,11 @@ static void do_flush(const struct test_mode *t)
>>   #define ASSERT_PSR_ENABLED		(1 << 6)
>>   #define ASSERT_PSR_DISABLED		(1 << 7)
>>   
>> +#define DRRS_ASSERT_FLAGS		(7 << 8)
>> +#define ASSERT_DRRS_HIGH		(1 << 8)
>> +#define ASSERT_DRRS_LOW		(1 << 9)
>> +#define ASSERT_DRRS_INACTIVE		(1 << 10)
>> +
>>   static int adjust_assertion_flags(const struct test_mode *t, int flags)
>>   {
>>   	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
>> @@ -1669,12 +1776,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
>>   			flags |= ASSERT_FBC_ENABLED;
>>   		if (!(flags & ASSERT_PSR_DISABLED))
>>   			flags |= ASSERT_PSR_ENABLED;
>> +		if (!((flags & ASSERT_DRRS_LOW) ||
>> +		    (flags & ASSERT_DRRS_INACTIVE)))
>> +			flags |= ASSERT_DRRS_HIGH;
>>   	}
>>   
>>   	if ((t->feature & FEATURE_FBC) == 0)
>>   		flags &= ~FBC_ASSERT_FLAGS;
>>   	if ((t->feature & FEATURE_PSR) == 0)
>>   		flags &= ~PSR_ASSERT_FLAGS;
>> +	if ((t->feature & FEATURE_DRRS) == 0)
>> +		flags &= ~DRRS_ASSERT_FLAGS;
>>   
>>   	return flags;
>>   }
>> @@ -1706,6 +1818,23 @@ static void do_status_assertions(int flags)
>>   		return;
>>   	}
>>   
>> +	if (flags & ASSERT_DRRS_HIGH) {
>> +		if (!is_drrs_high()) {
>> +			drrs_print_status();
>> +			igt_assert_f(false, "DRRS HIGH\n");
>> +		}
>> +	} else if (flags & ASSERT_DRRS_LOW) {
>> +		if (!drrs_wait_until_rr_switch_to_low()) {
>> +			drrs_print_status();
>> +			igt_assert_f(false, "DRRS LOW\n");
>> +		}
>> +	} else if (flags & ASSERT_DRRS_INACTIVE) {
>> +		if (!is_drrs_inactive()) {
>> +			drrs_print_status();
>> +			igt_assert_f(false, "DRRS INACTIVE\n");
>> +		}
>> +	}
>> +
>>   	if (flags & ASSERT_FBC_ENABLED) {
>>   		igt_require(!fbc_not_enough_stolen());
>>   		igt_require(!fbc_stride_not_supported());
>> @@ -1833,6 +1962,8 @@ static void enable_features_for_test(const struct test_mode *t)
>>   		fbc_enable();
>>   	if (t->feature & FEATURE_PSR)
>>   		psr_enable();
>> +	if (t->feature & FEATURE_DRRS)
>> +		drrs_enable();
>>   }
>>   
>>   static void check_test_requirements(const struct test_mode *t)
>> @@ -1852,6 +1983,18 @@ static void check_test_requirements(const struct test_mode *t)
>>   			      "Can't test PSR without sink CRCs\n");
>>   	}
>>   
>> +	if (t->feature & FEATURE_DRRS)
>> +		igt_require_f(drrs.can_test,
>> +			      "Can't test DRRS with the current outputs\n");
>> +
>> +	/*
>> +	 * In kernel, When PSR is enabled, DRRS will be disabled. So If a test
>> +	 * case needs DRRS + PSR enabled, that will be skipped.
>> +	 */
>> +	igt_require_f(!((t->feature & FEATURE_PSR) &&
>> +		      (t->feature & FEATURE_DRRS)),
>> +		      "Can't test PSR and DRRS together\n");
>> +
>>   	if (opt.only_pipes != PIPE_COUNT)
>>   		igt_require(t->pipes == opt.only_pipes);
>>   }
>> @@ -1973,7 +2116,7 @@ static void rte_subtest(const struct test_mode *t)
>>   
>>   	unset_all_crtcs();
>>   	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
>> -		      DONT_ASSERT_CRC);
>> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>>   
>>   	enable_prim_screen_and_wait(t);
>>   	set_cursor_for_test(t, &prim_mode_params);
>> @@ -2065,6 +2208,13 @@ static void draw_subtest(const struct test_mode *t)
>>   	if (op_disables_psr(t, t->method))
>>   		assertions |= ASSERT_PSR_DISABLED;
>>   
>> +	/*
>> +	 * On FBS_INDIVIDUAL, write to offscreen plane will not touch the
>> +	 * current frambuffer. Hence assert for DRRS_LOW.
>> +	 */
>> +	if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN))
>> +		assertions |= ASSERT_DRRS_LOW;
>> +
>>   	prepare_subtest(t, pattern);
>>   	target = pick_target(t, params);
>>   
>> @@ -2273,7 +2423,11 @@ static void slow_draw_subtest(const struct test_mode *t)
>>   		sleep(2);
>>   
>>   		update_wanted_crc(t, &pattern->crcs[t->format][r]);
>> -		do_assertions(0);
>> +
>> +		if (t->feature & FEATURE_DRRS)
>> +			do_assertions(ASSERT_DRRS_LOW);
>> +		else
>> +			do_assertions(0);
>>   	}
>>   }
>>   
>> @@ -2882,14 +3036,14 @@ static void suspend_subtest(const struct test_mode *t)
>>   	sleep(5);
>>   	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>>   	sleep(5);
>> -	do_assertions(0);
>> +	do_assertions(ASSERT_DRRS_LOW);
>>   
>>   	unset_all_crtcs();
>>   	sleep(5);
>>   	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>>   	sleep(5);
>>   	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
>> -		      DONT_ASSERT_CRC);
>> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>>   
>>   	set_mode_for_params(params);
>>   	do_assertions(0);
>> @@ -3371,6 +3525,14 @@ static const char *feature_str(int feature)
>>   		return "psr";
>>   	case FEATURE_FBC | FEATURE_PSR:
>>   		return "fbcpsr";
>> +	case FEATURE_DRRS:
>> +		return "drrs";
>> +	case FEATURE_FBC | FEATURE_DRRS:
>> +		return "fbcdrrs";
>> +	case FEATURE_PSR | FEATURE_DRRS:
>> +		return "psrdrrs";
>> +	case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS:
>> +		return "fbcpsrdrrs";
>>   	default:
>>   		igt_assert(false);
>>   	}
>> @@ -3635,7 +3797,7 @@ int main(int argc, char *argv[])
>>   				tilingchange_subtest(&t);
>>   		}
>>   
>> -		if (t.feature & FEATURE_PSR)
>> +		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
>>   			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
>>   				slow_draw_subtest(&t);
>>   
>> -- 
>> 1.9.1
>>

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

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

* Re: [PATCH i-g-t v12] tests/kms_frontbuffer_tracking: Including DRRS test coverage
  2018-01-06 10:48                         ` Ramalingam C
@ 2018-01-06 13:37                           ` Ramalingam C
  0 siblings, 0 replies; 59+ messages in thread
From: Ramalingam C @ 2018-01-06 13:37 UTC (permalink / raw)
  To: Rodrigo Vivi, Lohith BS
  Cc: paulo.r.zanoni, jari.tahvanainen, daniel.vetter, intel-gfx,
	ankit.k.nautiyal



On Saturday 06 January 2018 04:18 PM, Ramalingam C wrote:
>
>
> On Friday 05 January 2018 11:25 PM, Rodrigo Vivi wrote:
>> On Fri, Jan 05, 2018 at 11:40:29AM +0000, Lohith BS wrote:
>>> Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's
>>> refresh rate to the lowest vrefresh supported by panel, when frame is
>>> not flipped for more than a Sec.
>>>
>>> In kernel, DRRS uses the front buffer tracking infrastructure.
>>> Hence DRRS test coverage is added along with other frontbuffer tracking
>>> based features such as FBC and PSR tests.
>>>
>>> Here, we are testing DRRS with other features in all possible
>>> combinations, in all required test cases, to capture any possible
>>> regression.
>>>
>>> v2: Addressed the comments and suggestions from Vlad, Marius.
>>>      The signoff details from the earlier work are also included.
>>>
>>> v3: Modified vblank rate calculation by using reply-sequence,
>>>      provided by drmWaitVBlank, as suggested by Chris Wilson.
>>>
>>> v4: As suggested from Chris Wilson and Daniel Vetter
>>>      1) Avoided using pthread for calculating vblank refresh rate,
>>>         instead used drmWaitVBlank reply sequence.
>>>      2) Avoided using kernel-specific info like transitional delays,
>>>         instead polling mechanism with timeout is used.
>>>      3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
>>>         instead of having a separate test.
>>>
>>> v5: This patch adds DRRS as a new feature in the
>>>      kms_frontbuffer_tracking IGT.
>>>      DRRS switch to lower vrefresh rate is tested at slow-draw subtest.
>>>
>>>      Note:
>>>      1) Currently kernel doesn't have support to enable and disable
>>>         the DRRS feature dynamically(as in case of PSR). Hence if the
>>>         panel supports DRRS it will be enabled by default.
>>>
>>>      This is in continuation of last patch
>>>     "https://patchwork.freedesktop.org/patch/162726/"
>>>
>>> v6: This patch adds runtime enable and disable feature for testing DRRS
>>>
>>> v7: This patch adds runtime enable and disable feature for testing DRRS
>>>      through debugfs entry "i915_drrs_ctl".
>>>
>>> v8: Commit message is updated to reflect current implementation.
>>>
>>> v9: Addressed Paulo Zanoni comments.
>>>      Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL.
>>>
>>> v10: Corrected DRRS state expectation in suspend related subtests.
>>>
>>> v11: Removing the global flag is_psr_drrs_combo [Rodrigo].
>>>
>>> v12: Rewriting the DRRS inactive deduction [Rodrigo].
>>>
>>> Signed-off-by: Lohith BS <lohith.bs@intel.com>
>>> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
>> I was almost adding the rv-b here, but I will step back while CI is not
>> fully happy with the patch:
>>
>> https://patchwork.freedesktop.org/series/32888/
>>
>> regressed many sub-tests on snb and hsw...
> Rodrigo, please share the logs for regressions. We will analyze it.
Please ignore this. found in the already shared link.
-Ram
>
> Thanks
> -Ram
>>
>>> ---
>>>   tests/kms_frontbuffer_tracking.c | 178 
>>> +++++++++++++++++++++++++++++++++++++--
>>>   1 file changed, 170 insertions(+), 8 deletions(-)
>>>
>>> diff --git a/tests/kms_frontbuffer_tracking.c 
>>> b/tests/kms_frontbuffer_tracking.c
>>> index 1601cab..4b87273 100644
>>> --- a/tests/kms_frontbuffer_tracking.c
>>> +++ b/tests/kms_frontbuffer_tracking.c
>>> @@ -34,7 +34,7 @@
>>>       IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking 
>>> mechanism and "
>>> -             "its related features: FBC and PSR");
>>> +             "its related features: FBC, PSR and DRRS");
>>>     /*
>>>    * One of the aspects of this test is that, for every subtest, we 
>>> try different
>>> @@ -105,8 +105,9 @@ struct test_mode {
>>>           FEATURE_NONE  = 0,
>>>           FEATURE_FBC   = 1,
>>>           FEATURE_PSR   = 2,
>>> -        FEATURE_COUNT = 4,
>>> -        FEATURE_DEFAULT = 4,
>>> +        FEATURE_DRRS  = 4,
>>> +        FEATURE_COUNT = 8,
>>> +        FEATURE_DEFAULT = 8,
>>>       } feature;
>>>         /* Possible pixel formats. We just use FORMAT_DEFAULT for 
>>> most tests and
>>> @@ -156,6 +157,7 @@ struct rect {
>>>   struct {
>>>       int fd;
>>>       int debugfs;
>>> +    int drrs_debugfs_fd;
>>>       drmModeResPtr res;
>>>       drmModeConnectorPtr connectors[MAX_CONNECTORS];
>>>       drmModeEncoderPtr encoders[MAX_ENCODERS];
>>> @@ -182,6 +184,13 @@ struct {
>>>       .can_test = false,
>>>   };
>>>   +#define MAX_DRRS_STATUS_BUF_LEN 256
>>> +
>>> +struct {
>>> +    bool can_test;
>>> +} drrs = {
>>> +    .can_test = false,
>>> +};
>>>     #define SINK_CRC_SIZE 12
>>>   typedef struct {
>>> @@ -825,6 +834,60 @@ static void psr_print_status(void)
>>>       igt_info("PSR status:\n%s\n", buf);
>>>   }
>>>   +void drrs_set(unsigned int val)
>>> +{
>>> +    char buf[2];
>>> +
>>> +    igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", 
>>> val);
>>> +    snprintf(buf, sizeof(buf), "%d", val);
>>> +    igt_assert_eq(write(drm.drrs_debugfs_fd,
>>> +              buf, strlen(buf)), strlen(buf));
>>> +}
>>> +
>>> +static bool is_drrs_high(void)
>>> +{
>>> +    char buf[MAX_DRRS_STATUS_BUF_LEN];
>>> +
>>> +    debugfs_read("i915_drrs_status", buf);
>>> +    return strstr(buf, "DRRS_HIGH_RR");
>>> +}
>>> +
>>> +static bool is_drrs_low(void)
>>> +{
>>> +    char buf[MAX_DRRS_STATUS_BUF_LEN];
>>> +
>>> +    debugfs_read("i915_drrs_status", buf);
>>> +    return strstr(buf, "DRRS_LOW_RR");
>>> +}
>>> +
>>> +static bool is_drrs_supported(void)
>>> +{
>>> +    char buf[MAX_DRRS_STATUS_BUF_LEN];
>>> +
>>> +    debugfs_read("i915_drrs_status", buf);
>>> +    return strstr(buf, "DRRS Supported: Yes");
>>> +}
>>> +
>>> +static bool is_drrs_inactive(void)
>>> +{
>>> +    char buf[MAX_DRRS_STATUS_BUF_LEN];
>>> +
>>> +    debugfs_read("i915_drrs_status", buf);
>>> +
>>> +    if (strstr(buf, "DRRS_State: "))
>>> +        return false;
>>> +
>>> +    return true;
>>> +}
>>> +
>>> +static void drrs_print_status(void)
>>> +{
>>> +    char buf[MAX_DRRS_STATUS_BUF_LEN];
>>> +
>>> +    debugfs_read("i915_drrs_status", buf);
>>> +    igt_info("DRRS STATUS :\n%s\n", buf);
>>> +}
>>> +
>>>   static struct timespec fbc_get_last_action(void)
>>>   {
>>>       struct timespec ret = { 0, 0 };
>>> @@ -935,10 +998,17 @@ static bool psr_wait_until_enabled(void)
>>>       return igt_wait(psr_is_enabled(), 5000, 1);
>>>   }
>>>   +static bool drrs_wait_until_rr_switch_to_low(void)
>>> +{
>>> +    return igt_wait(is_drrs_low(), 5000, 1);
>>> +}
>>> +
>>>   #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
>>>   #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
>>>   #define psr_enable() igt_set_module_param_int("enable_psr", 1)
>>>   #define psr_disable() igt_set_module_param_int("enable_psr", 0)
>>> +#define drrs_enable()    drrs_set(1)
>>> +#define drrs_disable()    drrs_set(0)
>>>     static void get_sink_crc(sink_crc_t *crc, bool mandatory)
>>>   {
>>> @@ -1184,6 +1254,7 @@ static void disable_features(const struct 
>>> test_mode *t)
>>>         fbc_disable();
>>>       psr_disable();
>>> +    drrs_disable();
>>>   }
>>>     static void *busy_thread_func(void *data)
>>> @@ -1508,6 +1579,12 @@ static void teardown_crcs(void)
>>>       igt_pipe_crc_free(pipe_crc);
>>>   }
>>>   +static void teardown_drrs(void)
>>> +{
>>> +    if (drm.drrs_debugfs_fd != -1)
>>> +        close(drm.drrs_debugfs_fd);
>>> +}
>>> +
>>>   static bool fbc_supported_on_chipset(void)
>>>   {
>>>       char buf[128];
>>> @@ -1577,6 +1654,29 @@ static void teardown_psr(void)
>>>   {
>>>   }
>>>   +static void setup_drrs(void)
>>> +{
>>> +    if 
>>> (get_connector(prim_mode_params.connector_id)->connector_type !=
>>> +        DRM_MODE_CONNECTOR_eDP) {
>>> +        igt_info("Can't test DRRS: no usable eDP screen.\n");
>>> +        return;
>>> +    }
>>> +
>>> +    if (!is_drrs_supported()) {
>>> +        igt_info("Can't test DRRS: Not supported.\n");
>>> +        return;
>>> +    }
>>> +
>>> +    drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", 
>>> O_WRONLY);
>>> +
>>> +    if (drm.drrs_debugfs_fd > 0) {
>>> +        drrs.can_test = true;
>>> +    } else {
>>> +        igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not 
>>> found.\n");
>>> +        drrs.can_test = false;
>>> +    }
>>> +}
>>> +
>>>   static void setup_environment(void)
>>>   {
>>>       setup_drm();
>>> @@ -1584,6 +1684,7 @@ static void setup_environment(void)
>>>         setup_fbc();
>>>       setup_psr();
>>> +    setup_drrs();
>>>         setup_crcs();
>>>   }
>>> @@ -1596,6 +1697,7 @@ static void teardown_environment(void)
>>>       teardown_psr();
>>>       teardown_fbc();
>>>       teardown_modeset();
>>> +    teardown_drrs();
>>>       teardown_drm();
>>>   }
>>>   @@ -1662,6 +1764,11 @@ static void do_flush(const struct test_mode 
>>> *t)
>>>   #define ASSERT_PSR_ENABLED        (1 << 6)
>>>   #define ASSERT_PSR_DISABLED        (1 << 7)
>>>   +#define DRRS_ASSERT_FLAGS        (7 << 8)
>>> +#define ASSERT_DRRS_HIGH        (1 << 8)
>>> +#define ASSERT_DRRS_LOW        (1 << 9)
>>> +#define ASSERT_DRRS_INACTIVE        (1 << 10)
>>> +
>>>   static int adjust_assertion_flags(const struct test_mode *t, int 
>>> flags)
>>>   {
>>>       if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
>>> @@ -1669,12 +1776,17 @@ static int adjust_assertion_flags(const 
>>> struct test_mode *t, int flags)
>>>               flags |= ASSERT_FBC_ENABLED;
>>>           if (!(flags & ASSERT_PSR_DISABLED))
>>>               flags |= ASSERT_PSR_ENABLED;
>>> +        if (!((flags & ASSERT_DRRS_LOW) ||
>>> +            (flags & ASSERT_DRRS_INACTIVE)))
>>> +            flags |= ASSERT_DRRS_HIGH;
>>>       }
>>>         if ((t->feature & FEATURE_FBC) == 0)
>>>           flags &= ~FBC_ASSERT_FLAGS;
>>>       if ((t->feature & FEATURE_PSR) == 0)
>>>           flags &= ~PSR_ASSERT_FLAGS;
>>> +    if ((t->feature & FEATURE_DRRS) == 0)
>>> +        flags &= ~DRRS_ASSERT_FLAGS;
>>>         return flags;
>>>   }
>>> @@ -1706,6 +1818,23 @@ static void do_status_assertions(int flags)
>>>           return;
>>>       }
>>>   +    if (flags & ASSERT_DRRS_HIGH) {
>>> +        if (!is_drrs_high()) {
>>> +            drrs_print_status();
>>> +            igt_assert_f(false, "DRRS HIGH\n");
>>> +        }
>>> +    } else if (flags & ASSERT_DRRS_LOW) {
>>> +        if (!drrs_wait_until_rr_switch_to_low()) {
>>> +            drrs_print_status();
>>> +            igt_assert_f(false, "DRRS LOW\n");
>>> +        }
>>> +    } else if (flags & ASSERT_DRRS_INACTIVE) {
>>> +        if (!is_drrs_inactive()) {
>>> +            drrs_print_status();
>>> +            igt_assert_f(false, "DRRS INACTIVE\n");
>>> +        }
>>> +    }
>>> +
>>>       if (flags & ASSERT_FBC_ENABLED) {
>>>           igt_require(!fbc_not_enough_stolen());
>>>           igt_require(!fbc_stride_not_supported());
>>> @@ -1833,6 +1962,8 @@ static void enable_features_for_test(const 
>>> struct test_mode *t)
>>>           fbc_enable();
>>>       if (t->feature & FEATURE_PSR)
>>>           psr_enable();
>>> +    if (t->feature & FEATURE_DRRS)
>>> +        drrs_enable();
>>>   }
>>>     static void check_test_requirements(const struct test_mode *t)
>>> @@ -1852,6 +1983,18 @@ static void check_test_requirements(const 
>>> struct test_mode *t)
>>>                     "Can't test PSR without sink CRCs\n");
>>>       }
>>>   +    if (t->feature & FEATURE_DRRS)
>>> +        igt_require_f(drrs.can_test,
>>> +                  "Can't test DRRS with the current outputs\n");
>>> +
>>> +    /*
>>> +     * In kernel, When PSR is enabled, DRRS will be disabled. So If 
>>> a test
>>> +     * case needs DRRS + PSR enabled, that will be skipped.
>>> +     */
>>> +    igt_require_f(!((t->feature & FEATURE_PSR) &&
>>> +              (t->feature & FEATURE_DRRS)),
>>> +              "Can't test PSR and DRRS together\n");
>>> +
>>>       if (opt.only_pipes != PIPE_COUNT)
>>>           igt_require(t->pipes == opt.only_pipes);
>>>   }
>>> @@ -1973,7 +2116,7 @@ static void rte_subtest(const struct test_mode 
>>> *t)
>>>         unset_all_crtcs();
>>>       do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
>>> -              DONT_ASSERT_CRC);
>>> +              DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>>>         enable_prim_screen_and_wait(t);
>>>       set_cursor_for_test(t, &prim_mode_params);
>>> @@ -2065,6 +2208,13 @@ static void draw_subtest(const struct 
>>> test_mode *t)
>>>       if (op_disables_psr(t, t->method))
>>>           assertions |= ASSERT_PSR_DISABLED;
>>>   +    /*
>>> +     * On FBS_INDIVIDUAL, write to offscreen plane will not touch the
>>> +     * current frambuffer. Hence assert for DRRS_LOW.
>>> +     */
>>> +    if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN))
>>> +        assertions |= ASSERT_DRRS_LOW;
>>> +
>>>       prepare_subtest(t, pattern);
>>>       target = pick_target(t, params);
>>>   @@ -2273,7 +2423,11 @@ static void slow_draw_subtest(const struct 
>>> test_mode *t)
>>>           sleep(2);
>>>             update_wanted_crc(t, &pattern->crcs[t->format][r]);
>>> -        do_assertions(0);
>>> +
>>> +        if (t->feature & FEATURE_DRRS)
>>> +            do_assertions(ASSERT_DRRS_LOW);
>>> +        else
>>> +            do_assertions(0);
>>>       }
>>>   }
>>>   @@ -2882,14 +3036,14 @@ static void suspend_subtest(const struct 
>>> test_mode *t)
>>>       sleep(5);
>>>       igt_system_suspend_autoresume(SUSPEND_STATE_MEM, 
>>> SUSPEND_TEST_NONE);
>>>       sleep(5);
>>> -    do_assertions(0);
>>> +    do_assertions(ASSERT_DRRS_LOW);
>>>         unset_all_crtcs();
>>>       sleep(5);
>>>       igt_system_suspend_autoresume(SUSPEND_STATE_MEM, 
>>> SUSPEND_TEST_NONE);
>>>       sleep(5);
>>>       do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
>>> -              DONT_ASSERT_CRC);
>>> +              DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>>>         set_mode_for_params(params);
>>>       do_assertions(0);
>>> @@ -3371,6 +3525,14 @@ static const char *feature_str(int feature)
>>>           return "psr";
>>>       case FEATURE_FBC | FEATURE_PSR:
>>>           return "fbcpsr";
>>> +    case FEATURE_DRRS:
>>> +        return "drrs";
>>> +    case FEATURE_FBC | FEATURE_DRRS:
>>> +        return "fbcdrrs";
>>> +    case FEATURE_PSR | FEATURE_DRRS:
>>> +        return "psrdrrs";
>>> +    case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS:
>>> +        return "fbcpsrdrrs";
>>>       default:
>>>           igt_assert(false);
>>>       }
>>> @@ -3635,7 +3797,7 @@ int main(int argc, char *argv[])
>>>                   tilingchange_subtest(&t);
>>>           }
>>>   -        if (t.feature & FEATURE_PSR)
>>> +        if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
>>>               igt_subtest_f("%s-slowdraw", feature_str(t.feature))
>>>                   slow_draw_subtest(&t);
>>>   --
>>> 1.9.1
>>>
>

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

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

* [PATCH i-g-t v13] tests/kms_frontbuffer_tracking: Including DRRS test coverage
  2018-01-05 11:40                     ` [PATCH i-g-t v12] " Lohith BS
  2018-01-05 17:55                       ` Rodrigo Vivi
@ 2018-01-10 14:47                       ` Lohith BS
  2018-01-10 18:15                         ` Rodrigo Vivi
                                           ` (2 more replies)
  1 sibling, 3 replies; 59+ messages in thread
From: Lohith BS @ 2018-01-10 14:47 UTC (permalink / raw)
  To: intel-gfx, rodrigo.vivi, jani.saarinen, daniel.vetter, chris,
	jari.tahvanainen
  Cc: ankit.k.nautiyal, paulo.r.zanoni

Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's
refresh rate to the lowest vrefresh supported by panel, when frame is
not flipped for more than a Sec.

In kernel, DRRS uses the front buffer tracking infrastructure.
Hence DRRS test coverage is added along with other frontbuffer tracking
based features such as FBC and PSR tests.

Here, we are testing DRRS with other features in all possible
combinations, in all required test cases, to capture any possible
regression.

v2: Addressed the comments and suggestions from Vlad, Marius.
    The signoff details from the earlier work are also included.

v3: Modified vblank rate calculation by using reply-sequence,
    provided by drmWaitVBlank, as suggested by Chris Wilson.

v4: As suggested from Chris Wilson and Daniel Vetter
    1) Avoided using pthread for calculating vblank refresh rate,
       instead used drmWaitVBlank reply sequence.
    2) Avoided using kernel-specific info like transitional delays,
       instead polling mechanism with timeout is used.
    3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
       instead of having a separate test.

v5: This patch adds DRRS as a new feature in the
    kms_frontbuffer_tracking IGT.
    DRRS switch to lower vrefresh rate is tested at slow-draw subtest.

    Note:
    1) Currently kernel doesn't have support to enable and disable
       the DRRS feature dynamically(as in case of PSR). Hence if the
       panel supports DRRS it will be enabled by default.

    This is in continuation of last patch
	"https://patchwork.freedesktop.org/patch/162726/"

v6: This patch adds runtime enable and disable feature for testing DRRS

v7: This patch adds runtime enable and disable feature for testing DRRS
    through debugfs entry "i915_drrs_ctl".

v8: Commit message is updated to reflect current implementation.

v9: Addressed Paulo Zanoni comments.
    Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL.

v10: Corrected DRRS state expectation in suspend related subtests.

v11: Removing the global flag is_psr_drrs_combo [Rodrigo].

v12: Rewriting the DRRS inactive deduction [Rodrigo].

v13: En/Dis-able DRRS only when DRRS is capable on the setup.

Signed-off-by: Lohith BS <lohith.bs@intel.com>
Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
---
 tests/kms_frontbuffer_tracking.c | 172 +++++++++++++++++++++++++++++++++++++--
 1 file changed, 164 insertions(+), 8 deletions(-)

diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
index 1601cab..6b2299b 100644
--- a/tests/kms_frontbuffer_tracking.c
+++ b/tests/kms_frontbuffer_tracking.c
@@ -34,7 +34,7 @@
 
 
 IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
-		     "its related features: FBC and PSR");
+		     "its related features: FBC, PSR and DRRS");
 
 /*
  * One of the aspects of this test is that, for every subtest, we try different
@@ -105,8 +105,9 @@ struct test_mode {
 		FEATURE_NONE  = 0,
 		FEATURE_FBC   = 1,
 		FEATURE_PSR   = 2,
-		FEATURE_COUNT = 4,
-		FEATURE_DEFAULT = 4,
+		FEATURE_DRRS  = 4,
+		FEATURE_COUNT = 8,
+		FEATURE_DEFAULT = 8,
 	} feature;
 
 	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
@@ -182,6 +183,13 @@ struct {
 	.can_test = false,
 };
 
+#define MAX_DRRS_STATUS_BUF_LEN 256
+
+struct {
+	bool can_test;
+} drrs = {
+	.can_test = false,
+};
 
 #define SINK_CRC_SIZE 12
 typedef struct {
@@ -790,7 +798,14 @@ static void __debugfs_read(const char *param, char *buf, int len)
 	buf[len] = '\0';
 }
 
+static void __debugfs_write(const char *param, char *buf, int len)
+{
+	igt_assert_eq(igt_sysfs_write(drm.debugfs, param, buf, len - 1),
+		      len - 1);
+}
+
 #define debugfs_read(p, arr) __debugfs_read(p, arr, sizeof(arr))
+#define debugfs_write(p, arr) __debugfs_write(p, arr, sizeof(arr))
 
 static bool fbc_is_enabled(void)
 {
@@ -825,6 +840,62 @@ static void psr_print_status(void)
 	igt_info("PSR status:\n%s\n", buf);
 }
 
+void drrs_set(unsigned int val)
+{
+	char buf[2];
+
+	if (!drrs.can_test)
+		return;
+
+	igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val);
+	snprintf(buf, sizeof(buf), "%d", val);
+	debugfs_write("i915_drrs_ctl", buf);
+}
+
+static bool is_drrs_high(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS_HIGH_RR");
+}
+
+static bool is_drrs_low(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS_LOW_RR");
+}
+
+static bool is_drrs_supported(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+	return strstr(buf, "DRRS Supported: Yes");
+}
+
+static bool is_drrs_inactive(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+
+	if (strstr(buf, "DRRS_State: "))
+		return false;
+
+	return true;
+}
+
+static void drrs_print_status(void)
+{
+	char buf[MAX_DRRS_STATUS_BUF_LEN];
+
+	debugfs_read("i915_drrs_status", buf);
+	igt_info("DRRS STATUS :\n%s\n", buf);
+}
+
 static struct timespec fbc_get_last_action(void)
 {
 	struct timespec ret = { 0, 0 };
@@ -935,10 +1006,17 @@ static bool psr_wait_until_enabled(void)
 	return igt_wait(psr_is_enabled(), 5000, 1);
 }
 
+static bool drrs_wait_until_rr_switch_to_low(void)
+{
+	return igt_wait(is_drrs_low(), 5000, 1);
+}
+
 #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
 #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
 #define psr_enable() igt_set_module_param_int("enable_psr", 1)
 #define psr_disable() igt_set_module_param_int("enable_psr", 0)
+#define drrs_enable()	drrs_set(1)
+#define drrs_disable()	drrs_set(0)
 
 static void get_sink_crc(sink_crc_t *crc, bool mandatory)
 {
@@ -1184,6 +1262,7 @@ static void disable_features(const struct test_mode *t)
 
 	fbc_disable();
 	psr_disable();
+	drrs_disable();
 }
 
 static void *busy_thread_func(void *data)
@@ -1577,6 +1656,22 @@ static void teardown_psr(void)
 {
 }
 
+static void setup_drrs(void)
+{
+	if (get_connector(prim_mode_params.connector_id)->connector_type !=
+	    DRM_MODE_CONNECTOR_eDP) {
+		igt_info("Can't test DRRS: no usable eDP screen.\n");
+		return;
+	}
+
+	if (!is_drrs_supported()) {
+		igt_info("Can't test DRRS: Not supported.\n");
+		return;
+	}
+
+	drrs.can_test = true;
+}
+
 static void setup_environment(void)
 {
 	setup_drm();
@@ -1584,6 +1679,7 @@ static void setup_environment(void)
 
 	setup_fbc();
 	setup_psr();
+	setup_drrs();
 
 	setup_crcs();
 }
@@ -1662,6 +1758,11 @@ static void do_flush(const struct test_mode *t)
 #define ASSERT_PSR_ENABLED		(1 << 6)
 #define ASSERT_PSR_DISABLED		(1 << 7)
 
+#define DRRS_ASSERT_FLAGS		(7 << 8)
+#define ASSERT_DRRS_HIGH		(1 << 8)
+#define ASSERT_DRRS_LOW		(1 << 9)
+#define ASSERT_DRRS_INACTIVE		(1 << 10)
+
 static int adjust_assertion_flags(const struct test_mode *t, int flags)
 {
 	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
@@ -1669,12 +1770,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
 			flags |= ASSERT_FBC_ENABLED;
 		if (!(flags & ASSERT_PSR_DISABLED))
 			flags |= ASSERT_PSR_ENABLED;
+		if (!((flags & ASSERT_DRRS_LOW) ||
+		    (flags & ASSERT_DRRS_INACTIVE)))
+			flags |= ASSERT_DRRS_HIGH;
 	}
 
 	if ((t->feature & FEATURE_FBC) == 0)
 		flags &= ~FBC_ASSERT_FLAGS;
 	if ((t->feature & FEATURE_PSR) == 0)
 		flags &= ~PSR_ASSERT_FLAGS;
+	if ((t->feature & FEATURE_DRRS) == 0)
+		flags &= ~DRRS_ASSERT_FLAGS;
 
 	return flags;
 }
@@ -1706,6 +1812,23 @@ static void do_status_assertions(int flags)
 		return;
 	}
 
+	if (flags & ASSERT_DRRS_HIGH) {
+		if (!is_drrs_high()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS HIGH\n");
+		}
+	} else if (flags & ASSERT_DRRS_LOW) {
+		if (!drrs_wait_until_rr_switch_to_low()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS LOW\n");
+		}
+	} else if (flags & ASSERT_DRRS_INACTIVE) {
+		if (!is_drrs_inactive()) {
+			drrs_print_status();
+			igt_assert_f(false, "DRRS INACTIVE\n");
+		}
+	}
+
 	if (flags & ASSERT_FBC_ENABLED) {
 		igt_require(!fbc_not_enough_stolen());
 		igt_require(!fbc_stride_not_supported());
@@ -1833,6 +1956,8 @@ static void enable_features_for_test(const struct test_mode *t)
 		fbc_enable();
 	if (t->feature & FEATURE_PSR)
 		psr_enable();
+	if (t->feature & FEATURE_DRRS)
+		drrs_enable();
 }
 
 static void check_test_requirements(const struct test_mode *t)
@@ -1852,6 +1977,18 @@ static void check_test_requirements(const struct test_mode *t)
 			      "Can't test PSR without sink CRCs\n");
 	}
 
+	if (t->feature & FEATURE_DRRS)
+		igt_require_f(drrs.can_test,
+			      "Can't test DRRS with the current outputs\n");
+
+	/*
+	 * In kernel, When PSR is enabled, DRRS will be disabled. So If a test
+	 * case needs DRRS + PSR enabled, that will be skipped.
+	 */
+	igt_require_f(!((t->feature & FEATURE_PSR) &&
+		      (t->feature & FEATURE_DRRS)),
+		      "Can't test PSR and DRRS together\n");
+
 	if (opt.only_pipes != PIPE_COUNT)
 		igt_require(t->pipes == opt.only_pipes);
 }
@@ -1973,7 +2110,7 @@ static void rte_subtest(const struct test_mode *t)
 
 	unset_all_crtcs();
 	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
-		      DONT_ASSERT_CRC);
+		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
 
 	enable_prim_screen_and_wait(t);
 	set_cursor_for_test(t, &prim_mode_params);
@@ -2065,6 +2202,13 @@ static void draw_subtest(const struct test_mode *t)
 	if (op_disables_psr(t, t->method))
 		assertions |= ASSERT_PSR_DISABLED;
 
+	/*
+	 * On FBS_INDIVIDUAL, write to offscreen plane will not touch the
+	 * current frambuffer. Hence assert for DRRS_LOW.
+	 */
+	if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN))
+		assertions |= ASSERT_DRRS_LOW;
+
 	prepare_subtest(t, pattern);
 	target = pick_target(t, params);
 
@@ -2273,7 +2417,11 @@ static void slow_draw_subtest(const struct test_mode *t)
 		sleep(2);
 
 		update_wanted_crc(t, &pattern->crcs[t->format][r]);
-		do_assertions(0);
+
+		if (t->feature & FEATURE_DRRS)
+			do_assertions(ASSERT_DRRS_LOW);
+		else
+			do_assertions(0);
 	}
 }
 
@@ -2882,14 +3030,14 @@ static void suspend_subtest(const struct test_mode *t)
 	sleep(5);
 	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
 	sleep(5);
-	do_assertions(0);
+	do_assertions(ASSERT_DRRS_LOW);
 
 	unset_all_crtcs();
 	sleep(5);
 	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
 	sleep(5);
 	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
-		      DONT_ASSERT_CRC);
+		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
 
 	set_mode_for_params(params);
 	do_assertions(0);
@@ -3371,6 +3519,14 @@ static const char *feature_str(int feature)
 		return "psr";
 	case FEATURE_FBC | FEATURE_PSR:
 		return "fbcpsr";
+	case FEATURE_DRRS:
+		return "drrs";
+	case FEATURE_FBC | FEATURE_DRRS:
+		return "fbcdrrs";
+	case FEATURE_PSR | FEATURE_DRRS:
+		return "psrdrrs";
+	case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS:
+		return "fbcpsrdrrs";
 	default:
 		igt_assert(false);
 	}
@@ -3635,7 +3791,7 @@ int main(int argc, char *argv[])
 				tilingchange_subtest(&t);
 		}
 
-		if (t.feature & FEATURE_PSR)
+		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
 			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
 				slow_draw_subtest(&t);
 
-- 
1.9.1

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

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

* ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev8)
  2017-09-19 18:12     ` Rodrigo Vivi
                         ` (18 preceding siblings ...)
  2018-01-05 13:25       ` ✗ Fi.CI.IGT: failure " Patchwork
@ 2018-01-10 15:11       ` Patchwork
  2018-01-10 16:14       ` ✓ Fi.CI.IGT: " Patchwork
  20 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2018-01-10 15:11 UTC (permalink / raw)
  To: Lohith BS; +Cc: intel-gfx

== Series Details ==

Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev8)
URL   : https://patchwork.freedesktop.org/series/32888/
State : success

== Summary ==

IGT patchset tested on top of latest successful build
19c6c040b11d7a7068c66ae918a88c150243279b lib/igt_kms.c: Unconditionally include poll.h

with latest DRM-Tip kernel build CI_DRM_3619
4269b88bf52f drm-tip: 2018y-01m-10d-14h-03m-47s UTC integration manifest

Testlist changes:
+++ 570 lines
--- 0 lines

Test debugfs_test:
        Subgroup read_all_entries:
                dmesg-fail -> DMESG-WARN (fi-elk-e7500) fdo#103989
Test gem_exec_fence:
        Subgroup await-hang-default:
                dmesg-fail -> PASS       (fi-pnv-d510) fdo#104572
Test kms_pipe_crc_basic:
        Subgroup suspend-read-crc-pipe-a:
                pass       -> DMESG-WARN (fi-kbl-r) fdo#104172 +1

fdo#103989 https://bugs.freedesktop.org/show_bug.cgi?id=103989
fdo#104572 https://bugs.freedesktop.org/show_bug.cgi?id=104572
fdo#104172 https://bugs.freedesktop.org/show_bug.cgi?id=104172

fi-bdw-5557u     total:288  pass:267  dwarn:0   dfail:0   fail:0   skip:21  time:423s
fi-blb-e6850     total:288  pass:223  dwarn:1   dfail:0   fail:0   skip:64  time:381s
fi-bsw-n3050     total:288  pass:242  dwarn:0   dfail:0   fail:0   skip:46  time:500s
fi-bwr-2160      total:288  pass:183  dwarn:0   dfail:0   fail:0   skip:105 time:280s
fi-bxt-dsi       total:288  pass:258  dwarn:0   dfail:0   fail:0   skip:30  time:490s
fi-bxt-j4205     total:288  pass:259  dwarn:0   dfail:0   fail:0   skip:29  time:493s
fi-byt-j1900     total:288  pass:253  dwarn:0   dfail:0   fail:0   skip:35  time:471s
fi-byt-n2820     total:288  pass:249  dwarn:0   dfail:0   fail:0   skip:39  time:459s
fi-elk-e7500     total:224  pass:168  dwarn:10  dfail:0   fail:0   skip:45 
fi-gdg-551       total:288  pass:179  dwarn:0   dfail:0   fail:1   skip:108 time:277s
fi-glk-1         total:288  pass:260  dwarn:0   dfail:0   fail:0   skip:28  time:514s
fi-hsw-4770      total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:391s
fi-hsw-4770r     total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:405s
fi-ilk-650       total:288  pass:228  dwarn:0   dfail:0   fail:0   skip:60  time:411s
fi-ivb-3520m     total:288  pass:259  dwarn:0   dfail:0   fail:0   skip:29  time:460s
fi-ivb-3770      total:288  pass:255  dwarn:0   dfail:0   fail:0   skip:33  time:415s
fi-kbl-7500u     total:288  pass:263  dwarn:1   dfail:0   fail:0   skip:24  time:468s
fi-kbl-7560u     total:288  pass:269  dwarn:0   dfail:0   fail:0   skip:19  time:502s
fi-kbl-7567u     total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:453s
fi-kbl-r         total:288  pass:260  dwarn:1   dfail:0   fail:0   skip:27  time:502s
fi-pnv-d510      total:288  pass:222  dwarn:1   dfail:0   fail:0   skip:65  time:579s
fi-skl-6260u     total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:432s
fi-skl-6600u     total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:510s
fi-skl-6700hq    total:288  pass:262  dwarn:0   dfail:0   fail:0   skip:26  time:526s
fi-skl-6700k2    total:288  pass:264  dwarn:0   dfail:0   fail:0   skip:24  time:498s
fi-skl-6770hq    total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:504s
fi-skl-gvtdvm    total:288  pass:265  dwarn:0   dfail:0   fail:0   skip:23  time:432s
fi-snb-2520m     total:288  pass:248  dwarn:0   dfail:0   fail:0   skip:40  time:537s
fi-snb-2600      total:288  pass:248  dwarn:0   dfail:0   fail:0   skip:40  time:402s
Blacklisted hosts:
fi-cfl-s2        total:288  pass:262  dwarn:0   dfail:0   fail:0   skip:26  time:566s
fi-glk-dsi       total:288  pass:258  dwarn:0   dfail:0   fail:0   skip:30  time:471s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_765/issues.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* ✓ Fi.CI.IGT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev8)
  2017-09-19 18:12     ` Rodrigo Vivi
                         ` (19 preceding siblings ...)
  2018-01-10 15:11       ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev8) Patchwork
@ 2018-01-10 16:14       ` Patchwork
  20 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2018-01-10 16:14 UTC (permalink / raw)
  To: Lohith BS; +Cc: intel-gfx

== Series Details ==

Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev8)
URL   : https://patchwork.freedesktop.org/series/32888/
State : success

== Summary ==

Test gem_tiled_swapping:
        Subgroup non-threaded:
                pass       -> DMESG-FAIL (shard-snb) fdo#104218
Test gem_eio:
        Subgroup in-flight-contexts:
                pass       -> DMESG-WARN (shard-snb) fdo#104058
Test perf:
        Subgroup polling:
                fail       -> PASS       (shard-hsw) fdo#102252
Test kms_flip:
        Subgroup blocking-wf_vblank:
                fail       -> PASS       (shard-hsw) fdo#103928

fdo#104218 https://bugs.freedesktop.org/show_bug.cgi?id=104218
fdo#104058 https://bugs.freedesktop.org/show_bug.cgi?id=104058
fdo#102252 https://bugs.freedesktop.org/show_bug.cgi?id=102252
fdo#103928 https://bugs.freedesktop.org/show_bug.cgi?id=103928

shard-hsw        total:3200 pass:1489 dwarn:1   dfail:0   fail:10  skip:1699 time:8951s
shard-snb        total:3200 pass:1269 dwarn:2   dfail:1   fail:12  skip:1915 time:7894s
Blacklisted hosts:
shard-apl        total:3283 pass:1683 dwarn:1   dfail:0   fail:27  skip:1571 time:13748s
shard-kbl        total:3223 pass:1765 dwarn:7   dfail:2   fail:28  skip:1420 time:10381s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_765/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH i-g-t v13] tests/kms_frontbuffer_tracking: Including DRRS test coverage
  2018-01-10 14:47                       ` [PATCH i-g-t v13] " Lohith BS
@ 2018-01-10 18:15                         ` Rodrigo Vivi
  2018-01-11  5:27                           ` Ramalingam C
  2018-01-11  8:40                         ` Daniel Vetter
  2018-01-17  5:05                         ` Ramalingam C
  2 siblings, 1 reply; 59+ messages in thread
From: Rodrigo Vivi @ 2018-01-10 18:15 UTC (permalink / raw)
  To: Lohith BS
  Cc: paulo.r.zanoni, jari.tahvanainen, daniel.vetter, intel-gfx,
	ankit.k.nautiyal

On Wed, Jan 10, 2018 at 02:47:00PM +0000, Lohith BS wrote:
> Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's
> refresh rate to the lowest vrefresh supported by panel, when frame is
> not flipped for more than a Sec.
> 
> In kernel, DRRS uses the front buffer tracking infrastructure.
> Hence DRRS test coverage is added along with other frontbuffer tracking
> based features such as FBC and PSR tests.
> 
> Here, we are testing DRRS with other features in all possible
> combinations, in all required test cases, to capture any possible
> regression.
> 
> v2: Addressed the comments and suggestions from Vlad, Marius.
>     The signoff details from the earlier work are also included.
> 
> v3: Modified vblank rate calculation by using reply-sequence,
>     provided by drmWaitVBlank, as suggested by Chris Wilson.
> 
> v4: As suggested from Chris Wilson and Daniel Vetter
>     1) Avoided using pthread for calculating vblank refresh rate,
>        instead used drmWaitVBlank reply sequence.
>     2) Avoided using kernel-specific info like transitional delays,
>        instead polling mechanism with timeout is used.
>     3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
>        instead of having a separate test.
> 
> v5: This patch adds DRRS as a new feature in the
>     kms_frontbuffer_tracking IGT.
>     DRRS switch to lower vrefresh rate is tested at slow-draw subtest.
> 
>     Note:
>     1) Currently kernel doesn't have support to enable and disable
>        the DRRS feature dynamically(as in case of PSR). Hence if the
>        panel supports DRRS it will be enabled by default.
> 
>     This is in continuation of last patch
> 	"https://patchwork.freedesktop.org/patch/162726/"
> 
> v6: This patch adds runtime enable and disable feature for testing DRRS
> 
> v7: This patch adds runtime enable and disable feature for testing DRRS
>     through debugfs entry "i915_drrs_ctl".
> 
> v8: Commit message is updated to reflect current implementation.
> 
> v9: Addressed Paulo Zanoni comments.
>     Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL.
> 
> v10: Corrected DRRS state expectation in suspend related subtests.
> 
> v11: Removing the global flag is_psr_drrs_combo [Rodrigo].
> 
> v12: Rewriting the DRRS inactive deduction [Rodrigo].
> 
> v13: En/Dis-able DRRS only when DRRS is capable on the setup.
> 
> Signed-off-by: Lohith BS <lohith.bs@intel.com>
> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
> ---
>  tests/kms_frontbuffer_tracking.c | 172 +++++++++++++++++++++++++++++++++++++--
>  1 file changed, 164 insertions(+), 8 deletions(-)
> 
> diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
> index 1601cab..6b2299b 100644
> --- a/tests/kms_frontbuffer_tracking.c
> +++ b/tests/kms_frontbuffer_tracking.c
> @@ -34,7 +34,7 @@
>  
>  
>  IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
> -		     "its related features: FBC and PSR");
> +		     "its related features: FBC, PSR and DRRS");
>  
>  /*
>   * One of the aspects of this test is that, for every subtest, we try different
> @@ -105,8 +105,9 @@ struct test_mode {
>  		FEATURE_NONE  = 0,
>  		FEATURE_FBC   = 1,
>  		FEATURE_PSR   = 2,
> -		FEATURE_COUNT = 4,
> -		FEATURE_DEFAULT = 4,
> +		FEATURE_DRRS  = 4,
> +		FEATURE_COUNT = 8,
> +		FEATURE_DEFAULT = 8,
>  	} feature;
>  
>  	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
> @@ -182,6 +183,13 @@ struct {
>  	.can_test = false,
>  };
>  
> +#define MAX_DRRS_STATUS_BUF_LEN 256
> +
> +struct {
> +	bool can_test;
> +} drrs = {
> +	.can_test = false,
> +};
>  
>  #define SINK_CRC_SIZE 12
>  typedef struct {
> @@ -790,7 +798,14 @@ static void __debugfs_read(const char *param, char *buf, int len)
>  	buf[len] = '\0';
>  }
>  
> +static void __debugfs_write(const char *param, char *buf, int len)
> +{
> +	igt_assert_eq(igt_sysfs_write(drm.debugfs, param, buf, len - 1),
> +		      len - 1);
> +}
> +
>  #define debugfs_read(p, arr) __debugfs_read(p, arr, sizeof(arr))
> +#define debugfs_write(p, arr) __debugfs_write(p, arr, sizeof(arr))
>  
>  static bool fbc_is_enabled(void)
>  {
> @@ -825,6 +840,62 @@ static void psr_print_status(void)
>  	igt_info("PSR status:\n%s\n", buf);
>  }
>  
> +void drrs_set(unsigned int val)
> +{
> +	char buf[2];
> +
> +	if (!drrs.can_test)
> +		return;

Can you please elaborate more about this solution here?

I couldn't find the logs anymore. What was the issue that CI caught?

What happens if a regular user on HSW with no DRRS monitor (same configuration as CI)
write to this debugfs enabling DRRS?

What I wonder is if this is the right place for this solution or on the
kernel side.

Also if it is a testcase I wonder if it shouldn't have a skip handling
somewhere instead of a blind return....

Thanks,
Rodrigo.

> +
> +	igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val);
> +	snprintf(buf, sizeof(buf), "%d", val);
> +	debugfs_write("i915_drrs_ctl", buf);
> +}
> +
> +static bool is_drrs_high(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS_HIGH_RR");
> +}
> +
> +static bool is_drrs_low(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS_LOW_RR");
> +}
> +
> +static bool is_drrs_supported(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS Supported: Yes");
> +}
> +
> +static bool is_drrs_inactive(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +
> +	if (strstr(buf, "DRRS_State: "))
> +		return false;
> +
> +	return true;
> +}
> +
> +static void drrs_print_status(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	igt_info("DRRS STATUS :\n%s\n", buf);
> +}
> +
>  static struct timespec fbc_get_last_action(void)
>  {
>  	struct timespec ret = { 0, 0 };
> @@ -935,10 +1006,17 @@ static bool psr_wait_until_enabled(void)
>  	return igt_wait(psr_is_enabled(), 5000, 1);
>  }
>  
> +static bool drrs_wait_until_rr_switch_to_low(void)
> +{
> +	return igt_wait(is_drrs_low(), 5000, 1);
> +}
> +
>  #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
>  #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
>  #define psr_enable() igt_set_module_param_int("enable_psr", 1)
>  #define psr_disable() igt_set_module_param_int("enable_psr", 0)
> +#define drrs_enable()	drrs_set(1)
> +#define drrs_disable()	drrs_set(0)
>  
>  static void get_sink_crc(sink_crc_t *crc, bool mandatory)
>  {
> @@ -1184,6 +1262,7 @@ static void disable_features(const struct test_mode *t)
>  
>  	fbc_disable();
>  	psr_disable();
> +	drrs_disable();
>  }
>  
>  static void *busy_thread_func(void *data)
> @@ -1577,6 +1656,22 @@ static void teardown_psr(void)
>  {
>  }
>  
> +static void setup_drrs(void)
> +{
> +	if (get_connector(prim_mode_params.connector_id)->connector_type !=
> +	    DRM_MODE_CONNECTOR_eDP) {
> +		igt_info("Can't test DRRS: no usable eDP screen.\n");
> +		return;
> +	}
> +
> +	if (!is_drrs_supported()) {
> +		igt_info("Can't test DRRS: Not supported.\n");
> +		return;
> +	}
> +
> +	drrs.can_test = true;
> +}
> +
>  static void setup_environment(void)
>  {
>  	setup_drm();
> @@ -1584,6 +1679,7 @@ static void setup_environment(void)
>  
>  	setup_fbc();
>  	setup_psr();
> +	setup_drrs();
>  
>  	setup_crcs();
>  }
> @@ -1662,6 +1758,11 @@ static void do_flush(const struct test_mode *t)
>  #define ASSERT_PSR_ENABLED		(1 << 6)
>  #define ASSERT_PSR_DISABLED		(1 << 7)
>  
> +#define DRRS_ASSERT_FLAGS		(7 << 8)
> +#define ASSERT_DRRS_HIGH		(1 << 8)
> +#define ASSERT_DRRS_LOW		(1 << 9)
> +#define ASSERT_DRRS_INACTIVE		(1 << 10)
> +
>  static int adjust_assertion_flags(const struct test_mode *t, int flags)
>  {
>  	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
> @@ -1669,12 +1770,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
>  			flags |= ASSERT_FBC_ENABLED;
>  		if (!(flags & ASSERT_PSR_DISABLED))
>  			flags |= ASSERT_PSR_ENABLED;
> +		if (!((flags & ASSERT_DRRS_LOW) ||
> +		    (flags & ASSERT_DRRS_INACTIVE)))
> +			flags |= ASSERT_DRRS_HIGH;
>  	}
>  
>  	if ((t->feature & FEATURE_FBC) == 0)
>  		flags &= ~FBC_ASSERT_FLAGS;
>  	if ((t->feature & FEATURE_PSR) == 0)
>  		flags &= ~PSR_ASSERT_FLAGS;
> +	if ((t->feature & FEATURE_DRRS) == 0)
> +		flags &= ~DRRS_ASSERT_FLAGS;
>  
>  	return flags;
>  }
> @@ -1706,6 +1812,23 @@ static void do_status_assertions(int flags)
>  		return;
>  	}
>  
> +	if (flags & ASSERT_DRRS_HIGH) {
> +		if (!is_drrs_high()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS HIGH\n");
> +		}
> +	} else if (flags & ASSERT_DRRS_LOW) {
> +		if (!drrs_wait_until_rr_switch_to_low()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS LOW\n");
> +		}
> +	} else if (flags & ASSERT_DRRS_INACTIVE) {
> +		if (!is_drrs_inactive()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS INACTIVE\n");
> +		}
> +	}
> +
>  	if (flags & ASSERT_FBC_ENABLED) {
>  		igt_require(!fbc_not_enough_stolen());
>  		igt_require(!fbc_stride_not_supported());
> @@ -1833,6 +1956,8 @@ static void enable_features_for_test(const struct test_mode *t)
>  		fbc_enable();
>  	if (t->feature & FEATURE_PSR)
>  		psr_enable();
> +	if (t->feature & FEATURE_DRRS)
> +		drrs_enable();
>  }
>  
>  static void check_test_requirements(const struct test_mode *t)
> @@ -1852,6 +1977,18 @@ static void check_test_requirements(const struct test_mode *t)
>  			      "Can't test PSR without sink CRCs\n");
>  	}
>  
> +	if (t->feature & FEATURE_DRRS)
> +		igt_require_f(drrs.can_test,
> +			      "Can't test DRRS with the current outputs\n");
> +
> +	/*
> +	 * In kernel, When PSR is enabled, DRRS will be disabled. So If a test
> +	 * case needs DRRS + PSR enabled, that will be skipped.
> +	 */
> +	igt_require_f(!((t->feature & FEATURE_PSR) &&
> +		      (t->feature & FEATURE_DRRS)),
> +		      "Can't test PSR and DRRS together\n");
> +
>  	if (opt.only_pipes != PIPE_COUNT)
>  		igt_require(t->pipes == opt.only_pipes);
>  }
> @@ -1973,7 +2110,7 @@ static void rte_subtest(const struct test_mode *t)
>  
>  	unset_all_crtcs();
>  	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
> -		      DONT_ASSERT_CRC);
> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>  
>  	enable_prim_screen_and_wait(t);
>  	set_cursor_for_test(t, &prim_mode_params);
> @@ -2065,6 +2202,13 @@ static void draw_subtest(const struct test_mode *t)
>  	if (op_disables_psr(t, t->method))
>  		assertions |= ASSERT_PSR_DISABLED;
>  
> +	/*
> +	 * On FBS_INDIVIDUAL, write to offscreen plane will not touch the
> +	 * current frambuffer. Hence assert for DRRS_LOW.
> +	 */
> +	if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN))
> +		assertions |= ASSERT_DRRS_LOW;
> +
>  	prepare_subtest(t, pattern);
>  	target = pick_target(t, params);
>  
> @@ -2273,7 +2417,11 @@ static void slow_draw_subtest(const struct test_mode *t)
>  		sleep(2);
>  
>  		update_wanted_crc(t, &pattern->crcs[t->format][r]);
> -		do_assertions(0);
> +
> +		if (t->feature & FEATURE_DRRS)
> +			do_assertions(ASSERT_DRRS_LOW);
> +		else
> +			do_assertions(0);
>  	}
>  }
>  
> @@ -2882,14 +3030,14 @@ static void suspend_subtest(const struct test_mode *t)
>  	sleep(5);
>  	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>  	sleep(5);
> -	do_assertions(0);
> +	do_assertions(ASSERT_DRRS_LOW);
>  
>  	unset_all_crtcs();
>  	sleep(5);
>  	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>  	sleep(5);
>  	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
> -		      DONT_ASSERT_CRC);
> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>  
>  	set_mode_for_params(params);
>  	do_assertions(0);
> @@ -3371,6 +3519,14 @@ static const char *feature_str(int feature)
>  		return "psr";
>  	case FEATURE_FBC | FEATURE_PSR:
>  		return "fbcpsr";
> +	case FEATURE_DRRS:
> +		return "drrs";
> +	case FEATURE_FBC | FEATURE_DRRS:
> +		return "fbcdrrs";
> +	case FEATURE_PSR | FEATURE_DRRS:
> +		return "psrdrrs";
> +	case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS:
> +		return "fbcpsrdrrs";
>  	default:
>  		igt_assert(false);
>  	}
> @@ -3635,7 +3791,7 @@ int main(int argc, char *argv[])
>  				tilingchange_subtest(&t);
>  		}
>  
> -		if (t.feature & FEATURE_PSR)
> +		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
>  			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
>  				slow_draw_subtest(&t);
>  
> -- 
> 1.9.1
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH i-g-t v13] tests/kms_frontbuffer_tracking: Including DRRS test coverage
  2018-01-10 18:15                         ` Rodrigo Vivi
@ 2018-01-11  5:27                           ` Ramalingam C
  2018-01-11 20:22                             ` Rodrigo Vivi
  0 siblings, 1 reply; 59+ messages in thread
From: Ramalingam C @ 2018-01-11  5:27 UTC (permalink / raw)
  To: intel-gfx, Rodrigo Vivi
  Cc: Daniel Vetter, Nautiyal, Ankit K, Paulo Zanoni, jari.tahvanainen


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



On Wednesday 10 January 2018 11:45 PM, Rodrigo Vivi wrote:
> On Wed, Jan 10, 2018 at 02:47:00PM +0000, Lohith BS wrote:
>> Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's
>> refresh rate to the lowest vrefresh supported by panel, when frame is
>> not flipped for more than a Sec.
>>
>> In kernel, DRRS uses the front buffer tracking infrastructure.
>> Hence DRRS test coverage is added along with other frontbuffer tracking
>> based features such as FBC and PSR tests.
>>
>> Here, we are testing DRRS with other features in all possible
>> combinations, in all required test cases, to capture any possible
>> regression.
>>
>> v2: Addressed the comments and suggestions from Vlad, Marius.
>>      The signoff details from the earlier work are also included.
>>
>> v3: Modified vblank rate calculation by using reply-sequence,
>>      provided by drmWaitVBlank, as suggested by Chris Wilson.
>>
>> v4: As suggested from Chris Wilson and Daniel Vetter
>>      1) Avoided using pthread for calculating vblank refresh rate,
>>         instead used drmWaitVBlank reply sequence.
>>      2) Avoided using kernel-specific info like transitional delays,
>>         instead polling mechanism with timeout is used.
>>      3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
>>         instead of having a separate test.
>>
>> v5: This patch adds DRRS as a new feature in the
>>      kms_frontbuffer_tracking IGT.
>>      DRRS switch to lower vrefresh rate is tested at slow-draw subtest.
>>
>>      Note:
>>      1) Currently kernel doesn't have support to enable and disable
>>         the DRRS feature dynamically(as in case of PSR). Hence if the
>>         panel supports DRRS it will be enabled by default.
>>
>>      This is in continuation of last patch
>> 	"https://patchwork.freedesktop.org/patch/162726/"
>>
>> v6: This patch adds runtime enable and disable feature for testing DRRS
>>
>> v7: This patch adds runtime enable and disable feature for testing DRRS
>>      through debugfs entry "i915_drrs_ctl".
>>
>> v8: Commit message is updated to reflect current implementation.
>>
>> v9: Addressed Paulo Zanoni comments.
>>      Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL.
>>
>> v10: Corrected DRRS state expectation in suspend related subtests.
>>
>> v11: Removing the global flag is_psr_drrs_combo [Rodrigo].
>>
>> v12: Rewriting the DRRS inactive deduction [Rodrigo].
>>
>> v13: En/Dis-able DRRS only when DRRS is capable on the setup.
>>
>> Signed-off-by: Lohith BS <lohith.bs@intel.com>
>> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
>> ---
>>   tests/kms_frontbuffer_tracking.c | 172 +++++++++++++++++++++++++++++++++++++--
>>   1 file changed, 164 insertions(+), 8 deletions(-)
>>
>> diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
>> index 1601cab..6b2299b 100644
>> --- a/tests/kms_frontbuffer_tracking.c
>> +++ b/tests/kms_frontbuffer_tracking.c
>> @@ -34,7 +34,7 @@
>>   
>>   
>>   IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
>> -		     "its related features: FBC and PSR");
>> +		     "its related features: FBC, PSR and DRRS");
>>   
>>   /*
>>    * One of the aspects of this test is that, for every subtest, we try different
>> @@ -105,8 +105,9 @@ struct test_mode {
>>   		FEATURE_NONE  = 0,
>>   		FEATURE_FBC   = 1,
>>   		FEATURE_PSR   = 2,
>> -		FEATURE_COUNT = 4,
>> -		FEATURE_DEFAULT = 4,
>> +		FEATURE_DRRS  = 4,
>> +		FEATURE_COUNT = 8,
>> +		FEATURE_DEFAULT = 8,
>>   	} feature;
>>   
>>   	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
>> @@ -182,6 +183,13 @@ struct {
>>   	.can_test = false,
>>   };
>>   
>> +#define MAX_DRRS_STATUS_BUF_LEN 256
>> +
>> +struct {
>> +	bool can_test;
>> +} drrs = {
>> +	.can_test = false,
>> +};
>>   
>>   #define SINK_CRC_SIZE 12
>>   typedef struct {
>> @@ -790,7 +798,14 @@ static void __debugfs_read(const char *param, char *buf, int len)
>>   	buf[len] = '\0';
>>   }
>>   
>> +static void __debugfs_write(const char *param, char *buf, int len)
>> +{
>> +	igt_assert_eq(igt_sysfs_write(drm.debugfs, param, buf, len - 1),
>> +		      len - 1);
>> +}
>> +
>>   #define debugfs_read(p, arr) __debugfs_read(p, arr, sizeof(arr))
>> +#define debugfs_write(p, arr) __debugfs_write(p, arr, sizeof(arr))
>>   
>>   static bool fbc_is_enabled(void)
>>   {
>> @@ -825,6 +840,62 @@ static void psr_print_status(void)
>>   	igt_info("PSR status:\n%s\n", buf);
>>   }
>>   
>> +void drrs_set(unsigned int val)
>> +{
>> +	char buf[2];
>> +
>> +	if (!drrs.can_test)
>> +		return;
> Can you please elaborate more about this solution here?
>
> I couldn't find the logs anymore. What was the issue that CI caught?

CI failure were caused due to two reasons:

  * Error from kernel on debugfs write when the platform doesn't support
    DRRS (<gen7).

             This can be addressed either from kernel by returning 
success from i915_drrs_ctl_set instead of -ENODEV for <gen7,
             or by not En/Disable the drrs feature when you already knew 
that feature is not supported.

  * Non Availability of debugfs_fd for debugfs write for DRRS when eDP
    panel was not there.

             This is handled by adding debugfs_write. Which will open 
and close the file as and when it is required using igt_sysfs_write.
             Similar to already existing debugfs_read.
>
> What happens if a regular user on HSW with no DRRS monitor (same configuration as CI)
> write to this debugfs enabling DRRS?

Basically this debugfs writein kernel
      on >=gen7
             for drrs enable req: will enable drrs if there is any DRRS 
capable eDP panel.
             for drrs disable req: will disable drrs if there is any 
DRRS capable eDP panel in enabled state.
     on <gen7
             returns -ENODEV. Not sure whether we should just skip all 
operations and return success on <gen7 also.

This patch skips any write into the drrs ctrl debugfs.
>
> What I wonder is if this is the right place for this solution or on the
> kernel side.
>
> Also if it is a testcase I wonder if it shouldn't have a skip handling
> somewhere instead of a blind return....
In this IGT before every subtest, all the features are disabled and only 
the features required for that subtest is enabled.
So we though its good to validate the en/Disable call at the 
implementation of drrs_set than at calling place. Please suggest if you 
think otherway.

-Ram
>
> Thanks,
> Rodrigo.
>
>> +
>> +	igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val);
>> +	snprintf(buf, sizeof(buf), "%d", val);
>> +	debugfs_write("i915_drrs_ctl", buf);
>> +}
>> +
>> +static bool is_drrs_high(void)
>> +{
>> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +	return strstr(buf, "DRRS_HIGH_RR");
>> +}
>> +
>> +static bool is_drrs_low(void)
>> +{
>> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +	return strstr(buf, "DRRS_LOW_RR");
>> +}
>> +
>> +static bool is_drrs_supported(void)
>> +{
>> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +	return strstr(buf, "DRRS Supported: Yes");
>> +}
>> +
>> +static bool is_drrs_inactive(void)
>> +{
>> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +
>> +	if (strstr(buf, "DRRS_State: "))
>> +		return false;
>> +
>> +	return true;
>> +}
>> +
>> +static void drrs_print_status(void)
>> +{
>> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>> +
>> +	debugfs_read("i915_drrs_status", buf);
>> +	igt_info("DRRS STATUS :\n%s\n", buf);
>> +}
>> +
>>   static struct timespec fbc_get_last_action(void)
>>   {
>>   	struct timespec ret = { 0, 0 };
>> @@ -935,10 +1006,17 @@ static bool psr_wait_until_enabled(void)
>>   	return igt_wait(psr_is_enabled(), 5000, 1);
>>   }
>>   
>> +static bool drrs_wait_until_rr_switch_to_low(void)
>> +{
>> +	return igt_wait(is_drrs_low(), 5000, 1);
>> +}
>> +
>>   #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
>>   #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
>>   #define psr_enable() igt_set_module_param_int("enable_psr", 1)
>>   #define psr_disable() igt_set_module_param_int("enable_psr", 0)
>> +#define drrs_enable()	drrs_set(1)
>> +#define drrs_disable()	drrs_set(0)
>>   
>>   static void get_sink_crc(sink_crc_t *crc, bool mandatory)
>>   {
>> @@ -1184,6 +1262,7 @@ static void disable_features(const struct test_mode *t)
>>   
>>   	fbc_disable();
>>   	psr_disable();
>> +	drrs_disable();
>>   }
>>   
>>   static void *busy_thread_func(void *data)
>> @@ -1577,6 +1656,22 @@ static void teardown_psr(void)
>>   {
>>   }
>>   
>> +static void setup_drrs(void)
>> +{
>> +	if (get_connector(prim_mode_params.connector_id)->connector_type !=
>> +	    DRM_MODE_CONNECTOR_eDP) {
>> +		igt_info("Can't test DRRS: no usable eDP screen.\n");
>> +		return;
>> +	}
>> +
>> +	if (!is_drrs_supported()) {
>> +		igt_info("Can't test DRRS: Not supported.\n");
>> +		return;
>> +	}
>> +
>> +	drrs.can_test = true;
>> +}
>> +
>>   static void setup_environment(void)
>>   {
>>   	setup_drm();
>> @@ -1584,6 +1679,7 @@ static void setup_environment(void)
>>   
>>   	setup_fbc();
>>   	setup_psr();
>> +	setup_drrs();
>>   
>>   	setup_crcs();
>>   }
>> @@ -1662,6 +1758,11 @@ static void do_flush(const struct test_mode *t)
>>   #define ASSERT_PSR_ENABLED		(1 << 6)
>>   #define ASSERT_PSR_DISABLED		(1 << 7)
>>   
>> +#define DRRS_ASSERT_FLAGS		(7 << 8)
>> +#define ASSERT_DRRS_HIGH		(1 << 8)
>> +#define ASSERT_DRRS_LOW		(1 << 9)
>> +#define ASSERT_DRRS_INACTIVE		(1 << 10)
>> +
>>   static int adjust_assertion_flags(const struct test_mode *t, int flags)
>>   {
>>   	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
>> @@ -1669,12 +1770,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
>>   			flags |= ASSERT_FBC_ENABLED;
>>   		if (!(flags & ASSERT_PSR_DISABLED))
>>   			flags |= ASSERT_PSR_ENABLED;
>> +		if (!((flags & ASSERT_DRRS_LOW) ||
>> +		    (flags & ASSERT_DRRS_INACTIVE)))
>> +			flags |= ASSERT_DRRS_HIGH;
>>   	}
>>   
>>   	if ((t->feature & FEATURE_FBC) == 0)
>>   		flags &= ~FBC_ASSERT_FLAGS;
>>   	if ((t->feature & FEATURE_PSR) == 0)
>>   		flags &= ~PSR_ASSERT_FLAGS;
>> +	if ((t->feature & FEATURE_DRRS) == 0)
>> +		flags &= ~DRRS_ASSERT_FLAGS;
>>   
>>   	return flags;
>>   }
>> @@ -1706,6 +1812,23 @@ static void do_status_assertions(int flags)
>>   		return;
>>   	}
>>   
>> +	if (flags & ASSERT_DRRS_HIGH) {
>> +		if (!is_drrs_high()) {
>> +			drrs_print_status();
>> +			igt_assert_f(false, "DRRS HIGH\n");
>> +		}
>> +	} else if (flags & ASSERT_DRRS_LOW) {
>> +		if (!drrs_wait_until_rr_switch_to_low()) {
>> +			drrs_print_status();
>> +			igt_assert_f(false, "DRRS LOW\n");
>> +		}
>> +	} else if (flags & ASSERT_DRRS_INACTIVE) {
>> +		if (!is_drrs_inactive()) {
>> +			drrs_print_status();
>> +			igt_assert_f(false, "DRRS INACTIVE\n");
>> +		}
>> +	}
>> +
>>   	if (flags & ASSERT_FBC_ENABLED) {
>>   		igt_require(!fbc_not_enough_stolen());
>>   		igt_require(!fbc_stride_not_supported());
>> @@ -1833,6 +1956,8 @@ static void enable_features_for_test(const struct test_mode *t)
>>   		fbc_enable();
>>   	if (t->feature & FEATURE_PSR)
>>   		psr_enable();
>> +	if (t->feature & FEATURE_DRRS)
>> +		drrs_enable();
>>   }
>>   
>>   static void check_test_requirements(const struct test_mode *t)
>> @@ -1852,6 +1977,18 @@ static void check_test_requirements(const struct test_mode *t)
>>   			      "Can't test PSR without sink CRCs\n");
>>   	}
>>   
>> +	if (t->feature & FEATURE_DRRS)
>> +		igt_require_f(drrs.can_test,
>> +			      "Can't test DRRS with the current outputs\n");
>> +
>> +	/*
>> +	 * In kernel, When PSR is enabled, DRRS will be disabled. So If a test
>> +	 * case needs DRRS + PSR enabled, that will be skipped.
>> +	 */
>> +	igt_require_f(!((t->feature & FEATURE_PSR) &&
>> +		      (t->feature & FEATURE_DRRS)),
>> +		      "Can't test PSR and DRRS together\n");
>> +
>>   	if (opt.only_pipes != PIPE_COUNT)
>>   		igt_require(t->pipes == opt.only_pipes);
>>   }
>> @@ -1973,7 +2110,7 @@ static void rte_subtest(const struct test_mode *t)
>>   
>>   	unset_all_crtcs();
>>   	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
>> -		      DONT_ASSERT_CRC);
>> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>>   
>>   	enable_prim_screen_and_wait(t);
>>   	set_cursor_for_test(t, &prim_mode_params);
>> @@ -2065,6 +2202,13 @@ static void draw_subtest(const struct test_mode *t)
>>   	if (op_disables_psr(t, t->method))
>>   		assertions |= ASSERT_PSR_DISABLED;
>>   
>> +	/*
>> +	 * On FBS_INDIVIDUAL, write to offscreen plane will not touch the
>> +	 * current frambuffer. Hence assert for DRRS_LOW.
>> +	 */
>> +	if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN))
>> +		assertions |= ASSERT_DRRS_LOW;
>> +
>>   	prepare_subtest(t, pattern);
>>   	target = pick_target(t, params);
>>   
>> @@ -2273,7 +2417,11 @@ static void slow_draw_subtest(const struct test_mode *t)
>>   		sleep(2);
>>   
>>   		update_wanted_crc(t, &pattern->crcs[t->format][r]);
>> -		do_assertions(0);
>> +
>> +		if (t->feature & FEATURE_DRRS)
>> +			do_assertions(ASSERT_DRRS_LOW);
>> +		else
>> +			do_assertions(0);
>>   	}
>>   }
>>   
>> @@ -2882,14 +3030,14 @@ static void suspend_subtest(const struct test_mode *t)
>>   	sleep(5);
>>   	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>>   	sleep(5);
>> -	do_assertions(0);
>> +	do_assertions(ASSERT_DRRS_LOW);
>>   
>>   	unset_all_crtcs();
>>   	sleep(5);
>>   	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>>   	sleep(5);
>>   	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
>> -		      DONT_ASSERT_CRC);
>> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>>   
>>   	set_mode_for_params(params);
>>   	do_assertions(0);
>> @@ -3371,6 +3519,14 @@ static const char *feature_str(int feature)
>>   		return "psr";
>>   	case FEATURE_FBC | FEATURE_PSR:
>>   		return "fbcpsr";
>> +	case FEATURE_DRRS:
>> +		return "drrs";
>> +	case FEATURE_FBC | FEATURE_DRRS:
>> +		return "fbcdrrs";
>> +	case FEATURE_PSR | FEATURE_DRRS:
>> +		return "psrdrrs";
>> +	case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS:
>> +		return "fbcpsrdrrs";
>>   	default:
>>   		igt_assert(false);
>>   	}
>> @@ -3635,7 +3791,7 @@ int main(int argc, char *argv[])
>>   				tilingchange_subtest(&t);
>>   		}
>>   
>> -		if (t.feature & FEATURE_PSR)
>> +		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
>>   			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
>>   				slow_draw_subtest(&t);
>>   
>> -- 
>> 1.9.1
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx


[-- Attachment #1.2: Type: text/html, Size: 16058 bytes --]

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

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

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

* Re: [PATCH i-g-t v13] tests/kms_frontbuffer_tracking: Including DRRS test coverage
  2018-01-10 14:47                       ` [PATCH i-g-t v13] " Lohith BS
  2018-01-10 18:15                         ` Rodrigo Vivi
@ 2018-01-11  8:40                         ` Daniel Vetter
  2018-01-17  5:05                         ` Ramalingam C
  2 siblings, 0 replies; 59+ messages in thread
From: Daniel Vetter @ 2018-01-11  8:40 UTC (permalink / raw)
  To: Lohith BS
  Cc: paulo.r.zanoni, jari.tahvanainen, daniel.vetter, intel-gfx,
	rodrigo.vivi, ankit.k.nautiyal

On Wed, Jan 10, 2018 at 08:17:00PM +0530, Lohith BS wrote:
> Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's
> refresh rate to the lowest vrefresh supported by panel, when frame is
> not flipped for more than a Sec.
> 
> In kernel, DRRS uses the front buffer tracking infrastructure.
> Hence DRRS test coverage is added along with other frontbuffer tracking
> based features such as FBC and PSR tests.
> 
> Here, we are testing DRRS with other features in all possible
> combinations, in all required test cases, to capture any possible
> regression.
> 
> v2: Addressed the comments and suggestions from Vlad, Marius.
>     The signoff details from the earlier work are also included.
> 
> v3: Modified vblank rate calculation by using reply-sequence,
>     provided by drmWaitVBlank, as suggested by Chris Wilson.
> 
> v4: As suggested from Chris Wilson and Daniel Vetter
>     1) Avoided using pthread for calculating vblank refresh rate,
>        instead used drmWaitVBlank reply sequence.
>     2) Avoided using kernel-specific info like transitional delays,
>        instead polling mechanism with timeout is used.
>     3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
>        instead of having a separate test.
> 
> v5: This patch adds DRRS as a new feature in the
>     kms_frontbuffer_tracking IGT.
>     DRRS switch to lower vrefresh rate is tested at slow-draw subtest.
> 
>     Note:
>     1) Currently kernel doesn't have support to enable and disable
>        the DRRS feature dynamically(as in case of PSR). Hence if the
>        panel supports DRRS it will be enabled by default.
> 
>     This is in continuation of last patch
> 	"https://patchwork.freedesktop.org/patch/162726/"
> 
> v6: This patch adds runtime enable and disable feature for testing DRRS
> 
> v7: This patch adds runtime enable and disable feature for testing DRRS
>     through debugfs entry "i915_drrs_ctl".
> 
> v8: Commit message is updated to reflect current implementation.
> 
> v9: Addressed Paulo Zanoni comments.
>     Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL.
> 
> v10: Corrected DRRS state expectation in suspend related subtests.
> 
> v11: Removing the global flag is_psr_drrs_combo [Rodrigo].
> 
> v12: Rewriting the DRRS inactive deduction [Rodrigo].
> 
> v13: En/Dis-able DRRS only when DRRS is capable on the setup.
> 
> Signed-off-by: Lohith BS <lohith.bs@intel.com>
> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>

Btw pls resubmit new versions as a new thread, it tends to confuse
patchwork a bit if you in-reply-to forever. in-reply-to is kinda just to
update individual patches in a big patch series while it's being
discussed.

Thanks, Daniel
> ---
>  tests/kms_frontbuffer_tracking.c | 172 +++++++++++++++++++++++++++++++++++++--
>  1 file changed, 164 insertions(+), 8 deletions(-)
> 
> diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
> index 1601cab..6b2299b 100644
> --- a/tests/kms_frontbuffer_tracking.c
> +++ b/tests/kms_frontbuffer_tracking.c
> @@ -34,7 +34,7 @@
>  
>  
>  IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
> -		     "its related features: FBC and PSR");
> +		     "its related features: FBC, PSR and DRRS");
>  
>  /*
>   * One of the aspects of this test is that, for every subtest, we try different
> @@ -105,8 +105,9 @@ struct test_mode {
>  		FEATURE_NONE  = 0,
>  		FEATURE_FBC   = 1,
>  		FEATURE_PSR   = 2,
> -		FEATURE_COUNT = 4,
> -		FEATURE_DEFAULT = 4,
> +		FEATURE_DRRS  = 4,
> +		FEATURE_COUNT = 8,
> +		FEATURE_DEFAULT = 8,
>  	} feature;
>  
>  	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
> @@ -182,6 +183,13 @@ struct {
>  	.can_test = false,
>  };
>  
> +#define MAX_DRRS_STATUS_BUF_LEN 256
> +
> +struct {
> +	bool can_test;
> +} drrs = {
> +	.can_test = false,
> +};
>  
>  #define SINK_CRC_SIZE 12
>  typedef struct {
> @@ -790,7 +798,14 @@ static void __debugfs_read(const char *param, char *buf, int len)
>  	buf[len] = '\0';
>  }
>  
> +static void __debugfs_write(const char *param, char *buf, int len)
> +{
> +	igt_assert_eq(igt_sysfs_write(drm.debugfs, param, buf, len - 1),
> +		      len - 1);
> +}
> +
>  #define debugfs_read(p, arr) __debugfs_read(p, arr, sizeof(arr))
> +#define debugfs_write(p, arr) __debugfs_write(p, arr, sizeof(arr))
>  
>  static bool fbc_is_enabled(void)
>  {
> @@ -825,6 +840,62 @@ static void psr_print_status(void)
>  	igt_info("PSR status:\n%s\n", buf);
>  }
>  
> +void drrs_set(unsigned int val)
> +{
> +	char buf[2];
> +
> +	if (!drrs.can_test)
> +		return;
> +
> +	igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val);
> +	snprintf(buf, sizeof(buf), "%d", val);
> +	debugfs_write("i915_drrs_ctl", buf);
> +}
> +
> +static bool is_drrs_high(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS_HIGH_RR");
> +}
> +
> +static bool is_drrs_low(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS_LOW_RR");
> +}
> +
> +static bool is_drrs_supported(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	return strstr(buf, "DRRS Supported: Yes");
> +}
> +
> +static bool is_drrs_inactive(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +
> +	if (strstr(buf, "DRRS_State: "))
> +		return false;
> +
> +	return true;
> +}
> +
> +static void drrs_print_status(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
> +
> +	debugfs_read("i915_drrs_status", buf);
> +	igt_info("DRRS STATUS :\n%s\n", buf);
> +}
> +
>  static struct timespec fbc_get_last_action(void)
>  {
>  	struct timespec ret = { 0, 0 };
> @@ -935,10 +1006,17 @@ static bool psr_wait_until_enabled(void)
>  	return igt_wait(psr_is_enabled(), 5000, 1);
>  }
>  
> +static bool drrs_wait_until_rr_switch_to_low(void)
> +{
> +	return igt_wait(is_drrs_low(), 5000, 1);
> +}
> +
>  #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
>  #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
>  #define psr_enable() igt_set_module_param_int("enable_psr", 1)
>  #define psr_disable() igt_set_module_param_int("enable_psr", 0)
> +#define drrs_enable()	drrs_set(1)
> +#define drrs_disable()	drrs_set(0)
>  
>  static void get_sink_crc(sink_crc_t *crc, bool mandatory)
>  {
> @@ -1184,6 +1262,7 @@ static void disable_features(const struct test_mode *t)
>  
>  	fbc_disable();
>  	psr_disable();
> +	drrs_disable();
>  }
>  
>  static void *busy_thread_func(void *data)
> @@ -1577,6 +1656,22 @@ static void teardown_psr(void)
>  {
>  }
>  
> +static void setup_drrs(void)
> +{
> +	if (get_connector(prim_mode_params.connector_id)->connector_type !=
> +	    DRM_MODE_CONNECTOR_eDP) {
> +		igt_info("Can't test DRRS: no usable eDP screen.\n");
> +		return;
> +	}
> +
> +	if (!is_drrs_supported()) {
> +		igt_info("Can't test DRRS: Not supported.\n");
> +		return;
> +	}
> +
> +	drrs.can_test = true;
> +}
> +
>  static void setup_environment(void)
>  {
>  	setup_drm();
> @@ -1584,6 +1679,7 @@ static void setup_environment(void)
>  
>  	setup_fbc();
>  	setup_psr();
> +	setup_drrs();
>  
>  	setup_crcs();
>  }
> @@ -1662,6 +1758,11 @@ static void do_flush(const struct test_mode *t)
>  #define ASSERT_PSR_ENABLED		(1 << 6)
>  #define ASSERT_PSR_DISABLED		(1 << 7)
>  
> +#define DRRS_ASSERT_FLAGS		(7 << 8)
> +#define ASSERT_DRRS_HIGH		(1 << 8)
> +#define ASSERT_DRRS_LOW		(1 << 9)
> +#define ASSERT_DRRS_INACTIVE		(1 << 10)
> +
>  static int adjust_assertion_flags(const struct test_mode *t, int flags)
>  {
>  	if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
> @@ -1669,12 +1770,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
>  			flags |= ASSERT_FBC_ENABLED;
>  		if (!(flags & ASSERT_PSR_DISABLED))
>  			flags |= ASSERT_PSR_ENABLED;
> +		if (!((flags & ASSERT_DRRS_LOW) ||
> +		    (flags & ASSERT_DRRS_INACTIVE)))
> +			flags |= ASSERT_DRRS_HIGH;
>  	}
>  
>  	if ((t->feature & FEATURE_FBC) == 0)
>  		flags &= ~FBC_ASSERT_FLAGS;
>  	if ((t->feature & FEATURE_PSR) == 0)
>  		flags &= ~PSR_ASSERT_FLAGS;
> +	if ((t->feature & FEATURE_DRRS) == 0)
> +		flags &= ~DRRS_ASSERT_FLAGS;
>  
>  	return flags;
>  }
> @@ -1706,6 +1812,23 @@ static void do_status_assertions(int flags)
>  		return;
>  	}
>  
> +	if (flags & ASSERT_DRRS_HIGH) {
> +		if (!is_drrs_high()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS HIGH\n");
> +		}
> +	} else if (flags & ASSERT_DRRS_LOW) {
> +		if (!drrs_wait_until_rr_switch_to_low()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS LOW\n");
> +		}
> +	} else if (flags & ASSERT_DRRS_INACTIVE) {
> +		if (!is_drrs_inactive()) {
> +			drrs_print_status();
> +			igt_assert_f(false, "DRRS INACTIVE\n");
> +		}
> +	}
> +
>  	if (flags & ASSERT_FBC_ENABLED) {
>  		igt_require(!fbc_not_enough_stolen());
>  		igt_require(!fbc_stride_not_supported());
> @@ -1833,6 +1956,8 @@ static void enable_features_for_test(const struct test_mode *t)
>  		fbc_enable();
>  	if (t->feature & FEATURE_PSR)
>  		psr_enable();
> +	if (t->feature & FEATURE_DRRS)
> +		drrs_enable();
>  }
>  
>  static void check_test_requirements(const struct test_mode *t)
> @@ -1852,6 +1977,18 @@ static void check_test_requirements(const struct test_mode *t)
>  			      "Can't test PSR without sink CRCs\n");
>  	}
>  
> +	if (t->feature & FEATURE_DRRS)
> +		igt_require_f(drrs.can_test,
> +			      "Can't test DRRS with the current outputs\n");
> +
> +	/*
> +	 * In kernel, When PSR is enabled, DRRS will be disabled. So If a test
> +	 * case needs DRRS + PSR enabled, that will be skipped.
> +	 */
> +	igt_require_f(!((t->feature & FEATURE_PSR) &&
> +		      (t->feature & FEATURE_DRRS)),
> +		      "Can't test PSR and DRRS together\n");
> +
>  	if (opt.only_pipes != PIPE_COUNT)
>  		igt_require(t->pipes == opt.only_pipes);
>  }
> @@ -1973,7 +2110,7 @@ static void rte_subtest(const struct test_mode *t)
>  
>  	unset_all_crtcs();
>  	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
> -		      DONT_ASSERT_CRC);
> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>  
>  	enable_prim_screen_and_wait(t);
>  	set_cursor_for_test(t, &prim_mode_params);
> @@ -2065,6 +2202,13 @@ static void draw_subtest(const struct test_mode *t)
>  	if (op_disables_psr(t, t->method))
>  		assertions |= ASSERT_PSR_DISABLED;
>  
> +	/*
> +	 * On FBS_INDIVIDUAL, write to offscreen plane will not touch the
> +	 * current frambuffer. Hence assert for DRRS_LOW.
> +	 */
> +	if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN))
> +		assertions |= ASSERT_DRRS_LOW;
> +
>  	prepare_subtest(t, pattern);
>  	target = pick_target(t, params);
>  
> @@ -2273,7 +2417,11 @@ static void slow_draw_subtest(const struct test_mode *t)
>  		sleep(2);
>  
>  		update_wanted_crc(t, &pattern->crcs[t->format][r]);
> -		do_assertions(0);
> +
> +		if (t->feature & FEATURE_DRRS)
> +			do_assertions(ASSERT_DRRS_LOW);
> +		else
> +			do_assertions(0);
>  	}
>  }
>  
> @@ -2882,14 +3030,14 @@ static void suspend_subtest(const struct test_mode *t)
>  	sleep(5);
>  	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>  	sleep(5);
> -	do_assertions(0);
> +	do_assertions(ASSERT_DRRS_LOW);
>  
>  	unset_all_crtcs();
>  	sleep(5);
>  	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>  	sleep(5);
>  	do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
> -		      DONT_ASSERT_CRC);
> +		      DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
>  
>  	set_mode_for_params(params);
>  	do_assertions(0);
> @@ -3371,6 +3519,14 @@ static const char *feature_str(int feature)
>  		return "psr";
>  	case FEATURE_FBC | FEATURE_PSR:
>  		return "fbcpsr";
> +	case FEATURE_DRRS:
> +		return "drrs";
> +	case FEATURE_FBC | FEATURE_DRRS:
> +		return "fbcdrrs";
> +	case FEATURE_PSR | FEATURE_DRRS:
> +		return "psrdrrs";
> +	case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS:
> +		return "fbcpsrdrrs";
>  	default:
>  		igt_assert(false);
>  	}
> @@ -3635,7 +3791,7 @@ int main(int argc, char *argv[])
>  				tilingchange_subtest(&t);
>  		}
>  
> -		if (t.feature & FEATURE_PSR)
> +		if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
>  			igt_subtest_f("%s-slowdraw", feature_str(t.feature))
>  				slow_draw_subtest(&t);
>  
> -- 
> 1.9.1
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH i-g-t v13] tests/kms_frontbuffer_tracking: Including DRRS test coverage
  2018-01-11  5:27                           ` Ramalingam C
@ 2018-01-11 20:22                             ` Rodrigo Vivi
  0 siblings, 0 replies; 59+ messages in thread
From: Rodrigo Vivi @ 2018-01-11 20:22 UTC (permalink / raw)
  To: Ramalingam C
  Cc: Paulo Zanoni, jari.tahvanainen, intel-gfx, Daniel Vetter,
	Nautiyal, Ankit K

On Thu, Jan 11, 2018 at 05:27:52AM +0000, Ramalingam C wrote:
> 
> 
> On Wednesday 10 January 2018 11:45 PM, Rodrigo Vivi wrote:
> 
>     On Wed, Jan 10, 2018 at 02:47:00PM +0000, Lohith BS wrote:
> 
>         Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's
>         refresh rate to the lowest vrefresh supported by panel, when frame is
>         not flipped for more than a Sec.
> 
>         In kernel, DRRS uses the front buffer tracking infrastructure.
>         Hence DRRS test coverage is added along with other frontbuffer tracking
>         based features such as FBC and PSR tests.
> 
>         Here, we are testing DRRS with other features in all possible
>         combinations, in all required test cases, to capture any possible
>         regression.
> 
>         v2: Addressed the comments and suggestions from Vlad, Marius.
>             The signoff details from the earlier work are also included.
> 
>         v3: Modified vblank rate calculation by using reply-sequence,
>             provided by drmWaitVBlank, as suggested by Chris Wilson.
> 
>         v4: As suggested from Chris Wilson and Daniel Vetter
>             1) Avoided using pthread for calculating vblank refresh rate,
>                instead used drmWaitVBlank reply sequence.
>             2) Avoided using kernel-specific info like transitional delays,
>                instead polling mechanism with timeout is used.
>             3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
>                instead of having a separate test.
> 
>         v5: This patch adds DRRS as a new feature in the
>             kms_frontbuffer_tracking IGT.
>             DRRS switch to lower vrefresh rate is tested at slow-draw subtest.
> 
>             Note:
>             1) Currently kernel doesn't have support to enable and disable
>                the DRRS feature dynamically(as in case of PSR). Hence if the
>                panel supports DRRS it will be enabled by default.
> 
>             This is in continuation of last patch
>                 "https://patchwork.freedesktop.org/patch/162726/"
> 
>         v6: This patch adds runtime enable and disable feature for testing DRRS
> 
>         v7: This patch adds runtime enable and disable feature for testing DRRS
>             through debugfs entry "i915_drrs_ctl".
> 
>         v8: Commit message is updated to reflect current implementation.
> 
>         v9: Addressed Paulo Zanoni comments.
>             Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL.
> 
>         v10: Corrected DRRS state expectation in suspend related subtests.
> 
>         v11: Removing the global flag is_psr_drrs_combo [Rodrigo].
> 
>         v12: Rewriting the DRRS inactive deduction [Rodrigo].
> 
>         v13: En/Dis-able DRRS only when DRRS is capable on the setup.
> 
>         Signed-off-by: Lohith BS <lohith.bs@intel.com>
>         Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
>         ---
>          tests/kms_frontbuffer_tracking.c | 172 +++++++++++++++++++++++++++++++++++++--
>          1 file changed, 164 insertions(+), 8 deletions(-)
> 
>         diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
>         index 1601cab..6b2299b 100644
>         --- a/tests/kms_frontbuffer_tracking.c
>         +++ b/tests/kms_frontbuffer_tracking.c
>         @@ -34,7 +34,7 @@
> 
> 
>          IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
>         -                    "its related features: FBC and PSR");
>         +                    "its related features: FBC, PSR and DRRS");
> 
>          /*
>           * One of the aspects of this test is that, for every subtest, we try different
>         @@ -105,8 +105,9 @@ struct test_mode {
>                         FEATURE_NONE  = 0,
>                         FEATURE_FBC   = 1,
>                         FEATURE_PSR   = 2,
>         -               FEATURE_COUNT = 4,
>         -               FEATURE_DEFAULT = 4,
>         +               FEATURE_DRRS  = 4,
>         +               FEATURE_COUNT = 8,
>         +               FEATURE_DEFAULT = 8,
>                 } feature;
> 
>                 /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
>         @@ -182,6 +183,13 @@ struct {
>                 .can_test = false,
>          };
> 
>         +#define MAX_DRRS_STATUS_BUF_LEN 256
>         +
>         +struct {
>         +       bool can_test;
>         +} drrs = {
>         +       .can_test = false,
>         +};
> 
>          #define SINK_CRC_SIZE 12
>          typedef struct {
>         @@ -790,7 +798,14 @@ static void __debugfs_read(const char *param, char *buf, int len)
>                 buf[len] = '\0';
>          }
> 
>         +static void __debugfs_write(const char *param, char *buf, int len)
>         +{
>         +       igt_assert_eq(igt_sysfs_write(drm.debugfs, param, buf, len - 1),
>         +                     len - 1);
>         +}
>         +
>          #define debugfs_read(p, arr) __debugfs_read(p, arr, sizeof(arr))
>         +#define debugfs_write(p, arr) __debugfs_write(p, arr, sizeof(arr))
> 
>          static bool fbc_is_enabled(void)
>          {
>         @@ -825,6 +840,62 @@ static void psr_print_status(void)
>                 igt_info("PSR status:\n%s\n", buf);
>          }
> 
>         +void drrs_set(unsigned int val)
>         +{
>         +       char buf[2];
>         +
>         +       if (!drrs.can_test)
>         +               return;
> 
>     Can you please elaborate more about this solution here?
> 
>     I couldn't find the logs anymore. What was the issue that CI caught?
> 
> 
> CI failure were caused due to two reasons:
> 
>   • Error from kernel on debugfs write when the platform doesn't support DRRS (<gen7).
> 
>             This can be addressed either from kernel by returning success from
> i915_drrs_ctl_set instead of -ENODEV for <gen7,

-ENODEV is better, but then igt test skip when handling this -ENODEV explicitly instead
of a random return on !can_test.

>             or by not En/Disable the drrs feature when you already knew that feature is
> not supported.
> 
>   • Non Availability of debugfs_fd for debugfs write for DRRS when eDP panel was not
>     there.
> 
>             This is handled by adding debugfs_write. Which will open and close the file
> as and when it is required using igt_sysfs_write.
>             Similar to already existing debugfs_read.
> 
> 
>     What happens if a regular user on HSW with no DRRS monitor (same configuration as CI)
>     write to this debugfs enabling DRRS?
> 
> 
> Basically this debugfs write in kernel
>      on >=gen7
>             for drrs enable req: will enable drrs if there is any DRRS capable eDP panel.
>             for drrs disable req: will disable drrs if there is any DRRS capable eDP
> panel in enabled state.
>     on <gen7
>             returns -ENODEV. Not sure whether we should just skip all operations and
> return success on <gen7 also.
> 
> This patch skips any write into the drrs ctrl debugfs.
> 
> 
>     What I wonder is if this is the right place for this solution or on the
>     kernel side.
> 
>     Also if it is a testcase I wonder if it shouldn't have a skip handling
>     somewhere instead of a blind return....
> 
> In this IGT before every subtest, all the features are disabled and only the features
> required for that subtest is enabled.
> So we though its good to validate the en/Disable call at the implementation of drrs_set
> than at calling place. Please suggest if you think otherway.

my suggestion is to keep -ENODEV and igt check explicitly for this return value and skip testcase if
-ENODEV is returned.

> 
> -Ram
> 
> 
>     Thanks,
>     Rodrigo.
> 
> 
>         +
>         +       igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val);
>         +       snprintf(buf, sizeof(buf), "%d", val);
>         +       debugfs_write("i915_drrs_ctl", buf);
>         +}
>         +
>         +static bool is_drrs_high(void)
>         +{
>         +       char buf[MAX_DRRS_STATUS_BUF_LEN];
>         +
>         +       debugfs_read("i915_drrs_status", buf);
>         +       return strstr(buf, "DRRS_HIGH_RR");
>         +}
>         +
>         +static bool is_drrs_low(void)
>         +{
>         +       char buf[MAX_DRRS_STATUS_BUF_LEN];
>         +
>         +       debugfs_read("i915_drrs_status", buf);
>         +       return strstr(buf, "DRRS_LOW_RR");
>         +}
>         +
>         +static bool is_drrs_supported(void)
>         +{
>         +       char buf[MAX_DRRS_STATUS_BUF_LEN];
>         +
>         +       debugfs_read("i915_drrs_status", buf);
>         +       return strstr(buf, "DRRS Supported: Yes");
>         +}
>         +
>         +static bool is_drrs_inactive(void)
>         +{
>         +       char buf[MAX_DRRS_STATUS_BUF_LEN];
>         +
>         +       debugfs_read("i915_drrs_status", buf);
>         +
>         +       if (strstr(buf, "DRRS_State: "))
>         +               return false;
>         +
>         +       return true;
>         +}
>         +
>         +static void drrs_print_status(void)
>         +{
>         +       char buf[MAX_DRRS_STATUS_BUF_LEN];
>         +
>         +       debugfs_read("i915_drrs_status", buf);
>         +       igt_info("DRRS STATUS :\n%s\n", buf);
>         +}
>         +
>          static struct timespec fbc_get_last_action(void)
>          {
>                 struct timespec ret = { 0, 0 };
>         @@ -935,10 +1006,17 @@ static bool psr_wait_until_enabled(void)
>                 return igt_wait(psr_is_enabled(), 5000, 1);
>          }
> 
>         +static bool drrs_wait_until_rr_switch_to_low(void)
>         +{
>         +       return igt_wait(is_drrs_low(), 5000, 1);
>         +}
>         +
>          #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
>          #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
>          #define psr_enable() igt_set_module_param_int("enable_psr", 1)
>          #define psr_disable() igt_set_module_param_int("enable_psr", 0)
>         +#define drrs_enable()  drrs_set(1)
>         +#define drrs_disable() drrs_set(0)
> 
>          static void get_sink_crc(sink_crc_t *crc, bool mandatory)
>          {
>         @@ -1184,6 +1262,7 @@ static void disable_features(const struct test_mode *t)
> 
>                 fbc_disable();
>                 psr_disable();
>         +       drrs_disable();
>          }
> 
>          static void *busy_thread_func(void *data)
>         @@ -1577,6 +1656,22 @@ static void teardown_psr(void)
>          {
>          }
> 
>         +static void setup_drrs(void)
>         +{
>         +       if (get_connector(prim_mode_params.connector_id)->connector_type !=
>         +           DRM_MODE_CONNECTOR_eDP) {
>         +               igt_info("Can't test DRRS: no usable eDP screen.\n");
>         +               return;
>         +       }
>         +
>         +       if (!is_drrs_supported()) {
>         +               igt_info("Can't test DRRS: Not supported.\n");
>         +               return;
>         +       }
>         +
>         +       drrs.can_test = true;
>         +}
>         +
>          static void setup_environment(void)
>          {
>                 setup_drm();
>         @@ -1584,6 +1679,7 @@ static void setup_environment(void)
> 
>                 setup_fbc();
>                 setup_psr();
>         +       setup_drrs();
> 
>                 setup_crcs();
>          }
>         @@ -1662,6 +1758,11 @@ static void do_flush(const struct test_mode *t)
>          #define ASSERT_PSR_ENABLED             (1 << 6)
>          #define ASSERT_PSR_DISABLED            (1 << 7)
> 
>         +#define DRRS_ASSERT_FLAGS              (7 << 8)
>         +#define ASSERT_DRRS_HIGH               (1 << 8)
>         +#define ASSERT_DRRS_LOW                (1 << 9)
>         +#define ASSERT_DRRS_INACTIVE           (1 << 10)
>         +
>          static int adjust_assertion_flags(const struct test_mode *t, int flags)
>          {
>                 if (!(flags & DONT_ASSERT_FEATURE_STATUS)) {
>         @@ -1669,12 +1770,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
>                                 flags |= ASSERT_FBC_ENABLED;
>                         if (!(flags & ASSERT_PSR_DISABLED))
>                                 flags |= ASSERT_PSR_ENABLED;
>         +               if (!((flags & ASSERT_DRRS_LOW) ||
>         +                   (flags & ASSERT_DRRS_INACTIVE)))
>         +                       flags |= ASSERT_DRRS_HIGH;
>                 }
> 
>                 if ((t->feature & FEATURE_FBC) == 0)
>                         flags &= ~FBC_ASSERT_FLAGS;
>                 if ((t->feature & FEATURE_PSR) == 0)
>                         flags &= ~PSR_ASSERT_FLAGS;
>         +       if ((t->feature & FEATURE_DRRS) == 0)
>         +               flags &= ~DRRS_ASSERT_FLAGS;
> 
>                 return flags;
>          }
>         @@ -1706,6 +1812,23 @@ static void do_status_assertions(int flags)
>                         return;
>                 }
> 
>         +       if (flags & ASSERT_DRRS_HIGH) {
>         +               if (!is_drrs_high()) {
>         +                       drrs_print_status();
>         +                       igt_assert_f(false, "DRRS HIGH\n");
>         +               }
>         +       } else if (flags & ASSERT_DRRS_LOW) {
>         +               if (!drrs_wait_until_rr_switch_to_low()) {
>         +                       drrs_print_status();
>         +                       igt_assert_f(false, "DRRS LOW\n");
>         +               }
>         +       } else if (flags & ASSERT_DRRS_INACTIVE) {
>         +               if (!is_drrs_inactive()) {
>         +                       drrs_print_status();
>         +                       igt_assert_f(false, "DRRS INACTIVE\n");
>         +               }
>         +       }
>         +
>                 if (flags & ASSERT_FBC_ENABLED) {
>                         igt_require(!fbc_not_enough_stolen());
>                         igt_require(!fbc_stride_not_supported());
>         @@ -1833,6 +1956,8 @@ static void enable_features_for_test(const struct test_mode *t)
>                         fbc_enable();
>                 if (t->feature & FEATURE_PSR)
>                         psr_enable();
>         +       if (t->feature & FEATURE_DRRS)
>         +               drrs_enable();
>          }
> 
>          static void check_test_requirements(const struct test_mode *t)
>         @@ -1852,6 +1977,18 @@ static void check_test_requirements(const struct test_mode *t)
>                                       "Can't test PSR without sink CRCs\n");
>                 }
> 
>         +       if (t->feature & FEATURE_DRRS)
>         +               igt_require_f(drrs.can_test,
>         +                             "Can't test DRRS with the current outputs\n");
>         +
>         +       /*
>         +        * In kernel, When PSR is enabled, DRRS will be disabled. So If a test
>         +        * case needs DRRS + PSR enabled, that will be skipped.
>         +        */
>         +       igt_require_f(!((t->feature & FEATURE_PSR) &&
>         +                     (t->feature & FEATURE_DRRS)),
>         +                     "Can't test PSR and DRRS together\n");
>         +
>                 if (opt.only_pipes != PIPE_COUNT)
>                         igt_require(t->pipes == opt.only_pipes);
>          }
>         @@ -1973,7 +2110,7 @@ static void rte_subtest(const struct test_mode *t)
> 
>                 unset_all_crtcs();
>                 do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
>         -                     DONT_ASSERT_CRC);
>         +                     DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
> 
>                 enable_prim_screen_and_wait(t);
>                 set_cursor_for_test(t, &prim_mode_params);
>         @@ -2065,6 +2202,13 @@ static void draw_subtest(const struct test_mode *t)
>                 if (op_disables_psr(t, t->method))
>                         assertions |= ASSERT_PSR_DISABLED;
> 
>         +       /*
>         +        * On FBS_INDIVIDUAL, write to offscreen plane will not touch the
>         +        * current frambuffer. Hence assert for DRRS_LOW.
>         +        */
>         +       if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN))
>         +               assertions |= ASSERT_DRRS_LOW;
>         +
>                 prepare_subtest(t, pattern);
>                 target = pick_target(t, params);
> 
>         @@ -2273,7 +2417,11 @@ static void slow_draw_subtest(const struct test_mode *t)
>                         sleep(2);
> 
>                         update_wanted_crc(t, &pattern->crcs[t->format][r]);
>         -               do_assertions(0);
>         +
>         +               if (t->feature & FEATURE_DRRS)
>         +                       do_assertions(ASSERT_DRRS_LOW);
>         +               else
>         +                       do_assertions(0);
>                 }
>          }
> 
>         @@ -2882,14 +3030,14 @@ static void suspend_subtest(const struct test_mode *t)
>                 sleep(5);
>                 igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>                 sleep(5);
>         -       do_assertions(0);
>         +       do_assertions(ASSERT_DRRS_LOW);
> 
>                 unset_all_crtcs();
>                 sleep(5);
>                 igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>                 sleep(5);
>                 do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED |
>         -                     DONT_ASSERT_CRC);
>         +                     DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE);
> 
>                 set_mode_for_params(params);
>                 do_assertions(0);
>         @@ -3371,6 +3519,14 @@ static const char *feature_str(int feature)
>                         return "psr";
>                 case FEATURE_FBC | FEATURE_PSR:
>                         return "fbcpsr";
>         +       case FEATURE_DRRS:
>         +               return "drrs";
>         +       case FEATURE_FBC | FEATURE_DRRS:
>         +               return "fbcdrrs";
>         +       case FEATURE_PSR | FEATURE_DRRS:
>         +               return "psrdrrs";
>         +       case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS:
>         +               return "fbcpsrdrrs";
>                 default:
>                         igt_assert(false);
>                 }
>         @@ -3635,7 +3791,7 @@ int main(int argc, char *argv[])
>                                         tilingchange_subtest(&t);
>                         }
> 
>         -               if (t.feature & FEATURE_PSR)
>         +               if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS))
>                                 igt_subtest_f("%s-slowdraw", feature_str(t.feature))
>                                         slow_draw_subtest(&t);
> 
>         --
>         1.9.1
> 
>         _______________________________________________
>         Intel-gfx mailing list
>         Intel-gfx@lists.freedesktop.org
>         https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> 
>     _______________________________________________
>     Intel-gfx mailing list
>     Intel-gfx@lists.freedesktop.org
>     https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> 
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH i-g-t v13] tests/kms_frontbuffer_tracking: Including DRRS test coverage
  2018-01-10 14:47                       ` [PATCH i-g-t v13] " Lohith BS
  2018-01-10 18:15                         ` Rodrigo Vivi
  2018-01-11  8:40                         ` Daniel Vetter
@ 2018-01-17  5:05                         ` Ramalingam C
  2 siblings, 0 replies; 59+ messages in thread
From: Ramalingam C @ 2018-01-17  5:05 UTC (permalink / raw)
  To: Lohith BS, intel-gfx, rodrigo.vivi, jani.saarinen, daniel.vetter,
	chris, jari.tahvanainen
  Cc: ankit.k.nautiyal, paulo.r.zanoni

Summary from IRC discussions with Rodrigo:

drrs_disable will get called on all test setups(including the drrs 
non-capable). So we cant fail/skip the sub_test based on the return 
value from drrs_set(0)

drrs_enable will get called only when the test setup is capable of drrs. 
And also after the request for enabling drrs, drrs state is verified 
through i915_drrs_status.

So functionally it is not necessary to validate the debugfs_write return 
value. But no harm in double checking the error state for drrs_set(1). 
Rodrigo, as per above understanding i have mentioned the expected deltas 
inline. If you confirm, we will submit the next version. Thanks for the 
time.


On Wednesday 10 January 2018 08:17 PM, Lohith BS wrote:
> Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's
> refresh rate to the lowest vrefresh supported by panel, when frame is
> not flipped for more than a Sec.
>
> In kernel, DRRS uses the front buffer tracking infrastructure.
> Hence DRRS test coverage is added along with other frontbuffer tracking
> based features such as FBC and PSR tests.
>
> Here, we are testing DRRS with other features in all possible
> combinations, in all required test cases, to capture any possible
> regression.
>
> v2: Addressed the comments and suggestions from Vlad, Marius.
>      The signoff details from the earlier work are also included.
>
> v3: Modified vblank rate calculation by using reply-sequence,
>      provided by drmWaitVBlank, as suggested by Chris Wilson.
>
> v4: As suggested from Chris Wilson and Daniel Vetter
>      1) Avoided using pthread for calculating vblank refresh rate,
>         instead used drmWaitVBlank reply sequence.
>      2) Avoided using kernel-specific info like transitional delays,
>         instead polling mechanism with timeout is used.
>      3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c,
>         instead of having a separate test.
>
> v5: This patch adds DRRS as a new feature in the
>      kms_frontbuffer_tracking IGT.
>      DRRS switch to lower vrefresh rate is tested at slow-draw subtest.
>
>      Note:
>      1) Currently kernel doesn't have support to enable and disable
>         the DRRS feature dynamically(as in case of PSR). Hence if the
>         panel supports DRRS it will be enabled by default.
>
>      This is in continuation of last patch
> 	"https://patchwork.freedesktop.org/patch/162726/"
>
> v6: This patch adds runtime enable and disable feature for testing DRRS
>
> v7: This patch adds runtime enable and disable feature for testing DRRS
>      through debugfs entry "i915_drrs_ctl".
>
> v8: Commit message is updated to reflect current implementation.
>
> v9: Addressed Paulo Zanoni comments.
>      Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL.
>
> v10: Corrected DRRS state expectation in suspend related subtests.
>
> v11: Removing the global flag is_psr_drrs_combo [Rodrigo].
>
> v12: Rewriting the DRRS inactive deduction [Rodrigo].
>
> v13: En/Dis-able DRRS only when DRRS is capable on the setup.
>
> Signed-off-by: Lohith BS <lohith.bs@intel.com>
> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com>
> ---
>   tests/kms_frontbuffer_tracking.c | 172 +++++++++++++++++++++++++++++++++++++--
>   1 file changed, 164 insertions(+), 8 deletions(-)
>
> diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
> index 1601cab..6b2299b 100644
> --- a/tests/kms_frontbuffer_tracking.c
> +++ b/tests/kms_frontbuffer_tracking.c
> @@ -34,7 +34,7 @@
>   
>   
>   IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
> -		     "its related features: FBC and PSR");
> +		     "its related features: FBC, PSR and DRRS");
>   
>   /*
>    * One of the aspects of this test is that, for every subtest, we try different
> @@ -105,8 +105,9 @@ struct test_mode {
>   		FEATURE_NONE  = 0,
>   		FEATURE_FBC   = 1,
>   		FEATURE_PSR   = 2,
> -		FEATURE_COUNT = 4,
> -		FEATURE_DEFAULT = 4,
> +		FEATURE_DRRS  = 4,
> +		FEATURE_COUNT = 8,
> +		FEATURE_DEFAULT = 8,
>   	} feature;
>   
>   	/* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and
> @@ -182,6 +183,13 @@ struct {
>   	.can_test = false,
>   };
>   
> +#define MAX_DRRS_STATUS_BUF_LEN 256
> +
> +struct {
> +	bool can_test;
> +} drrs = {
> +	.can_test = false,
> +};
>   
>   #define SINK_CRC_SIZE 12
>   typedef struct {
> @@ -790,7 +798,14 @@ static void __debugfs_read(const char *param, char *buf, int len)
>   	buf[len] = '\0';
>   }
>   
> +static void __debugfs_write(const char *param, char *buf, int len)
> +{
> +	igt_assert_eq(igt_sysfs_write(drm.debugfs, param, buf, len - 1),
> +		      len - 1);
> +}
> +
redefining the __debugfs_write() as below:

static int __debugfs_write(const char *param, char *buf, int len)
{
	return igt_sysfs_write(drm.debugfs, param, buf, len - 1);
}

>   #define debugfs_read(p, arr) __debugfs_read(p, arr, sizeof(arr))
> +#define debugfs_write(p, arr) __debugfs_write(p, arr, sizeof(arr))
>   
>   static bool fbc_is_enabled(void)
>   {
> @@ -825,6 +840,62 @@ static void psr_print_status(void)
>   	igt_info("PSR status:\n%s\n", buf);
>   }
>   
> +void drrs_set(unsigned int val)
> +{
> +	char buf[2];
> +
> +	if (!drrs.can_test)
> +		return;
removing above two lines.
> +
> +	igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val);
> +	snprintf(buf, sizeof(buf), "%d", val);
> +	debugfs_write("i915_drrs_ctl", buf);
  replacing above line with below code

	ret = debugfs_write("i915_drrs_ctl", buf);

	/* drrs_enable can't fail, as that is called on drrs capable setup only. */
	if (val)
		igt_assert_eq(ret, sizeof(buf) - 1);

--Ram

> +}
> +
> +static bool is_drrs_high(void)
> +{
> +	char buf[MAX_DRRS_STATUS_BUF_LEN];
>

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

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

end of thread, other threads:[~2018-01-17  5:09 UTC | newest]

Thread overview: 59+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <1505724732-17529-1-git-send-email-lohith.bs@intel.com>
2017-09-18 19:54 ` [PATCH] Idleness DRRS: Rodrigo Vivi
2017-09-19 10:46   ` Ramalingam C
2017-09-19 18:12     ` Rodrigo Vivi
2017-10-31  9:20       ` [PATCH 0/2] DRRS coverage in frontbuffer tracking IGT Ramalingam C
2017-10-31  9:20         ` [PATCH 1/2] drm/i915: Runtime disable for eDP DRRS Ramalingam C
2017-10-31 18:57           ` Rodrigo Vivi
2017-11-01 16:44             ` C, Ramalingam
2017-11-07 18:38               ` [PATCH v2 " Ramalingam C
2017-11-17 18:53                 ` Rodrigo Vivi
2017-11-19 14:55                   ` C, Ramalingam
2017-11-21 20:59                     ` Rodrigo Vivi
2017-10-31  9:20         ` [PATCH 2/2] i915/drrs/debugfs: module param and psr status Ramalingam C
2017-11-07 18:40           ` [PATCH v2 2/2] i915/drrs/debugfs: crtc id " Ramalingam C
2017-11-17 18:56             ` Rodrigo Vivi
2017-11-20  3:39               ` C, Ramalingam
2017-11-20  4:23               ` [PATCH v3] i915/drrs/debugfs: psr status info addition Ramalingam C
2017-11-21 20:56                 ` Rodrigo Vivi
2017-10-31  9:20         ` [PATCH i-g-t] tests/kms_frontbuffer_tracking: Idleness DRRS coverage Ramalingam C
2017-11-10 16:22           ` [PATCH i-g-t] Idleness DRRS: Lohith BS
2017-12-06 15:13             ` [PATCH i-g-t v8] tests/kms_frontbuffer_tracking: Including DRRS test coverage Lohith BS
2017-12-06 18:30               ` Paulo Zanoni
2017-12-11 13:12               ` [PATCH i-g-t v9] " Lohith BS
2018-01-01 13:45                 ` [PATCH i-g-t v10] " Lohith BS
2018-01-02 20:34                   ` Rodrigo Vivi
2018-01-03 16:02                     ` Bs, Lohith
2018-01-03 15:02                   ` [PATCH i-g-t v11] " Lohith BS
2018-01-03 19:21                     ` Rodrigo Vivi
2018-01-03 22:14                       ` Ramalingam C
2018-01-05 11:40                     ` [PATCH i-g-t v12] " Lohith BS
2018-01-05 17:55                       ` Rodrigo Vivi
2018-01-06 10:48                         ` Ramalingam C
2018-01-06 13:37                           ` Ramalingam C
2018-01-10 14:47                       ` [PATCH i-g-t v13] " Lohith BS
2018-01-10 18:15                         ` Rodrigo Vivi
2018-01-11  5:27                           ` Ramalingam C
2018-01-11 20:22                             ` Rodrigo Vivi
2018-01-11  8:40                         ` Daniel Vetter
2018-01-17  5:05                         ` Ramalingam C
2017-10-31  9:28       ` ✗ Fi.CI.BAT: failure for series starting with [1/2] drm/i915: Runtime disable for eDP DRRS Patchwork
2017-10-31  9:48       ` ✓ Fi.CI.BAT: success " Patchwork
2017-10-31 10:33       ` ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage Patchwork
2017-11-08  7:26       ` ✓ Fi.CI.BAT: success for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev3) Patchwork
2017-11-08  8:11       ` ✗ Fi.CI.IGT: warning " Patchwork
2017-11-10 16:49       ` ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev2) Patchwork
2017-11-20  4:46       ` ✗ Fi.CI.BAT: warning for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4) Patchwork
2017-12-06 16:32       ` ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev3) Patchwork
2017-12-11 15:56       ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev4) Patchwork
2017-12-11 17:11       ` ✗ Fi.CI.IGT: failure " Patchwork
2017-12-28 15:59       ` ✓ Fi.CI.BAT: success for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4) Patchwork
2017-12-28 16:45       ` ✓ Fi.CI.IGT: " Patchwork
2018-01-02 10:37       ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev5) Patchwork
2018-01-02 13:26       ` ✗ Fi.CI.IGT: failure " Patchwork
2018-01-03 15:30       ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev6) Patchwork
2018-01-03 18:49       ` ✗ Fi.CI.IGT: failure " Patchwork
2018-01-05 12:04       ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev7) Patchwork
2018-01-05 13:25       ` ✗ Fi.CI.IGT: failure " Patchwork
2018-01-10 15:11       ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev8) Patchwork
2018-01-10 16:14       ` ✓ Fi.CI.IGT: " Patchwork
2017-09-19 10:14 ` [PATCH] Idleness DRRS: Ramalingam C

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.