diff --git a/trunk/PKGBUILD b/trunk/PKGBUILD index e47fab8..288aee3 100644 --- a/trunk/PKGBUILD +++ b/trunk/PKGBUILD @@ -18,6 +18,7 @@ _srcname=archlinux-linux source=( "$_srcname::git+https://git.archlinux.org/linux.git?signed#tag=$_srctag" config # the main kernel config file + i915-Use-slow-and-wide-link-training-for-everything.patch ) validpgpkeys=( 'ABAF11C65A2970B130ABE3C479BE3E4300411886' # Linus Torvalds @@ -25,7 +26,8 @@ validpgpkeys=( 'A2FF3A36AAA56654109064AB19802F8B0D70FC30' # Jan Alexander Steffens (heftig) ) sha256sums=('SKIP' - '6dde032690644a576fd36c4a7d3546d9cec0117dd3fb17cea6dc95e907ef9bef') + '6dde032690644a576fd36c4a7d3546d9cec0117dd3fb17cea6dc95e907ef9bef' + '6a88086e144713b6375f3d87ee8cc4cae133afbc010a655f866ab81bf9f6c44d') export KBUILD_BUILD_HOST=archlinux export KBUILD_BUILD_USER=$pkgbase diff --git a/trunk/i915-Use-slow-and-wide-link-training-for-everything.patch b/trunk/i915-Use-slow-and-wide-link-training-for-everything.patch new file mode 100644 index 0000000..881d5f7 --- /dev/null +++ b/trunk/i915-Use-slow-and-wide-link-training-for-everything.patch @@ -0,0 +1,113 @@ +From acca7762eb71bc05a8f28d29320d193150051f79 Mon Sep 17 00:00:00 2001 +From: Kai-Heng Feng +Date: Wed, 21 Apr 2021 13:20:31 +0800 +Subject: drm/i915/dp: Use slow and wide link training for everything +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Screen flickers on Innolux eDP 1.3 panel when clock rate 540000 is in use. + +According to the panel vendor, though clock rate 540000 is advertised, +but the max clock rate it really supports is 270000. + +Ville Syrjälä mentioned that fast and narrow also breaks some eDP 1.4 +panel, so use slow and wide training for all panels to resolve the +issue. + +User also confirmed that the new strategy doesn't introduce any +regression on XPS 9380. + +v2: + - Use slow and wide for everything. + +Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/3384 +References: https://gitlab.freedesktop.org/drm/intel/-/issues/272 +Signed-off-by: Kai-Heng Feng +Signed-off-by: Ville Syrjälä +Link: https://patchwork.freedesktop.org/patch/msgid/20210421052054.1434718-1-kai.heng.feng@canonical.com +--- + drivers/gpu/drm/i915/display/intel_dp.c | 59 +++------------------------------ + 1 file changed, 5 insertions(+), 54 deletions(-) + +diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c +index 52ea09fc5e70..4ad12dde5938 100644 +--- a/drivers/gpu/drm/i915/display/intel_dp.c ++++ b/drivers/gpu/drm/i915/display/intel_dp.c +@@ -1095,44 +1095,6 @@ intel_dp_compute_link_config_wide(struct intel_dp *intel_dp, + return -EINVAL; + } + +-/* Optimize link config in order: max bpp, min lanes, min clock */ +-static int +-intel_dp_compute_link_config_fast(struct intel_dp *intel_dp, +- struct intel_crtc_state *pipe_config, +- const struct link_config_limits *limits) +-{ +- const struct drm_display_mode *adjusted_mode = &pipe_config->hw.adjusted_mode; +- int bpp, clock, lane_count; +- int mode_rate, link_clock, link_avail; +- +- for (bpp = limits->max_bpp; bpp >= limits->min_bpp; bpp -= 2 * 3) { +- int output_bpp = intel_dp_output_bpp(pipe_config->output_format, bpp); +- +- mode_rate = intel_dp_link_required(adjusted_mode->crtc_clock, +- output_bpp); +- +- for (lane_count = limits->min_lane_count; +- lane_count <= limits->max_lane_count; +- lane_count <<= 1) { +- for (clock = limits->min_clock; clock <= limits->max_clock; clock++) { +- link_clock = intel_dp->common_rates[clock]; +- link_avail = intel_dp_max_data_rate(link_clock, +- lane_count); +- +- if (mode_rate <= link_avail) { +- pipe_config->lane_count = lane_count; +- pipe_config->pipe_bpp = bpp; +- pipe_config->port_clock = link_clock; +- +- return 0; +- } +- } +- } +- } +- +- return -EINVAL; +-} +- + static int intel_dp_dsc_compute_bpp(struct intel_dp *intel_dp, u8 dsc_max_bpc) + { + int i, num_bpc; +@@ -1382,22 +1344,11 @@ intel_dp_compute_link_config(struct intel_encoder *encoder, + intel_dp_can_bigjoiner(intel_dp)) + pipe_config->bigjoiner = true; + +- if (intel_dp_is_edp(intel_dp)) +- /* +- * Optimize for fast and narrow. eDP 1.3 section 3.3 and eDP 1.4 +- * section A.1: "It is recommended that the minimum number of +- * lanes be used, using the minimum link rate allowed for that +- * lane configuration." +- * +- * Note that we fall back to the max clock and lane count for eDP +- * panels that fail with the fast optimal settings (see +- * intel_dp->use_max_params), in which case the fast vs. wide +- * choice doesn't matter. +- */ +- ret = intel_dp_compute_link_config_fast(intel_dp, pipe_config, &limits); +- else +- /* Optimize for slow and wide. */ +- ret = intel_dp_compute_link_config_wide(intel_dp, pipe_config, &limits); ++ /* ++ * Optimize for slow and wide for everything, because there are some ++ * eDP 1.3 and 1.4 panels don't work well with fast and narrow. ++ */ ++ ret = intel_dp_compute_link_config_wide(intel_dp, pipe_config, &limits); + + /* enable compression if the mode doesn't fit available BW */ + drm_dbg_kms(&i915->drm, "Force DSC en = %d\n", intel_dp->force_dsc_en); +-- +cgit v1.2.1 + +