Reviewed-by: Lyude Paul <lyude@xxxxxxxxxx> On Thu, 2017-11-16 at 13:45 +0100, Maarten Lankhorst wrote: > Instead of first calling kmstest_unset_all_crtcs, and calling > igt_display_init for each test, use igt_display_reset to reset > igt_display between tests, and use atomic commit to disable all > unused crtcs in enable_output(). > > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> > --- > tests/chamelium.c | 45 ++++++++++++--------------------------------- > 1 file changed, 12 insertions(+), 33 deletions(-) > > diff --git a/tests/chamelium.c b/tests/chamelium.c > index d4a185e76873..8855a8300049 100644 > --- a/tests/chamelium.c > +++ b/tests/chamelium.c > @@ -33,6 +33,7 @@ > typedef struct { > struct chamelium *chamelium; > struct chamelium_port **ports; > + igt_display_t display; > int port_count; > > int drm_fd; > @@ -409,9 +410,9 @@ test_suspend_resume_edid_change(data_t *data, struct > chamelium_port *port, > > static igt_output_t * > prepare_output(data_t *data, > - igt_display_t *display, > struct chamelium_port *port) > { > + igt_display_t *display = &data->display; > igt_output_t *output; > drmModeRes *res; > drmModeConnector *connector = > @@ -420,7 +421,6 @@ prepare_output(data_t *data, > bool found = false; > > igt_assert(res = drmModeGetResources(data->drm_fd)); > - kmstest_unset_all_crtcs(data->drm_fd, res); > > /* The chamelium's default EDID has a lot of resolutions, way more > then > * we need to test > @@ -430,11 +430,9 @@ prepare_output(data_t *data, > chamelium_plug(data->chamelium, port); > wait_for_connector(data, port, DRM_MODE_CONNECTED); > > - igt_display_init(display, data->drm_fd); > - output = igt_output_from_connector(display, connector); > + igt_display_reset(display); > > - igt_assert(kmstest_probe_connector_config( > - data->drm_fd, connector->connector_id, ~0, &output- > >config)); > + output = igt_output_from_connector(display, connector); > > for_each_pipe(display, pipe) { > if (!igt_pipe_connector_valid(pipe, output)) > @@ -477,7 +475,7 @@ enable_output(data_t *data, > igt_pipe_obj_replace_prop_blob(primary->pipe, IGT_CRTC_GAMMA_LUT, > NULL, 0); > igt_pipe_obj_replace_prop_blob(primary->pipe, IGT_CRTC_CTM, NULL, > 0); > > - igt_display_commit(display); > + igt_display_commit2(display, COMMIT_ATOMIC); > > if (chamelium_port_get_type(port) == DRM_MODE_CONNECTOR_VGA) > usleep(250000); > @@ -485,25 +483,10 @@ enable_output(data_t *data, > drmModeFreeConnector(connector); > } > > -static void > -disable_output(data_t *data, > - struct chamelium_port *port, > - igt_output_t *output) > -{ > - igt_display_t *display = output->display; > - igt_plane_t *primary = igt_output_get_plane_type(output, > DRM_PLANE_TYPE_PRIMARY); > - igt_assert(primary); > - > - /* Disable the display */ > - igt_plane_set_fb(primary, NULL); > - igt_display_commit(display); > -} > - > static void > test_display_crc(data_t *data, struct chamelium_port *port, int count, > bool fast) > { > - igt_display_t display; > igt_output_t *output; > igt_plane_t *primary; > igt_crc_t *crc; > @@ -517,7 +500,7 @@ test_display_crc(data_t *data, struct chamelium_port > *port, int count, > > reset_state(data, port); > > - output = prepare_output(data, &display, port); > + output = prepare_output(data, port); > connector = chamelium_port_get_connector(data->chamelium, port, > false); > primary = igt_output_get_plane_type(output, > DRM_PLANE_TYPE_PRIMARY); > igt_assert(primary); > @@ -561,18 +544,15 @@ test_display_crc(data_t *data, struct chamelium_port > *port, int count, > free(expected_crc); > free(crc); > > - disable_output(data, port, output); > igt_remove_fb(data->drm_fd, &fb); > } > > drmModeFreeConnector(connector); > - igt_display_fini(&display); > } > > static void > test_display_frame_dump(data_t *data, struct chamelium_port *port) > { > - igt_display_t display; > igt_output_t *output; > igt_plane_t *primary; > struct igt_fb fb; > @@ -583,7 +563,7 @@ test_display_frame_dump(data_t *data, struct > chamelium_port *port) > > reset_state(data, port); > > - output = prepare_output(data, &display, port); > + output = prepare_output(data, port); > connector = chamelium_port_get_connector(data->chamelium, port, > false); > primary = igt_output_get_plane_type(output, > DRM_PLANE_TYPE_PRIMARY); > igt_assert(primary); > @@ -608,18 +588,15 @@ test_display_frame_dump(data_t *data, struct > chamelium_port *port) > chamelium_destroy_frame_dump(frame); > } > > - disable_output(data, port, output); > igt_remove_fb(data->drm_fd, &fb); > } > > drmModeFreeConnector(connector); > - igt_display_fini(&display); > } > > static void > test_analog_frame_dump(data_t *data, struct chamelium_port *port) > { > - igt_display_t display; > igt_output_t *output; > igt_plane_t *primary; > struct igt_fb fb; > @@ -631,7 +608,7 @@ test_analog_frame_dump(data_t *data, struct > chamelium_port *port) > > reset_state(data, port); > > - output = prepare_output(data, &display, port); > + output = prepare_output(data, port); > connector = chamelium_port_get_connector(data->chamelium, port, > false); > primary = igt_output_get_plane_type(output, > DRM_PLANE_TYPE_PRIMARY); > igt_assert(primary); > @@ -666,12 +643,10 @@ test_analog_frame_dump(data_t *data, struct > chamelium_port *port) > > chamelium_destroy_frame_dump(frame); > > - disable_output(data, port, output); > igt_remove_fb(data->drm_fd, &fb); > } > > drmModeFreeConnector(connector); > - igt_display_fini(&display); > } > > static void > @@ -773,6 +748,9 @@ igt_main > > /* So fbcon doesn't try to reprobe things itself */ > kmstest_set_vt_graphics_mode(); > + > + igt_display_init(&data.display, data.drm_fd); > + igt_require(data.display.is_atomic); > } > > igt_subtest_group { > @@ -952,6 +930,7 @@ igt_main > } > > igt_fixture { > + igt_display_fini(&data.display); > close(data.drm_fd); > } > } _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx