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

Commit 84fdca50 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: kgsl: Reset GPU when CFF is turned on"

parents 5a5598e9 1a8c380d
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -627,6 +627,15 @@ int kgsl_cff_dump_enable_set(void *data, u64 val)
		}
		if (!device->cff_dump_enable) {
			device->cff_dump_enable = 1;
			/*
			 * put device to slumber so that we ensure that the
			 * start opcode in CFF is present
			 */
			mutex_lock(&device->mutex);
			ret = kgsl_pwrctrl_slumber(device);
			if (ret)
				device->cff_dump_enable = 0;
			mutex_unlock(&device->mutex);
		}
	} else if (device->cff_dump_enable && !val) {
		device->cff_dump_enable = 0;
+37 −0
Original line number Diff line number Diff line
@@ -1413,6 +1413,43 @@ int kgsl_pwrctrl_sleep(struct kgsl_device *device)
}
EXPORT_SYMBOL(kgsl_pwrctrl_sleep);

/*
 * kgsl_pwrctrl_slumber() - Put device into slumber if it is not in suspend
 * @device: Device pointer
 *
 * Return 0 on success else error code
 */
int kgsl_pwrctrl_slumber(struct kgsl_device *device)
{
	int ret = 0;

	if (KGSL_STATE_SLUMBER == device->state ||
		KGSL_STATE_SUSPEND == device->state)
		return ret;
	if (KGSL_STATE_SUSPEND == device->requested_state)
		return ret;
	/* drain to prevent from more commands being submitted */
	device->ftbl->drain(device);
	/* wait for active count so device can be put in slumber */
	ret = kgsl_active_count_wait(device, 0);
	if (ret) {
		device->ftbl->resume(device);
		return ret;
	}

	ret = device->ftbl->idle(device);
	if (ret) {
		device->ftbl->resume(device);
		return ret;
	}
	/* resume since we drained earlier */
	device->ftbl->resume(device);
	kgsl_pwrctrl_request_state(device, KGSL_STATE_SLUMBER);
	ret = kgsl_pwrctrl_sleep(device);
	return ret;
}
EXPORT_SYMBOL(kgsl_pwrctrl_slumber);

/**
 * kgsl_pwrctrl_wake() - Power up the GPU from a slumber/sleep state
 * @device - Pointer to the kgsl_device struct
+1 −0
Original line number Diff line number Diff line
@@ -157,5 +157,6 @@ void kgsl_active_count_put(struct kgsl_device *device);
int kgsl_active_count_wait(struct kgsl_device *device, int count);
void kgsl_pwrctrl_clk(struct kgsl_device *device, int state,
				int requested_state);
int kgsl_pwrctrl_slumber(struct kgsl_device *device);

#endif /* __KGSL_PWRCTRL_H */