Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 21 Mar 2016 20:48:00 +0000 (13:48 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 21 Mar 2016 20:48:00 +0000 (13:48 -0700)
Pull drm updates from Dave Airlie:
 "This is the main drm pull request for 4.6 kernel.

  Overall the coolest thing here for me is the nouveau maxwell signed
  firmware support from NVidia, it's taken a long while to extract this
  from them.

  I also wish the ARM vendors just designed one set of display IP, ARM
  display block proliferation is definitely increasing.

  Core:
     - drm_event cleanups
     - Internal API cleanup making mode_fixup optional.
     - Apple GMUX vga switcheroo support.
     - DP AUX testing interface

  Panel:
     - Refactoring of DSI core for use over more transports.

  New driver:
     - ARM hdlcd driver

  i915:
     - FBC/PSR (framebuffer compression, panel self refresh) enabled by default.
     - Ongoing atomic display support work
     - Ongoing runtime PM work
     - Pixel clock limit checks
     - VBT DSI description support
     - GEM fixes
     - GuC firmware scheduler enhancements

  amdkfd:
     - Deferred probing fixes to avoid make file or link ordering.

  amdgpu/radeon:
     - ACP support for i2s audio support.
     - Command Submission/GPU scheduler/GPUVM optimisations
     - Initial GPU reset support for amdgpu

  vmwgfx:
     - Support for DX10 gen mipmaps
     - Pageflipping and other fixes.

  exynos:
     - Exynos5420 SoC support for FIMD
     - Exynos5422 SoC support for MIPI-DSI

  nouveau:
     - GM20x secure boot support - adds acceleration for Maxwell GPUs.
     - GM200 support
     - GM20B clock driver support
     - Power sensors work

  etnaviv:
     - Correctness fixes for GPU cache flushing
     - Better support for i.MX6 systems.

  imx-drm:
     - VBlank IRQ support
     - Fence support
     - OF endpoint support

  msm:
     - HDMI support for 8996 (snapdragon 820)
     - Adreno 430 support
     - Timestamp queries support

  virtio-gpu:
     - Fixes for Android support.

  rockchip:
     - Add support for Innosilicion HDMI

  rcar-du:
     - Support for 4 crtcs
     - R8A7795 support
     - RCar Gen 3 support

  omapdrm:
     - HDMI interlace output support
     - dma-buf import support
     - Refactoring to remove a lot of legacy code.

  tilcdc:
     - Rewrite of pageflipping code
     - dma-buf support
     - pinctrl support

  vc4:
     - HDMI modesetting bug fixes
     - Significant 3D performance improvement.

  fsl-dcu (FreeScale):
     - Lots of fixes

  tegra:
     - Two small fixes

  sti:
     - Atomic support for planes
     - Improved HDMI support"

* 'drm-next' of git://people.freedesktop.org/~airlied/linux: (1063 commits)
  drm/amdgpu: release_pages requires linux/pagemap.h
  drm/sti: restore mode_fixup callback
  drm/amdgpu/gfx7: add MTYPE definition
  drm/amdgpu: removing BO_VAs shouldn't be interruptible
  drm/amd/powerplay: show uvd/vce power gate enablement for tonga.
  drm/amd/powerplay: show uvd/vce power gate info for fiji
  drm/amdgpu: use sched fence if possible
  drm/amdgpu: move ib.fence to job.fence
  drm/amdgpu: give a fence param to ib_free
  drm/amdgpu: include the right version of gmc header files for iceland
  drm/radeon: fix indentation.
  drm/amd/powerplay: add uvd/vce dpm enabling flag to fix the performance issue for CZ
  drm/amdgpu: switch back to 32bit hw fences v2
  drm/amdgpu: remove amdgpu_fence_is_signaled
  drm/amdgpu: drop the extra fence range check v2
  drm/amdgpu: signal fences directly in amdgpu_fence_process
  drm/amdgpu: cleanup amdgpu_fence_wait_empty v2
  drm/amdgpu: keep all fences in an RCU protected array v2
  drm/amdgpu: add number of hardware submissions to amdgpu_fence_driver_init_ring
  drm/amdgpu: RCU protected amd_sched_fence_release
  ...

14 files changed:
1  2 
MAINTAINERS
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
drivers/gpu/drm/etnaviv/etnaviv_gem.c
drivers/gpu/drm/etnaviv/etnaviv_gpu.c
drivers/gpu/drm/i915/i915_gem_userptr.c
drivers/gpu/drm/omapdrm/omap_dmm_tiler.c
drivers/gpu/drm/omapdrm/omap_gem.c
drivers/gpu/drm/sti/sti_cursor.c
drivers/gpu/drm/sti/sti_gdp.c
drivers/gpu/drm/sti/sti_hqvdp.c
drivers/gpu/drm/vc4/vc4_bo.c
drivers/gpu/host1x/job.c
drivers/staging/android/ion/ion.c
mm/swapfile.c

diff --cc MAINTAINERS
Simple merge
@@@ -516,9 -532,21 +532,20 @@@ int amdgpu_ttm_tt_get_user_pages(struc
        do {
                unsigned num_pages = ttm->num_pages - pinned;
                uint64_t userptr = gtt->userptr + pinned * PAGE_SIZE;
-               struct page **pages = ttm->pages + pinned;
+               struct page **p = pages + pinned;
+               struct amdgpu_ttm_gup_task_list guptask;
+               guptask.task = current;
+               spin_lock(&gtt->guptasklock);
+               list_add(&guptask.list, &gtt->guptasks);
+               spin_unlock(&gtt->guptasklock);
 -              r = get_user_pages(current, current->mm, userptr, num_pages,
 -                                 write, 0, p, NULL);
++              r = get_user_pages(userptr, num_pages, write, 0, p, NULL);
+               spin_lock(&gtt->guptasklock);
+               list_del(&guptask.list);
+               spin_unlock(&gtt->guptasklock);
  
-               r = get_user_pages(userptr, num_pages, write, 0, pages, NULL);
                if (r < 0)
                        goto release_pages;
  
Simple merge
Simple merge
@@@ -1324,22 -1305,23 +1305,23 @@@ void omap_gem_free_object(struct drm_ge
         */
        WARN_ON(omap_obj->paddr_cnt > 0);
  
-       /* don't free externally allocated backing memory */
-       if (!(omap_obj->flags & OMAP_BO_EXT_MEM)) {
-               if (omap_obj->pages)
+       if (omap_obj->pages) {
+               if (omap_obj->flags & OMAP_BO_MEM_DMABUF)
+                       kfree(omap_obj->pages);
+               else
                        omap_gem_detach_pages(obj);
+       }
  
-               if (!is_shmem(obj)) {
-                       dma_free_wc(dev->dev, obj->size, omap_obj->vaddr,
-                                   omap_obj->paddr);
-               } else if (omap_obj->vaddr) {
-                       vunmap(omap_obj->vaddr);
-               }
+       if (omap_obj->flags & OMAP_BO_MEM_DMA_API) {
 -              dma_free_writecombine(dev->dev, obj->size,
 -                              omap_obj->vaddr, omap_obj->paddr);
++              dma_free_wc(dev->dev, obj->size, omap_obj->vaddr,
++                          omap_obj->paddr);
+       } else if (omap_obj->vaddr) {
+               vunmap(omap_obj->vaddr);
+       } else if (obj->import_attach) {
+               drm_prime_gem_destroy(obj, omap_obj->sgt);
        }
  
-       /* don't free externally allocated syncobj */
-       if (!(omap_obj->flags & OMAP_BO_EXT_SYNC))
-               kfree(omap_obj->sync);
+       kfree(omap_obj->sync);
  
        drm_gem_object_release(obj);
  
@@@ -1428,10 -1410,25 +1410,25 @@@ struct drm_gem_object *omap_gem_new(str
                mapping_set_gfp_mask(mapping, GFP_USER | __GFP_DMA32);
        }
  
 -              omap_obj->vaddr = dma_alloc_writecombine(dev->dev, size,
 -                                                       &omap_obj->paddr,
 -                                                       GFP_KERNEL);
+       /* Allocate memory if needed. */
+       if (flags & OMAP_BO_MEM_DMA_API) {
++              omap_obj->vaddr = dma_alloc_wc(dev->dev, size,
++                                             &omap_obj->paddr,
++                                             GFP_KERNEL);
+               if (!omap_obj->vaddr)
+                       goto err_release;
+       }
+       spin_lock(&priv->list_lock);
+       list_add(&omap_obj->mm_list, &priv->obj_list);
+       spin_unlock(&priv->list_lock);
        return obj;
  
- fail:
-       omap_gem_free_object(obj);
+ err_release:
+       drm_gem_object_release(obj);
+ err_free:
+       kfree(omap_obj);
        return NULL;
  }
  
@@@ -162,13 -234,13 +232,13 @@@ static int sti_cursor_atomic_check(stru
  
                cursor->pixmap.size = cursor->width * cursor->height;
  
 -              cursor->pixmap.base = dma_alloc_writecombine(cursor->dev,
 -                                                      cursor->pixmap.size,
 -                                                      &cursor->pixmap.paddr,
 -                                                      GFP_KERNEL | GFP_DMA);
 +              cursor->pixmap.base = dma_alloc_wc(cursor->dev,
 +                                                 cursor->pixmap.size,
 +                                                 &cursor->pixmap.paddr,
 +                                                 GFP_KERNEL | GFP_DMA);
                if (!cursor->pixmap.base) {
                        DRM_ERROR("Failed to allocate memory for pixmap\n");
-                       return;
+                       return -EINVAL;
                }
        }
  
Simple merge
@@@ -617,9 -852,9 +852,9 @@@ static void sti_hqvdp_init(struct sti_h
  
        /* Allocate memory for the VDP commands */
        size = NB_VDP_CMD * sizeof(struct sti_hqvdp_cmd);
 -      hqvdp->hqvdp_cmd = dma_alloc_writecombine(hqvdp->dev, size,
 -                                       &dma_addr,
 -                                       GFP_KERNEL | GFP_DMA);
 +      hqvdp->hqvdp_cmd = dma_alloc_wc(hqvdp->dev, size,
-                                       &hqvdp->hqvdp_cmd_paddr,
++                                      &dma_addr,
 +                                      GFP_KERNEL | GFP_DMA);
        if (!hqvdp->hqvdp_cmd) {
                DRM_ERROR("Failed to allocate memory for VDP cmd\n");
                return;
Simple merge
Simple merge
Simple merge
diff --cc mm/swapfile.c
Simple merge