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 _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization