1. 08 7月, 2014 3 次提交
    • F
      drm/omap: remove null test before kfree · d2c87e2d
      Fabian Frederick 提交于
      Fix checkpatch warning:
      WARNING: kfree(NULL) is safe this check is probably not required
      
      Cc: David Airlie <airlied@linux.ie>
      Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
      Signed-off-by: NFabian Frederick <fabf@skynet.be>
      Signed-off-by: NDavid Herrmann <dh.herrmann@gmail.com>
      d2c87e2d
    • D
      drm/gem: remove misleading gfp parameter to get_pages() · 0cdbe8ac
      David Herrmann 提交于
      drm_gem_get_pages() currently allows passing a 'gfp' parameter that is
      passed to shmem combined with mapping_gfp_mask(). Given that the default
      mapping_gfp_mask() is GFP_HIGHUSER, it is _very_ unlikely that anyone will
      ever make use of that parameter. In fact, all drivers currently pass
      redundant flags or 0.
      
      This patch removes the 'gfp' parameter. The only reason to keep it is to
      remove flags like __GFP_WAIT. But in its current form, it can only be used
      to add flags. So to remove __GFP_WAIT, you'd have to drop it from the
      mapping_gfp_mask, which again is stupid as this mask is used by shmem-core
      for other allocations, too.
      
      If any driver ever requires that parameter, we can introduce a new helper
      that takes the raw 'gfp' parameter. The caller'd be responsible to combine
      it with mapping_gfp_mask() in a suitable way. The current
      drm_gem_get_pages() helper would then simply use mapping_gfp_mask() and
      call the new helper. This is what shmem_read_mapping_pages{_gfp,} does
      right now.
      
      Moreover, the gfp-zone flag-usage is not obvious: If you pass a modified
      zone, shmem core will WARN() or even BUG(). In other words, the following
      must be true for 'gfp' passed to shmem_read_mapping_pages_gfp():
          gfp_zone(mapping_gfp_mask(mapping)) == gfp_zone(gfp)
      Add a comment to drm_gem_read_pages() explaining that constraint.
      Signed-off-by: NDavid Herrmann <dh.herrmann@gmail.com>
      0cdbe8ac
    • D
      drm/omap: use __GFP_DMA32 for shmem-backed gem · ab5a60c3
      David Herrmann 提交于
      OMAP requires bo-pages to be in the DMA32 zone. Explicitly request this by
      setting __GFP_DMA32 as mapping-gfp-mask during shmem initialization. This
      drops HIGHMEM from the gfp-mask and uses DMA32 instead. shmem-core takes
      care to relocate pages during swap-in in case they have been loaded into
      the wrong zone.
      
      It is _not_ possible to pass __GFP_DMA32 to shmem_read_mapping_page_gfp()
      as the page might have already been swapped-in at that time. The zone-mask
      must be set during initialization and be kept constant for now.
      
      Remove the now superfluous TODO in omap_gem.c.
      Reviewed-by: NRob Clark <robdclark@gmail.com>
      Tested-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      Signed-off-by: NDavid Herrmann <dh.herrmann@gmail.com>
      ab5a60c3
  2. 15 4月, 2014 3 次提交
  3. 16 3月, 2014 1 次提交
    • D
      drm: use anon-inode instead of relying on cdevs · 6796cb16
      David Herrmann 提交于
      DRM drivers share a common address_space across all character-devices of a
      single DRM device. This allows simple buffer eviction and mapping-control.
      However, DRM core currently waits for the first ->open() on any char-dev
      to mark the underlying inode as backing inode of the device. This delayed
      initialization causes ugly conditions all over the place:
        if (dev->dev_mapping)
          do_sth();
      
      To avoid delayed initialization and to stop reusing the inode of the
      char-dev, we allocate an anonymous inode for each DRM device and reset
      filp->f_mapping to it on ->open().
      Signed-off-by: NDavid Herrmann <dh.herrmann@gmail.com>
      6796cb16
  4. 09 10月, 2013 1 次提交
    • D
      drm: kill ->gem_init_object() and friends · 16eb5f43
      David Herrmann 提交于
      All drivers embed gem-objects into their own buffer objects. There is no
      reason to keep drm_gem_object_alloc(), gem->driver_private and
      ->gem_init_object() anymore.
      
      New drivers are highly encouraged to do the same. There is no benefit in
      allocating gem-objects separately.
      
      Cc: Dave Airlie <airlied@gmail.com>
      Cc: Alex Deucher <alexdeucher@gmail.com>
      Cc: Daniel Vetter <daniel@ffwll.ch>
      Cc: Jerome Glisse <jglisse@redhat.com>
      Cc: Rob Clark <robdclark@gmail.com>
      Cc: Inki Dae <inki.dae@samsung.com>
      Cc: Ben Skeggs <skeggsb@gmail.com>
      Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
      Signed-off-by: NDavid Herrmann <dh.herrmann@gmail.com>
      Acked-by: NAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      16eb5f43
  5. 19 8月, 2013 1 次提交
  6. 07 8月, 2013 1 次提交
  7. 25 7月, 2013 1 次提交
    • D
      drm/gem: convert to new unified vma manager · 0de23977
      David Herrmann 提交于
      Use the new vma manager instead of the old hashtable. Also convert all
      drivers to use the new convenience helpers. This drops all the
      (map_list.hash.key << PAGE_SHIFT) non-sense.
      
      Locking and access-management is exactly the same as before with an
      additional lock inside of the vma-manager, which strictly wouldn't be
      needed for gem.
      
      v2:
       - rebase on drm-next
       - init nodes via drm_vma_node_reset() in drm_gem.c
      v3:
       - fix tegra
      v4:
       - remove duplicate if (drm_vma_node_has_offset()) checks
       - inline now trivial drm_vma_node_offset_addr() calls
      v5:
       - skip node-reset on gem-init due to kzalloc()
       - do not allow mapping gem-objects with offsets (backwards compat)
       - remove unneccessary casts
      
      Cc: Inki Dae <inki.dae@samsung.com>
      Cc: Rob Clark <robdclark@gmail.com>
      Cc: Dave Airlie <airlied@redhat.com>
      Cc: Thierry Reding <thierry.reding@gmail.com>
      Signed-off-by: NDavid Herrmann <dh.herrmann@gmail.com>
      Acked-by: NPatrik Jakobsson <patrik.r.jakobsson@gmail.com>
      Reviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: NDave Airlie <airlied@gmail.com>
      0de23977
  8. 23 7月, 2013 1 次提交
  9. 17 2月, 2013 3 次提交
  10. 12 2月, 2013 1 次提交
  11. 30 1月, 2013 1 次提交
  12. 18 1月, 2013 1 次提交
    • A
      drm/omap: Add PM capabilities · e78edba1
      Andy Gross 提交于
      Added power management capabilities into the omapdrm and DMM drivers.
      During suspend, we don't need to do anything to maintain the state of
      the LUT.  We have all the necessary information to recreate the mappings
      of the GEM object list maintained by the omapdrm driver.
      
      On resume, the DMM resume handler will first reprogram the LUT to point
      to the dummy page.  The subsequent resume handler in the omapdrm will call
      into the DMM and reprogram each of the buffer objects.  This will ensure
      that all of the necessary objects will be pinned into the DMM properly.
      
      Order of suspend/resume handlers is done by device creation.  We create
      the DMM device before the omapdrm, so the correct order is maintained.
      Signed-off-by: NAndy Gross <andy.gross@ti.com>
      Signed-off-by: NRob Clark <rob@ti.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e78edba1
  13. 15 11月, 2012 3 次提交
  14. 23 10月, 2012 2 次提交
  15. 27 9月, 2012 1 次提交
  16. 05 9月, 2012 1 次提交
  17. 16 8月, 2012 1 次提交
  18. 17 5月, 2012 1 次提交
  19. 11 4月, 2012 1 次提交
  20. 08 3月, 2012 4 次提交
  21. 09 2月, 2012 2 次提交
    • R
      staging: drm/omap: fix locking issue · c5b1247b
      Rob Clark 提交于
      The create/free mmap offset code must be synchronized.  Yet only some
      callers of omap_gem_mmap_offset() held struct_mutex.  Leading to various
      crashes around drm_mm_insert_helper_range().  (In the free-object path,
      which is currently the only place we drm_gem_free_mmap_offset(),
      struct_mutex is already held.)
      Signed-off-by: NRob Clark <rob@ti.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      c5b1247b
    • R
      staging: drm/omap: multiplanar and YUV support · 9a0774e0
      Rob Clark 提交于
      Add support in framebuffer objects for other color formats and multi-
      planar YUV (NV12).  Since this requires changing the API between the
      plane and fb for getting scanout information (paddr, etc), take
      advantage of the opportunity and put in place a way to allow fb's to
      be unpinned when they are not being scanned out.  Now, before start
      of scanout the plane calls omap_framebuffer_pin() which takes care
      to pin all the backing bo's, then omap_framebuffer_update_scanout()
      however many times to update the scanout address(es), etc, and then
      when finished omap_framebuffer_unpin().
      Signed-off-by: NRob Clark <rob@ti.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      9a0774e0
  22. 23 12月, 2011 1 次提交
  23. 17 12月, 2011 1 次提交
  24. 13 12月, 2011 2 次提交
  25. 09 12月, 2011 1 次提交
    • R
      drm/omap: add GEM support for tiled/dmm buffers · f7f9f453
      Rob Clark 提交于
      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: NRob Clark <rob@ti.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      f7f9f453
  26. 27 11月, 2011 1 次提交
    • R
      staging: add omapdrm DRM/KMS driver for TI OMAP platforms · cd5351f4
      Rob Clark 提交于
      A DRM display driver for TI OMAP platform.  Similar to omapfb (fbdev)
      and omap_vout (v4l2 display) drivers in the past, this driver uses the
      DSS2 driver to access the display hardware, including support for
      HDMI, DVI, and various types of LCD panels.  And it implements GEM
      support for buffer allocation (for KMS as well as offscreen buffers
      used by the xf86-video-omap userspace xorg driver).
      
      The driver maps CRTCs to overlays, encoders to overlay-managers, and
      connectors to dssdev's.  Note that this arrangement might change slightly
      when support for drm_plane overlays is added.
      
      For GEM support, non-scanout buffers are using the shmem backed pages
      provided by GEM core (In drm_gem_object_init()).  In the case of scanout
      buffers, which need to be physically contiguous, those are allocated
      with CMA and use drm_gem_private_object_init().
      
      See userspace xorg driver:
      git://github.com/robclark/xf86-video-omap.git
      
      Refer to this link for CMA (Continuous Memory Allocator):
      http://lkml.org/lkml/2011/8/19/302
      
      Links to previous versions of the patch:
      v1: http://lwn.net/Articles/458137/
      v2: http://patches.linaro.org/4156/
      v3: http://patches.linaro.org/4688/
      v4: http://patches.linaro.org/4791/
      
      History:
      
      v5: move headers from include/drm at Greg KH's request, minor rebasing
          on 3.2-rc1, pull in private copies of drm_gem_{get,put}_pages()
          because "drm/gem: add functions to get/put pages" patch is not
          merged yet
      v4: bit of rework of encoder/connector _dpms() code, modeset_init()
          rework to not use nested functions, update TODO.txt
      v3: minor cleanups, improved error handling for dev_load(), some minor
          API changes that will be needed later for tiled buffer support
      v2: replace omap_vram with CMA for scanout buffer allocation, remove
          unneeded functions, use dma_addr_t for physical addresses, error
          handling cleanup, refactor attach/detach pages into common drm
          functions, split non-userspace-facing API into omap_priv.h, remove
          plugin API
      
      v1: original
      Signed-off-by: NRob Clark <rob@ti.com>
      Acked-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      cd5351f4