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

Commit 682b071d 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: Move global pagetable entries to the IOMMU driver"

parents ab192d58 09459f2e
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -1138,8 +1138,9 @@ out:

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

	/* Free local copies of firmware and other command streams */
	kfree(adreno_dev->pfp_fw);
@@ -1151,8 +1152,8 @@ static void _adreno_free_memories(struct adreno_device *adreno_dev)
	kfree(adreno_dev->gpmu_cmds);
	adreno_dev->gpmu_cmds = NULL;

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

static int adreno_remove(struct platform_device *pdev)
@@ -1196,7 +1197,7 @@ static int adreno_remove(struct platform_device *pdev)
	kgsl_device_platform_remove(device);

	if (test_bit(ADRENO_DEVICE_PWRON_FIXUP, &adreno_dev->priv)) {
		kgsl_free_global(&adreno_dev->pwron_fixup);
		kgsl_free_global(device, &adreno_dev->pwron_fixup);
		clear_bit(ADRENO_DEVICE_PWRON_FIXUP, &adreno_dev->priv);
	}
	clear_bit(ADRENO_DEVICE_INITIALIZED, &adreno_dev->priv);
+3 −1
Original line number Diff line number Diff line
@@ -905,8 +905,10 @@ void a5xx_crashdump_init(struct adreno_device *adreno_dev)
	count = count_registers();

	if (kgsl_allocate_global(device, &registers,
		count * sizeof(unsigned int), 0, 0))
		count * sizeof(unsigned int), 0, 0)) {
		kgsl_free_global(device, &capturescript);
		return;
	}

	/* Build the crash script */

+6 −3
Original line number Diff line number Diff line
@@ -600,8 +600,7 @@ unsigned int adreno_iommu_set_pt_generate_cmds(
	cmds += adreno_iommu_set_apriv(adreno_dev, cmds, 1);

	cmds += _adreno_iommu_add_idle_indirect_cmds(adreno_dev, cmds,
		device->mmu.setstate_memory.gpuaddr +
		KGSL_IOMMU_SETSTATE_NOP_OFFSET);
		iommu->setstate.gpuaddr + KGSL_IOMMU_SETSTATE_NOP_OFFSET);

	if (iommu->version >= 2) {
		if (adreno_is_a5xx(adreno_dev))
@@ -873,15 +872,19 @@ done:
int adreno_iommu_init(struct adreno_device *adreno_dev)
{
	struct kgsl_device *device = &adreno_dev->dev;
	struct kgsl_iommu *iommu = device->mmu.priv;

	if (kgsl_mmu_get_mmutype() == KGSL_MMU_TYPE_NONE)
		return 0;

	if (iommu == NULL)
		return -ENODEV;

	/*
	 * A nop is required in an indirect buffer when switching
	 * pagetables in-stream
	 */
	kgsl_sharedmem_writel(device, &device->mmu.setstate_memory,
	kgsl_sharedmem_writel(device, &iommu->setstate,
				KGSL_IOMMU_SETSTATE_NOP_OFFSET,
				cp_packet(adreno_dev, CP_NOP, 1));

+1 −1
Original line number Diff line number Diff line
@@ -1108,7 +1108,7 @@ void adreno_profile_close(struct adreno_device *adreno_dev)
	profile->log_tail = NULL;
	profile->shared_head = 0;
	profile->shared_tail = 0;
	kgsl_free_global(&profile->shared_buffer);
	kgsl_free_global(&adreno_dev->dev, &profile->shared_buffer);
	profile->shared_size = 0;

	profile->assignment_count = 0;
+5 −3
Original line number Diff line number Diff line
@@ -424,12 +424,14 @@ int adreno_ringbuffer_init(struct adreno_device *adreno_dev, bool nopreempt)

static void _adreno_ringbuffer_close(struct adreno_ringbuffer *rb)
{
	kgsl_free_global(&rb->pagetable_desc);
	kgsl_free_global(&rb->preemption_desc);
	struct kgsl_device *device = rb->device;

	kgsl_free_global(device, &rb->pagetable_desc);
	kgsl_free_global(device, &rb->preemption_desc);

	memset(&rb->pt_update_desc, 0, sizeof(struct kgsl_memdesc));

	kgsl_free_global(&rb->buffer_desc);
	kgsl_free_global(device, &rb->buffer_desc);
	kgsl_del_event_group(&rb->events);
	memset(rb, 0, sizeof(struct adreno_ringbuffer));
}
Loading