Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aae850c0 authored by Harshdeep Dhatt's avatar Harshdeep Dhatt
Browse files

msm: kgsl: Wrap IBs with SET_MARKER packets on A6XX



Currently, these packets will only be inserted if preemption
is enabled. However, these packets are needed regardless of
preemption. For example, these packets are used for SPTPRAC
power collapse feature. So always insert these packets in
the ringbuffer.

Change-Id: Idb854797736876b5875b21455a337c8bf1145d36
Signed-off-by: default avatarHarshdeep Dhatt <hdhatt@codeaurora.org>
parent d9089f47
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -848,7 +848,7 @@ struct adreno_gpudev {
				unsigned int *cmds,
				struct kgsl_context *context);
	int (*preemption_yield_enable)(unsigned int *);
	unsigned int (*preemption_set_marker)(unsigned int *cmds, int start);
	unsigned int (*set_marker)(unsigned int *cmds, int start);
	unsigned int (*preemption_post_ibsubmit)(
				struct adreno_device *adreno_dev,
				unsigned int *cmds);
+1 −1
Original line number Diff line number Diff line
@@ -2841,7 +2841,7 @@ struct adreno_gpudev adreno_a6xx_gpudev = {
	.preemption_post_ibsubmit = a6xx_preemption_post_ibsubmit,
	.preemption_init = a6xx_preemption_init,
	.preemption_schedule = a6xx_preemption_schedule,
	.preemption_set_marker = a6xx_preemption_set_marker,
	.set_marker = a6xx_set_marker,
	.preemption_context_init = a6xx_preemption_context_init,
	.preemption_context_destroy = a6xx_preemption_context_destroy,
	.gx_is_on = a6xx_gx_is_on,
+1 −1
Original line number Diff line number Diff line
@@ -100,7 +100,7 @@ unsigned int a6xx_preemption_pre_ibsubmit(struct adreno_device *adreno_dev,
		struct adreno_ringbuffer *rb,
		unsigned int *cmds, struct kgsl_context *context);

unsigned int a6xx_preemption_set_marker(unsigned int *cmds, int start);
unsigned int a6xx_set_marker(unsigned int *cmds, int start);

void a6xx_preemption_callback(struct adreno_device *adreno_dev, int bit);

+1 −1
Original line number Diff line number Diff line
@@ -369,7 +369,7 @@ void a6xx_preemption_schedule(struct adreno_device *adreno_dev)
	mutex_unlock(&device->mutex);
}

unsigned int a6xx_preemption_set_marker(unsigned int *cmds, int start)
unsigned int a6xx_set_marker(unsigned int *cmds, int start)
{
	*cmds++ = cp_type7_packet(CP_SET_MARKER, 1);

+12 −13
Original line number Diff line number Diff line
@@ -864,12 +864,12 @@ int adreno_ringbuffer_submitcmd(struct adreno_device *adreno_dev,
			dwords += 2;
	}

	if (adreno_is_preemption_enabled(adreno_dev)) {
		if (gpudev->preemption_set_marker)
			dwords += 4;
		else if (gpudev->preemption_yield_enable)
	if (adreno_is_preemption_enabled(adreno_dev))
		if (gpudev->preemption_yield_enable)
			dwords += 8;
	}

	if (gpudev->set_marker)
		dwords += 4;

	link = kcalloc(dwords, sizeof(unsigned int), GFP_KERNEL);
	if (!link) {
@@ -900,9 +900,8 @@ int adreno_ringbuffer_submitcmd(struct adreno_device *adreno_dev,
			gpu_ticks_submitted));
	}

	if (gpudev->preemption_set_marker &&
			adreno_is_preemption_enabled(adreno_dev))
		cmds += gpudev->preemption_set_marker(cmds, 1);
	if (gpudev->set_marker)
		cmds += gpudev->set_marker(cmds, 1);

	if (numibs) {
		list_for_each_entry(ib, &cmdobj->cmdlist, node) {
@@ -925,12 +924,12 @@ int adreno_ringbuffer_submitcmd(struct adreno_device *adreno_dev,
		}
	}

	if (adreno_is_preemption_enabled(adreno_dev)) {
		if (gpudev->preemption_set_marker)
			cmds += gpudev->preemption_set_marker(cmds, 0);
		else if (gpudev->preemption_yield_enable)
	if (gpudev->set_marker)
		cmds += gpudev->set_marker(cmds, 0);

	if (adreno_is_preemption_enabled(adreno_dev))
		if (gpudev->preemption_yield_enable)
			cmds += gpudev->preemption_yield_enable(cmds);
	}

	if (kernel_profiling) {
		cmds += _get_alwayson_counter(adreno_dev, cmds,