mirror_ubuntu-kernels/drivers/gpu/drm/i915/display
Ville Syrjälä 672d6ca758 drm/i915: Implement WaEdpLinkRateDataReload
A lot of modern laptops use the Parade PS8461E MUX for eDP
switching. The MUX can operate in jitter cleaning mode or
redriver mode, the first one resulting in higher link
quality. The jitter cleaning mode needs to know the link
rate used and the MUX achieves this by snooping the
LINK_BW_SET, LINK_RATE_SELECT and SUPPORTED_LINK_RATES
DPCD accesses.

When the MUX is powered down (seems this can happen whenever
the display is turned off) it loses track of the snooped
link rates so when we do the LINK_RATE_SELECT write it no
longer knowns which link rate we're selecting, and thus it
falls back to the lower quality redriver mode. This results
in unstable high link rates (eg. usually 8.1Gbps link rate
no longer works correctly).

In order to avoid all that let's re-snoop SUPPORTED_LINK_RATES
from the sink at the start of every link training.

Unfortunately we don't have a way to detect the presence of
the MUX. It looks like the set of laptops equipped with this
MUX is fairly large and contains devices from multiple
manufacturers. It may also still be growing with new models.
So a quirk doesn't seem like a very easily maintainable
option, thus we shall attempt to do this unconditionally on
all machines that use LINK_RATE_SELECT. Hopefully this extra
DPCD read doesn't cause issues for any unaffected machine.
If that turns out to be the case we'll need to convert this
into a quirk in the future.

Cc: stable@vger.kernel.org
Cc: Jason A. Donenfeld <Jason@zx2c4.com>
Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/6205
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220902070319.15395-1-ville.syrjala@linux.intel.com
Tested-by: Aaron Ma <aaron.ma@canonical.com>
Tested-by: Jason A. Donenfeld <Jason@zx2c4.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
(cherry picked from commit 25899c590c)
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2022-09-06 14:51:46 -04:00
..
dvo_ch7xxx.c
dvo_ch7017.c
dvo_ivch.c
dvo_ns2501.c
dvo_sil164.c
dvo_tfp410.c
g4x_dp.c drm/i915: Extract intel_edp_fixup_vbt_bpp() 2022-05-27 20:21:00 +03:00
g4x_dp.h drm/i915: Give g4x_{dp,hdmi}.c g4x_ namespace 2021-03-19 18:31:49 +02:00
g4x_hdmi.c drm/i915: Sanitize the port -> DDI/AUX power domain mapping for each platform 2022-04-20 20:42:12 +03:00
g4x_hdmi.h drm/i915: Only include i915_reg.h from .c files 2022-02-02 07:59:54 -08:00
hsw_ips.c drm/i915/pcode: Extend pcode functions for multiple gt's 2022-05-20 09:11:27 +01:00
hsw_ips.h drm/i915: Extract hsw_ips_get_config() 2022-02-09 21:51:56 +02:00
i9xx_plane.c drm: Drop drm_blend.h from drm_crtc.h 2022-06-20 23:53:55 +03:00
i9xx_plane.h drm/i915: migrate i9xx plane get config 2021-02-08 12:09:28 +02:00
icl_dsi_regs.h drm/i915/reg: split out icl_dsi_regs.h 2022-02-21 12:06:15 +02:00
icl_dsi.c drm/i915/dsi: filter invalid backlight and CABC ports 2022-08-29 10:00:35 -04:00
icl_dsi.h drm/i915/dsi: split out icl_dsi.h 2021-11-23 13:11:42 +02:00
intel_acpi.c drm/i915: Free the returned object of acpi_evaluate_dsm() 2021-10-13 13:41:16 +03:00
intel_acpi.h drm/i915: Associate ACPI connector nodes with connector entries (v2) 2021-09-09 12:59:07 +02:00
intel_atomic_plane.c Merge drm/drm-next into drm-misc-next 2022-04-18 20:46:55 +01:00
intel_atomic_plane.h drm/i915: Split plane data_rate into data_rate+data_rate_y 2022-03-21 17:46:38 +02:00
intel_atomic.c drm/i915: Fix the async flip wm0/ddb optimization 2022-03-08 08:35:11 +02:00
intel_atomic.h drm/i915: Clean up the bigjoiner state copy logic 2022-02-11 22:42:23 +02:00
intel_audio_regs.h drm/i915/regs: split out intel audio register definitions 2022-06-03 10:49:16 +03:00
intel_audio.c drm/i915/regs: split out intel audio register definitions 2022-06-03 10:49:16 +03:00
intel_audio.h drm/i915/audio: rename intel_init_audio_hooks to intel_audio_hooks_init 2021-11-05 13:05:14 +02:00
intel_backlight.c drm/i915/backlight: Disable pps power hook for aux based backlight 2022-08-29 10:00:44 -04:00
intel_backlight.h drm/i915/backlight: mass rename functions to have intel_backlight_ prefix 2021-08-26 10:40:41 +03:00
intel_bios.c drm/i915/bios: Copy the whole MIPI sequence block 2022-09-06 14:51:38 -04:00
intel_bios.h drm/i915/bios: calculate panel type as per child device index in VBT 2022-06-20 19:56:06 +03:00
intel_bw.c drm/i915: fix null pointer dereference 2022-08-29 10:00:48 -04:00
intel_bw.h drm/i915: Add "maximum pipe read bandwidth" checks 2022-03-21 18:00:15 +02:00
intel_cdclk.c drm/i915/pcode: Extend pcode functions for multiple gt's 2022-05-20 09:11:27 +01:00
intel_cdclk.h drm/i915: Fix DBUF bandwidth vs. cdclk handling 2022-03-21 17:56:41 +02:00
intel_color.c drm/i915: Move the color stuff under INTEL_INFO->display 2022-06-27 19:05:48 +03:00
intel_color.h drm/i915: Split color_commit() into noarm+arm pair 2022-03-29 16:35:33 +03:00
intel_combo_phy_regs.h drm/i915: Move combo PHY registers to their own header 2022-01-11 14:03:25 -08:00
intel_combo_phy.c drm/i915/intel_combo_phy: Print I/O voltage info 2022-03-28 13:40:52 +03:00
intel_combo_phy.h
intel_connector.c drm/i915: Pass intel_connector to intel_panel_{init,fini}() 2022-03-29 16:35:33 +03:00
intel_connector.h drm/i915: Split intel_attach_colorspace_property() into HDMI vs. DP variants 2020-12-02 01:29:31 +05:30
intel_crt.c drm/i915/display: remove intel_wait_for_vblank() 2021-12-02 13:45:29 +02:00
intel_crt.h drm/i915: Only include i915_reg.h from .c files 2022-02-02 07:59:54 -08:00
intel_crtc_state_dump.c drm/i915/display: rename dev_priv -> i915 in crtc state dump 2022-06-17 11:55:07 +03:00
intel_crtc_state_dump.h drm/i915/display: split out crtc state dump to a separate file 2022-06-17 11:54:58 +03:00
intel_crtc.c drm/i915/display: Fix warnings about PSR lock not held 2022-04-08 10:20:31 -07:00
intel_crtc.h drm/i915: s/intel_get_first_crtc/intel_first_crtc/ 2021-12-09 16:18:30 +02:00
intel_cursor.c drm: Drop drm_blend.h from drm_crtc.h 2022-06-20 23:53:55 +03:00
intel_cursor.h drm/i915: refactor cursor code out of i915_display.c 2020-12-22 10:09:05 +02:00
intel_ddi_buf_trans.c drm/i915/display/adlp: More updates to voltage swing table 2022-06-02 17:58:17 -07:00
intel_ddi_buf_trans.h drm/i915: Shrink {icl_mg,tgl_dkl}_phy_ddi_buf_trans 2021-10-14 18:45:59 +03:00
intel_ddi.c - Suspend fixes for Display (Jose) 2022-07-12 12:55:36 +10:00
intel_ddi.h drm/i915: Only include i915_reg.h from .c files 2022-02-02 07:59:54 -08:00
intel_de.h drm/i915: Only include i915_reg.h from .c files 2022-02-02 07:59:54 -08:00
intel_display_debugfs.c drm/i915/display/debug: Expose crtc current bpc via debugfs 2022-05-23 11:27:41 +03:00
intel_display_debugfs.h drm/i915/debugfs: pass intel_connector to intel_connector_debugfs_add() 2021-10-01 13:45:37 +03:00
intel_display_power_map.c drm/i915: move tons of power well initializers to rodata 2022-05-02 11:37:10 +03:00
intel_display_power_map.h drm/i915: Move the power domain->well mappings to intel_display_power_map.c 2022-04-20 20:41:57 +03:00
intel_display_power_well.c drm/i915/pcode: Extend pcode functions for multiple gt's 2022-05-20 09:11:27 +01:00
intel_display_power_well.h drm/i915: Simplify power well definitions by adding power well instances 2022-04-20 20:42:12 +03:00
intel_display_power.c drm/i915: Nuke PCH_JSP 2022-07-06 20:33:47 +03:00
intel_display_power.h drm/i915: Remove the XELPD specific AUX and DDI power domains 2022-04-20 20:42:13 +03:00
intel_display_trace.c drm/i915/trace: split out display trace to a separate file 2021-12-09 11:21:46 +02:00
intel_display_trace.h drm/i915: Use str_on_off() 2022-03-02 08:48:23 -08:00
intel_display_types.h - General driver clean-up (Jani, Ville, Julia) 2022-06-24 12:07:47 +10:00
intel_display.c IOMMU Updates for Linux v5.20/v6.0: 2022-08-06 10:42:38 -07:00
intel_display.h drm/i915: Move dbuf details to INTEL_INFO->display 2022-06-27 18:35:09 +03:00
intel_dmc_regs.h drm for 5.19-rc1 2022-05-25 16:18:27 -07:00
intel_dmc.c drm for 5.19-rc1 2022-05-25 16:18:27 -07:00
intel_dmc.h drm/i915/dmc: hide DMC version macros 2022-04-01 10:06:27 +03:00
intel_dp_aux_backlight.c drm/i915/bios: Split VBT data into per-panel vs. global parts 2022-05-27 20:30:42 +03:00
intel_dp_aux_backlight.h
intel_dp_aux.c drm/i915/dp: make intel_dp_pack_aux() static again 2022-01-13 15:20:48 +02:00
intel_dp_aux.h drm/i915/dp: make intel_dp_pack_aux() static again 2022-01-13 15:20:48 +02:00
intel_dp_hdcp.c drm/display: Move HDCP helpers into display-helper module 2022-04-25 11:19:36 +02:00
intel_dp_hdcp.h drm/i915/hdcp: add intel_dp_hdcp.h and rename init accordingly 2021-04-28 11:07:01 +03:00
intel_dp_link_training.c drm/i915: Implement WaEdpLinkRateDataReload 2022-09-06 14:51:46 -04:00
intel_dp_link_training.h drm: Rename dp/ to display/ 2022-04-25 11:17:45 +02:00
intel_dp_mst.c drm/i915: fix a possible refcount leak in intel_dp_add_mst_connector() 2022-07-06 23:04:43 -04:00
intel_dp_mst.h drm/i915/mst: abstract intel_dp_mst_source_support() 2021-10-08 13:14:25 +03:00
intel_dp.c drm/i915/backlight: Disable pps power hook for aux based backlight 2022-08-29 10:00:44 -04:00
intel_dp.h drm/i915/bios: Split VBT data into per-panel vs. global parts 2022-05-27 20:30:42 +03:00
intel_dpio_phy.c drm/i915: Move per-platform power well hooks to intel_display_power_well.c 2022-04-20 20:41:39 +03:00
intel_dpio_phy.h drm/i915: De-wrapper bxt_ddi_phy_set_signal_levels() 2021-10-04 12:43:01 +03:00
intel_dpll_mgr.c drm/i915: Fix error code in icl_compute_combo_phy_dpll() 2022-06-28 13:18:44 +03:00
intel_dpll_mgr.h drm/i915/dpll: move shared dpll state verification to intel_dpll_mgr.c 2022-06-17 11:54:51 +03:00
intel_dpll.c drm/i915: Clean up DPLL related debugs 2022-05-31 21:04:46 +03:00
intel_dpll.h drm/i915: Add crtc .crtc_get_shared_dpll() 2022-04-25 21:15:12 +03:00
intel_dpt.c drm/i915/display: Add smem fallback allocation for dpt 2022-06-22 11:17:13 +01:00
intel_dpt.h drm/i915: Restore memory mapping for DPT FBs across system suspend/resume 2021-11-03 11:07:24 +02:00
intel_drrs.c drm/i915/bios: Split VBT data into per-panel vs. global parts 2022-05-27 20:30:42 +03:00
intel_drrs.h drm/i915: Move intel_drrs_compute_config() into intel_dp.c 2022-03-31 14:28:20 +03:00
intel_dsb.c drm/i915/dsb: modified to drm_info in dsb_prepare() 2022-04-05 17:13:07 +05:30
intel_dsb.h drm/i915: Only include i915_reg.h from .c files 2022-02-02 07:59:54 -08:00
intel_dsi_dcs_backlight.c drm/i915/bios: Split VBT data into per-panel vs. global parts 2022-05-27 20:30:42 +03:00
intel_dsi_dcs_backlight.h
intel_dsi_vbt.c drm/i915/bios: Split VBT data into per-panel vs. global parts 2022-05-27 20:30:42 +03:00
intel_dsi_vbt.h drm/i915/dsi: split out intel_dsi_vbt.h 2021-11-23 13:11:13 +02:00
intel_dsi.c drm/i915/bios: Split VBT data into per-panel vs. global parts 2022-05-27 20:30:42 +03:00
intel_dsi.h drm/i915/dsi: disassociate VBT video transfer mode from register values 2022-02-21 12:06:06 +02:00
intel_dvo_dev.h drm/i915: Only include i915_reg.h from .c files 2022-02-02 07:59:54 -08:00
intel_dvo.c drm/i915: Put fixed modes directly onto the panel's fixed_modes list 2022-03-31 14:28:13 +03:00
intel_dvo.h
intel_fb_pin.c drm/i915: Rename INTEL_REGION_LMEM with INTEL_REGION_LMEM_0 2022-03-21 08:37:33 +00:00
intel_fb_pin.h drm/i915/display: move pin/unpin fb/plane code to a new file. 2021-10-12 12:58:40 +03:00
intel_fb.c drm: Drop drm_blend.h from drm_crtc.h 2022-06-20 23:53:55 +03:00
intel_fb.h drm/i915/dg2: Tile 4 plane format support 2022-02-24 17:34:48 +02:00
intel_fbc.c - General driver clean-up (Jani, Ville, Julia) 2022-06-24 12:07:47 +10:00
intel_fbc.h drm/i915/fbc: Introduce intel_fbc_sanitize() 2022-04-13 17:19:38 +03:00
intel_fbdev.c drm/i915/fbdev: fixup setting screen_size 2022-03-07 09:23:18 +00:00
intel_fbdev.h drm/i915/fbdev: add intel_fbdev_framebuffer() helper 2022-02-17 10:01:21 +02:00
intel_fdi.c drm/i915: Use str_on_off() 2022-03-02 08:48:23 -08:00
intel_fdi.h drm/i915: Move intel_ddi_fdi_post_disable() to fdi code 2021-10-19 09:40:13 +03:00
intel_fifo_underrun.c drm/i915/trace: split out display trace to a separate file 2021-12-09 11:21:46 +02:00
intel_fifo_underrun.h
intel_frontbuffer.c drm/i915/trace: split out display trace to a separate file 2021-12-09 11:21:46 +02:00
intel_frontbuffer.h drm/i915/fb: reduce include dependencies 2021-12-13 12:04:59 +02:00
intel_global_state.c
intel_global_state.h
intel_gmbus.c drm/display: Move HDCP helpers into display-helper module 2022-04-25 11:19:36 +02:00
intel_gmbus.h drm/i915: Remove unused intel_gmbus_set_speed() function 2021-12-16 16:17:01 +01:00
intel_hdcp.c - General driver clean-up (Jani, Ville, Julia) 2022-06-24 12:07:47 +10:00
intel_hdcp.h drm/i915/hdcp: Pass dig_port to intel_hdcp_init 2021-01-13 08:29:32 +05:30
intel_hdmi.c - Suspend fixes for Display (Jose) 2022-07-12 12:55:36 +10:00
intel_hdmi.h drm/i915/dp: Reuse intel_hdmi_tmds_clock() 2022-02-11 22:36:00 +02:00
intel_hotplug.c drm/i915: Do not start connector polling if display is disabled 2022-06-16 13:15:39 +03:00
intel_hotplug.h
intel_lpe_audio.c drm/i915/audio: name the audio sub-struct in drm_i915_private 2021-11-05 13:04:48 +02:00
intel_lpe_audio.h
intel_lspcon.c drm: Drop drm_edid.h from drm_crtc.h 2022-06-20 23:53:55 +03:00
intel_lspcon.h drm/i915/display: Implement DRM infoframe read for LSPCON 2020-12-02 01:29:52 +05:30
intel_lvds.c drm/i915/bios: calculate panel type as per child device index in VBT 2022-06-20 19:56:06 +03:00
intel_lvds.h drm/i915: Only include i915_reg.h from .c files 2022-02-02 07:59:54 -08:00
intel_modeset_setup.c drm/i915/display: convert modeset setup to struct drm_i915_private *i915 2022-06-20 19:28:47 +03:00
intel_modeset_setup.h drm/i915/display: convert modeset setup to struct drm_i915_private *i915 2022-06-20 19:28:47 +03:00
intel_modeset_verify.c drm/i915/display: change who adds [] around crtc state dump context string 2022-06-17 11:55:03 +03:00
intel_modeset_verify.h drm/i915/display: split out modeset verification code 2022-06-17 11:54:56 +03:00
intel_opregion.c - General driver clean-up (Jani, Ville, Julia) 2022-06-24 12:07:47 +10:00
intel_opregion.h drm/i915/opregion: add function to check if headless sku 2022-06-16 13:15:36 +03:00
intel_overlay.c drm/i915/overlay: remove redundant GEM_BUG_ON() 2022-06-08 11:32:39 +03:00
intel_overlay.h
intel_panel.c drm/i915: Accept more fixed modes with VRR panels 2022-06-01 16:45:42 +03:00
intel_panel.h drm/i915: Accept more fixed modes with VRR panels 2022-06-01 16:45:42 +03:00
intel_pch_display.c drm/i915: Relocate a few more pch transcoder bits 2022-03-04 18:24:19 +02:00
intel_pch_display.h drm/i915: Relocate a few more pch transcoder bits 2022-03-04 18:24:19 +02:00
intel_pch_refclk.c drm/i915: Remove bogus LPT iCLKIP WARN 2022-06-16 17:10:23 +03:00
intel_pch_refclk.h drm/i915: Move PCH refclock stuff into its own file 2021-10-19 09:36:22 +03:00
intel_pipe_crc.c drm/i915: Don't include intel_de.h from intel_display_types.h 2021-05-05 21:04:42 +03:00
intel_pipe_crc.h
intel_plane_initial.c Merge drm/drm-next into drm-intel-gt-next 2022-04-21 13:48:26 -04:00
intel_plane_initial.h drm/i915/display: refactor initial plane config to a separate file 2021-10-12 12:58:33 +03:00
intel_pps.c drm/i915/bios: Split VBT data into per-panel vs. global parts 2022-05-27 20:30:42 +03:00
intel_pps.h drm/i915/pps: Split PPS init+sanitize in two 2022-05-27 20:26:05 +03:00
intel_psr.c drm/i915/display: clean up comments 2022-07-01 16:50:51 -07:00
intel_psr.h drm/i915/display/psr: Lock and unlock PSR around pipe updates 2022-04-06 08:42:58 -07:00
intel_qp_tables.c drm/display: Move DSC header and helpers into display-helper module 2022-04-25 11:19:36 +02:00
intel_qp_tables.h drm/i915/xelpd: Add rc_qp_table for rcparams calculation 2021-05-19 23:59:12 -07:00
intel_quirks.c drm/i915/glk: ECS Liva Q2 needs GLK HDMI port timing quirk 2022-08-29 10:00:51 -04:00
intel_quirks.h
intel_sdvo_regs.h
intel_sdvo.c - General driver clean-up (Jani, Ville, Julia) 2022-06-24 12:07:47 +10:00
intel_sdvo.h drm/i915: Only include i915_reg.h from .c files 2022-02-02 07:59:54 -08:00
intel_snps_phy_regs.h drm/i915: Move SNPS PHY registers to their own header 2022-01-11 14:03:25 -08:00
intel_snps_phy.c drm/i915/mpllb: move mpllb state check to intel_snps_phy.c 2022-06-17 11:54:54 +03:00
intel_snps_phy.h drm/i915/mpllb: move mpllb state check to intel_snps_phy.c 2022-06-17 11:54:54 +03:00
intel_sprite.c drm: Drop drm_blend.h from drm_crtc.h 2022-06-20 23:53:55 +03:00
intel_sprite.h drm/i915: Move function prototypes to the correct header 2021-10-21 22:22:58 +03:00
intel_tc_phy_regs.h drm/i915: Drop unused _PORT3 and _PORT4 TC phy register offsets 2022-01-11 14:03:26 -08:00
intel_tc.c drm/i915/tc: Don't default disconnected legacy Type-C ports to TBT mode (v2) 2022-05-31 19:55:16 +03:00
intel_tc.h drm/i915/tc: Fix TypeC PHY connect/disconnect logic on ADL-P 2021-09-29 23:58:04 +03:00
intel_tv.c drm/i915: Use DRM_MODE_FMT+DRM_MODE_ARG() 2022-03-29 16:35:33 +03:00
intel_tv.h
intel_vbt_defs.h drm/i915/bios: calculate panel type as per child device index in VBT 2022-06-20 19:56:06 +03:00
intel_vdsc.c drm/display: Move DSC header and helpers into display-helper module 2022-04-25 11:19:36 +02:00
intel_vdsc.h drm/i915: Change bigjoiner state tracking to use the pipe bitmask 2022-02-15 14:41:05 +02:00
intel_vga.c drm/i915/vga: switch to use VGA definitions from video/vga.h 2022-02-02 17:14:40 +02:00
intel_vga.h
intel_vrr.c drm/i915: Parse VRR capability from VBT 2022-06-01 16:45:18 +03:00
intel_vrr.h drm/i915: Pass intel_connector to intel_vrr_is_capable() 2022-05-27 20:20:40 +03:00
skl_scaler.c drm/i915: Remove locks around skl+ scaler programming 2022-03-29 16:35:33 +03:00
skl_scaler.h drm/i915: refactor skylake scaler code into new file. 2021-02-08 12:12:41 +02:00
skl_universal_plane.c drm: Drop drm_blend.h from drm_crtc.h 2022-06-20 23:53:55 +03:00
skl_universal_plane.h drm/i915/intel_fb: Pull FB plane functions from skl_universal_plane.c 2021-03-29 22:54:50 +03:00
vlv_dsi_pll_regs.h drm/i915/reg: split out vlv_dsi_regs.h and vlv_dsi_pll_regs.h 2022-02-21 12:06:10 +02:00
vlv_dsi_pll.c drm/i915/dsi: use min_t() to make code cleaner 2022-03-09 10:32:42 +02:00
vlv_dsi_pll.h drm/i915/dsi: split out vlv_dsi_pll.h 2021-11-23 13:11:36 +02:00
vlv_dsi_regs.h drm/i915/reg: split out vlv_dsi_regs.h and vlv_dsi_pll_regs.h 2022-02-21 12:06:10 +02:00
vlv_dsi.c drm/i915/dsi: filter invalid backlight and CABC ports 2022-08-29 10:00:35 -04:00
vlv_dsi.h drm/i915/dsi: split out vlv_dsi.h 2021-11-23 13:11:39 +02:00