[i-g-t,v3,2/3] kms_content_protection: Test CP along with modeset

Submitted by Ramalingam C on Feb. 7, 2019, 7:38 p.m.

Details

Message ID 1549568337-10572-1-git-send-email-ramalingam.c@intel.com
State Accepted
Series "Series without cover letter"
Commit d4c40ff002bdc4b599634f20d5676f81c8647cdf
Headers show

Commit Message

Ramalingam C Feb. 7, 2019, 7:38 p.m.
As we have two different patch for commitng the HDCP request
	1. DDI_enable (during the modeset)
	2. update_pipe (during fastset execution)

Currently our kms_content_protection covers only fastset path.
So this test adds the coverage for the HDCP during the modeset by
performing DPMS off-on and check for HDCP status.

But with respect to HDCP we allow few retries from userspace before
reporting the failure. So only first attempt at kernel will be on
modeset path, next retries will become fastset commiting of HDCP.

v2:
  dpms test is added within existing implementation with a flag [Daniel]
v3:
  ret declared.

Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
---
 tests/kms_content_protection.c | 33 +++++++++++++++++++++++++++------
 1 file changed, 27 insertions(+), 6 deletions(-)

Patch hide | download patch | download mbox

diff --git a/tests/kms_content_protection.c b/tests/kms_content_protection.c
index f6b441d891e5..7d82c733b378 100644
--- a/tests/kms_content_protection.c
+++ b/tests/kms_content_protection.c
@@ -216,11 +216,13 @@  static bool igt_pipe_is_free(igt_display_t *display, enum pipe pipe)
 
 
 static void test_content_protection_on_output(igt_output_t *output,
-					      enum igt_commit_style s)
+					      enum igt_commit_style s,
+					      bool dpms_test)
 {
 	igt_display_t *display = &data.display;
 	igt_plane_t *primary;
 	enum pipe pipe;
+	bool ret;
 
 	for_each_pipe(display, pipe) {
 		if (!igt_pipe_connector_valid(pipe, output))
@@ -237,8 +239,22 @@  static void test_content_protection_on_output(igt_output_t *output,
 
 		modeset_with_fb(pipe, output, s);
 		test_cp_enable_with_retry(output, s, 3);
-		test_cp_disable(output, s);
 
+		if (dpms_test) {
+			igt_pipe_set_prop_value(display, pipe,
+						IGT_CRTC_ACTIVE, 0);
+			igt_display_commit2(display, s);
+
+			igt_pipe_set_prop_value(display, pipe,
+						IGT_CRTC_ACTIVE, 1);
+			igt_display_commit2(display, s);
+
+			ret = wait_for_prop_value(output, 2, 18000);
+			if (!ret)
+				test_cp_enable_with_retry(output, s, 2);
+		}
+
+		test_cp_disable(output, s);
 		primary = igt_output_get_plane_type(output,
 						    DRM_PLANE_TYPE_PRIMARY);
 		igt_plane_set_fb(primary, NULL);
@@ -282,7 +298,7 @@  static bool sink_hdcp_capable(igt_output_t *output)
 
 
 static void
-test_content_protection(enum igt_commit_style s)
+test_content_protection(enum igt_commit_style s, bool dpms_test)
 {
 	igt_display_t *display = &data.display;
 	igt_output_t *output;
@@ -299,7 +315,7 @@  test_content_protection(enum igt_commit_style s)
 			continue;
 		}
 
-		test_content_protection_on_output(output, s);
+		test_content_protection_on_output(output, s, dpms_test);
 		valid_tests++;
 	}
 
@@ -317,11 +333,16 @@  igt_main
 	}
 
 	igt_subtest("legacy")
-		test_content_protection(COMMIT_LEGACY);
+		test_content_protection(COMMIT_LEGACY, false);
 
 	igt_subtest("atomic") {
 		igt_require(data.display.is_atomic);
-		test_content_protection(COMMIT_ATOMIC);
+		test_content_protection(COMMIT_ATOMIC, false);
+	}
+
+	igt_subtest("atomic-dpms") {
+		igt_require(data.display.is_atomic);
+		test_content_protection(COMMIT_ATOMIC, true);
 	}
 
 	igt_fixture

Comments

Daniel Vetter Feb. 8, 2019, 9:19 a.m.
On Fri, Feb 08, 2019 at 01:08:57AM +0530, Ramalingam C wrote:
> As we have two different patch for commitng the HDCP request
> 	1. DDI_enable (during the modeset)
> 	2. update_pipe (during fastset execution)
> 
> Currently our kms_content_protection covers only fastset path.
> So this test adds the coverage for the HDCP during the modeset by
> performing DPMS off-on and check for HDCP status.
> 
> But with respect to HDCP we allow few retries from userspace before
> reporting the failure. So only first attempt at kernel will be on
> modeset path, next retries will become fastset commiting of HDCP.
> 
> v2:
>   dpms test is added within existing implementation with a flag [Daniel]
> v3:
>   ret declared.
> 
> Signed-off-by: Ramalingam C <ramalingam.c@intel.com>

Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>

> ---
>  tests/kms_content_protection.c | 33 +++++++++++++++++++++++++++------
>  1 file changed, 27 insertions(+), 6 deletions(-)
> 
> diff --git a/tests/kms_content_protection.c b/tests/kms_content_protection.c
> index f6b441d891e5..7d82c733b378 100644
> --- a/tests/kms_content_protection.c
> +++ b/tests/kms_content_protection.c
> @@ -216,11 +216,13 @@ static bool igt_pipe_is_free(igt_display_t *display, enum pipe pipe)
>  
>  
>  static void test_content_protection_on_output(igt_output_t *output,
> -					      enum igt_commit_style s)
> +					      enum igt_commit_style s,
> +					      bool dpms_test)
>  {
>  	igt_display_t *display = &data.display;
>  	igt_plane_t *primary;
>  	enum pipe pipe;
> +	bool ret;
>  
>  	for_each_pipe(display, pipe) {
>  		if (!igt_pipe_connector_valid(pipe, output))
> @@ -237,8 +239,22 @@ static void test_content_protection_on_output(igt_output_t *output,
>  
>  		modeset_with_fb(pipe, output, s);
>  		test_cp_enable_with_retry(output, s, 3);
> -		test_cp_disable(output, s);
>  
> +		if (dpms_test) {
> +			igt_pipe_set_prop_value(display, pipe,
> +						IGT_CRTC_ACTIVE, 0);
> +			igt_display_commit2(display, s);
> +
> +			igt_pipe_set_prop_value(display, pipe,
> +						IGT_CRTC_ACTIVE, 1);
> +			igt_display_commit2(display, s);
> +
> +			ret = wait_for_prop_value(output, 2, 18000);
> +			if (!ret)
> +				test_cp_enable_with_retry(output, s, 2);
> +		}
> +
> +		test_cp_disable(output, s);
>  		primary = igt_output_get_plane_type(output,
>  						    DRM_PLANE_TYPE_PRIMARY);
>  		igt_plane_set_fb(primary, NULL);
> @@ -282,7 +298,7 @@ static bool sink_hdcp_capable(igt_output_t *output)
>  
>  
>  static void
> -test_content_protection(enum igt_commit_style s)
> +test_content_protection(enum igt_commit_style s, bool dpms_test)
>  {
>  	igt_display_t *display = &data.display;
>  	igt_output_t *output;
> @@ -299,7 +315,7 @@ test_content_protection(enum igt_commit_style s)
>  			continue;
>  		}
>  
> -		test_content_protection_on_output(output, s);
> +		test_content_protection_on_output(output, s, dpms_test);
>  		valid_tests++;
>  	}
>  
> @@ -317,11 +333,16 @@ igt_main
>  	}
>  
>  	igt_subtest("legacy")
> -		test_content_protection(COMMIT_LEGACY);
> +		test_content_protection(COMMIT_LEGACY, false);
>  
>  	igt_subtest("atomic") {
>  		igt_require(data.display.is_atomic);
> -		test_content_protection(COMMIT_ATOMIC);
> +		test_content_protection(COMMIT_ATOMIC, false);
> +	}
> +
> +	igt_subtest("atomic-dpms") {
> +		igt_require(data.display.is_atomic);
> +		test_content_protection(COMMIT_ATOMIC, true);
>  	}
>  
>  	igt_fixture
> -- 
> 2.7.4
>