linux/include/drm
Wayne Lin 5a64967a2f drm/dp_mst: Have DP_Tx send one msg at a time
[Why]
Noticed this while testing MST with the 4 ports MST hub from
StarTech.com. Sometimes can't light up monitors normally and get the
error message as 'sideband msg build failed'.

Look into aux transactions, found out that source sometimes will send
out another down request before receiving the down reply of the
previous down request. On the other hand, in drm_dp_get_one_sb_msg(),
current code doesn't handle the interleaved replies case. Hence, source
can't build up message completely and can't light up monitors.

[How]
For good compatibility, enforce source to send out one down request at a
time. Add a flag, is_waiting_for_dwn_reply, to determine if the source
can send out a down request immediately or not.

- Check the flag before calling process_single_down_tx_qlock to send out
a msg
- Set the flag when successfully send out a down request
- Clear the flag when successfully build up a down reply
- Clear the flag when find erros during sending out a down request
- Clear the flag when find errors during building up a down reply
- Clear the flag when timeout occurs during waiting for a down reply
- Use drm_dp_mst_kick_tx() to try to send another down request in queue
at the end of drm_dp_mst_wait_tx_reply() (attempt to send out messages
in queue when errors occur)

Cc: Lyude Paul <lyude@redhat.com>
Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
Signed-off-by: Lyude Paul <lyude@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200113093649.11755-1-Wayne.Lin@amd.com
2020-01-15 17:01:21 -05:00
..
bridge drm main pull for 5.5-rc1 2019-11-27 17:45:48 -08:00
i2c
ttm Merge branch 'vmwgfx-coherent' of git://people.freedesktop.org/~thomash/linux into drm-next 2019-11-28 14:33:01 +10:00
amd_asic_type.h drm/amdgpu: Add a kernel parameter for specifying the asic type 2019-09-16 09:54:25 -05:00
ati_pcigart.h
drm_agpsupport.h
drm_atomic.h
drm_atomic_helper.h
drm_atomic_state_helper.h
drm_atomic_uapi.h
drm_audio_component.h
drm_auth.h
drm_blend.h
drm_bridge.h drm/bridge: Fix references to drm_bridge_funcs in documentation 2019-09-13 14:10:48 +02:00
drm_cache.h MIPS: Loongson64: Rename CPU TYPES 2019-10-31 15:03:10 -07:00
drm_client.h
drm_color_mgmt.h
drm_connector.h drm: Add DisplayPort colorspace property creation function 2019-09-20 18:46:18 +03:00
drm_crtc.h Merge drm/drm-next into drm-misc-next 2019-10-03 16:38:50 +02:00
drm_crtc_helper.h
drm_damage_helper.h
drm_debugfs.h
drm_debugfs_crc.h
drm_device.h
drm_displayid.h
drm_dp_dual_mode_helper.h
drm_dp_helper.h drm/tegra: Move drm_dp_link helpers to Tegra DRM 2019-10-23 18:22:10 +02:00
drm_dp_mst_helper.h drm/dp_mst: Have DP_Tx send one msg at a time 2020-01-15 17:01:21 -05:00
drm_drv.h drm/print: move drm_debug variable to drm_print.[ch] 2019-10-02 16:28:24 +03:00
drm_dsc.h
drm_edid.h drm/edid: Add drm_hdmi_avi_infoframe_bars() 2019-10-22 19:11:11 +03:00
drm_encoder.h drm/encoder: Don't raise voice in drm_encoder_mask() documentation 2019-09-17 13:58:18 -04:00
drm_encoder_slave.h
drm_fb_cma_helper.h
drm_fb_helper.h drm/fb-helper: Remove drm_fb_helper_defio_init() and update docs 2019-10-28 10:07:54 +01:00
drm_file.h
drm_fixed.h
drm_flip_work.h
drm_format_helper.h
drm_fourcc.h
drm_framebuffer.h
drm_gem.h drm/gem: Fix mmap fake offset handling for drm_gem_object_funcs.mmap 2019-10-29 13:29:21 -05:00
drm_gem_cma_helper.h
drm_gem_framebuffer_helper.h
drm_gem_shmem_helper.h Linux 5.4-rc7 2019-11-14 05:53:10 +10:00
drm_gem_ttm_helper.h drm/ttm: add drm_gem_ttm_mmap() 2019-10-17 13:59:16 +02:00
drm_gem_vram_helper.h drm/vram-helpers: Add helpers for prepare_fb() and cleanup_fb() 2019-10-24 16:12:11 +02:00
drm_hashtab.h
drm_hdcp.h
drm_ioctl.h
drm_irq.h
drm_lease.h
drm_legacy.h
drm_mipi_dbi.h
drm_mipi_dsi.h
drm_mm.h drm/mm: Convert drm_mm_node booleans to bitops 2019-10-04 13:43:13 +01:00
drm_mode_config.h
drm_mode_object.h
drm_modes.h
drm_modeset_helper.h
drm_modeset_helper_vtables.h drm/connector: Share with non-atomic drivers the function to get the single encoder 2019-09-16 15:13:02 -07:00
drm_modeset_lock.h drm: Add drm_modeset_lock_assert_held() 2019-09-19 21:37:59 +03:00
drm_of.h
drm_panel.h drm/panel: Add and fill drm_panel type field 2019-09-08 19:04:01 +02:00
drm_pci.h
drm_pciids.h
drm_plane.h drm/plane: Clarify our expectations for src/dst rectangles 2019-10-10 15:49:34 +02:00
drm_plane_helper.h
drm_prime.h drm/prime: Remove duplicate forward declaration 2019-09-16 17:32:51 +02:00
drm_print.h drm/print: add drm_debug_enabled() 2019-10-02 16:28:55 +03:00
drm_probe_helper.h
drm_property.h
drm_rect.h drm/rect: Add drm_rect_init() 2019-10-01 17:45:20 +03:00
drm_scdc_helper.h
drm_self_refresh_helper.h drm/atomic: fix self-refresh helpers crtc state dereference 2019-11-06 13:00:21 -05:00
drm_simple_kms_helper.h drm/simple-kms: Standardize arguments for callbacks 2019-10-24 13:55:56 +02:00
drm_syncobj.h
drm_sysfs.h
drm_util.h
drm_utils.h
drm_vblank.h drm/vblank: Document and fix vblank count barrier semantics 2019-09-03 17:16:53 +02:00
drm_vma_manager.h
drm_writeback.h
gma_drm.h
gpu_scheduler.h drm/sched: struct completion requires linux/completion.h inclusion 2019-11-08 12:29:52 -05:00
i915_component.h
i915_drm.h drm: Move port definition back to i915 header 2019-08-30 14:08:26 +05:30
i915_mei_hdcp_interface.h drm: Extend I915 mei interface for transcoder info 2019-08-30 14:08:28 +05:30
i915_pciids.h drm/i915/cml: Add Missing PCI IDs 2019-08-15 12:55:54 -07:00
intel-gtt.h
intel_lpe_audio.h
spsc_queue.h