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

Commit 8b931bb5 authored by Harshdeep Dhatt's avatar Harshdeep Dhatt
Browse files

msm: kgsl: Allocate global buffers through paged memory



The global buffers are allocated through CMA, which can
be very limited on some targets. Add a flag to allocate
a global buffer through our page allocator.

CRs-Fixed: 1024295
Change-Id: Ie796b03ce152774535f593acdf00e900109d303a
Signed-off-by: default avatarHarshdeep Dhatt <hdhatt@codeaurora.org>
parent 450bd44d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3908,7 +3908,7 @@ int kgsl_device_platform_probe(struct kgsl_device *device)
		goto error_close_mmu;

	status = kgsl_allocate_global(device, &device->memstore,
		KGSL_MEMSTORE_SIZE, 0, 0);
		KGSL_MEMSTORE_SIZE, 0, KGSL_MEMDESC_CONTIG);

	if (status != 0)
		goto error_close_mmu;
+2 −0
Original line number Diff line number Diff line
@@ -163,6 +163,8 @@ struct kgsl_memdesc_ops {
#define KGSL_MEMDESC_PRIVILEGED BIT(6)
/* The memdesc is TZ locked content protection */
#define KGSL_MEMDESC_TZ_LOCKED BIT(7)
/* The memdesc is allocated through contiguous memory */
#define KGSL_MEMDESC_CONTIG BIT(8)

/**
 * struct kgsl_memdesc - GPU memory object descriptor
+1 −5
Original line number Diff line number Diff line
@@ -313,10 +313,6 @@ kgsl_sharedmem_init_sysfs(void)
		drv_attr_list);
}

static int kgsl_sharedmem_page_alloc_user(struct kgsl_memdesc *memdesc,
				struct kgsl_pagetable *pagetable,
				uint64_t size);

static int kgsl_cma_alloc_secure(struct kgsl_device *device,
			struct kgsl_memdesc *memdesc, uint64_t size);

@@ -640,7 +636,7 @@ static inline int get_page_size(size_t size, unsigned int align)
}
#endif

static int
int
kgsl_sharedmem_page_alloc_user(struct kgsl_memdesc *memdesc,
			struct kgsl_pagetable *pagetable,
			uint64_t size)
+14 −1
Original line number Diff line number Diff line
@@ -71,6 +71,10 @@ int kgsl_allocate_user(struct kgsl_device *device,

void kgsl_get_memory_usage(char *str, size_t len, uint64_t memflags);

int kgsl_sharedmem_page_alloc_user(struct kgsl_memdesc *memdesc,
				struct kgsl_pagetable *pagetable,
				uint64_t size);

#define MEMFLAGS(_flags, _mask, _shift) \
	((unsigned int) (((_flags) & (_mask)) >> (_shift)))

@@ -266,7 +270,16 @@ static inline int kgsl_allocate_global(struct kgsl_device *device,
	memdesc->flags = flags;
	memdesc->priv = priv;

	ret = kgsl_sharedmem_alloc_contig(device, memdesc, NULL, (size_t) size);
	if ((memdesc->priv & KGSL_MEMDESC_CONTIG) != 0)
		ret = kgsl_sharedmem_alloc_contig(device, memdesc, NULL,
						(size_t) size);
	else {
		ret = kgsl_sharedmem_page_alloc_user(memdesc, NULL,
						(size_t) size);
		if (ret == 0)
			kgsl_memdesc_map(memdesc);
	}

	if (ret == 0)
		kgsl_mmu_add_global(device, memdesc);