[PATCH v2 00/17] Share TTM code among DRM framebuffer drivers

Daniel Vetter daniel at ffwll.ch
Wed Apr 24 13:09:15 UTC 2019


On Wed, Apr 24, 2019 at 01:48:25PM +0200, Thomas Zimmermann wrote:
> Several simple framebuffer drivers copy most of the TTM code from each
> other. The implementation is always the same; except for the name of
> some data structures.
> 
> As recently discussed, this patch set provides generic memory-management
> code for simple framebuffers with dedicated video memory. It further
> converts the respective drivers to the generic code. The shared code
> is basically the same implementation as the one copied among individual
> drivers.
> 
> The patch set contains two major changes: first, it introduces
> |struct drm_gem_vram_object| and helpers (GEM VRAM). It's a GEM object
> that is backed by VRAM. The type's purpose is somewhat similar to
> |struct drm_gem_{cma, shmem}_object|: it provides an commom implementation
> that handles all the basic cases. Second, the patch set introduces
> |struct drm_vram_mm| and helpers (VRAM MM). It's an implementation of a
> basic memory manager for VRAM.
> 
> Both, GEM VRAM and VRAM MM, support buffer placement in VRAM and system
> memory. Both can be used independedly from each other if desired by the
> DRM driver.
> 
> Currently ast, bochs, mgag200, vboxvideo and hisilicon/hibmc can use
> these helpers.
> 
> Future directions: with these changes, the respective drivers can also
> share some of their mode-setting or fbdev code. GEM VRAM could implement
> PRIME helpers, which would allow for using the generic fbcon.
> 
> The patch set is against a recent drm-tip.
> 
> v2:
> 	* rename |struct drm_gem_ttm_object| to |struct drm_gem_vram_object|
> 	* rename |struct drm_simple_ttm| to |struct drm_vram_mm|
> 	* make drm_is_gem_ttm() an internal helper
> 	* add drm_gem_vram_kmap_at()
> 	* return is_iomem from kmap functions
> 	* redefine TTM placement flags for public interface
> 	* add drm_vram_mm_mmap() helper
> 	* replace almost all of driver's TTM code with these helpers
> 	* documentation fixes

I think this looks greats. A bunch of small ideas as replies how to futher
streamline/simplify the helper api. But since I'm not a vram/ttm/gem
helper expert really I think I'll leave final review/merging to others. I
think there's enough interest in your work to make that work smoothly, if
not pls pipe up.

Cheers, Daniel

> 
> Thomas Zimmermann (17):
>   drm: Add |struct drm_gem_vram_object| and helpers
>   drm: Add |struct drm_gem_vram_object| callbacks for |struct
>     ttm_bo_driver|
>   drm: Add |struct drm_gem_vram_object| callbacks for |struct
>     drm_driver|
>   drm: Add drm_gem_vram_fill_create_dumb() to create dumb buffers
>   drm: Add VRAM MM, a simple memory manager for dedicated VRAM
>   drm/ast: Convert AST driver to |struct drm_gem_vram_object|
>   drm/ast: Convert AST driver to VRAM MM
>   drm/ast: Replace mapping code with drm_gem_vram_{kmap/kunmap}()
>   drm/bochs: Convert bochs driver to |struct drm_gem_vram_object|
>   drm/bochs: Convert bochs driver to VRAM MM
>   drm/mgag200: Convert mgag200 driver to |struct drm_gem_vram_object|
>   drm/mgag200: Convert mgag200 driver to VRAM MM
>   drm/mgag200: Replace mapping code with drm_gem_vram_{kmap/kunmap}()
>   drm/vboxvideo: Convert vboxvideo driver to |struct
>     drm_gem_vram_object|
>   drm/vboxvideo: Convert vboxvideo driver to VRAM MM
>   drm/hisilicon: Convert hibmc-drm driver to |struct
>     drm_gem_vram_object|
>   drm/hisilicon: Convert hibmc-drm driver to VRAM MM
> 
>  Documentation/gpu/drm-mm.rst                  |  25 +-
>  drivers/gpu/drm/Kconfig                       |  20 +
>  drivers/gpu/drm/Makefile                      |   5 +
>  drivers/gpu/drm/ast/Kconfig                   |   3 +-
>  drivers/gpu/drm/ast/ast_drv.c                 |   4 +-
>  drivers/gpu/drm/ast/ast_drv.h                 |  65 +-
>  drivers/gpu/drm/ast/ast_fb.c                  |  30 +-
>  drivers/gpu/drm/ast/ast_main.c                |  74 +--
>  drivers/gpu/drm/ast/ast_mode.c                | 124 ++--
>  drivers/gpu/drm/ast/ast_ttm.c                 | 293 +--------
>  drivers/gpu/drm/bochs/Kconfig                 |   2 +
>  drivers/gpu/drm/bochs/bochs.h                 |  45 +-
>  drivers/gpu/drm/bochs/bochs_drv.c             |   4 +-
>  drivers/gpu/drm/bochs/bochs_kms.c             |  18 +-
>  drivers/gpu/drm/bochs/bochs_mm.c              | 395 +-----------
>  drivers/gpu/drm/drm_gem_vram_helper.c         | 570 ++++++++++++++++++
>  drivers/gpu/drm/drm_vram_helper_common.c      |   6 +
>  drivers/gpu/drm/drm_vram_mm_helper.c          | 210 +++++++
>  drivers/gpu/drm/hisilicon/hibmc/Kconfig       |   2 +
>  .../gpu/drm/hisilicon/hibmc/hibmc_drm_de.c    |  21 +-
>  .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c   |   5 +-
>  .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h   |  32 +-
>  .../gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c |  30 +-
>  drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c   | 329 +---------
>  drivers/gpu/drm/mgag200/Kconfig               |   2 +
>  drivers/gpu/drm/mgag200/mgag200_cursor.c      |  88 +--
>  drivers/gpu/drm/mgag200/mgag200_drv.c         |   4 +-
>  drivers/gpu/drm/mgag200/mgag200_drv.h         |  74 +--
>  drivers/gpu/drm/mgag200/mgag200_fb.c          |  30 +-
>  drivers/gpu/drm/mgag200/mgag200_main.c        |  84 +--
>  drivers/gpu/drm/mgag200/mgag200_mode.c        |  52 +-
>  drivers/gpu/drm/mgag200/mgag200_ttm.c         | 293 +--------
>  drivers/gpu/drm/vboxvideo/Kconfig             |   2 +
>  drivers/gpu/drm/vboxvideo/vbox_drv.c          |   5 +-
>  drivers/gpu/drm/vboxvideo/vbox_drv.h          |  68 +--
>  drivers/gpu/drm/vboxvideo/vbox_fb.c           |  22 +-
>  drivers/gpu/drm/vboxvideo/vbox_main.c         |  70 +--
>  drivers/gpu/drm/vboxvideo/vbox_mode.c         |  36 +-
>  drivers/gpu/drm/vboxvideo/vbox_ttm.c          | 347 +----------
>  include/drm/drm_gem_vram_helper.h             | 120 ++++
>  include/drm/drm_vram_mm_helper.h              |  67 ++
>  41 files changed, 1445 insertions(+), 2231 deletions(-)
>  create mode 100644 drivers/gpu/drm/drm_gem_vram_helper.c
>  create mode 100644 drivers/gpu/drm/drm_vram_helper_common.c
>  create mode 100644 drivers/gpu/drm/drm_vram_mm_helper.c
>  create mode 100644 include/drm/drm_gem_vram_helper.h
>  create mode 100644 include/drm/drm_vram_mm_helper.h
> 
> --
> 2.21.0
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the dri-devel mailing list