Commit 7788d320 authored by Antonino Maniscalco's avatar Antonino Maniscalco Committed by Rob Clark
Browse files

drm/msm/a6xx: Add a flag to allow preemption to submitqueue_create



Some userspace changes are necessary so add a flag for userspace to
advertise support for preemption when creating the submitqueue.

When this flag is not set preemption will not be allowed in the middle
of the submitted IBs therefore mantaining compatibility with older
userspace.

The flag is rejected if preemption is not supported on the target, this
allows userspace to know whether preemption is supported.

Tested-by: default avatarRob Clark <robdclark@gmail.com>
Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8650-QRD
Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8550-QRD
Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8450-HDK
Signed-off-by: default avatarAntonino Maniscalco <antomani103@gmail.com>
Patchwork: https://patchwork.freedesktop.org/patch/618028/


Signed-off-by: default avatarRob Clark <robdclark@chromium.org>
parent 35d36dc1
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -352,8 +352,10 @@ static void a7xx_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit)
	OUT_PKT7(ring, CP_SET_MARKER, 1);
	OUT_RING(ring, 0x101); /* IFPC disable */

	if (submit->queue->flags & MSM_SUBMITQUEUE_ALLOW_PREEMPT) {
		OUT_PKT7(ring, CP_SET_MARKER, 1);
		OUT_RING(ring, 0x00d); /* IB1LIST start */
	}

	/* Submit the commands */
	for (i = 0; i < submit->nr_cmds; i++) {
@@ -384,8 +386,10 @@ static void a7xx_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit)
			update_shadow_rptr(gpu, ring);
	}

	if (submit->queue->flags & MSM_SUBMITQUEUE_ALLOW_PREEMPT) {
		OUT_PKT7(ring, CP_SET_MARKER, 1);
		OUT_RING(ring, 0x00e); /* IB1LIST end */
	}

	get_stats_counter(ring, REG_A7XX_RBBM_PERFCTR_CP(0),
		rbmemptr_stats(ring, index, cpcycles_end));
+3 −0
Original line number Diff line number Diff line
@@ -170,6 +170,9 @@ int msm_submitqueue_create(struct drm_device *drm, struct msm_file_private *ctx,
	if (!priv->gpu)
		return -ENODEV;

	if (flags & MSM_SUBMITQUEUE_ALLOW_PREEMPT && priv->gpu->nr_rings == 1)
		return -EINVAL;

	ret = msm_gpu_convert_priority(priv->gpu, prio, &ring_nr, &sched_prio);
	if (ret)
		return ret;
+4 −1
Original line number Diff line number Diff line
@@ -347,7 +347,10 @@ struct drm_msm_gem_madvise {
 * backwards compatibility as a "default" submitqueue
 */

#define MSM_SUBMITQUEUE_FLAGS (0)
#define MSM_SUBMITQUEUE_ALLOW_PREEMPT	0x00000001
#define MSM_SUBMITQUEUE_FLAGS		    ( \
		MSM_SUBMITQUEUE_ALLOW_PREEMPT | \
		0)

/*
 * The submitqueue priority should be between 0 and MSM_PARAM_PRIORITIES-1,