summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-08-04 21:39:46 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-08-04 21:39:46 -0700
commit5d249813cd374a9095073b9c2eae1f027108b195 (patch)
tree249563aa3aa31f6158ede48c9979e7b70ba645a0 /drivers
parent132ea5885a64de94b664c58ffb8d509c3db33386 (diff)
parentd8b75e153fb9e0201643873b142b4736c889494c (diff)
Merge "msm: kgsl: Allocate global buffers through paged memory"
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/msm/kgsl.c2
-rw-r--r--drivers/gpu/msm/kgsl.h2
-rw-r--r--drivers/gpu/msm/kgsl_sharedmem.c6
-rw-r--r--drivers/gpu/msm/kgsl_sharedmem.h17
4 files changed, 19 insertions, 8 deletions
diff --git a/drivers/gpu/msm/kgsl.c b/drivers/gpu/msm/kgsl.c
index f77dbb7f20af..aec5533ad65d 100644
--- a/drivers/gpu/msm/kgsl.c
+++ b/drivers/gpu/msm/kgsl.c
@@ -3913,7 +3913,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;
diff --git a/drivers/gpu/msm/kgsl.h b/drivers/gpu/msm/kgsl.h
index c172021c8944..7ee71d102ca2 100644
--- a/drivers/gpu/msm/kgsl.h
+++ b/drivers/gpu/msm/kgsl.h
@@ -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
diff --git a/drivers/gpu/msm/kgsl_sharedmem.c b/drivers/gpu/msm/kgsl_sharedmem.c
index 50dcd39fac58..b20f0d6d51a2 100644
--- a/drivers/gpu/msm/kgsl_sharedmem.c
+++ b/drivers/gpu/msm/kgsl_sharedmem.c
@@ -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);
@@ -672,7 +668,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)
diff --git a/drivers/gpu/msm/kgsl_sharedmem.h b/drivers/gpu/msm/kgsl_sharedmem.h
index 5093ebd6e51a..b1a964da5143 100644
--- a/drivers/gpu/msm/kgsl_sharedmem.h
+++ b/drivers/gpu/msm/kgsl_sharedmem.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2002,2007-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2002,2007-2016, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -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);