[igt-dev] [PATCH i-g-t] tests/kms_dp_dsc: Bug fix for DP on Pipe A
Karthik B S
karthik.b.s at intel.com
Thu May 13 09:07:00 UTC 2021
DSC is not supported on Pipe A for external DP on Gen11 platforms.
But as this check is within update_display(), we still call test_cleanup().
This bug is seen here as the pipe wasn't set properly for this output.
To fix this, moving the check outside update_display() so that we do not
call test_cleanup if we didn't even run the test.
Also, moved the fb creation and removal outside the loop for_each_pipe(),
since it seems redundant within the loop.
Fixes: https://gitlab.freedesktop.org/drm/intel/-/issues/3466
Signed-off-by: Karthik B S <karthik.b.s at intel.com>
---
tests/kms_dp_dsc.c | 31 ++++++++++++++++++-------------
1 file changed, 18 insertions(+), 13 deletions(-)
diff --git a/tests/kms_dp_dsc.c b/tests/kms_dp_dsc.c
index 60ed3855..2446fd82 100644
--- a/tests/kms_dp_dsc.c
+++ b/tests/kms_dp_dsc.c
@@ -168,7 +168,6 @@ static void test_cleanup(data_t *data)
DRM_PLANE_TYPE_PRIMARY);
igt_plane_set_fb(primary, NULL);
igt_display_commit(&data->display);
- igt_remove_fb(data->drm_fd, &data->fb_test_pattern);
}
}
@@ -185,15 +184,8 @@ static void kms_dp_dsc_exit_handler(int sig)
static void update_display(data_t *data, enum dsc_test_type test_type)
{
igt_plane_t *primary;
- data->mode = igt_output_get_mode(data->output);
data->connector = data->output->config.connector;
- if (data->connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort &&
- data->pipe == PIPE_A) {
- igt_debug("DSC not supported on Pipe A on external DP\n");
- return;
- }
-
/* Disable the output first */
igt_output_set_pipe(data->output, PIPE_NONE);
igt_display_commit(&data->display);
@@ -206,11 +198,6 @@ static void update_display(data_t *data, enum dsc_test_type test_type)
force_dp_dsc_enable(data);
igt_output_set_pipe(data->output, data->pipe);
- igt_create_pattern_fb(data->drm_fd, data->mode->hdisplay,
- data->mode->vdisplay,
- DRM_FORMAT_XRGB8888,
- LOCAL_DRM_FORMAT_MOD_NONE,
- &data->fb_test_pattern);
primary = igt_output_get_plane_type(data->output,
DRM_PLANE_TYPE_PRIMARY);
@@ -241,7 +228,23 @@ static void run_test(data_t *data, igt_output_t *output,
{
enum pipe pipe;
+ data->mode = igt_output_get_mode(data->output);
+ igt_create_pattern_fb(data->drm_fd, data->mode->hdisplay,
+ data->mode->vdisplay,
+ DRM_FORMAT_XRGB8888,
+ LOCAL_DRM_FORMAT_MOD_NONE,
+ &data->fb_test_pattern);
+
for_each_pipe(&data->display, pipe) {
+ if (is_i915_device(data->drm_fd)) {
+ uint32_t devid = intel_get_drm_devid(data->drm_fd);
+
+ if (data->connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort &&
+ data->pipe == PIPE_A && IS_GEN11(devid)) {
+ igt_debug("DSC not supported on Pipe A on external DP in Gen11 platforms\n");
+ continue;
+ }
+ }
if (igt_pipe_connector_valid(pipe, output)) {
data->pipe = pipe;
@@ -250,6 +253,8 @@ static void run_test(data_t *data, igt_output_t *output,
test_cleanup(data);
}
}
+
+ igt_remove_fb(data->drm_fd, &data->fb_test_pattern);
}
igt_main
--
2.22.0
More information about the igt-dev
mailing list