14 Sep, 2020

1 commit

  • VRAM helpers support ref counting for pin and vmap operations, no need
    to avoid these operations by employing the internal kmap interface. Just
    use drm_gem_vram_vmap() and let it handle the details.

    Also unexport the kmap interfaces from VRAM helpers. Vboxvideo was the
    last user of these internal functions.

    v2:
    * fixed a comma in commit description

    Signed-off-by: Thomas Zimmermann
    Reviewed-by: Daniel Vetter
    Tested-by: Hans de Goede
    Link: https://patchwork.freedesktop.org/patch/msgid/20200911075922.19317-1-tzimmermann@suse.de

    Thomas Zimmermann
     

11 Sep, 2020

1 commit


20 Jul, 2020

1 commit

  • Calling drmm_vram_helper_init() sets up a managed instance of
    VRAM MM. Releasing the DRM device also frees the memory manager.

    The patch also updates the DRM documentation for VRAM helpers. The
    tutorial now describes the new managed interface. The old interfaces
    are deprecated and should not be used in new code.

    v2:
    * rename init function to drmm_vram_helper_init()
    * return errno code from init function; caller does not
    need vram_mm anyway
    * update documentation and remove docs for deprecated
    un-managed functions

    Signed-off-by: Thomas Zimmermann
    Reviewed-by: Sam Ravnborg
    Link: https://patchwork.freedesktop.org/patch/msgid/20200716125353.31512-2-tzimmermann@suse.de

    Thomas Zimmermann
     

19 Mar, 2020

1 commit

  • As a result of commit 987d65d01356 (drm: debugfs: make
    drm_debugfs_create_files() never fail) and changes to various debugfs
    functions in drm/core and across various drivers, there is no need for
    the drm_driver.debugfs_init() hook to have a return value. Therefore,
    declare it as void.

    This also includes refactoring all users of the .debugfs_init() hook to
    return void across the subsystem.

    v2: include changes to the hook and drivers that use it in one patch to
    prevent driver breakage and enable individual successful compilation of
    this change.

    References: https://lists.freedesktop.org/archives/dri-devel/2020-February/257183.html
    Signed-off-by: Wambui Karuga
    Reviewed-by: Greg Kroah-Hartman
    Signed-off-by: Daniel Vetter
    Link: https://patchwork.freedesktop.org/patch/msgid/20200310133121.27913-18-wambui.karugax@gmail.com

    Wambui Karuga
     

06 Feb, 2020

1 commit

  • Devices with low amount of dedicated video memory may not be able
    to use all possible display modes, as the framebuffers may not fit
    into VRAM. The new helper function drm_vram_helper_mode_valid()
    implements a simple test to sort out all display modes that can
    not be used in any case. Drivers should call this function from
    struct drm_mode_config_funcs.mode_valid.

    The functionality was originally implemented by the ast driver, which
    is being converted as well.

    v2:
    * WARN_ON if VRAM memory manager has not been initialized
    * documentation fixes
    * unexported drm_vram_helper_mode_valid_internal()

    Signed-off-by: Thomas Zimmermann
    Reviewed-by: Daniel Vetter
    Link: https://patchwork.freedesktop.org/patch/msgid/20200203155258.9346-2-tzimmermann@suse.de

    Thomas Zimmermann
     

07 Jan, 2020

2 commits

  • TTM is an implementation detail of the VRAM helpers and therefore
    shouldn't be exposed to the callers. There's only one correct value
    for the BO device anyway, which is the one stored in the DRM device.

    So remove struct ttm_bo_device from the VRAM-helper interface and
    use the device's VRAM manager unconditionally. The GEM initializer
    function fails if the VRAM manager has not been initialized.

    Signed-off-by: Thomas Zimmermann
    Reviewed-by: Daniel Vetter
    Acked-by: Sam Ravnborg
    Link: https://patchwork.freedesktop.org/patch/msgid/20200106125745.13797-8-tzimmermann@suse.de

    Thomas Zimmermann
     
  • The flag 'interruptible', which is passed to various functions,
    is always set to be false. Remove it and hard-code the value.

    Signed-off-by: Thomas Zimmermann
    Suggested-by: Daniel Vetter
    Reviewed-by: Daniel Vetter
    Acked-by: Sam Ravnborg
    Link: https://patchwork.freedesktop.org/patch/msgid/20200106125745.13797-7-tzimmermann@suse.de

    Thomas Zimmermann
     

06 Jan, 2020

1 commit

  • Adding the pitch alignment as an argument to
    drm_gem_vram_fill_create_dumb() allows to align scanlines to certain
    offsets. A value of 0 disables scanline pitches.

    v3:
    * only do power-of-2 test if pitch_align given; fails otherwise
    * mgag200: call drm_gem_vram_fill_create_dumb() with pitch_align
    v2:
    * split of patch from related hibmc changes
    * test if scanline pitch is power of 2

    Signed-off-by: Thomas Zimmermann
    Reviewed-by: Daniel Vetter
    Acked-by: Sam Ravnborg
    Link: https://patchwork.freedesktop.org/patch/msgid/20191203083819.6643-4-tzimmermann@suse.de

    Thomas Zimmermann
     

27 Nov, 2019

1 commit

  • Commit b0e40e080522 ("vram: Have VRAM MM call GEM VRAM functions directly")
    removed this.

    Signed-off-by: Gurchetan Singh
    Signed-off-by: Thomas Zimmermann
    Reviewed-by: Thomas Zimmermann
    Fixes: b0e40e080522 ("drm/vram: Have VRAM MM call GEM VRAM functions directly")
    Cc: Gerd Hoffmann
    Cc: Dave Airlie
    Cc: Maarten Lankhorst
    Cc: Maxime Ripard
    Cc: David Airlie
    Cc: Daniel Vetter
    Cc: Hans de Goede
    Cc: "Christian König"
    Cc: Alex Deucher
    Cc: Sam Ravnborg
    Cc: Thomas Gleixner
    Cc: virtualization@lists.linux-foundation.org
    Cc: dri-devel@lists.freedesktop.org
    Link: https://patchwork.freedesktop.org/patch/msgid/20191126184339.337-1-gurchetansingh@chromium.org

    Gurchetan Singh
     

24 Oct, 2019

1 commit

  • The new helpers pin and unpin a framebuffer's GEM VRAM objects during
    plane updates. This should be sufficient for most drivers' implementation
    of prepare_fb() and cleanup_fb().

    v2:
    * provide helpers for struct drm_simple_display_pipe_funcs
    * rename plane-helper funcs

    Signed-off-by: Thomas Zimmermann
    Reviewed-by: Daniel Vetter
    Link: https://patchwork.freedesktop.org/patch/msgid/20191024081404.6978-2-tzimmermann@suse.de

    Thomas Zimmermann
     

17 Oct, 2019

2 commits

  • Not needed any more because we don't have vram specific fops
    any more. DEFINE_DRM_GEM_FOPS() can be used instead.

    Signed-off-by: Gerd Hoffmann
    Reviewed-by: Thomas Zimmermann
    Acked-by: Daniel Vetter
    Link: http://patchwork.freedesktop.org/patch/msgid/20191016115203.20095-12-kraxel@redhat.com

    Gerd Hoffmann
     
  • Wire up the new drm_gem_ttm_mmap() helper function,
    use generic drm_gem_mmap for &fops.mmap and
    delete dead drm_vram_mm_file_operations_mmap().

    Signed-off-by: Gerd Hoffmann
    Reviewed-by: Thomas Zimmermann
    Acked-by: Daniel Vetter
    Link: http://patchwork.freedesktop.org/patch/msgid/20191016115203.20095-10-kraxel@redhat.com

    Gerd Hoffmann
     

27 Sep, 2019

1 commit

  • Pinning lots of small buffer objects, such as cursors or sprites, to video
    memory can lead to fragmentation, which is a problem for devices with only
    a small amount of memory. As a result, framebuffer images might not get
    pinned, even though there's enough space available overall.

    The flag DRM_GEM_VRAM_PL_FLAG_TOPDOWN marks buffer objects to be pinned at
    the high end of video memory. This leaves contiguous space available at
    the memory's low end.

    Signed-off-by: Thomas Zimmermann
    Link: https://patchwork.freedesktop.org/patch/msgid/20190923172753.26593-2-tzimmermann@suse.de
    Reviewed-by: Gerd Hoffmann

    Thomas Zimmermann
     

17 Sep, 2019

1 commit

  • The implementation of vmap and vunmap for GEM VRAM helpers is
    already in PRIME helpers. The patch moves the operations to separate
    functions and exports them for general use.

    v3:
    * remove v2's obsolete note on ref-counting
    v2:
    * fix documentation
    * add cross references to function documentation
    * document (the lack of) ref-counting for GEM VRAM BO mappings

    Signed-off-by: Thomas Zimmermann
    Acked-by: Gerd Hoffmann
    Link: https://patchwork.freedesktop.org/patch/msgid/20190911120352.20084-2-tzimmermann@suse.de

    Thomas Zimmermann
     

13 Sep, 2019

3 commits

  • The init, cleanup and mmap functions of VRAM MM are only used internally.
    Remove them from the public interface.

    v2:
    * update for debugfs support

    Signed-off-by: Thomas Zimmermann
    Acked-by: Gerd Hoffmann
    Link: https://patchwork.freedesktop.org/patch/msgid/20190911110910.30698-4-tzimmermann@suse.de

    Thomas Zimmermann
     
  • VRAM MM and GEM VRAM buffer objects are only used with each other;
    connected via 3 function pointers. Simplify this code by making the
    memory manager call the rsp. functions of the BOs directly; and
    remove the functions from the BO's public interface.

    v2:
    * typos in commit message

    Signed-off-by: Thomas Zimmermann
    Acked-by: Gerd Hoffmann
    Link: https://patchwork.freedesktop.org/patch/msgid/20190911110910.30698-3-tzimmermann@suse.de

    Thomas Zimmermann
     
  • The separation between GEM VRAM objects and the memory manager is
    artificial, as they are only used with each other. Copying both
    implementations into the same file is a first step to simplifying
    the code.

    This patch only moves code without functional changes.

    v3:
    * update to use dev->vma_offset_manager
    v2:
    * update for debugfs support
    * typos in commit message

    Signed-off-by: Thomas Zimmermann
    Acked-by: Gerd Hoffmann
    Link: https://patchwork.freedesktop.org/patch/msgid/20190911110910.30698-2-tzimmermann@suse.de

    Thomas Zimmermann
     

10 Sep, 2019

1 commit

  • Wire up drm_mm_print() for vram helpers, using a new
    debugfs file, so one can see how vram is used:

    # cat /sys/kernel/debug/dri/0/vram-mm
    0x0000000000000000-0x0000000000000300: 768: used
    0x0000000000000300-0x0000000000000600: 768: used
    0x0000000000000600-0x0000000000000900: 768: used
    0x0000000000000900-0x0000000000000c00: 768: used
    0x0000000000000c00-0x0000000000004000: 13312: free
    total: 16384, used 3072 free 13312

    Signed-off-by: Gerd Hoffmann
    Acked-by: Thomas Zimmermann
    Link: http://patchwork.freedesktop.org/patch/msgid/20190904054740.20817-5-kraxel@redhat.com

    Gerd Hoffmann
     

09 Sep, 2019

2 commits

  • Frequent mapping and unmapping a buffer object adds overhead for
    modifying the page table and creates debug output. Unmapping a buffer
    is only required when the memory manager evicts the buffer from its
    current location.

    v4:
    * WARN_ON if buffer is still mapped during BO cleanup

    Signed-off-by: Thomas Zimmermann
    Reviewed-by: Gerd Hoffmann
    Acked-by: Daniel Vetter
    Reported-and-tested-by: Davidlohr Bueso
    Link: https://patchwork.freedesktop.org/patch/msgid/20190906122056.32018-5-tzimmermann@suse.de

    Thomas Zimmermann
     
  • The kmap and kunmap operations of GEM VRAM buffers can now be called
    in interleaving pairs. The first call to drm_gem_vram_kmap() maps the
    buffer's memory to kernel address space and the final call to
    drm_gem_vram_kunmap() unmaps the memory. Intermediate calls to these
    functions increment or decrement a reference counter.

    This change allows for keeping buffer memory mapped for longer and
    minimizes the amount of changes to TLB, page tables, etc.

    v4:
    * lock in kmap()/kunmap() with ttm_bo_reserve()

    Signed-off-by: Thomas Zimmermann
    Reviewed-by: Gerd Hoffmann
    Acked-by: Daniel Vetter
    Reported-and-tested-by: Davidlohr Bueso
    Cc: Davidlohr Bueso
    Link: https://patchwork.freedesktop.org/patch/msgid/20190906122056.32018-2-tzimmermann@suse.de

    Thomas Zimmermann
     

06 Aug, 2019

1 commit

  • Drop drm_gem_object from drm_gem_vram_object, use the
    ttm_buffer_object.base instead.

    Signed-off-by: Gerd Hoffmann
    Reviewed-by: Christian König
    Acked-by: Thomas Zimmermann
    Link: http://patchwork.freedesktop.org/patch/msgid/20190805140119.7337-3-kraxel@redhat.com

    Gerd Hoffmann
     

03 Jul, 2019

2 commits

  • PRIME functionality is now provided by GEM object functions. The driver
    callback functions are obsolete. So this patch renames them and turns
    them into static internal functions of the VRAM helper library. The
    implementation of gem_prime_mmap is now unused and the patch removes it.

    v3:
    * kept each renamed function at its original location within file
    * kept documentation

    Signed-off-by: Thomas Zimmermann
    Reviewed-by: Emil Velikov
    Reviewed-by: Gerd Hoffmann
    Link: https://patchwork.freedesktop.org/patch/msgid/20190702115012.4418-6-tzimmermann@suse.de

    Thomas Zimmermann
     
  • PRIME functionality is now provided via the callback functions in
    struct drm_gem_object_funcs. The driver-structure functions are obsolete.
    As a side effect of this patch, VRAM-based drivers get basic PRIME
    support automatically without having to set any flags or additional
    fields.

    v2:
    - use existing PRIME functions for object's table
    v3:
    - move object table to EOF so it can refer to internal interfaces

    Signed-off-by: Thomas Zimmermann
    Reviewed-by: Emil Velikov
    Reviewed-by: Gerd Hoffmann
    Link: https://patchwork.freedesktop.org/patch/msgid/20190702115012.4418-2-tzimmermann@suse.de

    Thomas Zimmermann
     

22 Jun, 2019

1 commit

  • They're the default.

    Aside: Would be really nice to switch the others over to
    drm_gem_object_funcs.

    Reviewed-by: Eric Anholt
    Reviewed-by: Emil Velikov
    Acked-by: Gerd Hoffmann
    Signed-off-by: Daniel Vetter
    Cc: Maarten Lankhorst
    Cc: Maxime Ripard
    Cc: Sean Paul
    Cc: David Airlie
    Cc: Daniel Vetter
    Cc: Thomas Zimmermann
    Cc: Gerd Hoffmann
    Link: https://patchwork.freedesktop.org/patch/msgid/20190614203615.12639-41-daniel.vetter@ffwll.ch

    Daniel Vetter
     

13 Jun, 2019

2 commits


22 May, 2019

2 commits

  • To align with the rest of DRM terminology, the GEM VRAM helpers now use
    lock and unlock in places where reserve and unreserve where used before.
    All callers have been adapted.

    Signed-off-by: Thomas Zimmermann
    Acked-by: Daniel Vetter
    Link: http://patchwork.freedesktop.org/patch/msgid/20190521110831.20200-3-tzimmermann@suse.de
    Signed-off-by: Gerd Hoffmann

    Thomas Zimmermann
     
  • The push-to-system function forces a buffer out of video RAM. This decision
    should rather be made by the memory manager. By replacing the function with
    calls to the kunmap and unpin functions, the buffer's memory becomes available,
    but the buffer remains in VRAM until it's evicted by a pin operation.

    This patch replaces the remaining instances of drm_gem_vram_push_to_system()
    in ast and mgag200, and removes the function from DRM.

    Signed-off-by: Thomas Zimmermann
    Acked-by: Daniel Vetter
    Link: http://patchwork.freedesktop.org/patch/msgid/20190521110831.20200-2-tzimmermann@suse.de
    Signed-off-by: Gerd Hoffmann

    Thomas Zimmermann
     

17 May, 2019

1 commit

  • The new interfaces drm_gem_vram_{pin/unpin}_reserved() are variants of the
    GEM VRAM pin/unpin functions that do not reserve the BO during validation.
    The mgag200 driver requires this behavior for its cursor handling. The
    patch also converts the driver to use the new interfaces.

    Signed-off-by: Thomas Zimmermann
    Link: http://patchwork.freedesktop.org/patch/msgid/20190516162746.11636-2-tzimmermann@suse.de
    Signed-off-by: Gerd Hoffmann

    Thomas Zimmermann
     

15 May, 2019

7 commits

  • There's now a pointer to struct drm_vram_mm stored in struct drm_device.
    DRM drivers that use VRAM MM should use this field to refer to their
    instance of the data structure. Appropriate helpers are now provided as
    well.

    Adding struct drm_vram_mm to struct drm_device further avoids wrappers
    and boilerplate code in drivers. This patch implements default functions
    for callbacks in struct drm_driver and struct file_operations that use
    the struct drm_vram_mm stored in struct drm_device. Drivers that need to
    provide their own implementations can still do so.

    The patch also adds documentation for the VRAM helper library in general.

    v5:
    * set .llseek to no_llseek() from DRM_VRAM_MM_FILE_OPERATIONS
    v4:
    * cleanups from checkpatch.pl
    * document VRAM helper library

    Signed-off-by: Thomas Zimmermann
    Link: http://patchwork.freedesktop.org/patch/msgid/20190508082630.15116-9-tzimmermann@suse.de
    Signed-off-by: Gerd Hoffmann

    Thomas Zimmermann
     
  • VRAM MM is most likely be used with GEM VRAM. The latter now provides the
    required instance of struct drm_vram_mm_funcs for drivers to use.

    Signed-off-by: Thomas Zimmermann
    Link: http://patchwork.freedesktop.org/patch/msgid/20190508082630.15116-8-tzimmermann@suse.de
    Signed-off-by: Gerd Hoffmann

    Thomas Zimmermann
     
  • These basic helper functions for GEM VRAM allow for pinning and mapping
    GEM VRAM objects via the PRIME interfaces. It's not a full implementation,
    but complete enough for generic fbcon.

    Signed-off-by: Thomas Zimmermann
    Link: http://patchwork.freedesktop.org/patch/msgid/20190508082630.15116-6-tzimmermann@suse.de
    Signed-off-by: Gerd Hoffmann

    Thomas Zimmermann
     
  • The helper function drm_gem_vram_fill_create_dumb() implements most of
    struct drm_driver.dumb_create() for GEM-VRAM buffer objects. It's not a
    full implementation of the callback, as several driver-specific parameters
    are still required.

    v4:
    * cleanups from checkpatch.pl
    v2:
    * documentation fixes

    Signed-off-by: Thomas Zimmermann
    Link: http://patchwork.freedesktop.org/patch/msgid/20190508082630.15116-5-tzimmermann@suse.de
    Signed-off-by: Gerd Hoffmann

    Thomas Zimmermann
     
  • The provided helpers can be used for the respective callback functions
    in |struct drm_driver|.

    v4:
    * cleanups from checkpatch.pl
    v2:
    * documentation fixes

    Signed-off-by: Thomas Zimmermann
    Link: http://patchwork.freedesktop.org/patch/msgid/20190508082630.15116-4-tzimmermann@suse.de
    Signed-off-by: Gerd Hoffmann

    Thomas Zimmermann
     
  • The provided helpers can be used for the respective callback functions
    in |struct ttm_bo_driver|.

    v2:
    * drm_is_gem_vram() is now a private function
    * documentation fixes

    Signed-off-by: Thomas Zimmermann
    Link: http://patchwork.freedesktop.org/patch/msgid/20190508082630.15116-3-tzimmermann@suse.de
    Signed-off-by: Gerd Hoffmann

    Thomas Zimmermann
     
  • The type |struct drm_gem_vram_object| implements a GEM object for simple
    framebuffer devices with dedicated video memory. The BO is either located
    in VRAM or system memory.

    The implementation has been created from the respective code in ast,
    bochs and mgag200. These drivers copy their implementation from each
    other; except for the names of several data types. The helpers are
    currently build with TTM, but this is considered an implementation
    detail and may change in future updates.

    v5:
    * do WARN_ON_ONCE for pin-count mismatches
    * allocate only 2 entries in placements array
    v4:
    * cleanups from checkpatch.pl
    * removed several fixed-size types from interfaces
    * DRM_VRAM_HELPER now selects DRM_TTM
    * remove separate config option for GEM VRAM
    v2:
    * rename to |struct drm_gem_vram_object|
    * move drm_is_gem_ttm() to a later patch in the series
    * add drm_gem_vram_kmap_at()
    * return is_iomem from kmap functions
    * redefine TTM placement flags for public interface
    * documentation fixes

    Signed-off-by: Thomas Zimmermann
    Link: http://patchwork.freedesktop.org/patch/msgid/20190508082630.15116-2-tzimmermann@suse.de
    Signed-off-by: Gerd Hoffmann

    Thomas Zimmermann