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

Commit 29d406e8 authored by Akhil P Oommen's avatar Akhil P Oommen
Browse files

msm: kgsl: Avoid redundant AOP message during GPU wake up



Sending ACD configuration message to AOP can have latency in
milliseconds. It is a redundant job sending this message on
every GPU wake up. Avoid this to improve the GPU wake up time.

Change-Id: I9df7dc1920bd9ef1a13469402df523eb7805e85b
Signed-off-by: default avatarAkhil P Oommen <akhilpo@codeaurora.org>
parent e56fe938
Loading
Loading
Loading
Loading
+12 −12
Original line number Diff line number Diff line
@@ -1122,20 +1122,18 @@ struct mbox_message {
	void *msg;
};

static void gmu_aop_send_acd_state(struct kgsl_device *device)
static void gmu_aop_send_acd_state(struct kgsl_device *device, bool flag)
{
	struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
	struct gmu_device *gmu = KGSL_GMU_DEVICE(device);
	struct mbox_message msg;
	char msg_buf[33];
	bool state = test_bit(ADRENO_ACD_CTRL, &adreno_dev->pwrctrl_flag);
	int ret;

	if (!gmu->mailbox.client)
		return;

	msg.len = scnprintf(msg_buf, sizeof(msg_buf),
			"{class: gpu, res: acd, value: %d}", state);
			"{class: gpu, res: acd, value: %d}", flag);
	msg.msg = msg_buf;

	ret = mbox_send_message(gmu->mailbox.channel, &msg);
@@ -1204,10 +1202,15 @@ static int gmu_acd_set(struct kgsl_device *device, unsigned int val)

	/* Power down the GPU before enabling or disabling ACD */
	kgsl_pwrctrl_change_state(device, KGSL_STATE_SUSPEND);
	if (val)

	if (val) {
		set_bit(ADRENO_ACD_CTRL, &adreno_dev->pwrctrl_flag);
	else
		gmu_aop_send_acd_state(device, true);
	} else {
		clear_bit(ADRENO_ACD_CTRL, &adreno_dev->pwrctrl_flag);
		gmu_aop_send_acd_state(device, false);
	}

	kgsl_pwrctrl_change_state(device, KGSL_STATE_SLUMBER);

	mutex_unlock(&device->mutex);
@@ -1574,11 +1577,12 @@ static int gmu_start(struct kgsl_device *device)

	switch (device->state) {
	case KGSL_STATE_INIT:
		gmu_aop_send_acd_state(device, test_bit(ADRENO_ACD_CTRL,
					&adreno_dev->pwrctrl_flag));

	case KGSL_STATE_SUSPEND:
		WARN_ON(test_bit(GMU_CLK_ON, &device->gmu_core.flags));

		gmu_aop_send_acd_state(device);

		gmu_enable_gdsc(gmu);
		gmu_enable_clks(device);
		gmu_dev_ops->irq_enable(device);
@@ -1607,8 +1611,6 @@ static int gmu_start(struct kgsl_device *device)
	case KGSL_STATE_SLUMBER:
		WARN_ON(test_bit(GMU_CLK_ON, &device->gmu_core.flags));

		gmu_aop_send_acd_state(device);

		gmu_enable_gdsc(gmu);
		gmu_enable_clks(device);
		gmu_dev_ops->irq_enable(device);
@@ -1628,8 +1630,6 @@ static int gmu_start(struct kgsl_device *device)
	case KGSL_STATE_RESET:
		gmu_suspend(device);

		gmu_aop_send_acd_state(device);

		gmu_enable_gdsc(gmu);
		gmu_enable_clks(device);
		gmu_dev_ops->irq_enable(device);