Skip to content

Commit 09eac82

Browse files
committed
drm/i915/tgl+: Fix TBT DPLL fractional divider for 38.4MHz ref clock
When the reference clock is 38.4MHz, using the current TBT PLL fractional divider value results in a slightly off TBT link frequency. This causes an endless loop of link training success followed by a bad link signaling and retraining at least on a Dell WD19TB TBT dock. The workaround provided by the HW team is to divide the fractional divider value by two. This fixed the link training problem on the ThinkPad dock. The same workaround is needed on some EHL platforms and for combo PHY PLLs, these will be addressed in a follow-up. Bspec: 49204 References: HSDES#22010772725 References: HSDES#14011861142 Reported-and-tested-by: Khaled Almahallawy <[email protected]> Signed-off-by: Imre Deak <[email protected]> Reviewed-by: Khaled Almahallawy <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 096a42d commit 09eac82

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2934,6 +2934,15 @@ static const struct skl_wrpll_params tgl_tbt_pll_19_2MHz_values = {
29342934
static const struct skl_wrpll_params tgl_tbt_pll_24MHz_values = {
29352935
.dco_integer = 0x43, .dco_fraction = 0x4000,
29362936
/* the following params are unused */
2937+
};
2938+
2939+
/*
2940+
* Display WA #22010492432: tgl
2941+
* Divide the nominal .dco_fraction value by 2.
2942+
*/
2943+
static const struct skl_wrpll_params tgl_tbt_pll_38_4MHz_values = {
2944+
.dco_integer = 0x54, .dco_fraction = 0x1800,
2945+
/* the following params are unused */
29372946
.pdiv = 0, .kdiv = 0, .qdiv_mode = 0, .qdiv_ratio = 0,
29382947
};
29392948

@@ -2970,12 +2979,14 @@ static bool icl_calc_tbt_pll(struct intel_crtc_state *crtc_state,
29702979
MISSING_CASE(dev_priv->dpll.ref_clks.nssc);
29712980
/* fall-through */
29722981
case 19200:
2973-
case 38400:
29742982
*pll_params = tgl_tbt_pll_19_2MHz_values;
29752983
break;
29762984
case 24000:
29772985
*pll_params = tgl_tbt_pll_24MHz_values;
29782986
break;
2987+
case 38400:
2988+
*pll_params = tgl_tbt_pll_38_4MHz_values;
2989+
break;
29792990
}
29802991
} else {
29812992
switch (dev_priv->dpll.ref_clks.nssc) {

0 commit comments

Comments
 (0)