[Intel-gfx] [PATCH v3] kms_atomic : Added subtest for Single Pipe DBUF validation

Daniel Vetter daniel at ffwll.ch
Wed Oct 26 15:40:28 UTC 2016


On Wed, Oct 26, 2016 at 09:33:27AM +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 at intel.com>

When resending pls at least mention what you've changed in some per-patch
changelog. And maybe address the stuff I've been raising, but this way
your patch just won't land.
-Daniel
> ---
>  tests/kms_atomic.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 79 insertions(+)
> 
> diff --git a/tests/kms_atomic.c b/tests/kms_atomic.c
> index f27ee46..3ab1d3f 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,31 @@ igt_main
>  		atomic_state_free(scratch);
>  	}
>  
> +	igt_subtest("validate_dbuf") {
> +		int gen;
> +
> +		gen = intel_gen(intel_get_drm_devid(desc.fd));
> +		igt_require(gen >= 9);
> +
> +		struct kms_atomic_state *scratch = atomic_state_dup(current);
> +		struct kms_atomic_crtc_state *crtc;
> +		struct kms_atomic_plane_state *planes[2];
> +
> +		crtc = find_crtc(scratch, true);
> +		igt_require(crtc);
> +
> +		igt_require(find_connector(scratch, crtc));
> +
> +		planes[0] = find_plane(scratch, PLANE_TYPE_PRIMARY, crtc);
> +		igt_require(planes[0]);
> +
> +		planes[1] = find_plane(scratch, PLANE_TYPE_OVERLAY, crtc);
> +		igt_require(planes[1]);
> +
> +		validate_dbuf(crtc, planes, 2);
> +		atomic_state_free(scratch);
> +	}
> +
>  	atomic_state_free(current);
>  
>  	igt_fixture
> -- 
> 1.9.1
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the Intel-gfx mailing list