• Rob Clark's avatar
    drm/omap: add GEM support for tiled/dmm buffers · f7f9f453
    Rob Clark authored
    TILER/DMM provides two features for omapdrm GEM objects:
    1) providing a physically contiguous view to discontiguous memory
       for hw initiators that cannot otherwise support discontiguous
       buffers (DSS scanout, IVAHD video decode/encode, etc)
    2) providing untiling for 2d tiled buffers, which are used in some
       cases to provide rotation and reduce memory bandwidth for hw
       initiators that tend to access data in 2d block patterns.
    
    For 2d tiled buffers, there are some additional complications when
    it comes to userspace mmap'ings.  For non-tiled buffers, the original
    (potentially physically discontiguous) pages are used to back the
    mmap.  For tiled buffers, we need to mmap via the tiler/dmm region to
    provide an unswizzled view of the buffer.  But (a) the buffer is not
    necessarily pinned in TILER all the time (it can be unmapped when
    there is no DMA access to the buffer), and (b) when they are they
    are pinned, they not necessarily page aligned from the perspective of
    the CPU.  And non-page aligned userspace buffer mapping is evil.
    
    To solve this, we reserve one or more small regions in each of the 2d
    containers when the driver is loaded to use as a "user-GART" where we
    can create a second page-aligned mapping of parts of the buffer being
    accessed from userspace.  Page faulting is used to evict and remap
    different regions of whichever buffers are being accessed from user-
    space.
    Signed-off-by: default avatarRob Clark <rob@ti.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    f7f9f453
omap_gem_helpers.c 4.36 KB