On Thu, Oct 12, 2017 at 12:55:39PM +0200, Maarten Lankhorst wrote: > If the connected output is disabled before this test is run, then the test > will fail because actual_brightness stays at 0 instead of the value > of the desired brightness. Fix this by reading intel_backlight/device > for the output name, and enable that output at start of this test. > > Changes since v1: > - Enable the connected output, instead of enabling all outputs. > Changes since v2: > - Set a dummy fb, just in case. > Changes since v3: > - Use igt_output_get_plane_type, not get_plane. > > Sample failure: > IGT-Version: 1.20-g01c550a27986 (x86_64) (Linux: 4.14.0-rc3-fbconhax+ x86_64) > (pm_backlight:1203) CRITICAL: Test assertion failure function test_and_verify, file pm_backlight.c:111: > (pm_backlight:1203) CRITICAL: Failed assertion: ({ typeof(0) _a = (0); typeof(val - tolerance) _b = (val - tolerance); _a > _b ? _a : _b; }) <= result > (pm_backlight:1203) CRITICAL: error: 91200 > 0 > > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> > --- > tests/pm_backlight.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 47 insertions(+) > > diff --git a/tests/pm_backlight.c b/tests/pm_backlight.c > index 8258d4e4c124..a695f90913fd 100644 > --- a/tests/pm_backlight.c > +++ b/tests/pm_backlight.c > @@ -155,13 +155,56 @@ igt_main > { > struct context context = {0}; > int old; > + igt_display_t display; > + struct igt_fb fb; > > igt_skip_on_simulation(); > > igt_fixture { > + enum pipe pipe; > + igt_output_t *output; > + bool found = false; > + char full_name[32] = {}; > + char *name; > + drmModeModeInfo *mode; > + igt_plane_t *primary; > + > /* Get the max value and skip the whole test if sysfs interface not available */ > igt_skip_on(backlight_read(&old, "brightness")); > igt_assert(backlight_read(&context.max, "max_brightness") > -1); > + > + /* > + * Backlight tests requires the output to be enabled, > + * try to enable all. > + */ > + kmstest_set_vt_graphics_mode(); > + igt_display_init(&display, drm_open_driver(DRIVER_INTEL)); > + > + /* should be ../../cardX-$output */ > + igt_assert_lt(12, readlink(BACKLIGHT_PATH "/device", full_name, sizeof(full_name) - 1)); > + name = basename(full_name); > + > + for_each_pipe_with_valid_output(&display, pipe, output) { > + if (strcmp(name + 6, output->name)) This string magic isn't all that clear here. I think it would have been cleaner to iterate all connected outputs and look for the backlight under each. But I can't be bothered to care that much so Reviewed-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > + continue; > + > + found = true; > + break; > + } > + > + igt_assert_f(found, "Could not map \"%s\" to output (%s?)\n", name, name + 6); > + > + igt_output_set_pipe(output, pipe); > + mode = igt_output_get_mode(output); > + > + igt_create_pattern_fb(display.drm_fd, > + mode->hdisplay, mode->vdisplay, > + DRM_FORMAT_XRGB8888, > + LOCAL_DRM_FORMAT_MOD_NONE, &fb); > + primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY); > + igt_plane_set_fb(primary, &fb); > + > + igt_display_commit2(&display, display.is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY); > } > > igt_subtest("basic-brightness") > @@ -174,5 +217,9 @@ igt_main > igt_fixture { > /* Restore old brightness */ > backlight_write(old, "brightness"); > + > + igt_display_fini(&display); > + igt_remove_fb(display.drm_fd, &fb); > + close(display.drm_fd); > } > } > -- > 2.14.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Ville Syrjälä Intel OTC _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx