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

Commit 148a0a8b authored by Carter Cooper's avatar Carter Cooper
Browse files

msm: kgsl: Free our global memory in adreno_remove



Free device firmware copies and command streams that are used to
quickly program the GPU. Free this data in adreno_remove rather than
when the ringbuffer is closed.

Change-Id: I125f03a526e0f165a54e8e868ecd4d181d80796c
Signed-off-by: default avatarCarter Cooper <ccooper@codeaurora.org>
parent 55bc7ff0
Loading
Loading
Loading
Loading
+21 −2
Original line number Diff line number Diff line
@@ -1150,6 +1150,25 @@ out:
	return status;
}

static void _adreno_free_memories(struct adreno_device *adreno_dev)
{
	if (test_bit(ADRENO_DEVICE_CMDBATCH_PROFILE, &adreno_dev->priv))
		kgsl_free_global(&adreno_dev->cmdbatch_profile_buffer);

	/* Free local copies of firmware and other command streams */
	kfree(adreno_dev->pfp_fw);
	adreno_dev->pfp_fw = NULL;

	kfree(adreno_dev->pm4_fw);
	adreno_dev->pm4_fw = NULL;

	kfree(adreno_dev->gpmu_cmds);
	adreno_dev->gpmu_cmds = NULL;

	kgsl_free_global(&adreno_dev->pm4);
	kgsl_free_global(&adreno_dev->pfp);
}

static int adreno_remove(struct platform_device *pdev)
{
	struct adreno_device *adreno_dev = adreno_get_dev(pdev);
@@ -1160,8 +1179,8 @@ static int adreno_remove(struct platform_device *pdev)

	device = &adreno_dev->dev;

	if (test_bit(ADRENO_DEVICE_CMDBATCH_PROFILE, &adreno_dev->priv))
		kgsl_free_global(&adreno_dev->cmdbatch_profile_buffer);
	/* The memory is fading */
	_adreno_free_memories(adreno_dev);

#ifdef CONFIG_INPUT
	input_unregister_handler(&adreno_input_handler);
+0 −11
Original line number Diff line number Diff line
@@ -453,17 +453,6 @@ void adreno_ringbuffer_close(struct adreno_device *adreno_dev)
	struct adreno_ringbuffer *rb;
	int i;

	kfree(adreno_dev->pfp_fw);
	kfree(adreno_dev->pm4_fw);
	kfree(adreno_dev->gpmu_cmds);

	adreno_dev->pfp_fw = NULL;
	adreno_dev->pm4_fw = NULL;
	adreno_dev->gpmu_cmds = NULL;

	kgsl_free_global(&adreno_dev->pm4);
	kgsl_free_global(&adreno_dev->pfp);

	FOR_EACH_RINGBUFFER(adreno_dev, rb, i)
		_adreno_ringbuffer_close(rb);
}