Lines Matching +full:preemphasis +full:- +full:level

1 // SPDX-License-Identifier: MIT
14 if (crtc_state->hw.enable && crtc_state->has_pch_encoder) in pipe_required_fdi_lanes()
15 return crtc_state->fdi_lanes; in pipe_required_fdi_lanes()
24 struct drm_atomic_state *state = pipe_config->uapi.state; in ilk_check_fdi_lanes()
28 drm_dbg_kms(&dev_priv->drm, in ilk_check_fdi_lanes()
30 pipe_name(pipe), pipe_config->fdi_lanes); in ilk_check_fdi_lanes()
31 if (pipe_config->fdi_lanes > 4) { in ilk_check_fdi_lanes()
32 drm_dbg_kms(&dev_priv->drm, in ilk_check_fdi_lanes()
34 pipe_name(pipe), pipe_config->fdi_lanes); in ilk_check_fdi_lanes()
35 return -EINVAL; in ilk_check_fdi_lanes()
39 if (pipe_config->fdi_lanes > 2) { in ilk_check_fdi_lanes()
40 drm_dbg_kms(&dev_priv->drm, in ilk_check_fdi_lanes()
42 pipe_config->fdi_lanes); in ilk_check_fdi_lanes()
43 return -EINVAL; in ilk_check_fdi_lanes()
57 if (pipe_config->fdi_lanes <= 2) in ilk_check_fdi_lanes()
67 drm_dbg_kms(&dev_priv->drm, in ilk_check_fdi_lanes()
69 pipe_name(pipe), pipe_config->fdi_lanes); in ilk_check_fdi_lanes()
70 return -EINVAL; in ilk_check_fdi_lanes()
74 if (pipe_config->fdi_lanes > 2) { in ilk_check_fdi_lanes()
75 drm_dbg_kms(&dev_priv->drm, in ilk_check_fdi_lanes()
77 pipe_name(pipe), pipe_config->fdi_lanes); in ilk_check_fdi_lanes()
78 return -EINVAL; in ilk_check_fdi_lanes()
88 drm_dbg_kms(&dev_priv->drm, in ilk_check_fdi_lanes()
90 return -EINVAL; in ilk_check_fdi_lanes()
101 struct drm_device *dev = crtc->base.dev; in ilk_fdi_compute_config()
103 const struct drm_display_mode *adjusted_mode = &pipe_config->hw.adjusted_mode; in ilk_fdi_compute_config()
117 fdi_dotclock = adjusted_mode->crtc_clock; in ilk_fdi_compute_config()
120 pipe_config->pipe_bpp); in ilk_fdi_compute_config()
122 pipe_config->fdi_lanes = lane; in ilk_fdi_compute_config()
124 intel_link_compute_m_n(pipe_config->pipe_bpp, lane, fdi_dotclock, in ilk_fdi_compute_config()
125 link_bw, &pipe_config->fdi_m_n, false, false); in ilk_fdi_compute_config()
127 ret = ilk_check_fdi_lanes(dev, crtc->pipe, pipe_config); in ilk_fdi_compute_config()
128 if (ret == -EDEADLK) in ilk_fdi_compute_config()
131 if (ret == -EINVAL && pipe_config->pipe_bpp > 6*3) { in ilk_fdi_compute_config()
132 pipe_config->pipe_bpp -= 2*3; in ilk_fdi_compute_config()
133 drm_dbg_kms(&i915->drm, in ilk_fdi_compute_config()
135 pipe_config->pipe_bpp); in ilk_fdi_compute_config()
137 pipe_config->bw_constrained = true; in ilk_fdi_compute_config()
150 struct drm_device *dev = crtc->base.dev; in intel_fdi_normal_train()
152 enum pipe pipe = crtc->pipe; in intel_fdi_normal_train()
193 struct drm_device *dev = crtc->base.dev; in ilk_fdi_link_train()
195 enum pipe pipe = crtc->pipe; in ilk_fdi_link_train()
200 assert_pipe_enabled(dev_priv, crtc_state->cpu_transcoder); in ilk_fdi_link_train()
216 temp |= FDI_DP_PORT_WIDTH(crtc_state->fdi_lanes); in ilk_fdi_link_train()
239 drm_dbg_kms(&dev_priv->drm, "FDI_RX_IIR 0x%x\n", temp); in ilk_fdi_link_train()
242 drm_dbg_kms(&dev_priv->drm, "FDI train 1 done.\n"); in ilk_fdi_link_train()
248 drm_err(&dev_priv->drm, "FDI train 1 fail!\n"); in ilk_fdi_link_train()
269 drm_dbg_kms(&dev_priv->drm, "FDI_RX_IIR 0x%x\n", temp); in ilk_fdi_link_train()
274 drm_dbg_kms(&dev_priv->drm, "FDI train 2 done.\n"); in ilk_fdi_link_train()
279 drm_err(&dev_priv->drm, "FDI train 2 fail!\n"); in ilk_fdi_link_train()
281 drm_dbg_kms(&dev_priv->drm, "FDI train done\n"); in ilk_fdi_link_train()
296 struct drm_device *dev = crtc->base.dev; in gen6_fdi_link_train()
298 enum pipe pipe = crtc->pipe; in gen6_fdi_link_train()
317 temp |= FDI_DP_PORT_WIDTH(crtc_state->fdi_lanes); in gen6_fdi_link_train()
321 /* SNB-B */ in gen6_fdi_link_train()
355 drm_dbg_kms(&dev_priv->drm, "FDI_RX_IIR 0x%x\n", temp); in gen6_fdi_link_train()
359 drm_dbg_kms(&dev_priv->drm, in gen6_fdi_link_train()
369 drm_err(&dev_priv->drm, "FDI train 1 fail!\n"); in gen6_fdi_link_train()
378 /* SNB-B */ in gen6_fdi_link_train()
410 drm_dbg_kms(&dev_priv->drm, "FDI_RX_IIR 0x%x\n", temp); in gen6_fdi_link_train()
414 drm_dbg_kms(&dev_priv->drm, in gen6_fdi_link_train()
424 drm_err(&dev_priv->drm, "FDI train 2 fail!\n"); in gen6_fdi_link_train()
426 drm_dbg_kms(&dev_priv->drm, "FDI train done.\n"); in gen6_fdi_link_train()
433 struct drm_device *dev = crtc->base.dev; in ivb_manual_fdi_link_train()
435 enum pipe pipe = crtc->pipe; in ivb_manual_fdi_link_train()
450 drm_dbg_kms(&dev_priv->drm, "FDI_RX_IIR before link train 0x%x\n", in ivb_manual_fdi_link_train()
453 /* Try each vswing and preemphasis setting twice before moving on */ in ivb_manual_fdi_link_train()
473 temp |= FDI_DP_PORT_WIDTH(crtc_state->fdi_lanes); in ivb_manual_fdi_link_train()
495 drm_dbg_kms(&dev_priv->drm, "FDI_RX_IIR 0x%x\n", temp); in ivb_manual_fdi_link_train()
501 drm_dbg_kms(&dev_priv->drm, in ivb_manual_fdi_link_train()
502 "FDI train 1 done, level %i.\n", in ivb_manual_fdi_link_train()
509 drm_dbg_kms(&dev_priv->drm, in ivb_manual_fdi_link_train()
533 drm_dbg_kms(&dev_priv->drm, "FDI_RX_IIR 0x%x\n", temp); in ivb_manual_fdi_link_train()
539 drm_dbg_kms(&dev_priv->drm, in ivb_manual_fdi_link_train()
540 "FDI train 2 done, level %i.\n", in ivb_manual_fdi_link_train()
547 drm_dbg_kms(&dev_priv->drm, in ivb_manual_fdi_link_train()
552 drm_dbg_kms(&dev_priv->drm, "FDI train done.\n"); in ivb_manual_fdi_link_train()
556 * connection to the PCH-located connectors. For this, it is necessary to train
566 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); in hsw_fdi_link_train()
567 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); in hsw_fdi_link_train()
571 encoder->get_buf_trans(encoder, crtc_state, &n_entries); in hsw_fdi_link_train()
577 * - TP1 to TP2 time with the default value in hsw_fdi_link_train()
578 * - FDI delay to 90h in hsw_fdi_link_train()
586 rx_ctl_val = dev_priv->fdi_rx_config | FDI_RX_ENHANCE_FRAME_ENABLE | in hsw_fdi_link_train()
588 FDI_DP_PORT_WIDTH(crtc_state->fdi_lanes); in hsw_fdi_link_train()
598 drm_WARN_ON(&dev_priv->drm, crtc_state->shared_dpll->info->id != DPLL_ID_SPLL); in hsw_fdi_link_train()
604 /* Configure DP_TP_CTL with auto-training */ in hsw_fdi_link_train()
616 DDI_BUF_CTL_ENABLE | ((crtc_state->fdi_lanes - 1) << 1) | DDI_BUF_TRANS_SELECT(i / 2)); in hsw_fdi_link_train()
624 /* Enable PCH FDI Receiver with auto-training */ in hsw_fdi_link_train()
643 drm_dbg_kms(&dev_priv->drm, in hsw_fdi_link_train()
652 if (i == n_entries * 2 - 1) { in hsw_fdi_link_train()
653 drm_err(&dev_priv->drm, "FDI link training failed!\n"); in hsw_fdi_link_train()
693 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); in ilk_fdi_pll_enable()
694 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); in ilk_fdi_pll_enable()
695 enum pipe pipe = crtc->pipe; in ilk_fdi_pll_enable()
703 temp |= FDI_DP_PORT_WIDTH(crtc_state->fdi_lanes); in ilk_fdi_pll_enable()
730 struct drm_device *dev = crtc->base.dev; in ilk_fdi_pll_disable()
732 enum pipe pipe = crtc->pipe; in ilk_fdi_pll_disable()
760 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); in ilk_fdi_disable()
761 enum pipe pipe = crtc->pipe; in ilk_fdi_disable()
814 dev_priv->display.fdi_link_train = ilk_fdi_link_train; in intel_fdi_init_hook()
816 dev_priv->display.fdi_link_train = gen6_fdi_link_train; in intel_fdi_init_hook()
819 dev_priv->display.fdi_link_train = ivb_manual_fdi_link_train; in intel_fdi_init_hook()