From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1F7BE10E873 for ; Fri, 28 Oct 2022 16:46:38 +0000 (UTC) Date: Fri, 28 Oct 2022 19:46:34 +0300 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= To: Jeevan B Message-ID: References: <20221028160739.13017-1-jeevan.b@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20221028160739.13017-1-jeevan.b@intel.com> Subject: Re: [igt-dev] [PATCH i-g-t] tests/kms_content_protection: Add a test for HDCP-MST with suspend resume List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: igt-dev@lists.freedesktop.org, suraj.kandpal@intel.com Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" List-ID: On Fri, Oct 28, 2022 at 09:37:39PM +0530, Jeevan B wrote: > adding new test to validate HDCP-MST with suspend resume > test check for valid output which supports MST and HDCP > then commits and check if the content protection is enabled > before and after suspend-resume. The MST HDCP code looks still totally broken [1]. Is someone actually going to fix it some day? [] https://lists.freedesktop.org/archives/intel-gfx/2021-October/279457.html > > v2: Change type-0 to type-1, try to authenticate hdcp few more times > as suggested. (Suraj) > > Signed-off-by: Jeevan B > --- > tests/kms_content_protection.c | 94 +++++++++++++++++++++++++++++++++- > 1 file changed, 93 insertions(+), 1 deletion(-) > > diff --git a/tests/kms_content_protection.c b/tests/kms_content_protection.c > index aa28b7bf..53f50115 100644 > --- a/tests/kms_content_protection.c > +++ b/tests/kms_content_protection.c > @@ -48,6 +48,7 @@ struct data { > #define CP_MEI_RELOAD (1 << 2) > #define CP_TYPE_CHANGE (1 << 3) > #define CP_UEVENT (1 << 4) > +#define SUSPEND_RESUME (1 << 5) > > #define CP_UNDESIRED 0 > #define CP_DESIRED 1 > @@ -686,6 +687,89 @@ test_content_protection_mst(int content_type) > test_cp_lic_on_mst(hdcp_mst_output, valid_outputs, 1); > } > > +static void > +test_content_protection_mst_suspend_resume(int content_type) > +{ > + igt_display_t *display = &data.display; > + igt_output_t *output; > + int valid_outputs = 0, dp_mst_outputs = 0, ret, count, max_pipe = 0; > + enum pipe pipe; > + igt_output_t *mst_output[IGT_MAX_PIPES], *hdcp_mst_output[IGT_MAX_PIPES]; > + > + for_each_pipe(display, pipe) > + max_pipe++; > + > + pipe = PIPE_A; > + > + for_each_connected_output(display, output) { > + if (!output_is_dp_mst(output, dp_mst_outputs)) > + continue; > + > + igt_assert_f(igt_pipe_connector_valid(pipe, output), "Output-pipe combination invalid\n"); > + > + igt_output_set_pipe(output, pipe); > + prepare_modeset_on_mst_output(output); > + mst_output[dp_mst_outputs++] = output; > + > + pipe++; > + > + if (pipe >= max_pipe) > + break; > + } > + > + igt_require_f(dp_mst_outputs > 1, "No DP MST set up with >= 2 outputs found in a single topology\n"); > + > + if (igt_display_try_commit_atomic(display, > + DRM_MODE_ATOMIC_TEST_ONLY | > + DRM_MODE_ATOMIC_ALLOW_MODESET, > + NULL) != 0) { > + bool found = igt_override_all_active_output_modes_to_fit_bw(display); > + igt_require_f(found, "No valid mode combo found for MST modeset\n"); > + > + for (count = 0; count < dp_mst_outputs; count++) > + prepare_modeset_on_mst_output(mst_output[count]); > + } > + > + ret = igt_display_try_commit2(display, COMMIT_ATOMIC); > + igt_require_f(ret == 0, "Commit failure during MST modeset\n"); > + > + for (count = 0; count < dp_mst_outputs; count++) { > + if (!output_hdcp_capable(mst_output[count], content_type)) > + continue; > + > + hdcp_mst_output[valid_outputs++] = mst_output[count]; > + } > + > + igt_require_f(valid_outputs > 1, "DP MST outputs do not have the required HDCP support\n"); > + > + for (count = 0; count < valid_outputs; count++) { > + igt_output_set_prop_value(hdcp_mst_output[count], IGT_CONNECTOR_CONTENT_PROTECTION, CP_DESIRED); > + > + if (output->props[IGT_CONNECTOR_HDCP_CONTENT_TYPE]) > + igt_output_set_prop_value(hdcp_mst_output[count], IGT_CONNECTOR_HDCP_CONTENT_TYPE, content_type); > + } > + > + igt_display_commit2(display, COMMIT_ATOMIC); > + > + for (count = 0; count < valid_outputs; count++) { > + ret = igt_wait(wait_for_prop_value(hdcp_mst_output[count], > + CP_ENABLED, KERNEL_AUTH_TIME_ALLOWED_MSEC), > + 1000, 100); > + igt_assert_f(ret, "Content Protection not enabled on %s\n", hdcp_mst_output[count]->name); > + } > + > + igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); > + > + igt_display_commit2(display, COMMIT_ATOMIC); > + > + for (count = 0; count < valid_outputs; count++) { > + ret = igt_wait(wait_for_prop_value(hdcp_mst_output[count], > + CP_ENABLED, KERNEL_AUTH_TIME_ALLOWED_MSEC), > + 1000, 100); > + igt_assert_f(ret, "Content Protection not enabled on %s\n", hdcp_mst_output[count]->name); > + } > +} > + > static void test_content_protection_cleanup(void) > { > igt_display_t *display = &data.display; > @@ -817,6 +901,11 @@ static const struct { > .cp_tests = CP_LIC, > .content_type = HDCP_CONTENT_TYPE_1, > }, > + { .desc = "Test Content protection(Type 1) over DP MST with suspend resume.", > + .name = "dp-mst-suspend_resume", > + .cp_tests = SUSPEND_RESUME, > + .content_type = HDCP_CONTENT_TYPE_1, > + }, > }; > > igt_main > @@ -866,7 +955,10 @@ igt_main > > igt_subtest(mst_subtests[i].name) { > data.cp_tests = mst_subtests[i].cp_tests; > - test_content_protection_mst(mst_subtests[i].content_type); > + if (data.cp_tests == SUSPEND_RESUME) > + test_content_protection_mst_suspend_resume(mst_subtests[i].content_type); > + else > + test_content_protection_mst(mst_subtests[i].content_type); > } > } > } > -- > 2.36.0 -- Ville Syrjälä Intel