[Intel-gfx] [PATCH 1/2] drm/i915/tgl+: Fix TBT DPLL fractional divider for 38.4MHz ref clock
Almahallawy, Khaled
khaled.almahallawy at intel.com
Mon Jun 29 20:00:26 UTC 2020
On Mon, 2020-06-29 at 21:58 +0300, Imre Deak wrote:
> 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 ThinkPad 40AC 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 at intel.com>
> Signed-off-by: Imre Deak <imre.deak at intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> index b45185b80bec..f585053d02d8 100644
> --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> @@ -2937,6 +2937,12 @@ static const struct skl_wrpll_params
> tgl_tbt_pll_24MHz_values = {
> .pdiv = 0, .kdiv = 0, .qdiv_mode = 0, .qdiv_ratio = 0,
> };
>
> +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,
> +};
> +
> static bool icl_calc_dp_combo_pll(struct intel_crtc_state
> *crtc_state,
> struct skl_wrpll_params *pll_params)
> {
> @@ -2970,12 +2976,14 @@ static bool icl_calc_tbt_pll(struct
> intel_crtc_state *crtc_state,
> MISSING_CASE(dev_priv->dpll.ref_clks.nssc);
> /* fall-through */
> case 19200:
> - case 38400:
> *pll_params = tgl_tbt_pll_19_2MHz_values;
> break;
> case 24000:
> *pll_params = tgl_tbt_pll_24MHz_values;
> break;
> + case 38400:
> + *pll_params = tgl_tbt_pll_38_4MHz_values;
> + break;
> }
> } else {
> switch (dev_priv->dpll.ref_clks.nssc) {
Reviewed-by: Khaled Almahallawy <khaled.almahallawy at intel.com>
More information about the Intel-gfx
mailing list