From: Lyude Paul <lyude@redhat.com>
To: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH i-g-t 1/4] lib/igt_kms: Add igt_display_reset function.
Date: Fri, 17 Nov 2017 19:00:50 -0500 [thread overview]
Message-ID: <1510963250.22441.2.camel@redhat.com> (raw)
In-Reply-To: <20171116124522.4673-1-maarten.lankhorst@linux.intel.com>
Reviewed-by: Lyude Paul <lyude@redhat.com>
On Thu, 2017-11-16 at 13:45 +0100, Maarten Lankhorst wrote:
> A lot of code duplicates this, but it should be handled in the core.
> Add it and use it after igt_display_init(), the tests have to be
> converted one by one.
>
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> ---
> lib/igt_kms.c | 162 +++++++++++++++++++++++++++++++++++++----------------
> -----
> lib/igt_kms.h | 1 +
> 2 files changed, 104 insertions(+), 59 deletions(-)
>
> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> index 1d26b8ddbf43..239f4f17d22e 100644
> --- a/lib/igt_kms.c
> +++ b/lib/igt_kms.c
> @@ -1549,29 +1549,14 @@ static void igt_output_refresh(igt_output_t *output)
> -1);
> }
>
> - if (output->config.connector) {
> + if (output->config.connector)
> igt_atomic_fill_connector_props(display, output,
> IGT_NUM_CONNECTOR_PROPS, igt_connector_prop_names);
>
> - if (output->props[IGT_CONNECTOR_BROADCAST_RGB])
> - igt_output_set_prop_value(output,
> - IGT_CONNECTOR_BROADCAST_R
> GB,
> - BROADCAST_RGB_FULL);
> - }
> -
> LOG(display, "%s: Selecting pipe %s\n", output->name,
> kmstest_pipe_name(output->pending_pipe));
> }
>
> -static bool
> -get_plane_property(int drm_fd, uint32_t plane_id, const char *name,
> - uint32_t *prop_id /* out */, uint64_t *value /* out */,
> - drmModePropertyPtr *prop /* out */)
> -{
> - return kmstest_get_property(drm_fd, plane_id,
> DRM_MODE_OBJECT_PLANE,
> - name, prop_id, value, prop);
> -}
> -
> static int
> igt_plane_set_property(igt_plane_t *plane, uint32_t prop_id, uint64_t
> value)
> {
> @@ -1582,15 +1567,6 @@ igt_plane_set_property(igt_plane_t *plane, uint32_t
> prop_id, uint64_t value)
> DRM_MODE_OBJECT_PLANE, prop_id, value);
> }
>
> -static bool
> -get_crtc_property(int drm_fd, uint32_t crtc_id, const char *name,
> - uint32_t *prop_id /* out */, uint64_t *value /* out */,
> - drmModePropertyPtr *prop /* out */)
> -{
> - return kmstest_get_property(drm_fd, crtc_id, DRM_MODE_OBJECT_CRTC,
> - name, prop_id, value, prop);
> -}
> -
> /*
> * Walk a plane's property list to determine its type. If we don't
> * find a type property, then the kernel doesn't support universal
> @@ -1601,14 +1577,110 @@ static int get_drm_plane_type(int drm_fd, uint32_t
> plane_id)
> uint64_t value;
> bool has_prop;
>
> - has_prop = get_plane_property(drm_fd, plane_id, "type",
> - NULL /* prop_id */, &value, NULL);
> + has_prop = kmstest_get_property(drm_fd, plane_id,
> DRM_MODE_OBJECT_PLANE,
> + "type", NULL, &value, NULL);
> if (has_prop)
> return (int)value;
>
> return DRM_PLANE_TYPE_OVERLAY;
> }
>
> +static void igt_plane_reset(igt_plane_t *plane)
> +{
> + /* Reset src coordinates. */
> + igt_plane_set_prop_value(plane, IGT_PLANE_SRC_X, 0);
> + igt_plane_set_prop_value(plane, IGT_PLANE_SRC_Y, 0);
> + igt_plane_set_prop_value(plane, IGT_PLANE_SRC_W, 0);
> + igt_plane_set_prop_value(plane, IGT_PLANE_SRC_H, 0);
> +
> + /* Reset crtc coordinates. */
> + igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_X, 0);
> + igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_Y, 0);
> + igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_W, 0);
> + igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_H, 0);
> +
> + /* Reset binding to fb and crtc. */
> + igt_plane_set_prop_value(plane, IGT_PLANE_FB_ID, 0);
> + igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_ID, 0);
> +
> + /* Use default rotation */
> + if (igt_plane_has_prop(plane, IGT_PLANE_ROTATION))
> + igt_plane_set_prop_value(plane, IGT_PLANE_ROTATION,
> + IGT_ROTATION_0);
> +
> + igt_plane_clear_prop_changed(plane, IGT_PLANE_IN_FENCE_FD);
> + plane->values[IGT_PLANE_IN_FENCE_FD] = ~0ULL;
> +}
> +
> +static void igt_pipe_reset(igt_pipe_t *pipe)
> +{
> + igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_MODE_ID, 0);
> + igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_ACTIVE, 0);
> + igt_pipe_obj_clear_prop_changed(pipe, IGT_CRTC_OUT_FENCE_PTR);
> +
> + pipe->out_fence_fd = -1;
> +}
> +
> +static void igt_output_reset(igt_output_t *output)
> +{
> + output->pending_pipe = PIPE_NONE;
> + output->use_override_mode = false;
> + memset(&output->override_mode, 0, sizeof(output->override_mode));
> +
> + igt_output_set_prop_value(output, IGT_CONNECTOR_CRTC_ID, 0);
> +
> + if (igt_output_has_prop(output, IGT_CONNECTOR_BROADCAST_RGB))
> + igt_output_set_prop_value(output,
> IGT_CONNECTOR_BROADCAST_RGB,
> + BROADCAST_RGB_FULL);
> +}
> +
> +/**
> + * igt_display_reset:
> + * @display: a pointer to an #igt_display_t structure
> + *
> + * Reset basic pipes, connectors and planes on @display back to default
> values.
> + * In particular, the following properties will be reset:
> + *
> + * For outputs:
> + * - %IGT_CONNECTOR_CRTC_ID
> + * - %IGT_CONNECTOR_BROADCAST_RGB (if applicable)
> + * - igt_output_override_mode() to default.
> + *
> + * For pipes:
> + * - %IGT_CRTC_MODE_ID (leaked)
> + * - %IGT_CRTC_ACTIVE
> + * - %IGT_CRTC_OUT_FENCE_PTR
> + *
> + * For planes:
> + * - %IGT_PLANE_SRC_*
> + * - %IGT_PLANE_CRTC_*
> + * - %IGT_PLANE_FB_ID
> + * - %IGT_PLANE_CRTC_ID
> + * - %IGT_PLANE_ROTATION
> + * - %IGT_PLANE_IN_FENCE_FD
> + */
> +void igt_display_reset(igt_display_t *display)
> +{
> + enum pipe pipe;
> + int i;
> +
> + for_each_pipe(display, pipe) {
> + igt_pipe_t *pipe_obj = &display->pipes[pipe];
> + igt_plane_t *plane;
> +
> + for_each_plane_on_pipe(display, pipe, plane)
> + igt_plane_reset(plane);
> +
> + igt_pipe_reset(pipe_obj);
> + }
> +
> + for (i = 0; i < display->n_outputs; i++) {
> + igt_output_t *output = &display->outputs[i];
> +
> + igt_output_reset(output);
> + }
> +}
> +
> /**
> * igt_display_init:
> * @display: a pointer to an #igt_display_t structure
> @@ -1648,7 +1720,7 @@ void igt_display_init(igt_display_t *display, int
> drm_fd)
> plane_resources = drmModeGetPlaneResources(display->drm_fd);
> igt_assert(plane_resources);
>
> - for (i = 0; i < display->n_pipes; i++) {
> + for_each_pipe(display, i) {
> igt_pipe_t *pipe = &display->pipes[i];
> igt_plane_t *plane;
> int p = 1;
> @@ -1661,19 +1733,9 @@ void igt_display_init(igt_display_t *display, int
> drm_fd)
> pipe->plane_cursor = -1;
> pipe->plane_primary = -1;
> pipe->planes = NULL;
> - pipe->out_fence_fd = -1;
>
> igt_fill_pipe_props(display, pipe, IGT_NUM_CRTC_PROPS,
> igt_crtc_prop_names);
>
> - /* Force modeset disable on first commit */
> - igt_pipe_obj_set_prop_changed(pipe, IGT_CRTC_MODE_ID);
> - igt_pipe_obj_set_prop_changed(pipe, IGT_CRTC_ACTIVE);
> -
> - get_crtc_property(display->drm_fd, pipe->crtc_id,
> - "background_color", NULL,
> - &pipe->values[IGT_CRTC_BACKGROUND],
> - NULL);
> -
> /* count number of valid planes */
> for (j = 0; j < plane_resources->count_planes; j++) {
> drmModePlane *drm_plane;
> @@ -1730,24 +1792,6 @@ void igt_display_init(igt_display_t *display, int
> drm_fd)
> plane->values[IGT_PLANE_IN_FENCE_FD] = ~0ULL;
>
> igt_fill_plane_props(display, plane,
> IGT_NUM_PLANE_PROPS, igt_plane_prop_names);
> -
> - get_plane_property(display->drm_fd, drm_plane-
> >plane_id,
> - "rotation",
> - &plane-
> >props[IGT_PLANE_ROTATION],
> - &plane-
> >values[IGT_PLANE_ROTATION],
> - NULL);
> -
> - /* Clear any residual framebuffer info on first
> commit. */
> - igt_plane_set_prop_changed(plane, IGT_PLANE_FB_ID);
> - igt_plane_set_prop_changed(plane,
> IGT_PLANE_CRTC_ID);
> -
> - /*
> - * CRTC_X/Y are not changed in igt_plane_set_fb, so
> - * force them to be sanitized in case they contain
> - * garbage.
> - */
> - igt_plane_set_prop_changed(plane,
> IGT_PLANE_CRTC_X);
> - igt_plane_set_prop_changed(plane,
> IGT_PLANE_CRTC_Y);
> }
>
> /*
> @@ -1782,18 +1826,18 @@ void igt_display_init(igt_display_t *display, int
> drm_fd)
> * a pipe is set with igt_output_set_pipe().
> */
> output->force_reprobe = true;
> - output->pending_pipe = PIPE_NONE;
> output->id = resources->connectors[i];
> output->display = display;
>
> igt_output_refresh(output);
> -
> - igt_output_set_prop_changed(output, IGT_CONNECTOR_CRTC_ID);
> }
>
> drmModeFreePlaneResources(plane_resources);
> drmModeFreeResources(resources);
>
> + /* Set reasonable default values for every object in the display.
> */
> + igt_display_reset(display);
> +
> LOG_UNINDENT(display);
> }
>
> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
> index acc82913e0b7..e1883bf1b8a3 100644
> --- a/lib/igt_kms.h
> +++ b/lib/igt_kms.h
> @@ -353,6 +353,7 @@ struct igt_display {
>
> void igt_display_init(igt_display_t *display, int drm_fd);
> void igt_display_fini(igt_display_t *display);
> +void igt_display_reset(igt_display_t *display);
> int igt_display_commit2(igt_display_t *display, enum igt_commit_style s);
> int igt_display_commit(igt_display_t *display);
> int igt_display_try_commit_atomic(igt_display_t *display, uint32_t flags,
> void *user_data);
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
prev parent reply other threads:[~2017-11-18 0:00 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-16 12:45 [PATCH i-g-t 1/4] lib/igt_kms: Add igt_display_reset function Maarten Lankhorst
2017-11-16 12:45 ` [PATCH i-g-t 2/4] lib/igt_kms: Make igt_output_from_connector probe all outputs Maarten Lankhorst
2017-11-18 0:14 ` Lyude Paul
2017-11-16 12:45 ` [PATCH i-g-t 3/4] tests/chamelium: Only initialize igt_display once Maarten Lankhorst
2017-11-18 0:05 ` Lyude Paul
2017-11-16 12:45 ` [PATCH i-g-t 4/4] tests: Rename chamelium to kms_chamelium Maarten Lankhorst
2017-11-18 0:42 ` Lyude Paul
2017-11-21 14:13 ` Maarten Lankhorst
2017-11-16 13:44 ` ✗ Fi.CI.BAT: failure for series starting with [1/4] lib/igt_kms: Add igt_display_reset function Patchwork
2017-11-16 16:07 ` [PATCH i-g-t] lib/igt_kms: Add igt_display_reset function, v2 Maarten Lankhorst
2017-11-16 18:42 ` [PATCH i-g-t] lib/igt_kms: Add igt_display_reset function, v3 Maarten Lankhorst
2017-11-16 16:23 ` ✗ Fi.CI.BAT: failure for series starting with lib/igt_kms: Add igt_display_reset function, v2. (rev2) Patchwork
2017-11-16 19:03 ` ✓ Fi.CI.BAT: success for series starting with lib/igt_kms: Add igt_display_reset function, v3. (rev3) Patchwork
2017-11-16 19:41 ` ✓ Fi.CI.IGT: " Patchwork
2017-11-18 0:00 ` Lyude Paul [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1510963250.22441.2.camel@redhat.com \
--to=lyude@redhat.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=maarten.lankhorst@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox