1. 25 11月, 2014 4 次提交
  2. 21 11月, 2014 1 次提交
  3. 20 11月, 2014 2 次提交
    • D
      drm: s/enum_blob_list/enum_list/ in drm_property · 3758b341
      Daniel Vetter 提交于
      I guess for hysterical raisins this was meant to be the way to read
      blob properties. But that's done with the two-stage approach which
      uses separate blob kms object and the special-purpose get_blob ioctl.
      
      Shipping userspace seems to have never relied on this, and the kernel
      also never put any blob thing onto that property. And nowadays it
      would blow up, e.g. in drm_property_destroy. Also it makes no sense to
      return values in an ioctl that only returns metadata about everything.
      
      So let's ditch all the internal code for the blob list, rename the
      list to be unambiguous and sprinkle comments all over the place to
      explain this peculiar piece of api.
      
      v2: Squash in fixup from Rob to remove now unused variables.
      
      Cc: Rob Clark <robdclark@gmail.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Reviewed-by: NRob Clark <robdclark@gmail.com>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      3758b341
    • D
      drm/atomic: Don't overrun the connector array when hotplugging · f52b69f1
      Daniel Vetter 提交于
      Yet another fallout from not considering DP MST hotplug. With the
      previous patches we have stable indices, but it might still happen
      that a connector gets added between when we allocate the array and
      when we actually add a connector. Especially when we back off due to
      ww mutex contention or similar issues.
      
      So store the sizes of the arrays in struct drm_atomic_state and double
      check them. We don't really care about races except that we want to
      use a consistent value, so ACCESS_ONCE is all we need. And if we
      indeed notice that we'd overrun the array then just give up and
      restart the entire ioctl.
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Reviewed-by: NRob Clark <robdclark@gmail.com>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      f52b69f1
  4. 15 11月, 2014 3 次提交
  5. 13 11月, 2014 24 次提交
  6. 12 11月, 2014 2 次提交
    • D
      drm: Per-plane locking · 4d02e2de
      Daniel Vetter 提交于
      Turned out to be much simpler on top of my latest atomic stuff than
      what I've feared. Some details:
      
      - Drop the modeset_lock_all snakeoil in drm_plane_init. Same
        justification as for the equivalent change in drm_crtc_init done in
      
      	commit d0fa1af4
      	Author: Daniel Vetter <daniel.vetter@ffwll.ch>
      	Date:   Mon Sep 8 09:02:49 2014 +0200
      
      	    drm: Drop modeset locking from crtc init function
      
        Without these the drm_modeset_lock_init would fall over the exact
        same way.
      
      - Since the atomic core code wraps the locking switching it to
        per-plane locks was a one-line change.
      
      - For the legacy ioctls add a plane argument to the locking helper so
        that we can grab the right plane lock (cursor or primary). Since the
        universal cursor plane might not be there, or someone really crazy
        might forgoe the primary plane even accept NULL.
      
      - Add some locking WARN_ON to the atomic helpers for good paranoid
        measure and to check that it all works out.
      
      Tested on my exynos atomic hackfest with full lockdep checks and ww
      backoff injection.
      
      v2: I've forgotten about the load-detect code in i915.
      
      v3: Thierry reported that in latest 3.18-rc vmwgfx doesn't compile any
      more due to
      
      commit 21e88620
      Author: Rob Clark <robdclark@gmail.com>
      Date:   Thu Oct 30 13:39:04 2014 -0400
      
          drm/vmwgfx: fix lock breakage
      
      Rebased and fix this up.
      
      Cc: Thierry Reding <thierry.reding@gmail.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Reviewed-by: NSean Paul <seanpaul@chromium.org>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      4d02e2de
    • R
      drm: export atomic wait_for_vblanks helper (v2) · 5ee3229c
      Rob Clark 提交于
      v1: original
      v2: danvet's kerneldoc nitpicks
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      Reviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      5ee3229c
  7. 08 11月, 2014 1 次提交
  8. 07 11月, 2014 3 次提交
    • D
      drm/atomic: Refcounting for plane_state->fb · 321ebf04
      Daniel Vetter 提交于
      So my original plan was that the drm core refcounts framebuffers like
      with the legacy ioctls. But that doesn't work for a bunch of reasons:
      
      - State objects might live longer than until the next fb change
        happens for a plane. For example delayed cleanup work only happens
        _after_ the pageflip ioctl has completed. So this definitely doesn't
        work without the plane state holding its own references.
      
      - The other issue is transition from legacy to atomic implementations,
        where the driver works under a mix of both worlds. Which means
        legacy paths might not properly update the ->fb pointer under
        plane->state->fb. Which is a bit a problem when then someone comes
        around and _does_ try to clean it up when it's long gone.
      
      The second issue is just a bit a transition bug, since drivers should
      update plane->state->fb in all the paths that aren't converted yet.
      But a bit more robustness for the transition can't hurt - we pull
      similar tricks with cleaning up the old fb in the transitional helpers
      already.
      
      The pattern for drivers that transition is
      
      	if (plane->state)
      		drm_atomic_set_fb_for_plane(plane->state, plane->fb);
      
      inserted after the fb update has logically completed at the end of
      ->set_config (or ->set_base/mode_set if using the crtc helpers),
      ->page_flip, ->update_plane or any other entry point which updates
      plane->fb.
      
      v2: Update kerneldoc - copypasta fail.
      
      v3: Fix spelling in the commit message (Sean).
      Reviewed-by: NSean Paul <seanpaul@chromium.org>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      321ebf04
    • D
      drm/atomic-helpers: functions for state duplicate/destroy/reset · d461701c
      Daniel Vetter 提交于
      The atomic users and helpers assume that there is always a obj->state
      structure around. Which means drivers need to somehow create that at
      driver load time. Also it should obviously reset hardware state, so
      needs to be reset upon resume.
      
      Finally the destroy/duplicate_state functions are an awful lot of
      boilerplate if the driver doesn't need anything beyond the default
      state objects.
      
      So add helper functions for all of this.
      
      v2: Somehow the plane/connector versions got lost in the first
      version.
      
      v3: Add kerneldoc.
      
      v4: Make duplicate_state functions a bit more robust, which is useful
      for debugging state tracking issues when transitioning to atomic.
      
      v5: Clear temporary variables in the crtc state when duplicating it,
      like ->mode_changed or ->planes_changed. If we don't do this stale
      values for these might pollute the next atomic modeset.
      
      v6: Also clear crtc_state->event in case the driver didn't (yet) clear
      this out.
      
      v7: Split out wrong squashed commit. Also improve the kerneldoc to
      mention that obj->state can be NULL and when.  Both suggested by
      Daniel Thompson.
      
      Cc: Daniel Thompson <daniel.thompson@linaro.org>
      Cc: Sean Paul <seanpaul@chromium.org>
      Reviewed-by: NSean Paul <seanpaul@chromium.org>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      d461701c
    • D
      drm/atomic-helper: implement ->page_flip · 8bc0f312
      Daniel Vetter 提交于
      Currently there is no way to implement async flips using atomic, that
      essentially requires us to be able to cancel pending requests
      mid-flight.
      
      To be able to do that (and I guess we want this since vblank synced
      updates which opportunistically cancel still pending updates seem to be
      wanted) we'd need to add a mandatory cancellation mode. Depending upon
      the exact semantics we decide upon that could mean that userspace will
      not get completion events, or will get them all stacked up.
      
      So reject async updates for now. Also async updates usually means not
      vblank synced at all, and I guess for drivers which want to support
      this they should simply add a special pageflip handler (since usually
      you need a special flip cmd to achieve this). That kind of async flip
      is pretty much exclusively just used for games and benchmarks where
      dropping just one frame means you'll get a headshot or something bad
      like that ... And so slight amounts of tearing is acceptable.
      
      v2: Fixup kerneldoc, reported by Paulo.
      
      v3: Use the set_crtc_for_plane function to assign the crtc, since
      otherwise the book-keeping is off.
      
      v4: Update crtc->primary->fb since ->page_flip is the only driver
      callback where the core won't do this itself. We might want to fix
      this inconsistency eventually.
      
      v5: Use set_crtc_for_connector as suggested by Sean.
      
      v6: Daniel Thompson noticed that my error handling is inconsistent
      and that in a few cases I didn't handle fatal errors (i.e. not
      -EDEADLK). Fix this by consolidate the ww mutex backoff handling
      into one check in the fail: block and flatten the error control
      flow everywhere else.
      
      v7: Fix spelling mistake in the commit message (Sean).
      
      Cc: Daniel Thompson <daniel.thompson@linaro.org>
      Cc: Sean Paul <seanpaul@chromium.org>
      Cc: Paulo Zanoni <przanoni@gmail.com>
      Reviewed-by: NSean Paul <seanpaul@chromium.org>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      8bc0f312