1. 28 Oct, 2017 23 commits
  2. 25 Oct, 2017 4 commits
    • Keith Packard's avatar
      drm: Add four ioctls for managing drm mode object leases [v7] · 62884cd3
      Keith Packard authored
      drm_mode_create_lease
      
      	Creates a lease for a list of drm mode objects, returning an
      	fd for the new drm_master and a 64-bit identifier for the lessee
      
      drm_mode_list_lesees
      
      	List the identifiers of the lessees for a master file
      
      drm_mode_get_lease
      
      	List the leased objects for a master file
      
      drm_mode_revoke_lease
      
      	Erase the set of objects managed by a lease.
      
      This should suffice to at least create and query leases.
      
      Changes for v2 as suggested by Daniel Vetter <daniel.vetter@ffwll.ch>:
      
       * query ioctls only query the master associated with
         the provided file.
      
       * 'mask_lease' value has been removed
      
       * change ioctl has been removed.
      
      Changes for v3 suggested in part by Dave Airlie <airlied@gmail.com>
      
       * Add revoke ioctl.
      
      Changes for v4 suggested by Dave Airlie <airlied@gmail.com>
      
       * Expand on the comment about the magic use of &drm_lease_idr_object
       * Pad lease ioctl structures to align on 64-bit boundaries
      
      Changes for v5 suggested by Dave Airlie <airlied@gmail.com>
      
       * Check for non-negative object_id in create_lease to avoid debug
         output from the kernel.
      
      Changes for v6 provided by Dave Airlie <airlied@gmail.com>
      
       * For non-universal planes add primary/cursor planes to lease
      
         If we aren't exposing universal planes to this userspace client,
         and it requests a lease on a crtc, we should implicitly export the
         primary and cursor planes for the crtc.
      
         If the lessee doesn't request universal planes, it will just see
         the crtc, but if it does request them it will then see the plane
         objects as well.
      
         This also moves the object look ups earlier as a side effect, so
         we'd exit the ioctl quicker for non-existant objects.
      
       * Restrict leases to crtc/connector/planes.
      
         This only allows leasing for objects we wish to allow.
      
      Changes for v7 provided by Dave Airlie <airlied@gmail.com>
      
       * Check pad args are 0
       * Check create flags and object count are valid.
       * Check return from fd allocation
       * Refactor lease idr setup and add some simple validation
       * Use idr_mutex uniformly (Keith)
      Signed-off-by: default avatarKeith Packard <keithp@keithp.com>
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      62884cd3
    • Keith Packard's avatar
      drm: Check mode object lease status in all master ioctl paths [v4] · 7de440db
      Keith Packard authored
      Attempts to modify un-leased objects are rejected with an error.
      Information returned about unleased objects is modified to make them
      appear unusable and/or disconnected.
      
      Changes for v2 as suggested by Daniel Vetter <daniel.vetter@ffwll.ch>:
      
       * With the change in the __drm_mode_object_find API to pass the
         file_priv along, we can now centralize most of the lease-based
         access checks in that function.
      
       * A few places skip that API and require in-line checks.
      
      Changes for v3 provided by Dave Airlie <airlied@redhat.com>
      
       * remove support for leasing encoders.
       * add support for leasing planes.
      
      Changes for v4
      
       * Only call drm_lease_held if DRIVER_MODESET.
      Signed-off-by: default avatarKeith Packard <keithp@keithp.com>
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      7de440db
    • Keith Packard's avatar
      drm: Add drm_object lease infrastructure [v5] · 2ed077e4
      Keith Packard authored
      This provides new data structures to hold "lease" information about
      drm mode setting objects, and provides for creating new drm_masters
      which have access to a subset of the available drm resources.
      
      An 'owner' is a drm_master which is not leasing the objects from
      another drm_master, and hence 'owns' them.
      
      A 'lessee' is a drm_master which is leasing objects from some other
      drm_master. Each lessee holds the set of objects which it is leasing
      from the lessor.
      
      A 'lessor' is a drm_master which is leasing objects to another
      drm_master. This is the same as the owner in the current code.
      
      The set of objects any drm_master 'controls' is limited to the set of
      objects it leases (for lessees) or all objects (for owners).
      
      Objects not controlled by a drm_master cannot be modified through the
      various state manipulating ioctls, and any state reported back to user
      space will be edited to make them appear idle and/or unusable. For
      instance, connectors always report 'disconnected', while encoders
      report no possible crtcs or clones.
      
      The full list of lessees leasing objects from an owner (either
      directly, or indirectly through another lessee), can be searched from
      an idr in the drm_master of the owner.
      
      Changes for v2 as suggested by Daniel Vetter <daniel.vetter@ffwll.ch>:
      
      * Sub-leasing has been disabled.
      
      * BUG_ON for lock checking replaced with lockdep_assert_held
      
      * 'change' ioctl has been removed.
      
      * Leased objects can always be controlled by the lessor; the
        'mask_lease' flag has been removed
      
      * Checking for leased status has been simplified, replacing
        the drm_lease_check function with drm_lease_held.
      
      Changes in v3, some suggested by Dave Airlie <airlied@gmail.com>
      
      * Add revocation. This allows leases to be effectively revoked by
        removing all of the objects they have access to. The lease itself
        hangs around as it's hanging off a file.
      
      * Free the leases IDR when the master is destroyed
      
      * _drm_lease_held should look at lessees, not lessor
      
      * Allow non-master files to check for lease status
      
      Changes in v4, suggested by Dave Airlie <airlied@gmail.com>
      
      * Formatting and whitespace changes
      
      Changes in v5 (airlied)
      
      * check DRIVER_MODESET before lease destroy call
      * check DRIVER_MODESET for lease revoke (Chris)
      * Use idr_mutex uniformly for all lease elements of struct drm_master. (Keith)
      Signed-off-by: default avatarKeith Packard <keithp@keithp.com>
      2ed077e4
    • Keith Packard's avatar
      drm: Add new LEASE debug level · e7646f84
      Keith Packard authored
      Separate out lease debugging from the core.
      Signed-off-by: default avatarKeith Packard <keithp@keithp.com>
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      e7646f84
  3. 24 Oct, 2017 3 commits
    • Dave Airlie's avatar
      Merge branch 'etnaviv/next' of https://git.pengutronix.de/git/lst/linux into drm-next · fb9775aa
      Dave Airlie authored
      Disable perfmon ioctls for now in etnaviv
      
      * 'etnaviv/next' of https://git.pengutronix.de/git/lst/linux:
        drm/etnaviv: short-circuit perfmon ioctls
        Revert "drm/etnaviv: submit supports performance monitor requests"
      fb9775aa
    • Dave Airlie's avatar
      Merge tag 'drm-misc-next-2017-10-20' of git://anongit.freedesktop.org/drm/drm-misc into drm-next · fef1aa48
      Dave Airlie authored
      Final drm-misc feature pull for 4.15:
      
      UAPI Changes:
      - new madvise ioctl for vc4 (Boris)
      
      Core Changes:
      - plane commit tracking fixes (Maarten)
      - vgaarb improvements for fancy new platforms (aka ppc64 and arm64) by
        Bjorn Helgaas
      
      Driver Changes:
      - pile of new panel drivers: Toshiba LT089AC19000, Innolux AT043TN24
      - more sun4i work to support A10/A20 Tcon and hdmi outputs
      - vc4: fix sleep in irq handler by making it threaded (Eric)
      - udl probe/edid read fixes (Robert Tarasov)
      
      And a bunch of misc small cleanups/refactors and doc fixes all over.
      
      * tag 'drm-misc-next-2017-10-20' of git://anongit.freedesktop.org/drm/drm-misc: (32 commits)
        drm/vc4: Fix sleeps during the IRQ handler for DSI transactions.
        drm/vc4: Add the DRM_IOCTL_VC4_GEM_MADVISE ioctl
        drm/panel: simple: add Toshiba LT089AC19000
        dma-fence: remove duplicate word in comment
        drm/panel: simple: add delays for Innolux AT043TN24
        drm/panel: simple: add bus flags for Innolux AT043TN24
        drm/panel: simple: fix vertical timings for Innolux AT043TN24
        drm/atomic-helper: check that drivers call drm_crtc_vblank_off
        drm: some KMS todo ideas
        vgaarb: Factor out EFI and fallback default device selection
        vgaarb: Select a default VGA device even if there's no legacy VGA
        drm/bridge: adv7511: Fix a use after free
        drm/sun4i: Add support for A20 display pipeline components
        drm/sun4i: Add support for A10 display pipeline components
        drm/sun4i: hdmi: Support HDMI controller on A10
        drm/sun4i: tcon: Add support for A10 TCON
        drm/sun4i: backend: Support output muxing
        drm/sun4i: tcon: Move out the tcon0 common setup
        drm/sun4i: tcon: Don't rely on encoders to set the TCON mode
        drm/sun4i: tcon: Don't rely on encoders to enable the TCON
        ...
      fef1aa48
    • Dave Airlie's avatar
      Merge tag 'drm/tegra/for-4.15-rc1' of git://anongit.freedesktop.org/tegra/linux into drm-next · 3b677e43
      Dave Airlie authored
      drm/tegra: Changes for v4.15-rc1
      
      This contains a bit of cleanup and some minor fixes for the host1x and
      Tegra DRM drivers. There's also some more preparatory work for Tegra186
      support which I'm not quite ready to send upstream because the GPIO
      driver needed for HDMI support has been stuck for months, and we can't
      do much without it. Hopefully that driver will land in v4.15, which
      would mean we could go ahead with Tegra186 display support in v4.16.
      
      * tag 'drm/tegra/for-4.15-rc1' of git://anongit.freedesktop.org/tegra/linux: (21 commits)
        drm/tegra: hdmi: Add cec-notifier support
        drm/tegra: dc: Perform a complete reset sequence
        drm/tegra: dc: Make sure to set the module clock rate
        drm/tegra: dc: Simplify atomic plane helper functions
        drm/tegra: dc: Move some declarations to dc.h
        drm/tegra: vic: Use of_device_get_match_data()
        drm/tegra: sor: Use of_device_get_match_data()
        drm/tegra: hdmi: Use of_device_get_match_data()
        drm/tegra: dc: Use of_device_get_match_data()
        drm/tegra: Use u64_to_user_ptr helper
        gpu: host1x: Fix incorrect comment for channel_request
        gpu: host1x: Disassemble more instructions
        gpu: host1x: Improve debug disassembly formatting
        gpu: host1x: Enable gather filter
        gpu: host1x: Enable Tegra186 syncpoint protection
        gpu: host1x: Call of_dma_configure() after setting bus
        drm/tegra: Add Tegra186 support for VIC
        gpu: host1x: Add Tegra186 support
        dt-bindings: host1x: Add Tegra186 information
        gpu: host1x: syncpt: Request syncpoints per client
        ...
      3b677e43
  4. 23 Oct, 2017 1 commit
    • Keith Packard's avatar
      drm: Add CRTC_GET_SEQUENCE and CRTC_QUEUE_SEQUENCE ioctls [v3] · 3064abfa
      Keith Packard authored
      These provide crtc-id based functions instead of pipe-number, while
      also offering higher resolution time (ns) and wider frame count (64)
      as required by the Vulkan API.
      
      v2:
      
       * Check for DRIVER_MODESET in new crtc-based vblank ioctls
      
      	Failing to check this will oops the driver.
      
       * Ensure vblank interupt is running in crtc_get_sequence ioctl
      
      	The sequence and timing values are not correct while the
      	interrupt is off, so make sure it's running before asking for
      	them.
      
       * Short-circuit get_sequence if the counter is enabled and accurate
      
      	Steal the idea from the code in wait_vblank to avoid the
      	expense of drm_vblank_get/put
      
       * Return active state of crtc in crtc_get_sequence ioctl
      
      	Might be useful for applications that aren't in charge of
      	modesetting?
      
       * Use drm_crtc_vblank_get/put in new crtc-based vblank sequence ioctls
      
      	Daniel Vetter prefers these over the old drm_vblank_put/get
      	APIs.
      
       * Return s64 ns instead of u64 in new sequence event
      Suggested-by: default avatarDaniel Vetter <daniel@ffwll.ch>
      Suggested-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      
      v3:
      
       * Removed FIRST_PIXEL_OUT_FLAG
       * Document that the timestamp in the query and event are
         that of the first pixel leaving the display engine for
         the display (using the same wording as the Vulkan spec).
      Suggested-by: default avatarMichel Dänzer <michel@daenzer.net>
      Acked-by: default avatarDave Airlie <airlied@redhat.com>
      
      [airlied: left->leaves (Michel)]
      Signed-off-by: default avatarKeith Packard <keithp@keithp.com>
      Reviewed-by: default avatarSean Paul <seanpaul@chromium.org>
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      3064abfa
  5. 22 Oct, 2017 2 commits
  6. 20 Oct, 2017 7 commits
    • Keith Packard's avatar
      drm: Reorganize drm_pending_event to support future event types [v2] · bd386e51
      Keith Packard authored
      Place drm_event_vblank in a new union that includes that and a bare
      drm_event structure. This will allow new members of that union to be
      added in the future without changing code related to the existing vbl
      event type.
      
      Assignments to the crtc_id field are now done when the event is
      allocated, rather than when delievered. This way, delivery doesn't
      need to have the crtc ID available.
      
      v2:
       * Remove 'dev' argument from create_vblank_event
      
      	It wasn't being used anyways, and if we need it in the future,
      	we can always get it from crtc->dev.
      
       * Check for MODESETTING before looking for crtc in queue_vblank_event
      
      	UMS drivers will oops if we try to get a crtc, so make sure
      	we're modesetting before we try to find a crtc_id to fill into
      	the event.
      Signed-off-by: default avatarKeith Packard <keithp@keithp.com>
      Reviewed-by: default avatarSean Paul <seanpaul@chromium.org>
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      (cherry picked from commit dc695b85fde88eca3ef3b03fcd82f15b6bc6e462)
      bd386e51
    • Keith Packard's avatar
      drm: Widen vblank count to 64-bits [v3] · 570e8696
      Keith Packard authored
      This modifies the datatypes used by the vblank code to provide 64 bits
      of vblank count.
      
      The driver interfaces have been left using 32 bits of vblank count;
      all of the code necessary to widen that value for the user API was
      already included to handle devices returning fewer than 32-bits.
      
      This will provide the necessary datatypes for the Vulkan API.
      
      v2:
      
       * Re-write wait_vblank ioctl to ABSOLUTE sequence
      
          When an application uses the WAIT_VBLANK ioctl with RELATIVE
          or NEXTONMISS bits set, the target vblank interval is updated
          within the kernel. We need to write that target back to the
          ioctl buffer and update the flags bits so that if the wait is
          interrupted by a signal, when it is re-started, it will target
          precisely the same vblank count as before.
      
       * Leave driver API with 32-bit vblank count
      
      v3:
      
       * Rebase on top of Arnd Bergmann's patch which had
         the switch to ktime_t parts.
      
      [airlied: fix conflict with Ville vblank change].
      Suggested-by: default avatarMichel Dänzer <michel@daenzer.net>
      Suggested-by: default avatarDaniel Vetter <daniel@ffwll.ch>
      Signed-off-by: default avatarKeith Packard <keithp@keithp.com>
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      (cherry picked from commit 2affbc16983e4fc90960bc7f70e7615f4228199b)
      570e8696
    • Hans Verkuil's avatar
      drm/tegra: hdmi: Add cec-notifier support · fb83be88
      Hans Verkuil authored
      In order to support CEC the HDMI driver has to inform the CEC driver
      whenever the physical address changes. So when the EDID is read the
      CEC driver has to be informed and whenever the hotplug detect goes
      away.
      
      This is done through the cec-notifier framework.
      
      The link between the HDMI driver and the CEC driver is done through
      the hdmi-phandle property in the tegra-cec node in the device tree.
      Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
      Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
      fb83be88
    • Thierry Reding's avatar
      drm/tegra: dc: Perform a complete reset sequence · a2f2f740
      Thierry Reding authored
      In order for the reset to be applied properly, the module clock must be
      enabled during the assertion.
      Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
      a2f2f740
    • Thierry Reding's avatar
      drm/tegra: dc: Make sure to set the module clock rate · 39e08aff
      Thierry Reding authored
      When applying the PLL changes from the computed state object, make sure
      to set the rate of the display controller module clock. Failing to do so
      can yield to a situation where the parent will be set to the proper
      pixel clock, but the module clock will be divided down to the rate that
      is happened to be set to before the parent rate change.
      Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
      39e08aff
    • Thierry Reding's avatar
      drm/tegra: dc: Simplify atomic plane helper functions · a4bfa096
      Thierry Reding authored
      Remove the tegra_dc_disable_window() function whose only purpose was to
      allow tegra_plane_atomic_update() to also call it. Fix that by shuffling
      tegra_plano_atomic_disable() to before tegra_plane_atomic_update().
      
      While at it, also remove the overlay plane helper functions because they
      are exactly the same as the primary plane helper functions.
      Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
      a4bfa096
    • Thierry Reding's avatar
      drm/tegra: dc: Move some declarations to dc.h · 2d1c18fb
      Thierry Reding authored
      Move the DC related declarations in drm.h to dc.h where they belong.
      Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
      2d1c18fb