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 descriptionSigned-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
11 Sep, 2020
1 commit
-
Those are going to be removed, stop using them here.
Instead define separate flags for the helper.
Signed-off-by: Christian König
Reviewed-by: Dave Airlie
Link: https://patchwork.freedesktop.org/patch/389823/?series=81551&rev=1
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 functionsSigned-off-by: Thomas Zimmermann
Reviewed-by: Sam Ravnborg
Link: https://patchwork.freedesktop.org/patch/msgid/20200716125353.31512-2-tzimmermann@suse.de
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
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
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 -
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
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 2Signed-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
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
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 funcsSigned-off-by: Thomas Zimmermann
Reviewed-by: Daniel Vetter
Link: https://patchwork.freedesktop.org/patch/msgid/20191024081404.6978-2-tzimmermann@suse.de
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 -
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
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
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 mappingsSigned-off-by: Thomas Zimmermann
Acked-by: Gerd Hoffmann
Link: https://patchwork.freedesktop.org/patch/msgid/20190911120352.20084-2-tzimmermann@suse.de
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 supportSigned-off-by: Thomas Zimmermann
Acked-by: Gerd Hoffmann
Link: https://patchwork.freedesktop.org/patch/msgid/20190911110910.30698-4-tzimmermann@suse.de -
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 messageSigned-off-by: Thomas Zimmermann
Acked-by: Gerd Hoffmann
Link: https://patchwork.freedesktop.org/patch/msgid/20190911110910.30698-3-tzimmermann@suse.de -
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 messageSigned-off-by: Thomas Zimmermann
Acked-by: Gerd Hoffmann
Link: https://patchwork.freedesktop.org/patch/msgid/20190911110910.30698-2-tzimmermann@suse.de
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 13312Signed-off-by: Gerd Hoffmann
Acked-by: Thomas Zimmermann
Link: http://patchwork.freedesktop.org/patch/msgid/20190904054740.20817-5-kraxel@redhat.com
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 cleanupSigned-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 -
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
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
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 documentationSigned-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 -
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 interfacesSigned-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
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
13 Jun, 2019
2 commits
-
The GEM VRAM functions with kmap-object argument are not required any
longer. Remove them.Signed-off-by: Thomas Zimmermann
Acked-by: Gerd Hoffmann
Link: https://patchwork.freedesktop.org/patch/msgid/20190613073041.29350-10-tzimmermann@suse.de -
The lock functions and the locked-pin/unpin functions of GEM VRAM are not
required any longer. Remove them.Signed-off-by: Thomas Zimmermann
Acked-by: Gerd Hoffmann
Link: https://patchwork.freedesktop.org/patch/msgid/20190613073041.29350-9-tzimmermann@suse.de
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 -
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
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
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 librarySigned-off-by: Thomas Zimmermann
Link: http://patchwork.freedesktop.org/patch/msgid/20190508082630.15116-9-tzimmermann@suse.de
Signed-off-by: Gerd Hoffmann -
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 -
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 -
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 fixesSigned-off-by: Thomas Zimmermann
Link: http://patchwork.freedesktop.org/patch/msgid/20190508082630.15116-5-tzimmermann@suse.de
Signed-off-by: Gerd Hoffmann -
The provided helpers can be used for the respective callback functions
in |struct drm_driver|.v4:
* cleanups from checkpatch.pl
v2:
* documentation fixesSigned-off-by: Thomas Zimmermann
Link: http://patchwork.freedesktop.org/patch/msgid/20190508082630.15116-4-tzimmermann@suse.de
Signed-off-by: Gerd Hoffmann -
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 fixesSigned-off-by: Thomas Zimmermann
Link: http://patchwork.freedesktop.org/patch/msgid/20190508082630.15116-3-tzimmermann@suse.de
Signed-off-by: Gerd Hoffmann -
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 fixesSigned-off-by: Thomas Zimmermann
Link: http://patchwork.freedesktop.org/patch/msgid/20190508082630.15116-2-tzimmermann@suse.de
Signed-off-by: Gerd Hoffmann