1. 21 Jun, 2020 4 commits
  2. 20 Jun, 2020 6 commits
  3. 19 Jun, 2020 7 commits
  4. 18 Jun, 2020 5 commits
  5. 17 Jun, 2020 1 commit
  6. 16 Jun, 2020 4 commits
  7. 15 Jun, 2020 6 commits
  8. 11 Jun, 2020 7 commits
    • Imre Deak's avatar
      drm/dp_mst: Fix flushing the delayed port/mstb destroy work · 72822c3b
      Imre Deak authored
      Atm, a pending delayed destroy work during module removal will be
      canceled, leaving behind MST ports, mstbs. Fix this by using a dedicated
      workqueue which will be drained of requeued items as well when
      destroying it.
      
      v2:
      - Check if wq is NULL before calling destroy_workqueue().
      
      Cc: Lyude Paul <lyude@redhat.com>
      Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
      Reviewed-by: default avatarStanislav Lisovskiy <stanislav.lisovskiy@intel.com>
      Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
      Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200610134704.25270-1-imre.deak@intel.com
      72822c3b
    • Imre Deak's avatar
      drm/dp_mst: Fix the DDC I2C device registration of an MST port · d8bd15b3
      Imre Deak authored
      During the initial MST probing an MST port's I2C device will be
      registered using the kdev of the DRM device as a parent. Later after MST
      Connection Status Notifications this I2C device will be re-registered
      with the kdev of the port's connector. This will also move
      inconsistently the I2C device's sysfs entry from the DRM device's sysfs
      dir to the connector's dir.
      
      Fix the above by keeping the DRM kdev as the parent of the I2C device.
      
      Ideally the connector's kdev would be used as a parent, similarly to
      non-MST connectors, however that needs some more refactoring to ensure
      the connector's kdev is already available early enough. So keep the
      existing (initial) behavior for now.
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
      Reviewed-by: default avatarStanislav Lisovskiy <stanislav.lisovskiy@intel.com>
      Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200607212522.16935-2-imre.deak@intel.com
      d8bd15b3
    • Imre Deak's avatar
      drm/dp_mst: Fix the DDC I2C device unregistration of an MST port · 7d115076
      Imre Deak authored
      The WARN below triggers during the removal of an MST port. The problem
      is that the parent device's (the connector's kdev) sysfs directory is
      removed recursively when the connector is unregistered (even though the
      I2C device holds a reference on the parent device). To fix this set
      first the Peer Device Type to none which will remove the I2C device.
      
      Note that atm, inconsistently, the parent of the I2C device is initially set to
      the DRM kdev and after a Connection Status Notification the parent may be reset
      to be the connector's kdev. This problem is addressed by the next patch.
      
      [ 4462.989299] ------------[ cut here ]------------
      [ 4463.014940] sysfs group 'power' not found for kobject 'i2c-24'
      [ 4463.034664] WARNING: CPU: 0 PID: 970 at fs/sysfs/group.c:281 sysfs_remove_group+0x71/0x80
      [ 4463.044357] Modules linked in: snd_hda_intel i915 drm_kms_helper(O) drm netconsole snd_hda_codec_hdmi mei_hdcp x86_pkg_temp_thermal coretemp crct10dif_pclmul snd_intel_dspcf
      g crc32_pclmul snd_hda_codec snd_hwdep ghash_clmulni_intel snd_hda_core asix usbnet kvm_intel mii i2c_algo_bit snd_pcm syscopyarea sysfillrect e1000e sysimgblt fb_sys_fops prim
      e_numbers ptp pps_core i2c_i801 r8169 mei_me realtek mei [last unloaded: drm]
      [ 4463.044399] CPU: 0 PID: 970 Comm: kworker/0:2 Tainted: G           O      5.7.0+ #172
      [ 4463.044402] Hardware name: Intel Corporation Tiger Lake Client Platform/TigerLake U DDR4 SODIMM RVP
      [ 4463.044423] Workqueue: events drm_dp_delayed_destroy_work [drm_kms_helper]
      [ 4463.044428] RIP: 0010:sysfs_remove_group+0x71/0x80
      [ 4463.044431] Code: 48 89 df 5b 5d 41 5c e9 cd b6 ff ff 48 89 df e8 95 b4 ff ff eb cb 49 8b 14 24 48 8b 75 00 48 c7 c7 20 0f 3f 82 e8 9f c5 d7 ff <0f> 0b 5b 5d 41 5c c3 0f 1f
      84 00 00 00 00 00 48 85 f6 74 31 41 54
      [ 4463.044433] RSP: 0018:ffffc900018bfbf0 EFLAGS: 00010282
      [ 4463.044436] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000001
      [ 4463.044439] RDX: 0000000080000001 RSI: ffff88849e828f38 RDI: 00000000ffffffff
      [ 4463.052970] [drm:drm_atomic_get_plane_state [drm]] Added [PLANE:100:plane 2B] 00000000c2160caa state to 00000000d172564a
      [ 4463.070533] RBP: ffffffff820cea20 R08: ffff88847f4b8958 R09: 0000000000000000
      [ 4463.070535] R10: 0000000000000000 R11: 0000000000000000 R12: ffff88848a725018
      [ 4463.070537] R13: 0000000000000000 R14: ffffffff827090e0 R15: 0000000000000002
      [ 4463.070539] FS:  0000000000000000(0000) GS:ffff88849e800000(0000) knlGS:0000000000000000
      [ 4463.070541] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [ 4463.070543] CR2: 00007fdf8a756538 CR3: 0000000489684001 CR4: 0000000000760ef0
      [ 4463.070545] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [ 4463.070547] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      [ 4463.070549] PKRU: 55555554
      [ 4463.070551] Call Trace:
      [ 4463.070560]  device_del+0x84/0x400
      [ 4463.070571]  cdev_device_del+0x10/0x30
      [ 4463.070578]  put_i2c_dev+0x69/0x80
      [ 4463.070584]  i2cdev_detach_adapter+0x2e/0x60
      [ 4463.070591]  notifier_call_chain+0x34/0x90
      [ 4463.070599]  blocking_notifier_call_chain+0x3f/0x60
      [ 4463.070606]  device_del+0x7c/0x400
      [ 4463.087817]  ? lockdep_init_map_waits+0x57/0x210
      [ 4463.087825]  device_unregister+0x11/0x60
      [ 4463.087829]  i2c_del_adapter+0x249/0x310
      [ 4463.087846]  drm_dp_port_set_pdt+0x6b/0x2c0 [drm_kms_helper]
      [ 4463.087862]  drm_dp_delayed_destroy_work+0x2af/0x350 [drm_kms_helper]
      [ 4463.087876]  process_one_work+0x268/0x600
      [ 4463.105438]  ? __schedule+0x30c/0x920
      [ 4463.105451]  worker_thread+0x37/0x380
      [ 4463.105457]  ? process_one_work+0x600/0x600
      [ 4463.105462]  kthread+0x140/0x160
      [ 4463.105466]  ? kthread_park+0x80/0x80
      [ 4463.105474]  ret_from_fork+0x24/0x50
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
      Reviewed-by: default avatarStanislav Lisovskiy <stanislav.lisovskiy@intel.com>
      Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200607212522.16935-1-imre.deak@intel.com
      7d115076
    • Imre Deak's avatar
      drm/i915/dp_mst: Work around out-of-spec adapters filtering short pulses · 471bdd0d
      Imre Deak authored
      Some TypeC -> native DP adapters, at least the Club 3D CAC-1557 adapter,
      incorrectly filter out HPD short pulses with a duration less than
      ~540 usec, leading to MST probe failures.
      
      According to the DP Standard 2.0 section 5.1.4:
      - DP sinks should generate short pulses in the 500 usec -> 1 msec range
      - DP sources should detect short pulses in the 250 usec -> 2 msec range
      
      According to the DP Alt Mode on TypeC Standard section 3.9.2, adapters
      should detect and forward short pulses according to how sources should
      detect them as specified in the DP Standard (250 usec -> 2 msec).
      
      Based on the above filtering out short pulses with a duration less than
      540 usec is incorrect.
      
      To make such adapters work add support for a driver polling on MST
      inerrupt flags, and wire this up in the i915 driver. The sink can clear
      an interrupt it raised after 110 msec if the source doesn't respond, so
      use a 50 msec poll period to avoid missing an interrupt. Polling of the
      MST interrupt flags is explicitly allowed by the DP Standard.
      
      This fixes MST probe failures I saw using this adapter and a DELL U2515H
      monitor.
      
      v2:
      - Fix the wait event timeout for the no-poll case.
      v3 (Ville):
      - Fix the short pulse duration limits in the commit log prescribed by the
        DP Standard.
      - Add code comment explaining why/how polling is used.
      - Factor out a helper to schedule the port's hpd irq handler and move it
        to the rest of hotplug handlers.
      - Document the new MST callback.
      - s/update_hpd_irq_state/poll_hpd_irq/
      
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
      Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200604184500.23730-2-imre.deak@intel.com
      471bdd0d
    • Imre Deak's avatar
    • Thomas Zimmermann's avatar
      drm/mgag200: Use managed device initialization · fb7ba0c7
      Thomas Zimmermann authored
      The mgag200 driver now uses managed functions for DRM devices. The
      individual helpers for modesetting and memory managed are already
      covered, so only device allocation and initialization is left for
      conversion.
      Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
      Acked-by: default avatarSam Ravnborg <sam@ravnborg.org>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200605135803.19811-15-tzimmermann@suse.de
      fb7ba0c7
    • Thomas Zimmermann's avatar
      drm/mgag200: Embed instance of struct drm_device in struct mga_device · 832eddf5
      Thomas Zimmermann authored
      Following current best practice, the instance of struct drm_device is now
      embedded in struct mga_device. The respective field has been renamed from
      'dev' to 'base' to reflect the relationship. Conversion from DRM device is
      done via upcast. Using dev_private is no longer possible.
      
      The patch also open-codes drm_dev_alloc() and DRM device initialization
      is now performed by a call to drm_device_init().
      Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
      Acked-by: default avatarSam Ravnborg <sam@ravnborg.org>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200605135803.19811-14-tzimmermann@suse.de
      832eddf5