mirror of https://gitee.com/openkylin/linux.git
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 <khaled.almahallawy@intel.com> Signed-off-by: Imre Deak <imre.deak@intel.com> Reviewed-by: Khaled Almahallawy <khaled.almahallawy@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200629185848.20550-1-imre.deak@intel.com
This commit is contained in:
parent
096a42dd19
commit
09eac82772
|
@ -2934,6 +2934,15 @@ static const struct skl_wrpll_params tgl_tbt_pll_19_2MHz_values = {
|
||||||
static const struct skl_wrpll_params tgl_tbt_pll_24MHz_values = {
|
static const struct skl_wrpll_params tgl_tbt_pll_24MHz_values = {
|
||||||
.dco_integer = 0x43, .dco_fraction = 0x4000,
|
.dco_integer = 0x43, .dco_fraction = 0x4000,
|
||||||
/* the following params are unused */
|
/* the following params are unused */
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Display WA #22010492432: tgl
|
||||||
|
* Divide the nominal .dco_fraction value by 2.
|
||||||
|
*/
|
||||||
|
static const struct skl_wrpll_params tgl_tbt_pll_38_4MHz_values = {
|
||||||
|
.dco_integer = 0x54, .dco_fraction = 0x1800,
|
||||||
|
/* the following params are unused */
|
||||||
.pdiv = 0, .kdiv = 0, .qdiv_mode = 0, .qdiv_ratio = 0,
|
.pdiv = 0, .kdiv = 0, .qdiv_mode = 0, .qdiv_ratio = 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2970,12 +2979,14 @@ static bool icl_calc_tbt_pll(struct intel_crtc_state *crtc_state,
|
||||||
MISSING_CASE(dev_priv->dpll.ref_clks.nssc);
|
MISSING_CASE(dev_priv->dpll.ref_clks.nssc);
|
||||||
/* fall-through */
|
/* fall-through */
|
||||||
case 19200:
|
case 19200:
|
||||||
case 38400:
|
|
||||||
*pll_params = tgl_tbt_pll_19_2MHz_values;
|
*pll_params = tgl_tbt_pll_19_2MHz_values;
|
||||||
break;
|
break;
|
||||||
case 24000:
|
case 24000:
|
||||||
*pll_params = tgl_tbt_pll_24MHz_values;
|
*pll_params = tgl_tbt_pll_24MHz_values;
|
||||||
break;
|
break;
|
||||||
|
case 38400:
|
||||||
|
*pll_params = tgl_tbt_pll_38_4MHz_values;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch (dev_priv->dpll.ref_clks.nssc) {
|
switch (dev_priv->dpll.ref_clks.nssc) {
|
||||||
|
|
Loading…
Reference in New Issue