Skip to content
  1. Jun 15, 2020
  2. Jun 11, 2020
    • 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
      drm/dp_mst: Sanitize mgr->qlock locking in drm_dp_mst_wait_tx_reply() · 8b9f3437
      Imre Deak authored
      
      
      Make the locking look symmetric with the unlocking.
      
      Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
      Reviewed-by: default avatarJosé Roberto de Souza <jose.souza@intel.com>
      Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200603211040.8190-2-imre.deak@intel.com
      8b9f3437
    • 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
    • Thomas Zimmermann's avatar
      drm/mgag200: Allocate device structures in mgag200_driver_load() · 3c8923c3
      Thomas Zimmermann authored
      
      
      Instances of struct drm_device and struct mga_device are now allocated
      next to each other in mgag200_driver_load(). Yet another preparation
      before embedding the DRM device instance in struct mga_device.
      
      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-13-tzimmermann@suse.de
      3c8923c3
    • Thomas Zimmermann's avatar
      drm/mgag200: Separate device initialization into allocation · c714dd94
      Thomas Zimmermann authored
      
      
      Embedding the DRM device instance in struct mga_device will require
      changes to device allocation. Moving the device initialization into
      its own functions gets it out of the way.
      
      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-12-tzimmermann@suse.de
      c714dd94
    • Thomas Zimmermann's avatar
      drm/mgag200: Move device init and cleanup to mgag200_drv.c · ba5b90e8
      Thomas Zimmermann authored
      
      
      Moving the initializer and cleanup functions for device instances
      to mgag200_drv.c prepares for the conversion to managed code. No
      functional changes are made. Remove mgag200_main.c, which is now
      empty.
      
      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-11-tzimmermann@suse.de
      ba5b90e8
    • Thomas Zimmermann's avatar
      drm/mgag200: Prefix symbol names in mgag200_drv.c with mgag200_ · fdcb6b19
      Thomas Zimmermann authored
      
      
      The naming of symbols in mgag200_drv.c is inconsistent. Fix that by
      prefixing all names with mgag200_.
      
      v2:
      	* clarify commit message
      
      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-10-tzimmermann@suse.de
      fdcb6b19
    • Thomas Zimmermann's avatar
      drm/mgag200: Separate DRM and PCI functionality from each other · 09870621
      Thomas Zimmermann authored
      
      
      Moving the DRM driver structures from the middle of the PCI code to
      the top of the file makes it more readable. Also remove an obsolete
      comment.
      
      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-9-tzimmermann@suse.de
      09870621
    • Thomas Zimmermann's avatar
      drm/mgag200: Switch to managed MM · a71ff21e
      Thomas Zimmermann authored
      
      
      The memory-management code now cleans up automatically as part of
      device destruction.
      
      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-8-tzimmermann@suse.de
      a71ff21e
    • Thomas Zimmermann's avatar
      drm/mgag200: Merge VRAM setup into MM initialization · e9f896b7
      Thomas Zimmermann authored
      
      
      The VRAM setup in mgag200_drv.c is part of memory management and
      should be done in the same place. Merge the code into the memory
      management's init function.
      
      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-7-tzimmermann@suse.de
      e9f896b7
    • Thomas Zimmermann's avatar
      drm/mgag200: Lookup VRAM PCI BAR start and length only once · 0956c329
      Thomas Zimmermann authored
      
      
      The MM setup code on mgag200 reads PCI BAR 0's start and length
      several times. Reusing these values makes the code more readable.
      
      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-6-tzimmermann@suse.de
      0956c329
    • Thomas Zimmermann's avatar
      drm/mgag200: Rename mgag200_ttm.c to mgag200_mm.c · e7b9db6a
      Thomas Zimmermann authored
      
      
      The mgag200 driver does not use TTM any longer. Rename the related file
      to mgag200_mm.c (as in 'memory management').
      
      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-5-tzimmermann@suse.de
      e7b9db6a
    • Thomas Zimmermann's avatar
      drm/mgag200: Use pcim_enable_device() · 044e0935
      Thomas Zimmermann authored
      
      
      Using the managed function simplifies the error handling. After
      unloading the driver, the PCI device should now get disabled as
      well.
      
      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-4-tzimmermann@suse.de
      044e0935
    • Thomas Zimmermann's avatar
      drm/mgag200: Remove mgag200_cursor.c · 91c4dc57
      Thomas Zimmermann authored
      Support for HW cursors got remove by commit 5a77e2bf
      
       ("drm/mgag200:
      Remove HW cursor") Apparently the source file was not deleted. Removed
      it now.
      
      Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
      Acked-by: default avatarSam Ravnborg <sam@ravnborg.org>
      Fixes: 5a77e2bf ("drm/mgag200: Remove HW cursor")
      Cc: Sam Ravnborg <sam@ravnborg.org>
      Cc: Emil Velikov <emil.velikov@collabora.com>
      Cc: Dave Airlie <airlied@redhat.com>
      Cc: "Noralf Trønnes" <noralf@tronnes.org>
      Cc: Gerd Hoffmann <kraxel@redhat.com>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Kate Stewart <kstewart@linuxfoundation.org>
      Cc: Allison Randal <allison@lohutok.net>
      Cc: Andrzej Pietrasiewicz <andrzej.p@collabora.com>
      Cc: "José Roberto de Souza" <jose.souza@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200605135803.19811-3-tzimmermann@suse.de
      91c4dc57
    • Thomas Zimmermann's avatar
      drm/mgag200: Remove declaration of mgag200_mmap() from header file · 1d8d42ba
      Thomas Zimmermann authored
      Commit 94668ac7
      
       ("drm/mgag200: Convert mgag200 driver to VRAM MM")
      removed the implementation of mgag200_mmap(). Also remove the declaration.
      
      Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
      Acked-by: default avatarSam Ravnborg <sam@ravnborg.org>
      Fixes: 94668ac7 ("drm/mgag200: Convert mgag200 driver to VRAM MM")
      Cc: Gerd Hoffmann <kraxel@redhat.com>
      Cc: Dave Airlie <airlied@redhat.com>
      Cc: Krzysztof Kozlowski <krzk@kernel.org>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Cc: Sam Ravnborg <sam@ravnborg.org>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: "Noralf Trønnes" <noralf@tronnes.org>
      Cc: Armijn Hemel <armijn@tjaldur.nl>
      Cc: Alex Deucher <alexander.deucher@amd.com>
      Cc: Emil Velikov <emil.velikov@collabora.com>
      Cc: <stable@vger.kernel.org> # v5.3+
      Link: https://patchwork.freedesktop.org/patch/msgid/20200605135803.19811-2-tzimmermann@suse.de
      1d8d42ba
  3. Jun 10, 2020