On Wed, Dec 07, 2016 at 07:16:13PM -0500, Lyude wrote: > We've had support for universal planes since kernel version 3.15, so > there's not really a good reason to try supporting drivers that lack > plane support now. As well, the current has_universal_planes logic is > broken anyway as it makes the assumption that having display planes > always means we have both a primary plane and a cursor plane (this isn't > true on radeon/amdgpu and nouveau). > > So, remove this, and just check for whether or not we have a cursor > plane. > > Signed-off-by: Lyude <lyude@xxxxxxxxxx> lgtm, feel free to push. -Daniel > --- > lib/igt_kms.c | 29 ++++++++++------------------- > lib/igt_kms.h | 2 +- > tests/kms_crtc_background_color.c | 2 -- > tests/kms_plane_scaling.c | 1 - > tests/kms_rotation_crc.c | 25 +++++++++++++------------ > tests/kms_universal_plane.c | 5 +---- > 6 files changed, 25 insertions(+), 39 deletions(-) > > diff --git a/lib/igt_kms.c b/lib/igt_kms.c > index 82bb41d..0e7b8e8 100644 > --- a/lib/igt_kms.c > +++ b/lib/igt_kms.c > @@ -1407,7 +1407,6 @@ void igt_display_init(igt_display_t *display, int drm_fd) > plane = &pipe->planes[IGT_PLANE_PRIMARY]; > plane->is_primary = 1; > plane->index = IGT_PLANE_PRIMARY; > - display->has_universal_planes = 1; > break; > case DRM_PLANE_TYPE_CURSOR: > /* > @@ -1420,7 +1419,7 @@ void igt_display_init(igt_display_t *display, int drm_fd) > plane = &pipe->planes[IGT_PLANE_CURSOR]; > plane->is_cursor = 1; > plane->index = IGT_PLANE_CURSOR; > - display->has_universal_planes = 1; > + display->has_cursor_plane = true; > break; > default: > plane = &pipe->planes[p]; > @@ -1445,35 +1444,27 @@ void igt_display_init(igt_display_t *display, int drm_fd) > plane->rotation = (igt_rotation_t)prop_value; > } > > - if (display->has_universal_planes) { > - /* > - * If we have universal planes, we should have both > - * primary and cursor planes setup now. > - */ > - igt_assert(pipe->planes[IGT_PLANE_PRIMARY].drm_plane && > - pipe->planes[IGT_PLANE_CURSOR].drm_plane); > + /* > + * At the bare minimum, we should expect to have a primary > + * plane > + */ > + igt_assert(pipe->planes[IGT_PLANE_PRIMARY].drm_plane); > > + if (display->has_cursor_plane) { > /* > * Cursor was put in the last slot. If we have 0 or > * only 1 sprite, that's the wrong slot and we need to > * move it down. > */ > if (p != IGT_PLANE_CURSOR) { > - pipe->planes[p] = pipe->planes[IGT_PLANE_CURSOR]; > + pipe->planes[p] = > + pipe->planes[IGT_PLANE_CURSOR]; > pipe->planes[p].index = p; > memset(&pipe->planes[IGT_PLANE_CURSOR], 0, > sizeof *plane); > } > } else { > - /* > - * No universal plane support. Add drm_plane-less > - * primary and cursor planes. > - */ > - plane = &pipe->planes[IGT_PLANE_PRIMARY]; > - plane->pipe = pipe; > - plane->index = IGT_PLANE_PRIMARY; > - plane->is_primary = true; > - > + /* Add drm_plane-less cursor */ > plane = &pipe->planes[p]; > plane->pipe = pipe; > plane->index = p; > diff --git a/lib/igt_kms.h b/lib/igt_kms.h > index 6422adc..0dcb325 100644 > --- a/lib/igt_kms.h > +++ b/lib/igt_kms.h > @@ -311,7 +311,7 @@ struct igt_display { > unsigned long pipes_in_use; > igt_output_t *outputs; > igt_pipe_t pipes[I915_MAX_PIPES]; > - bool has_universal_planes; > + bool has_cursor_plane; > bool is_atomic; > }; > > diff --git a/tests/kms_crtc_background_color.c b/tests/kms_crtc_background_color.c > index b97c114..537d4ce 100644 > --- a/tests/kms_crtc_background_color.c > +++ b/tests/kms_crtc_background_color.c > @@ -131,8 +131,6 @@ static void test_crtc_background(data_t *data) > enum pipe pipe; > int valid_tests = 0; > > - igt_require(data->display.has_universal_planes); > - > for_each_pipe_with_valid_output(display, pipe, output) { > igt_plane_t *plane; > > diff --git a/tests/kms_plane_scaling.c b/tests/kms_plane_scaling.c > index 4546ce5..368da09 100644 > --- a/tests/kms_plane_scaling.c > +++ b/tests/kms_plane_scaling.c > @@ -183,7 +183,6 @@ static void test_plane_scaling(data_t *d) > int valid_tests = 0; > int primary_plane_scaling = 0; /* For now */ > > - igt_require(d->display.has_universal_planes); > igt_require(d->num_scalers); > > for_each_pipe_with_valid_output(display, pipe, output) { > diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c > index 6cc1533..796b448 100644 > --- a/tests/kms_rotation_crc.c > +++ b/tests/kms_rotation_crc.c > @@ -106,10 +106,8 @@ static void commit_crtc(data_t *data, igt_output_t *output, igt_plane_t *plane) > if (!plane->is_cursor) > igt_plane_set_position(plane, data->pos_x, data->pos_y); > > - if (plane->is_primary || plane->is_cursor) { > - igt_require(data->display.has_universal_planes); > + if (plane->is_primary || plane->is_cursor) > commit = COMMIT_UNIVERSAL; > - } > > if (data->display.is_atomic) > commit = COMMIT_ATOMIC; > @@ -248,10 +246,11 @@ static void test_plane_rotation(data_t *data, enum igt_plane plane_type) > unsigned int flip_count; > int ret; > > - if (plane_type == IGT_PLANE_PRIMARY || plane_type == IGT_PLANE_CURSOR) { > - igt_require(data->display.has_universal_planes); > + if (plane_type == IGT_PLANE_PRIMARY || plane_type == IGT_PLANE_CURSOR) > commit = COMMIT_UNIVERSAL; > - } > + > + if (plane_type == IGT_PLANE_CURSOR) > + igt_require(display->has_cursor_plane); > > if (data->display.is_atomic) > commit = COMMIT_ATOMIC; > @@ -341,10 +340,11 @@ static void test_plane_rotation_ytiled_obj(data_t *data, enum igt_plane plane_ty > plane = igt_output_get_plane(output, plane_type); > igt_require(igt_plane_supports_rotation(plane)); > > - if (plane_type == IGT_PLANE_PRIMARY || plane_type == IGT_PLANE_CURSOR) { > - igt_require(data->display.has_universal_planes); > + if (plane_type == IGT_PLANE_PRIMARY || plane_type == IGT_PLANE_CURSOR) > commit = COMMIT_UNIVERSAL; > - } > + > + if (plane_type == IGT_PLANE_CURSOR) > + igt_require(display->has_cursor_plane); > > if (data->display.is_atomic) > commit = COMMIT_ATOMIC; > @@ -408,10 +408,11 @@ static void test_plane_rotation_exhaust_fences(data_t *data, enum igt_plane plan > plane = igt_output_get_plane(output, plane_type); > igt_require(igt_plane_supports_rotation(plane)); > > - if (plane_type == IGT_PLANE_PRIMARY || plane_type == IGT_PLANE_CURSOR) { > - igt_require(data->display.has_universal_planes); > + if (plane_type == IGT_PLANE_PRIMARY || plane_type == IGT_PLANE_CURSOR) > commit = COMMIT_UNIVERSAL; > - } > + > + if (plane_type == IGT_PLANE_CURSOR) > + igt_require(display->has_cursor_plane); > > if (data->display.is_atomic) > commit = COMMIT_ATOMIC; > diff --git a/tests/kms_universal_plane.c b/tests/kms_universal_plane.c > index b06b51e..b9e0651 100644 > --- a/tests/kms_universal_plane.c > +++ b/tests/kms_universal_plane.c > @@ -134,7 +134,6 @@ functional_test_pipe(data_t *data, enum pipe pipe, igt_output_t *output) > int num_primary = 0, num_cursor = 0; > int i; > > - igt_assert(data->display.has_universal_planes); > igt_skip_on(pipe >= display->n_pipes); > > igt_info("Testing connector %s using pipe %s\n", igt_output_name(output), > @@ -573,8 +572,8 @@ cursor_leak_test_pipe(data_t *data, enum pipe pipe, igt_output_t *output) > int r, g, b; > int count1, count2; > > - igt_assert(data->display.has_universal_planes); > igt_skip_on(pipe >= display->n_pipes); > + igt_require(display->has_cursor_plane); > > igt_output_set_pipe(output, pipe); > mode = igt_output_get_mode(output); > @@ -783,8 +782,6 @@ igt_main > > igt_require_pipe_crc(); > igt_display_init(&data.display, data.drm_fd); > - > - igt_require(data.display.has_universal_planes); > } > > for (int pipe = 0; pipe < I915_MAX_PIPES; pipe++) > -- > 2.9.3 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx