aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/etnaviv
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-05-23 14:48:48 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2016-05-23 14:48:48 -0400
commit1d6da87a3241deb13d073c4125d19ed0e5a0c62c (patch)
tree42b7a9842618dad2afe7db9709cc6217ced03120 /drivers/gpu/drm/etnaviv
parent1f40c49570eb01436786a9b5845c4469a9a1f362 (diff)
parenta39ed680bddb1ead592e22ed812c7e47286bfc03 (diff)
Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
Pull drm updates from Dave Airlie: "Here's the main drm pull request for 4.7, it's been a busy one, and I've been a bit more distracted in real life this merge window. Lots more ARM drivers, not sure if it'll ever end. I think I've at least one more coming the next merge window. But changes are all over the place, support for AMD Polaris GPUs is in here, some missing GM108 support for nouveau (found in some Lenovos), a bunch of MST and skylake fixes. I've also noticed a few fixes from Arnd in my inbox, that I'll try and get in asap, but I didn't think they should hold this up. New drivers: - Hisilicon kirin display driver - Mediatek MT8173 display driver - ARC PGU - bitstreamer on Synopsys ARC SDP boards - Allwinner A13 initial RGB output driver - Analogix driver for DisplayPort IP found in exynos and rockchip DRM Core: - UAPI headers fixes and C++ safety - DRM connector reference counting - DisplayID mode parsing for Dell 5K monitors - Removal of struct_mutex from drivers - Connector registration cleanups - MST robustness fixes - MAINTAINERS updates - Lockless GEM object freeing - Generic fbdev deferred IO support panel: - Support for a bunch of new panels i915: - VBT refactoring - PLL computation cleanups - DSI support for BXT - Color manager support - More atomic patches - GEM improvements - GuC fw loading fixes - DP detection fixes - SKL GPU hang fixes - Lots of BXT fixes radeon/amdgpu: - Initial Polaris support - GPUVM/Scheduler/Clock/Power improvements - ASYNC pageflip support - New mesa feature support nouveau: - GM108 support - Power sensor support improvements - GR init + ucode fixes. - Use GPU provided topology information vmwgfx: - Add host messaging support gma500: - Some cleanups and fixes atmel: - Bridge support - Async atomic commit support fsl-dcu: - Timing controller for LCD support - Pixel clock polarity support rcar-du: - Misc fixes exynos: - Pipeline clock support - Exynoss4533 SoC support - HW trigger mode support - export HDMI_PHY clock - DECON5433 fixes - Use generic prime functions - use DMA mapping APIs rockchip: - Lots of little fixes vc4: - Render node support - Gamma ramp support - DPI output support msm: - Mostly cleanups and fixes - Conversion to generic struct fence etnaviv: - Fix for prime buffer handling - Allow hangcheck to be coalesced with other wakeups tegra: - Gamme table size fix" * 'drm-next' of git://people.freedesktop.org/~airlied/linux: (1050 commits) drm/edid: add displayid detailed 1 timings to the modelist. (v1.1) drm/edid: move displayid validation to it's own function. drm/displayid: Iterate over all DisplayID blocks drm/edid: move displayid tiled block parsing into separate function. drm: Nuke ->vblank_disable_allowed drm/vmwgfx: Report vmwgfx version to vmware.log drm/vmwgfx: Add VMWare host messaging capability drm/vmwgfx: Kill some lockdep warnings drm/nouveau/gr/gf100-: fix race condition in fecs/gpccs ucode drm/nouveau/core: recognise GM108 chipsets drm/nouveau/gr/gm107-: fix touching non-existent ppcs in attrib cb setup drm/nouveau/gr/gk104-: share implementation of ppc exception init drm/nouveau/gr/gk104-: move rop_active_fbps init to nonctx drm/nouveau/bios/pll: check BIT table version before trying to parse it drm/nouveau/bios/pll: prevent oops when limits table can't be parsed drm/nouveau/volt/gk104: round up in gk104_volt_set drm/nouveau/fb/gm200: setup mmu debug buffer registers at init() drm/nouveau/fb/gk20a,gm20b: setup mmu debug buffer registers at init() drm/nouveau/fb/gf100-: allocate mmu debug buffers drm/nouveau/fb: allow chipset-specific actions for oneinit() ...
Diffstat (limited to 'drivers/gpu/drm/etnaviv')
-rw-r--r--drivers/gpu/drm/etnaviv/etnaviv_drv.c10
-rw-r--r--drivers/gpu/drm/etnaviv/etnaviv_gem.c17
-rw-r--r--drivers/gpu/drm/etnaviv/etnaviv_gem.h1
-rw-r--r--drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c7
-rw-r--r--drivers/gpu/drm/etnaviv/etnaviv_gpu.c4
5 files changed, 27 insertions, 12 deletions
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
index e8858985f01e..3d4f56df8359 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
@@ -314,7 +314,7 @@ static int etnaviv_ioctl_gem_cpu_prep(struct drm_device *dev, void *data,
314 if (args->op & ~(ETNA_PREP_READ | ETNA_PREP_WRITE | ETNA_PREP_NOSYNC)) 314 if (args->op & ~(ETNA_PREP_READ | ETNA_PREP_WRITE | ETNA_PREP_NOSYNC))
315 return -EINVAL; 315 return -EINVAL;
316 316
317 obj = drm_gem_object_lookup(dev, file, args->handle); 317 obj = drm_gem_object_lookup(file, args->handle);
318 if (!obj) 318 if (!obj)
319 return -ENOENT; 319 return -ENOENT;
320 320
@@ -335,7 +335,7 @@ static int etnaviv_ioctl_gem_cpu_fini(struct drm_device *dev, void *data,
335 if (args->flags) 335 if (args->flags)
336 return -EINVAL; 336 return -EINVAL;
337 337
338 obj = drm_gem_object_lookup(dev, file, args->handle); 338 obj = drm_gem_object_lookup(file, args->handle);
339 if (!obj) 339 if (!obj)
340 return -ENOENT; 340 return -ENOENT;
341 341
@@ -356,7 +356,7 @@ static int etnaviv_ioctl_gem_info(struct drm_device *dev, void *data,
356 if (args->pad) 356 if (args->pad)
357 return -EINVAL; 357 return -EINVAL;
358 358
359 obj = drm_gem_object_lookup(dev, file, args->handle); 359 obj = drm_gem_object_lookup(file, args->handle);
360 if (!obj) 360 if (!obj)
361 return -ENOENT; 361 return -ENOENT;
362 362
@@ -441,7 +441,7 @@ static int etnaviv_ioctl_gem_wait(struct drm_device *dev, void *data,
441 if (!gpu) 441 if (!gpu)
442 return -ENXIO; 442 return -ENXIO;
443 443
444 obj = drm_gem_object_lookup(dev, file, args->handle); 444 obj = drm_gem_object_lookup(file, args->handle);
445 if (!obj) 445 if (!obj)
446 return -ENOENT; 446 return -ENOENT;
447 447
@@ -497,7 +497,7 @@ static struct drm_driver etnaviv_drm_driver = {
497 .open = etnaviv_open, 497 .open = etnaviv_open,
498 .preclose = etnaviv_preclose, 498 .preclose = etnaviv_preclose,
499 .set_busid = drm_platform_set_busid, 499 .set_busid = drm_platform_set_busid,
500 .gem_free_object = etnaviv_gem_free_object, 500 .gem_free_object_unlocked = etnaviv_gem_free_object,
501 .gem_vm_ops = &vm_ops, 501 .gem_vm_ops = &vm_ops,
502 .prime_handle_to_fd = drm_gem_prime_handle_to_fd, 502 .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
503 .prime_fd_to_handle = drm_gem_prime_fd_to_handle, 503 .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
index 281c6eca20a8..df9bcbab922f 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
@@ -129,10 +129,9 @@ void etnaviv_gem_put_pages(struct etnaviv_gem_object *etnaviv_obj)
129 /* when we start tracking the pin count, then do something here */ 129 /* when we start tracking the pin count, then do something here */
130} 130}
131 131
132static int etnaviv_gem_mmap_obj(struct drm_gem_object *obj, 132static int etnaviv_gem_mmap_obj(struct etnaviv_gem_object *etnaviv_obj,
133 struct vm_area_struct *vma) 133 struct vm_area_struct *vma)
134{ 134{
135 struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj);
136 pgprot_t vm_page_prot; 135 pgprot_t vm_page_prot;
137 136
138 vma->vm_flags &= ~VM_PFNMAP; 137 vma->vm_flags &= ~VM_PFNMAP;
@@ -151,9 +150,9 @@ static int etnaviv_gem_mmap_obj(struct drm_gem_object *obj,
151 * in particular in the case of mmap'd dmabufs) 150 * in particular in the case of mmap'd dmabufs)
152 */ 151 */
153 fput(vma->vm_file); 152 fput(vma->vm_file);
154 get_file(obj->filp); 153 get_file(etnaviv_obj->base.filp);
155 vma->vm_pgoff = 0; 154 vma->vm_pgoff = 0;
156 vma->vm_file = obj->filp; 155 vma->vm_file = etnaviv_obj->base.filp;
157 156
158 vma->vm_page_prot = vm_page_prot; 157 vma->vm_page_prot = vm_page_prot;
159 } 158 }
@@ -173,7 +172,7 @@ int etnaviv_gem_mmap(struct file *filp, struct vm_area_struct *vma)
173 } 172 }
174 173
175 obj = to_etnaviv_bo(vma->vm_private_data); 174 obj = to_etnaviv_bo(vma->vm_private_data);
176 return etnaviv_gem_mmap_obj(vma->vm_private_data, vma); 175 return obj->ops->mmap(obj, vma);
177} 176}
178 177
179int etnaviv_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf) 178int etnaviv_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
@@ -545,6 +544,7 @@ static const struct etnaviv_gem_ops etnaviv_gem_shmem_ops = {
545 .get_pages = etnaviv_gem_shmem_get_pages, 544 .get_pages = etnaviv_gem_shmem_get_pages,
546 .release = etnaviv_gem_shmem_release, 545 .release = etnaviv_gem_shmem_release,
547 .vmap = etnaviv_gem_vmap_impl, 546 .vmap = etnaviv_gem_vmap_impl,
547 .mmap = etnaviv_gem_mmap_obj,
548}; 548};
549 549
550void etnaviv_gem_free_object(struct drm_gem_object *obj) 550void etnaviv_gem_free_object(struct drm_gem_object *obj)
@@ -886,10 +886,17 @@ static void etnaviv_gem_userptr_release(struct etnaviv_gem_object *etnaviv_obj)
886 put_task_struct(etnaviv_obj->userptr.task); 886 put_task_struct(etnaviv_obj->userptr.task);
887} 887}
888 888
889static int etnaviv_gem_userptr_mmap_obj(struct etnaviv_gem_object *etnaviv_obj,
890 struct vm_area_struct *vma)
891{
892 return -EINVAL;
893}
894
889static const struct etnaviv_gem_ops etnaviv_gem_userptr_ops = { 895static const struct etnaviv_gem_ops etnaviv_gem_userptr_ops = {
890 .get_pages = etnaviv_gem_userptr_get_pages, 896 .get_pages = etnaviv_gem_userptr_get_pages,
891 .release = etnaviv_gem_userptr_release, 897 .release = etnaviv_gem_userptr_release,
892 .vmap = etnaviv_gem_vmap_impl, 898 .vmap = etnaviv_gem_vmap_impl,
899 .mmap = etnaviv_gem_userptr_mmap_obj,
893}; 900};
894 901
895int etnaviv_gem_new_userptr(struct drm_device *dev, struct drm_file *file, 902int etnaviv_gem_new_userptr(struct drm_device *dev, struct drm_file *file,
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.h b/drivers/gpu/drm/etnaviv/etnaviv_gem.h
index 02665d8c10ee..e63ff116a3b3 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem.h
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.h
@@ -79,6 +79,7 @@ struct etnaviv_gem_ops {
79 int (*get_pages)(struct etnaviv_gem_object *); 79 int (*get_pages)(struct etnaviv_gem_object *);
80 void (*release)(struct etnaviv_gem_object *); 80 void (*release)(struct etnaviv_gem_object *);
81 void *(*vmap)(struct etnaviv_gem_object *); 81 void *(*vmap)(struct etnaviv_gem_object *);
82 int (*mmap)(struct etnaviv_gem_object *, struct vm_area_struct *);
82}; 83};
83 84
84static inline bool is_active(struct etnaviv_gem_object *etnaviv_obj) 85static inline bool is_active(struct etnaviv_gem_object *etnaviv_obj)
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c b/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c
index 4e67395f5fa1..b93618c1aa69 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c
@@ -84,10 +84,17 @@ static void *etnaviv_gem_prime_vmap_impl(struct etnaviv_gem_object *etnaviv_obj)
84 return dma_buf_vmap(etnaviv_obj->base.import_attach->dmabuf); 84 return dma_buf_vmap(etnaviv_obj->base.import_attach->dmabuf);
85} 85}
86 86
87static int etnaviv_gem_prime_mmap_obj(struct etnaviv_gem_object *etnaviv_obj,
88 struct vm_area_struct *vma)
89{
90 return dma_buf_mmap(etnaviv_obj->base.dma_buf, vma, 0);
91}
92
87static const struct etnaviv_gem_ops etnaviv_gem_prime_ops = { 93static const struct etnaviv_gem_ops etnaviv_gem_prime_ops = {
88 /* .get_pages should never be called */ 94 /* .get_pages should never be called */
89 .release = etnaviv_gem_prime_release, 95 .release = etnaviv_gem_prime_release,
90 .vmap = etnaviv_gem_prime_vmap_impl, 96 .vmap = etnaviv_gem_prime_vmap_impl,
97 .mmap = etnaviv_gem_prime_mmap_obj,
91}; 98};
92 99
93struct drm_gem_object *etnaviv_gem_prime_import_sg_table(struct drm_device *dev, 100struct drm_gem_object *etnaviv_gem_prime_import_sg_table(struct drm_device *dev,
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
index d8a9a9c68e98..ff6aa5dfb2d7 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
@@ -1528,8 +1528,8 @@ static int etnaviv_gpu_bind(struct device *dev, struct device *master,
1528 INIT_WORK(&gpu->recover_work, recover_worker); 1528 INIT_WORK(&gpu->recover_work, recover_worker);
1529 init_waitqueue_head(&gpu->fence_event); 1529 init_waitqueue_head(&gpu->fence_event);
1530 1530
1531 setup_timer(&gpu->hangcheck_timer, hangcheck_handler, 1531 setup_deferrable_timer(&gpu->hangcheck_timer, hangcheck_handler,
1532 (unsigned long)gpu); 1532 (unsigned long)gpu);
1533 1533
1534 priv->gpu[priv->num_gpus++] = gpu; 1534 priv->gpu[priv->num_gpus++] = gpu;
1535 1535