From: Ander Conselvan De Oliveira <conselvan2@gmail.com>
To: Mika Kahola <mika.kahola@intel.com>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH] drm/i915: Disable FLT if DP config changes
Date: Fri, 27 Nov 2015 14:01:31 +0200 [thread overview]
Message-ID: <1448625691.2711.12.camel@gmail.com> (raw)
In-Reply-To: <1448450801-3927-1-git-send-email-mika.kahola@intel.com>
Hi,
> drm/i915: Disable FLT if DP config changes
Please just spell out fast link training.
On Wed, 2015-11-25 at 13:26 +0200, Mika Kahola wrote:
> Disable DP fast link training if DP link configuration
> changes. If one of the DP link parameters i.e. link
> bandwidth, lane count, rate selection, port clock or bpp
> changes the link training does no longer apply the
> previously computed voltage swing and pre-emphasis values.
> Instead, the link training is started with zero values.
I think there is a more fundamental problem with our fast link training
implementation. The requirements imposed by the spec for it are:
- HPD line was high the whole time since the link was in full operation
(except for IRQ_HPD);
- the NO_AUX_TRANSACTION_LINK_TRAINING bit is set in DP_MAX_DOWNSPREAD.
If both those conditions are met, then link training can skip the AUX
transactions and start with the last known good voltage swing and pre-emphasis.
Ville has seen an issue with a dongle that causes a lot of DPCD defers when link
training starts with non-zero values [1]. I wonder if we should disable fast lin
k training completely until we can meet those requirements.
[1] http://lists.freedesktop.org/archives/intel-gfx/2015-November/079277.html
Ander
>
> The patch is fix for reported screen flickering issue in
>
> https://bugs.freedesktop.org/show_bug.cgi?id=91393
>
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> ---
> drivers/gpu/drm/i915/intel_dp.c | 6 ++++++
> drivers/gpu/drm/i915/intel_dp_link_training.c | 27
> +++++++++++++++++++++++++++
> drivers/gpu/drm/i915/intel_drv.h | 6 +++++-
> 3 files changed, 38 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 2805f0d..3694e3f 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -1621,6 +1621,12 @@ found:
> intel_dp_compute_rate(intel_dp, pipe_config->port_clock,
> &link_bw, &rate_select);
>
> + intel_dp->link_bw = link_bw;
> + intel_dp->rate_select = rate_select;
> + intel_dp->lane_count = lane_count;
> + intel_dp->port_clock = pipe_config->port_clock;
> + intel_dp->bpp = bpp;
> +
> DRM_DEBUG_KMS("DP link bw %02x rate select %02x lane count %d clock
> %d bpp %d\n",
> link_bw, rate_select, pipe_config->lane_count,
> pipe_config->port_clock, bpp);
> diff --git a/drivers/gpu/drm/i915/intel_dp_link_training.c
> b/drivers/gpu/drm/i915/intel_dp_link_training.c
> index 8888793..36a5294 100644
> --- a/drivers/gpu/drm/i915/intel_dp_link_training.c
> +++ b/drivers/gpu/drm/i915/intel_dp_link_training.c
> @@ -82,9 +82,31 @@ intel_dp_set_link_train(struct intel_dp *intel_dp,
> }
>
> static bool
> +intel_dp_check_conf(struct intel_dp *intel_dp)
> +{
> + if (intel_dp->link_bw != intel_dp->old_link_bw)
> + return false;
> + else if (intel_dp->lane_count != intel_dp->old_lane_count)
> + return false;
> + else if (intel_dp->rate_select != intel_dp->old_rate_select)
> + return false;
> + else if (intel_dp->port_clock != intel_dp->old_port_clock)
> + return false;
> + else if (intel_dp->bpp != intel_dp->old_bpp)
> + return false;
> + else
> + return true;
> +}
> +
> +static bool
> intel_dp_reset_link_train(struct intel_dp *intel_dp,
> uint8_t dp_train_pat)
> {
> + intel_dp->train_set_valid &= intel_dp_check_conf(intel_dp);
> +
> + DRM_DEBUG_KMS("flt enabled: %s\n",
> + intel_dp->train_set_valid ? "true" : "false");
> +
> if (!intel_dp->train_set_valid)
> memset(intel_dp->train_set, 0, sizeof(intel_dp->train_set));
> intel_dp_set_signal_levels(intel_dp);
> @@ -305,6 +327,11 @@ intel_dp_link_training_channel_equalization(struct
> intel_dp *intel_dp)
>
> if (channel_eq) {
> intel_dp->train_set_valid = true;
> + intel_dp->old_link_bw = intel_dp->link_bw;
> + intel_dp->old_rate_select = intel_dp->rate_select;
> + intel_dp->old_lane_count = intel_dp->lane_count;
> + intel_dp->old_port_clock = intel_dp->port_clock;
> + intel_dp->old_bpp = intel_dp->bpp;
> DRM_DEBUG_KMS("Channel EQ done. DP Training successful\n");
> }
> }
> diff --git a/drivers/gpu/drm/i915/intel_drv.h
> b/drivers/gpu/drm/i915/intel_drv.h
> index 8fae824..8db9288 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -742,7 +742,11 @@ struct intel_dp {
> i915_reg_t aux_ch_data_reg[5];
> uint32_t DP;
> int link_rate;
> - uint8_t lane_count;
> + uint8_t lane_count, old_lane_count;
> + uint8_t link_bw, old_link_bw;
> + uint8_t rate_select, old_rate_select;
> + int port_clock, old_port_clock;
> + int bpp, old_bpp;
> bool has_audio;
> enum hdmi_force_audio force_audio;
> bool limited_color_range;
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2015-11-27 12:01 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-25 11:26 [PATCH] drm/i915: Disable FLT if DP config changes Mika Kahola
2015-11-27 12:01 ` Ander Conselvan De Oliveira [this message]
2015-11-27 12:13 ` Ville Syrjälä
2015-11-27 14:11 ` Kahola, Mika
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1448625691.2711.12.camel@gmail.com \
--to=conselvan2@gmail.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=mika.kahola@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.