1. 11 8月, 2015 1 次提交
  2. 04 8月, 2015 1 次提交
  3. 25 6月, 2015 1 次提交
    • D
      drm/dp/mst: close deadlock in connector destruction. · 6b8eeca6
      Dave Airlie 提交于
      I've only seen this once, and I failed to capture the
      lockdep backtrace, but I did some investigations.
      
      If we are calling into the MST layer from EDID probing,
      we have the mode_config mutex held, if during that EDID
      probing, the MST hub goes away, then we can get a deadlock
      where the connector destruction function in the driver
      tries to retake the mode config mutex.
      
      This offloads connector destruction to a workqueue,
      and avoid the subsequenct lock ordering issue.
      Acked-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Cc: stable@vger.kernel.org
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      6b8eeca6
  4. 23 6月, 2015 2 次提交
  5. 20 3月, 2015 1 次提交
  6. 10 3月, 2015 1 次提交
  7. 09 12月, 2014 3 次提交
    • D
      drm/tile: expose the tile property to userspace (v3) · 6f134d7b
      Dave Airlie 提交于
      This takes the tiling info from the connector and
      exposes it to userspace, as a blob object in a
      connector property.
      
      The contents of the blob is ABI.
      
      v2: add property + function documentation.
      
      v3: move property setup from previous patch.
      add boilerplate + fix long line (Daniel)
      Reviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      6f134d7b
    • D
      drm/mst: cached EDID for logical ports (v2) · c6a0aed4
      Dave Airlie 提交于
      Logical ports are never going to have EDID changes,
      they are used for the internal ports on MST monitors.
      
      We cache the EDIDs from these to save time at MST probe.
      
      v2: drop misplace tile property line, meant for other patch.
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      c6a0aed4
    • D
      drm/dp-mst: Remove branches before dropping the reference · 0391359d
      Daniel Vetter 提交于
      When we unplug a dp mst branch we unreference the entire tree from
      the root towards the leaves. Which is ok, since that's the way the
      pointers and so also the refcounts go.
      
      But when we drop the reference we must make sure that we remove the
      branches/ports from the lists/pointers before dropping the reference.
      Otherwise the get_validated functions will still return it instead
      of returning NULL (which indicates a potentially on-going unplug).
      
      The mst branch destroy gets this right for ports: First it deletes
      the port from the ports list, then it unrefs. But the ports destroy
      function gets it wrong: First it unrefs, then it drops the ref. Which
      means a zombie mst branch can still be validate with get_validated_mstb_ref
      when it shouldn't.
      
      Fix this.
      
      This should address a backtrace Dave dug out somewhere on unplug:
      
       [<ffffffffa00cc262>] drm_dp_mst_get_validated_mstb_ref_locked+0x92/0xa0 [drm_kms_helper]
       [<ffffffffa00cc211>] drm_dp_mst_get_validated_mstb_ref_locked+0x41/0xa0 [drm_kms_helper]
       [<ffffffffa00cc2aa>] drm_dp_get_validated_mstb_ref+0x3a/0x60 [drm_kms_helper]
       [<ffffffffa00cc2fb>] drm_dp_payload_send_msg.isra.14+0x2b/0x100 [drm_kms_helper]
       [<ffffffffa00cc547>] drm_dp_update_payload_part1+0x177/0x360 [drm_kms_helper]
       [<ffffffffa015c52e>] intel_mst_disable_dp+0x3e/0x80 [i915]
       [<ffffffffa013d60b>] haswell_crtc_disable+0x1cb/0x340 [i915]
       [<ffffffffa0136739>] intel_crtc_control+0x49/0x100 [i915]
       [<ffffffffa0136857>] intel_crtc_update_dpms+0x67/0x80 [i915]
       [<ffffffffa013fa59>] intel_connector_dpms+0x59/0x70 [i915]
       [<ffffffffa015c752>] intel_dp_destroy_mst_connector+0x32/0xc0 [i915]
       [<ffffffffa00cb44b>] drm_dp_destroy_port+0x6b/0xa0 [drm_kms_helper]
       [<ffffffffa00cb588>] drm_dp_destroy_mst_branch_device+0x108/0x130 [drm_kms_helper]
       [<ffffffffa00cb3cd>] drm_dp_port_teardown_pdt+0x3d/0x50 [drm_kms_helper]
       [<ffffffffa00cdb79>] drm_dp_mst_handle_up_req+0x499/0x540 [drm_kms_helper]
       [<ffffffff810d9ead>] ? trace_hardirqs_on_caller+0x15d/0x200 [<ffffffffa00cdc73>]
       drm_dp_mst_hpd_irq+0x53/0xa00 [drm_kms_helper] [<ffffffffa00c7dfb>]
       ? drm_dp_dpcd_read+0x1b/0x20 [drm_kms_helper] [<ffffffffa0153ed8>]
       ? intel_dp_dpcd_read_wake+0x38/0x70 [i915] [<ffffffffa015a225>]
       intel_dp_check_mst_status+0xb5/0x250 [i915] [<ffffffffa015ac71>]
       intel_dp_hpd_pulse+0x181/0x210 [i915] [<ffffffffa01104f6>]
       i915_digport_work_func+0x96/0x120 [i915]
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Cc: stable@vger.kernel.org
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      0391359d
  8. 15 11月, 2014 1 次提交
  9. 13 10月, 2014 2 次提交
  10. 15 8月, 2014 2 次提交
  11. 22 7月, 2014 1 次提交
  12. 18 7月, 2014 2 次提交
  13. 09 7月, 2014 1 次提交
  14. 08 7月, 2014 1 次提交
    • D
      drm/helper: add Displayport multi-stream helper (v0.6) · ad7f8a1f
      Dave Airlie 提交于
      This is the initial import of the helper for displayport multistream.
      
      It consists of a topology manager, init/destroy/set mst state
      
      It supports DP 1.2 MST sideband msg protocol handler - via hpd irqs
      
      connector detect and edid retrieval interface.
      
      It supports i2c device over DP 1.2 sideband msg protocol (EDID reads only)
      
      bandwidth manager API via vcpi allocation and payload updating,
      along with a helper to check the ACT status.
      
      Objects:
      MST topology manager - one per toplevel MST capable GPU port - not sure if this should be higher level again
      MST branch unit - one instance per plugged branching unit - one at top of hierarchy - others hanging from ports
      MST port - one port per port reported by branching units, can have MST units hanging from them as well.
      
      Changes since initial posting:
      a) add a mutex responsbile for the queues, it locks the sideband and msg slots, and msgs to transmit state
      b) add worker to handle connection state change events, for MST device chaining and hotplug
      c) add a payload spinlock
      d) add path sideband msg support
      e) fixup enum path resources transmit
      f) reduce max dpcd msg to 16, as per DP1.2 spec.
      g) separate tx queue kicking from irq processing and move irq acking back to drivers.
      
      Changes since v0.2:
      a) reorganise code,
      b) drop ACT forcing code
      c) add connector naming interface using path property
      d) add topology dumper helper
      e) proper reference counting and lookup for ports and mstbs.
      f) move tx kicking into a workq
      g) add aux locking - this should be redone
      h) split teardown into two parts
      i) start working on documentation on interface.
      
      Changes since v0.3:
      a) vc payload locking and tracking fixes
      b) add hotplug callback into driver - replaces crazy return 1 scheme
      c) txmsg + mst branch device refcount fixes
      d) don't bail on mst shutdown if device is gone
      e) change irq handler to take all 4 bytes of SINK_COUNT + ESI vectors
      f) make DP payload updates timeout longer - observed on docking station redock
      g) add more info to debugfs dumper
      
      Changes since v0.4:
      a) suspend/resume support
      b) more debugging in debugfs
      
      Changes since v0.5:
      a) use byte * to avoid unnecessary stack usage
      b) fix num_sdp_streams interpretation.
      c) init payload state for unplug events
      d) remove lenovo dock sink count hack
      e) drop aux lock - post rebase
      f) call hotplug on port destroy
      
      TODO:
      misc features
      Reviewed-by: NTodd Previte <tprevite@gmail.com>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      ad7f8a1f