Merge tag 'drm-misc-next-2021-03-03' of git://anongit.freedesktop.org/drm/drm-misc...
authorDave Airlie <airlied@redhat.com>
Tue, 16 Mar 2021 06:45:12 +0000 (16:45 +1000)
committerDave Airlie <airlied@redhat.com>
Tue, 16 Mar 2021 07:08:46 +0000 (17:08 +1000)
drm-misc-next for 5.13:

UAPI Changes:

Cross-subsystem Changes:

Core Changes:
  - %p4cc printk format modifier
  - atomic: introduce drm_crtc_commit_wait, rework atomic plane state
    helpers to take the drm_commit_state structure
  - dma-buf: heaps rework to return a struct dma_buf
  - simple-kms: Add plate state helpers
  - ttm: debugfs support, removal of sysfs

Driver Changes:
  - Convert drivers to shadow plane helpers
  - arc: Move to drm/tiny
  - ast: cursor plane reworks
  - gma500: Remove TTM and medfield support
  - mxsfb: imx8mm support
  - panfrost: MMU IRQ handling rework
  - qxl: rework to better handle resources deallocation, locking
  - sun4i: Add alpha properties for UI and VI layers
  - vc4: RPi4 CEC support
  - vmwgfx: doc cleanup

Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Maxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20210303100600.dgnkadonzuvfnu22@gilmour
43 files changed:
1  2 
Documentation/devicetree/bindings/display/brcm,bcm2711-hdmi.yaml
Documentation/gpu/todo.rst
MAINTAINERS
drivers/dma-buf/heaps/cma_heap.c
drivers/gpu/drm/Kconfig
drivers/gpu/drm/amd/amdgpu/amdgpu.h
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
drivers/gpu/drm/drm_atomic_helper.c
drivers/gpu/drm/drm_dp_mst_topology.c
drivers/gpu/drm/drm_gem_vram_helper.c
drivers/gpu/drm/drm_plane.c
drivers/gpu/drm/drm_syncobj.c
drivers/gpu/drm/gma500/oaktrail_device.c
drivers/gpu/drm/gma500/psb_drv.h
drivers/gpu/drm/i915/display/intel_display.c
drivers/gpu/drm/i915/display/intel_display_debugfs.c
drivers/gpu/drm/i915/display/intel_sprite.c
drivers/gpu/drm/mediatek/mtk_drm_crtc.c
drivers/gpu/drm/mediatek/mtk_drm_crtc.h
drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
drivers/gpu/drm/nouveau/dispnv50/wndw.c
drivers/gpu/drm/nouveau/nouveau_bo.c
drivers/gpu/drm/nouveau/nouveau_drv.h
drivers/gpu/drm/qxl/qxl_display.c
drivers/gpu/drm/radeon/radeon.h
drivers/gpu/drm/radeon/radeon_ttm.c
drivers/gpu/drm/tegra/dc.c
drivers/gpu/drm/tegra/drm.c
drivers/gpu/drm/tegra/hub.c
drivers/gpu/drm/tiny/gm12u320.c
drivers/gpu/drm/ttm/ttm_bo.c
drivers/gpu/drm/ttm/ttm_pool.c
drivers/gpu/drm/vc4/vc4_plane.c
drivers/gpu/drm/xlnx/zynqmp_disp.c
drivers/media/v4l2-core/v4l2-ioctl.c
drivers/video/fbdev/amba-clcd.c
drivers/video/fbdev/omap2/omapfb/dss/dsi.c
include/linux/lockdep.h
lib/test_printf.c
lib/vsprintf.c
scripts/checkpatch.pl

Simple merge
diff --cc MAINTAINERS
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -387,7 -387,17 +387,16 @@@ int drm_syncobj_find_fence(struct drm_f
        if (!syncobj)
                return -ENOENT;
  
+       /* Waiting for userspace with locks help is illegal cause that can
+        * trivial deadlock with page faults for example. Make lockdep complain
+        * about it early on.
+        */
+       if (flags & DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT) {
+               might_sleep();
+               lockdep_assert_none_held_once();
+       }
        *fence = drm_syncobj_fence_get(syncobj);
 -      drm_syncobj_put(syncobj);
  
        if (*fence) {
                ret = dma_fence_chain_find_seqno(fence, point);
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -133,11 -92,10 +92,11 @@@ void ttm_bo_move_to_lru_tail(struct ttm
                             struct ttm_resource *mem,
                             struct ttm_lru_bulk_move *bulk)
  {
-       struct ttm_bo_device *bdev = bo->bdev;
+       struct ttm_device *bdev = bo->bdev;
        struct ttm_resource_manager *man;
  
 -      dma_resv_assert_held(bo->base.resv);
 +      if (!bo->deleted)
 +              dma_resv_assert_held(bo->base.resv);
  
        if (bo->pin_count) {
                ttm_bo_del_from_lru(bo);
@@@ -33,7 -33,7 +33,8 @@@
  
  #include <linux/module.h>
  #include <linux/dma-mapping.h>
 +#include <linux/highmem.h>
+ #include <linux/sched/mm.h>
  
  #ifdef CONFIG_X86
  #include <asm/set_memory.h>
@@@ -513,11 -494,14 +505,13 @@@ void ttm_pool_init(struct ttm_pool *poo
        pool->use_dma_alloc = use_dma_alloc;
        pool->use_dma32 = use_dma32;
  
-       for (i = 0; i < TTM_NUM_CACHING_TYPES; ++i)
-               for (j = 0; j < MAX_ORDER; ++j)
-                       ttm_pool_type_init(&pool->caching[i].orders[j],
-                                          pool, i, j);
+       if (use_dma_alloc) {
+               for (i = 0; i < TTM_NUM_CACHING_TYPES; ++i)
+                       for (j = 0; j < MAX_ORDER; ++j)
+                               ttm_pool_type_init(&pool->caching[i].orders[j],
+                                                  pool, i, j);
+       }
  }
 -EXPORT_SYMBOL(ttm_pool_init);
  
  /**
   * ttm_pool_fini - Cleanup a pool
@@@ -531,9 -515,34 +525,33 @@@ void ttm_pool_fini(struct ttm_pool *poo
  {
        unsigned int i, j;
  
-       for (i = 0; i < TTM_NUM_CACHING_TYPES; ++i)
-               for (j = 0; j < MAX_ORDER; ++j)
-                       ttm_pool_type_fini(&pool->caching[i].orders[j]);
+       if (pool->use_dma_alloc) {
+               for (i = 0; i < TTM_NUM_CACHING_TYPES; ++i)
+                       for (j = 0; j < MAX_ORDER; ++j)
+                               ttm_pool_type_fini(&pool->caching[i].orders[j]);
+       }
+ }
 -EXPORT_SYMBOL(ttm_pool_fini);
+ /* As long as pages are available make sure to release at least one */
+ static unsigned long ttm_pool_shrinker_scan(struct shrinker *shrink,
+                                           struct shrink_control *sc)
+ {
+       unsigned long num_freed = 0;
+       do
+               num_freed += ttm_pool_shrink();
+       while (!num_freed && atomic_long_read(&allocated_pages));
+       return num_freed;
+ }
+ /* Return the number of pages available or SHRINK_EMPTY if we have none */
+ static unsigned long ttm_pool_shrinker_count(struct shrinker *shrink,
+                                            struct shrink_control *sc)
+ {
+       unsigned long num_pages = atomic_long_read(&allocated_pages);
+       return num_pages ? num_pages : SHRINK_EMPTY;
  }
  
  #ifdef CONFIG_DEBUG_FS
@@@ -563,6 -583,35 +592,35 @@@ static void ttm_pool_debugfs_orders(str
        seq_puts(m, "\n");
  }
  
 -      spin_lock(&shrinker_lock);
+ /* Dump the total amount of allocated pages */
+ static void ttm_pool_debugfs_footer(struct seq_file *m)
+ {
+       seq_printf(m, "\ntotal\t: %8lu of %8lu\n",
+                  atomic_long_read(&allocated_pages), page_pool_size);
+ }
+ /* Dump the information for the global pools */
+ static int ttm_pool_debugfs_globals_show(struct seq_file *m, void *data)
+ {
+       ttm_pool_debugfs_header(m);
 -      spin_unlock(&shrinker_lock);
++      mutex_lock(&shrinker_lock);
+       seq_puts(m, "wc\t:");
+       ttm_pool_debugfs_orders(global_write_combined, m);
+       seq_puts(m, "uc\t:");
+       ttm_pool_debugfs_orders(global_uncached, m);
+       seq_puts(m, "wc 32\t:");
+       ttm_pool_debugfs_orders(global_dma32_write_combined, m);
+       seq_puts(m, "uc 32\t:");
+       ttm_pool_debugfs_orders(global_dma32_uncached, m);
++      mutex_unlock(&shrinker_lock);
+       ttm_pool_debugfs_footer(m);
+       return 0;
+ }
+ DEFINE_SHOW_ATTRIBUTE(ttm_pool_debugfs_globals);
  /**
   * ttm_pool_debugfs - Debugfs dump function for a pool
   *
@@@ -575,23 -624,14 +633,14 @@@ int ttm_pool_debugfs(struct ttm_pool *p
  {
        unsigned int i;
  
-       mutex_lock(&shrinker_lock);
-       seq_puts(m, "\t ");
-       for (i = 0; i < MAX_ORDER; ++i)
-               seq_printf(m, " ---%2u---", i);
-       seq_puts(m, "\n");
-       seq_puts(m, "wc\t:");
-       ttm_pool_debugfs_orders(global_write_combined, m);
-       seq_puts(m, "uc\t:");
-       ttm_pool_debugfs_orders(global_uncached, m);
+       if (!pool->use_dma_alloc) {
+               seq_puts(m, "unused\n");
+               return 0;
+       }
  
-       seq_puts(m, "wc 32\t:");
-       ttm_pool_debugfs_orders(global_dma32_write_combined, m);
-       seq_puts(m, "uc 32\t:");
-       ttm_pool_debugfs_orders(global_dma32_uncached, m);
+       ttm_pool_debugfs_header(m);
  
 -      spin_lock(&shrinker_lock);
++      mutex_lock(&shrinker_lock);
        for (i = 0; i < TTM_NUM_CACHING_TYPES; ++i) {
                seq_puts(m, "DMA ");
                switch (i) {
                }
                ttm_pool_debugfs_orders(pool->caching[i].orders, m);
        }
-       seq_printf(m, "\ntotal\t: %8lu of %8lu\n",
-                  atomic_long_read(&allocated_pages), page_pool_size);
 -      spin_unlock(&shrinker_lock);
 +      mutex_unlock(&shrinker_lock);
  
+       ttm_pool_debugfs_footer(m);
        return 0;
  }
  EXPORT_SYMBOL(ttm_pool_debugfs);
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -652,9 -644,28 +652,26 @@@ static void __init fwnode_pointer(void
        test(second_name, "%pfwP", software_node_fwnode(&softnodes[1]));
        test(third_name, "%pfwP", software_node_fwnode(&softnodes[2]));
  
 -      software_node_unregister(&softnodes[2]);
 -      software_node_unregister(&softnodes[1]);
 -      software_node_unregister(&softnodes[0]);
 +      software_node_unregister_nodes(softnodes);
  }
  
+ static void __init fourcc_pointer(void)
+ {
+       struct {
+               u32 code;
+               char *str;
+       } const try[] = {
+               { 0x3231564e, "NV12 little-endian (0x3231564e)", },
+               { 0xb231564e, "NV12 big-endian (0xb231564e)", },
+               { 0x10111213, ".... little-endian (0x10111213)", },
+               { 0x20303159, "Y10  little-endian (0x20303159)", },
+       };
+       unsigned int i;
+       for (i = 0; i < ARRAY_SIZE(try); i++)
+               test(try[i].str, "%p4cc", &try[i].code);
+ }
  static void __init
  errptr(void)
  {
diff --cc lib/vsprintf.c
Simple merge
Simple merge