2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2025-01-17 01:54:01 +08:00
linux-next/drivers/gpu/drm
Lyude Paul d308a881a5 drm/dp_mst: Kill the second sideband tx slot, save the world
While we support using both tx slots for sideband transmissions, it
appears that DisplayPort devices in the field didn't end up doing a very
good job of supporting it. From section 5.2.1 of the DP 2.0
specification:

  There are MST Sink/Branch devices in the field that do not handle
  interleaved message transactions.

  To facilitate message transaction handling by downstream devices, an
  MST Source device shall generate message transactions in an atomic
  manner (i.e., the MST Source device shall not concurrently interleave
  multiple message transactions). Therefore, an MST Source device shall
  clear the Message_Sequence_No value in the Sideband_MSG_Header to 0.

This might come as a bit of a surprise since the vast majority of hubs
will support using both tx slots even if they don't support interleaved
message transactions, and we've also been using both tx slots since MST
was introduced into the kernel.

However, there is one device we've had trouble getting working
consistently with MST for so long that we actually assumed it was just
broken: the infamous Dell P2415Qb. Previously this monitor would appear
to work sometimes, but in most situations would end up timing out
LINK_ADDRESS messages almost at random until you power cycled the whole
display. After reading section 5.2.1 in the DP 2.0 spec, some closer
investigation into this infamous display revealed it was only ever
timing out on sideband messages in the second TX slot.

Sure enough, avoiding the second TX slot has suddenly made this monitor
function perfectly for the first time in five years. And since they
explicitly mention this in the specification, I doubt this is the only
monitor out there with this issue. This might even explain explain the
seemingly harmless garbage sideband responses we would occasionally see
with MST hubs!

So - rewrite our sideband TX handlers to only support one TX slot. In
order to simplify our sideband handling now that we don't support
transmitting to multiple MSTBs at once, we also move all state tracking
for down replies from mstbs to the topology manager.

Signed-off-by: Lyude Paul <lyude@redhat.com>
Fixes: ad7f8a1f9c ("drm/helper: add Displayport multi-stream helper (v0.6)")
Cc: Sean Paul <sean@poorly.run>
Cc: "Lin, Wayne" <Wayne.Lin@amd.com>
Cc: <stable@vger.kernel.org> # v3.17+
Reviewed-by: Sean Paul <sean@poorly.run>
Link: https://patchwork.freedesktop.org/patch/msgid/20200424181308.770749-1-lyude@redhat.com
2020-04-27 16:18:51 -04:00
..
amd Topic pull request for topic/phy-compliance: 2020-04-17 08:52:39 +02:00
arc drm: convert .debugfs_init() hook to return void. 2020-03-18 17:53:28 +01:00
arm Merge drm/drm-next into drm-misc-next 2020-04-17 08:12:22 +02:00
armada drm/<drivers>: Use drmm_add_final_kfree 2020-03-26 15:26:52 +01:00
aspeed
ast drm/ast: Allocate initial CRTC state of the correct size 2020-04-20 15:48:23 +02:00
atmel-hlcdc drm/atmel-hlcdc: Use simple encoder 2020-04-02 14:16:44 +02:00
bochs Merge drm/drm-next into drm-misc-next 2020-04-17 08:12:22 +02:00
bridge drm/bridge: panel: Return always an error pointer in drm_panel_bridge_add() 2020-04-25 16:48:55 +02:00
cirrus drm/cirrus: Fully embrace devm_ 2020-03-26 15:48:34 +01:00
etnaviv Merge remote-tracking branch 'drm/drm-next' into drm-misc-next 2020-03-26 15:11:04 +01:00
exynos Merge drm/drm-next into drm-misc-next 2020-04-17 08:12:22 +02:00
fsl-dcu drm/fsl-dcu: Use simple encoder 2020-04-02 14:16:44 +02:00
gma500 drm/gma500: Remove dead code 2020-04-21 09:02:29 +02:00
hisilicon drm: kirin: Revert change to add register connect helper functions 2020-04-13 01:46:02 +00:00
i2c drm/i2c/tda998x: Use simple encoder 2020-04-02 14:16:44 +02:00
i810
i915 Topic pull request for topic/phy-compliance: 2020-04-17 08:52:39 +02:00
imx drm/imx: Use simple encoder 2020-04-02 14:16:44 +02:00
ingenic drm/ingenic: Remove error check from fbdev setup 2020-04-08 16:24:44 +02:00
lib
lima drm/lima: enable runtime pm 2020-04-24 20:51:24 +08:00
mcde drm/mcde: More devm_drm_dev_init 2020-03-26 16:05:12 +01:00
mediatek Merge drm/drm-next into drm-misc-next 2020-04-17 08:12:22 +02:00
meson drm/meson: Drop explicit drm_mode_config_cleanup call 2020-03-26 16:05:31 +01:00
mga
mgag200 drm/mgag200: Set up fbdev after registering device; remove error checks 2020-04-08 16:24:52 +02:00
msm Merge drm/drm-next into drm-misc-next 2020-04-17 08:12:22 +02:00
mxsfb
nouveau Merge drm/drm-next into drm-misc-next 2020-04-17 08:12:22 +02:00
omapdrm Merge drm/drm-next into drm-misc-next 2020-04-17 08:12:22 +02:00
panel panel: simple: Add Ivo M133NWF4 R0 2020-04-25 19:54:50 +02:00
panfrost drm-misc-next for 5.7: 2020-03-12 12:42:56 +10:00
pl111 drm/pl111: Drop explicit drm_mode_config_cleanup call 2020-03-26 16:05:39 +01:00
qxl drm/qxl: Use correct notify port address when creating cursor ring 2020-03-31 16:48:00 +02:00
r128 drm: delete drm_pci.h 2020-04-03 17:11:41 +02:00
radeon Merge drm/drm-next into drm-misc-next 2020-04-17 08:12:22 +02:00
rcar-du drm/rcar-du: Use simple encoder 2020-04-02 14:16:45 +02:00
rockchip drm/rockchip: Remove unneeded semicolon 2020-04-27 21:15:55 +02:00
savage
scheduler drm/scheduler: fix rare NULL ptr race 2020-03-26 10:22:36 -04:00
selftests drm/modes: Make sure to parse valid rotation value from cmdline 2020-02-12 18:32:54 +01:00
shmobile drm/shmobile: Use simple encoder 2020-04-02 14:16:45 +02:00
sis
sti drm: convert .debugfs_init() hook to return void. 2020-03-18 17:53:28 +01:00
stm drm/stm: ltdc: check number of endpoints 2020-04-27 15:42:12 +02:00
sun4i drm/sun4i: tcon: Delete an error message in sun4i_tcon_init_irq() 2020-04-06 10:19:25 +02:00
tdfx
tegra drm: Fix misspellings of "Analog Devices" 2020-04-21 08:15:03 +02:00
tidss drm/tidss: Use simple encoder 2020-04-02 14:16:45 +02:00
tilcdc drm/tilcdc: Set up fbdev after fully registering device 2020-04-08 16:24:56 +02:00
tiny drm/mipi-dbi: Drop explicit drm_mode_config_cleanup call 2020-03-26 16:09:10 +01:00
ttm Merge drm/drm-next into drm-misc-next 2020-04-17 08:12:22 +02:00
tve200
udl drm/udl: Remove error check from fbdev setup 2020-04-08 16:24:59 +02:00
v3d drm/v3d: Use drmm_add_final_kfree 2020-03-26 15:18:11 +01:00
vboxvideo Merge drm/drm-next into drm-misc-next 2020-04-17 08:12:22 +02:00
vc4 Merge drm/drm-next into drm-misc-next 2020-04-17 08:12:22 +02:00
vgem drm: Garbage collect drm_dev_fini 2020-03-26 15:45:36 +01:00
via Merge branch 'akpm' (patches from Andrew) 2020-01-31 12:16:36 -08:00
virtio drm/virtio: fix OOB in virtio_gpu_object_create 2020-04-06 15:10:37 +02:00
vkms drm/vkms: Use simple encoder 2020-04-02 14:16:46 +02:00
vmwgfx Merge branch 'ttm-transhuge' of git://people.freedesktop.org/~thomash/linux into drm-next 2020-04-03 09:07:49 +10:00
xen Merge drm/drm-next into drm-misc-next 2020-04-17 08:12:22 +02:00
zte drm/zte: Use simple encoder 2020-04-02 14:16:46 +02:00
drm_agpsupport.c
drm_atomic_helper.c drm/bridge: Add the necessary bits to support bus format negotiation 2020-01-31 16:39:53 +01:00
drm_atomic_state_helper.c drm/atomic-helper: fix kerneldoc 2020-02-15 13:21:22 +01:00
drm_atomic_uapi.c
drm_atomic.c drm: convert .debugfs_init() hook to return void. 2020-03-18 17:53:28 +01:00
drm_auth.c drm: error out with EBUSY when device has existing master 2020-03-30 12:20:41 +01:00
drm_blend.c drm: add docs about the IN_FORMATS plane property 2020-03-31 11:12:42 +02:00
drm_bridge_connector.c drm: Add helper to create a connector for a chain of bridges 2020-02-26 13:31:41 +02:00
drm_bridge.c drm: Add helper to create a connector for a chain of bridges 2020-02-26 13:31:41 +02:00
drm_bufs.c drm: delete drm_pci.h 2020-04-03 17:11:41 +02:00
drm_cache.c
drm_client_modeset.c Linux 5.6-rc5 2020-03-11 07:27:21 +10:00
drm_client.c drm: convert .debugfs_init() hook to return void. 2020-03-18 17:53:28 +01:00
drm_color_mgmt.c
drm_connector.c drm/edid: Fix DispID tile parsing for override EDID 2020-03-18 17:52:36 +02:00
drm_context.c drm: context: Clean up documentation 2020-03-16 09:23:55 +01:00
drm_crtc_helper_internal.h
drm_crtc_helper.c drm: drop unused drm_crtc callback 2020-02-15 21:15:17 +01:00
drm_crtc_internal.h drm: convert .debugfs_init() hook to return void. 2020-03-18 17:53:28 +01:00
drm_crtc.c
drm_damage_helper.c
drm_debugfs_crc.c drm/crc: Actually allow to change the crc source 2020-01-28 16:49:22 +01:00
drm_debugfs.c drm: convert .debugfs_init() hook to return void. 2020-03-18 17:53:28 +01:00
drm_dma.c drm: delete drm_pci.h 2020-04-03 17:11:41 +02:00
drm_dp_aux_dev.c drm/dp_mst: Add MST support to DP DPCD R/W functions 2020-01-09 18:07:46 -05:00
drm_dp_cec.c
drm_dp_dual_mode_helper.c
drm_dp_helper.c drm/dp: get/set phy compliance pattern 2020-04-08 14:40:42 +02:00
drm_dp_mst_topology_internal.h
drm_dp_mst_topology.c drm/dp_mst: Kill the second sideband tx slot, save the world 2020-04-27 16:18:51 -04:00
drm_drv.c drm: Fix wrong kfree() in managed resource usage example 2020-04-02 13:04:57 +02:00
drm_dsc.c
drm_dumb_buffers.c
drm_edid_load.c
drm_edid.c drm/edid: Fix DispID tile parsing for override EDID 2020-03-18 17:52:36 +02:00
drm_encoder_slave.c
drm_encoder.c
drm_fb_cma_helper.c drm: Fix misspellings of "Analog Devices" 2020-04-21 08:15:03 +02:00
drm_fb_helper.c drm/fb-helper: Remove return value from drm_fbdev_generic_setup() 2020-04-08 16:27:08 +02:00
drm_file.c drm/vmwgfx: Hook up the helpers to align buffer objects 2020-03-24 18:50:35 +01:00
drm_flip_work.c
drm_format_helper.c drm/format_helper: Dual licence the file in GPL 2 and MIT 2020-02-17 10:27:13 +01:00
drm_fourcc.c
drm_framebuffer.c drm: convert .debugfs_init() hook to return void. 2020-03-18 17:53:28 +01:00
drm_gem_cma_helper.c
drm_gem_framebuffer_helper.c drm: Don't free a struct never allocated by drm_gem_fb_init() 2020-04-16 13:44:29 +02:00
drm_gem_shmem_helper.c drm/shmem: drop pgprot_decrypted() 2020-03-02 07:13:19 +01:00
drm_gem_ttm_helper.c
drm_gem_vram_helper.c drm/vram-helpers: Merge code into a single file 2020-04-09 09:56:33 +02:00
drm_gem.c drm: Manage drm_gem_init with drmm_ 2020-03-26 15:38:09 +01:00
drm_hashtab.c
drm_hdcp.c drm/hdcp: optimizing the srm handling 2020-03-04 06:33:00 +05:30
drm_internal.h drm: Manage drm_vblank_cleanup with drmm_ 2020-03-26 15:38:17 +01:00
drm_ioc32.c
drm_ioctl.c drm: rework SET_MASTER and DROP_MASTER perm handling 2020-03-30 12:20:32 +01:00
drm_irq.c drm/irq: remove check on dev->dev_private 2020-02-11 18:39:47 +02:00
drm_kms_helper_common.c
drm_lease.c drm/lease: fix WARNING in idr_destroy 2020-03-18 14:42:18 +01:00
drm_legacy_misc.c
drm_legacy.h
drm_lock.c drm: lock: Clean up documentation 2020-03-16 09:27:09 +01:00
drm_managed.c drm/managed: Fix off-by-one in warning 2020-03-30 21:42:23 +02:00
drm_memory.c
drm_mipi_dbi.c drm/mipi-dbi: Drop explicit drm_mode_config_cleanup call 2020-03-26 16:09:10 +01:00
drm_mipi_dsi.c
drm_mm.c drm/mm: revert "Break long searches in fragmented address spaces" 2020-03-31 17:35:56 +02:00
drm_mode_config.c drm: Manage drm_mode_config_init with drmm_ 2020-03-26 15:45:43 +01:00
drm_mode_object.c
drm_modes.c drm/modes: Make sure to parse valid rotation value from cmdline 2020-02-12 18:32:54 +01:00
drm_modeset_helper.c
drm_modeset_lock.c
drm_of.c
drm_panel_orientation_quirks.c
drm_panel.c
drm_pci.c drm: delete drm_pci.h 2020-04-03 17:11:41 +02:00
drm_plane_helper.c
drm_plane.c
drm_prime.c drm/prime: fix extracting of the DMA addresses from a scatterlist 2020-04-05 10:44:12 -04:00
drm_print.c
drm_probe_helper.c
drm_property.c
drm_rect.c
drm_scatter.c drm: prevent a harmless integer overflow in drm_legacy_sg_alloc() 2020-02-29 00:16:12 +01:00
drm_scdc_helper.c
drm_self_refresh_helper.c
drm_simple_kms_helper.c drm/simple-kms: Fix documentation for drm_simple_encoder_init() 2020-03-06 09:24:29 +01:00
drm_syncobj.c drm/syncobj: Add documentation for timeline syncobj 2020-01-20 14:22:21 +01:00
drm_sysfs.c drm: sysfs: Use scnprintf() for avoiding potential buffer overflow 2020-03-11 14:54:09 +01:00
drm_trace_points.c
drm_trace.h
drm_vblank.c drm/vblank: Add intro to documentation 2020-04-07 18:32:42 +02:00
drm_vm.c drm: drm_vm: Use fallthrough; 2020-03-18 14:48:34 +01:00
drm_vma_manager.c
drm_writeback.c
Kconfig drm: unbreak the DRM menu, broken by DRM_EXPORT_FOR_TESTS 2020-03-06 11:15:43 +00:00
Makefile drm/vram-helpers: Merge code into a single file 2020-04-09 09:56:33 +02:00