On Tue, Oct 04, 2016 at 10:17:58AM +0530, meghanelogal wrote: > Existing DDB algorithm divide the DDB wrt data rate, > hence the planes with the less height but same width > will be allocated less blocks and watermark are based > on width which requires more DDB. With this data the flip > may fail. > > In new DDB algorithm, the DDB is divided based on > watermark requirement. > > In this subtest, dividing the htotal/200 will allocate > ~2-4 blocks out of total(512/896), flip may fail with the > exisiting algorithm.But with the new algorithm it will pass. > > Signed-off-by: Megha Nelogal <megha.i.nelogal@xxxxxxxxx> Please note that igt can be run on _any_ linux driver. If you are testing for such a specific case like this one here, you definitely need to have very specific platform checks in place, using igt_require. But tbh I'm not sure this is all that useful .... -Daniel > --- > tests/kms_atomic.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 77 insertions(+) > > diff --git a/tests/kms_atomic.c b/tests/kms_atomic.c > index f27ee46..ff25644 100644 > --- a/tests/kms_atomic.c > +++ b/tests/kms_atomic.c > @@ -1280,6 +1280,60 @@ static void atomic_invalid_params(struct kms_atomic_crtc_state *crtc, > do_ioctl_err(desc->fd, DRM_IOCTL_MODE_ATOMIC, &ioc, EFAULT); > } > > +static void validate_dbuf(struct kms_atomic_crtc_state *crtc, > + struct kms_atomic_plane_state **plane_array, > + int plane_count) > +{ > + int i; > + struct kms_atomic_desc *desc = crtc->state->desc; > + > + /* for active crtc do modeset on the native resolution */ > + drmModeAtomicReq *req = drmModeAtomicAlloc(); > + struct drm_mode_modeinfo *mode = crtc->mode.data; > + struct kms_atomic_plane_state plane; > + struct igt_fb fb; > + > + crtc_populate_req(crtc, req); > + > + /* Add plane data to the structure...*/ > + uint32_t crtc_x = 0; > + uint32_t crtc_y = 0; > + > + for (i = 0; i < plane_count; i++) { > + plane = *plane_array[i]; > + uint32_t format = plane_get_igt_format(&plane); > + > + igt_require(format != 0); > + plane.src_x = 0; > + plane.src_y = 0; > + plane.src_w = (mode->hdisplay / (1)) << 16; > + plane.crtc_x = crtc_x; > + plane.crtc_y = crtc_y; > + plane.crtc_w = (mode->hdisplay) / (1); > + plane.crtc_h = (mode->vdisplay) / (i + 1); > + > + plane.crtc_id = crtc->obj; > + > + if (i%2 == 0) { > + plane.src_h = (mode->vdisplay / (1)) << 16; > + plane.crtc_h = (mode->vdisplay) / (1); > + } > + > + if (i%2 == 1) { > + plane.src_h = ceil((mode->vdisplay / 200) << 16); > + plane.crtc_h = ceil((mode->vdisplay / 200)); > + } > + > + plane.fb_id = igt_create_fb(plane.state->desc->fd, > + plane.crtc_w, plane.crtc_h, > + format, I915_TILING_NONE, &fb); > + plane_populate_req(&plane, req); > + } > + do_atomic_commit(desc->fd, req, ATOMIC_RELAX_NONE); > + drmModeAtomicFree(req); > +} > + > + > igt_main > { > struct kms_atomic_desc desc; > @@ -1373,6 +1427,29 @@ igt_main > atomic_state_free(scratch); > } > > + igt_subtest("validate_dbuf") { > + struct kms_atomic_state *scratch = atomic_state_dup(current); > + struct kms_atomic_crtc_state *crtc = find_crtc(scratch, true); > + struct kms_atomic_plane_state *plane; > + struct kms_atomic_connector_state *connector = > + find_connector(scratch, crtc); > + struct kms_atomic_plane_state **plane_array = NULL; > + /* Enabling Two planes */ > + plane_array = calloc(2, sizeof(struct kms_atomic_plane_state *)); > + int plane_count = 0; > + > + igt_require(crtc); > + plane = find_plane(scratch, PLANE_TYPE_PRIMARY, crtc); > + igt_require(plane); > + plane_array[plane_count] = plane; plane_count++; > + plane = find_plane(scratch, PLANE_TYPE_OVERLAY, crtc); > + igt_require(plane); > + plane_array[plane_count] = plane; plane_count++; > + igt_require(connector); > + validate_dbuf(crtc, plane_array, plane_count); > + atomic_state_free(scratch); > + } > + > atomic_state_free(current); > > igt_fixture > -- > 1.9.1 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx