1. 24 4月, 2014 1 次提交
    • D
      drm: Simplify fb refcounting rules around ->update_plane · 0fe27f06
      Daniel Vetter 提交于
      The introduction of primary planes has apparently caused a bit of fb
      refcounting fun for people. That makes it a good time to clean up the
      arcane rules and slight differences between ->update_plane and
      ->set_config. The new rules are:
      
      - The core holds a reference for both the new and the old fb (if
        they're non-NULL of course) while calling into the driver through
        either ->update_plane or ->set_config.
      
      - Drivers may not clobber plane->fb if their callback fails. If they
        do that, they need to store a pointer to the old fb in it again.
        When calling into the driver plane->fb still points at the current
        (old) framebuffer.
      
      - The core will update the plane->fb pointer on success. Drivers can
        do that themselves too, but aren't required to any more for the
        primary plane.
      
      - The core will update fb refcounts for the plane->fb pointer,
        presuming the drivers hold up their end of the bargain.
      
      v2: Remove now unused tmpfb (Thierry)
      
      v3: Drop broken changes from drm_mode_setplane (Ville). Also polish
      the commit message a bit.
      
      v4: Also fix up the handling of ->disable_plane in
      drm_plane_force_disable. The issue was that we didn't save plane->fb
      over the ->disable_plane call. Just paranoia, nothing relies on this.
      
      v5: Keep still useful comments about directly calling ->set_config,
      which I should have done for v4 already. Requested by Matt.
      
      Cc: Thierry Reding <treding@nvidia.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Matt Roper <matthew.d.roper@intel.com>
      Reviewed-by: NMatt Roper <matthew.d.roper@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      0fe27f06
  2. 22 4月, 2014 2 次提交
  3. 18 4月, 2014 1 次提交
    • D
      drm/plane-helper: Don't fake-implement primary plane disabling · b6ccd7b9
      Daniel Vetter 提交于
      After thinking about this topic a bit more I've reached the conclusion
      that implementing this doesn't make sense:
      
      - The locking is all wrong: set_config(NULL) will also unlink encoders
        and connectors, but those links are protected with the mode_config
        mutex. In the ->disable_plane callback we only hold all modeset
        locks, but eventually we want to switch to just grabbing the
        per-crtc (and maybe per-plane) locks as needed, maybe based on
        ww_mutexes. Having a callback which absolutely needs all modeset
        locks is bad for this conversion.
      
        Note that the same isn't true for the provided ->update_plane since
        we've audited the crtc helpers to make sure that not encoder or
        connector links are changed.
      
      - There's no way to re-enable the plane with an ->update_plane: The
        connectors/encoder links are lost and so we can't re-enable the
        CRTC. Even without that issue the driver might have reassigned some
        shared resources (as opposed to e.g. DPMS off, where drivers are not
        allowed to do that to make sure the CRTC can be enabled again).
      
      - The semantics don't make much sense: Userspace asked to scan out
        black (or some other color if the driver supports a background
        color), not that the screen be disabled.
      
      - Implementing proper primary plane support (i.e. actually disabling
        the primary plane without disabling the CRTC) is really simple, at
        least if all the hw needs is flipping a bit. The big task is
        auditing all the interactions with other ioctls when the CRTC is on
        but there's no primary plane (e.g. pageflips). And some of that work
        still needs to be done.
      
      Cc: Matt Roper <matthew.d.roper@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NMatt Roper <matthew.d.roper@intel.com>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      b6ccd7b9
  4. 02 4月, 2014 2 次提交
    • M
      drm: Add drm_crtc_init_with_planes() (v2) · e13161af
      Matt Roper 提交于
      Add a new drm_crtc_init_with_planes() to allow drivers to provide
      specific primary and cursor planes at CRTC initialization.  The existing
      drm_crtc_init() interface remains to avoid driver churn in existing
      drivers; it will initialize the CRTC with a plane helper-created primary
      plane and no cursor plane.
      
      v2:
        - Move drm_crtc_init() to plane helper file so that nothing in the DRM
          core depends on helpers.  [suggested by Daniel Vetter]
        - Keep cursor parameter to drm_crtc_init_with_planes() a void* until
          we actually add cursor support.  [suggested by Daniel Vetter]
      Signed-off-by: NMatt Roper <matthew.d.roper@intel.com>
      Reviewed-by: NRob Clark <robdclark@gmail.com>
      e13161af
    • M
      drm: Add primary plane helpers (v3) · c103d1cf
      Matt Roper 提交于
      When we expose non-overlay planes to userspace, they will become
      accessible via standard userspace plane API's.  We should be able to
      handle the standard plane operations against primary planes in a generic
      way via the modeset handler.
      
      Drivers that can program primary planes more efficiently, that want to
      use their own primary plane structure to track additional information,
      or that don't have the limitations assumed by the helpers are free to
      provide their own implementation of some or all of these handlers.
      
      v3: Tweak kerneldoc formatting slightly to avoid ugliness
      v2:
       - Move plane helpers to a new file (drm_plane_helper.c)
       - Tighten checks on update handler (check for scaling, CRTC coverage,
         subpixel positioning)
       - Pass proper panning parameters to modeset interface
       - Disallow disabling primary plane (and thus CRTC) if other planes are
         still active on the CRTC.
       - Use a minimal format list that should work on all hardware/drivers.
         Drivers may call this function with a more accurate plane list to
         enable additional formats they can support.
      Signed-off-by: NMatt Roper <matthew.d.roper@intel.com>
      Reviewed-by: NRob Clark <robdclark@gmail.com>
      c103d1cf