* [PATCH i-g-t v2 0/8] lib/igt_kms: Convert properties to be more atomic-like.
@ 2017-09-27 18:16 Maarten Lankhorst
2017-09-27 18:16 ` [PATCH i-g-t v2 1/8] tests: Stop looking at plane private members Maarten Lankhorst
` (17 more replies)
0 siblings, 18 replies; 25+ messages in thread
From: Maarten Lankhorst @ 2017-09-27 18:16 UTC (permalink / raw)
To: intel-gfx
Instead of having to special case each property when it's added,
I want to make sure that any test can add arbitrary properties without
having to add too much code. Some of the members I want to expose directly,
and I also add a way to set a blob as property for planes and pipes,
which will be useful for the upcoming plane color management stuff.
Now with bugfixes!
Maarten Lankhorst (8):
tests: Stop looking at plane private members
lib/igt_kms: Change output->pending_crtc_idx_mask to
output->pending_pipe
lib/igt_kms: Commit primary plane when a modeset is forced on a pipe
lib/igt_kms: Rework connector properties to be more atomic, v2.
lib/igt_kms: Rework plane properties to be more atomic, v2.
lib/igt_kms: Rework pipe properties to be more atomic, v2.
igt/kms_rotation_crc : Fix flip tests for sprite plane
tests: Rename kms_pipe_color to kms_color
lib/igt_kms.c | 587 +++++++++++++++-----------------
lib/igt_kms.h | 154 ++++-----
tests/Makefile.sources | 2 +-
tests/kms_atomic_interruptible.c | 20 +-
tests/kms_atomic_transition.c | 123 +++----
tests/kms_busy.c | 7 +-
tests/{kms_pipe_color.c => kms_color.c} | 4 +-
tests/kms_concurrent.c | 4 +-
tests/kms_crtc_background_color.c | 2 +-
tests/kms_cursor_legacy.c | 8 +-
tests/kms_fbc_crc.c | 3 +-
tests/kms_panel_fitting.c | 16 +-
tests/kms_plane_scaling.c | 14 +-
tests/kms_rmfb.c | 2 +-
tests/kms_rotation_crc.c | 37 +-
15 files changed, 463 insertions(+), 520 deletions(-)
rename tests/{kms_pipe_color.c => kms_color.c} (99%)
--
2.14.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH i-g-t v2 1/8] tests: Stop looking at plane private members
2017-09-27 18:16 [PATCH i-g-t v2 0/8] lib/igt_kms: Convert properties to be more atomic-like Maarten Lankhorst
@ 2017-09-27 18:16 ` Maarten Lankhorst
2017-09-27 18:16 ` [PATCH i-g-t v2 2/8] lib/igt_kms: Change output->pending_crtc_idx_mask to output->pending_pipe Maarten Lankhorst
` (16 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: Maarten Lankhorst @ 2017-09-27 18:16 UTC (permalink / raw)
To: intel-gfx
Most of these tests have no reason to look at those members,
so try other ways of getting the information.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
lib/igt_kms.h | 21 ++++++++
tests/kms_atomic_transition.c | 117 +++++++++++++++++++++---------------------
tests/kms_busy.c | 5 +-
tests/kms_concurrent.c | 4 +-
tests/kms_cursor_legacy.c | 6 +--
tests/kms_fbc_crc.c | 3 +-
tests/kms_panel_fitting.c | 14 +----
tests/kms_plane_scaling.c | 14 +----
tests/kms_rmfb.c | 2 +-
tests/kms_rotation_crc.c | 10 ----
10 files changed, 93 insertions(+), 103 deletions(-)
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 3d1061fa08c8..62197dcfea7b 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -556,6 +556,27 @@ static inline bool igt_output_is_connected(igt_output_t *output)
igt_assert_lt(0, drmModeAtomicAddProperty(req, output->config.connector->connector_id,\
output->config.atomic_props_connector[prop], value))
+/*
+ * igt_pipe_refresh:
+ * @display: a pointer to an #igt_display_t structure
+ * @pipe: Pipe to refresh
+ * @force: Should be set to true if mode_blob is no longer considered
+ * to be valid, for example after doing an atomic commit during fork or closing display fd.
+ *
+ * Requests the pipe to be part of the state on next update.
+ * This is useful when state may have been out of sync after
+ * a fork, or we just want to be sure the pipe is included
+ * in the next commit.
+ */
+static inline void
+igt_pipe_refresh(igt_display_t *display, enum pipe pipe, bool force)
+{
+ if (force)
+ display->pipes[pipe].mode_blob = 0;
+
+ display->pipes[pipe].mode_changed = true;
+}
+
void igt_enable_connectors(void);
void igt_reset_connectors(void);
diff --git a/tests/kms_atomic_transition.c b/tests/kms_atomic_transition.c
index e22763bdf94b..48823a09aed2 100644
--- a/tests/kms_atomic_transition.c
+++ b/tests/kms_atomic_transition.c
@@ -46,6 +46,11 @@ struct plane_parms {
#define hweight32 __builtin_popcount
+/* globals for fence support */
+int *timeline;
+pthread_t *thread;
+int *seqno;
+
static void
run_primary_test(igt_display_t *display, enum pipe pipe, igt_output_t *output)
{
@@ -89,9 +94,34 @@ run_primary_test(igt_display_t *display, enum pipe pipe, igt_output_t *output)
igt_remove_fb(display->drm_fd, &fb);
}
+static void *fence_inc_thread(void *arg)
+{
+ int t = *((int *) arg);
+
+ pthread_detach(pthread_self());
+
+ usleep(5000);
+ sw_sync_timeline_inc(t, 1);
+ return NULL;
+}
+
+static void configure_fencing(igt_plane_t *plane)
+{
+ int i, fd, ret;
+
+ i = plane->index;
+
+ seqno[i]++;
+ fd = sw_sync_timeline_create_fence(timeline[i], seqno[i]);
+ igt_plane_set_fence_fd(plane, fd);
+ close(fd);
+ ret = pthread_create(&thread[i], NULL, fence_inc_thread, &timeline[i]);
+ igt_assert_eq(ret, 0);
+}
+
static void
wm_setup_plane(igt_display_t *display, enum pipe pipe,
- uint32_t mask, struct plane_parms *parms)
+ uint32_t mask, struct plane_parms *parms, bool fencing)
{
igt_plane_t *plane;
@@ -108,6 +138,9 @@ wm_setup_plane(igt_display_t *display, enum pipe pipe,
continue;
}
+ if (fencing)
+ configure_fencing(plane);
+
igt_plane_set_fb(plane, parms[i].fb);
igt_fb_set_size(parms[i].fb, plane, parms[i].width, parms[i].height);
igt_plane_set_size(plane, parms[i].width, parms[i].height);
@@ -136,7 +169,7 @@ static bool skip_on_unsupported_nonblocking_modeset(igt_display_t *display)
/* Force the next state to update all crtc's, to synchronize with the nonblocking modeset. */
for_each_pipe(display, pipe)
- display->pipes[pipe].mode_changed = true;
+ igt_pipe_refresh(display, pipe, false);
return false;
}
@@ -183,6 +216,7 @@ static void set_sprite_wh(igt_display_t *display, enum pipe pipe,
static void setup_parms(igt_display_t *display, enum pipe pipe,
const drmModeModeInfo *mode,
+ struct igt_fb *primary_fb,
struct igt_fb *argb_fb,
struct igt_fb *sprite_fb,
struct plane_parms *parms)
@@ -205,7 +239,7 @@ static void setup_parms(igt_display_t *display, enum pipe pipe,
int i = plane->index;
if (plane->type == DRM_PLANE_TYPE_PRIMARY) {
- parms[i].fb = plane->fb;
+ parms[i].fb = primary_fb;
parms[i].width = mode->hdisplay;
parms[i].height = mode->vdisplay;
} else if (plane->type == DRM_PLANE_TYPE_CURSOR) {
@@ -242,7 +276,7 @@ retry:
set_sprite_wh(display, pipe, parms, sprite_fb,
alpha, sprite_width, sprite_height);
- wm_setup_plane(display, pipe, (1 << n_planes) - 1, parms);
+ wm_setup_plane(display, pipe, (1 << n_planes) - 1, parms, false);
ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY | DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
if (ret == -EINVAL) {
@@ -300,10 +334,6 @@ retry:
sprite_width, sprite_height, alpha);
}
-int *timeline;
-pthread_t *thread;
-int *seqno;
-
static void prepare_fencing(igt_display_t *display, enum pipe pipe)
{
igt_plane_t *plane;
@@ -335,44 +365,10 @@ static void unprepare_fencing(igt_display_t *display, enum pipe pipe)
free(seqno);
}
-static void *fence_inc_thread(void *arg)
-{
- int t = *((int *) arg);
-
- pthread_detach(pthread_self());
-
- usleep(5000);
- sw_sync_timeline_inc(t, 1);
- return NULL;
-}
-
-static void configure_fencing(igt_display_t *display, enum pipe pipe)
-{
- igt_plane_t *plane;
- int i, fd, ret;
-
- for_each_plane_on_pipe(display, pipe, plane) {
-
- if (!plane->fb)
- continue;
-
- i = plane->index;
-
- seqno[i]++;
- fd = sw_sync_timeline_create_fence(timeline[i], seqno[i]);
- igt_plane_set_fence_fd(plane, fd);
- close(fd);
- ret = pthread_create(&thread[i], NULL, fence_inc_thread, &timeline[i]);
- igt_assert_eq(ret, 0);
- }
-}
-
static void atomic_commit(igt_display_t *display, enum pipe pipe, unsigned int flags, void *data, bool fencing)
{
- if (fencing) {
- configure_fencing(display, pipe);
+ if (fencing)
igt_pipe_request_out_fence(&display->pipes[pipe]);
- }
igt_display_commit_atomic(display, flags, data);
}
@@ -445,7 +441,7 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
igt_output_set_pipe(output, pipe);
- wm_setup_plane(display, pipe, 0, NULL);
+ wm_setup_plane(display, pipe, 0, NULL, false);
if (flags & DRM_MODE_ATOMIC_ALLOW_MODESET) {
skip_test = nonblocking && skip_on_unsupported_nonblocking_modeset(display);
@@ -461,7 +457,7 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
igt_display_commit2(display, COMMIT_ATOMIC);
- setup_parms(display, pipe, mode, &argb_fb, &sprite_fb, parms);
+ setup_parms(display, pipe, mode, &fb, &argb_fb, &sprite_fb, parms);
/*
* In some configurations the tests may not run to completion with all
@@ -469,7 +465,7 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
* planes to fix this
*/
while (1) {
- wm_setup_plane(display, pipe, iter_max - 1, parms);
+ wm_setup_plane(display, pipe, iter_max - 1, parms, false);
if (fencing)
igt_pipe_request_out_fence(pipe_obj);
@@ -504,7 +500,7 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
if (type == TRANSITION_AFTER_FREE) {
int fence_fd = -1;
- wm_setup_plane(display, pipe, 0, parms);
+ wm_setup_plane(display, pipe, 0, parms, fencing);
atomic_commit(display, pipe, flags, (void *)(unsigned long)0, fencing);
if (fencing) {
@@ -512,8 +508,9 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
pipe_obj->out_fence_fd = -1;
}
+ /* force planes to be part of commit */
for_each_plane_on_pipe(display, pipe, plane)
- plane->fb_changed = true;
+ igt_plane_set_position(plane, 0, 0);
igt_display_commit2(display, COMMIT_ATOMIC);
@@ -530,7 +527,7 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
for (i = 0; i < iter_max; i++) {
igt_output_set_pipe(output, pipe);
- wm_setup_plane(display, pipe, i, parms);
+ wm_setup_plane(display, pipe, i, parms, fencing);
atomic_commit(display, pipe, flags, (void *)(unsigned long)i, fencing);
wait_for_transition(display, pipe, nonblocking, fencing);
@@ -538,7 +535,7 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
if (type == TRANSITION_MODESET_DISABLE) {
igt_output_set_pipe(output, PIPE_NONE);
- wm_setup_plane(display, pipe, 0, parms);
+ wm_setup_plane(display, pipe, 0, parms, fencing);
atomic_commit(display, pipe, flags, (void *) 0UL, fencing);
wait_for_transition(display, pipe, nonblocking, fencing);
@@ -547,7 +544,7 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
/* i -> i+1 will be done when i increases, can be skipped here */
for (j = iter_max - 1; j > i + 1; j--) {
- wm_setup_plane(display, pipe, j, parms);
+ wm_setup_plane(display, pipe, j, parms, fencing);
if (type == TRANSITION_MODESET)
igt_output_override_mode(output, &override_mode);
@@ -555,7 +552,7 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
atomic_commit(display, pipe, flags, (void *)(unsigned long) j, fencing);
wait_for_transition(display, pipe, nonblocking, fencing);
- wm_setup_plane(display, pipe, i, parms);
+ wm_setup_plane(display, pipe, i, parms, fencing);
if (type == TRANSITION_MODESET)
igt_output_override_mode(output, NULL);
@@ -666,15 +663,19 @@ static unsigned set_combinations(igt_display_t *display, unsigned mask, struct i
return event_mask;
}
-static void refresh_primaries(igt_display_t *display)
+static void refresh_primaries(igt_display_t *display, int mask)
{
enum pipe pipe;
igt_plane_t *plane;
- for_each_pipe(display, pipe)
+ for_each_pipe(display, pipe) {
+ if (!((1 << pipe) & mask))
+ continue;
+
for_each_plane_on_pipe(display, pipe, plane)
- if (plane->type == DRM_PLANE_TYPE_PRIMARY && plane->fb)
- plane->fb_changed = true;
+ if (plane->type == DRM_PLANE_TYPE_PRIMARY)
+ igt_plane_set_position(plane, 0, 0);
+ }
}
static void collect_crcs_mask(igt_pipe_crc_t **pipe_crcs, unsigned mask, igt_crc_t *crcs)
@@ -783,7 +784,7 @@ static void run_modeset_tests(igt_display_t *display, int howmany, bool nonblock
collect_crcs_mask(pipe_crcs, j, crcs[1]);
- refresh_primaries(display);
+ refresh_primaries(display, j);
commit_display(display, j, nonblocking);
collect_crcs_mask(pipe_crcs, j, crcs[2]);
@@ -794,7 +795,7 @@ static void run_modeset_tests(igt_display_t *display, int howmany, bool nonblock
commit_display(display, event_mask, nonblocking);
collect_crcs_mask(pipe_crcs, i, crcs[3]);
- refresh_primaries(display);
+ refresh_primaries(display, i);
commit_display(display, i, nonblocking);
collect_crcs_mask(pipe_crcs, i, crcs[4]);
diff --git a/tests/kms_busy.c b/tests/kms_busy.c
index 7e31c2c82dc5..f430beaf7373 100644
--- a/tests/kms_busy.c
+++ b/tests/kms_busy.c
@@ -146,7 +146,10 @@ static void flip_to_fb(igt_display_t *dpy, int pipe,
if (modeset) {
igt_set_module_param_int("enable_hangcheck", 1);
- dpy->pipes[pipe].mode_blob = 0;
+
+ /* Clear old mode blob. */
+ igt_pipe_refresh(dpy, pipe, true);
+
igt_output_set_pipe(output, pipe);
igt_display_commit2(dpy, COMMIT_ATOMIC);
}
diff --git a/tests/kms_concurrent.c b/tests/kms_concurrent.c
index 5d1e0bc5ad19..7f44c596b4c4 100644
--- a/tests/kms_concurrent.c
+++ b/tests/kms_concurrent.c
@@ -91,7 +91,7 @@ static void test_fini(data_t *data, enum pipe pipe, int n_planes,
{
int i;
- data->display.pipes[pipe].mode_blob = 0;
+ igt_pipe_refresh(&data->display, pipe, true);
for (i = 0; i < n_planes; i++) {
igt_plane_t *plane = data->plane[i];
@@ -292,7 +292,7 @@ test_resolution_with_output(data_t *data, enum pipe pipe, igt_output_t *output)
i = 0;
while (i < iterations || loop_forever) {
- data->display.pipes[pipe].mode_blob = 0;
+ igt_pipe_refresh(&data->display, pipe, true);
mode_hi = igt_output_get_mode(output);
mode_lo = get_lowres_mode(data, mode_hi, output);
diff --git a/tests/kms_cursor_legacy.c b/tests/kms_cursor_legacy.c
index ba7c3f51ba21..65a001a9dec0 100644
--- a/tests/kms_cursor_legacy.c
+++ b/tests/kms_cursor_legacy.c
@@ -784,7 +784,7 @@ static bool skip_on_unsupported_nonblocking_modeset(igt_display_t *display)
/* Force the next state to update all crtc's, to synchronize with the nonblocking modeset. */
for_each_pipe(display, pipe)
- display->pipes[pipe].mode_changed = true;
+ igt_pipe_refresh(display, pipe, false);
return false;
}
@@ -971,8 +971,8 @@ static void two_screens_flip_vs_cursor(igt_display_t *display, int nloops, bool
if (modeset) {
/* wait for pending modeset and page flip to complete, to prevent -EBUSY */
- display->pipes[pipe].mode_changed = true;
- display->pipes[pipe2].mode_changed = true;
+ igt_pipe_refresh(display, pipe, false);
+ igt_pipe_refresh(display, pipe2, false);
igt_display_commit2(display, COMMIT_ATOMIC);
}
}
diff --git a/tests/kms_fbc_crc.c b/tests/kms_fbc_crc.c
index 08abb8b4b95e..06234566c232 100644
--- a/tests/kms_fbc_crc.c
+++ b/tests/kms_fbc_crc.c
@@ -461,8 +461,7 @@ static void reset_display(data_t *data)
igt_pipe_t *pipe = &display->pipes[pipe_id];
igt_plane_t *plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
- if (plane->fb)
- igt_plane_set_fb(plane, NULL);
+ igt_plane_set_fb(plane, NULL);
}
for_each_connected_output(display, data->output)
diff --git a/tests/kms_panel_fitting.c b/tests/kms_panel_fitting.c
index 5266862a70cf..85a231e60ea2 100644
--- a/tests/kms_panel_fitting.c
+++ b/tests/kms_panel_fitting.c
@@ -84,19 +84,7 @@ static void prepare_crtc(data_t *data, igt_output_t *output, enum pipe pipe,
}
igt_plane_set_fb(plane, &data->fb1);
- if (s == COMMIT_LEGACY) {
- int ret;
- ret = drmModeSetCrtc(data->drm_fd,
- plane->pipe->crtc_id,
- data->fb_id1,
- plane->src_x, plane->src_y,
- &output->id,
- 1,
- mode);
- igt_assert_eq(ret, 0);
- } else {
- igt_display_commit2(display, s);
- }
+ igt_display_commit2(display, s);
}
static void cleanup_crtc(data_t *data, igt_output_t *output, igt_plane_t *plane)
diff --git a/tests/kms_plane_scaling.c b/tests/kms_plane_scaling.c
index 1457894aaa10..5ed69f35f267 100644
--- a/tests/kms_plane_scaling.c
+++ b/tests/kms_plane_scaling.c
@@ -93,19 +93,7 @@ static void prepare_crtc(data_t *data, igt_output_t *output, enum pipe pipe,
}
igt_plane_set_fb(plane, &data->fb1);
- if (s == COMMIT_LEGACY) {
- int ret;
- ret = drmModeSetCrtc(data->drm_fd,
- plane->pipe->crtc_id,
- data->fb_id1,
- plane->src_x, plane->src_y,
- &output->id,
- 1,
- mode);
- igt_assert_eq(ret, 0);
- } else {
- igt_display_commit2(display, s);
- }
+ igt_display_commit2(display, s);
}
static void cleanup_crtc(data_t *data, igt_output_t *output, igt_plane_t *plane)
diff --git a/tests/kms_rmfb.c b/tests/kms_rmfb.c
index 9f1f564e54aa..c97adceea761 100644
--- a/tests/kms_rmfb.c
+++ b/tests/kms_rmfb.c
@@ -102,7 +102,7 @@ test_rmfb(struct rmfb_data *data, igt_output_t *output, enum pipe pipe, bool reo
drmSetClientCap(data->drm_fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1);
drmSetClientCap(data->drm_fd, DRM_CLIENT_CAP_ATOMIC, 1);
- data->display.pipes[pipe].mode_blob = 0;
+ igt_pipe_refresh(&data->display, pipe, true);
} else {
igt_remove_fb(data->drm_fd, &fb);
igt_remove_fb(data->drm_fd, &argb_fb);
diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
index 21e264addc09..4d2ef1c184f0 100644
--- a/tests/kms_rotation_crc.c
+++ b/tests/kms_rotation_crc.c
@@ -465,12 +465,6 @@ static void test_plane_rotation_ytiled_obj(data_t *data,
igt_plane_set_fb(plane, &data->fb);
igt_plane_set_size(plane, h, w);
- if (commit < COMMIT_ATOMIC)
- drmModeObjectSetProperty(fd, plane->drm_plane->plane_id,
- DRM_MODE_OBJECT_PLANE,
- plane->rotation_property,
- plane->rotation);
-
ret = igt_display_try_commit2(display, commit);
igt_output_set_pipe(output, PIPE_NONE);
@@ -562,10 +556,6 @@ static void test_plane_rotation_exhaust_fences(data_t *data,
igt_plane_set_rotation(plane, IGT_ROTATION_90);
igt_plane_set_size(plane, h, w);
- drmModeObjectSetProperty(fd, plane->drm_plane->plane_id,
- DRM_MODE_OBJECT_PLANE,
- plane->rotation_property,
- plane->rotation);
igt_display_commit2(display, commit);
if (ret) {
igt_warn("failed to commit hardware rotated fb: %i\n", ret);
--
2.14.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH i-g-t v2 2/8] lib/igt_kms: Change output->pending_crtc_idx_mask to output->pending_pipe
2017-09-27 18:16 [PATCH i-g-t v2 0/8] lib/igt_kms: Convert properties to be more atomic-like Maarten Lankhorst
2017-09-27 18:16 ` [PATCH i-g-t v2 1/8] tests: Stop looking at plane private members Maarten Lankhorst
@ 2017-09-27 18:16 ` Maarten Lankhorst
2017-09-27 18:16 ` [PATCH i-g-t v2 3/8] lib/igt_kms: Commit primary plane when a modeset is forced on a pipe Maarten Lankhorst
` (15 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: Maarten Lankhorst @ 2017-09-27 18:16 UTC (permalink / raw)
To: intel-gfx
igt_output_set_pipe with PIPE_ANY used to mean that we bind the output
to any pipe, but this is now a deprecated alias for PIPE_NONE, and
means the output will be unbound.
Because of this it's better to change output->pending_crtc_idx_mask to
an enum pipe, because only a single choice may be given for a pipe.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
lib/igt_kms.c | 46 ++++++++++++++++++++-----------------------
lib/igt_kms.h | 2 +-
tests/kms_atomic_transition.c | 4 ++--
tests/kms_busy.c | 2 +-
tests/kms_cursor_legacy.c | 2 +-
5 files changed, 26 insertions(+), 30 deletions(-)
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 7bcafc072f70..a5db6bc493c2 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -1561,9 +1561,10 @@ static void igt_display_log_shift(igt_display_t *display, int shift)
static void igt_output_refresh(igt_output_t *output)
{
igt_display_t *display = output->display;
- unsigned long crtc_idx_mask;
+ unsigned long crtc_idx_mask = 0;
- crtc_idx_mask = output->pending_crtc_idx_mask;
+ if (output->pending_pipe != PIPE_NONE)
+ crtc_idx_mask = 1 << output->pending_pipe;
kmstest_free_connector_config(&output->config);
@@ -1587,11 +1588,8 @@ static void igt_output_refresh(igt_output_t *output)
BROADCAST_RGB_FULL);
}
- if (output->config.pipe == PIPE_NONE)
- return;
-
LOG(display, "%s: Selecting pipe %s\n", output->name,
- kmstest_pipe_name(output->config.pipe));
+ kmstest_pipe_name(output->pending_pipe));
}
static bool
@@ -1830,7 +1828,7 @@ 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_crtc_idx_mask = 0;
+ output->pending_pipe = PIPE_NONE;
output->id = resources->connectors[i];
output->display = display;
@@ -1960,10 +1958,12 @@ static void igt_display_refresh(igt_display_t *display)
for (i = 0; i < display->n_outputs; i++) {
output = &display->outputs[i];
- if (pipes_in_use & output->pending_crtc_idx_mask)
- goto report_dup;
+ if (output->pending_pipe != PIPE_NONE) {
+ if (pipes_in_use & (1 << output->pending_pipe))
+ goto report_dup;
- pipes_in_use |= output->pending_crtc_idx_mask;
+ pipes_in_use |= 1 << output->pending_pipe;
+ }
if (output->force_reprobe)
igt_output_refresh(output);
@@ -1975,11 +1975,11 @@ report_dup:
for (; i > 0; i--) {
igt_output_t *b = &display->outputs[i - 1];
- igt_assert_f(output->pending_crtc_idx_mask !=
- b->pending_crtc_idx_mask,
+ igt_assert_f(output->pending_pipe !=
+ b->pending_pipe,
"%s and %s are both trying to use pipe %s\n",
igt_output_name(output), igt_output_name(b),
- kmstest_pipe_name(ffs(b->pending_crtc_idx_mask) - 1));
+ kmstest_pipe_name(output->pending_pipe));
}
}
@@ -1988,7 +1988,7 @@ static igt_pipe_t *igt_output_get_driving_pipe(igt_output_t *output)
igt_display_t *display = output->display;
enum pipe pipe;
- if (!output->pending_crtc_idx_mask) {
+ if (output->pending_pipe == PIPE_NONE) {
/*
* The user hasn't specified a pipe to use, return none.
*/
@@ -1998,7 +1998,7 @@ static igt_pipe_t *igt_output_get_driving_pipe(igt_output_t *output)
* Otherwise, return the pending pipe (ie the pipe that should
* drive this output after the commit()
*/
- pipe = ffs(output->pending_crtc_idx_mask) - 1;
+ pipe = output->pending_pipe;
}
igt_assert(pipe >= 0 && pipe < display->n_pipes);
@@ -2051,7 +2051,7 @@ static igt_output_t *igt_pipe_get_output(igt_pipe_t *pipe)
for (i = 0; i < display->n_outputs; i++) {
igt_output_t *output = &display->outputs[i];
- if (output->pending_crtc_idx_mask == (1 << pipe->pipe))
+ if (output->pending_pipe == pipe->pipe)
return output;
}
@@ -2860,22 +2860,18 @@ void igt_output_set_pipe(igt_output_t *output, enum pipe pipe)
igt_assert(output->name);
- if (output->pending_crtc_idx_mask) {
+ if (output->pending_pipe != PIPE_NONE) {
old_pipe = igt_output_get_driving_pipe(output);
old_pipe->mode_changed = true;
}
- if (pipe == PIPE_NONE) {
- LOG(display, "%s: set_pipe(any)\n", igt_output_name(output));
- output->pending_crtc_idx_mask = 0;
- } else {
- LOG(display, "%s: set_pipe(%s)\n", igt_output_name(output),
- kmstest_pipe_name(pipe));
- output->pending_crtc_idx_mask = 1 << pipe;
+ LOG(display, "%s: set_pipe(%s)\n", igt_output_name(output),
+ kmstest_pipe_name(pipe));
+ output->pending_pipe = pipe;
+ if (pipe != PIPE_NONE)
display->pipes[pipe].mode_changed = true;
- }
output->config.pipe_changed = true;
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 62197dcfea7b..8dc118c961b7 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -361,7 +361,7 @@ typedef struct {
struct kmstest_connector_config config;
char *name;
bool force_reprobe;
- unsigned long pending_crtc_idx_mask;
+ enum pipe pending_pipe;
bool use_override_mode;
drmModeModeInfo override_mode;
} igt_output_t;
diff --git a/tests/kms_atomic_transition.c b/tests/kms_atomic_transition.c
index 48823a09aed2..2ae75f2d6630 100644
--- a/tests/kms_atomic_transition.c
+++ b/tests/kms_atomic_transition.c
@@ -644,7 +644,7 @@ static unsigned set_combinations(igt_display_t *display, unsigned mask, struct i
event_mask |= 1 << pipe;
for_each_valid_output_on_pipe(display, pipe, output) {
- if (output->pending_crtc_idx_mask)
+ if (output->pending_pipe != PIPE_NONE)
continue;
mode = igt_output_get_mode(output);
@@ -726,7 +726,7 @@ static void run_modeset_tests(igt_display_t *display, int howmany, bool nonblock
pipe_crcs[i] = igt_pipe_crc_new(display->drm_fd, i, INTEL_PIPE_CRC_SOURCE_AUTO);
for_each_valid_output_on_pipe(display, i, output) {
- if (output->pending_crtc_idx_mask)
+ if (output->pending_pipe != PIPE_NONE)
continue;
igt_output_set_pipe(output, i);
diff --git a/tests/kms_busy.c b/tests/kms_busy.c
index f430beaf7373..0828a8b38a06 100644
--- a/tests/kms_busy.c
+++ b/tests/kms_busy.c
@@ -41,7 +41,7 @@ set_fb_on_crtc(igt_display_t *dpy, int pipe, struct igt_fb *fb)
drmModeModeInfoPtr mode;
igt_plane_t *primary;
- if (output->pending_crtc_idx_mask)
+ if (output->pending_pipe != PIPE_NONE)
continue;
igt_output_set_pipe(output, pipe);
diff --git a/tests/kms_cursor_legacy.c b/tests/kms_cursor_legacy.c
index 65a001a9dec0..fc7526833673 100644
--- a/tests/kms_cursor_legacy.c
+++ b/tests/kms_cursor_legacy.c
@@ -155,7 +155,7 @@ static igt_output_t *set_fb_on_crtc(igt_display_t *display, enum pipe pipe, stru
drmModeModeInfoPtr mode;
igt_plane_t *primary;
- if (output->pending_crtc_idx_mask)
+ if (output->pending_pipe != PIPE_NONE)
continue;
igt_output_set_pipe(output, pipe);
--
2.14.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH i-g-t v2 3/8] lib/igt_kms: Commit primary plane when a modeset is forced on a pipe
2017-09-27 18:16 [PATCH i-g-t v2 0/8] lib/igt_kms: Convert properties to be more atomic-like Maarten Lankhorst
2017-09-27 18:16 ` [PATCH i-g-t v2 1/8] tests: Stop looking at plane private members Maarten Lankhorst
2017-09-27 18:16 ` [PATCH i-g-t v2 2/8] lib/igt_kms: Change output->pending_crtc_idx_mask to output->pending_pipe Maarten Lankhorst
@ 2017-09-27 18:16 ` Maarten Lankhorst
2017-09-27 18:16 ` [PATCH i-g-t v2 4/8] lib/igt_kms: Rework connector properties to be more atomic, v2 Maarten Lankhorst
` (14 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: Maarten Lankhorst @ 2017-09-27 18:16 UTC (permalink / raw)
To: intel-gfx
In between tests, some tests can do the following sequence:
(pipe C configured with FB)
igt_plane_set_fb(primary (pipe C), NULL);
/* Clear rotation property first */
igt_display_commit2(display, COMMIT_UNIVERSAL);
/* disable pipe */
igt_display_commit2(display, COMMIT_LEGACY);
This would result in PIPE_C not being properly disabled, which
will cause an error on the next mode. This can be seen when running
the full kms_rotation_crc testcase without --subtest, it will fail
on exhaust-fences because the bad-tiling subtest wasn't able to
disable pipe C correctly.
Testcase: kms_rotation_crc
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
lib/igt_kms.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index a5db6bc493c2..d25090b05c70 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -2332,7 +2332,7 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
igt_assert(!primary->rotation_changed);
if (!primary->fb_changed && !primary->position_changed &&
- !primary->size_changed)
+ !primary->size_changed && !primary->pipe->mode_changed)
return 0;
crtc_id = pipe->crtc_id;
--
2.14.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH i-g-t v2 4/8] lib/igt_kms: Rework connector properties to be more atomic, v2.
2017-09-27 18:16 [PATCH i-g-t v2 0/8] lib/igt_kms: Convert properties to be more atomic-like Maarten Lankhorst
` (2 preceding siblings ...)
2017-09-27 18:16 ` [PATCH i-g-t v2 3/8] lib/igt_kms: Commit primary plane when a modeset is forced on a pipe Maarten Lankhorst
@ 2017-09-27 18:16 ` Maarten Lankhorst
2017-09-27 18:16 ` [PATCH i-g-t v2 5/8] lib/igt_kms: Rework plane " Maarten Lankhorst
` (13 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: Maarten Lankhorst @ 2017-09-27 18:16 UTC (permalink / raw)
To: intel-gfx
In the future I want to allow tests to commit more properties,
but for this to work I have to fix all properties to work better
with atomic commit. Instead of special casing each
property make a bitmask for all property changed flags, and try to
commit all properties.
Changs since v1:
- Mention which properties we set to what.
- Assert the property to be set is valid.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
lib/igt_kms.c | 44 +++++++++++++++++++---------------------
lib/igt_kms.h | 35 +++++++++++++++++++-------------
tests/kms_atomic_interruptible.c | 4 ++--
tests/kms_panel_fitting.c | 2 +-
4 files changed, 45 insertions(+), 40 deletions(-)
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index d25090b05c70..07d2074c2b1a 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -248,7 +248,7 @@ igt_atomic_fill_connector_props(igt_display_t *display, igt_output_t *output,
if (strcmp(prop->name, conn_prop_names[j]) != 0)
continue;
- output->config.atomic_props_connector[j] = props->props[i];
+ output->props[j] = props->props[i];
break;
}
@@ -1834,7 +1834,7 @@ void igt_display_init(igt_display_t *display, int drm_fd)
igt_output_refresh(output);
- output->config.pipe_changed = true;
+ igt_output_set_prop_changed(output, IGT_CONNECTOR_CRTC_ID);
}
drmModeFreePlaneResources(plane_resources);
@@ -2514,23 +2514,24 @@ static void igt_atomic_prepare_crtc_commit(igt_pipe_t *pipe_obj, drmModeAtomicRe
static void igt_atomic_prepare_connector_commit(igt_output_t *output, drmModeAtomicReq *req)
{
- struct kmstest_connector_config *config = &output->config;
+ int i;
- if (config->connector_scaling_mode_changed)
- igt_atomic_populate_connector_req(req, output, IGT_CONNECTOR_SCALING_MODE, config->connector_scaling_mode);
+ for (i = 0; i < IGT_NUM_CONNECTOR_PROPS; i++) {
+ if (!igt_output_is_prop_changed(output, i))
+ continue;
- if (config->pipe_changed) {
- uint32_t crtc_id = 0;
+ /* it's an error to try an unsupported feature */
+ igt_assert(output->props[i]);
- if (output->config.pipe != PIPE_NONE)
- crtc_id = output->config.crtc->crtc_id;
+ igt_debug("%s: Setting property \"%s\" to 0x%"PRIx64"/%"PRIi64"\n",
+ igt_output_name(output), igt_connector_prop_names[i],
+ output->values[i], output->values[i]);
- igt_atomic_populate_connector_req(req, output, IGT_CONNECTOR_CRTC_ID, crtc_id);
+ igt_assert_lt(0, drmModeAtomicAddProperty(req,
+ output->config.connector->connector_id,
+ output->props[i],
+ output->values[i]));
}
- /*
- * TODO: Add all other connector level properties here
- */
-
}
/*
@@ -2625,11 +2626,10 @@ display_commit_changed(igt_display_t *display, enum igt_commit_style s)
for (i = 0; i < display->n_outputs; i++) {
igt_output_t *output = &display->outputs[i];
- if (s != COMMIT_UNIVERSAL)
- output->config.pipe_changed = false;
-
if (s == COMMIT_ATOMIC)
- output->config.connector_scaling_mode_changed = false;
+ output->changed = 0;
+ else if (s != COMMIT_UNIVERSAL)
+ igt_output_clear_prop_changed(output, IGT_CONNECTOR_CRTC_ID);
}
}
@@ -2873,18 +2873,16 @@ void igt_output_set_pipe(igt_output_t *output, enum pipe pipe)
if (pipe != PIPE_NONE)
display->pipes[pipe].mode_changed = true;
- output->config.pipe_changed = true;
+ igt_output_set_prop_value(output, IGT_CONNECTOR_CRTC_ID, pipe == PIPE_NONE ? 0 : display->pipes[pipe].crtc_id);
igt_output_refresh(output);
}
void igt_output_set_scaling_mode(igt_output_t *output, uint64_t scaling_mode)
{
- output->config.connector_scaling_mode_changed = true;
-
- output->config.connector_scaling_mode = scaling_mode;
+ igt_output_set_prop_value(output, IGT_CONNECTOR_SCALING_MODE, scaling_mode);
- igt_require(output->config.atomic_props_connector[IGT_CONNECTOR_SCALING_MODE]);
+ igt_require(output->props[IGT_CONNECTOR_SCALING_MODE]);
}
igt_plane_t *igt_output_get_plane(igt_output_t *output, int plane_idx)
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 8dc118c961b7..1ef10e7d525c 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -131,10 +131,7 @@ struct kmstest_connector_config {
drmModeConnector *connector;
drmModeEncoder *encoder;
drmModeModeInfo default_mode;
- uint64_t connector_scaling_mode;
- bool connector_scaling_mode_changed;
- bool pipe_changed;
- uint32_t atomic_props_connector[IGT_NUM_CONNECTOR_PROPS];
+
int pipe;
unsigned valid_crtc_idx_mask;
};
@@ -364,6 +361,12 @@ typedef struct {
enum pipe pending_pipe;
bool use_override_mode;
drmModeModeInfo override_mode;
+
+ /* bitmask of changed properties */
+ uint64_t changed;
+
+ uint32_t props[IGT_NUM_CONNECTOR_PROPS];
+ uint64_t values[IGT_NUM_CONNECTOR_PROPS];
} igt_output_t;
struct igt_display {
@@ -545,16 +548,20 @@ static inline bool igt_output_is_connected(igt_output_t *output)
#define igt_atomic_populate_crtc_req(req, pipe, prop, value) \
igt_assert_lt(0, drmModeAtomicAddProperty(req, pipe->crtc_id,\
pipe->atomic_props_crtc[prop], value))
-/**
- * igt_atomic_populate_connector_req:
- * @req: A pointer to drmModeAtomicReq
- * @output: A pointer igt_output_t
- * @prop: one of igt_atomic_connector_properties
- * @value: the value to add
- */
-#define igt_atomic_populate_connector_req(req, output, prop, value) \
- igt_assert_lt(0, drmModeAtomicAddProperty(req, output->config.connector->connector_id,\
- output->config.atomic_props_connector[prop], value))
+
+#define igt_output_is_prop_changed(output, prop) \
+ (!!((output)->changed & (1 << (prop))))
+#define igt_output_set_prop_changed(output, prop) \
+ (output)->changed |= 1 << (prop)
+
+#define igt_output_clear_prop_changed(output, prop) \
+ (output)->changed &= ~(1 << (prop))
+
+#define igt_output_set_prop_value(output, prop, value) \
+ do { \
+ (output)->values[prop] = (value); \
+ igt_output_set_prop_changed(output, prop); \
+ } while (0)
/*
* igt_pipe_refresh:
diff --git a/tests/kms_atomic_interruptible.c b/tests/kms_atomic_interruptible.c
index 4e06ee4e2d6b..2d19fe967809 100644
--- a/tests/kms_atomic_interruptible.c
+++ b/tests/kms_atomic_interruptible.c
@@ -159,7 +159,7 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
plane->pipe->atomic_props_crtc[IGT_CRTC_MODE_ID],
plane->pipe->atomic_props_crtc[IGT_CRTC_ACTIVE],
/* connector: 1 prop */
- output->config.atomic_props_connector[IGT_CONNECTOR_CRTC_ID],
+ output->props[IGT_CONNECTOR_CRTC_ID],
/* plane: remainder props */
plane->atomic_props_plane[IGT_PLANE_CRTC_ID],
plane->atomic_props_plane[IGT_PLANE_FB_ID],
@@ -204,7 +204,7 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
case test_legacy_dpms: {
struct drm_mode_connector_set_property prop = {
.value = DRM_MODE_DPMS_OFF,
- .prop_id = output->config.atomic_props_connector[IGT_CONNECTOR_DPMS],
+ .prop_id = output->props[IGT_CONNECTOR_DPMS],
.connector_id = output->id,
};
diff --git a/tests/kms_panel_fitting.c b/tests/kms_panel_fitting.c
index 85a231e60ea2..e4ea355611c3 100644
--- a/tests/kms_panel_fitting.c
+++ b/tests/kms_panel_fitting.c
@@ -275,7 +275,7 @@ static void test_atomic_fastset(igt_display_t *display)
igt_require(intel_gen(intel_get_drm_devid(display->drm_fd)) >= 5);
for_each_pipe_with_valid_output(display, pipe, output) {
- if (!output->config.atomic_props_connector[IGT_CONNECTOR_SCALING_MODE])
+ if (!output->props[IGT_CONNECTOR_SCALING_MODE])
continue;
test_panel_fitting_fastset(display, pipe, output);
--
2.14.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH i-g-t v2 5/8] lib/igt_kms: Rework plane properties to be more atomic, v2.
2017-09-27 18:16 [PATCH i-g-t v2 0/8] lib/igt_kms: Convert properties to be more atomic-like Maarten Lankhorst
` (3 preceding siblings ...)
2017-09-27 18:16 ` [PATCH i-g-t v2 4/8] lib/igt_kms: Rework connector properties to be more atomic, v2 Maarten Lankhorst
@ 2017-09-27 18:16 ` Maarten Lankhorst
2017-09-28 10:28 ` [PATCH i-g-t v2 5/8] lib/igt_kms: Rework plane properties to be more atomic, v3 Maarten Lankhorst
2017-09-27 18:16 ` [PATCH i-g-t v2 6/8] lib/igt_kms: Rework pipe properties to be more atomic, v2 Maarten Lankhorst
` (12 subsequent siblings)
17 siblings, 1 reply; 25+ messages in thread
From: Maarten Lankhorst @ 2017-09-27 18:16 UTC (permalink / raw)
To: intel-gfx
In the future I want to allow tests to commit more properties,
but for this to work I have to fix all properties to work better
with atomic commit. Instead of special casing each
property make a bitmask for all property changed flags, and try to
commit all properties.
Changes since v1:
- Remove special dumping of src and crtc coordinates.
- Dump all modified coordinates.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
lib/igt_kms.c | 292 +++++++++++++++++----------------------
lib/igt_kms.h | 59 ++++----
tests/kms_atomic_interruptible.c | 12 +-
tests/kms_rotation_crc.c | 4 +-
4 files changed, 159 insertions(+), 208 deletions(-)
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 07d2074c2b1a..3181ee605195 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -192,11 +192,11 @@ const char *igt_connector_prop_names[IGT_NUM_CONNECTOR_PROPS] = {
/*
* Retrieve all the properies specified in props_name and store them into
- * plane->atomic_props_plane.
+ * plane->props.
*/
static void
-igt_atomic_fill_plane_props(igt_display_t *display, igt_plane_t *plane,
- int num_props, const char **prop_names)
+igt_fill_plane_props(igt_display_t *display, igt_plane_t *plane,
+ int num_props, const char **prop_names)
{
drmModeObjectPropertiesPtr props;
int i, j, fd;
@@ -214,7 +214,7 @@ igt_atomic_fill_plane_props(igt_display_t *display, igt_plane_t *plane,
if (strcmp(prop->name, prop_names[j]) != 0)
continue;
- plane->atomic_props_plane[j] = props->props[i];
+ plane->props[j] = props->props[i];
break;
}
@@ -1659,7 +1659,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
drmModeRes *resources;
drmModePlaneRes *plane_resources;
int i;
- int is_atomic = 0;
memset(display, 0, sizeof(igt_display_t));
@@ -1679,7 +1678,9 @@ void igt_display_init(igt_display_t *display, int drm_fd)
igt_assert_f(display->pipes, "Failed to allocate memory for %d pipes\n", display->n_pipes);
drmSetClientCap(drm_fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1);
- is_atomic = drmSetClientCap(drm_fd, DRM_CLIENT_CAP_ATOMIC, 1);
+ if (drmSetClientCap(drm_fd, DRM_CLIENT_CAP_ATOMIC, 1) == 0)
+ display->is_atomic = 1;
+
plane_resources = drmModeGetPlaneResources(display->drm_fd);
igt_assert(plane_resources);
@@ -1776,19 +1777,15 @@ void igt_display_init(igt_display_t *display, int drm_fd)
plane->type = type;
plane->pipe = pipe;
plane->drm_plane = drm_plane;
- plane->fence_fd = -1;
+ plane->values[IGT_PLANE_IN_FENCE_FD] = ~0ULL;
- if (is_atomic == 0) {
- display->is_atomic = 1;
- igt_atomic_fill_plane_props(display, plane, IGT_NUM_PLANE_PROPS, igt_plane_prop_names);
- }
+ 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->rotation_property,
- &prop_value,
+ &plane->props[IGT_PLANE_ROTATION],
+ &plane->values[IGT_PLANE_ROTATION],
NULL);
- plane->rotation = (igt_rotation_t)prop_value;
}
/*
@@ -1805,8 +1802,10 @@ void igt_display_init(igt_display_t *display, int drm_fd)
pipe->n_planes = n_planes;
- for_each_plane_on_pipe(display, i, plane)
- plane->fb_changed = true;
+ for_each_plane_on_pipe(display, i, plane) {
+ igt_plane_set_prop_changed(plane, IGT_PLANE_FB_ID);
+ igt_plane_set_prop_changed(plane, IGT_PLANE_CRTC_ID);
+ }
pipe->mode_changed = true;
}
@@ -2070,18 +2069,7 @@ bool igt_pipe_get_property(igt_pipe_t *pipe, const char *name,
static uint32_t igt_plane_get_fb_id(igt_plane_t *plane)
{
- if (plane->fb)
- return plane->fb->fb_id;
- else
- return 0;
-}
-
-static uint32_t igt_plane_get_fb_gem_handle(igt_plane_t *plane)
-{
- if (plane->fb)
- return plane->fb->gem_handle;
- else
- return 0;
+ return plane->values[IGT_PLANE_FB_ID];
}
#define CHECK_RETURN(r, fail) { \
@@ -2090,9 +2078,6 @@ static uint32_t igt_plane_get_fb_gem_handle(igt_plane_t *plane)
igt_assert_eq(r, 0); \
}
-
-
-
/*
* Add position and fb changes of a plane to the atomic property set
*/
@@ -2101,63 +2086,31 @@ igt_atomic_prepare_plane_commit(igt_plane_t *plane, igt_pipe_t *pipe,
drmModeAtomicReq *req)
{
igt_display_t *display = pipe->display;
- uint32_t fb_id, crtc_id;
+ int i;
igt_assert(plane->drm_plane);
- /* it's an error to try an unsupported feature */
- igt_assert(igt_plane_supports_rotation(plane) ||
- !plane->rotation_changed);
-
- fb_id = igt_plane_get_fb_id(plane);
- crtc_id = pipe->crtc_id;
-
LOG(display,
"populating plane data: %s.%d, fb %u\n",
kmstest_pipe_name(pipe->pipe),
plane->index,
- fb_id);
+ igt_plane_get_fb_id(plane));
- if (plane->fence_fd >= 0) {
- uint64_t fence_fd = (int64_t) plane->fence_fd;
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_IN_FENCE_FD, fence_fd);
- }
-
- if (plane->fb_changed) {
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_ID, fb_id ? crtc_id : 0);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_FB_ID, fb_id);
- }
-
- if (plane->position_changed || plane->size_changed) {
- uint32_t src_x = IGT_FIXED(plane->src_x, 0); /* src_x */
- uint32_t src_y = IGT_FIXED(plane->src_y, 0); /* src_y */
- uint32_t src_w = IGT_FIXED(plane->src_w, 0); /* src_w */
- uint32_t src_h = IGT_FIXED(plane->src_h, 0); /* src_h */
- int32_t crtc_x = plane->crtc_x;
- int32_t crtc_y = plane->crtc_y;
- uint32_t crtc_w = plane->crtc_w;
- uint32_t crtc_h = plane->crtc_h;
+ for (i = 0; i < IGT_NUM_PLANE_PROPS; i++) {
+ if (!igt_plane_is_prop_changed(plane, i))
+ continue;
- LOG(display,
- "src = (%d, %d) %u x %u "
- "dst = (%d, %d) %u x %u\n",
- src_x >> 16, src_y >> 16, src_w >> 16, src_h >> 16,
- crtc_x, crtc_y, crtc_w, crtc_h);
+ /* it's an error to try an unsupported feature */
+ igt_assert(plane->props[i]);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_X, src_x);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_Y, src_y);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_W, src_w);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_H, src_h);
+ igt_debug("plane %s.%d: Setting property \"%s\" to 0x%"PRIx64"/%"PRIi64"\n",
+ kmstest_pipe_name(pipe->pipe), plane->index, igt_plane_prop_names[i],
+ plane->values[i], plane->values[i]);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_X, crtc_x);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_Y, crtc_y);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_W, crtc_w);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_H, crtc_h);
+ igt_assert_lt(0, drmModeAtomicAddProperty(req, plane->drm_plane->plane_id,
+ plane->props[i],
+ plane->values[i]));
}
-
- if (plane->rotation_changed)
- igt_atomic_populate_plane_req(req, plane,
- IGT_PLANE_ROTATION, plane->rotation);
}
@@ -2183,17 +2136,20 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
int32_t crtc_y;
uint32_t crtc_w;
uint32_t crtc_h;
+ bool setplane =
+ igt_plane_is_prop_changed(plane, IGT_PLANE_FB_ID) ||
+ plane->changed & IGT_PLANE_COORD_CHANGED_MASK;
igt_assert(plane->drm_plane);
/* it's an error to try an unsupported feature */
igt_assert(igt_plane_supports_rotation(plane) ||
- !plane->rotation_changed);
+ !igt_plane_is_prop_changed(plane, IGT_PLANE_ROTATION));
fb_id = igt_plane_get_fb_id(plane);
crtc_id = pipe->crtc_id;
- if ((plane->fb_changed || plane->size_changed) && fb_id == 0) {
+ if (setplane && fb_id == 0) {
LOG(display,
"SetPlane pipe %s, plane %d, disabling\n",
kmstest_pipe_name(pipe->pipe),
@@ -2212,16 +2168,15 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
IGT_FIXED(0,0) /* src_h */);
CHECK_RETURN(ret, fail_on_error);
- } else if (plane->fb_changed || plane->position_changed ||
- plane->size_changed) {
- src_x = IGT_FIXED(plane->src_x,0); /* src_x */
- src_y = IGT_FIXED(plane->src_y,0); /* src_y */
- src_w = IGT_FIXED(plane->src_w,0); /* src_w */
- src_h = IGT_FIXED(plane->src_h,0); /* src_h */
- crtc_x = plane->crtc_x;
- crtc_y = plane->crtc_y;
- crtc_w = plane->crtc_w;
- crtc_h = plane->crtc_h;
+ } else if (setplane) {
+ src_x = plane->values[IGT_PLANE_SRC_X];
+ src_y = plane->values[IGT_PLANE_SRC_Y];
+ src_w = plane->values[IGT_PLANE_SRC_W];
+ src_h = plane->values[IGT_PLANE_SRC_H];
+ crtc_x = plane->values[IGT_PLANE_CRTC_X];
+ crtc_y = plane->values[IGT_PLANE_CRTC_Y];
+ crtc_w = plane->values[IGT_PLANE_CRTC_W];
+ crtc_h = plane->values[IGT_PLANE_CRTC_H];
LOG(display,
"SetPlane %s.%d, fb %u, src = (%d, %d) "
@@ -2245,9 +2200,10 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
CHECK_RETURN(ret, fail_on_error);
}
- if (plane->rotation_changed) {
- ret = igt_plane_set_property(plane, plane->rotation_property,
- plane->rotation);
+ if (igt_plane_is_prop_changed(plane, IGT_PLANE_ROTATION)) {
+ ret = igt_plane_set_property(plane,
+ plane->props[IGT_PLANE_ROTATION],
+ plane->values[IGT_PLANE_ROTATION]);
CHECK_RETURN(ret, fail_on_error);
}
@@ -2269,35 +2225,30 @@ static int igt_cursor_commit_legacy(igt_plane_t *cursor,
uint32_t crtc_id = pipe->crtc_id;
int ret;
- if (cursor->fb_changed) {
- uint32_t gem_handle = igt_plane_get_fb_gem_handle(cursor);
-
- if (gem_handle) {
+ if (igt_plane_is_prop_changed(cursor, IGT_PLANE_FB_ID)) {
+ if (cursor->gem_handle)
LOG(display,
"SetCursor pipe %s, fb %u %dx%d\n",
kmstest_pipe_name(pipe->pipe),
- gem_handle,
- cursor->crtc_w, cursor->crtc_h);
-
- ret = drmModeSetCursor(display->drm_fd, crtc_id,
- gem_handle,
- cursor->crtc_w,
- cursor->crtc_h);
- } else {
+ cursor->gem_handle,
+ (unsigned)cursor->values[IGT_PLANE_CRTC_W],
+ (unsigned)cursor->values[IGT_PLANE_CRTC_H]);
+ else
LOG(display,
"SetCursor pipe %s, disabling\n",
kmstest_pipe_name(pipe->pipe));
- ret = drmModeSetCursor(display->drm_fd, crtc_id,
- 0, 0, 0);
- }
-
+ ret = drmModeSetCursor(display->drm_fd, crtc_id,
+ cursor->gem_handle,
+ cursor->values[IGT_PLANE_CRTC_W],
+ cursor->values[IGT_PLANE_CRTC_H]);
CHECK_RETURN(ret, fail_on_error);
}
- if (cursor->position_changed) {
- int x = cursor->crtc_x;
- int y = cursor->crtc_y;
+ if (igt_plane_is_prop_changed(cursor, IGT_PLANE_CRTC_X) ||
+ igt_plane_is_prop_changed(cursor, IGT_PLANE_CRTC_Y)) {
+ int x = cursor->values[IGT_PLANE_CRTC_X];
+ int y = cursor->values[IGT_PLANE_CRTC_Y];
LOG(display,
"MoveCursor pipe %s, (%d, %d)\n",
@@ -2326,13 +2277,14 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
int ret;
/* Primary planes can't be windowed when using a legacy commit */
- igt_assert((primary->crtc_x == 0 && primary->crtc_y == 0));
+ igt_assert((primary->values[IGT_PLANE_CRTC_X] == 0 && primary->values[IGT_PLANE_CRTC_Y] == 0));
/* nor rotated */
- igt_assert(!primary->rotation_changed);
+ igt_assert(!igt_plane_is_prop_changed(primary, IGT_PLANE_ROTATION));
- if (!primary->fb_changed && !primary->position_changed &&
- !primary->size_changed && !primary->pipe->mode_changed)
+ if (!igt_plane_is_prop_changed(primary, IGT_PLANE_FB_ID) &&
+ !(primary->changed & IGT_PLANE_COORD_CHANGED_MASK) &&
+ !primary->pipe->mode_changed)
return 0;
crtc_id = pipe->crtc_id;
@@ -2343,19 +2295,22 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
mode = NULL;
if (fb_id) {
+ uint32_t src_x = primary->values[IGT_PLANE_SRC_X] >> 16;
+ uint32_t src_y = primary->values[IGT_PLANE_SRC_Y] >> 16;
+
LOG(display,
"%s: SetCrtc pipe %s, fb %u, src (%d, %d), "
"mode %dx%d\n",
igt_output_name(output),
kmstest_pipe_name(pipe->pipe),
fb_id,
- primary->src_x, primary->src_y,
+ src_x, src_y,
mode->hdisplay, mode->vdisplay);
ret = drmModeSetCrtc(display->drm_fd,
crtc_id,
fb_id,
- primary->src_x, primary->src_y,
+ src_x, src_y,
&output->id,
1,
mode);
@@ -2608,18 +2563,27 @@ display_commit_changed(igt_display_t *display, enum igt_commit_style s)
}
for_each_plane_on_pipe(display, pipe, plane) {
- plane->fb_changed = false;
- plane->position_changed = false;
- plane->size_changed = false;
+ if (s == COMMIT_ATOMIC) {
+ int fd;
+ plane->changed = 0;
- if (s != COMMIT_LEGACY ||
- !(plane->type == DRM_PLANE_TYPE_PRIMARY ||
- plane->type == DRM_PLANE_TYPE_CURSOR))
- plane->rotation_changed = false;
+ fd = plane->values[IGT_PLANE_IN_FENCE_FD];
+ if (fd != -1)
+ close(fd);
- if (s == COMMIT_ATOMIC)
/* reset fence_fd to prevent it from being set for the next commit */
- igt_plane_set_fence_fd(plane, -1);
+ plane->values[IGT_PLANE_IN_FENCE_FD] = -1;
+ } else {
+ plane->changed &= ~IGT_PLANE_COORD_CHANGED_MASK;
+
+ igt_plane_clear_prop_changed(plane, IGT_PLANE_CRTC_ID);
+ igt_plane_clear_prop_changed(plane, IGT_PLANE_FB_ID);
+
+ if (s != COMMIT_LEGACY ||
+ !(plane->type == DRM_PLANE_TYPE_PRIMARY ||
+ plane->type == DRM_PLANE_TYPE_CURSOR))
+ igt_plane_clear_prop_changed(plane, IGT_PLANE_ROTATION);
+ }
}
}
@@ -2913,30 +2877,31 @@ void igt_plane_set_fb(igt_plane_t *plane, struct igt_fb *fb)
LOG(display, "%s.%d: plane_set_fb(%d)\n", kmstest_pipe_name(pipe->pipe),
plane->index, fb ? fb->fb_id : 0);
- plane->fb = fb;
+ igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_ID, fb ? pipe->crtc_id : 0);
+ igt_plane_set_prop_value(plane, IGT_PLANE_FB_ID, fb ? fb->fb_id : 0);
+
+ if (plane->type == DRM_PLANE_TYPE_CURSOR && fb)
+ plane->gem_handle = fb->gem_handle;
+ else
+ plane->gem_handle = 0;
+
/* hack to keep tests working that don't call igt_plane_set_size() */
if (fb) {
/* set default plane size as fb size */
- plane->crtc_w = fb->width;
- plane->crtc_h = fb->height;
+ igt_plane_set_position(plane, 0, 0);
+ igt_plane_set_size(plane, fb->width, fb->height);
/* set default src pos/size as fb size */
- plane->src_x = 0;
- plane->src_y = 0;
- plane->src_w = fb->width;
- plane->src_h = fb->height;
+ igt_fb_set_position(fb, plane, 0, 0);
+ igt_fb_set_size(fb, plane, fb->width, fb->height);
} else {
- plane->src_x = 0;
- plane->src_y = 0;
- plane->src_w = 0;
- plane->src_h = 0;
+ igt_plane_set_position(plane, 0, 0);
+ igt_plane_set_size(plane, 0, 0);
- plane->crtc_w = 0;
- plane->crtc_h = 0;
+ /* set default src pos/size as fb size */
+ igt_fb_set_position(fb, plane, 0, 0);
+ igt_fb_set_size(fb, plane, 0, 0);
}
-
- plane->fb_changed = true;
- plane->size_changed = true;
}
/**
@@ -2949,12 +2914,19 @@ void igt_plane_set_fb(igt_plane_t *plane, struct igt_fb *fb)
*/
void igt_plane_set_fence_fd(igt_plane_t *plane, int fence_fd)
{
- close(plane->fence_fd);
+ int64_t fd;
- if (fcntl(fence_fd, F_GETFD) != -1)
- plane->fence_fd = dup(fence_fd);
- else
- plane->fence_fd = -1;
+ fd = plane->values[IGT_PLANE_IN_FENCE_FD];
+ if (fd != -1)
+ close(fd);
+
+ if (fence_fd != -1) {
+ fd = dup(fence_fd);
+ igt_fail_on(fd == -1);
+ } else
+ fd = -1;
+
+ igt_plane_set_prop_value(plane, IGT_PLANE_IN_FENCE_FD, fd);
}
void igt_plane_set_position(igt_plane_t *plane, int x, int y)
@@ -2965,10 +2937,8 @@ void igt_plane_set_position(igt_plane_t *plane, int x, int y)
LOG(display, "%s.%d: plane_set_position(%d,%d)\n",
kmstest_pipe_name(pipe->pipe), plane->index, x, y);
- plane->crtc_x = x;
- plane->crtc_y = y;
-
- plane->position_changed = true;
+ igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_X, x);
+ igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_Y, y);
}
/**
@@ -2989,10 +2959,8 @@ void igt_plane_set_size(igt_plane_t *plane, int w, int h)
LOG(display, "%s.%d: plane_set_size (%dx%d)\n",
kmstest_pipe_name(pipe->pipe), plane->index, w, h);
- plane->crtc_w = w;
- plane->crtc_h = h;
-
- plane->size_changed = true;
+ igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_W, w);
+ igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_H, h);
}
/**
@@ -3014,10 +2982,8 @@ void igt_fb_set_position(struct igt_fb *fb, igt_plane_t *plane,
LOG(display, "%s.%d: fb_set_position(%d,%d)\n",
kmstest_pipe_name(pipe->pipe), plane->index, x, y);
- plane->src_x = x;
- plane->src_y = y;
-
- plane->fb_changed = true;
+ igt_plane_set_prop_value(plane, IGT_PLANE_SRC_X, IGT_FIXED(x, 0));
+ igt_plane_set_prop_value(plane, IGT_PLANE_SRC_Y, IGT_FIXED(y, 0));
}
/**
@@ -3040,10 +3006,8 @@ void igt_fb_set_size(struct igt_fb *fb, igt_plane_t *plane,
LOG(display, "%s.%d: fb_set_size(%dx%d)\n",
kmstest_pipe_name(pipe->pipe), plane->index, w, h);
- plane->src_w = w;
- plane->src_h = h;
-
- plane->fb_changed = true;
+ igt_plane_set_prop_value(plane, IGT_PLANE_SRC_W, IGT_FIXED(w, 0));
+ igt_plane_set_prop_value(plane, IGT_PLANE_SRC_H, IGT_FIXED(h, 0));
}
static const char *rotation_name(igt_rotation_t rotation)
@@ -3071,9 +3035,7 @@ void igt_plane_set_rotation(igt_plane_t *plane, igt_rotation_t rotation)
kmstest_pipe_name(pipe->pipe),
plane->index, rotation_name(rotation));
- plane->rotation = rotation;
-
- plane->rotation_changed = true;
+ igt_plane_set_prop_value(plane, IGT_PLANE_ROTATION, rotation);
}
/**
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 1ef10e7d525c..f87f8be31421 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -252,6 +252,9 @@ enum igt_atomic_plane_properties {
IGT_PLANE_CRTC_W,
IGT_PLANE_CRTC_H,
+/* Append new properties after IGT_PLANE_COORD_CHANGED_MASK */
+#define IGT_PLANE_COORD_CHANGED_MASK 0xff
+
IGT_PLANE_FB_ID,
IGT_PLANE_CRTC_ID,
IGT_PLANE_IN_FENCE_FD,
@@ -286,37 +289,19 @@ typedef struct {
int index;
/* capabilities */
int type;
- /* state tracking */
- unsigned int fb_changed : 1;
- unsigned int position_changed : 1;
- unsigned int rotation_changed : 1;
- unsigned int size_changed : 1;
+
/*
* drm_plane can be NULL for primary and cursor planes (when not
* using the atomic modeset API)
*/
drmModePlane *drm_plane;
- struct igt_fb *fb;
-
- uint32_t rotation_property;
-
- /* position within pipe_src_w x pipe_src_h */
- int crtc_x, crtc_y;
- /* size within pipe_src_w x pipe_src_h */
- int crtc_w, crtc_h;
- /* position within the framebuffer */
- uint32_t src_x;
- uint32_t src_y;
- /* size within the framebuffer*/
- uint32_t src_w;
- uint32_t src_h;
+ /* gem handle for fb */
+ uint32_t gem_handle;
- igt_rotation_t rotation;
-
- /* in fence fd */
- int fence_fd;
- uint32_t atomic_props_plane[IGT_NUM_PLANE_PROPS];
+ uint64_t changed;
+ uint32_t props[IGT_NUM_PLANE_PROPS];
+ uint64_t values[IGT_NUM_PLANE_PROPS];
} igt_plane_t;
struct igt_pipe {
@@ -407,7 +392,7 @@ bool igt_pipe_get_property(igt_pipe_t *pipe, const char *name,
static inline bool igt_plane_supports_rotation(igt_plane_t *plane)
{
- return plane->rotation_property != 0;
+ return plane->props[IGT_PLANE_ROTATION] != 0;
}
void igt_pipe_request_out_fence(igt_pipe_t *pipe);
void igt_pipe_set_degamma_lut(igt_pipe_t *pipe, void *ptr, size_t length);
@@ -527,16 +512,20 @@ static inline bool igt_output_is_connected(igt_output_t *output)
#define IGT_FIXED(i,f) ((i) << 16 | (f))
-/**
- * igt_atomic_populate_plane_req:
- * @req: A pointer to drmModeAtomicReq
- * @plane: A pointer igt_plane_t
- * @prop: one of igt_atomic_plane_properties
- * @value: the value to add
- */
-#define igt_atomic_populate_plane_req(req, plane, prop, value) \
- igt_assert_lt(0, drmModeAtomicAddProperty(req, plane->drm_plane->plane_id,\
- plane->atomic_props_plane[prop], value))
+#define igt_plane_is_prop_changed(plane, prop) \
+ (!!((plane)->changed & (1 << (prop))))
+
+#define igt_plane_set_prop_changed(plane, prop) \
+ (plane)->changed |= 1 << (prop)
+
+#define igt_plane_clear_prop_changed(plane, prop) \
+ (plane)->changed &= ~(1 << (prop))
+
+#define igt_plane_set_prop_value(plane, prop, value) \
+ do { \
+ plane->values[prop] = value; \
+ igt_plane_set_prop_changed(plane, prop); \
+ } while (0)
/**
* igt_atomic_populate_crtc_req:
diff --git a/tests/kms_atomic_interruptible.c b/tests/kms_atomic_interruptible.c
index 2d19fe967809..5570854390ea 100644
--- a/tests/kms_atomic_interruptible.c
+++ b/tests/kms_atomic_interruptible.c
@@ -161,12 +161,12 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
/* connector: 1 prop */
output->props[IGT_CONNECTOR_CRTC_ID],
/* plane: remainder props */
- plane->atomic_props_plane[IGT_PLANE_CRTC_ID],
- plane->atomic_props_plane[IGT_PLANE_FB_ID],
- plane->atomic_props_plane[IGT_PLANE_SRC_W],
- plane->atomic_props_plane[IGT_PLANE_SRC_H],
- plane->atomic_props_plane[IGT_PLANE_CRTC_W],
- plane->atomic_props_plane[IGT_PLANE_CRTC_H]
+ plane->props[IGT_PLANE_CRTC_ID],
+ plane->props[IGT_PLANE_FB_ID],
+ plane->props[IGT_PLANE_SRC_W],
+ plane->props[IGT_PLANE_SRC_H],
+ plane->props[IGT_PLANE_CRTC_W],
+ plane->props[IGT_PLANE_CRTC_H]
};
uint64_t prop_vals[] = {
/* crtc */
diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
index 4d2ef1c184f0..4932a0d44410 100644
--- a/tests/kms_rotation_crc.c
+++ b/tests/kms_rotation_crc.c
@@ -122,11 +122,11 @@ static void prepare_crtc(data_t *data, igt_output_t *output, enum pipe pipe,
igt_plane_set_fb(primary, &data->fb_modeset);
if (commit < COMMIT_ATOMIC) {
- primary->rotation_changed = false;
+ igt_plane_clear_prop_changed(primary, IGT_PLANE_ROTATION);
igt_display_commit(display);
if (plane->type == DRM_PLANE_TYPE_PRIMARY)
- primary->rotation_changed = true;
+ igt_plane_set_prop_changed(primary, IGT_PLANE_ROTATION);
}
igt_plane_set_fb(plane, NULL);
--
2.14.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH i-g-t v2 6/8] lib/igt_kms: Rework pipe properties to be more atomic, v2.
2017-09-27 18:16 [PATCH i-g-t v2 0/8] lib/igt_kms: Convert properties to be more atomic-like Maarten Lankhorst
` (4 preceding siblings ...)
2017-09-27 18:16 ` [PATCH i-g-t v2 5/8] lib/igt_kms: Rework plane " Maarten Lankhorst
@ 2017-09-27 18:16 ` Maarten Lankhorst
2017-09-28 10:28 ` [PATCH i-g-t v2 6/8] lib/igt_kms: Rework pipe properties to be more atomic, v3 Maarten Lankhorst
2017-09-27 18:16 ` [PATCH i-g-t v2 7/8] igt/kms_rotation_crc : Fix flip tests for sprite plane Maarten Lankhorst
` (11 subsequent siblings)
17 siblings, 1 reply; 25+ messages in thread
From: Maarten Lankhorst @ 2017-09-27 18:16 UTC (permalink / raw)
To: intel-gfx
In the future I want to allow tests to commit more properties,
but for this to work I have to fix all properties to work better
with atomic commit. Instead of special casing each
property make a bitmask for all property changed flags, and try to
commit all properties.
This has been the most involved one, since legacy pipe commit still
handles a lot of the properties differently from the rest.
Changes since v1:
- Dump all changed properties on commit.
- Fix bug in igt_pipe_refresh().
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
lib/igt_kms.c | 213 ++++++++++++++++++++------------------
lib/igt_kms.h | 77 ++++++--------
tests/kms_atomic_interruptible.c | 4 +-
tests/kms_atomic_transition.c | 2 +-
tests/kms_crtc_background_color.c | 2 +-
5 files changed, 144 insertions(+), 154 deletions(-)
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 3181ee605195..23bb543efd61 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -259,8 +259,8 @@ igt_atomic_fill_connector_props(igt_display_t *display, igt_output_t *output,
}
static void
-igt_atomic_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
- int num_crtc_props, const char **crtc_prop_names)
+igt_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
+ int num_crtc_props, const char **crtc_prop_names)
{
drmModeObjectPropertiesPtr props;
int i, j, fd;
@@ -278,7 +278,7 @@ igt_atomic_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
if (strcmp(prop->name, crtc_prop_names[j]) != 0)
continue;
- pipe->atomic_props_crtc[j] = props->props[i];
+ pipe->props[j] = props->props[i];
break;
}
@@ -1690,7 +1690,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
int p = 1;
int j, type;
uint8_t last_plane = 0, n_planes = 0;
- uint64_t prop_value;
pipe->crtc_id = resources->crtcs[i];
pipe->display = display;
@@ -1700,29 +1699,12 @@ void igt_display_init(igt_display_t *display, int drm_fd)
pipe->planes = NULL;
pipe->out_fence_fd = -1;
+ igt_fill_pipe_props(display, pipe, IGT_NUM_CRTC_PROPS, igt_crtc_prop_names);
+
get_crtc_property(display->drm_fd, pipe->crtc_id,
- "background_color",
- &pipe->background_property,
- &prop_value,
+ "background_color", NULL,
+ &pipe->values[IGT_CRTC_BACKGROUND],
NULL);
- pipe->background = (uint32_t)prop_value;
- get_crtc_property(display->drm_fd, pipe->crtc_id,
- "DEGAMMA_LUT",
- &pipe->degamma_property,
- NULL,
- NULL);
- get_crtc_property(display->drm_fd, pipe->crtc_id,
- "CTM",
- &pipe->ctm_property,
- NULL,
- NULL);
- get_crtc_property(display->drm_fd, pipe->crtc_id,
- "GAMMA_LUT",
- &pipe->gamma_property,
- NULL,
- NULL);
-
- igt_atomic_fill_pipe_props(display, pipe, IGT_NUM_CRTC_PROPS, igt_crtc_prop_names);
/* count number of valid planes */
for (j = 0; j < plane_resources->count_planes; j++) {
@@ -1807,7 +1789,7 @@ void igt_display_init(igt_display_t *display, int drm_fd)
igt_plane_set_prop_changed(plane, IGT_PLANE_CRTC_ID);
}
- pipe->mode_changed = true;
+ igt_pipe_refresh(display, i, false);
}
/*
@@ -2284,7 +2266,7 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
if (!igt_plane_is_prop_changed(primary, IGT_PLANE_FB_ID) &&
!(primary->changed & IGT_PLANE_COORD_CHANGED_MASK) &&
- !primary->pipe->mode_changed)
+ !igt_pipe_obj_is_prop_changed(primary->pipe, IGT_CRTC_MODE_ID))
return 0;
crtc_id = pipe->crtc_id;
@@ -2353,6 +2335,16 @@ static int igt_plane_commit(igt_plane_t *plane,
}
}
+static bool is_atomic_prop(enum igt_atomic_crtc_properties prop)
+{
+ if (prop == IGT_CRTC_MODE_ID ||
+ prop == IGT_CRTC_ACTIVE ||
+ prop == IGT_CRTC_OUT_FENCE_PTR)
+ return true;
+
+ return false;
+}
+
/*
* Commit all plane changes to an output. Note that if @s is COMMIT_LEGACY,
* enabling/disabling the primary plane will also enable/disable the CRTC.
@@ -2370,19 +2362,9 @@ static int igt_pipe_commit(igt_pipe_t *pipe,
int i;
int ret;
- if (pipe->background_changed) {
- igt_crtc_set_property(pipe, pipe->background_property,
- pipe->background);
- }
-
- if (pipe->color_mgmt_changed) {
- igt_crtc_set_property(pipe, pipe->degamma_property,
- pipe->degamma_blob);
- igt_crtc_set_property(pipe, pipe->ctm_property,
- pipe->ctm_blob);
- igt_crtc_set_property(pipe, pipe->gamma_property,
- pipe->gamma_blob);
- }
+ for (i = 0; i < IGT_NUM_CRTC_PROPS; i++)
+ if (!is_atomic_prop(i))
+ igt_crtc_set_property(pipe, pipe->props[i], pipe->values[i]);
for (i = 0; i < pipe->n_planes; i++) {
igt_plane_t *plane = &pipe->planes[i];
@@ -2395,9 +2377,10 @@ static int igt_pipe_commit(igt_pipe_t *pipe,
}
static void
-igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length)
+igt_pipe_replace_blob(igt_pipe_t *pipe, enum igt_atomic_crtc_properties prop, void *ptr, size_t length)
{
igt_display_t *display = pipe->display;
+ uint64_t *blob = &pipe->values[prop];
uint32_t blob_id = 0;
if (*blob != 0)
@@ -2409,6 +2392,7 @@ igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length
ptr, length, &blob_id) == 0);
*blob = blob_id;
+ igt_pipe_obj_set_prop_changed(pipe, prop);
}
/*
@@ -2416,51 +2400,23 @@ igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length
*/
static void igt_atomic_prepare_crtc_commit(igt_pipe_t *pipe_obj, drmModeAtomicReq *req)
{
- if (pipe_obj->background_changed)
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_BACKGROUND, pipe_obj->background);
-
- if (pipe_obj->color_mgmt_changed) {
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_DEGAMMA_LUT, pipe_obj->degamma_blob);
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_CTM, pipe_obj->ctm_blob);
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_GAMMA_LUT, pipe_obj->gamma_blob);
- }
-
- if (pipe_obj->mode_changed) {
- igt_output_t *output = igt_pipe_get_output(pipe_obj);
-
- if (!output) {
- igt_pipe_replace_blob(pipe_obj, &pipe_obj->mode_blob, NULL, 0);
-
- LOG(pipe_obj->display, "%s: Setting NULL mode\n",
- kmstest_pipe_name(pipe_obj->pipe));
- } else {
- drmModeModeInfo *mode = igt_output_get_mode(output);
+ int i;
- igt_pipe_replace_blob(pipe_obj, &pipe_obj->mode_blob, mode, sizeof(*mode));
+ for (i = 0; i < IGT_NUM_CRTC_PROPS; i++) {
+ if (!igt_pipe_obj_is_prop_changed(pipe_obj, i))
+ continue;
- LOG(pipe_obj->display, "%s: Setting mode %s from %s\n",
- kmstest_pipe_name(pipe_obj->pipe),
- mode->name, igt_output_name(output));
- }
+ igt_debug("Pipe %s: Setting property \"%s\" to 0x%"PRIx64"/%"PRIi64"\n",
+ kmstest_pipe_name(pipe_obj->pipe), igt_crtc_prop_names[i],
+ pipe_obj->values[i], pipe_obj->values[i]);
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_MODE_ID, pipe_obj->mode_blob);
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_ACTIVE, !!output);
+ igt_assert_lt(0, drmModeAtomicAddProperty(req, pipe_obj->crtc_id, pipe_obj->props[i], pipe_obj->values[i]));
}
if (pipe_obj->out_fence_fd != -1) {
close(pipe_obj->out_fence_fd);
pipe_obj->out_fence_fd = -1;
}
-
- if (pipe_obj->out_fence_requested)
- {
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_OUT_FENCE_PTR,
- (uint64_t)(uintptr_t) &pipe_obj->out_fence_fd);
- }
-
- /*
- * TODO: Add all crtc level properties here
- */
}
/*
@@ -2551,15 +2507,21 @@ display_commit_changed(igt_display_t *display, enum igt_commit_style s)
igt_pipe_t *pipe_obj = &display->pipes[pipe];
igt_plane_t *plane;
- pipe_obj->color_mgmt_changed = false;
- pipe_obj->background_changed = false;
-
- if (s != COMMIT_UNIVERSAL)
- pipe_obj->mode_changed = false;
+ if (s == COMMIT_ATOMIC) {
+ if (igt_pipe_obj_is_prop_changed(pipe_obj, IGT_CRTC_OUT_FENCE_PTR))
+ igt_assert(pipe_obj->out_fence_fd >= 0);
- if (s == COMMIT_ATOMIC && pipe_obj->out_fence_requested) {
- pipe_obj->out_fence_requested = false;
- igt_assert(pipe_obj->out_fence_fd >= 0);
+ pipe_obj->changed = 0;
+ } else {
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_BACKGROUND);
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_CTM);
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_DEGAMMA_LUT);
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_GAMMA_LUT);
+
+ if (s != COMMIT_UNIVERSAL) {
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_ACTIVE);
+ }
}
for_each_plane_on_pipe(display, pipe, plane) {
@@ -2813,33 +2775,83 @@ void igt_output_override_mode(igt_output_t *output, drmModeModeInfo *mode)
output->use_override_mode = !!mode;
- if (pipe)
- pipe->mode_changed = true;
+ if (pipe) {
+ if (output->display->is_atomic)
+ igt_pipe_replace_blob(pipe, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(*mode));
+ else
+ igt_pipe_obj_set_prop_changed(pipe, IGT_CRTC_MODE_ID);
+ }
}
void igt_output_set_pipe(igt_output_t *output, enum pipe pipe)
{
igt_display_t *display = output->display;
- igt_pipe_t *old_pipe;
+ igt_pipe_t *old_pipe = NULL, *pipe_obj = NULL;;
igt_assert(output->name);
- if (output->pending_pipe != PIPE_NONE) {
+ if (output->pending_pipe != PIPE_NONE)
old_pipe = igt_output_get_driving_pipe(output);
- old_pipe->mode_changed = true;
- }
+ if (pipe != PIPE_NONE)
+ pipe_obj = &display->pipes[pipe];
LOG(display, "%s: set_pipe(%s)\n", igt_output_name(output),
kmstest_pipe_name(pipe));
output->pending_pipe = pipe;
- if (pipe != PIPE_NONE)
- display->pipes[pipe].mode_changed = true;
+ if (old_pipe) {
+ igt_output_t *old_output;
+
+ old_output = igt_pipe_get_output(old_pipe);
+ if (!old_output) {
+ if (display->is_atomic)
+ igt_pipe_replace_blob(old_pipe, IGT_CRTC_MODE_ID, NULL, 0);
+ else
+ igt_pipe_obj_set_prop_changed(old_pipe, IGT_CRTC_MODE_ID);
+
+ igt_pipe_obj_set_prop_value(old_pipe, IGT_CRTC_ACTIVE, 0);
+ }
+ }
igt_output_set_prop_value(output, IGT_CONNECTOR_CRTC_ID, pipe == PIPE_NONE ? 0 : display->pipes[pipe].crtc_id);
igt_output_refresh(output);
+
+ if (pipe_obj) {
+ if (display->is_atomic)
+ igt_pipe_replace_blob(pipe_obj, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(drmModeModeInfo));
+ else
+ igt_pipe_obj_set_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
+
+ igt_pipe_obj_set_prop_value(pipe_obj, IGT_CRTC_ACTIVE, 1);
+ }
+}
+
+/*
+ * igt_pipe_refresh:
+ * @display: a pointer to an #igt_display_t structure
+ * @pipe: Pipe to refresh
+ * @force: Should be set to true if mode_blob is no longer considered
+ * to be valid, for example after doing an atomic commit during fork or closing display fd.
+ *
+ * Requests the pipe to be part of the state on next update.
+ * This is useful when state may have been out of sync after
+ * a fork, or we just want to be sure the pipe is included
+ * in the next commit.
+ */
+void igt_pipe_refresh(igt_display_t *display, enum pipe pipe, bool force)
+{
+ igt_pipe_t *pipe_obj = &display->pipes[pipe];
+
+ if (force && display->is_atomic) {
+ igt_output_t *output = igt_pipe_get_output(pipe_obj);
+
+ pipe_obj->values[IGT_CRTC_MODE_ID] = 0;
+ if (output)
+ igt_pipe_replace_blob(pipe_obj, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(drmModeModeInfo));
+ } else
+ igt_pipe_obj_set_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
}
void igt_output_set_scaling_mode(igt_output_t *output, uint64_t scaling_mode)
@@ -3047,28 +3059,25 @@ void igt_plane_set_rotation(igt_plane_t *plane, igt_rotation_t rotation)
*/
void igt_pipe_request_out_fence(igt_pipe_t *pipe)
{
- pipe->out_fence_requested = true;
+ igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_OUT_FENCE_PTR, (ptrdiff_t)&pipe->out_fence_fd);
}
void
igt_pipe_set_degamma_lut(igt_pipe_t *pipe, void *ptr, size_t length)
{
- igt_pipe_replace_blob(pipe, &pipe->degamma_blob, ptr, length);
- pipe->color_mgmt_changed = 1;
+ igt_pipe_replace_blob(pipe, IGT_CRTC_DEGAMMA_LUT, ptr, length);
}
void
igt_pipe_set_ctm_matrix(igt_pipe_t *pipe, void *ptr, size_t length)
{
- igt_pipe_replace_blob(pipe, &pipe->ctm_blob, ptr, length);
- pipe->color_mgmt_changed = 1;
+ igt_pipe_replace_blob(pipe, IGT_CRTC_CTM, ptr, length);
}
void
igt_pipe_set_gamma_lut(igt_pipe_t *pipe, void *ptr, size_t length)
{
- igt_pipe_replace_blob(pipe, &pipe->gamma_blob, ptr, length);
- pipe->color_mgmt_changed = 1;
+ igt_pipe_replace_blob(pipe, IGT_CRTC_GAMMA_LUT, ptr, length);
}
/**
@@ -3089,9 +3098,7 @@ void igt_crtc_set_background(igt_pipe_t *pipe, uint64_t background)
kmstest_pipe_name(pipe->pipe),
pipe->pipe, background);
- pipe->background = background;
-
- pipe->background_changed = true;
+ igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_BACKGROUND, background);
}
void igt_wait_for_vblank_count(int drm_fd, enum pipe pipe, int count)
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index f87f8be31421..b53127ffef5f 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -313,27 +313,13 @@ struct igt_pipe {
int plane_primary;
igt_plane_t *planes;
- uint32_t atomic_props_crtc[IGT_NUM_CRTC_PROPS];
-
- uint64_t background; /* Background color MSB BGR 16bpc LSB */
- uint32_t background_changed : 1;
- uint32_t background_property;
-
- uint64_t degamma_blob;
- uint32_t degamma_property;
- uint64_t ctm_blob;
- uint32_t ctm_property;
- uint64_t gamma_blob;
- uint32_t gamma_property;
- uint32_t color_mgmt_changed : 1;
+ uint64_t changed;
+ uint32_t props[IGT_NUM_CRTC_PROPS];
+ uint64_t values[IGT_NUM_CRTC_PROPS];
uint32_t crtc_id;
- uint64_t mode_blob;
- bool mode_changed;
-
int32_t out_fence_fd;
- bool out_fence_requested;
};
typedef struct {
@@ -527,17 +513,6 @@ static inline bool igt_output_is_connected(igt_output_t *output)
igt_plane_set_prop_changed(plane, prop); \
} while (0)
-/**
- * igt_atomic_populate_crtc_req:
- * @req: A pointer to drmModeAtomicReq
- * @pipe: A pointer igt_pipe_t
- * @prop: one of igt_atomic_crtc_properties
- * @value: the value to add
- */
-#define igt_atomic_populate_crtc_req(req, pipe, prop, value) \
- igt_assert_lt(0, drmModeAtomicAddProperty(req, pipe->crtc_id,\
- pipe->atomic_props_crtc[prop], value))
-
#define igt_output_is_prop_changed(output, prop) \
(!!((output)->changed & (1 << (prop))))
#define igt_output_set_prop_changed(output, prop) \
@@ -552,26 +527,34 @@ static inline bool igt_output_is_connected(igt_output_t *output)
igt_output_set_prop_changed(output, prop); \
} while (0)
-/*
- * igt_pipe_refresh:
- * @display: a pointer to an #igt_display_t structure
- * @pipe: Pipe to refresh
- * @force: Should be set to true if mode_blob is no longer considered
- * to be valid, for example after doing an atomic commit during fork or closing display fd.
- *
- * Requests the pipe to be part of the state on next update.
- * This is useful when state may have been out of sync after
- * a fork, or we just want to be sure the pipe is included
- * in the next commit.
- */
-static inline void
-igt_pipe_refresh(igt_display_t *display, enum pipe pipe, bool force)
-{
- if (force)
- display->pipes[pipe].mode_blob = 0;
+#define igt_pipe_obj_is_prop_changed(pipe_obj, prop) \
+ (!!((pipe_obj)->changed & (1 << (prop))))
- display->pipes[pipe].mode_changed = true;
-}
+#define igt_pipe_is_prop_changed(display, pipe, prop) \
+ igt_pipe_obj_is_prop_changed(&(display)->pipes[(pipe)], prop)
+
+#define igt_pipe_obj_set_prop_changed(pipe_obj, prop) \
+ (pipe_obj)->changed |= 1 << (prop)
+
+#define igt_pipe_set_prop_changed(display, pipe, prop) \
+ igt_pipe_obj_set_prop_changed(&(display)->pipes[(pipe)], prop)
+
+#define igt_pipe_obj_clear_prop_changed(pipe_obj, prop) \
+ (pipe_obj)->changed &= ~(1 << (prop))
+
+#define igt_pipe_clear_prop_changed(display, pipe, prop) \
+ igt_pipe_obj_clear_prop_changed(&(display)->pipes[(pipe)], prop)
+
+#define igt_pipe_obj_set_prop_value(pipe_obj, prop, value) \
+ do { \
+ (pipe_obj)->values[prop] = (value); \
+ igt_pipe_obj_set_prop_changed(pipe_obj, prop); \
+ } while (0)
+
+#define igt_pipe_set_prop_value(display, pipe, prop, value) \
+ igt_pipe_obj_set_prop_value(&(display)->pipes[(pipe)], prop, value)
+
+void igt_pipe_refresh(igt_display_t *display, enum pipe pipe, bool force);
void igt_enable_connectors(void);
void igt_reset_connectors(void);
diff --git a/tests/kms_atomic_interruptible.c b/tests/kms_atomic_interruptible.c
index 5570854390ea..dd753b6e5db3 100644
--- a/tests/kms_atomic_interruptible.c
+++ b/tests/kms_atomic_interruptible.c
@@ -156,8 +156,8 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
uint32_t count_props[3] = { 2, 1, 6 };
uint32_t props[] = {
/* crtc: 2 props */
- plane->pipe->atomic_props_crtc[IGT_CRTC_MODE_ID],
- plane->pipe->atomic_props_crtc[IGT_CRTC_ACTIVE],
+ plane->pipe->props[IGT_CRTC_MODE_ID],
+ plane->pipe->props[IGT_CRTC_ACTIVE],
/* connector: 1 prop */
output->props[IGT_CONNECTOR_CRTC_ID],
/* plane: remainder props */
diff --git a/tests/kms_atomic_transition.c b/tests/kms_atomic_transition.c
index 2ae75f2d6630..7ddb65cea183 100644
--- a/tests/kms_atomic_transition.c
+++ b/tests/kms_atomic_transition.c
@@ -633,7 +633,7 @@ static unsigned set_combinations(igt_display_t *display, unsigned mask, struct i
drmModeModeInfo *mode = NULL;
if (!(mask & (1 << pipe))) {
- if (display->pipes[pipe].mode_blob) {
+ if (igt_pipe_is_prop_changed(display, pipe, IGT_CRTC_ACTIVE)) {
event_mask |= 1 << pipe;
igt_plane_set_fb(plane, NULL);
}
diff --git a/tests/kms_crtc_background_color.c b/tests/kms_crtc_background_color.c
index e12e163449f8..659a30b90219 100644
--- a/tests/kms_crtc_background_color.c
+++ b/tests/kms_crtc_background_color.c
@@ -137,7 +137,7 @@ static void test_crtc_background(data_t *data)
igt_output_set_pipe(output, pipe);
plane = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
- igt_require(plane->pipe->background_property);
+ igt_require(plane->pipe->props[IGT_CRTC_BACKGROUND]);
prepare_crtc(data, output, pipe, plane, 1, PURPLE, BLACK64);
--
2.14.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH i-g-t v2 7/8] igt/kms_rotation_crc : Fix flip tests for sprite plane
2017-09-27 18:16 [PATCH i-g-t v2 0/8] lib/igt_kms: Convert properties to be more atomic-like Maarten Lankhorst
` (5 preceding siblings ...)
2017-09-27 18:16 ` [PATCH i-g-t v2 6/8] lib/igt_kms: Rework pipe properties to be more atomic, v2 Maarten Lankhorst
@ 2017-09-27 18:16 ` Maarten Lankhorst
2017-09-27 18:16 ` [PATCH i-g-t v2 8/8] tests: Rename kms_pipe_color to kms_color Maarten Lankhorst
` (10 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: Maarten Lankhorst @ 2017-09-27 18:16 UTC (permalink / raw)
To: intel-gfx
This test was flipping the primary plane instead of the sprite plane.
Flip the correct plane to make the test pass properly.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102691
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
tests/kms_rotation_crc.c | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
index 4932a0d44410..b8327dfa0d83 100644
--- a/tests/kms_rotation_crc.c
+++ b/tests/kms_rotation_crc.c
@@ -332,6 +332,9 @@ static void test_plane_rotation(data_t *data, int plane_type)
enum igt_commit_style commit = COMMIT_LEGACY;
int ret;
+ if (data->flips && plane_type != DRM_PLANE_TYPE_PRIMARY)
+ igt_require(data->display.is_atomic);
+
if (plane_type == DRM_PLANE_TYPE_PRIMARY || plane_type == DRM_PLANE_TYPE_CURSOR)
commit = COMMIT_UNIVERSAL;
@@ -390,12 +393,20 @@ static void test_plane_rotation(data_t *data, int plane_type)
* check CRC against that one as well.
*/
if (data->flips) {
- ret = drmModePageFlip(data->gfx_fd,
- output->config.crtc->crtc_id,
- data->fb_flip.fb_id,
- DRM_MODE_PAGE_FLIP_EVENT,
- NULL);
- igt_assert_eq(ret, 0);
+ igt_plane_set_fb(plane, &data->fb_flip);
+ if (data->rotation == IGT_ROTATION_90 || data->rotation == IGT_ROTATION_270)
+ igt_plane_set_size(plane, data->fb.height, data->fb.width);
+
+ if (plane_type != DRM_PLANE_TYPE_PRIMARY) {
+ igt_display_commit_atomic(display, DRM_MODE_PAGE_FLIP_EVENT | DRM_MODE_ATOMIC_NONBLOCK, NULL);
+ } else {
+ ret = drmModePageFlip(data->gfx_fd,
+ output->config.crtc->crtc_id,
+ data->fb_flip.fb_id,
+ DRM_MODE_PAGE_FLIP_EVENT,
+ NULL);
+ igt_assert_eq(ret, 0);
+ }
wait_for_pageflip(data->gfx_fd);
igt_pipe_crc_collect_crc(data->pipe_crc,
&crc_output);
--
2.14.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH i-g-t v2 8/8] tests: Rename kms_pipe_color to kms_color
2017-09-27 18:16 [PATCH i-g-t v2 0/8] lib/igt_kms: Convert properties to be more atomic-like Maarten Lankhorst
` (6 preceding siblings ...)
2017-09-27 18:16 ` [PATCH i-g-t v2 7/8] igt/kms_rotation_crc : Fix flip tests for sprite plane Maarten Lankhorst
@ 2017-09-27 18:16 ` Maarten Lankhorst
2017-09-29 10:00 ` Mika Kahola
2017-09-27 18:39 ` ✓ Fi.CI.BAT: success for lib/igt_kms: Convert properties to be more atomic-like. (rev2) Patchwork
` (9 subsequent siblings)
17 siblings, 1 reply; 25+ messages in thread
From: Maarten Lankhorst @ 2017-09-27 18:16 UTC (permalink / raw)
To: intel-gfx
Rename kms_pipe_color to kms_color, and rename the invalid tests to pipe-invalid.
To prepare for adding support for plane color management.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
tests/Makefile.sources | 2 +-
tests/{kms_pipe_color.c => kms_color.c} | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
rename tests/{kms_pipe_color.c => kms_color.c} (99%)
diff --git a/tests/Makefile.sources b/tests/Makefile.sources
index 0adc28a014d2..c4d320ebc61b 100644
--- a/tests/Makefile.sources
+++ b/tests/Makefile.sources
@@ -177,6 +177,7 @@ TESTS_progs = \
kms_busy \
kms_ccs \
kms_chv_cursor_fail \
+ kms_color \
kms_concurrent \
kms_crtc_background_color \
kms_cursor_crc \
@@ -197,7 +198,6 @@ TESTS_progs = \
kms_mmio_vs_cs_flip \
kms_panel_fitting \
kms_pipe_b_c_ivb \
- kms_pipe_color \
kms_pipe_crc_basic \
kms_plane \
kms_plane_lowres \
diff --git a/tests/kms_pipe_color.c b/tests/kms_color.c
similarity index 99%
rename from tests/kms_pipe_color.c
rename to tests/kms_color.c
index ccfc08e6be15..060a60152808 100644
--- a/tests/kms_pipe_color.c
+++ b/tests/kms_color.c
@@ -1205,10 +1205,10 @@ igt_main
igt_subtest_group
run_tests_for_pipe(&data, pipe);
- igt_subtest_f("invalid-lut-sizes")
+ igt_subtest_f("pipe-invalid-lut-sizes")
invalid_lut_sizes(&data);
- igt_subtest_f("invalid-ctm-matrix-sizes")
+ igt_subtest_f("pipe-invalid-ctm-matrix-sizes")
invalid_ctm_matrix_sizes(&data);
igt_fixture {
--
2.14.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 25+ messages in thread
* ✓ Fi.CI.BAT: success for lib/igt_kms: Convert properties to be more atomic-like. (rev2)
2017-09-27 18:16 [PATCH i-g-t v2 0/8] lib/igt_kms: Convert properties to be more atomic-like Maarten Lankhorst
` (7 preceding siblings ...)
2017-09-27 18:16 ` [PATCH i-g-t v2 8/8] tests: Rename kms_pipe_color to kms_color Maarten Lankhorst
@ 2017-09-27 18:39 ` Patchwork
2017-09-27 22:51 ` ✗ Fi.CI.IGT: failure " Patchwork
` (8 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2017-09-27 18:39 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
== Series Details ==
Series: lib/igt_kms: Convert properties to be more atomic-like. (rev2)
URL : https://patchwork.freedesktop.org/series/30903/
State : success
== Summary ==
IGT patchset tested on top of latest successful build
2885b10f99b4beeb046e75af8b8488c229f629d3 igt/gem_exec_schedule: Ignore set-priority failures on old kernels
with latest DRM-Tip kernel build CI_DRM_3146
aa884e1abdf2 drm-tip: 2017y-09m-27d-15h-39m-07s UTC integration manifest
fi-bdw-5557u total:289 pass:268 dwarn:0 dfail:0 fail:0 skip:21 time:444s
fi-bdw-gvtdvm total:289 pass:265 dwarn:0 dfail:0 fail:0 skip:24 time:476s
fi-blb-e6850 total:289 pass:224 dwarn:1 dfail:0 fail:0 skip:64 time:425s
fi-bsw-n3050 total:289 pass:243 dwarn:0 dfail:0 fail:0 skip:46 time:520s
fi-bwr-2160 total:289 pass:184 dwarn:0 dfail:0 fail:0 skip:105 time:281s
fi-bxt-j4205 total:289 pass:260 dwarn:0 dfail:0 fail:0 skip:29 time:499s
fi-byt-j1900 total:289 pass:254 dwarn:1 dfail:0 fail:0 skip:34 time:511s
fi-cfl-s total:289 pass:222 dwarn:27 dfail:0 fail:8 skip:32 time:523s
fi-cnl-y total:289 pass:259 dwarn:0 dfail:0 fail:3 skip:27 time:653s
fi-elk-e7500 total:289 pass:230 dwarn:0 dfail:0 fail:0 skip:59 time:421s
fi-glk-1 total:289 pass:260 dwarn:0 dfail:0 fail:0 skip:29 time:563s
fi-hsw-4770 total:289 pass:263 dwarn:0 dfail:0 fail:0 skip:26 time:428s
fi-hsw-4770r total:289 pass:263 dwarn:0 dfail:0 fail:0 skip:26 time:407s
fi-ilk-650 total:289 pass:221 dwarn:0 dfail:0 fail:8 skip:60 time:432s
fi-ivb-3520m total:289 pass:261 dwarn:0 dfail:0 fail:0 skip:28 time:493s
fi-ivb-3770 total:289 pass:261 dwarn:0 dfail:0 fail:0 skip:28 time:467s
fi-kbl-7500u total:289 pass:256 dwarn:1 dfail:0 fail:8 skip:24 time:462s
fi-kbl-7560u total:289 pass:270 dwarn:0 dfail:0 fail:0 skip:19 time:587s
fi-kbl-r total:289 pass:262 dwarn:0 dfail:0 fail:0 skip:27 time:591s
fi-pnv-d510 total:289 pass:223 dwarn:1 dfail:0 fail:0 skip:65 time:544s
fi-skl-6260u total:289 pass:269 dwarn:0 dfail:0 fail:0 skip:20 time:456s
fi-skl-6700k total:289 pass:257 dwarn:0 dfail:0 fail:8 skip:24 time:740s
fi-skl-6770hq total:289 pass:261 dwarn:0 dfail:0 fail:8 skip:20 time:487s
fi-skl-gvtdvm total:289 pass:266 dwarn:0 dfail:0 fail:0 skip:23 time:479s
fi-snb-2520m total:289 pass:243 dwarn:0 dfail:0 fail:8 skip:38 time:557s
fi-snb-2600 total:289 pass:250 dwarn:0 dfail:0 fail:0 skip:39 time:417s
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_259/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev2)
2017-09-27 18:16 [PATCH i-g-t v2 0/8] lib/igt_kms: Convert properties to be more atomic-like Maarten Lankhorst
` (8 preceding siblings ...)
2017-09-27 18:39 ` ✓ Fi.CI.BAT: success for lib/igt_kms: Convert properties to be more atomic-like. (rev2) Patchwork
@ 2017-09-27 22:51 ` Patchwork
2017-09-28 10:50 ` ✓ Fi.CI.BAT: success for lib/igt_kms: Convert properties to be more atomic-like. (rev4) Patchwork
` (7 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2017-09-27 22:51 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
== Series Details ==
Series: lib/igt_kms: Convert properties to be more atomic-like. (rev2)
URL : https://patchwork.freedesktop.org/series/30903/
State : failure
== Summary ==
Test pm_rpm:
Subgroup modeset-lpsp:
pass -> SKIP (shard-hsw)
Subgroup modeset-lpsp-stress-no-wait:
pass -> SKIP (shard-hsw)
Subgroup reg-read-ioctl:
skip -> PASS (shard-hsw)
Subgroup gem-idle:
skip -> PASS (shard-hsw)
Subgroup dpms-non-lpsp:
skip -> PASS (shard-hsw)
Subgroup modeset-pc8-residency-stress:
pass -> SKIP (shard-hsw)
Subgroup gem-execbuf-stress-pc8:
pass -> SKIP (shard-hsw)
Subgroup gem-mmap-gtt:
skip -> PASS (shard-hsw)
Subgroup pm-tiling:
skip -> PASS (shard-hsw)
Subgroup debugfs-read:
fail -> PASS (shard-hsw)
Subgroup system-suspend-modeset:
skip -> PASS (shard-hsw)
Subgroup modeset-lpsp-stress:
pass -> SKIP (shard-hsw)
Subgroup gem-evict-pwrite:
skip -> PASS (shard-hsw)
Subgroup dpms-lpsp:
pass -> SKIP (shard-hsw)
Subgroup system-suspend-execbuf:
skip -> PASS (shard-hsw)
Test prime_busy:
Subgroup after-vebox:
skip -> PASS (shard-hsw)
Subgroup before-vebox:
skip -> PASS (shard-hsw)
Subgroup after-bsd1:
pass -> SKIP (shard-hsw)
Subgroup before-bsd1:
pass -> SKIP (shard-hsw)
Subgroup before-render:
skip -> PASS (shard-hsw)
Subgroup basic-before-default:
skip -> PASS (shard-hsw)
Subgroup basic-after-default:
skip -> PASS (shard-hsw)
Subgroup hang-bsd:
skip -> PASS (shard-hsw)
Subgroup after-blt:
skip -> PASS (shard-hsw)
Subgroup hang-blt:
skip -> PASS (shard-hsw)
Subgroup wait-hang-bsd1:
pass -> SKIP (shard-hsw)
Subgroup wait-hang-render:
skip -> PASS (shard-hsw)
Subgroup wait-before-bsd2:
pass -> SKIP (shard-hsw)
Subgroup wait-after-bsd2:
pass -> SKIP (shard-hsw)
Subgroup hang-vebox:
skip -> PASS (shard-hsw)
Test kms_flip:
Subgroup 2x-flip-vs-wf_vblank:
pass -> SKIP (shard-hsw)
Subgroup vblank-vs-suspend:
skip -> PASS (shard-hsw)
Subgroup 2x-single-buffer-flip-vs-dpms-off-vs-modeset:
pass -> SKIP (shard-hsw)
Subgroup blt-wf_vblank-vs-modeset-interruptible:
skip -> PASS (shard-hsw)
Subgroup flip-vs-fences:
fail -> PASS (shard-hsw)
Subgroup plain-flip-fb-recreate-interruptible:
skip -> PASS (shard-hsw) fdo#100368 +1
Subgroup 2x-blt-flip-vs-panning:
pass -> SKIP (shard-hsw)
Subgroup flip-vs-panning:
skip -> PASS (shard-hsw)
Subgroup 2x-blt-wf_vblank-vs-modeset-interruptible:
pass -> SKIP (shard-hsw)
Subgroup 2x-render-flip-vs-panning:
pass -> SKIP (shard-hsw)
Subgroup 2x-vblank-vs-hang-interruptible:
pass -> SKIP (shard-hsw)
Subgroup wf_vblank-vs-modeset:
skip -> PASS (shard-hsw) fdo#102614 +2
Subgroup 2x-vblank-vs-suspend:
fail -> SKIP (shard-hsw)
Subgroup wf_vblank-vs-modeset-interruptible:
skip -> PASS (shard-hsw)
Subgroup 2x-busy-flip:
pass -> SKIP (shard-hsw)
Subgroup 2x-absolute-wf_vblank-interruptible:
pass -> SKIP (shard-hsw)
Subgroup basic-flip-vs-wf_vblank:
skip -> PASS (shard-hsw)
Subgroup 2x-wf_vblank-vs-modeset-interruptible:
pass -> SKIP (shard-hsw)
Subgroup blocking-wf_vblank:
skip -> PASS (shard-hsw)
Subgroup 2x-flip-vs-expired-vblank-interruptible:
pass -> SKIP (shard-hsw)
Subgroup 2x-vblank-vs-suspend-interruptible:
pass -> SKIP (shard-hsw)
Subgroup 2x-wf_vblank-vs-dpms-interruptible:
pass -> SKIP (shard-hsw)
Subgroup nonblocking-read:
skip -> PASS (shard-hsw)
Subgroup wf_vblank-vs-dpms-interruptible:
skip -> PASS (shard-hsw)
Subgroup 2x-plain-flip-interruptible:
pass -> SKIP (shard-hsw)
Subgroup 2x-wf_vblank-vs-modeset:
pass -> SKIP (shard-hsw)
Subgroup plain-flip-fb-recreate:
skip -> PASS (shard-hsw) fdo#102504
Subgroup vblank-vs-hang:
skip -> PASS (shard-hsw)
Subgroup flip-vs-absolute-wf_vblank-interruptible:
skip -> PASS (shard-hsw)
Subgroup wf_vblank-interruptible:
skip -> PASS (shard-hsw)
Subgroup 2x-flip-vs-panning-vs-hang:
pass -> SKIP (shard-hsw)
Subgroup blt-wf_vblank-vs-dpms:
skip -> PASS (shard-hsw)
Subgroup flip-vs-panning-interruptible:
skip -> PASS (shard-hsw)
Subgroup 2x-render-flip-vs-panning-interruptible:
pass -> SKIP (shard-hsw)
Subgroup 2x-dpms-vs-vblank-race:
pass -> SKIP (shard-hsw)
Subgroup 2x-flip-vs-fences-interruptible:
pass -> SKIP (shard-hsw)
Subgroup 2x-vblank-vs-dpms-suspend-interruptible:
pass -> SKIP (shard-hsw)
Subgroup 2x-flip-vs-panning-vs-hang-interruptible:
pass -> SKIP (shard-hsw)
Subgroup modeset-vs-vblank-race-interruptible:
skip -> PASS (shard-hsw)
Subgroup flip-vs-bad-tiling:
pass -> SKIP (shard-hsw)
Subgroup vblank-vs-dpms-suspend:
skip -> PASS (shard-hsw)
Subgroup blt-flip-vs-panning:
skip -> PASS (shard-hsw)
Subgroup 2x-blt-wf_vblank-vs-dpms-interruptible:
pass -> SKIP (shard-hsw)
Subgroup vblank-vs-dpms-suspend-interruptible:
skip -> PASS (shard-hsw)
Subgroup 2x-flip-vs-bad-tiling:
pass -> SKIP (shard-hsw)
Subgroup flip-vs-dpms-off-vs-modeset-interruptible:
skip -> PASS (shard-hsw)
Subgroup vblank-vs-dpms-rpm:
skip -> PASS (shard-hsw)
Subgroup blt-wf_vblank-vs-dpms-interruptible:
skip -> PASS (shard-hsw)
Subgroup rcs-wf_vblank-vs-modeset-interruptible:
skip -> PASS (shard-hsw)
Subgroup vblank-vs-dpms-rpm-interruptible:
skip -> PASS (shard-hsw)
Subgroup 2x-vblank-vs-modeset-suspend:
pass -> SKIP (shard-hsw)
Subgroup vblank-vs-modeset-rpm:
skip -> PASS (shard-hsw)
Subgroup 2x-blt-flip-vs-panning-interruptible:
pass -> SKIP (shard-hsw)
Subgroup 2x-flip-vs-fences:
pass -> SKIP (shard-hsw)
Subgroup 2x-flip-vs-rmfb-interruptible:
pass -> SKIP (shard-hsw)
Subgroup vblank-vs-modeset-rpm-interruptible:
skip -> PASS (shard-hsw)
Subgroup 2x-rcs-wf_vblank-vs-dpms-interruptible:
pass -> SKIP (shard-hsw)
Subgroup flip-vs-expired-vblank-interruptible:
skip -> PASS (shard-hsw) fdo#102887
Subgroup blt-flip-vs-panning-interruptible:
skip -> PASS (shard-hsw)
Subgroup vblank-vs-suspend-interruptible:
skip -> PASS (shard-hsw)
Subgroup 2x-flip-vs-modeset-interruptible:
pass -> SKIP (shard-hsw)
Subgroup 2x-blocking-absolute-wf_vblank-interruptible:
pass -> SKIP (shard-hsw)
Subgroup 2x-flip-vs-dpms-interruptible:
pass -> SKIP (shard-hsw)
Subgroup single-buffer-flip-vs-dpms-off-vs-modeset:
skip -> PASS (shard-hsw)
Subgroup dpms-vs-vblank-race:
skip -> PASS (shard-hsw)
Subgroup 2x-vblank-vs-hang:
pass -> SKIP (shard-hsw)
Subgroup 2x-blt-wf_vblank-vs-dpms:
pass -> SKIP (shard-hsw)
Subgroup flip-vs-modeset-vs-hang:
skip -> PASS (shard-hsw)
Subgroup flip-vs-wf_vblank-interruptible:
skip -> PASS (shard-hsw)
Subgroup plain-flip-ts-check-interruptible:
skip -> PASS (shard-hsw) fdo#103005
Subgroup 2x-blt-wf_vblank-vs-modeset:
pass -> SKIP (shard-hsw)
Subgroup 2x-plain-flip:
pass -> SKIP (shard-hsw)
Subgroup 2x-flip-vs-absolute-wf_vblank:
pass -> SKIP (shard-hsw)
Subgroup vblank-vs-modeset-suspend-interruptible:
skip -> PASS (shard-hsw)
Subgroup absolute-wf_vblank-interruptible:
skip -> PASS (shard-hsw)
Subgroup 2x-nonexisting-fb-interruptible:
pass -> SKIP (shard-hsw)
Subgroup flip-vs-panning-vs-hang-interruptible:
skip -> PASS (shard-hsw)
Subgroup 2x-nonexisting-fb:
pass -> SKIP (shard-hsw)
Subgroup wf_vblank-ts-check:
skip -> PASS (shard-hsw)
Subgroup 2x-rcs-wf_vblank-vs-modeset-interruptible:
pass -> SKIP (shard-hsw)
Subgroup 2x-flip-vs-dpms-off-vs-modeset-interruptible:
pass -> SKIP (shard-hsw)
Test perf:
Subgroup oa-exponents:
skip -> FAIL (shard-hsw) fdo#102254
Subgroup invalid-oa-format-id:
skip -> PASS (shard-hsw)
Subgroup unprivileged-singled-ctx-counters:
skip -> PASS (shard-hsw)
Subgroup create-destroy-userspace-config:
skip -> PASS (shard-hsw)
Subgroup buffer-fill:
skip -> PASS (shard-hsw)
Subgroup invalid-create-userspace-config:
skip -> PASS (shard-hsw)
Subgroup per-context-mode-unprivileged:
skip -> PASS (shard-hsw)
Subgroup low-oa-exponent-permissions:
skip -> PASS (shard-hsw)
Subgroup whitelisted-registers-userspace-config:
skip -> PASS (shard-hsw)
Subgroup polling:
pass -> FAIL (shard-hsw) fdo#102252
Subgroup missing-sample-flags:
skip -> PASS (shard-hsw)
Test kms_frontbuffer_tracking:
Subgroup psr-2p-scndscrn-spr-indfb-draw-pwrite:
fail -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-spr-indfb-fullscreen:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-primscrn-shrfb-pgflip-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-pri-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-rgb565-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-cur-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-shrfb-msflip-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-offscren-pri-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-spr-indfb-draw-mmap-wc:
skip -> PASS (shard-hsw)
Subgroup fbcpsr-1p-primscrn-cur-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-spr-indfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-primscrn-pri-indfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-indfb-msflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-spr-indfb-move:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-slowdraw:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-cur-indfb-move:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-indfb-plflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-pri-indfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-primscrn-cur-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-indfb-msflip-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-primscrn-cur-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-cur-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-primscrn-pri-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-primscrn-spr-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-cur-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-badstride:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-spr-indfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-shrfb-msflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-spr-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-spr-indfb-onoff:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-spr-indfb-draw-mmap-gtt:
skip -> PASS (shard-hsw)
Subgroup fbc-1p-offscren-pri-indfb-draw-render:
skip -> PASS (shard-hsw)
Subgroup psr-2p-scndscrn-pri-shrfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-spr-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-pri-shrfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-indfb-scaledprimary:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-indfb-msflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-spr-indfb-draw-pwrite:
skip -> PASS (shard-hsw)
Subgroup fbc-2p-scndscrn-spr-indfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-primscrn-cur-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-spr-indfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-rgb565-draw-render:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-pri-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-offscren-pri-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-pri-indfb-draw-mmap-cpu:
skip -> PASS (shard-hsw)
Subgroup fbc-2p-scndscrn-shrfb-msflip-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-primscrn-shrfb-pgflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-cur-indfb-onoff:
pass -> SKIP (shard-hsw)
Subgroup fbc-modesetfrombusy:
skip -> PASS (shard-hsw)
Subgroup fbc-badstride:
skip -> PASS (shard-hsw)
Subgroup psr-2p-scndscrn-pri-shrfb-draw-mmap-cpu:
fail -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-shrfb-pgflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-pri-indfb-draw-mmap-wc:
skip -> PASS (shard-hsw)
Subgroup fbcpsr-1p-offscren-pri-shrfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-pri-shrfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup psr-rgb565-draw-render:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-pri-indfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-spr-indfb-fullscreen:
pass -> SKIP (shard-hsw)
Subgroup psr-shrfb-scaledprimary:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-primscrn-cur-indfb-onoff:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-cur-indfb-move:
skip -> PASS (shard-hsw)
Subgroup fbcpsr-1p-primscrn-pri-shrfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-indfb-msflip-blt:
skip -> PASS (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-pri-shrfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-offscren-pri-shrfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-cur-indfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-cur-indfb-draw-pwrite:
skip -> PASS (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-spr-indfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-offscren-pri-indfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-primscrn-pri-shrfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-primscrn-pri-indfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-cur-indfb-onoff:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-shrfb-msflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbc
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_259/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH i-g-t v2 5/8] lib/igt_kms: Rework plane properties to be more atomic, v3.
2017-09-27 18:16 ` [PATCH i-g-t v2 5/8] lib/igt_kms: Rework plane " Maarten Lankhorst
@ 2017-09-28 10:28 ` Maarten Lankhorst
2017-09-28 11:01 ` [PATCH i-g-t v2 5/8] lib/igt_kms: Rework plane properties to be more atomic, v4 Maarten Lankhorst
0 siblings, 1 reply; 25+ messages in thread
From: Maarten Lankhorst @ 2017-09-28 10:28 UTC (permalink / raw)
To: intel-gfx
In the future I want to allow tests to commit more properties,
but for this to work I have to fix all properties to work better
with atomic commit. Instead of special casing each
property make a bitmask for all property changed flags, and try to
commit all properties.
Changes since v1:
- Remove special dumping of src and crtc coordinates.
- Dump all modified coordinates.
Changes since v2:
- Move igt_plane_set_prop_changed up slightly.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
lib/igt_kms.c | 293 +++++++++++++++++----------------------
lib/igt_kms.h | 59 ++++----
tests/kms_atomic_interruptible.c | 12 +-
tests/kms_rotation_crc.c | 4 +-
4 files changed, 159 insertions(+), 209 deletions(-)
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 07d2074c2b1a..6e0052ebe7a7 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -192,11 +192,11 @@ const char *igt_connector_prop_names[IGT_NUM_CONNECTOR_PROPS] = {
/*
* Retrieve all the properies specified in props_name and store them into
- * plane->atomic_props_plane.
+ * plane->props.
*/
static void
-igt_atomic_fill_plane_props(igt_display_t *display, igt_plane_t *plane,
- int num_props, const char **prop_names)
+igt_fill_plane_props(igt_display_t *display, igt_plane_t *plane,
+ int num_props, const char **prop_names)
{
drmModeObjectPropertiesPtr props;
int i, j, fd;
@@ -214,7 +214,7 @@ igt_atomic_fill_plane_props(igt_display_t *display, igt_plane_t *plane,
if (strcmp(prop->name, prop_names[j]) != 0)
continue;
- plane->atomic_props_plane[j] = props->props[i];
+ plane->props[j] = props->props[i];
break;
}
@@ -1659,7 +1659,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
drmModeRes *resources;
drmModePlaneRes *plane_resources;
int i;
- int is_atomic = 0;
memset(display, 0, sizeof(igt_display_t));
@@ -1679,7 +1678,9 @@ void igt_display_init(igt_display_t *display, int drm_fd)
igt_assert_f(display->pipes, "Failed to allocate memory for %d pipes\n", display->n_pipes);
drmSetClientCap(drm_fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1);
- is_atomic = drmSetClientCap(drm_fd, DRM_CLIENT_CAP_ATOMIC, 1);
+ if (drmSetClientCap(drm_fd, DRM_CLIENT_CAP_ATOMIC, 1) == 0)
+ display->is_atomic = 1;
+
plane_resources = drmModeGetPlaneResources(display->drm_fd);
igt_assert(plane_resources);
@@ -1776,19 +1777,19 @@ void igt_display_init(igt_display_t *display, int drm_fd)
plane->type = type;
plane->pipe = pipe;
plane->drm_plane = drm_plane;
- plane->fence_fd = -1;
+ plane->values[IGT_PLANE_IN_FENCE_FD] = ~0ULL;
- if (is_atomic == 0) {
- display->is_atomic = 1;
- igt_atomic_fill_plane_props(display, plane, IGT_NUM_PLANE_PROPS, igt_plane_prop_names);
- }
+ 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->rotation_property,
- &prop_value,
+ &plane->props[IGT_PLANE_ROTATION],
+ &plane->values[IGT_PLANE_ROTATION],
NULL);
- plane->rotation = (igt_rotation_t)prop_value;
+
+ /* Clear any residual framebuffer on first commit. */
+ igt_plane_set_prop_changed(plane, IGT_PLANE_FB_ID);
+ igt_plane_set_prop_changed(plane, IGT_PLANE_CRTC_ID);
}
/*
@@ -1805,9 +1806,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
pipe->n_planes = n_planes;
- for_each_plane_on_pipe(display, i, plane)
- plane->fb_changed = true;
-
pipe->mode_changed = true;
}
@@ -2070,18 +2068,7 @@ bool igt_pipe_get_property(igt_pipe_t *pipe, const char *name,
static uint32_t igt_plane_get_fb_id(igt_plane_t *plane)
{
- if (plane->fb)
- return plane->fb->fb_id;
- else
- return 0;
-}
-
-static uint32_t igt_plane_get_fb_gem_handle(igt_plane_t *plane)
-{
- if (plane->fb)
- return plane->fb->gem_handle;
- else
- return 0;
+ return plane->values[IGT_PLANE_FB_ID];
}
#define CHECK_RETURN(r, fail) { \
@@ -2090,9 +2077,6 @@ static uint32_t igt_plane_get_fb_gem_handle(igt_plane_t *plane)
igt_assert_eq(r, 0); \
}
-
-
-
/*
* Add position and fb changes of a plane to the atomic property set
*/
@@ -2101,63 +2085,31 @@ igt_atomic_prepare_plane_commit(igt_plane_t *plane, igt_pipe_t *pipe,
drmModeAtomicReq *req)
{
igt_display_t *display = pipe->display;
- uint32_t fb_id, crtc_id;
+ int i;
igt_assert(plane->drm_plane);
- /* it's an error to try an unsupported feature */
- igt_assert(igt_plane_supports_rotation(plane) ||
- !plane->rotation_changed);
-
- fb_id = igt_plane_get_fb_id(plane);
- crtc_id = pipe->crtc_id;
-
LOG(display,
"populating plane data: %s.%d, fb %u\n",
kmstest_pipe_name(pipe->pipe),
plane->index,
- fb_id);
-
- if (plane->fence_fd >= 0) {
- uint64_t fence_fd = (int64_t) plane->fence_fd;
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_IN_FENCE_FD, fence_fd);
- }
+ igt_plane_get_fb_id(plane));
- if (plane->fb_changed) {
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_ID, fb_id ? crtc_id : 0);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_FB_ID, fb_id);
- }
-
- if (plane->position_changed || plane->size_changed) {
- uint32_t src_x = IGT_FIXED(plane->src_x, 0); /* src_x */
- uint32_t src_y = IGT_FIXED(plane->src_y, 0); /* src_y */
- uint32_t src_w = IGT_FIXED(plane->src_w, 0); /* src_w */
- uint32_t src_h = IGT_FIXED(plane->src_h, 0); /* src_h */
- int32_t crtc_x = plane->crtc_x;
- int32_t crtc_y = plane->crtc_y;
- uint32_t crtc_w = plane->crtc_w;
- uint32_t crtc_h = plane->crtc_h;
+ for (i = 0; i < IGT_NUM_PLANE_PROPS; i++) {
+ if (!igt_plane_is_prop_changed(plane, i))
+ continue;
- LOG(display,
- "src = (%d, %d) %u x %u "
- "dst = (%d, %d) %u x %u\n",
- src_x >> 16, src_y >> 16, src_w >> 16, src_h >> 16,
- crtc_x, crtc_y, crtc_w, crtc_h);
+ /* it's an error to try an unsupported feature */
+ igt_assert(plane->props[i]);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_X, src_x);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_Y, src_y);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_W, src_w);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_H, src_h);
+ igt_debug("plane %s.%d: Setting property \"%s\" to 0x%"PRIx64"/%"PRIi64"\n",
+ kmstest_pipe_name(pipe->pipe), plane->index, igt_plane_prop_names[i],
+ plane->values[i], plane->values[i]);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_X, crtc_x);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_Y, crtc_y);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_W, crtc_w);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_H, crtc_h);
+ igt_assert_lt(0, drmModeAtomicAddProperty(req, plane->drm_plane->plane_id,
+ plane->props[i],
+ plane->values[i]));
}
-
- if (plane->rotation_changed)
- igt_atomic_populate_plane_req(req, plane,
- IGT_PLANE_ROTATION, plane->rotation);
}
@@ -2183,17 +2135,20 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
int32_t crtc_y;
uint32_t crtc_w;
uint32_t crtc_h;
+ bool setplane =
+ igt_plane_is_prop_changed(plane, IGT_PLANE_FB_ID) ||
+ plane->changed & IGT_PLANE_COORD_CHANGED_MASK;
igt_assert(plane->drm_plane);
/* it's an error to try an unsupported feature */
igt_assert(igt_plane_supports_rotation(plane) ||
- !plane->rotation_changed);
+ !igt_plane_is_prop_changed(plane, IGT_PLANE_ROTATION));
fb_id = igt_plane_get_fb_id(plane);
crtc_id = pipe->crtc_id;
- if ((plane->fb_changed || plane->size_changed) && fb_id == 0) {
+ if (setplane && fb_id == 0) {
LOG(display,
"SetPlane pipe %s, plane %d, disabling\n",
kmstest_pipe_name(pipe->pipe),
@@ -2212,16 +2167,15 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
IGT_FIXED(0,0) /* src_h */);
CHECK_RETURN(ret, fail_on_error);
- } else if (plane->fb_changed || plane->position_changed ||
- plane->size_changed) {
- src_x = IGT_FIXED(plane->src_x,0); /* src_x */
- src_y = IGT_FIXED(plane->src_y,0); /* src_y */
- src_w = IGT_FIXED(plane->src_w,0); /* src_w */
- src_h = IGT_FIXED(plane->src_h,0); /* src_h */
- crtc_x = plane->crtc_x;
- crtc_y = plane->crtc_y;
- crtc_w = plane->crtc_w;
- crtc_h = plane->crtc_h;
+ } else if (setplane) {
+ src_x = plane->values[IGT_PLANE_SRC_X];
+ src_y = plane->values[IGT_PLANE_SRC_Y];
+ src_w = plane->values[IGT_PLANE_SRC_W];
+ src_h = plane->values[IGT_PLANE_SRC_H];
+ crtc_x = plane->values[IGT_PLANE_CRTC_X];
+ crtc_y = plane->values[IGT_PLANE_CRTC_Y];
+ crtc_w = plane->values[IGT_PLANE_CRTC_W];
+ crtc_h = plane->values[IGT_PLANE_CRTC_H];
LOG(display,
"SetPlane %s.%d, fb %u, src = (%d, %d) "
@@ -2245,9 +2199,10 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
CHECK_RETURN(ret, fail_on_error);
}
- if (plane->rotation_changed) {
- ret = igt_plane_set_property(plane, plane->rotation_property,
- plane->rotation);
+ if (igt_plane_is_prop_changed(plane, IGT_PLANE_ROTATION)) {
+ ret = igt_plane_set_property(plane,
+ plane->props[IGT_PLANE_ROTATION],
+ plane->values[IGT_PLANE_ROTATION]);
CHECK_RETURN(ret, fail_on_error);
}
@@ -2269,35 +2224,30 @@ static int igt_cursor_commit_legacy(igt_plane_t *cursor,
uint32_t crtc_id = pipe->crtc_id;
int ret;
- if (cursor->fb_changed) {
- uint32_t gem_handle = igt_plane_get_fb_gem_handle(cursor);
-
- if (gem_handle) {
+ if (igt_plane_is_prop_changed(cursor, IGT_PLANE_FB_ID)) {
+ if (cursor->gem_handle)
LOG(display,
"SetCursor pipe %s, fb %u %dx%d\n",
kmstest_pipe_name(pipe->pipe),
- gem_handle,
- cursor->crtc_w, cursor->crtc_h);
-
- ret = drmModeSetCursor(display->drm_fd, crtc_id,
- gem_handle,
- cursor->crtc_w,
- cursor->crtc_h);
- } else {
+ cursor->gem_handle,
+ (unsigned)cursor->values[IGT_PLANE_CRTC_W],
+ (unsigned)cursor->values[IGT_PLANE_CRTC_H]);
+ else
LOG(display,
"SetCursor pipe %s, disabling\n",
kmstest_pipe_name(pipe->pipe));
- ret = drmModeSetCursor(display->drm_fd, crtc_id,
- 0, 0, 0);
- }
-
+ ret = drmModeSetCursor(display->drm_fd, crtc_id,
+ cursor->gem_handle,
+ cursor->values[IGT_PLANE_CRTC_W],
+ cursor->values[IGT_PLANE_CRTC_H]);
CHECK_RETURN(ret, fail_on_error);
}
- if (cursor->position_changed) {
- int x = cursor->crtc_x;
- int y = cursor->crtc_y;
+ if (igt_plane_is_prop_changed(cursor, IGT_PLANE_CRTC_X) ||
+ igt_plane_is_prop_changed(cursor, IGT_PLANE_CRTC_Y)) {
+ int x = cursor->values[IGT_PLANE_CRTC_X];
+ int y = cursor->values[IGT_PLANE_CRTC_Y];
LOG(display,
"MoveCursor pipe %s, (%d, %d)\n",
@@ -2326,13 +2276,14 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
int ret;
/* Primary planes can't be windowed when using a legacy commit */
- igt_assert((primary->crtc_x == 0 && primary->crtc_y == 0));
+ igt_assert((primary->values[IGT_PLANE_CRTC_X] == 0 && primary->values[IGT_PLANE_CRTC_Y] == 0));
/* nor rotated */
- igt_assert(!primary->rotation_changed);
+ igt_assert(!igt_plane_is_prop_changed(primary, IGT_PLANE_ROTATION));
- if (!primary->fb_changed && !primary->position_changed &&
- !primary->size_changed && !primary->pipe->mode_changed)
+ if (!igt_plane_is_prop_changed(primary, IGT_PLANE_FB_ID) &&
+ !(primary->changed & IGT_PLANE_COORD_CHANGED_MASK) &&
+ !primary->pipe->mode_changed)
return 0;
crtc_id = pipe->crtc_id;
@@ -2343,19 +2294,22 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
mode = NULL;
if (fb_id) {
+ uint32_t src_x = primary->values[IGT_PLANE_SRC_X] >> 16;
+ uint32_t src_y = primary->values[IGT_PLANE_SRC_Y] >> 16;
+
LOG(display,
"%s: SetCrtc pipe %s, fb %u, src (%d, %d), "
"mode %dx%d\n",
igt_output_name(output),
kmstest_pipe_name(pipe->pipe),
fb_id,
- primary->src_x, primary->src_y,
+ src_x, src_y,
mode->hdisplay, mode->vdisplay);
ret = drmModeSetCrtc(display->drm_fd,
crtc_id,
fb_id,
- primary->src_x, primary->src_y,
+ src_x, src_y,
&output->id,
1,
mode);
@@ -2608,18 +2562,27 @@ display_commit_changed(igt_display_t *display, enum igt_commit_style s)
}
for_each_plane_on_pipe(display, pipe, plane) {
- plane->fb_changed = false;
- plane->position_changed = false;
- plane->size_changed = false;
+ if (s == COMMIT_ATOMIC) {
+ int fd;
+ plane->changed = 0;
- if (s != COMMIT_LEGACY ||
- !(plane->type == DRM_PLANE_TYPE_PRIMARY ||
- plane->type == DRM_PLANE_TYPE_CURSOR))
- plane->rotation_changed = false;
+ fd = plane->values[IGT_PLANE_IN_FENCE_FD];
+ if (fd != -1)
+ close(fd);
- if (s == COMMIT_ATOMIC)
/* reset fence_fd to prevent it from being set for the next commit */
- igt_plane_set_fence_fd(plane, -1);
+ plane->values[IGT_PLANE_IN_FENCE_FD] = -1;
+ } else {
+ plane->changed &= ~IGT_PLANE_COORD_CHANGED_MASK;
+
+ igt_plane_clear_prop_changed(plane, IGT_PLANE_CRTC_ID);
+ igt_plane_clear_prop_changed(plane, IGT_PLANE_FB_ID);
+
+ if (s != COMMIT_LEGACY ||
+ !(plane->type == DRM_PLANE_TYPE_PRIMARY ||
+ plane->type == DRM_PLANE_TYPE_CURSOR))
+ igt_plane_clear_prop_changed(plane, IGT_PLANE_ROTATION);
+ }
}
}
@@ -2913,30 +2876,31 @@ void igt_plane_set_fb(igt_plane_t *plane, struct igt_fb *fb)
LOG(display, "%s.%d: plane_set_fb(%d)\n", kmstest_pipe_name(pipe->pipe),
plane->index, fb ? fb->fb_id : 0);
- plane->fb = fb;
+ igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_ID, fb ? pipe->crtc_id : 0);
+ igt_plane_set_prop_value(plane, IGT_PLANE_FB_ID, fb ? fb->fb_id : 0);
+
+ if (plane->type == DRM_PLANE_TYPE_CURSOR && fb)
+ plane->gem_handle = fb->gem_handle;
+ else
+ plane->gem_handle = 0;
+
/* hack to keep tests working that don't call igt_plane_set_size() */
if (fb) {
/* set default plane size as fb size */
- plane->crtc_w = fb->width;
- plane->crtc_h = fb->height;
+ igt_plane_set_position(plane, 0, 0);
+ igt_plane_set_size(plane, fb->width, fb->height);
/* set default src pos/size as fb size */
- plane->src_x = 0;
- plane->src_y = 0;
- plane->src_w = fb->width;
- plane->src_h = fb->height;
+ igt_fb_set_position(fb, plane, 0, 0);
+ igt_fb_set_size(fb, plane, fb->width, fb->height);
} else {
- plane->src_x = 0;
- plane->src_y = 0;
- plane->src_w = 0;
- plane->src_h = 0;
+ igt_plane_set_position(plane, 0, 0);
+ igt_plane_set_size(plane, 0, 0);
- plane->crtc_w = 0;
- plane->crtc_h = 0;
+ /* set default src pos/size as fb size */
+ igt_fb_set_position(fb, plane, 0, 0);
+ igt_fb_set_size(fb, plane, 0, 0);
}
-
- plane->fb_changed = true;
- plane->size_changed = true;
}
/**
@@ -2949,12 +2913,19 @@ void igt_plane_set_fb(igt_plane_t *plane, struct igt_fb *fb)
*/
void igt_plane_set_fence_fd(igt_plane_t *plane, int fence_fd)
{
- close(plane->fence_fd);
+ int64_t fd;
- if (fcntl(fence_fd, F_GETFD) != -1)
- plane->fence_fd = dup(fence_fd);
- else
- plane->fence_fd = -1;
+ fd = plane->values[IGT_PLANE_IN_FENCE_FD];
+ if (fd != -1)
+ close(fd);
+
+ if (fence_fd != -1) {
+ fd = dup(fence_fd);
+ igt_fail_on(fd == -1);
+ } else
+ fd = -1;
+
+ igt_plane_set_prop_value(plane, IGT_PLANE_IN_FENCE_FD, fd);
}
void igt_plane_set_position(igt_plane_t *plane, int x, int y)
@@ -2965,10 +2936,8 @@ void igt_plane_set_position(igt_plane_t *plane, int x, int y)
LOG(display, "%s.%d: plane_set_position(%d,%d)\n",
kmstest_pipe_name(pipe->pipe), plane->index, x, y);
- plane->crtc_x = x;
- plane->crtc_y = y;
-
- plane->position_changed = true;
+ igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_X, x);
+ igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_Y, y);
}
/**
@@ -2989,10 +2958,8 @@ void igt_plane_set_size(igt_plane_t *plane, int w, int h)
LOG(display, "%s.%d: plane_set_size (%dx%d)\n",
kmstest_pipe_name(pipe->pipe), plane->index, w, h);
- plane->crtc_w = w;
- plane->crtc_h = h;
-
- plane->size_changed = true;
+ igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_W, w);
+ igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_H, h);
}
/**
@@ -3014,10 +2981,8 @@ void igt_fb_set_position(struct igt_fb *fb, igt_plane_t *plane,
LOG(display, "%s.%d: fb_set_position(%d,%d)\n",
kmstest_pipe_name(pipe->pipe), plane->index, x, y);
- plane->src_x = x;
- plane->src_y = y;
-
- plane->fb_changed = true;
+ igt_plane_set_prop_value(plane, IGT_PLANE_SRC_X, IGT_FIXED(x, 0));
+ igt_plane_set_prop_value(plane, IGT_PLANE_SRC_Y, IGT_FIXED(y, 0));
}
/**
@@ -3040,10 +3005,8 @@ void igt_fb_set_size(struct igt_fb *fb, igt_plane_t *plane,
LOG(display, "%s.%d: fb_set_size(%dx%d)\n",
kmstest_pipe_name(pipe->pipe), plane->index, w, h);
- plane->src_w = w;
- plane->src_h = h;
-
- plane->fb_changed = true;
+ igt_plane_set_prop_value(plane, IGT_PLANE_SRC_W, IGT_FIXED(w, 0));
+ igt_plane_set_prop_value(plane, IGT_PLANE_SRC_H, IGT_FIXED(h, 0));
}
static const char *rotation_name(igt_rotation_t rotation)
@@ -3071,9 +3034,7 @@ void igt_plane_set_rotation(igt_plane_t *plane, igt_rotation_t rotation)
kmstest_pipe_name(pipe->pipe),
plane->index, rotation_name(rotation));
- plane->rotation = rotation;
-
- plane->rotation_changed = true;
+ igt_plane_set_prop_value(plane, IGT_PLANE_ROTATION, rotation);
}
/**
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 1ef10e7d525c..f87f8be31421 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -252,6 +252,9 @@ enum igt_atomic_plane_properties {
IGT_PLANE_CRTC_W,
IGT_PLANE_CRTC_H,
+/* Append new properties after IGT_PLANE_COORD_CHANGED_MASK */
+#define IGT_PLANE_COORD_CHANGED_MASK 0xff
+
IGT_PLANE_FB_ID,
IGT_PLANE_CRTC_ID,
IGT_PLANE_IN_FENCE_FD,
@@ -286,37 +289,19 @@ typedef struct {
int index;
/* capabilities */
int type;
- /* state tracking */
- unsigned int fb_changed : 1;
- unsigned int position_changed : 1;
- unsigned int rotation_changed : 1;
- unsigned int size_changed : 1;
+
/*
* drm_plane can be NULL for primary and cursor planes (when not
* using the atomic modeset API)
*/
drmModePlane *drm_plane;
- struct igt_fb *fb;
-
- uint32_t rotation_property;
-
- /* position within pipe_src_w x pipe_src_h */
- int crtc_x, crtc_y;
- /* size within pipe_src_w x pipe_src_h */
- int crtc_w, crtc_h;
- /* position within the framebuffer */
- uint32_t src_x;
- uint32_t src_y;
- /* size within the framebuffer*/
- uint32_t src_w;
- uint32_t src_h;
+ /* gem handle for fb */
+ uint32_t gem_handle;
- igt_rotation_t rotation;
-
- /* in fence fd */
- int fence_fd;
- uint32_t atomic_props_plane[IGT_NUM_PLANE_PROPS];
+ uint64_t changed;
+ uint32_t props[IGT_NUM_PLANE_PROPS];
+ uint64_t values[IGT_NUM_PLANE_PROPS];
} igt_plane_t;
struct igt_pipe {
@@ -407,7 +392,7 @@ bool igt_pipe_get_property(igt_pipe_t *pipe, const char *name,
static inline bool igt_plane_supports_rotation(igt_plane_t *plane)
{
- return plane->rotation_property != 0;
+ return plane->props[IGT_PLANE_ROTATION] != 0;
}
void igt_pipe_request_out_fence(igt_pipe_t *pipe);
void igt_pipe_set_degamma_lut(igt_pipe_t *pipe, void *ptr, size_t length);
@@ -527,16 +512,20 @@ static inline bool igt_output_is_connected(igt_output_t *output)
#define IGT_FIXED(i,f) ((i) << 16 | (f))
-/**
- * igt_atomic_populate_plane_req:
- * @req: A pointer to drmModeAtomicReq
- * @plane: A pointer igt_plane_t
- * @prop: one of igt_atomic_plane_properties
- * @value: the value to add
- */
-#define igt_atomic_populate_plane_req(req, plane, prop, value) \
- igt_assert_lt(0, drmModeAtomicAddProperty(req, plane->drm_plane->plane_id,\
- plane->atomic_props_plane[prop], value))
+#define igt_plane_is_prop_changed(plane, prop) \
+ (!!((plane)->changed & (1 << (prop))))
+
+#define igt_plane_set_prop_changed(plane, prop) \
+ (plane)->changed |= 1 << (prop)
+
+#define igt_plane_clear_prop_changed(plane, prop) \
+ (plane)->changed &= ~(1 << (prop))
+
+#define igt_plane_set_prop_value(plane, prop, value) \
+ do { \
+ plane->values[prop] = value; \
+ igt_plane_set_prop_changed(plane, prop); \
+ } while (0)
/**
* igt_atomic_populate_crtc_req:
diff --git a/tests/kms_atomic_interruptible.c b/tests/kms_atomic_interruptible.c
index 2d19fe967809..5570854390ea 100644
--- a/tests/kms_atomic_interruptible.c
+++ b/tests/kms_atomic_interruptible.c
@@ -161,12 +161,12 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
/* connector: 1 prop */
output->props[IGT_CONNECTOR_CRTC_ID],
/* plane: remainder props */
- plane->atomic_props_plane[IGT_PLANE_CRTC_ID],
- plane->atomic_props_plane[IGT_PLANE_FB_ID],
- plane->atomic_props_plane[IGT_PLANE_SRC_W],
- plane->atomic_props_plane[IGT_PLANE_SRC_H],
- plane->atomic_props_plane[IGT_PLANE_CRTC_W],
- plane->atomic_props_plane[IGT_PLANE_CRTC_H]
+ plane->props[IGT_PLANE_CRTC_ID],
+ plane->props[IGT_PLANE_FB_ID],
+ plane->props[IGT_PLANE_SRC_W],
+ plane->props[IGT_PLANE_SRC_H],
+ plane->props[IGT_PLANE_CRTC_W],
+ plane->props[IGT_PLANE_CRTC_H]
};
uint64_t prop_vals[] = {
/* crtc */
diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
index 4d2ef1c184f0..4932a0d44410 100644
--- a/tests/kms_rotation_crc.c
+++ b/tests/kms_rotation_crc.c
@@ -122,11 +122,11 @@ static void prepare_crtc(data_t *data, igt_output_t *output, enum pipe pipe,
igt_plane_set_fb(primary, &data->fb_modeset);
if (commit < COMMIT_ATOMIC) {
- primary->rotation_changed = false;
+ igt_plane_clear_prop_changed(primary, IGT_PLANE_ROTATION);
igt_display_commit(display);
if (plane->type == DRM_PLANE_TYPE_PRIMARY)
- primary->rotation_changed = true;
+ igt_plane_set_prop_changed(primary, IGT_PLANE_ROTATION);
}
igt_plane_set_fb(plane, NULL);
--
2.14.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH i-g-t v2 6/8] lib/igt_kms: Rework pipe properties to be more atomic, v3.
2017-09-27 18:16 ` [PATCH i-g-t v2 6/8] lib/igt_kms: Rework pipe properties to be more atomic, v2 Maarten Lankhorst
@ 2017-09-28 10:28 ` Maarten Lankhorst
2017-09-29 6:50 ` [PATCH i-g-t] lib/igt_kms: Rework pipe properties to be more atomic, v4 Maarten Lankhorst
0 siblings, 1 reply; 25+ messages in thread
From: Maarten Lankhorst @ 2017-09-28 10:28 UTC (permalink / raw)
To: intel-gfx
In the future I want to allow tests to commit more properties,
but for this to work I have to fix all properties to work better
with atomic commit. Instead of special casing each
property make a bitmask for all property changed flags, and try to
commit all properties.
This has been the most involved one, since legacy pipe commit still
handles a lot of the properties differently from the rest.
Changes since v1:
- Dump all changed properties on commit.
- Fix bug in igt_pipe_refresh().
Changes since v2:
- Set pipe ACTIVE property changed flag on init.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
lib/igt_kms.c | 217 ++++++++++++++++++++------------------
lib/igt_kms.h | 77 ++++++--------
tests/kms_atomic_interruptible.c | 4 +-
tests/kms_atomic_transition.c | 2 +-
tests/kms_crtc_background_color.c | 2 +-
5 files changed, 147 insertions(+), 155 deletions(-)
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 6e0052ebe7a7..a81d7998433a 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -259,8 +259,8 @@ igt_atomic_fill_connector_props(igt_display_t *display, igt_output_t *output,
}
static void
-igt_atomic_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
- int num_crtc_props, const char **crtc_prop_names)
+igt_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
+ int num_crtc_props, const char **crtc_prop_names)
{
drmModeObjectPropertiesPtr props;
int i, j, fd;
@@ -278,7 +278,7 @@ igt_atomic_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
if (strcmp(prop->name, crtc_prop_names[j]) != 0)
continue;
- pipe->atomic_props_crtc[j] = props->props[i];
+ pipe->props[j] = props->props[i];
break;
}
@@ -1690,7 +1690,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
int p = 1;
int j, type;
uint8_t last_plane = 0, n_planes = 0;
- uint64_t prop_value;
pipe->crtc_id = resources->crtcs[i];
pipe->display = display;
@@ -1700,29 +1699,16 @@ void igt_display_init(igt_display_t *display, int drm_fd)
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",
- &pipe->background_property,
- &prop_value,
+ "background_color", NULL,
+ &pipe->values[IGT_CRTC_BACKGROUND],
NULL);
- pipe->background = (uint32_t)prop_value;
- get_crtc_property(display->drm_fd, pipe->crtc_id,
- "DEGAMMA_LUT",
- &pipe->degamma_property,
- NULL,
- NULL);
- get_crtc_property(display->drm_fd, pipe->crtc_id,
- "CTM",
- &pipe->ctm_property,
- NULL,
- NULL);
- get_crtc_property(display->drm_fd, pipe->crtc_id,
- "GAMMA_LUT",
- &pipe->gamma_property,
- NULL,
- NULL);
-
- igt_atomic_fill_pipe_props(display, pipe, IGT_NUM_CRTC_PROPS, igt_crtc_prop_names);
/* count number of valid planes */
for (j = 0; j < plane_resources->count_planes; j++) {
@@ -1805,8 +1791,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
igt_assert_eq(p, n_planes);
pipe->n_planes = n_planes;
-
- pipe->mode_changed = true;
}
/*
@@ -2283,7 +2267,7 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
if (!igt_plane_is_prop_changed(primary, IGT_PLANE_FB_ID) &&
!(primary->changed & IGT_PLANE_COORD_CHANGED_MASK) &&
- !primary->pipe->mode_changed)
+ !igt_pipe_obj_is_prop_changed(primary->pipe, IGT_CRTC_MODE_ID))
return 0;
crtc_id = pipe->crtc_id;
@@ -2352,6 +2336,16 @@ static int igt_plane_commit(igt_plane_t *plane,
}
}
+static bool is_atomic_prop(enum igt_atomic_crtc_properties prop)
+{
+ if (prop == IGT_CRTC_MODE_ID ||
+ prop == IGT_CRTC_ACTIVE ||
+ prop == IGT_CRTC_OUT_FENCE_PTR)
+ return true;
+
+ return false;
+}
+
/*
* Commit all plane changes to an output. Note that if @s is COMMIT_LEGACY,
* enabling/disabling the primary plane will also enable/disable the CRTC.
@@ -2369,19 +2363,9 @@ static int igt_pipe_commit(igt_pipe_t *pipe,
int i;
int ret;
- if (pipe->background_changed) {
- igt_crtc_set_property(pipe, pipe->background_property,
- pipe->background);
- }
-
- if (pipe->color_mgmt_changed) {
- igt_crtc_set_property(pipe, pipe->degamma_property,
- pipe->degamma_blob);
- igt_crtc_set_property(pipe, pipe->ctm_property,
- pipe->ctm_blob);
- igt_crtc_set_property(pipe, pipe->gamma_property,
- pipe->gamma_blob);
- }
+ for (i = 0; i < IGT_NUM_CRTC_PROPS; i++)
+ if (!is_atomic_prop(i))
+ igt_crtc_set_property(pipe, pipe->props[i], pipe->values[i]);
for (i = 0; i < pipe->n_planes; i++) {
igt_plane_t *plane = &pipe->planes[i];
@@ -2394,9 +2378,10 @@ static int igt_pipe_commit(igt_pipe_t *pipe,
}
static void
-igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length)
+igt_pipe_replace_blob(igt_pipe_t *pipe, enum igt_atomic_crtc_properties prop, void *ptr, size_t length)
{
igt_display_t *display = pipe->display;
+ uint64_t *blob = &pipe->values[prop];
uint32_t blob_id = 0;
if (*blob != 0)
@@ -2408,6 +2393,7 @@ igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length
ptr, length, &blob_id) == 0);
*blob = blob_id;
+ igt_pipe_obj_set_prop_changed(pipe, prop);
}
/*
@@ -2415,51 +2401,23 @@ igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length
*/
static void igt_atomic_prepare_crtc_commit(igt_pipe_t *pipe_obj, drmModeAtomicReq *req)
{
- if (pipe_obj->background_changed)
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_BACKGROUND, pipe_obj->background);
-
- if (pipe_obj->color_mgmt_changed) {
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_DEGAMMA_LUT, pipe_obj->degamma_blob);
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_CTM, pipe_obj->ctm_blob);
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_GAMMA_LUT, pipe_obj->gamma_blob);
- }
-
- if (pipe_obj->mode_changed) {
- igt_output_t *output = igt_pipe_get_output(pipe_obj);
-
- if (!output) {
- igt_pipe_replace_blob(pipe_obj, &pipe_obj->mode_blob, NULL, 0);
-
- LOG(pipe_obj->display, "%s: Setting NULL mode\n",
- kmstest_pipe_name(pipe_obj->pipe));
- } else {
- drmModeModeInfo *mode = igt_output_get_mode(output);
+ int i;
- igt_pipe_replace_blob(pipe_obj, &pipe_obj->mode_blob, mode, sizeof(*mode));
+ for (i = 0; i < IGT_NUM_CRTC_PROPS; i++) {
+ if (!igt_pipe_obj_is_prop_changed(pipe_obj, i))
+ continue;
- LOG(pipe_obj->display, "%s: Setting mode %s from %s\n",
- kmstest_pipe_name(pipe_obj->pipe),
- mode->name, igt_output_name(output));
- }
+ igt_debug("Pipe %s: Setting property \"%s\" to 0x%"PRIx64"/%"PRIi64"\n",
+ kmstest_pipe_name(pipe_obj->pipe), igt_crtc_prop_names[i],
+ pipe_obj->values[i], pipe_obj->values[i]);
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_MODE_ID, pipe_obj->mode_blob);
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_ACTIVE, !!output);
+ igt_assert_lt(0, drmModeAtomicAddProperty(req, pipe_obj->crtc_id, pipe_obj->props[i], pipe_obj->values[i]));
}
if (pipe_obj->out_fence_fd != -1) {
close(pipe_obj->out_fence_fd);
pipe_obj->out_fence_fd = -1;
}
-
- if (pipe_obj->out_fence_requested)
- {
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_OUT_FENCE_PTR,
- (uint64_t)(uintptr_t) &pipe_obj->out_fence_fd);
- }
-
- /*
- * TODO: Add all crtc level properties here
- */
}
/*
@@ -2550,15 +2508,21 @@ display_commit_changed(igt_display_t *display, enum igt_commit_style s)
igt_pipe_t *pipe_obj = &display->pipes[pipe];
igt_plane_t *plane;
- pipe_obj->color_mgmt_changed = false;
- pipe_obj->background_changed = false;
+ if (s == COMMIT_ATOMIC) {
+ if (igt_pipe_obj_is_prop_changed(pipe_obj, IGT_CRTC_OUT_FENCE_PTR))
+ igt_assert(pipe_obj->out_fence_fd >= 0);
- if (s != COMMIT_UNIVERSAL)
- pipe_obj->mode_changed = false;
-
- if (s == COMMIT_ATOMIC && pipe_obj->out_fence_requested) {
- pipe_obj->out_fence_requested = false;
- igt_assert(pipe_obj->out_fence_fd >= 0);
+ pipe_obj->changed = 0;
+ } else {
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_BACKGROUND);
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_CTM);
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_DEGAMMA_LUT);
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_GAMMA_LUT);
+
+ if (s != COMMIT_UNIVERSAL) {
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_ACTIVE);
+ }
}
for_each_plane_on_pipe(display, pipe, plane) {
@@ -2812,33 +2776,83 @@ void igt_output_override_mode(igt_output_t *output, drmModeModeInfo *mode)
output->use_override_mode = !!mode;
- if (pipe)
- pipe->mode_changed = true;
+ if (pipe) {
+ if (output->display->is_atomic)
+ igt_pipe_replace_blob(pipe, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(*mode));
+ else
+ igt_pipe_obj_set_prop_changed(pipe, IGT_CRTC_MODE_ID);
+ }
}
void igt_output_set_pipe(igt_output_t *output, enum pipe pipe)
{
igt_display_t *display = output->display;
- igt_pipe_t *old_pipe;
+ igt_pipe_t *old_pipe = NULL, *pipe_obj = NULL;;
igt_assert(output->name);
- if (output->pending_pipe != PIPE_NONE) {
+ if (output->pending_pipe != PIPE_NONE)
old_pipe = igt_output_get_driving_pipe(output);
- old_pipe->mode_changed = true;
- }
+ if (pipe != PIPE_NONE)
+ pipe_obj = &display->pipes[pipe];
LOG(display, "%s: set_pipe(%s)\n", igt_output_name(output),
kmstest_pipe_name(pipe));
output->pending_pipe = pipe;
- if (pipe != PIPE_NONE)
- display->pipes[pipe].mode_changed = true;
+ if (old_pipe) {
+ igt_output_t *old_output;
+
+ old_output = igt_pipe_get_output(old_pipe);
+ if (!old_output) {
+ if (display->is_atomic)
+ igt_pipe_replace_blob(old_pipe, IGT_CRTC_MODE_ID, NULL, 0);
+ else
+ igt_pipe_obj_set_prop_changed(old_pipe, IGT_CRTC_MODE_ID);
+
+ igt_pipe_obj_set_prop_value(old_pipe, IGT_CRTC_ACTIVE, 0);
+ }
+ }
igt_output_set_prop_value(output, IGT_CONNECTOR_CRTC_ID, pipe == PIPE_NONE ? 0 : display->pipes[pipe].crtc_id);
igt_output_refresh(output);
+
+ if (pipe_obj) {
+ if (display->is_atomic)
+ igt_pipe_replace_blob(pipe_obj, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(drmModeModeInfo));
+ else
+ igt_pipe_obj_set_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
+
+ igt_pipe_obj_set_prop_value(pipe_obj, IGT_CRTC_ACTIVE, 1);
+ }
+}
+
+/*
+ * igt_pipe_refresh:
+ * @display: a pointer to an #igt_display_t structure
+ * @pipe: Pipe to refresh
+ * @force: Should be set to true if mode_blob is no longer considered
+ * to be valid, for example after doing an atomic commit during fork or closing display fd.
+ *
+ * Requests the pipe to be part of the state on next update.
+ * This is useful when state may have been out of sync after
+ * a fork, or we just want to be sure the pipe is included
+ * in the next commit.
+ */
+void igt_pipe_refresh(igt_display_t *display, enum pipe pipe, bool force)
+{
+ igt_pipe_t *pipe_obj = &display->pipes[pipe];
+
+ if (force && display->is_atomic) {
+ igt_output_t *output = igt_pipe_get_output(pipe_obj);
+
+ pipe_obj->values[IGT_CRTC_MODE_ID] = 0;
+ if (output)
+ igt_pipe_replace_blob(pipe_obj, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(drmModeModeInfo));
+ } else
+ igt_pipe_obj_set_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
}
void igt_output_set_scaling_mode(igt_output_t *output, uint64_t scaling_mode)
@@ -3046,28 +3060,25 @@ void igt_plane_set_rotation(igt_plane_t *plane, igt_rotation_t rotation)
*/
void igt_pipe_request_out_fence(igt_pipe_t *pipe)
{
- pipe->out_fence_requested = true;
+ igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_OUT_FENCE_PTR, (ptrdiff_t)&pipe->out_fence_fd);
}
void
igt_pipe_set_degamma_lut(igt_pipe_t *pipe, void *ptr, size_t length)
{
- igt_pipe_replace_blob(pipe, &pipe->degamma_blob, ptr, length);
- pipe->color_mgmt_changed = 1;
+ igt_pipe_replace_blob(pipe, IGT_CRTC_DEGAMMA_LUT, ptr, length);
}
void
igt_pipe_set_ctm_matrix(igt_pipe_t *pipe, void *ptr, size_t length)
{
- igt_pipe_replace_blob(pipe, &pipe->ctm_blob, ptr, length);
- pipe->color_mgmt_changed = 1;
+ igt_pipe_replace_blob(pipe, IGT_CRTC_CTM, ptr, length);
}
void
igt_pipe_set_gamma_lut(igt_pipe_t *pipe, void *ptr, size_t length)
{
- igt_pipe_replace_blob(pipe, &pipe->gamma_blob, ptr, length);
- pipe->color_mgmt_changed = 1;
+ igt_pipe_replace_blob(pipe, IGT_CRTC_GAMMA_LUT, ptr, length);
}
/**
@@ -3088,9 +3099,7 @@ void igt_crtc_set_background(igt_pipe_t *pipe, uint64_t background)
kmstest_pipe_name(pipe->pipe),
pipe->pipe, background);
- pipe->background = background;
-
- pipe->background_changed = true;
+ igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_BACKGROUND, background);
}
void igt_wait_for_vblank_count(int drm_fd, enum pipe pipe, int count)
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index f87f8be31421..b53127ffef5f 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -313,27 +313,13 @@ struct igt_pipe {
int plane_primary;
igt_plane_t *planes;
- uint32_t atomic_props_crtc[IGT_NUM_CRTC_PROPS];
-
- uint64_t background; /* Background color MSB BGR 16bpc LSB */
- uint32_t background_changed : 1;
- uint32_t background_property;
-
- uint64_t degamma_blob;
- uint32_t degamma_property;
- uint64_t ctm_blob;
- uint32_t ctm_property;
- uint64_t gamma_blob;
- uint32_t gamma_property;
- uint32_t color_mgmt_changed : 1;
+ uint64_t changed;
+ uint32_t props[IGT_NUM_CRTC_PROPS];
+ uint64_t values[IGT_NUM_CRTC_PROPS];
uint32_t crtc_id;
- uint64_t mode_blob;
- bool mode_changed;
-
int32_t out_fence_fd;
- bool out_fence_requested;
};
typedef struct {
@@ -527,17 +513,6 @@ static inline bool igt_output_is_connected(igt_output_t *output)
igt_plane_set_prop_changed(plane, prop); \
} while (0)
-/**
- * igt_atomic_populate_crtc_req:
- * @req: A pointer to drmModeAtomicReq
- * @pipe: A pointer igt_pipe_t
- * @prop: one of igt_atomic_crtc_properties
- * @value: the value to add
- */
-#define igt_atomic_populate_crtc_req(req, pipe, prop, value) \
- igt_assert_lt(0, drmModeAtomicAddProperty(req, pipe->crtc_id,\
- pipe->atomic_props_crtc[prop], value))
-
#define igt_output_is_prop_changed(output, prop) \
(!!((output)->changed & (1 << (prop))))
#define igt_output_set_prop_changed(output, prop) \
@@ -552,26 +527,34 @@ static inline bool igt_output_is_connected(igt_output_t *output)
igt_output_set_prop_changed(output, prop); \
} while (0)
-/*
- * igt_pipe_refresh:
- * @display: a pointer to an #igt_display_t structure
- * @pipe: Pipe to refresh
- * @force: Should be set to true if mode_blob is no longer considered
- * to be valid, for example after doing an atomic commit during fork or closing display fd.
- *
- * Requests the pipe to be part of the state on next update.
- * This is useful when state may have been out of sync after
- * a fork, or we just want to be sure the pipe is included
- * in the next commit.
- */
-static inline void
-igt_pipe_refresh(igt_display_t *display, enum pipe pipe, bool force)
-{
- if (force)
- display->pipes[pipe].mode_blob = 0;
+#define igt_pipe_obj_is_prop_changed(pipe_obj, prop) \
+ (!!((pipe_obj)->changed & (1 << (prop))))
- display->pipes[pipe].mode_changed = true;
-}
+#define igt_pipe_is_prop_changed(display, pipe, prop) \
+ igt_pipe_obj_is_prop_changed(&(display)->pipes[(pipe)], prop)
+
+#define igt_pipe_obj_set_prop_changed(pipe_obj, prop) \
+ (pipe_obj)->changed |= 1 << (prop)
+
+#define igt_pipe_set_prop_changed(display, pipe, prop) \
+ igt_pipe_obj_set_prop_changed(&(display)->pipes[(pipe)], prop)
+
+#define igt_pipe_obj_clear_prop_changed(pipe_obj, prop) \
+ (pipe_obj)->changed &= ~(1 << (prop))
+
+#define igt_pipe_clear_prop_changed(display, pipe, prop) \
+ igt_pipe_obj_clear_prop_changed(&(display)->pipes[(pipe)], prop)
+
+#define igt_pipe_obj_set_prop_value(pipe_obj, prop, value) \
+ do { \
+ (pipe_obj)->values[prop] = (value); \
+ igt_pipe_obj_set_prop_changed(pipe_obj, prop); \
+ } while (0)
+
+#define igt_pipe_set_prop_value(display, pipe, prop, value) \
+ igt_pipe_obj_set_prop_value(&(display)->pipes[(pipe)], prop, value)
+
+void igt_pipe_refresh(igt_display_t *display, enum pipe pipe, bool force);
void igt_enable_connectors(void);
void igt_reset_connectors(void);
diff --git a/tests/kms_atomic_interruptible.c b/tests/kms_atomic_interruptible.c
index 5570854390ea..dd753b6e5db3 100644
--- a/tests/kms_atomic_interruptible.c
+++ b/tests/kms_atomic_interruptible.c
@@ -156,8 +156,8 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
uint32_t count_props[3] = { 2, 1, 6 };
uint32_t props[] = {
/* crtc: 2 props */
- plane->pipe->atomic_props_crtc[IGT_CRTC_MODE_ID],
- plane->pipe->atomic_props_crtc[IGT_CRTC_ACTIVE],
+ plane->pipe->props[IGT_CRTC_MODE_ID],
+ plane->pipe->props[IGT_CRTC_ACTIVE],
/* connector: 1 prop */
output->props[IGT_CONNECTOR_CRTC_ID],
/* plane: remainder props */
diff --git a/tests/kms_atomic_transition.c b/tests/kms_atomic_transition.c
index 2ae75f2d6630..7ddb65cea183 100644
--- a/tests/kms_atomic_transition.c
+++ b/tests/kms_atomic_transition.c
@@ -633,7 +633,7 @@ static unsigned set_combinations(igt_display_t *display, unsigned mask, struct i
drmModeModeInfo *mode = NULL;
if (!(mask & (1 << pipe))) {
- if (display->pipes[pipe].mode_blob) {
+ if (igt_pipe_is_prop_changed(display, pipe, IGT_CRTC_ACTIVE)) {
event_mask |= 1 << pipe;
igt_plane_set_fb(plane, NULL);
}
diff --git a/tests/kms_crtc_background_color.c b/tests/kms_crtc_background_color.c
index e12e163449f8..659a30b90219 100644
--- a/tests/kms_crtc_background_color.c
+++ b/tests/kms_crtc_background_color.c
@@ -137,7 +137,7 @@ static void test_crtc_background(data_t *data)
igt_output_set_pipe(output, pipe);
plane = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
- igt_require(plane->pipe->background_property);
+ igt_require(plane->pipe->props[IGT_CRTC_BACKGROUND]);
prepare_crtc(data, output, pipe, plane, 1, PURPLE, BLACK64);
--
2.14.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 25+ messages in thread
* ✓ Fi.CI.BAT: success for lib/igt_kms: Convert properties to be more atomic-like. (rev4)
2017-09-27 18:16 [PATCH i-g-t v2 0/8] lib/igt_kms: Convert properties to be more atomic-like Maarten Lankhorst
` (9 preceding siblings ...)
2017-09-27 22:51 ` ✗ Fi.CI.IGT: failure " Patchwork
@ 2017-09-28 10:50 ` Patchwork
2017-09-28 11:23 ` ✓ Fi.CI.BAT: success for lib/igt_kms: Convert properties to be more atomic-like. (rev5) Patchwork
` (6 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2017-09-28 10:50 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
== Series Details ==
Series: lib/igt_kms: Convert properties to be more atomic-like. (rev4)
URL : https://patchwork.freedesktop.org/series/30903/
State : success
== Summary ==
IGT patchset tested on top of latest successful build
2885b10f99b4beeb046e75af8b8488c229f629d3 igt/gem_exec_schedule: Ignore set-priority failures on old kernels
with latest DRM-Tip kernel build CI_DRM_3148
c1ed50121778 drm-tip: 2017y-09m-28d-04h-52m-47s UTC integration manifest
fi-bdw-5557u total:289 pass:268 dwarn:0 dfail:0 fail:0 skip:21 time:447s
fi-bdw-gvtdvm total:289 pass:265 dwarn:0 dfail:0 fail:0 skip:24 time:473s
fi-blb-e6850 total:289 pass:224 dwarn:1 dfail:0 fail:0 skip:64 time:423s
fi-bsw-n3050 total:289 pass:243 dwarn:0 dfail:0 fail:0 skip:46 time:517s
fi-bwr-2160 total:289 pass:184 dwarn:0 dfail:0 fail:0 skip:105 time:282s
fi-bxt-dsi total:289 pass:258 dwarn:1 dfail:0 fail:0 skip:30 time:498s
fi-bxt-j4205 total:289 pass:260 dwarn:0 dfail:0 fail:0 skip:29 time:510s
fi-byt-j1900 total:289 pass:254 dwarn:1 dfail:0 fail:0 skip:34 time:495s
fi-cnl-y total:289 pass:259 dwarn:0 dfail:0 fail:3 skip:27 time:663s
fi-elk-e7500 total:289 pass:230 dwarn:0 dfail:0 fail:0 skip:59 time:415s
fi-glk-1 total:289 pass:259 dwarn:1 dfail:0 fail:0 skip:29 time:563s
fi-hsw-4770 total:289 pass:263 dwarn:0 dfail:0 fail:0 skip:26 time:433s
fi-hsw-4770r total:289 pass:263 dwarn:0 dfail:0 fail:0 skip:26 time:411s
fi-ilk-650 total:289 pass:229 dwarn:0 dfail:0 fail:0 skip:60 time:434s
fi-ivb-3520m total:289 pass:261 dwarn:0 dfail:0 fail:0 skip:28 time:484s
fi-ivb-3770 total:289 pass:261 dwarn:0 dfail:0 fail:0 skip:28 time:469s
fi-kbl-7500u total:289 pass:264 dwarn:1 dfail:0 fail:0 skip:24 time:475s
fi-kbl-7560u total:289 pass:270 dwarn:0 dfail:0 fail:0 skip:19 time:583s
fi-kbl-r total:289 pass:262 dwarn:0 dfail:0 fail:0 skip:27 time:596s
fi-pnv-d510 total:289 pass:223 dwarn:1 dfail:0 fail:0 skip:65 time:547s
fi-skl-6260u total:289 pass:269 dwarn:0 dfail:0 fail:0 skip:20 time:454s
fi-skl-6700k total:289 pass:265 dwarn:0 dfail:0 fail:0 skip:24 time:756s
fi-skl-6770hq total:289 pass:269 dwarn:0 dfail:0 fail:0 skip:20 time:492s
fi-skl-gvtdvm total:289 pass:266 dwarn:0 dfail:0 fail:0 skip:23 time:479s
fi-snb-2520m total:289 pass:251 dwarn:0 dfail:0 fail:0 skip:38 time:567s
fi-snb-2600 total:289 pass:250 dwarn:0 dfail:0 fail:0 skip:39 time:418s
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_264/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH i-g-t v2 5/8] lib/igt_kms: Rework plane properties to be more atomic, v4.
2017-09-28 10:28 ` [PATCH i-g-t v2 5/8] lib/igt_kms: Rework plane properties to be more atomic, v3 Maarten Lankhorst
@ 2017-09-28 11:01 ` Maarten Lankhorst
2017-09-29 9:52 ` [PATCH i-g-t] lib/igt_kms: Rework pipe properties to be more atomic, v4.1 Maarten Lankhorst
0 siblings, 1 reply; 25+ messages in thread
From: Maarten Lankhorst @ 2017-09-28 11:01 UTC (permalink / raw)
To: intel-gfx
In the future I want to allow tests to commit more properties,
but for this to work I have to fix all properties to work better
with atomic commit. Instead of special casing each
property make a bitmask for all property changed flags, and try to
commit all properties.
Changes since v1:
- Remove special dumping of src and crtc coordinates.
- Dump all modified coordinates.
Changes since v2:
- Move igt_plane_set_prop_changed up slightly.
Changes since v3:
- Fix wrong ordering of set_position in kms_plane_lowres causing a test failure.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
lib/igt_kms.c | 293 +++++++++++++++++----------------------
lib/igt_kms.h | 59 ++++----
tests/kms_atomic_interruptible.c | 12 +-
tests/kms_plane_lowres.c | 2 +-
tests/kms_rotation_crc.c | 4 +-
5 files changed, 160 insertions(+), 210 deletions(-)
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 07d2074c2b1a..6e0052ebe7a7 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -192,11 +192,11 @@ const char *igt_connector_prop_names[IGT_NUM_CONNECTOR_PROPS] = {
/*
* Retrieve all the properies specified in props_name and store them into
- * plane->atomic_props_plane.
+ * plane->props.
*/
static void
-igt_atomic_fill_plane_props(igt_display_t *display, igt_plane_t *plane,
- int num_props, const char **prop_names)
+igt_fill_plane_props(igt_display_t *display, igt_plane_t *plane,
+ int num_props, const char **prop_names)
{
drmModeObjectPropertiesPtr props;
int i, j, fd;
@@ -214,7 +214,7 @@ igt_atomic_fill_plane_props(igt_display_t *display, igt_plane_t *plane,
if (strcmp(prop->name, prop_names[j]) != 0)
continue;
- plane->atomic_props_plane[j] = props->props[i];
+ plane->props[j] = props->props[i];
break;
}
@@ -1659,7 +1659,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
drmModeRes *resources;
drmModePlaneRes *plane_resources;
int i;
- int is_atomic = 0;
memset(display, 0, sizeof(igt_display_t));
@@ -1679,7 +1678,9 @@ void igt_display_init(igt_display_t *display, int drm_fd)
igt_assert_f(display->pipes, "Failed to allocate memory for %d pipes\n", display->n_pipes);
drmSetClientCap(drm_fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1);
- is_atomic = drmSetClientCap(drm_fd, DRM_CLIENT_CAP_ATOMIC, 1);
+ if (drmSetClientCap(drm_fd, DRM_CLIENT_CAP_ATOMIC, 1) == 0)
+ display->is_atomic = 1;
+
plane_resources = drmModeGetPlaneResources(display->drm_fd);
igt_assert(plane_resources);
@@ -1776,19 +1777,19 @@ void igt_display_init(igt_display_t *display, int drm_fd)
plane->type = type;
plane->pipe = pipe;
plane->drm_plane = drm_plane;
- plane->fence_fd = -1;
+ plane->values[IGT_PLANE_IN_FENCE_FD] = ~0ULL;
- if (is_atomic == 0) {
- display->is_atomic = 1;
- igt_atomic_fill_plane_props(display, plane, IGT_NUM_PLANE_PROPS, igt_plane_prop_names);
- }
+ 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->rotation_property,
- &prop_value,
+ &plane->props[IGT_PLANE_ROTATION],
+ &plane->values[IGT_PLANE_ROTATION],
NULL);
- plane->rotation = (igt_rotation_t)prop_value;
+
+ /* Clear any residual framebuffer on first commit. */
+ igt_plane_set_prop_changed(plane, IGT_PLANE_FB_ID);
+ igt_plane_set_prop_changed(plane, IGT_PLANE_CRTC_ID);
}
/*
@@ -1805,9 +1806,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
pipe->n_planes = n_planes;
- for_each_plane_on_pipe(display, i, plane)
- plane->fb_changed = true;
-
pipe->mode_changed = true;
}
@@ -2070,18 +2068,7 @@ bool igt_pipe_get_property(igt_pipe_t *pipe, const char *name,
static uint32_t igt_plane_get_fb_id(igt_plane_t *plane)
{
- if (plane->fb)
- return plane->fb->fb_id;
- else
- return 0;
-}
-
-static uint32_t igt_plane_get_fb_gem_handle(igt_plane_t *plane)
-{
- if (plane->fb)
- return plane->fb->gem_handle;
- else
- return 0;
+ return plane->values[IGT_PLANE_FB_ID];
}
#define CHECK_RETURN(r, fail) { \
@@ -2090,9 +2077,6 @@ static uint32_t igt_plane_get_fb_gem_handle(igt_plane_t *plane)
igt_assert_eq(r, 0); \
}
-
-
-
/*
* Add position and fb changes of a plane to the atomic property set
*/
@@ -2101,63 +2085,31 @@ igt_atomic_prepare_plane_commit(igt_plane_t *plane, igt_pipe_t *pipe,
drmModeAtomicReq *req)
{
igt_display_t *display = pipe->display;
- uint32_t fb_id, crtc_id;
+ int i;
igt_assert(plane->drm_plane);
- /* it's an error to try an unsupported feature */
- igt_assert(igt_plane_supports_rotation(plane) ||
- !plane->rotation_changed);
-
- fb_id = igt_plane_get_fb_id(plane);
- crtc_id = pipe->crtc_id;
-
LOG(display,
"populating plane data: %s.%d, fb %u\n",
kmstest_pipe_name(pipe->pipe),
plane->index,
- fb_id);
-
- if (plane->fence_fd >= 0) {
- uint64_t fence_fd = (int64_t) plane->fence_fd;
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_IN_FENCE_FD, fence_fd);
- }
+ igt_plane_get_fb_id(plane));
- if (plane->fb_changed) {
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_ID, fb_id ? crtc_id : 0);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_FB_ID, fb_id);
- }
-
- if (plane->position_changed || plane->size_changed) {
- uint32_t src_x = IGT_FIXED(plane->src_x, 0); /* src_x */
- uint32_t src_y = IGT_FIXED(plane->src_y, 0); /* src_y */
- uint32_t src_w = IGT_FIXED(plane->src_w, 0); /* src_w */
- uint32_t src_h = IGT_FIXED(plane->src_h, 0); /* src_h */
- int32_t crtc_x = plane->crtc_x;
- int32_t crtc_y = plane->crtc_y;
- uint32_t crtc_w = plane->crtc_w;
- uint32_t crtc_h = plane->crtc_h;
+ for (i = 0; i < IGT_NUM_PLANE_PROPS; i++) {
+ if (!igt_plane_is_prop_changed(plane, i))
+ continue;
- LOG(display,
- "src = (%d, %d) %u x %u "
- "dst = (%d, %d) %u x %u\n",
- src_x >> 16, src_y >> 16, src_w >> 16, src_h >> 16,
- crtc_x, crtc_y, crtc_w, crtc_h);
+ /* it's an error to try an unsupported feature */
+ igt_assert(plane->props[i]);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_X, src_x);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_Y, src_y);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_W, src_w);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_H, src_h);
+ igt_debug("plane %s.%d: Setting property \"%s\" to 0x%"PRIx64"/%"PRIi64"\n",
+ kmstest_pipe_name(pipe->pipe), plane->index, igt_plane_prop_names[i],
+ plane->values[i], plane->values[i]);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_X, crtc_x);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_Y, crtc_y);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_W, crtc_w);
- igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_H, crtc_h);
+ igt_assert_lt(0, drmModeAtomicAddProperty(req, plane->drm_plane->plane_id,
+ plane->props[i],
+ plane->values[i]));
}
-
- if (plane->rotation_changed)
- igt_atomic_populate_plane_req(req, plane,
- IGT_PLANE_ROTATION, plane->rotation);
}
@@ -2183,17 +2135,20 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
int32_t crtc_y;
uint32_t crtc_w;
uint32_t crtc_h;
+ bool setplane =
+ igt_plane_is_prop_changed(plane, IGT_PLANE_FB_ID) ||
+ plane->changed & IGT_PLANE_COORD_CHANGED_MASK;
igt_assert(plane->drm_plane);
/* it's an error to try an unsupported feature */
igt_assert(igt_plane_supports_rotation(plane) ||
- !plane->rotation_changed);
+ !igt_plane_is_prop_changed(plane, IGT_PLANE_ROTATION));
fb_id = igt_plane_get_fb_id(plane);
crtc_id = pipe->crtc_id;
- if ((plane->fb_changed || plane->size_changed) && fb_id == 0) {
+ if (setplane && fb_id == 0) {
LOG(display,
"SetPlane pipe %s, plane %d, disabling\n",
kmstest_pipe_name(pipe->pipe),
@@ -2212,16 +2167,15 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
IGT_FIXED(0,0) /* src_h */);
CHECK_RETURN(ret, fail_on_error);
- } else if (plane->fb_changed || plane->position_changed ||
- plane->size_changed) {
- src_x = IGT_FIXED(plane->src_x,0); /* src_x */
- src_y = IGT_FIXED(plane->src_y,0); /* src_y */
- src_w = IGT_FIXED(plane->src_w,0); /* src_w */
- src_h = IGT_FIXED(plane->src_h,0); /* src_h */
- crtc_x = plane->crtc_x;
- crtc_y = plane->crtc_y;
- crtc_w = plane->crtc_w;
- crtc_h = plane->crtc_h;
+ } else if (setplane) {
+ src_x = plane->values[IGT_PLANE_SRC_X];
+ src_y = plane->values[IGT_PLANE_SRC_Y];
+ src_w = plane->values[IGT_PLANE_SRC_W];
+ src_h = plane->values[IGT_PLANE_SRC_H];
+ crtc_x = plane->values[IGT_PLANE_CRTC_X];
+ crtc_y = plane->values[IGT_PLANE_CRTC_Y];
+ crtc_w = plane->values[IGT_PLANE_CRTC_W];
+ crtc_h = plane->values[IGT_PLANE_CRTC_H];
LOG(display,
"SetPlane %s.%d, fb %u, src = (%d, %d) "
@@ -2245,9 +2199,10 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
CHECK_RETURN(ret, fail_on_error);
}
- if (plane->rotation_changed) {
- ret = igt_plane_set_property(plane, plane->rotation_property,
- plane->rotation);
+ if (igt_plane_is_prop_changed(plane, IGT_PLANE_ROTATION)) {
+ ret = igt_plane_set_property(plane,
+ plane->props[IGT_PLANE_ROTATION],
+ plane->values[IGT_PLANE_ROTATION]);
CHECK_RETURN(ret, fail_on_error);
}
@@ -2269,35 +2224,30 @@ static int igt_cursor_commit_legacy(igt_plane_t *cursor,
uint32_t crtc_id = pipe->crtc_id;
int ret;
- if (cursor->fb_changed) {
- uint32_t gem_handle = igt_plane_get_fb_gem_handle(cursor);
-
- if (gem_handle) {
+ if (igt_plane_is_prop_changed(cursor, IGT_PLANE_FB_ID)) {
+ if (cursor->gem_handle)
LOG(display,
"SetCursor pipe %s, fb %u %dx%d\n",
kmstest_pipe_name(pipe->pipe),
- gem_handle,
- cursor->crtc_w, cursor->crtc_h);
-
- ret = drmModeSetCursor(display->drm_fd, crtc_id,
- gem_handle,
- cursor->crtc_w,
- cursor->crtc_h);
- } else {
+ cursor->gem_handle,
+ (unsigned)cursor->values[IGT_PLANE_CRTC_W],
+ (unsigned)cursor->values[IGT_PLANE_CRTC_H]);
+ else
LOG(display,
"SetCursor pipe %s, disabling\n",
kmstest_pipe_name(pipe->pipe));
- ret = drmModeSetCursor(display->drm_fd, crtc_id,
- 0, 0, 0);
- }
-
+ ret = drmModeSetCursor(display->drm_fd, crtc_id,
+ cursor->gem_handle,
+ cursor->values[IGT_PLANE_CRTC_W],
+ cursor->values[IGT_PLANE_CRTC_H]);
CHECK_RETURN(ret, fail_on_error);
}
- if (cursor->position_changed) {
- int x = cursor->crtc_x;
- int y = cursor->crtc_y;
+ if (igt_plane_is_prop_changed(cursor, IGT_PLANE_CRTC_X) ||
+ igt_plane_is_prop_changed(cursor, IGT_PLANE_CRTC_Y)) {
+ int x = cursor->values[IGT_PLANE_CRTC_X];
+ int y = cursor->values[IGT_PLANE_CRTC_Y];
LOG(display,
"MoveCursor pipe %s, (%d, %d)\n",
@@ -2326,13 +2276,14 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
int ret;
/* Primary planes can't be windowed when using a legacy commit */
- igt_assert((primary->crtc_x == 0 && primary->crtc_y == 0));
+ igt_assert((primary->values[IGT_PLANE_CRTC_X] == 0 && primary->values[IGT_PLANE_CRTC_Y] == 0));
/* nor rotated */
- igt_assert(!primary->rotation_changed);
+ igt_assert(!igt_plane_is_prop_changed(primary, IGT_PLANE_ROTATION));
- if (!primary->fb_changed && !primary->position_changed &&
- !primary->size_changed && !primary->pipe->mode_changed)
+ if (!igt_plane_is_prop_changed(primary, IGT_PLANE_FB_ID) &&
+ !(primary->changed & IGT_PLANE_COORD_CHANGED_MASK) &&
+ !primary->pipe->mode_changed)
return 0;
crtc_id = pipe->crtc_id;
@@ -2343,19 +2294,22 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
mode = NULL;
if (fb_id) {
+ uint32_t src_x = primary->values[IGT_PLANE_SRC_X] >> 16;
+ uint32_t src_y = primary->values[IGT_PLANE_SRC_Y] >> 16;
+
LOG(display,
"%s: SetCrtc pipe %s, fb %u, src (%d, %d), "
"mode %dx%d\n",
igt_output_name(output),
kmstest_pipe_name(pipe->pipe),
fb_id,
- primary->src_x, primary->src_y,
+ src_x, src_y,
mode->hdisplay, mode->vdisplay);
ret = drmModeSetCrtc(display->drm_fd,
crtc_id,
fb_id,
- primary->src_x, primary->src_y,
+ src_x, src_y,
&output->id,
1,
mode);
@@ -2608,18 +2562,27 @@ display_commit_changed(igt_display_t *display, enum igt_commit_style s)
}
for_each_plane_on_pipe(display, pipe, plane) {
- plane->fb_changed = false;
- plane->position_changed = false;
- plane->size_changed = false;
+ if (s == COMMIT_ATOMIC) {
+ int fd;
+ plane->changed = 0;
- if (s != COMMIT_LEGACY ||
- !(plane->type == DRM_PLANE_TYPE_PRIMARY ||
- plane->type == DRM_PLANE_TYPE_CURSOR))
- plane->rotation_changed = false;
+ fd = plane->values[IGT_PLANE_IN_FENCE_FD];
+ if (fd != -1)
+ close(fd);
- if (s == COMMIT_ATOMIC)
/* reset fence_fd to prevent it from being set for the next commit */
- igt_plane_set_fence_fd(plane, -1);
+ plane->values[IGT_PLANE_IN_FENCE_FD] = -1;
+ } else {
+ plane->changed &= ~IGT_PLANE_COORD_CHANGED_MASK;
+
+ igt_plane_clear_prop_changed(plane, IGT_PLANE_CRTC_ID);
+ igt_plane_clear_prop_changed(plane, IGT_PLANE_FB_ID);
+
+ if (s != COMMIT_LEGACY ||
+ !(plane->type == DRM_PLANE_TYPE_PRIMARY ||
+ plane->type == DRM_PLANE_TYPE_CURSOR))
+ igt_plane_clear_prop_changed(plane, IGT_PLANE_ROTATION);
+ }
}
}
@@ -2913,30 +2876,31 @@ void igt_plane_set_fb(igt_plane_t *plane, struct igt_fb *fb)
LOG(display, "%s.%d: plane_set_fb(%d)\n", kmstest_pipe_name(pipe->pipe),
plane->index, fb ? fb->fb_id : 0);
- plane->fb = fb;
+ igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_ID, fb ? pipe->crtc_id : 0);
+ igt_plane_set_prop_value(plane, IGT_PLANE_FB_ID, fb ? fb->fb_id : 0);
+
+ if (plane->type == DRM_PLANE_TYPE_CURSOR && fb)
+ plane->gem_handle = fb->gem_handle;
+ else
+ plane->gem_handle = 0;
+
/* hack to keep tests working that don't call igt_plane_set_size() */
if (fb) {
/* set default plane size as fb size */
- plane->crtc_w = fb->width;
- plane->crtc_h = fb->height;
+ igt_plane_set_position(plane, 0, 0);
+ igt_plane_set_size(plane, fb->width, fb->height);
/* set default src pos/size as fb size */
- plane->src_x = 0;
- plane->src_y = 0;
- plane->src_w = fb->width;
- plane->src_h = fb->height;
+ igt_fb_set_position(fb, plane, 0, 0);
+ igt_fb_set_size(fb, plane, fb->width, fb->height);
} else {
- plane->src_x = 0;
- plane->src_y = 0;
- plane->src_w = 0;
- plane->src_h = 0;
+ igt_plane_set_position(plane, 0, 0);
+ igt_plane_set_size(plane, 0, 0);
- plane->crtc_w = 0;
- plane->crtc_h = 0;
+ /* set default src pos/size as fb size */
+ igt_fb_set_position(fb, plane, 0, 0);
+ igt_fb_set_size(fb, plane, 0, 0);
}
-
- plane->fb_changed = true;
- plane->size_changed = true;
}
/**
@@ -2949,12 +2913,19 @@ void igt_plane_set_fb(igt_plane_t *plane, struct igt_fb *fb)
*/
void igt_plane_set_fence_fd(igt_plane_t *plane, int fence_fd)
{
- close(plane->fence_fd);
+ int64_t fd;
- if (fcntl(fence_fd, F_GETFD) != -1)
- plane->fence_fd = dup(fence_fd);
- else
- plane->fence_fd = -1;
+ fd = plane->values[IGT_PLANE_IN_FENCE_FD];
+ if (fd != -1)
+ close(fd);
+
+ if (fence_fd != -1) {
+ fd = dup(fence_fd);
+ igt_fail_on(fd == -1);
+ } else
+ fd = -1;
+
+ igt_plane_set_prop_value(plane, IGT_PLANE_IN_FENCE_FD, fd);
}
void igt_plane_set_position(igt_plane_t *plane, int x, int y)
@@ -2965,10 +2936,8 @@ void igt_plane_set_position(igt_plane_t *plane, int x, int y)
LOG(display, "%s.%d: plane_set_position(%d,%d)\n",
kmstest_pipe_name(pipe->pipe), plane->index, x, y);
- plane->crtc_x = x;
- plane->crtc_y = y;
-
- plane->position_changed = true;
+ igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_X, x);
+ igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_Y, y);
}
/**
@@ -2989,10 +2958,8 @@ void igt_plane_set_size(igt_plane_t *plane, int w, int h)
LOG(display, "%s.%d: plane_set_size (%dx%d)\n",
kmstest_pipe_name(pipe->pipe), plane->index, w, h);
- plane->crtc_w = w;
- plane->crtc_h = h;
-
- plane->size_changed = true;
+ igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_W, w);
+ igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_H, h);
}
/**
@@ -3014,10 +2981,8 @@ void igt_fb_set_position(struct igt_fb *fb, igt_plane_t *plane,
LOG(display, "%s.%d: fb_set_position(%d,%d)\n",
kmstest_pipe_name(pipe->pipe), plane->index, x, y);
- plane->src_x = x;
- plane->src_y = y;
-
- plane->fb_changed = true;
+ igt_plane_set_prop_value(plane, IGT_PLANE_SRC_X, IGT_FIXED(x, 0));
+ igt_plane_set_prop_value(plane, IGT_PLANE_SRC_Y, IGT_FIXED(y, 0));
}
/**
@@ -3040,10 +3005,8 @@ void igt_fb_set_size(struct igt_fb *fb, igt_plane_t *plane,
LOG(display, "%s.%d: fb_set_size(%dx%d)\n",
kmstest_pipe_name(pipe->pipe), plane->index, w, h);
- plane->src_w = w;
- plane->src_h = h;
-
- plane->fb_changed = true;
+ igt_plane_set_prop_value(plane, IGT_PLANE_SRC_W, IGT_FIXED(w, 0));
+ igt_plane_set_prop_value(plane, IGT_PLANE_SRC_H, IGT_FIXED(h, 0));
}
static const char *rotation_name(igt_rotation_t rotation)
@@ -3071,9 +3034,7 @@ void igt_plane_set_rotation(igt_plane_t *plane, igt_rotation_t rotation)
kmstest_pipe_name(pipe->pipe),
plane->index, rotation_name(rotation));
- plane->rotation = rotation;
-
- plane->rotation_changed = true;
+ igt_plane_set_prop_value(plane, IGT_PLANE_ROTATION, rotation);
}
/**
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 1ef10e7d525c..f87f8be31421 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -252,6 +252,9 @@ enum igt_atomic_plane_properties {
IGT_PLANE_CRTC_W,
IGT_PLANE_CRTC_H,
+/* Append new properties after IGT_PLANE_COORD_CHANGED_MASK */
+#define IGT_PLANE_COORD_CHANGED_MASK 0xff
+
IGT_PLANE_FB_ID,
IGT_PLANE_CRTC_ID,
IGT_PLANE_IN_FENCE_FD,
@@ -286,37 +289,19 @@ typedef struct {
int index;
/* capabilities */
int type;
- /* state tracking */
- unsigned int fb_changed : 1;
- unsigned int position_changed : 1;
- unsigned int rotation_changed : 1;
- unsigned int size_changed : 1;
+
/*
* drm_plane can be NULL for primary and cursor planes (when not
* using the atomic modeset API)
*/
drmModePlane *drm_plane;
- struct igt_fb *fb;
-
- uint32_t rotation_property;
-
- /* position within pipe_src_w x pipe_src_h */
- int crtc_x, crtc_y;
- /* size within pipe_src_w x pipe_src_h */
- int crtc_w, crtc_h;
- /* position within the framebuffer */
- uint32_t src_x;
- uint32_t src_y;
- /* size within the framebuffer*/
- uint32_t src_w;
- uint32_t src_h;
+ /* gem handle for fb */
+ uint32_t gem_handle;
- igt_rotation_t rotation;
-
- /* in fence fd */
- int fence_fd;
- uint32_t atomic_props_plane[IGT_NUM_PLANE_PROPS];
+ uint64_t changed;
+ uint32_t props[IGT_NUM_PLANE_PROPS];
+ uint64_t values[IGT_NUM_PLANE_PROPS];
} igt_plane_t;
struct igt_pipe {
@@ -407,7 +392,7 @@ bool igt_pipe_get_property(igt_pipe_t *pipe, const char *name,
static inline bool igt_plane_supports_rotation(igt_plane_t *plane)
{
- return plane->rotation_property != 0;
+ return plane->props[IGT_PLANE_ROTATION] != 0;
}
void igt_pipe_request_out_fence(igt_pipe_t *pipe);
void igt_pipe_set_degamma_lut(igt_pipe_t *pipe, void *ptr, size_t length);
@@ -527,16 +512,20 @@ static inline bool igt_output_is_connected(igt_output_t *output)
#define IGT_FIXED(i,f) ((i) << 16 | (f))
-/**
- * igt_atomic_populate_plane_req:
- * @req: A pointer to drmModeAtomicReq
- * @plane: A pointer igt_plane_t
- * @prop: one of igt_atomic_plane_properties
- * @value: the value to add
- */
-#define igt_atomic_populate_plane_req(req, plane, prop, value) \
- igt_assert_lt(0, drmModeAtomicAddProperty(req, plane->drm_plane->plane_id,\
- plane->atomic_props_plane[prop], value))
+#define igt_plane_is_prop_changed(plane, prop) \
+ (!!((plane)->changed & (1 << (prop))))
+
+#define igt_plane_set_prop_changed(plane, prop) \
+ (plane)->changed |= 1 << (prop)
+
+#define igt_plane_clear_prop_changed(plane, prop) \
+ (plane)->changed &= ~(1 << (prop))
+
+#define igt_plane_set_prop_value(plane, prop, value) \
+ do { \
+ plane->values[prop] = value; \
+ igt_plane_set_prop_changed(plane, prop); \
+ } while (0)
/**
* igt_atomic_populate_crtc_req:
diff --git a/tests/kms_atomic_interruptible.c b/tests/kms_atomic_interruptible.c
index 2d19fe967809..5570854390ea 100644
--- a/tests/kms_atomic_interruptible.c
+++ b/tests/kms_atomic_interruptible.c
@@ -161,12 +161,12 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
/* connector: 1 prop */
output->props[IGT_CONNECTOR_CRTC_ID],
/* plane: remainder props */
- plane->atomic_props_plane[IGT_PLANE_CRTC_ID],
- plane->atomic_props_plane[IGT_PLANE_FB_ID],
- plane->atomic_props_plane[IGT_PLANE_SRC_W],
- plane->atomic_props_plane[IGT_PLANE_SRC_H],
- plane->atomic_props_plane[IGT_PLANE_CRTC_W],
- plane->atomic_props_plane[IGT_PLANE_CRTC_H]
+ plane->props[IGT_PLANE_CRTC_ID],
+ plane->props[IGT_PLANE_FB_ID],
+ plane->props[IGT_PLANE_SRC_W],
+ plane->props[IGT_PLANE_SRC_H],
+ plane->props[IGT_PLANE_CRTC_W],
+ plane->props[IGT_PLANE_CRTC_H]
};
uint64_t prop_vals[] = {
/* crtc */
diff --git a/tests/kms_plane_lowres.c b/tests/kms_plane_lowres.c
index b16c8cd433b2..613f68899601 100644
--- a/tests/kms_plane_lowres.c
+++ b/tests/kms_plane_lowres.c
@@ -227,8 +227,8 @@ test_setup(data_t *data, enum pipe pipe, uint64_t modifier, int flags,
1.0, 1.0, 0.0,
&data->fb[i]);
- igt_plane_set_position(data->plane[i], x, y);
igt_plane_set_fb(data->plane[i], &data->fb[i]);
+ igt_plane_set_position(data->plane[i], x, y);
}
return mode;
diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
index 4d2ef1c184f0..4932a0d44410 100644
--- a/tests/kms_rotation_crc.c
+++ b/tests/kms_rotation_crc.c
@@ -122,11 +122,11 @@ static void prepare_crtc(data_t *data, igt_output_t *output, enum pipe pipe,
igt_plane_set_fb(primary, &data->fb_modeset);
if (commit < COMMIT_ATOMIC) {
- primary->rotation_changed = false;
+ igt_plane_clear_prop_changed(primary, IGT_PLANE_ROTATION);
igt_display_commit(display);
if (plane->type == DRM_PLANE_TYPE_PRIMARY)
- primary->rotation_changed = true;
+ igt_plane_set_prop_changed(primary, IGT_PLANE_ROTATION);
}
igt_plane_set_fb(plane, NULL);
--
2.14.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 25+ messages in thread
* ✓ Fi.CI.BAT: success for lib/igt_kms: Convert properties to be more atomic-like. (rev5)
2017-09-27 18:16 [PATCH i-g-t v2 0/8] lib/igt_kms: Convert properties to be more atomic-like Maarten Lankhorst
` (10 preceding siblings ...)
2017-09-28 10:50 ` ✓ Fi.CI.BAT: success for lib/igt_kms: Convert properties to be more atomic-like. (rev4) Patchwork
@ 2017-09-28 11:23 ` Patchwork
2017-09-28 11:47 ` ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev4) Patchwork
` (5 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2017-09-28 11:23 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
== Series Details ==
Series: lib/igt_kms: Convert properties to be more atomic-like. (rev5)
URL : https://patchwork.freedesktop.org/series/30903/
State : success
== Summary ==
IGT patchset tested on top of latest successful build
2885b10f99b4beeb046e75af8b8488c229f629d3 igt/gem_exec_schedule: Ignore set-priority failures on old kernels
with latest DRM-Tip kernel build CI_DRM_3148
c1ed50121778 drm-tip: 2017y-09m-28d-04h-52m-47s UTC integration manifest
fi-bdw-5557u total:289 pass:268 dwarn:0 dfail:0 fail:0 skip:21 time:449s
fi-bdw-gvtdvm total:289 pass:265 dwarn:0 dfail:0 fail:0 skip:24 time:481s
fi-blb-e6850 total:289 pass:224 dwarn:1 dfail:0 fail:0 skip:64 time:424s
fi-bsw-n3050 total:289 pass:243 dwarn:0 dfail:0 fail:0 skip:46 time:527s
fi-bwr-2160 total:289 pass:184 dwarn:0 dfail:0 fail:0 skip:105 time:279s
fi-bxt-dsi total:289 pass:259 dwarn:0 dfail:0 fail:0 skip:30 time:503s
fi-bxt-j4205 total:289 pass:260 dwarn:0 dfail:0 fail:0 skip:29 time:505s
fi-byt-j1900 total:289 pass:254 dwarn:1 dfail:0 fail:0 skip:34 time:498s
fi-cnl-y total:289 pass:259 dwarn:0 dfail:0 fail:3 skip:27 time:657s
fi-elk-e7500 total:289 pass:230 dwarn:0 dfail:0 fail:0 skip:59 time:418s
fi-glk-1 total:289 pass:260 dwarn:0 dfail:0 fail:0 skip:29 time:568s
fi-hsw-4770 total:289 pass:263 dwarn:0 dfail:0 fail:0 skip:26 time:425s
fi-hsw-4770r total:289 pass:263 dwarn:0 dfail:0 fail:0 skip:26 time:406s
fi-ilk-650 total:289 pass:229 dwarn:0 dfail:0 fail:0 skip:60 time:435s
fi-ivb-3520m total:289 pass:261 dwarn:0 dfail:0 fail:0 skip:28 time:493s
fi-ivb-3770 total:289 pass:261 dwarn:0 dfail:0 fail:0 skip:28 time:468s
fi-kbl-7500u total:289 pass:264 dwarn:1 dfail:0 fail:0 skip:24 time:476s
fi-kbl-7560u total:289 pass:270 dwarn:0 dfail:0 fail:0 skip:19 time:581s
fi-kbl-r total:289 pass:262 dwarn:0 dfail:0 fail:0 skip:27 time:589s
fi-pnv-d510 total:289 pass:223 dwarn:1 dfail:0 fail:0 skip:65 time:545s
fi-skl-6260u total:289 pass:269 dwarn:0 dfail:0 fail:0 skip:20 time:456s
fi-skl-6700k total:289 pass:265 dwarn:0 dfail:0 fail:0 skip:24 time:761s
fi-skl-6770hq total:289 pass:269 dwarn:0 dfail:0 fail:0 skip:20 time:492s
fi-skl-gvtdvm total:289 pass:266 dwarn:0 dfail:0 fail:0 skip:23 time:475s
fi-snb-2520m total:289 pass:251 dwarn:0 dfail:0 fail:0 skip:38 time:569s
fi-snb-2600 total:289 pass:250 dwarn:0 dfail:0 fail:0 skip:39 time:417s
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_265/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev4)
2017-09-27 18:16 [PATCH i-g-t v2 0/8] lib/igt_kms: Convert properties to be more atomic-like Maarten Lankhorst
` (11 preceding siblings ...)
2017-09-28 11:23 ` ✓ Fi.CI.BAT: success for lib/igt_kms: Convert properties to be more atomic-like. (rev5) Patchwork
@ 2017-09-28 11:47 ` Patchwork
2017-09-28 12:34 ` ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev5) Patchwork
` (4 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2017-09-28 11:47 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
== Series Details ==
Series: lib/igt_kms: Convert properties to be more atomic-like. (rev4)
URL : https://patchwork.freedesktop.org/series/30903/
State : failure
== Summary ==
Test gem_close_race:
Subgroup basic-process:
skip -> PASS (shard-hsw)
Test kms_frontbuffer_tracking:
Subgroup fbcpsr-2p-primscrn-cur-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-offscren-pri-shrfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-cur-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-primscrn-cur-indfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-pri-shrfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-spr-indfb-fullscreen:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-pri-shrfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-cur-indfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-offscren-pri-indfb-draw-pwrite:
skip -> PASS (shard-hsw)
Subgroup psr-2p-primscrn-shrfb-plflip-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-primscrn-spr-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-shrfb-fliptrack:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-indfb-pgflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-spr-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-pri-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-spr-indfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-cur-indfb-onoff:
skip -> PASS (shard-hsw)
Subgroup fbc-1p-rte:
skip -> PASS (shard-hsw)
Subgroup psr-rgb565-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-cur-indfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-offscren-pri-indfb-draw-mmap-wc:
dmesg-warn -> PASS (shard-hsw)
Subgroup psr-1p-offscren-pri-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-rgb565-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-pri-shrfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-indfb-plflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-modesetfrombusy:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-pri-shrfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-pri-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-rte:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-pri-shrfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-offscren-pri-shrfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-gtt:
skip -> PASS (shard-hsw)
Subgroup psr-2p-primscrn-pri-shrfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-spr-indfb-draw-mmap-gtt:
skip -> PASS (shard-hsw)
Subgroup fbc-1p-primscrn-cur-indfb-draw-mmap-wc:
skip -> PASS (shard-hsw)
Subgroup fbc-1p-primscrn-shrfb-pgflip-blt:
skip -> PASS (shard-hsw)
Subgroup psr-2p-primscrn-spr-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-cur-indfb-onoff:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-primscrn-spr-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-pri-indfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-cur-indfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-spr-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-pri-shrfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-rgb565-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-pri-shrfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-indfb-plflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-primscrn-indfb-msflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-pri-indfb-draw-mmap-gtt:
skip -> PASS (shard-hsw)
Subgroup fbcpsr-2p-primscrn-spr-indfb-onoff:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-spr-indfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-spr-indfb-move:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-indfb-msflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-shrfb-plflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-cur-indfb-move:
pass -> SKIP (shard-hsw)
Subgroup psr-rgb101010-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-cur-indfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-farfromfence:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-spr-indfb-draw-render:
skip -> PASS (shard-hsw)
Subgroup psr-1p-primscrn-cur-indfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-pri-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-pri-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-offscren-pri-indfb-draw-blt:
skip -> PASS (shard-hsw)
Subgroup psr-1p-primscrn-pri-indfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-indfb-scaledprimary:
pass -> SKIP (shard-hsw)
Subgroup psr-farfromfence:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-spr-indfb-onoff:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-cur-indfb-onoff:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-primscrn-pri-indfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-primscrn-spr-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-spr-indfb-move:
skip -> PASS (shard-hsw)
Subgroup fbc-2p-scndscrn-spr-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-pri-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbc-rgb565-draw-render:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-cur-indfb-onoff:
pass -> SKIP (shard-hsw)
Subgroup fbc-shrfb-scaledprimary:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-pri-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbc-modesetfrombusy:
skip -> PASS (shard-hsw)
Subgroup psr-2p-scndscrn-pri-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-spr-indfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup psr-modesetfrombusy:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-rgb101010-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-spr-indfb-draw-mmap-cpu:
skip -> PASS (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-cur-indfb-onoff:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-pri-indfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-shrfb-fliptrack:
pass -> SKIP (shard-hsw)
Subgroup fbc-rgb101010-draw-render:
skip -> PASS (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-spr-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-primscrn-pri-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-cpu:
skip -> PASS (shard-hsw)
Subgroup fbcpsr-1p-primscrn-cur-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-spr-indfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-spr-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-shrfb-pgflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-spr-indfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-shrfb-pgflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-shrfb-pgflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-indfb-fliptrack:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-primscrn-shrfb-msflip-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-pri-indfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-cur-indfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup fbc-rgb101010-draw-blt:
skip -> PASS (shard-hsw)
Subgroup fbcpsr-1p-offscren-pri-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-offscren-pri-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-primscrn-spr-indfb-move:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-pri-indfb-multidraw:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-indfb-pgflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-primscrn-shrfb-plflip-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-pri-shrfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-pri-shrfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-primscrn-pri-shrfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-pri-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-spr-indfb-fullscreen:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-offscren-pri-indfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-offscren-pri-shrfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-cur-indfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-indfb-fliptrack:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-cur-indfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-badstride:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-pri-indfb-draw-pwrite:
fail -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-pri-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-rte:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-indfb-msflip-blt:
skip -> PASS (shard-hsw)
Subgroup fbcpsr-tilingchange:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-cur-indfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-offscren-pri-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-primscrn-pri-shrfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-shrfb-plflip-blt:
skip -> PASS (shard-hsw)
Subgroup fbc-2p-primscrn-pri-indfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-indfb-plflip-blt:
skip -> PASS (shard-hsw)
Subgroup fbcpsr-1p-offscren-pri-shrfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-offscren-pri-indfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-pri-shrfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-pri-indfb-draw-mmap-cpu:
dmesg-warn -> SKIP (shard-hsw)
Subgroup fbc-rgb101010-draw-pwrite:
skip -> PASS (shard-hsw)
Subgroup psr-1p-primscrn-spr-indfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-pri-indfb-multidraw:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-pri-indfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-cur-indfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-spr-indfb-onoff:
skip -> PASS (shard-hsw)
Subgroup psr-1p-primscrn-spr-indfb-onoff:
pass -> SKIP (shard-hsw)
Subgroup fbc-rgb565-draw-mmap-gtt:
skip -> PASS (shard-hsw)
Subgroup fbcpsr-1p-shrfb-fliptrack:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-primscrn-cur-indfb-move:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-primscrn-spr-indfb-move:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-spr-indfb-fullscreen:
skip -> PASS (shard-hsw)
Subgroup psr-2p-primscrn-pri-indfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-pri-indfb-draw-pwrite:
skip -> PASS (shard-hsw)
Subgroup psr-rgb101010-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-cur-indfb-move:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-pri-shrfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-primscrn-pri-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-cur-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-shrfb-msflip-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-rte:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-cur-indfb-move:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-pri-indfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-spr-indfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-offscren-pri-shrfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-offscren-pri-shrfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-shrfb-msflip-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-spr-indfb-move:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-indfb-msflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-spr-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-spr-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-pri-shrfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-pri-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-pri-indfb-draw-mmap-wc:
skip -> PASS (shard-hsw)
Subgroup fbcpsr-rgb101010-draw-render:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-primscrn-cur-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-primscrn-spr-indfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-pri-shrfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-offscren-pri-indfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-offscren-pri-shrfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-cur-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-spr-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-primscrn-pri-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-spr-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-spr-indfb-move:
pass -> SKIP (shard-hsw)
Subgroup fbc-badstride:
skip -> PASS (shard-hsw)
Subgroup fbcpsr-1p-primscrn-spr-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-offscren-pri-indfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-cur-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-spr-indfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-spr-indfb-fullscreen:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-spr-indfb-fullscreen:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-spr-indfb-draw-render:
pass -> SKIP (shard
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_264/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev5)
2017-09-27 18:16 [PATCH i-g-t v2 0/8] lib/igt_kms: Convert properties to be more atomic-like Maarten Lankhorst
` (12 preceding siblings ...)
2017-09-28 11:47 ` ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev4) Patchwork
@ 2017-09-28 12:34 ` Patchwork
2017-09-28 13:01 ` ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev4) Patchwork
` (3 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2017-09-28 12:34 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
== Series Details ==
Series: lib/igt_kms: Convert properties to be more atomic-like. (rev5)
URL : https://patchwork.freedesktop.org/series/30903/
State : failure
== Summary ==
Test gem_exec_schedule:
Subgroup pi-ringfull-blt:
pass -> SKIP (shard-hsw)
Subgroup fifo-bsd:
skip -> PASS (shard-hsw)
Subgroup preempt-bsd2:
pass -> SKIP (shard-hsw)
Subgroup in-order-bsd1:
pass -> SKIP (shard-hsw)
Subgroup promotion-bsd:
pass -> SKIP (shard-hsw)
Subgroup preempt-other-bsd1:
pass -> SKIP (shard-hsw)
Subgroup preempt-self-blt:
pass -> SKIP (shard-hsw)
Subgroup reorder-wide-vebox:
pass -> SKIP (shard-hsw)
Subgroup preempt-vebox:
pass -> SKIP (shard-hsw)
Subgroup promotion-bsd1:
pass -> SKIP (shard-hsw)
Subgroup deep-vebox:
pass -> SKIP (shard-hsw)
Subgroup reorder-wide-render:
pass -> SKIP (shard-hsw)
Subgroup in-order-vebox:
pass -> SKIP (shard-hsw)
Subgroup in-order-bsd:
pass -> SKIP (shard-hsw)
Subgroup fifo-bsd1:
pass -> SKIP (shard-hsw)
Subgroup pi-ringfull-bsd:
pass -> SKIP (shard-hsw)
Subgroup pi-ringfull-default:
pass -> SKIP (shard-hsw)
Subgroup out-order-blt:
pass -> SKIP (shard-hsw)
Subgroup preempt-blt:
pass -> SKIP (shard-hsw)
Subgroup reorder-wide-blt:
pass -> SKIP (shard-hsw)
Subgroup preempt-contexts-vebox:
pass -> SKIP (shard-hsw)
Subgroup preempt-other-vebox:
pass -> SKIP (shard-hsw)
Subgroup pi-ringfull-bsd2:
pass -> SKIP (shard-hsw)
Subgroup preempt-contexts-render:
pass -> SKIP (shard-hsw)
Subgroup preempt-self-bsd1:
pass -> SKIP (shard-hsw)
Subgroup deep-render:
pass -> SKIP (shard-hsw)
Subgroup preempt-contexts-bsd1:
pass -> SKIP (shard-hsw)
Subgroup promotion-blt:
pass -> SKIP (shard-hsw)
Subgroup out-order-render:
pass -> SKIP (shard-hsw)
Subgroup preempt-render:
pass -> SKIP (shard-hsw)
Subgroup preempt-other-blt:
pass -> SKIP (shard-hsw)
Subgroup in-order-bsd2:
pass -> SKIP (shard-hsw)
Subgroup deep-bsd1:
pass -> SKIP (shard-hsw)
Subgroup in-order-render:
pass -> SKIP (shard-hsw)
Subgroup out-order-vebox:
pass -> SKIP (shard-hsw)
Subgroup preempt-other-bsd2:
pass -> SKIP (shard-hsw)
Subgroup reorder-wide-bsd2:
pass -> SKIP (shard-hsw)
Subgroup wide-blt:
pass -> SKIP (shard-hsw)
Subgroup fifo-render:
fail -> PASS (shard-hsw)
Subgroup reorder-wide-bsd1:
pass -> SKIP (shard-hsw)
Subgroup out-order-bsd2:
pass -> SKIP (shard-hsw)
Subgroup pi-ringfull-bsd1:
pass -> SKIP (shard-hsw)
Subgroup deep-bsd:
pass -> SKIP (shard-hsw)
Subgroup wide-bsd1:
fail -> SKIP (shard-hsw)
Subgroup pi-ringfull-render:
pass -> SKIP (shard-hsw)
Subgroup deep-blt:
pass -> SKIP (shard-hsw)
Test kms_setmode:
Subgroup invalid-clone-exclusive-crtc:
skip -> PASS (shard-hsw)
Subgroup basic:
skip -> PASS (shard-hsw) fdo#99912
Subgroup invalid-clone-single-crtc:
skip -> PASS (shard-hsw)
Test kms_busy:
Subgroup basic-flip-D:
pass -> SKIP (shard-hsw)
Subgroup extended-pageflip-hang-oldfb-render-C:
skip -> PASS (shard-hsw)
Subgroup extended-modeset-hang-newfb-render-D:
pass -> SKIP (shard-hsw)
Subgroup basic-flip-A:
skip -> PASS (shard-hsw)
Subgroup extended-modeset-hang-oldfb-with-reset-render-B:
skip -> PASS (shard-hsw) fdo#102249 +1
Subgroup extended-pageflip-hang-oldfb-render-E:
pass -> SKIP (shard-hsw)
Subgroup extended-pageflip-hang-newfb-render-A:
skip -> PASS (shard-hsw)
Subgroup extended-pageflip-modeset-hang-oldfb-render-B:
skip -> PASS (shard-hsw)
Subgroup basic-modeset-F:
fail -> SKIP (shard-hsw)
Subgroup extended-pageflip-hang-oldfb-render-D:
pass -> SKIP (shard-hsw)
Subgroup extended-modeset-hang-oldfb-with-reset-render-D:
pass -> SKIP (shard-hsw)
Subgroup extended-pageflip-hang-newfb-render-B:
skip -> PASS (shard-hsw)
Subgroup extended-modeset-hang-oldfb-render-E:
pass -> SKIP (shard-hsw)
Subgroup extended-modeset-hang-oldfb-render-D:
pass -> SKIP (shard-hsw)
Subgroup basic-modeset-D:
pass -> SKIP (shard-hsw)
Subgroup extended-pageflip-hang-newfb-render-F:
pass -> SKIP (shard-hsw)
Subgroup basic-modeset-E:
pass -> SKIP (shard-hsw)
Subgroup extended-modeset-hang-oldfb-render-C:
skip -> PASS (shard-hsw)
Subgroup extended-modeset-hang-oldfb-with-reset-render-F:
pass -> SKIP (shard-hsw)
Subgroup extended-modeset-hang-oldfb-render-F:
pass -> SKIP (shard-hsw)
Subgroup basic-flip-E:
pass -> SKIP (shard-hsw)
Subgroup basic-modeset-B:
skip -> PASS (shard-hsw)
Subgroup basic-flip-B:
skip -> PASS (shard-hsw)
Subgroup extended-modeset-hang-newfb-render-C:
skip -> PASS (shard-hsw)
Subgroup basic-modeset-C:
skip -> PASS (shard-hsw)
Subgroup extended-pageflip-modeset-hang-oldfb-render-A:
skip -> PASS (shard-hsw)
Subgroup basic-flip-C:
skip -> PASS (shard-hsw)
Subgroup extended-pageflip-modeset-hang-oldfb-render-E:
pass -> SKIP (shard-hsw)
Subgroup extended-pageflip-modeset-hang-oldfb-render-F:
pass -> SKIP (shard-hsw)
Test gem_madvise:
Subgroup dontneed-before-exec:
skip -> PASS (shard-hsw)
Subgroup dontneed-before-mmap:
skip -> PASS (shard-hsw)
Test kms_color:
Subgroup degamma-pipe2:
pass -> SKIP (shard-hsw)
Subgroup ctm-blue-to-red-pipe5:
pass -> SKIP (shard-hsw)
Subgroup ctm-green-to-red-pipe3:
pass -> SKIP (shard-hsw)
Subgroup ctm-0-75-pipe0:
pass -> SKIP (shard-hsw)
Subgroup pipe-invalid-lut-sizes:
skip -> PASS (shard-hsw)
Subgroup degamma-pipe4:
pass -> SKIP (shard-hsw)
Subgroup ctm-max-pipe0:
pass -> SKIP (shard-hsw)
Subgroup ctm-negative-pipe3:
pass -> SKIP (shard-hsw)
Subgroup legacy-gamma-pipe4:
pass -> SKIP (shard-hsw)
Subgroup ctm-0-5-pipe1:
pass -> SKIP (shard-hsw)
Subgroup ctm-0-75-pipe4:
pass -> SKIP (shard-hsw)
Subgroup ctm-0-5-pipe5:
pass -> SKIP (shard-hsw)
Subgroup pipe-invalid-ctm-matrix-sizes:
skip -> PASS (shard-hsw)
Subgroup ctm-blue-to-red-pipe0:
pass -> SKIP (shard-hsw)
Subgroup gamma-pipe1:
pass -> SKIP (shard-hsw)
Subgroup ctm-max-pipe3:
pass -> SKIP (shard-hsw)
Subgroup degamma-pipe0:
pass -> SKIP (shard-hsw)
Subgroup gamma-pipe2:
pass -> SKIP (shard-hsw)
Subgroup ctm-0-25-pipe3:
pass -> SKIP (shard-hsw)
Subgroup ctm-max-pipe2:
pass -> SKIP (shard-hsw)
Subgroup legacy-gamma-pipe0:
pass -> SKIP (shard-hsw)
Subgroup ctm-red-to-blue-pipe1:
pass -> SKIP (shard-hsw)
Subgroup ctm-0-5-pipe0:
pass -> SKIP (shard-hsw)
Subgroup ctm-negative-pipe0:
pass -> SKIP (shard-hsw)
Subgroup ctm-0-5-pipe2:
pass -> SKIP (shard-hsw)
Subgroup degamma-pipe3:
pass -> SKIP (shard-hsw)
Subgroup ctm-0-25-pipe4:
pass -> SKIP (shard-hsw)
Subgroup legacy-gamma-reset-pipe2:
pass -> SKIP (shard-hsw)
Subgroup ctm-0-5-pipe3:
pass -> SKIP (shard-hsw)
Subgroup ctm-0-75-pipe1:
pass -> SKIP (shard-hsw)
Subgroup ctm-negative-pipe4:
pass -> SKIP (shard-hsw)
Subgroup ctm-0-25-pipe5:
pass -> SKIP (shard-hsw)
Subgroup ctm-0-75-pipe3:
pass -> SKIP (shard-hsw)
Subgroup legacy-gamma-reset-pipe4:
pass -> SKIP (shard-hsw)
Subgroup legacy-gamma-pipe3:
pass -> SKIP (shard-hsw)
Subgroup ctm-0-25-pipe1:
pass -> SKIP (shard-hsw)
Subgroup legacy-gamma-pipe5:
pass -> SKIP (shard-hsw)
Subgroup legacy-gamma-reset-pipe5:
pass -> SKIP (shard-hsw)
Subgroup ctm-0-75-pipe5:
pass -> SKIP (shard-hsw)
Subgroup ctm-negative-pipe2:
pass -> SKIP (shard-hsw)
Test kms_frontbuffer_tracking:
Subgroup fbc-1p-primscrn-cur-indfb-draw-mmap-cpu:
skip -> PASS (shard-hsw)
Subgroup fbc-2p-scndscrn-cur-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-shrfb-pgflip-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-pri-shrfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-pri-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-indfb-pgflip-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-pri-indfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-pri-shrfb-draw-mmap-wc:
skip -> PASS (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-shrfb-plflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-pri-shrfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-offscren-pri-shrfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-pri-shrfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-spr-indfb-move:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-pri-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup psr-rgb565-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-offscren-pri-shrfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-pri-indfb-draw-blt:
skip -> PASS (shard-hsw)
Subgroup psr-2p-scndscrn-cur-indfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-slowdraw:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-spr-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-cur-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-primscrn-shrfb-plflip-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-pri-shrfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-indfb-fliptrack:
skip -> PASS (shard-hsw)
Subgroup fbc-2p-shrfb-fliptrack:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-primscrn-pri-shrfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-cur-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-pri-shrfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-spr-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-primscrn-spr-indfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-cur-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-shrfb-fliptrack:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-cur-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-offscren-pri-indfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-pri-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-offscren-pri-shrfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-pri-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-rgb565-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-spr-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-indfb-plflip-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-spr-indfb-move:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-shrfb-pgflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-primscrn-spr-indfb-onoff:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-shrfb-plflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-pri-indfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-offscren-pri-indfb-draw-mmap-gtt:
dmesg-warn -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-indfb-pgflip-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-spr-indfb-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-primscrn-pri-indfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-primscrn-pri-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-indfb-pgflip-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-pri-shrfb-draw-pwrite:
fail -> SKIP (shard-hsw)
Subgroup fbc-2p-indfb-fliptrack:
pass -> SKIP (shard-hsw)
Subgroup psr-rgb565-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-farfromfence:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-cur-indfb-onoff:
skip -> PASS (shard-hsw)
Subgroup fbcpsr-2p-primscrn-spr-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-pri-indfb-draw-pwrite:
fail -> PASS (shard-hsw)
Subgroup psr-2p-scndscrn-pri-indfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-spr-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-primscrn-spr-indfb-fullscreen:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-indfb-plflip-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-pri-indfb-draw-mmap-gtt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-shrfb-fliptrack:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-primscrn-pri-shrfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup psr-1p-offscren-pri-shrfb-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-shrfb-plflip-blt:
pass -> SKIP (shard-hsw)
Subgroup fbc-rgb565-draw-mmap-gtt:
skip -> PASS (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-cur-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-pri-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-primscrn-pri-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-spr-indfb-onoff:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-2p-scndscrn-pri-indfb-draw-render:
pass -> SKIP (shard-hsw)
Subgroup fbc-2p-scndscrn-shrfb-pgflip-blt:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-spr-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Subgroup psr-2p-scndscrn-spr-indfb-draw-mmap-cpu:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-spr-indfb-onoff:
pass -> SKIP (shard-hsw)
Subgroup fbc-1p-primscrn-indfb-pgflip-blt:
skip -> PASS (shard-hsw)
Subgroup fbcpsr-rgb101010-draw-mmap-wc:
pass -> SKIP (shard-hsw)
Subgroup psr-rgb565-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-rgb565-draw-blt:
pass -> SKIP (shard-hsw)
Subgroup fbcpsr-1p-primscrn-cur-indfb-draw-mmap-cpu:
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_265/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev4)
2017-09-27 18:16 [PATCH i-g-t v2 0/8] lib/igt_kms: Convert properties to be more atomic-like Maarten Lankhorst
` (13 preceding siblings ...)
2017-09-28 12:34 ` ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev5) Patchwork
@ 2017-09-28 13:01 ` Patchwork
2017-09-28 13:04 ` ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev5) Patchwork
` (2 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2017-09-28 13:01 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
== Series Details ==
Series: lib/igt_kms: Convert properties to be more atomic-like. (rev4)
URL : https://patchwork.freedesktop.org/series/30903/
State : failure
== Summary ==
Test kms_cursor_legacy:
Subgroup cursorA-vs-flipA-atomic-transitions:
fail -> PASS (shard-hsw) fdo#102723
Test prime_mmap:
Subgroup test_userptr:
pass -> DMESG-WARN (shard-hsw) fdo#102939
Test kms_atomic_interruptible:
Subgroup atomic-setmode:
pass -> FAIL (shard-hsw)
Subgroup legacy-setmode:
pass -> FAIL (shard-hsw)
Test kms_rotation_crc:
Subgroup sprite-rotation-180-flip:
fail -> PASS (shard-hsw) fdo#102691
Test kms_plane_lowres:
Subgroup pipe-A-tiling-x:
pass -> FAIL (shard-hsw)
Subgroup pipe-A-tiling-none:
pass -> FAIL (shard-hsw)
Test gem_exec_reloc:
Subgroup basic-write-read-noreloc:
incomplete -> PASS (shard-hsw) fdo#102332
Test gem_eio:
Subgroup in-flight:
pass -> DMESG-WARN (shard-hsw) fdo#102886 +2
Test perf:
Subgroup blocking:
pass -> FAIL (shard-hsw) fdo#102252
fdo#102723 https://bugs.freedesktop.org/show_bug.cgi?id=102723
fdo#102939 https://bugs.freedesktop.org/show_bug.cgi?id=102939
fdo#102691 https://bugs.freedesktop.org/show_bug.cgi?id=102691
fdo#102332 https://bugs.freedesktop.org/show_bug.cgi?id=102332
fdo#102886 https://bugs.freedesktop.org/show_bug.cgi?id=102886
fdo#102252 https://bugs.freedesktop.org/show_bug.cgi?id=102252
shard-hsw total:2429 pass:1327 dwarn:6 dfail:0 fail:13 skip:1083 time:9878s
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_264/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev5)
2017-09-27 18:16 [PATCH i-g-t v2 0/8] lib/igt_kms: Convert properties to be more atomic-like Maarten Lankhorst
` (14 preceding siblings ...)
2017-09-28 13:01 ` ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev4) Patchwork
@ 2017-09-28 13:04 ` Patchwork
2017-09-28 16:09 ` ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev2) Patchwork
2017-09-29 6:58 ` ✗ Fi.CI.BAT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev6) Patchwork
17 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2017-09-28 13:04 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
== Series Details ==
Series: lib/igt_kms: Convert properties to be more atomic-like. (rev5)
URL : https://patchwork.freedesktop.org/series/30903/
State : failure
== Summary ==
Test gem_eio:
Subgroup in-flight-contexts:
dmesg-warn -> PASS (shard-hsw) fdo#102886 +1
Test kms_atomic_interruptible:
Subgroup atomic-setmode:
pass -> FAIL (shard-hsw)
Subgroup legacy-setmode:
pass -> FAIL (shard-hsw)
Test kms_rotation_crc:
Subgroup sprite-rotation-180-flip:
fail -> PASS (shard-hsw) fdo#102691
Test kms_busy:
Subgroup extended-modeset-hang-oldfb-with-reset-render-A:
pass -> DMESG-WARN (shard-hsw) fdo#102249
Test gem_exec_reloc:
Subgroup basic-write-read-noreloc:
incomplete -> PASS (shard-hsw) fdo#102332
Test kms_cursor_legacy:
Subgroup cursorA-vs-flipA-atomic-transitions:
fail -> PASS (shard-hsw) fdo#102723
fdo#102886 https://bugs.freedesktop.org/show_bug.cgi?id=102886
fdo#102691 https://bugs.freedesktop.org/show_bug.cgi?id=102691
fdo#102249 https://bugs.freedesktop.org/show_bug.cgi?id=102249
fdo#102332 https://bugs.freedesktop.org/show_bug.cgi?id=102332
fdo#102723 https://bugs.freedesktop.org/show_bug.cgi?id=102723
shard-hsw total:2429 pass:1331 dwarn:5 dfail:0 fail:10 skip:1083 time:9895s
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_265/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev2)
2017-09-27 18:16 [PATCH i-g-t v2 0/8] lib/igt_kms: Convert properties to be more atomic-like Maarten Lankhorst
` (15 preceding siblings ...)
2017-09-28 13:04 ` ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev5) Patchwork
@ 2017-09-28 16:09 ` Patchwork
2017-09-29 6:58 ` ✗ Fi.CI.BAT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev6) Patchwork
17 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2017-09-28 16:09 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
== Series Details ==
Series: lib/igt_kms: Convert properties to be more atomic-like. (rev2)
URL : https://patchwork.freedesktop.org/series/30903/
State : failure
== Summary ==
Test kms_atomic_interruptible:
Subgroup legacy-cursor:
pass -> FAIL (shard-hsw)
Subgroup atomic-setmode:
pass -> FAIL (shard-hsw)
Subgroup legacy-pageflip:
pass -> FAIL (shard-hsw)
Subgroup legacy-dpms:
pass -> FAIL (shard-hsw)
Subgroup legacy-setmode:
pass -> FAIL (shard-hsw)
Subgroup universal-setplane-primary:
pass -> FAIL (shard-hsw)
Subgroup universal-setplane-cursor:
pass -> FAIL (shard-hsw)
Test kms_plane_multiple:
Subgroup atomic-pipe-B-tiling-none:
pass -> SKIP (shard-hsw)
Subgroup atomic-pipe-C-tiling-none:
pass -> SKIP (shard-hsw)
Subgroup atomic-pipe-B-tiling-x:
pass -> SKIP (shard-hsw)
Subgroup atomic-pipe-C-tiling-x:
pass -> SKIP (shard-hsw)
Test kms_busy:
Subgroup extended-pageflip-hang-oldfb-render-B:
pass -> FAIL (shard-hsw)
Subgroup extended-pageflip-hang-oldfb-render-C:
pass -> FAIL (shard-hsw)
Subgroup extended-pageflip-hang-newfb-render-B:
pass -> FAIL (shard-hsw)
Subgroup extended-modeset-hang-oldfb-with-reset-render-C:
pass -> FAIL (shard-hsw)
Subgroup extended-pageflip-modeset-hang-oldfb-render-B:
pass -> FAIL (shard-hsw)
Subgroup extended-modeset-hang-oldfb-render-C:
pass -> FAIL (shard-hsw)
Subgroup extended-modeset-hang-oldfb-with-reset-render-B:
pass -> FAIL (shard-hsw) fdo#102249 +1
Subgroup extended-modeset-hang-newfb-with-reset-render-B:
pass -> FAIL (shard-hsw)
Subgroup extended-pageflip-hang-newfb-render-C:
pass -> FAIL (shard-hsw)
Subgroup extended-modeset-hang-newfb-render-C:
pass -> FAIL (shard-hsw)
Subgroup extended-modeset-hang-oldfb-render-B:
pass -> FAIL (shard-hsw)
Subgroup extended-modeset-hang-newfb-render-B:
pass -> FAIL (shard-hsw)
Subgroup extended-pageflip-modeset-hang-oldfb-render-C:
pass -> FAIL (shard-hsw)
Test prime_mmap:
Subgroup test_userptr:
pass -> DMESG-WARN (shard-hsw) fdo#102939
Test kms_plane_lowres:
Subgroup pipe-A-tiling-x:
pass -> FAIL (shard-hsw)
Subgroup pipe-A-tiling-none:
pass -> FAIL (shard-hsw)
Test gem_eio:
Subgroup wait:
dmesg-warn -> PASS (shard-hsw) fdo#102886 +1
Test kms_setmode:
Subgroup basic:
fail -> PASS (shard-hsw) fdo#99912
Test gem_sync:
Subgroup basic-store-all:
pass -> FAIL (shard-hsw)
Test kms_rotation_crc:
Subgroup sprite-rotation-180-flip:
fail -> PASS (shard-hsw) fdo#102691
Test perf:
Subgroup blocking:
fail -> PASS (shard-hsw) fdo#102252
Test kms_concurrent:
Subgroup pipe-C:
pass -> SKIP (shard-hsw)
Subgroup pipe-B:
pass -> SKIP (shard-hsw)
Test kms_flip:
Subgroup flip-vs-wf_vblank-interruptible:
fail -> PASS (shard-hsw) fdo#100368
fdo#102249 https://bugs.freedesktop.org/show_bug.cgi?id=102249
fdo#102939 https://bugs.freedesktop.org/show_bug.cgi?id=102939
fdo#102886 https://bugs.freedesktop.org/show_bug.cgi?id=102886
fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912
fdo#102691 https://bugs.freedesktop.org/show_bug.cgi?id=102691
fdo#102252 https://bugs.freedesktop.org/show_bug.cgi?id=102252
fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368
shard-hsw total:2429 pass:1305 dwarn:3 dfail:0 fail:32 skip:1089 time:9572s
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_259/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH i-g-t] lib/igt_kms: Rework pipe properties to be more atomic, v4.
2017-09-28 10:28 ` [PATCH i-g-t v2 6/8] lib/igt_kms: Rework pipe properties to be more atomic, v3 Maarten Lankhorst
@ 2017-09-29 6:50 ` Maarten Lankhorst
0 siblings, 0 replies; 25+ messages in thread
From: Maarten Lankhorst @ 2017-09-29 6:50 UTC (permalink / raw)
To: intel-gfx
In the future I want to allow tests to commit more properties,
but for this to work I have to fix all properties to work better
with atomic commit. Instead of special casing each
property make a bitmask for all property changed flags, and try to
commit all properties.
This has been the most involved one, since legacy pipe commit still
handles a lot of the properties differently from the rest.
Changes since v1:
- Dump all changed properties on commit.
- Fix bug in igt_pipe_refresh().
Changes since v2:
- Set pipe ACTIVE property changed flag on init.
Changes since v3:
- Add a missing igt_pipe_refresh() to kms_atomic_interruptible.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
lib/igt_kms.c | 217 ++++++++++++++++++++------------------
lib/igt_kms.h | 77 ++++++--------
tests/kms_atomic_interruptible.c | 8 +-
tests/kms_atomic_transition.c | 2 +-
tests/kms_crtc_background_color.c | 2 +-
5 files changed, 151 insertions(+), 155 deletions(-)
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 6e0052ebe7a7..a81d7998433a 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -259,8 +259,8 @@ igt_atomic_fill_connector_props(igt_display_t *display, igt_output_t *output,
}
static void
-igt_atomic_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
- int num_crtc_props, const char **crtc_prop_names)
+igt_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
+ int num_crtc_props, const char **crtc_prop_names)
{
drmModeObjectPropertiesPtr props;
int i, j, fd;
@@ -278,7 +278,7 @@ igt_atomic_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
if (strcmp(prop->name, crtc_prop_names[j]) != 0)
continue;
- pipe->atomic_props_crtc[j] = props->props[i];
+ pipe->props[j] = props->props[i];
break;
}
@@ -1690,7 +1690,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
int p = 1;
int j, type;
uint8_t last_plane = 0, n_planes = 0;
- uint64_t prop_value;
pipe->crtc_id = resources->crtcs[i];
pipe->display = display;
@@ -1700,29 +1699,16 @@ void igt_display_init(igt_display_t *display, int drm_fd)
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",
- &pipe->background_property,
- &prop_value,
+ "background_color", NULL,
+ &pipe->values[IGT_CRTC_BACKGROUND],
NULL);
- pipe->background = (uint32_t)prop_value;
- get_crtc_property(display->drm_fd, pipe->crtc_id,
- "DEGAMMA_LUT",
- &pipe->degamma_property,
- NULL,
- NULL);
- get_crtc_property(display->drm_fd, pipe->crtc_id,
- "CTM",
- &pipe->ctm_property,
- NULL,
- NULL);
- get_crtc_property(display->drm_fd, pipe->crtc_id,
- "GAMMA_LUT",
- &pipe->gamma_property,
- NULL,
- NULL);
-
- igt_atomic_fill_pipe_props(display, pipe, IGT_NUM_CRTC_PROPS, igt_crtc_prop_names);
/* count number of valid planes */
for (j = 0; j < plane_resources->count_planes; j++) {
@@ -1805,8 +1791,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
igt_assert_eq(p, n_planes);
pipe->n_planes = n_planes;
-
- pipe->mode_changed = true;
}
/*
@@ -2283,7 +2267,7 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
if (!igt_plane_is_prop_changed(primary, IGT_PLANE_FB_ID) &&
!(primary->changed & IGT_PLANE_COORD_CHANGED_MASK) &&
- !primary->pipe->mode_changed)
+ !igt_pipe_obj_is_prop_changed(primary->pipe, IGT_CRTC_MODE_ID))
return 0;
crtc_id = pipe->crtc_id;
@@ -2352,6 +2336,16 @@ static int igt_plane_commit(igt_plane_t *plane,
}
}
+static bool is_atomic_prop(enum igt_atomic_crtc_properties prop)
+{
+ if (prop == IGT_CRTC_MODE_ID ||
+ prop == IGT_CRTC_ACTIVE ||
+ prop == IGT_CRTC_OUT_FENCE_PTR)
+ return true;
+
+ return false;
+}
+
/*
* Commit all plane changes to an output. Note that if @s is COMMIT_LEGACY,
* enabling/disabling the primary plane will also enable/disable the CRTC.
@@ -2369,19 +2363,9 @@ static int igt_pipe_commit(igt_pipe_t *pipe,
int i;
int ret;
- if (pipe->background_changed) {
- igt_crtc_set_property(pipe, pipe->background_property,
- pipe->background);
- }
-
- if (pipe->color_mgmt_changed) {
- igt_crtc_set_property(pipe, pipe->degamma_property,
- pipe->degamma_blob);
- igt_crtc_set_property(pipe, pipe->ctm_property,
- pipe->ctm_blob);
- igt_crtc_set_property(pipe, pipe->gamma_property,
- pipe->gamma_blob);
- }
+ for (i = 0; i < IGT_NUM_CRTC_PROPS; i++)
+ if (!is_atomic_prop(i))
+ igt_crtc_set_property(pipe, pipe->props[i], pipe->values[i]);
for (i = 0; i < pipe->n_planes; i++) {
igt_plane_t *plane = &pipe->planes[i];
@@ -2394,9 +2378,10 @@ static int igt_pipe_commit(igt_pipe_t *pipe,
}
static void
-igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length)
+igt_pipe_replace_blob(igt_pipe_t *pipe, enum igt_atomic_crtc_properties prop, void *ptr, size_t length)
{
igt_display_t *display = pipe->display;
+ uint64_t *blob = &pipe->values[prop];
uint32_t blob_id = 0;
if (*blob != 0)
@@ -2408,6 +2393,7 @@ igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length
ptr, length, &blob_id) == 0);
*blob = blob_id;
+ igt_pipe_obj_set_prop_changed(pipe, prop);
}
/*
@@ -2415,51 +2401,23 @@ igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length
*/
static void igt_atomic_prepare_crtc_commit(igt_pipe_t *pipe_obj, drmModeAtomicReq *req)
{
- if (pipe_obj->background_changed)
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_BACKGROUND, pipe_obj->background);
-
- if (pipe_obj->color_mgmt_changed) {
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_DEGAMMA_LUT, pipe_obj->degamma_blob);
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_CTM, pipe_obj->ctm_blob);
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_GAMMA_LUT, pipe_obj->gamma_blob);
- }
-
- if (pipe_obj->mode_changed) {
- igt_output_t *output = igt_pipe_get_output(pipe_obj);
-
- if (!output) {
- igt_pipe_replace_blob(pipe_obj, &pipe_obj->mode_blob, NULL, 0);
-
- LOG(pipe_obj->display, "%s: Setting NULL mode\n",
- kmstest_pipe_name(pipe_obj->pipe));
- } else {
- drmModeModeInfo *mode = igt_output_get_mode(output);
+ int i;
- igt_pipe_replace_blob(pipe_obj, &pipe_obj->mode_blob, mode, sizeof(*mode));
+ for (i = 0; i < IGT_NUM_CRTC_PROPS; i++) {
+ if (!igt_pipe_obj_is_prop_changed(pipe_obj, i))
+ continue;
- LOG(pipe_obj->display, "%s: Setting mode %s from %s\n",
- kmstest_pipe_name(pipe_obj->pipe),
- mode->name, igt_output_name(output));
- }
+ igt_debug("Pipe %s: Setting property \"%s\" to 0x%"PRIx64"/%"PRIi64"\n",
+ kmstest_pipe_name(pipe_obj->pipe), igt_crtc_prop_names[i],
+ pipe_obj->values[i], pipe_obj->values[i]);
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_MODE_ID, pipe_obj->mode_blob);
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_ACTIVE, !!output);
+ igt_assert_lt(0, drmModeAtomicAddProperty(req, pipe_obj->crtc_id, pipe_obj->props[i], pipe_obj->values[i]));
}
if (pipe_obj->out_fence_fd != -1) {
close(pipe_obj->out_fence_fd);
pipe_obj->out_fence_fd = -1;
}
-
- if (pipe_obj->out_fence_requested)
- {
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_OUT_FENCE_PTR,
- (uint64_t)(uintptr_t) &pipe_obj->out_fence_fd);
- }
-
- /*
- * TODO: Add all crtc level properties here
- */
}
/*
@@ -2550,15 +2508,21 @@ display_commit_changed(igt_display_t *display, enum igt_commit_style s)
igt_pipe_t *pipe_obj = &display->pipes[pipe];
igt_plane_t *plane;
- pipe_obj->color_mgmt_changed = false;
- pipe_obj->background_changed = false;
+ if (s == COMMIT_ATOMIC) {
+ if (igt_pipe_obj_is_prop_changed(pipe_obj, IGT_CRTC_OUT_FENCE_PTR))
+ igt_assert(pipe_obj->out_fence_fd >= 0);
- if (s != COMMIT_UNIVERSAL)
- pipe_obj->mode_changed = false;
-
- if (s == COMMIT_ATOMIC && pipe_obj->out_fence_requested) {
- pipe_obj->out_fence_requested = false;
- igt_assert(pipe_obj->out_fence_fd >= 0);
+ pipe_obj->changed = 0;
+ } else {
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_BACKGROUND);
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_CTM);
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_DEGAMMA_LUT);
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_GAMMA_LUT);
+
+ if (s != COMMIT_UNIVERSAL) {
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_ACTIVE);
+ }
}
for_each_plane_on_pipe(display, pipe, plane) {
@@ -2812,33 +2776,83 @@ void igt_output_override_mode(igt_output_t *output, drmModeModeInfo *mode)
output->use_override_mode = !!mode;
- if (pipe)
- pipe->mode_changed = true;
+ if (pipe) {
+ if (output->display->is_atomic)
+ igt_pipe_replace_blob(pipe, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(*mode));
+ else
+ igt_pipe_obj_set_prop_changed(pipe, IGT_CRTC_MODE_ID);
+ }
}
void igt_output_set_pipe(igt_output_t *output, enum pipe pipe)
{
igt_display_t *display = output->display;
- igt_pipe_t *old_pipe;
+ igt_pipe_t *old_pipe = NULL, *pipe_obj = NULL;;
igt_assert(output->name);
- if (output->pending_pipe != PIPE_NONE) {
+ if (output->pending_pipe != PIPE_NONE)
old_pipe = igt_output_get_driving_pipe(output);
- old_pipe->mode_changed = true;
- }
+ if (pipe != PIPE_NONE)
+ pipe_obj = &display->pipes[pipe];
LOG(display, "%s: set_pipe(%s)\n", igt_output_name(output),
kmstest_pipe_name(pipe));
output->pending_pipe = pipe;
- if (pipe != PIPE_NONE)
- display->pipes[pipe].mode_changed = true;
+ if (old_pipe) {
+ igt_output_t *old_output;
+
+ old_output = igt_pipe_get_output(old_pipe);
+ if (!old_output) {
+ if (display->is_atomic)
+ igt_pipe_replace_blob(old_pipe, IGT_CRTC_MODE_ID, NULL, 0);
+ else
+ igt_pipe_obj_set_prop_changed(old_pipe, IGT_CRTC_MODE_ID);
+
+ igt_pipe_obj_set_prop_value(old_pipe, IGT_CRTC_ACTIVE, 0);
+ }
+ }
igt_output_set_prop_value(output, IGT_CONNECTOR_CRTC_ID, pipe == PIPE_NONE ? 0 : display->pipes[pipe].crtc_id);
igt_output_refresh(output);
+
+ if (pipe_obj) {
+ if (display->is_atomic)
+ igt_pipe_replace_blob(pipe_obj, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(drmModeModeInfo));
+ else
+ igt_pipe_obj_set_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
+
+ igt_pipe_obj_set_prop_value(pipe_obj, IGT_CRTC_ACTIVE, 1);
+ }
+}
+
+/*
+ * igt_pipe_refresh:
+ * @display: a pointer to an #igt_display_t structure
+ * @pipe: Pipe to refresh
+ * @force: Should be set to true if mode_blob is no longer considered
+ * to be valid, for example after doing an atomic commit during fork or closing display fd.
+ *
+ * Requests the pipe to be part of the state on next update.
+ * This is useful when state may have been out of sync after
+ * a fork, or we just want to be sure the pipe is included
+ * in the next commit.
+ */
+void igt_pipe_refresh(igt_display_t *display, enum pipe pipe, bool force)
+{
+ igt_pipe_t *pipe_obj = &display->pipes[pipe];
+
+ if (force && display->is_atomic) {
+ igt_output_t *output = igt_pipe_get_output(pipe_obj);
+
+ pipe_obj->values[IGT_CRTC_MODE_ID] = 0;
+ if (output)
+ igt_pipe_replace_blob(pipe_obj, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(drmModeModeInfo));
+ } else
+ igt_pipe_obj_set_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
}
void igt_output_set_scaling_mode(igt_output_t *output, uint64_t scaling_mode)
@@ -3046,28 +3060,25 @@ void igt_plane_set_rotation(igt_plane_t *plane, igt_rotation_t rotation)
*/
void igt_pipe_request_out_fence(igt_pipe_t *pipe)
{
- pipe->out_fence_requested = true;
+ igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_OUT_FENCE_PTR, (ptrdiff_t)&pipe->out_fence_fd);
}
void
igt_pipe_set_degamma_lut(igt_pipe_t *pipe, void *ptr, size_t length)
{
- igt_pipe_replace_blob(pipe, &pipe->degamma_blob, ptr, length);
- pipe->color_mgmt_changed = 1;
+ igt_pipe_replace_blob(pipe, IGT_CRTC_DEGAMMA_LUT, ptr, length);
}
void
igt_pipe_set_ctm_matrix(igt_pipe_t *pipe, void *ptr, size_t length)
{
- igt_pipe_replace_blob(pipe, &pipe->ctm_blob, ptr, length);
- pipe->color_mgmt_changed = 1;
+ igt_pipe_replace_blob(pipe, IGT_CRTC_CTM, ptr, length);
}
void
igt_pipe_set_gamma_lut(igt_pipe_t *pipe, void *ptr, size_t length)
{
- igt_pipe_replace_blob(pipe, &pipe->gamma_blob, ptr, length);
- pipe->color_mgmt_changed = 1;
+ igt_pipe_replace_blob(pipe, IGT_CRTC_GAMMA_LUT, ptr, length);
}
/**
@@ -3088,9 +3099,7 @@ void igt_crtc_set_background(igt_pipe_t *pipe, uint64_t background)
kmstest_pipe_name(pipe->pipe),
pipe->pipe, background);
- pipe->background = background;
-
- pipe->background_changed = true;
+ igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_BACKGROUND, background);
}
void igt_wait_for_vblank_count(int drm_fd, enum pipe pipe, int count)
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index f87f8be31421..b53127ffef5f 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -313,27 +313,13 @@ struct igt_pipe {
int plane_primary;
igt_plane_t *planes;
- uint32_t atomic_props_crtc[IGT_NUM_CRTC_PROPS];
-
- uint64_t background; /* Background color MSB BGR 16bpc LSB */
- uint32_t background_changed : 1;
- uint32_t background_property;
-
- uint64_t degamma_blob;
- uint32_t degamma_property;
- uint64_t ctm_blob;
- uint32_t ctm_property;
- uint64_t gamma_blob;
- uint32_t gamma_property;
- uint32_t color_mgmt_changed : 1;
+ uint64_t changed;
+ uint32_t props[IGT_NUM_CRTC_PROPS];
+ uint64_t values[IGT_NUM_CRTC_PROPS];
uint32_t crtc_id;
- uint64_t mode_blob;
- bool mode_changed;
-
int32_t out_fence_fd;
- bool out_fence_requested;
};
typedef struct {
@@ -527,17 +513,6 @@ static inline bool igt_output_is_connected(igt_output_t *output)
igt_plane_set_prop_changed(plane, prop); \
} while (0)
-/**
- * igt_atomic_populate_crtc_req:
- * @req: A pointer to drmModeAtomicReq
- * @pipe: A pointer igt_pipe_t
- * @prop: one of igt_atomic_crtc_properties
- * @value: the value to add
- */
-#define igt_atomic_populate_crtc_req(req, pipe, prop, value) \
- igt_assert_lt(0, drmModeAtomicAddProperty(req, pipe->crtc_id,\
- pipe->atomic_props_crtc[prop], value))
-
#define igt_output_is_prop_changed(output, prop) \
(!!((output)->changed & (1 << (prop))))
#define igt_output_set_prop_changed(output, prop) \
@@ -552,26 +527,34 @@ static inline bool igt_output_is_connected(igt_output_t *output)
igt_output_set_prop_changed(output, prop); \
} while (0)
-/*
- * igt_pipe_refresh:
- * @display: a pointer to an #igt_display_t structure
- * @pipe: Pipe to refresh
- * @force: Should be set to true if mode_blob is no longer considered
- * to be valid, for example after doing an atomic commit during fork or closing display fd.
- *
- * Requests the pipe to be part of the state on next update.
- * This is useful when state may have been out of sync after
- * a fork, or we just want to be sure the pipe is included
- * in the next commit.
- */
-static inline void
-igt_pipe_refresh(igt_display_t *display, enum pipe pipe, bool force)
-{
- if (force)
- display->pipes[pipe].mode_blob = 0;
+#define igt_pipe_obj_is_prop_changed(pipe_obj, prop) \
+ (!!((pipe_obj)->changed & (1 << (prop))))
- display->pipes[pipe].mode_changed = true;
-}
+#define igt_pipe_is_prop_changed(display, pipe, prop) \
+ igt_pipe_obj_is_prop_changed(&(display)->pipes[(pipe)], prop)
+
+#define igt_pipe_obj_set_prop_changed(pipe_obj, prop) \
+ (pipe_obj)->changed |= 1 << (prop)
+
+#define igt_pipe_set_prop_changed(display, pipe, prop) \
+ igt_pipe_obj_set_prop_changed(&(display)->pipes[(pipe)], prop)
+
+#define igt_pipe_obj_clear_prop_changed(pipe_obj, prop) \
+ (pipe_obj)->changed &= ~(1 << (prop))
+
+#define igt_pipe_clear_prop_changed(display, pipe, prop) \
+ igt_pipe_obj_clear_prop_changed(&(display)->pipes[(pipe)], prop)
+
+#define igt_pipe_obj_set_prop_value(pipe_obj, prop, value) \
+ do { \
+ (pipe_obj)->values[prop] = (value); \
+ igt_pipe_obj_set_prop_changed(pipe_obj, prop); \
+ } while (0)
+
+#define igt_pipe_set_prop_value(display, pipe, prop, value) \
+ igt_pipe_obj_set_prop_value(&(display)->pipes[(pipe)], prop, value)
+
+void igt_pipe_refresh(igt_display_t *display, enum pipe pipe, bool force);
void igt_enable_connectors(void);
void igt_reset_connectors(void);
diff --git a/tests/kms_atomic_interruptible.c b/tests/kms_atomic_interruptible.c
index 5570854390ea..1058dcce71b5 100644
--- a/tests/kms_atomic_interruptible.c
+++ b/tests/kms_atomic_interruptible.c
@@ -156,8 +156,8 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
uint32_t count_props[3] = { 2, 1, 6 };
uint32_t props[] = {
/* crtc: 2 props */
- plane->pipe->atomic_props_crtc[IGT_CRTC_MODE_ID],
- plane->pipe->atomic_props_crtc[IGT_CRTC_ACTIVE],
+ plane->pipe->props[IGT_CRTC_MODE_ID],
+ plane->pipe->props[IGT_CRTC_ACTIVE],
/* connector: 1 prop */
output->props[IGT_CONNECTOR_CRTC_ID],
/* plane: remainder props */
@@ -253,6 +253,10 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
igt_waitchildren();
+ /* The mode is unset by the forked helper, force a refresh here */
+ if (test == test_legacy_modeset || test_atomic_modeset)
+ igt_pipe_refresh(display, pipe, true);
+
igt_plane_set_fb(plane, NULL);
igt_plane_set_fb(primary, NULL);
igt_output_set_pipe(output, PIPE_NONE);
diff --git a/tests/kms_atomic_transition.c b/tests/kms_atomic_transition.c
index 2ae75f2d6630..7ddb65cea183 100644
--- a/tests/kms_atomic_transition.c
+++ b/tests/kms_atomic_transition.c
@@ -633,7 +633,7 @@ static unsigned set_combinations(igt_display_t *display, unsigned mask, struct i
drmModeModeInfo *mode = NULL;
if (!(mask & (1 << pipe))) {
- if (display->pipes[pipe].mode_blob) {
+ if (igt_pipe_is_prop_changed(display, pipe, IGT_CRTC_ACTIVE)) {
event_mask |= 1 << pipe;
igt_plane_set_fb(plane, NULL);
}
diff --git a/tests/kms_crtc_background_color.c b/tests/kms_crtc_background_color.c
index e12e163449f8..659a30b90219 100644
--- a/tests/kms_crtc_background_color.c
+++ b/tests/kms_crtc_background_color.c
@@ -137,7 +137,7 @@ static void test_crtc_background(data_t *data)
igt_output_set_pipe(output, pipe);
plane = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
- igt_require(plane->pipe->background_property);
+ igt_require(plane->pipe->props[IGT_CRTC_BACKGROUND]);
prepare_crtc(data, output, pipe, plane, 1, PURPLE, BLACK64);
--
2.14.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 25+ messages in thread
* ✗ Fi.CI.BAT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev6)
2017-09-27 18:16 [PATCH i-g-t v2 0/8] lib/igt_kms: Convert properties to be more atomic-like Maarten Lankhorst
` (16 preceding siblings ...)
2017-09-28 16:09 ` ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev2) Patchwork
@ 2017-09-29 6:58 ` Patchwork
17 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2017-09-29 6:58 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
== Series Details ==
Series: lib/igt_kms: Convert properties to be more atomic-like. (rev6)
URL : https://patchwork.freedesktop.org/series/30903/
State : failure
== Summary ==
IGT patchset build failed on latest successful build
47ae1f8cfd2d4a826331e270b33440e0bf3a6aa9 tests/gem_workarounds: Skip write only registers
make all-recursive
Making all in lib
make all-recursive
Making all in .
Making all in tests
make[4]: Nothing to be done for 'all'.
Making all in man
make[2]: Nothing to be done for 'all'.
Making all in tools
Making all in null_state_gen
make[3]: Nothing to be done for 'all'.
Making all in registers
make[3]: Nothing to be done for 'all'.
make[3]: Nothing to be done for 'all-am'.
Making all in scripts
make[2]: Nothing to be done for 'all'.
Making all in benchmarks
make[2]: Nothing to be done for 'all'.
Making all in tests
Making all in intel-ci
make[3]: Nothing to be done for 'all'.
CCLD gem_bad_batch
CCLD gem_hang
CCLD gem_bad_blit
CCLD gem_bad_address
CCLD gem_non_secure_batch
CCLD gem_stress
CCLD core_auth
CCLD core_get_client_auth
CCLD core_getclient
CCLD core_getstats
CCLD core_getversion
CCLD core_prop_blob
CCLD core_setmaster_vs_auth
CCLD debugfs_test
CCLD drm_import_export
CCLD drm_mm
CCLD drm_read
CCLD drm_vma_limiter
CCLD drm_vma_limiter_cached
CCLD drm_vma_limiter_cpu
CCLD drm_vma_limiter_gtt
CCLD drv_getparams_basic
CCLD drv_hangman
CCLD drv_missed_irq
CCLD drv_module_reload
CCLD drv_selftest
CCLD drv_suspend
CCLD gem_bad_length
CCLD gem_bad_reloc
CCLD gem_basic
CCLD gem_busy
CCLD gem_caching
CCLD gem_close
CCLD gem_close_race
CCLD gem_concurrent_blit
CCLD gem_cpu_reloc
CCLD gem_create
CCLD gem_cs_prefetch
CCLD gem_cs_tlb
CCLD gem_ctx_bad_destroy
CCLD gem_ctx_bad_exec
CCLD gem_ctx_basic
CCLD gem_ctx_create
CCLD gem_ctx_exec
CCLD gem_ctx_param
CCLD gem_ctx_switch
CCLD gem_ctx_thrash
CCLD gem_double_irq_loop
CCLD gem_eio
CCLD gem_evict_alignment
CCLD gem_evict_everything
CCLD gem_exec_alignment
CCLD gem_exec_async
CCLD gem_exec_await
CCLD gem_exec_bad_domains
CCLD gem_exec_basic
CCLD gem_exec_big
CCLD gem_exec_blt
CCLD gem_exec_capture
CCLD gem_exec_create
CCLD gem_exec_faulting_reloc
CCLD gem_exec_fence
CCLD gem_exec_flush
CCLD gem_exec_gttfill
CCLD gem_exec_latency
CCLD gem_exec_lut_handle
CCLD gem_exec_nop
CCLD gem_exec_parallel
CCLD gem_exec_params
CCLD gem_exec_parse
CCLD gem_exec_reloc
CCLD gem_exec_reuse
CCLD gem_exec_schedule
CCLD gem_exec_store
CCLD gem_exec_suspend
CCLD gem_exec_whisper
CCLD gem_fd_exhaustion
CCLD gem_fence_thrash
CCLD gem_fence_upload
CCLD gem_fenced_exec_thrash
CCLD gem_flink_basic
CCLD gem_flink_race
CCLD gem_gpgpu_fill
CCLD gem_gtt_cpu_tlb
CCLD gem_gtt_hog
CCLD gem_gtt_speed
CCLD gem_hangcheck_forcewake
CCLD gem_largeobject
CCLD gem_linear_blits
CCLD gem_lut_handle
CCLD gem_madvise
CCLD gem_media_fill
CCLD gem_mmap
CCLD gem_mmap_gtt
CCLD gem_mmap_offset_exhaustion
CCLD gem_mmap_wc
CCLD gem_mocs_settings
CCLD gem_partial_pwrite_pread
CCLD gem_persistent_relocs
CCLD gem_pin
CCLD gem_pipe_control_store_loop
CCLD gem_ppgtt
CCLD gem_pread
CCLD gem_pread_after_blit
CCLD gem_pwrite
CCLD gem_pwrite_pread
CCLD gem_pwrite_snooped
CCLD gem_read_read_speed
CCLD gem_readwrite
CCLD gem_reg_read
CCLD gem_reloc_overflow
CCLD gem_reloc_vs_gpu
CCLD gem_render_copy
CCLD gem_render_copy_redux
CCLD gem_render_linear_blits
CCLD gem_render_tiled_blits
CCLD gem_request_retire
CCLD gem_reset_stats
CCLD gem_ring_sync_copy
CCLD gem_ring_sync_loop
CCLD gem_ringfill
CCLD gem_seqno_wrap
CCLD gem_set_tiling_vs_blt
CCLD gem_set_tiling_vs_gtt
CCLD gem_set_tiling_vs_pwrite
CCLD gem_shrink
CCLD gem_softpin
CCLD gem_spin_batch
CCLD gem_stolen
CCLD gem_storedw_batches_loop
CCLD gem_storedw_loop
CCLD gem_streaming_writes
CCLD gem_sync
CCLD gem_threaded_access_tiled
CCLD gem_tiled_blits
CCLD gem_tiled_fence_blits
CCLD gem_tiled_partial_pwrite_pread
CCLD gem_tiled_pread_basic
CCLD gem_tiled_pread_pwrite
CCLD gem_tiled_swapping
CCLD gem_tiled_wb
CCLD gem_tiled_wc
CCLD gem_tiling_max_stride
CCLD gem_unfence_active_buffers
CCLD gem_unref_active_buffers
CCLD gem_userptr_blits
CCLD gem_wait
CCLD gem_workarounds
CCLD gem_write_read_ring_switch
CCLD gen3_mixed_blits
CCLD gen3_render_linear_blits
CCLD gen3_render_mixed_blits
CCLD gen3_render_tiledx_blits
CCLD gen3_render_tiledy_blits
CCLD gen7_forcewake_mt
CCLD gvt_basic
CCLD kms_3d
CCLD kms_addfb_basic
CCLD kms_atomic
CC kms_atomic_interruptible.o
kms_atomic_interruptible.c: In function ‘run_plane_test’:
kms_atomic_interruptible.c:257:6: error: ‘test’ undeclared (first use in this function)
if (test == test_legacy_modeset || test_atomic_modeset)
^~~~
kms_atomic_interruptible.c:257:6: note: each undeclared identifier is reported only once for each function it appears in
Makefile:3952: recipe for target 'kms_atomic_interruptible.o' failed
make[3]: *** [kms_atomic_interruptible.o] Error 1
Makefile:4437: recipe for target 'all-recursive' failed
make[2]: *** [all-recursive] Error 1
Makefile:528: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
Makefile:460: recipe for target 'all' failed
make: *** [all] Error 2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH i-g-t] lib/igt_kms: Rework pipe properties to be more atomic, v4.1.
2017-09-28 11:01 ` [PATCH i-g-t v2 5/8] lib/igt_kms: Rework plane properties to be more atomic, v4 Maarten Lankhorst
@ 2017-09-29 9:52 ` Maarten Lankhorst
0 siblings, 0 replies; 25+ messages in thread
From: Maarten Lankhorst @ 2017-09-29 9:52 UTC (permalink / raw)
To: intel-gfx
In the future I want to allow tests to commit more properties,
but for this to work I have to fix all properties to work better
with atomic commit. Instead of special casing each
property make a bitmask for all property changed flags, and try to
commit all properties.
This has been the most involved one, since legacy pipe commit still
handles a lot of the properties differently from the rest.
Changes since v1:
- Dump all changed properties on commit.
- Fix bug in igt_pipe_refresh().
Changes since v2:
- Set pipe ACTIVE property changed flag on init.
Changes since v3:
- Add a missing igt_pipe_refresh() to kms_atomic_interruptible.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
Actually compiling now!
lib/igt_kms.c | 217 ++++++++++++++++++++------------------
lib/igt_kms.h | 77 ++++++--------
tests/kms_atomic_interruptible.c | 8 +-
tests/kms_atomic_transition.c | 2 +-
tests/kms_crtc_background_color.c | 2 +-
5 files changed, 151 insertions(+), 155 deletions(-)
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 6e0052ebe7a7..a81d7998433a 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -259,8 +259,8 @@ igt_atomic_fill_connector_props(igt_display_t *display, igt_output_t *output,
}
static void
-igt_atomic_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
- int num_crtc_props, const char **crtc_prop_names)
+igt_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
+ int num_crtc_props, const char **crtc_prop_names)
{
drmModeObjectPropertiesPtr props;
int i, j, fd;
@@ -278,7 +278,7 @@ igt_atomic_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
if (strcmp(prop->name, crtc_prop_names[j]) != 0)
continue;
- pipe->atomic_props_crtc[j] = props->props[i];
+ pipe->props[j] = props->props[i];
break;
}
@@ -1690,7 +1690,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
int p = 1;
int j, type;
uint8_t last_plane = 0, n_planes = 0;
- uint64_t prop_value;
pipe->crtc_id = resources->crtcs[i];
pipe->display = display;
@@ -1700,29 +1699,16 @@ void igt_display_init(igt_display_t *display, int drm_fd)
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",
- &pipe->background_property,
- &prop_value,
+ "background_color", NULL,
+ &pipe->values[IGT_CRTC_BACKGROUND],
NULL);
- pipe->background = (uint32_t)prop_value;
- get_crtc_property(display->drm_fd, pipe->crtc_id,
- "DEGAMMA_LUT",
- &pipe->degamma_property,
- NULL,
- NULL);
- get_crtc_property(display->drm_fd, pipe->crtc_id,
- "CTM",
- &pipe->ctm_property,
- NULL,
- NULL);
- get_crtc_property(display->drm_fd, pipe->crtc_id,
- "GAMMA_LUT",
- &pipe->gamma_property,
- NULL,
- NULL);
-
- igt_atomic_fill_pipe_props(display, pipe, IGT_NUM_CRTC_PROPS, igt_crtc_prop_names);
/* count number of valid planes */
for (j = 0; j < plane_resources->count_planes; j++) {
@@ -1805,8 +1791,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
igt_assert_eq(p, n_planes);
pipe->n_planes = n_planes;
-
- pipe->mode_changed = true;
}
/*
@@ -2283,7 +2267,7 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
if (!igt_plane_is_prop_changed(primary, IGT_PLANE_FB_ID) &&
!(primary->changed & IGT_PLANE_COORD_CHANGED_MASK) &&
- !primary->pipe->mode_changed)
+ !igt_pipe_obj_is_prop_changed(primary->pipe, IGT_CRTC_MODE_ID))
return 0;
crtc_id = pipe->crtc_id;
@@ -2352,6 +2336,16 @@ static int igt_plane_commit(igt_plane_t *plane,
}
}
+static bool is_atomic_prop(enum igt_atomic_crtc_properties prop)
+{
+ if (prop == IGT_CRTC_MODE_ID ||
+ prop == IGT_CRTC_ACTIVE ||
+ prop == IGT_CRTC_OUT_FENCE_PTR)
+ return true;
+
+ return false;
+}
+
/*
* Commit all plane changes to an output. Note that if @s is COMMIT_LEGACY,
* enabling/disabling the primary plane will also enable/disable the CRTC.
@@ -2369,19 +2363,9 @@ static int igt_pipe_commit(igt_pipe_t *pipe,
int i;
int ret;
- if (pipe->background_changed) {
- igt_crtc_set_property(pipe, pipe->background_property,
- pipe->background);
- }
-
- if (pipe->color_mgmt_changed) {
- igt_crtc_set_property(pipe, pipe->degamma_property,
- pipe->degamma_blob);
- igt_crtc_set_property(pipe, pipe->ctm_property,
- pipe->ctm_blob);
- igt_crtc_set_property(pipe, pipe->gamma_property,
- pipe->gamma_blob);
- }
+ for (i = 0; i < IGT_NUM_CRTC_PROPS; i++)
+ if (!is_atomic_prop(i))
+ igt_crtc_set_property(pipe, pipe->props[i], pipe->values[i]);
for (i = 0; i < pipe->n_planes; i++) {
igt_plane_t *plane = &pipe->planes[i];
@@ -2394,9 +2378,10 @@ static int igt_pipe_commit(igt_pipe_t *pipe,
}
static void
-igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length)
+igt_pipe_replace_blob(igt_pipe_t *pipe, enum igt_atomic_crtc_properties prop, void *ptr, size_t length)
{
igt_display_t *display = pipe->display;
+ uint64_t *blob = &pipe->values[prop];
uint32_t blob_id = 0;
if (*blob != 0)
@@ -2408,6 +2393,7 @@ igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length
ptr, length, &blob_id) == 0);
*blob = blob_id;
+ igt_pipe_obj_set_prop_changed(pipe, prop);
}
/*
@@ -2415,51 +2401,23 @@ igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length
*/
static void igt_atomic_prepare_crtc_commit(igt_pipe_t *pipe_obj, drmModeAtomicReq *req)
{
- if (pipe_obj->background_changed)
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_BACKGROUND, pipe_obj->background);
-
- if (pipe_obj->color_mgmt_changed) {
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_DEGAMMA_LUT, pipe_obj->degamma_blob);
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_CTM, pipe_obj->ctm_blob);
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_GAMMA_LUT, pipe_obj->gamma_blob);
- }
-
- if (pipe_obj->mode_changed) {
- igt_output_t *output = igt_pipe_get_output(pipe_obj);
-
- if (!output) {
- igt_pipe_replace_blob(pipe_obj, &pipe_obj->mode_blob, NULL, 0);
-
- LOG(pipe_obj->display, "%s: Setting NULL mode\n",
- kmstest_pipe_name(pipe_obj->pipe));
- } else {
- drmModeModeInfo *mode = igt_output_get_mode(output);
+ int i;
- igt_pipe_replace_blob(pipe_obj, &pipe_obj->mode_blob, mode, sizeof(*mode));
+ for (i = 0; i < IGT_NUM_CRTC_PROPS; i++) {
+ if (!igt_pipe_obj_is_prop_changed(pipe_obj, i))
+ continue;
- LOG(pipe_obj->display, "%s: Setting mode %s from %s\n",
- kmstest_pipe_name(pipe_obj->pipe),
- mode->name, igt_output_name(output));
- }
+ igt_debug("Pipe %s: Setting property \"%s\" to 0x%"PRIx64"/%"PRIi64"\n",
+ kmstest_pipe_name(pipe_obj->pipe), igt_crtc_prop_names[i],
+ pipe_obj->values[i], pipe_obj->values[i]);
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_MODE_ID, pipe_obj->mode_blob);
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_ACTIVE, !!output);
+ igt_assert_lt(0, drmModeAtomicAddProperty(req, pipe_obj->crtc_id, pipe_obj->props[i], pipe_obj->values[i]));
}
if (pipe_obj->out_fence_fd != -1) {
close(pipe_obj->out_fence_fd);
pipe_obj->out_fence_fd = -1;
}
-
- if (pipe_obj->out_fence_requested)
- {
- igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_OUT_FENCE_PTR,
- (uint64_t)(uintptr_t) &pipe_obj->out_fence_fd);
- }
-
- /*
- * TODO: Add all crtc level properties here
- */
}
/*
@@ -2550,15 +2508,21 @@ display_commit_changed(igt_display_t *display, enum igt_commit_style s)
igt_pipe_t *pipe_obj = &display->pipes[pipe];
igt_plane_t *plane;
- pipe_obj->color_mgmt_changed = false;
- pipe_obj->background_changed = false;
+ if (s == COMMIT_ATOMIC) {
+ if (igt_pipe_obj_is_prop_changed(pipe_obj, IGT_CRTC_OUT_FENCE_PTR))
+ igt_assert(pipe_obj->out_fence_fd >= 0);
- if (s != COMMIT_UNIVERSAL)
- pipe_obj->mode_changed = false;
-
- if (s == COMMIT_ATOMIC && pipe_obj->out_fence_requested) {
- pipe_obj->out_fence_requested = false;
- igt_assert(pipe_obj->out_fence_fd >= 0);
+ pipe_obj->changed = 0;
+ } else {
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_BACKGROUND);
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_CTM);
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_DEGAMMA_LUT);
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_GAMMA_LUT);
+
+ if (s != COMMIT_UNIVERSAL) {
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
+ igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_ACTIVE);
+ }
}
for_each_plane_on_pipe(display, pipe, plane) {
@@ -2812,33 +2776,83 @@ void igt_output_override_mode(igt_output_t *output, drmModeModeInfo *mode)
output->use_override_mode = !!mode;
- if (pipe)
- pipe->mode_changed = true;
+ if (pipe) {
+ if (output->display->is_atomic)
+ igt_pipe_replace_blob(pipe, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(*mode));
+ else
+ igt_pipe_obj_set_prop_changed(pipe, IGT_CRTC_MODE_ID);
+ }
}
void igt_output_set_pipe(igt_output_t *output, enum pipe pipe)
{
igt_display_t *display = output->display;
- igt_pipe_t *old_pipe;
+ igt_pipe_t *old_pipe = NULL, *pipe_obj = NULL;;
igt_assert(output->name);
- if (output->pending_pipe != PIPE_NONE) {
+ if (output->pending_pipe != PIPE_NONE)
old_pipe = igt_output_get_driving_pipe(output);
- old_pipe->mode_changed = true;
- }
+ if (pipe != PIPE_NONE)
+ pipe_obj = &display->pipes[pipe];
LOG(display, "%s: set_pipe(%s)\n", igt_output_name(output),
kmstest_pipe_name(pipe));
output->pending_pipe = pipe;
- if (pipe != PIPE_NONE)
- display->pipes[pipe].mode_changed = true;
+ if (old_pipe) {
+ igt_output_t *old_output;
+
+ old_output = igt_pipe_get_output(old_pipe);
+ if (!old_output) {
+ if (display->is_atomic)
+ igt_pipe_replace_blob(old_pipe, IGT_CRTC_MODE_ID, NULL, 0);
+ else
+ igt_pipe_obj_set_prop_changed(old_pipe, IGT_CRTC_MODE_ID);
+
+ igt_pipe_obj_set_prop_value(old_pipe, IGT_CRTC_ACTIVE, 0);
+ }
+ }
igt_output_set_prop_value(output, IGT_CONNECTOR_CRTC_ID, pipe == PIPE_NONE ? 0 : display->pipes[pipe].crtc_id);
igt_output_refresh(output);
+
+ if (pipe_obj) {
+ if (display->is_atomic)
+ igt_pipe_replace_blob(pipe_obj, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(drmModeModeInfo));
+ else
+ igt_pipe_obj_set_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
+
+ igt_pipe_obj_set_prop_value(pipe_obj, IGT_CRTC_ACTIVE, 1);
+ }
+}
+
+/*
+ * igt_pipe_refresh:
+ * @display: a pointer to an #igt_display_t structure
+ * @pipe: Pipe to refresh
+ * @force: Should be set to true if mode_blob is no longer considered
+ * to be valid, for example after doing an atomic commit during fork or closing display fd.
+ *
+ * Requests the pipe to be part of the state on next update.
+ * This is useful when state may have been out of sync after
+ * a fork, or we just want to be sure the pipe is included
+ * in the next commit.
+ */
+void igt_pipe_refresh(igt_display_t *display, enum pipe pipe, bool force)
+{
+ igt_pipe_t *pipe_obj = &display->pipes[pipe];
+
+ if (force && display->is_atomic) {
+ igt_output_t *output = igt_pipe_get_output(pipe_obj);
+
+ pipe_obj->values[IGT_CRTC_MODE_ID] = 0;
+ if (output)
+ igt_pipe_replace_blob(pipe_obj, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(drmModeModeInfo));
+ } else
+ igt_pipe_obj_set_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
}
void igt_output_set_scaling_mode(igt_output_t *output, uint64_t scaling_mode)
@@ -3046,28 +3060,25 @@ void igt_plane_set_rotation(igt_plane_t *plane, igt_rotation_t rotation)
*/
void igt_pipe_request_out_fence(igt_pipe_t *pipe)
{
- pipe->out_fence_requested = true;
+ igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_OUT_FENCE_PTR, (ptrdiff_t)&pipe->out_fence_fd);
}
void
igt_pipe_set_degamma_lut(igt_pipe_t *pipe, void *ptr, size_t length)
{
- igt_pipe_replace_blob(pipe, &pipe->degamma_blob, ptr, length);
- pipe->color_mgmt_changed = 1;
+ igt_pipe_replace_blob(pipe, IGT_CRTC_DEGAMMA_LUT, ptr, length);
}
void
igt_pipe_set_ctm_matrix(igt_pipe_t *pipe, void *ptr, size_t length)
{
- igt_pipe_replace_blob(pipe, &pipe->ctm_blob, ptr, length);
- pipe->color_mgmt_changed = 1;
+ igt_pipe_replace_blob(pipe, IGT_CRTC_CTM, ptr, length);
}
void
igt_pipe_set_gamma_lut(igt_pipe_t *pipe, void *ptr, size_t length)
{
- igt_pipe_replace_blob(pipe, &pipe->gamma_blob, ptr, length);
- pipe->color_mgmt_changed = 1;
+ igt_pipe_replace_blob(pipe, IGT_CRTC_GAMMA_LUT, ptr, length);
}
/**
@@ -3088,9 +3099,7 @@ void igt_crtc_set_background(igt_pipe_t *pipe, uint64_t background)
kmstest_pipe_name(pipe->pipe),
pipe->pipe, background);
- pipe->background = background;
-
- pipe->background_changed = true;
+ igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_BACKGROUND, background);
}
void igt_wait_for_vblank_count(int drm_fd, enum pipe pipe, int count)
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index f87f8be31421..b53127ffef5f 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -313,27 +313,13 @@ struct igt_pipe {
int plane_primary;
igt_plane_t *planes;
- uint32_t atomic_props_crtc[IGT_NUM_CRTC_PROPS];
-
- uint64_t background; /* Background color MSB BGR 16bpc LSB */
- uint32_t background_changed : 1;
- uint32_t background_property;
-
- uint64_t degamma_blob;
- uint32_t degamma_property;
- uint64_t ctm_blob;
- uint32_t ctm_property;
- uint64_t gamma_blob;
- uint32_t gamma_property;
- uint32_t color_mgmt_changed : 1;
+ uint64_t changed;
+ uint32_t props[IGT_NUM_CRTC_PROPS];
+ uint64_t values[IGT_NUM_CRTC_PROPS];
uint32_t crtc_id;
- uint64_t mode_blob;
- bool mode_changed;
-
int32_t out_fence_fd;
- bool out_fence_requested;
};
typedef struct {
@@ -527,17 +513,6 @@ static inline bool igt_output_is_connected(igt_output_t *output)
igt_plane_set_prop_changed(plane, prop); \
} while (0)
-/**
- * igt_atomic_populate_crtc_req:
- * @req: A pointer to drmModeAtomicReq
- * @pipe: A pointer igt_pipe_t
- * @prop: one of igt_atomic_crtc_properties
- * @value: the value to add
- */
-#define igt_atomic_populate_crtc_req(req, pipe, prop, value) \
- igt_assert_lt(0, drmModeAtomicAddProperty(req, pipe->crtc_id,\
- pipe->atomic_props_crtc[prop], value))
-
#define igt_output_is_prop_changed(output, prop) \
(!!((output)->changed & (1 << (prop))))
#define igt_output_set_prop_changed(output, prop) \
@@ -552,26 +527,34 @@ static inline bool igt_output_is_connected(igt_output_t *output)
igt_output_set_prop_changed(output, prop); \
} while (0)
-/*
- * igt_pipe_refresh:
- * @display: a pointer to an #igt_display_t structure
- * @pipe: Pipe to refresh
- * @force: Should be set to true if mode_blob is no longer considered
- * to be valid, for example after doing an atomic commit during fork or closing display fd.
- *
- * Requests the pipe to be part of the state on next update.
- * This is useful when state may have been out of sync after
- * a fork, or we just want to be sure the pipe is included
- * in the next commit.
- */
-static inline void
-igt_pipe_refresh(igt_display_t *display, enum pipe pipe, bool force)
-{
- if (force)
- display->pipes[pipe].mode_blob = 0;
+#define igt_pipe_obj_is_prop_changed(pipe_obj, prop) \
+ (!!((pipe_obj)->changed & (1 << (prop))))
- display->pipes[pipe].mode_changed = true;
-}
+#define igt_pipe_is_prop_changed(display, pipe, prop) \
+ igt_pipe_obj_is_prop_changed(&(display)->pipes[(pipe)], prop)
+
+#define igt_pipe_obj_set_prop_changed(pipe_obj, prop) \
+ (pipe_obj)->changed |= 1 << (prop)
+
+#define igt_pipe_set_prop_changed(display, pipe, prop) \
+ igt_pipe_obj_set_prop_changed(&(display)->pipes[(pipe)], prop)
+
+#define igt_pipe_obj_clear_prop_changed(pipe_obj, prop) \
+ (pipe_obj)->changed &= ~(1 << (prop))
+
+#define igt_pipe_clear_prop_changed(display, pipe, prop) \
+ igt_pipe_obj_clear_prop_changed(&(display)->pipes[(pipe)], prop)
+
+#define igt_pipe_obj_set_prop_value(pipe_obj, prop, value) \
+ do { \
+ (pipe_obj)->values[prop] = (value); \
+ igt_pipe_obj_set_prop_changed(pipe_obj, prop); \
+ } while (0)
+
+#define igt_pipe_set_prop_value(display, pipe, prop, value) \
+ igt_pipe_obj_set_prop_value(&(display)->pipes[(pipe)], prop, value)
+
+void igt_pipe_refresh(igt_display_t *display, enum pipe pipe, bool force);
void igt_enable_connectors(void);
void igt_reset_connectors(void);
diff --git a/tests/kms_atomic_interruptible.c b/tests/kms_atomic_interruptible.c
index 5570854390ea..0270c8f870bf 100644
--- a/tests/kms_atomic_interruptible.c
+++ b/tests/kms_atomic_interruptible.c
@@ -156,8 +156,8 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
uint32_t count_props[3] = { 2, 1, 6 };
uint32_t props[] = {
/* crtc: 2 props */
- plane->pipe->atomic_props_crtc[IGT_CRTC_MODE_ID],
- plane->pipe->atomic_props_crtc[IGT_CRTC_ACTIVE],
+ plane->pipe->props[IGT_CRTC_MODE_ID],
+ plane->pipe->props[IGT_CRTC_ACTIVE],
/* connector: 1 prop */
output->props[IGT_CONNECTOR_CRTC_ID],
/* plane: remainder props */
@@ -253,6 +253,10 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
igt_waitchildren();
+ /* The mode is unset by the forked helper, force a refresh here */
+ if (test_type == test_legacy_modeset || test_type == test_atomic_modeset)
+ igt_pipe_refresh(display, pipe, true);
+
igt_plane_set_fb(plane, NULL);
igt_plane_set_fb(primary, NULL);
igt_output_set_pipe(output, PIPE_NONE);
diff --git a/tests/kms_atomic_transition.c b/tests/kms_atomic_transition.c
index 2ae75f2d6630..7ddb65cea183 100644
--- a/tests/kms_atomic_transition.c
+++ b/tests/kms_atomic_transition.c
@@ -633,7 +633,7 @@ static unsigned set_combinations(igt_display_t *display, unsigned mask, struct i
drmModeModeInfo *mode = NULL;
if (!(mask & (1 << pipe))) {
- if (display->pipes[pipe].mode_blob) {
+ if (igt_pipe_is_prop_changed(display, pipe, IGT_CRTC_ACTIVE)) {
event_mask |= 1 << pipe;
igt_plane_set_fb(plane, NULL);
}
diff --git a/tests/kms_crtc_background_color.c b/tests/kms_crtc_background_color.c
index e12e163449f8..659a30b90219 100644
--- a/tests/kms_crtc_background_color.c
+++ b/tests/kms_crtc_background_color.c
@@ -137,7 +137,7 @@ static void test_crtc_background(data_t *data)
igt_output_set_pipe(output, pipe);
plane = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
- igt_require(plane->pipe->background_property);
+ igt_require(plane->pipe->props[IGT_CRTC_BACKGROUND]);
prepare_crtc(data, output, pipe, plane, 1, PURPLE, BLACK64);
--
2.14.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [PATCH i-g-t v2 8/8] tests: Rename kms_pipe_color to kms_color
2017-09-27 18:16 ` [PATCH i-g-t v2 8/8] tests: Rename kms_pipe_color to kms_color Maarten Lankhorst
@ 2017-09-29 10:00 ` Mika Kahola
0 siblings, 0 replies; 25+ messages in thread
From: Mika Kahola @ 2017-09-29 10:00 UTC (permalink / raw)
To: Maarten Lankhorst, intel-gfx
Name change is ok to help the work in the future.
On Wed, 2017-09-27 at 20:16 +0200, Maarten Lankhorst wrote:
> Rename kms_pipe_color to kms_color, and rename the invalid tests to
> pipe-invalid.
> To prepare for adding support for plane color management.
>
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: Mika Kahola <mika.kahola@intel.com>
> ---
> tests/Makefile.sources | 2 +-
> tests/{kms_pipe_color.c => kms_color.c} | 4 ++--
> 2 files changed, 3 insertions(+), 3 deletions(-)
> rename tests/{kms_pipe_color.c => kms_color.c} (99%)
>
> diff --git a/tests/Makefile.sources b/tests/Makefile.sources
> index 0adc28a014d2..c4d320ebc61b 100644
> --- a/tests/Makefile.sources
> +++ b/tests/Makefile.sources
> @@ -177,6 +177,7 @@ TESTS_progs = \
> kms_busy \
> kms_ccs \
> kms_chv_cursor_fail \
> + kms_color \
> kms_concurrent \
> kms_crtc_background_color \
> kms_cursor_crc \
> @@ -197,7 +198,6 @@ TESTS_progs = \
> kms_mmio_vs_cs_flip \
> kms_panel_fitting \
> kms_pipe_b_c_ivb \
> - kms_pipe_color \
> kms_pipe_crc_basic \
> kms_plane \
> kms_plane_lowres \
> diff --git a/tests/kms_pipe_color.c b/tests/kms_color.c
> similarity index 99%
> rename from tests/kms_pipe_color.c
> rename to tests/kms_color.c
> index ccfc08e6be15..060a60152808 100644
> --- a/tests/kms_pipe_color.c
> +++ b/tests/kms_color.c
> @@ -1205,10 +1205,10 @@ igt_main
> igt_subtest_group
> run_tests_for_pipe(&data, pipe);
>
> - igt_subtest_f("invalid-lut-sizes")
> + igt_subtest_f("pipe-invalid-lut-sizes")
> invalid_lut_sizes(&data);
>
> - igt_subtest_f("invalid-ctm-matrix-sizes")
> + igt_subtest_f("pipe-invalid-ctm-matrix-sizes")
> invalid_ctm_matrix_sizes(&data);
>
> igt_fixture {
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2017-09-29 9:57 UTC | newest]
Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-09-27 18:16 [PATCH i-g-t v2 0/8] lib/igt_kms: Convert properties to be more atomic-like Maarten Lankhorst
2017-09-27 18:16 ` [PATCH i-g-t v2 1/8] tests: Stop looking at plane private members Maarten Lankhorst
2017-09-27 18:16 ` [PATCH i-g-t v2 2/8] lib/igt_kms: Change output->pending_crtc_idx_mask to output->pending_pipe Maarten Lankhorst
2017-09-27 18:16 ` [PATCH i-g-t v2 3/8] lib/igt_kms: Commit primary plane when a modeset is forced on a pipe Maarten Lankhorst
2017-09-27 18:16 ` [PATCH i-g-t v2 4/8] lib/igt_kms: Rework connector properties to be more atomic, v2 Maarten Lankhorst
2017-09-27 18:16 ` [PATCH i-g-t v2 5/8] lib/igt_kms: Rework plane " Maarten Lankhorst
2017-09-28 10:28 ` [PATCH i-g-t v2 5/8] lib/igt_kms: Rework plane properties to be more atomic, v3 Maarten Lankhorst
2017-09-28 11:01 ` [PATCH i-g-t v2 5/8] lib/igt_kms: Rework plane properties to be more atomic, v4 Maarten Lankhorst
2017-09-29 9:52 ` [PATCH i-g-t] lib/igt_kms: Rework pipe properties to be more atomic, v4.1 Maarten Lankhorst
2017-09-27 18:16 ` [PATCH i-g-t v2 6/8] lib/igt_kms: Rework pipe properties to be more atomic, v2 Maarten Lankhorst
2017-09-28 10:28 ` [PATCH i-g-t v2 6/8] lib/igt_kms: Rework pipe properties to be more atomic, v3 Maarten Lankhorst
2017-09-29 6:50 ` [PATCH i-g-t] lib/igt_kms: Rework pipe properties to be more atomic, v4 Maarten Lankhorst
2017-09-27 18:16 ` [PATCH i-g-t v2 7/8] igt/kms_rotation_crc : Fix flip tests for sprite plane Maarten Lankhorst
2017-09-27 18:16 ` [PATCH i-g-t v2 8/8] tests: Rename kms_pipe_color to kms_color Maarten Lankhorst
2017-09-29 10:00 ` Mika Kahola
2017-09-27 18:39 ` ✓ Fi.CI.BAT: success for lib/igt_kms: Convert properties to be more atomic-like. (rev2) Patchwork
2017-09-27 22:51 ` ✗ Fi.CI.IGT: failure " Patchwork
2017-09-28 10:50 ` ✓ Fi.CI.BAT: success for lib/igt_kms: Convert properties to be more atomic-like. (rev4) Patchwork
2017-09-28 11:23 ` ✓ Fi.CI.BAT: success for lib/igt_kms: Convert properties to be more atomic-like. (rev5) Patchwork
2017-09-28 11:47 ` ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev4) Patchwork
2017-09-28 12:34 ` ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev5) Patchwork
2017-09-28 13:01 ` ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev4) Patchwork
2017-09-28 13:04 ` ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev5) Patchwork
2017-09-28 16:09 ` ✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev2) Patchwork
2017-09-29 6:58 ` ✗ Fi.CI.BAT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev6) Patchwork
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.