linux/drivers/gpu/drm
Simon Rettberg 5954acbacb drm/display: Don't assume dual mode adaptors support i2c sub-addressing
Current dual mode adaptor ("DP++") detection code assumes that all
adaptors support i2c sub-addressing for read operations from the
DP-HDMI adaptor ID buffer.  It has been observed that multiple
adaptors do not in fact support this, and always return data starting
at register 0.  On affected adaptors, the code fails to read the proper
registers that would identify the device as a type 2 adaptor, and
handles those as type 1, limiting the TMDS clock to 165MHz, even if
the according register would announce a higher TMDS clock.
Fix this by always reading the ID buffer starting from offset 0, and
discarding any bytes before the actual offset of interest.

We tried finding authoritative documentation on whether or not this is
allowed behaviour, but since all the official VESA docs are paywalled,
the best we could come up with was the spec sheet for Texas Instruments'
SNx5DP149 chip family.[1]  It explicitly mentions that sub-addressing is
supported for register writes, but *not* for reads (See NOTE in
section 8.5.3).  Unless TI openly decided to violate the VESA spec, one
could take that as a hint that sub-addressing is in fact not mandated
by VESA.
The other two adaptors affected used the PS8409(A) and the LT8611,
according to the data returned from their ID buffers.

[1] https://www.ti.com/lit/ds/symlink/sn75dp149.pdf

Cc: stable@vger.kernel.org
Signed-off-by: Simon Rettberg <simon.rettberg@rz.uni-freiburg.de>
Reviewed-by: Rafael Gieschke <rafael.gieschke@rz.uni-freiburg.de>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20221006113314.41101987@computer
Acked-by: Jani Nikula <jani.nikula@intel.com>
2022-11-15 23:31:02 +02:00
..
amd drm/amdgpu: use the last IB as gang leader v2 2022-11-15 15:27:18 +01:00
arm
armada
aspeed
ast drm/ast: make ast_modeset static 2022-09-26 09:11:47 +02:00
atmel-hlcdc
bridge drm/bridge: ps8640: Add back the 50 ms mystery delay after HPD 2022-10-21 08:07:12 -07:00
display drm/display: Don't assume dual mode adaptors support i2c sub-addressing 2022-11-15 23:31:02 +02:00
etnaviv
exynos IOMMU Updates for Linux v6.1: 2022-10-10 13:20:53 -07:00
fsl-dcu
gma500 drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
gud
hisilicon drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
hyperv hyperv-next for 6.1 2022-10-10 13:59:01 -07:00
i2c
i810
i915 Random number generator fixes for Linux 6.1-rc1. 2022-10-16 15:27:07 -07:00
imx drm/imx: imx-tve: Fix return type of imx_tve_connector_mode_valid 2022-11-01 14:36:55 +01:00
ingenic
kmb
lib
lima drm/lima: Fix opp clkname setting in case of missing regulator 2022-11-14 19:08:21 +08:00
logicvc
mcde
mediatek drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
meson drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
mga
mgag200 drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
msm drm/msm: Fix build break with recent mm tree 2022-09-30 10:13:49 +10:00
mxsfb
nouveau nouveau: fix migrate_to_ram() for faulting page 2022-10-20 21:27:24 -07:00
omapdrm drm/omap: dmm_tiler:Remove the print function dev_err() 2022-09-09 16:23:21 +03:00
panel drm/panel: simple: set bpc field for logic technologies displays 2022-11-10 07:29:45 -08:00
panfrost drm/panfrost: Split io-pgtable requests properly 2022-11-09 14:17:39 +00:00
pl111
qxl drm/qxl: drop set_prod_notify parameter from qxl_ring_create 2022-09-23 13:16:37 +02:00
r128
radeon platform-drivers-x86 for v6.1-1 2022-10-05 10:38:24 -07:00
rcar-du drm: rcar-du: dsi: Fix VCLKSET write 2022-09-07 23:48:42 +03:00
rockchip drm/rockchip: vop2: disable planes when disabling the crtc 2022-10-29 14:41:29 +02:00
savage
scheduler drm/scheduler: fix fence ref counting 2022-10-25 13:14:36 +02:00
shmobile drm/plane: Remove drm_plane_init() 2022-09-20 09:37:12 +02:00
sis
solomon drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
sprd
sti drm-misc-next for v6.1: 2022-09-06 10:56:04 +02:00
stm
sun4i Merge tag 'drm-misc-next-2022-09-09' of git://anongit.freedesktop.org/drm/drm-misc into drm-next 2022-09-11 22:03:07 +10:00
tdfx
tegra
tests drm: tests: Fix a buffer overflow in format_helper_test 2022-10-20 09:56:05 +02:00
tidss drm/tidss: fix repeated words in comments 2022-09-09 16:23:26 +03:00
tilcdc drm/plane: Remove drm_plane_init() 2022-09-20 09:37:12 +02:00
tiny drm/simpledrm: Synchronize access to GEM BOs 2022-09-27 10:27:00 +02:00
ttm drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
tve200
udl drm/udl: Sync pending URBs at the end of suspend 2022-09-10 21:45:53 +02:00
v3d
vboxvideo drm/vboxvideo: fix repeated words in comments 2022-09-17 15:01:24 +02:00
vc4 drm/vc4: kms: Fix IS_ERR() vs NULL check for vc4_kms 2022-11-10 12:46:02 +01:00
vgem
via drm/via: Add new condition to via_dma_cleanup() 2022-09-07 07:01:16 +02:00
virtio virtio-gpu: fix shift wrapping bug in virtio_gpu_fence_event_create() 2022-09-23 13:16:37 +02:00
vkms Merge drm/drm-next into drm-misc-next 2022-09-14 12:22:18 +01:00
vmwgfx drm/vmwgfx: Fix memory leak in vmw_mksstat_add_ioctl() 2022-09-21 12:15:15 -04:00
xen
xlnx
drm_agpsupport.c
drm_aperture.c drm/aperture: Fix some kerneldoc comments 2022-09-12 09:34:07 +02:00
drm_atomic.c
drm_atomic_helper.c drm/atomic-helper: Fix kernel-doc 2022-09-20 09:24:35 +02:00
drm_atomic_state_helper.c
drm_atomic_uapi.c
drm_auth.c
drm_blend.c
drm_bridge.c
drm_bridge_connector.c
drm_buddy.c
drm_bufs.c
drm_cache.c
drm_client.c
drm_client_modeset.c
drm_color_mgmt.c
drm_connector.c drm/connector: Set DDC pointer in drmm_connector_init 2022-10-20 10:53:13 +02:00
drm_context.c
drm_crtc.c
drm_crtc_helper.c Driver core changes for 6.1-rc1 2022-10-07 17:04:10 -07:00
drm_crtc_helper_internal.h
drm_crtc_internal.h
drm_damage_helper.c drm: Use original src rect while initializing damage iterator 2022-09-13 14:38:33 +03:00
drm_debugfs.c drm/edid: Handle EDID 1.4 range descriptor h/vfreq offsets 2022-09-02 16:38:51 +03:00
drm_debugfs_crc.c
drm_displayid.c
drm_dma.c
drm_drv.c drm/drv: Fix potential memory leak in drm_dev_init() 2022-11-10 18:49:01 -05:00
drm_dumb_buffers.c
drm_edid.c drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
drm_edid_load.c
drm_encoder.c
drm_encoder_slave.c
drm_fb_dma_helper.c
drm_fb_helper.c
drm_file.c drm-misc-next for v6.1: 2022-09-06 10:56:04 +02:00
drm_flip_work.c
drm_format_helper.c drm/format-helper: Only advertise supported formats for conversion 2022-10-31 09:50:44 +01:00
drm_fourcc.c
drm_framebuffer.c drm/framebuffer: convert to drm_dbg_kms() 2022-09-28 10:43:30 +02:00
drm_gem.c drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
drm_gem_atomic_helper.c
drm_gem_dma_helper.c
drm_gem_framebuffer_helper.c
drm_gem_shmem_helper.c drm-misc-next for v6.1: 2022-09-06 10:56:04 +02:00
drm_gem_ttm_helper.c
drm_gem_vram_helper.c
drm_hashtab.c
drm_internal.h drm: Fix potential null-ptr-deref in drm_vblank_destroy_worker() 2022-11-10 18:49:02 -05:00
drm_ioc32.c
drm_ioctl.c
drm_irq.c
drm_kms_helper_common.c
drm_lease.c
drm_legacy.h
drm_legacy_misc.c
drm_lock.c
drm_managed.c
drm_memory.c
drm_mipi_dbi.c drm/probe-helper: Add drm_crtc_helper_mode_valid_fixed() 2022-09-12 09:14:26 +02:00
drm_mipi_dsi.c
drm_mm.c
drm_mode_config.c Revert "drm: hide unregistered connectors from GETCONNECTOR IOCTL" 2022-11-15 19:18:41 +01:00
drm_mode_object.c
drm_modes.c
drm_modeset_helper.c drm/plane-helper: Provide DRM_PLANE_NON_ATOMIC_FUNCS initializer macro 2022-09-20 09:42:31 +02:00
drm_modeset_lock.c
drm_nomodeset.c
drm_of.c
drm_panel.c
drm_panel_orientation_quirks.c drm: panel-orientation-quirks: Add quirk for Acer Switch V 10 (SW5-017) 2022-11-08 10:12:45 +01:00
drm_pci.c
drm_plane.c drm/plane: Allocate planes with drm_universal_plane_alloc() 2022-09-20 09:41:06 +02:00
drm_plane_helper.c drm/plane-helper: Warn if atomic drivers call non-atomic helpers 2022-09-20 09:42:31 +02:00
drm_prime.c
drm_print.c drm_print: add _ddebug descriptor to drm_*dbg prototypes 2022-09-24 15:02:02 +02:00
drm_privacy_screen.c
drm_privacy_screen_x86.c
drm_probe_helper.c drm/probe-helper: Add drm_crtc_helper_mode_valid_fixed() 2022-09-12 09:14:26 +02:00
drm_property.c
drm_rect.c
drm_scatter.c
drm_self_refresh_helper.c
drm_simple_kms_helper.c
drm_syncobj.c
drm_sysfs.c
drm_trace.h
drm_trace_points.c
drm_vblank.c
drm_vblank_work.c
drm_vm.c
drm_vma_manager.c
drm_writeback.c
Kconfig Driver core changes for 6.1-rc1 2022-10-07 17:04:10 -07:00
Makefile Driver core changes for 6.1-rc1 2022-10-07 17:04:10 -07:00