Skip to content

Commit 898e4e5

Browse files
ideakjlahtine-intel
authored andcommitted
drm/i915/icl: Disable DIP on MST ports with the transcoder clock still on
According to BSpec the Data Island Packet should be disabled after disabling the transcoder, but before the transcoder clock select is set to none. On an ICL RVP, daisy-chained MST config not following this leads to a hang with the following MCE when disabling the output: [ 870.948739] mce: [Hardware Error]: CPU 0: Machine Check Exception: 5 Bank 6: ba00000011000402 [ 871.019212] mce: [Hardware Error]: RIP !INEXACT! 10:<ffffffff81aca652> {poll_idle+0x92/0xb0} [ 871.019212] mce: [Hardware Error]: TSC 135a261fe61 [ 871.019212] mce: [Hardware Error]: PROCESSOR 0:706e5 TIME 1591739604 SOCKET 0 APIC 0 microcode 20 [ 871.019212] mce: [Hardware Error]: Run the above through 'mcelog --ascii' [ 871.019212] mce: [Hardware Error]: Machine check: Processor context corrupt [ 871.019212] Kernel panic - not syncing: Fatal machine check [ 871.019212] Kernel Offset: disabled Bspec: 4287 Fixes: fa37a21 ("drm/i915: Stop sending DP SDPs on ddi disable") Cc: Gwan-gyeong Mun <[email protected]> Cc: Uma Shankar <[email protected]> Signed-off-by: Imre Deak <[email protected]> Reviewed-by: Uma Shankar <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] (cherry picked from commit c980216) Signed-off-by: Joonas Lahtinen <[email protected]>
1 parent 8ab3a38 commit 898e4e5

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

drivers/gpu/drm/i915/display/intel_ddi.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3472,7 +3472,9 @@ static void intel_ddi_post_disable_dp(struct intel_atomic_state *state,
34723472
INTEL_OUTPUT_DP_MST);
34733473
enum phy phy = intel_port_to_phy(dev_priv, encoder->port);
34743474

3475-
intel_dp_set_infoframes(encoder, false, old_crtc_state, old_conn_state);
3475+
if (!is_mst)
3476+
intel_dp_set_infoframes(encoder, false,
3477+
old_crtc_state, old_conn_state);
34763478

34773479
/*
34783480
* Power down sink before disabling the port, otherwise we end

drivers/gpu/drm/i915/display/intel_dp_mst.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,14 @@ static void intel_mst_post_disable_dp(struct intel_atomic_state *state,
397397
*/
398398
drm_dp_send_power_updown_phy(&intel_dp->mst_mgr, connector->port,
399399
false);
400+
401+
/*
402+
* BSpec 4287: disable DIP after the transcoder is disabled and before
403+
* the transcoder clock select is set to none.
404+
*/
405+
if (last_mst_stream)
406+
intel_dp_set_infoframes(&intel_dig_port->base, false,
407+
old_crtc_state, NULL);
400408
/*
401409
* From TGL spec: "If multi-stream slave transcoder: Configure
402410
* Transcoder Clock Select to direct no clock to the transcoder"

0 commit comments

Comments
 (0)