All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/i915/dp: On link train failure on eDP, retry with max params first
@ 2019-04-04  0:38 Manasi Navare
  2019-04-04  0:53 ` ✗ Fi.CI.BAT: failure for " Patchwork
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Manasi Navare @ 2019-04-04  0:38 UTC (permalink / raw)
  To: intel-gfx; +Cc: Albert Astals Cid, Ralgor, Emanuele Panigati

Certain eDP panels fail to link train with optimized settings for
link rate and lane count and need the max link parameters to be used
for link training to pass.
So in on link training failure for eDP, retry the link training
with max link parameters first since this tends to fix link
failures on most eDP 1.4 panels

Suggested-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Albert Astals Cid <aacid@kde.org>
Cc: Emanuele Panigati <ilpanich@gmail.com>
Cc: Ralgor <ralgorfdb@compuspex.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=109959
Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
---
 drivers/gpu/drm/i915/intel_dp.c  | 36 ++++++++++++++++++++------------
 drivers/gpu/drm/i915/intel_drv.h |  3 +++
 2 files changed, 26 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 72c49070ed14..d65d1a9338d6 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -463,6 +463,14 @@ static bool intel_dp_can_link_train_fallback_for_edp(struct intel_dp *intel_dp,
 	return true;
 }
 
+static bool intel_dp_uses_max_link_params(struct intel_dp*,
+					  int link_rate,
+					  u8 lane_count)
+{
+	return link_rate == intel_dp->max_link_rate &&
+		lane_count == intel_dp->max_link_lane_count;
+}
+
 int intel_dp_get_link_train_fallback_values(struct intel_dp *intel_dp,
 					    int link_rate, u8 lane_count)
 {
@@ -471,24 +479,23 @@ int intel_dp_get_link_train_fallback_values(struct intel_dp *intel_dp,
 	index = intel_dp_rate_index(intel_dp->common_rates,
 				    intel_dp->num_common_rates,
 				    link_rate);
-	if (index > 0) {
-		if (intel_dp_is_edp(intel_dp) &&
-		    !intel_dp_can_link_train_fallback_for_edp(intel_dp,
-							      intel_dp->common_rates[index - 1],
-							      lane_count)) {
+
+	if (intel_dp_is_edp(intel_dp)) {
+		if (!intel_dp_uses_max_link_params) {
+			intel_dp->retry_with_max_link_params = true;
+			DRM_DEBUGS_KMS("Retrying Link training for eDP with max link parameters\n");
+			return 0;
+		} else if (!intel_dp_can_link_train_fallback_for_edp(intel_dp,
+								     intel_dp->common_rates[index - 1],
+								     lane_count)) {
 			DRM_DEBUG_KMS("Retrying Link training for eDP with same parameters\n");
 			return 0;
 		}
+	}
+	if (index > 0) {
 		intel_dp->max_link_rate = intel_dp->common_rates[index - 1];
 		intel_dp->max_link_lane_count = lane_count;
 	} else if (lane_count > 1) {
-		if (intel_dp_is_edp(intel_dp) &&
-		    !intel_dp_can_link_train_fallback_for_edp(intel_dp,
-							      intel_dp_max_common_rate(intel_dp),
-							      lane_count >> 1)) {
-			DRM_DEBUG_KMS("Retrying Link training for eDP with same parameters\n");
-			return 0;
-		}
 		intel_dp->max_link_rate = intel_dp_max_common_rate(intel_dp);
 		intel_dp->max_link_lane_count = lane_count >> 1;
 	} else {
@@ -2028,7 +2035,8 @@ intel_dp_compute_link_config(struct intel_encoder *encoder,
 	limits.min_bpp = 6 * 3;
 	limits.max_bpp = intel_dp_compute_bpp(intel_dp, pipe_config);
 
-	if (intel_dp_is_edp(intel_dp) && intel_dp->edp_dpcd[0] < DP_EDP_14) {
+	if ((intel_dp_is_edp(intel_dp) && intel_dp->edp_dpcd[0] < DP_EDP_14) ||
+	    intel_dp->retry_with_max_link_params) {
 		/*
 		 * Use the maximum clock and number of lanes the eDP panel
 		 * advertizes being capable of. The eDP 1.3 and earlier panels
@@ -5432,6 +5440,8 @@ intel_dp_detect(struct drm_connector *connector,
 		/* Initial max link rate */
 		intel_dp->max_link_rate = intel_dp_max_common_rate(intel_dp);
 
+		intel_dp->retry_with_max_link_params = false;
+
 		intel_dp->reset_link_params = false;
 	}
 
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index f8c7b291fdc3..c3cf702c1cba 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1327,6 +1327,9 @@ struct intel_dp {
 
 	/* Display stream compression testing */
 	bool force_dsc_en;
+
+	/* Some panels need max link params for link training */
+	bool retry_with_max_link_params;
 };
 
 enum lspcon_vendor {
-- 
2.19.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* ✗ Fi.CI.BAT: failure for drm/i915/dp: On link train failure on eDP, retry with max params first
  2019-04-04  0:38 [PATCH] drm/i915/dp: On link train failure on eDP, retry with max params first Manasi Navare
@ 2019-04-04  0:53 ` Patchwork
  2019-04-04  5:18 ` [PATCH] " kbuild test robot
  2019-04-04  5:21 ` kbuild test robot
  2 siblings, 0 replies; 4+ messages in thread
From: Patchwork @ 2019-04-04  0:53 UTC (permalink / raw)
  To: Manasi Navare; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/dp: On link train failure on eDP, retry with max params first
URL   : https://patchwork.freedesktop.org/series/58975/
State : failure

== Summary ==

CALL    scripts/checksyscalls.sh
  CALL    scripts/atomic/check-atomics.sh
  DESCEND  objtool
  CHK     include/generated/compile.h
  CC [M]  drivers/gpu/drm/i915/intel_dp.o
drivers/gpu/drm/i915/intel_dp.c: In function ‘intel_dp_uses_max_link_params’:
drivers/gpu/drm/i915/intel_dp.c:466:50: error: parameter name omitted
 static bool intel_dp_uses_max_link_params(struct intel_dp*,
                                                  ^~~~~~~~
drivers/gpu/drm/i915/intel_dp.c:470:22: error: ‘intel_dp’ undeclared (first use in this function)
  return link_rate == intel_dp->max_link_rate &&
                      ^~~~~~~~
drivers/gpu/drm/i915/intel_dp.c:470:22: note: each undeclared identifier is reported only once for each function it appears in
drivers/gpu/drm/i915/intel_dp.c: In function ‘intel_dp_get_link_train_fallback_values’:
drivers/gpu/drm/i915/intel_dp.c:484:7: error: the address of ‘intel_dp_uses_max_link_params’ will always evaluate as ‘true’ [-Werror=address]
   if (!intel_dp_uses_max_link_params) {
       ^
drivers/gpu/drm/i915/intel_dp.c:486:4: error: implicit declaration of function ‘DRM_DEBUGS_KMS’; did you mean ‘DRM_DEBUG_KMS’? [-Werror=implicit-function-declaration]
    DRM_DEBUGS_KMS("Retrying Link training for eDP with max link parameters\n");
    ^~~~~~~~~~~~~~
    DRM_DEBUG_KMS
cc1: all warnings being treated as errors
scripts/Makefile.build:275: recipe for target 'drivers/gpu/drm/i915/intel_dp.o' failed
make[4]: *** [drivers/gpu/drm/i915/intel_dp.o] Error 1
scripts/Makefile.build:486: recipe for target 'drivers/gpu/drm/i915' failed
make[3]: *** [drivers/gpu/drm/i915] Error 2
scripts/Makefile.build:486: recipe for target 'drivers/gpu/drm' failed
make[2]: *** [drivers/gpu/drm] Error 2
scripts/Makefile.build:486: recipe for target 'drivers/gpu' failed
make[1]: *** [drivers/gpu] Error 2
Makefile:1051: recipe for target 'drivers' failed
make: *** [drivers] Error 2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] drm/i915/dp: On link train failure on eDP, retry with max params first
  2019-04-04  0:38 [PATCH] drm/i915/dp: On link train failure on eDP, retry with max params first Manasi Navare
  2019-04-04  0:53 ` ✗ Fi.CI.BAT: failure for " Patchwork
@ 2019-04-04  5:18 ` kbuild test robot
  2019-04-04  5:21 ` kbuild test robot
  2 siblings, 0 replies; 4+ messages in thread
From: kbuild test robot @ 2019-04-04  5:18 UTC (permalink / raw)
  To: Manasi Navare
  Cc: Albert Astals Cid, intel-gfx, Ralgor, kbuild-all, Emanuele Panigati

[-- Attachment #1: Type: text/plain, Size: 3725 bytes --]

Hi Manasi,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on drm-intel/for-linux-next]
[also build test ERROR on v5.1-rc3 next-20190403]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Manasi-Navare/drm-i915-dp-On-link-train-failure-on-eDP-retry-with-max-params-first/20190404-115622
base:   git://anongit.freedesktop.org/drm-intel for-linux-next
config: x86_64-randconfig-x013-201913 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All error/warnings (new ones prefixed by >>):

   drivers/gpu//drm/i915/intel_dp.c: In function 'intel_dp_uses_max_link_params':
>> drivers/gpu//drm/i915/intel_dp.c:466:50: error: parameter name omitted
    static bool intel_dp_uses_max_link_params(struct intel_dp*,
                                                     ^~~~~~~~
>> drivers/gpu//drm/i915/intel_dp.c:470:22: error: 'intel_dp' undeclared (first use in this function)
     return link_rate == intel_dp->max_link_rate &&
                         ^~~~~~~~
   drivers/gpu//drm/i915/intel_dp.c:470:22: note: each undeclared identifier is reported only once for each function it appears in
   drivers/gpu//drm/i915/intel_dp.c: In function 'intel_dp_get_link_train_fallback_values':
>> drivers/gpu//drm/i915/intel_dp.c:484:7: warning: the address of 'intel_dp_uses_max_link_params' will always evaluate as 'true' [-Waddress]
      if (!intel_dp_uses_max_link_params) {
          ^
>> drivers/gpu//drm/i915/intel_dp.c:486:4: error: implicit declaration of function 'DRM_DEBUGS_KMS'; did you mean 'DRM_DEBUG_KMS'? [-Werror=implicit-function-declaration]
       DRM_DEBUGS_KMS("Retrying Link training for eDP with max link parameters\n");
       ^~~~~~~~~~~~~~
       DRM_DEBUG_KMS
   cc1: some warnings being treated as errors

vim +/intel_dp +470 drivers/gpu//drm/i915/intel_dp.c

   465	
 > 466	static bool intel_dp_uses_max_link_params(struct intel_dp*,
   467						  int link_rate,
   468						  u8 lane_count)
   469	{
 > 470		return link_rate == intel_dp->max_link_rate &&
   471			lane_count == intel_dp->max_link_lane_count;
   472	}
   473	
   474	int intel_dp_get_link_train_fallback_values(struct intel_dp *intel_dp,
   475						    int link_rate, u8 lane_count)
   476	{
   477		int index;
   478	
   479		index = intel_dp_rate_index(intel_dp->common_rates,
   480					    intel_dp->num_common_rates,
   481					    link_rate);
   482	
   483		if (intel_dp_is_edp(intel_dp)) {
 > 484			if (!intel_dp_uses_max_link_params) {
   485				intel_dp->retry_with_max_link_params = true;
 > 486				DRM_DEBUGS_KMS("Retrying Link training for eDP with max link parameters\n");
   487				return 0;
   488			} else if (!intel_dp_can_link_train_fallback_for_edp(intel_dp,
   489									     intel_dp->common_rates[index - 1],
   490									     lane_count)) {
   491				DRM_DEBUG_KMS("Retrying Link training for eDP with same parameters\n");
   492				return 0;
   493			}
   494		}
   495		if (index > 0) {
   496			intel_dp->max_link_rate = intel_dp->common_rates[index - 1];
   497			intel_dp->max_link_lane_count = lane_count;
   498		} else if (lane_count > 1) {
   499			intel_dp->max_link_rate = intel_dp_max_common_rate(intel_dp);
   500			intel_dp->max_link_lane_count = lane_count >> 1;
   501		} else {
   502			DRM_ERROR("Link Training Unsuccessful\n");
   503			return -1;
   504		}
   505	
   506		return 0;
   507	}
   508	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 30064 bytes --]

[-- Attachment #3: Type: text/plain, Size: 159 bytes --]

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] drm/i915/dp: On link train failure on eDP, retry with max params first
  2019-04-04  0:38 [PATCH] drm/i915/dp: On link train failure on eDP, retry with max params first Manasi Navare
  2019-04-04  0:53 ` ✗ Fi.CI.BAT: failure for " Patchwork
  2019-04-04  5:18 ` [PATCH] " kbuild test robot
@ 2019-04-04  5:21 ` kbuild test robot
  2 siblings, 0 replies; 4+ messages in thread
From: kbuild test robot @ 2019-04-04  5:21 UTC (permalink / raw)
  To: Manasi Navare
  Cc: Albert Astals Cid, intel-gfx, Ralgor, kbuild-all, Emanuele Panigati

[-- Attachment #1: Type: text/plain, Size: 3697 bytes --]

Hi Manasi,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on drm-intel/for-linux-next]
[also build test ERROR on v5.1-rc3 next-20190403]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Manasi-Navare/drm-i915-dp-On-link-train-failure-on-eDP-retry-with-max-params-first/20190404-115622
base:   git://anongit.freedesktop.org/drm-intel for-linux-next
config: i386-randconfig-x006-201913 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All errors (new ones prefixed by >>):

   drivers/gpu/drm/i915/intel_dp.c: In function 'intel_dp_uses_max_link_params':
   drivers/gpu/drm/i915/intel_dp.c:466:50: error: parameter name omitted
    static bool intel_dp_uses_max_link_params(struct intel_dp*,
                                                     ^~~~~~~~
   drivers/gpu/drm/i915/intel_dp.c:470:22: error: 'intel_dp' undeclared (first use in this function)
     return link_rate == intel_dp->max_link_rate &&
                         ^~~~~~~~
   drivers/gpu/drm/i915/intel_dp.c:470:22: note: each undeclared identifier is reported only once for each function it appears in
   drivers/gpu/drm/i915/intel_dp.c: In function 'intel_dp_get_link_train_fallback_values':
>> drivers/gpu/drm/i915/intel_dp.c:484:7: error: the address of 'intel_dp_uses_max_link_params' will always evaluate as 'true' [-Werror=address]
      if (!intel_dp_uses_max_link_params) {
          ^
   drivers/gpu/drm/i915/intel_dp.c:486:4: error: implicit declaration of function 'DRM_DEBUGS_KMS'; did you mean 'DRM_DEBUG_KMS'? [-Werror=implicit-function-declaration]
       DRM_DEBUGS_KMS("Retrying Link training for eDP with max link parameters\n");
       ^~~~~~~~~~~~~~
       DRM_DEBUG_KMS
   cc1: all warnings being treated as errors

vim +484 drivers/gpu/drm/i915/intel_dp.c

   465	
 > 466	static bool intel_dp_uses_max_link_params(struct intel_dp*,
   467						  int link_rate,
   468						  u8 lane_count)
   469	{
   470		return link_rate == intel_dp->max_link_rate &&
   471			lane_count == intel_dp->max_link_lane_count;
   472	}
   473	
   474	int intel_dp_get_link_train_fallback_values(struct intel_dp *intel_dp,
   475						    int link_rate, u8 lane_count)
   476	{
   477		int index;
   478	
   479		index = intel_dp_rate_index(intel_dp->common_rates,
   480					    intel_dp->num_common_rates,
   481					    link_rate);
   482	
   483		if (intel_dp_is_edp(intel_dp)) {
 > 484			if (!intel_dp_uses_max_link_params) {
   485				intel_dp->retry_with_max_link_params = true;
   486				DRM_DEBUGS_KMS("Retrying Link training for eDP with max link parameters\n");
   487				return 0;
   488			} else if (!intel_dp_can_link_train_fallback_for_edp(intel_dp,
   489									     intel_dp->common_rates[index - 1],
   490									     lane_count)) {
   491				DRM_DEBUG_KMS("Retrying Link training for eDP with same parameters\n");
   492				return 0;
   493			}
   494		}
   495		if (index > 0) {
   496			intel_dp->max_link_rate = intel_dp->common_rates[index - 1];
   497			intel_dp->max_link_lane_count = lane_count;
   498		} else if (lane_count > 1) {
   499			intel_dp->max_link_rate = intel_dp_max_common_rate(intel_dp);
   500			intel_dp->max_link_lane_count = lane_count >> 1;
   501		} else {
   502			DRM_ERROR("Link Training Unsuccessful\n");
   503			return -1;
   504		}
   505	
   506		return 0;
   507	}
   508	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 32405 bytes --]

[-- Attachment #3: Type: text/plain, Size: 159 bytes --]

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-04-04  5:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-04  0:38 [PATCH] drm/i915/dp: On link train failure on eDP, retry with max params first Manasi Navare
2019-04-04  0:53 ` ✗ Fi.CI.BAT: failure for " Patchwork
2019-04-04  5:18 ` [PATCH] " kbuild test robot
2019-04-04  5:21 ` kbuild test robot

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.