Revert "drm/fbdev: Fallback to non tiled mode if all tiles not present"
diff mbox series

Message ID 20191123091840.32382-1-uma.shankar@intel.com
State New
Headers show
Series
  • Revert "drm/fbdev: Fallback to non tiled mode if all tiles not present"
Related show

Commit Message

Shankar, Uma Nov. 23, 2019, 9:18 a.m. UTC
This reverts commit f25c7a006cd1c07254780e3406e45cee4842b933.

2p2c display configuration blows up dmesg when one connector is
disconnected, causing issues in CI.

Below are the sample errors thrown in logs:

[IGT] core_getversion: executing
[IGT] core_getversion: exiting, ret=0
Setting dangerous option reset - tainting kernel
drm:drm_atomic_helper_wait_for_dependencies] ERROR [CRTC:152:pipe B] flip_done timed out
drm:drm_atomic_helper_wait_for_dependencies] ERROR [CONNECTOR:299:DP-2] flip_done timed out
drm:drm_atomic_helper_wait_for_dependencies] ERROR [PLANE:92:plane 1B] flip_done timed out
[drm:drm_atomic_helper_wait_for_flip_done] ERROR [CRTC:152:pipe B] flip_done timed out
[drm:drm_atomic_helper_wait_for_dependencies] ERROR [CRTC:152:pipe B] flip_done timed out
[drm:drm_atomic_helper_wait_for_dependencies] ERROR [CONNECTOR:299:DP-2] flip_done timed out
[drm:drm_atomic_helper_wait_for_dependencies] ERROR [PLANE:92:plane 1B] flip_done timed out
[drm:drm_atomic_helper_wait_for_flip_done] ERROR [CRTC:152:pipe B] flip_done timed out
Console: switching to colour frame buffer device 480x135
[drm:drm_atomic_helper_wait_for_dependencies] ERROR [CRTC:152:pipe B] flip_done timed out
[drm:drm_atomic_helper_wait_for_dependencies] ERROR [CONNECTOR:299:DP-2] flip_done timed out

Reverting the change for now to unblock CI execution.

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Dave Airlie <airlied@redhat.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Manasi Navare <manasi.d.navare@intel.com>
Signed-off-by: Uma Shankar <uma.shankar@intel.com>
---
 drivers/gpu/drm/drm_client_modeset.c | 70 ----------------------------
 1 file changed, 70 deletions(-)

Comments

Jani Nikula Nov. 25, 2019, 3:07 p.m. UTC | #1
On Sat, 23 Nov 2019, Uma Shankar <uma.shankar@intel.com> wrote:
> This reverts commit f25c7a006cd1c07254780e3406e45cee4842b933.
>
> 2p2c display configuration blows up dmesg when one connector is
> disconnected, causing issues in CI.
>
> Below are the sample errors thrown in logs:
>
> [IGT] core_getversion: executing
> [IGT] core_getversion: exiting, ret=0
> Setting dangerous option reset - tainting kernel
> drm:drm_atomic_helper_wait_for_dependencies] ERROR [CRTC:152:pipe B] flip_done timed out
> drm:drm_atomic_helper_wait_for_dependencies] ERROR [CONNECTOR:299:DP-2] flip_done timed out
> drm:drm_atomic_helper_wait_for_dependencies] ERROR [PLANE:92:plane 1B] flip_done timed out
> [drm:drm_atomic_helper_wait_for_flip_done] ERROR [CRTC:152:pipe B] flip_done timed out
> [drm:drm_atomic_helper_wait_for_dependencies] ERROR [CRTC:152:pipe B] flip_done timed out
> [drm:drm_atomic_helper_wait_for_dependencies] ERROR [CONNECTOR:299:DP-2] flip_done timed out
> [drm:drm_atomic_helper_wait_for_dependencies] ERROR [PLANE:92:plane 1B] flip_done timed out
> [drm:drm_atomic_helper_wait_for_flip_done] ERROR [CRTC:152:pipe B] flip_done timed out
> Console: switching to colour frame buffer device 480x135
> [drm:drm_atomic_helper_wait_for_dependencies] ERROR [CRTC:152:pipe B] flip_done timed out
> [drm:drm_atomic_helper_wait_for_dependencies] ERROR [CONNECTOR:299:DP-2] flip_done timed out
>
> Reverting the change for now to unblock CI execution.
>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Dave Airlie <airlied@redhat.com>
> Cc: Jani Nikula <jani.nikula@intel.com>
> Cc: Manasi Navare <manasi.d.navare@intel.com>
> Signed-off-by: Uma Shankar <uma.shankar@intel.com>

Pushed to drm-misc-next with Daniel's irc ack. Thanks for the
revert. Back to the drawing board.

I was about to add the Bugzilla: reference, but this being a gitlab
issue instead, I opted for the gitlab Closes: tag:

	Closes: https://gitlab.freedesktop.org/drm/intel/issues/6

We should probably align on what we want to use going forward. And do we
want to keep using Bugzilla for bugzilla bugs?

BR,
Jani.


> ---
>  drivers/gpu/drm/drm_client_modeset.c | 70 ----------------------------
>  1 file changed, 70 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_client_modeset.c b/drivers/gpu/drm/drm_client_modeset.c
> index f2150a0bac4c..895b73f23079 100644
> --- a/drivers/gpu/drm/drm_client_modeset.c
> +++ b/drivers/gpu/drm/drm_client_modeset.c
> @@ -114,33 +114,6 @@ drm_client_find_modeset(struct drm_client_dev *client, struct drm_crtc *crtc)
>  	return NULL;
>  }
>  
> -static struct drm_display_mode *
> -drm_connector_get_tiled_mode(struct drm_connector *connector)
> -{
> -	struct drm_display_mode *mode;
> -
> -	list_for_each_entry(mode, &connector->modes, head) {
> -		if (mode->hdisplay == connector->tile_h_size &&
> -		    mode->vdisplay == connector->tile_v_size)
> -			return mode;
> -	}
> -	return NULL;
> -}
> -
> -static struct drm_display_mode *
> -drm_connector_fallback_non_tiled_mode(struct drm_connector *connector)
> -{
> -	struct drm_display_mode *mode;
> -
> -	list_for_each_entry(mode, &connector->modes, head) {
> -		if (mode->hdisplay == connector->tile_h_size &&
> -		    mode->vdisplay == connector->tile_v_size)
> -			continue;
> -		return mode;
> -	}
> -	return NULL;
> -}
> -
>  static struct drm_display_mode *
>  drm_connector_has_preferred_mode(struct drm_connector *connector, int width, int height)
>  {
> @@ -375,14 +348,8 @@ static bool drm_client_target_preferred(struct drm_connector **connectors,
>  	struct drm_connector *connector;
>  	u64 conn_configured = 0;
>  	int tile_pass = 0;
> -	int num_tiled_conns = 0;
>  	int i;
>  
> -	for (i = 0; i < connector_count; i++) {
> -		if (connectors[i]->has_tile)
> -			num_tiled_conns++;
> -	}
> -
>  retry:
>  	for (i = 0; i < connector_count; i++) {
>  		connector = connectors[i];
> @@ -432,28 +399,6 @@ static bool drm_client_target_preferred(struct drm_connector **connectors,
>  			list_for_each_entry(modes[i], &connector->modes, head)
>  				break;
>  		}
> -		/*
> -		 * In case of tiled mode if all tiles not present fallback to
> -		 * first available non tiled mode.
> -		 * After all tiles are present, try to find the tiled mode
> -		 * for all and if tiled mode not present due to fbcon size
> -		 * limitations, use first non tiled mode only for
> -		 * tile 0,0 and set to no mode for all other tiles.
> -		 */
> -		if (connector->has_tile) {
> -			if (num_tiled_conns <
> -			    connector->num_h_tile * connector->num_v_tile ||
> -			    (connector->tile_h_loc == 0 &&
> -			     connector->tile_v_loc == 0 &&
> -			     !drm_connector_get_tiled_mode(connector))) {
> -				DRM_DEBUG_KMS("Falling back to non tiled mode on Connector %d\n",
> -					      connector->base.id);
> -				modes[i] = drm_connector_fallback_non_tiled_mode(connector);
> -			} else {
> -				modes[i] = drm_connector_get_tiled_mode(connector);
> -			}
> -		}
> -
>  		DRM_DEBUG_KMS("found mode %s\n", modes[i] ? modes[i]->name :
>  			  "none");
>  		conn_configured |= BIT_ULL(i);
> @@ -570,7 +515,6 @@ static bool drm_client_firmware_config(struct drm_client_dev *client,
>  	bool fallback = true, ret = true;
>  	int num_connectors_enabled = 0;
>  	int num_connectors_detected = 0;
> -	int num_tiled_conns = 0;
>  	struct drm_modeset_acquire_ctx ctx;
>  
>  	if (!drm_drv_uses_atomic_modeset(dev))
> @@ -588,10 +532,6 @@ static bool drm_client_firmware_config(struct drm_client_dev *client,
>  	memcpy(save_enabled, enabled, count);
>  	mask = GENMASK(count - 1, 0);
>  	conn_configured = 0;
> -	for (i = 0; i < count; i++) {
> -		if (connectors[i]->has_tile)
> -			num_tiled_conns++;
> -	}
>  retry:
>  	conn_seq = conn_configured;
>  	for (i = 0; i < count; i++) {
> @@ -691,16 +631,6 @@ static bool drm_client_firmware_config(struct drm_client_dev *client,
>  				      connector->name);
>  			modes[i] = &connector->state->crtc->mode;
>  		}
> -		/*
> -		 * In case of tiled modes, if all tiles are not present
> -		 * then fallback to a non tiled mode.
> -		 */
> -		if (connector->has_tile &&
> -		    num_tiled_conns < connector->num_h_tile * connector->num_v_tile) {
> -			DRM_DEBUG_KMS("Falling back to non tiled mode on Connector %d\n",
> -				      connector->base.id);
> -			modes[i] = drm_connector_fallback_non_tiled_mode(connector);
> -		}
>  		crtcs[i] = new_crtc;
>  
>  		DRM_DEBUG_KMS("connector %s on [CRTC:%d:%s]: %dx%d%s\n",
Daniel Vetter Nov. 25, 2019, 9:20 p.m. UTC | #2
On Mon, Nov 25, 2019 at 05:07:26PM +0200, Jani Nikula wrote:
> On Sat, 23 Nov 2019, Uma Shankar <uma.shankar@intel.com> wrote:
> > This reverts commit f25c7a006cd1c07254780e3406e45cee4842b933.
> >
> > 2p2c display configuration blows up dmesg when one connector is
> > disconnected, causing issues in CI.
> >
> > Below are the sample errors thrown in logs:
> >
> > [IGT] core_getversion: executing
> > [IGT] core_getversion: exiting, ret=0
> > Setting dangerous option reset - tainting kernel
> > drm:drm_atomic_helper_wait_for_dependencies] ERROR [CRTC:152:pipe B] flip_done timed out
> > drm:drm_atomic_helper_wait_for_dependencies] ERROR [CONNECTOR:299:DP-2] flip_done timed out
> > drm:drm_atomic_helper_wait_for_dependencies] ERROR [PLANE:92:plane 1B] flip_done timed out
> > [drm:drm_atomic_helper_wait_for_flip_done] ERROR [CRTC:152:pipe B] flip_done timed out
> > [drm:drm_atomic_helper_wait_for_dependencies] ERROR [CRTC:152:pipe B] flip_done timed out
> > [drm:drm_atomic_helper_wait_for_dependencies] ERROR [CONNECTOR:299:DP-2] flip_done timed out
> > [drm:drm_atomic_helper_wait_for_dependencies] ERROR [PLANE:92:plane 1B] flip_done timed out
> > [drm:drm_atomic_helper_wait_for_flip_done] ERROR [CRTC:152:pipe B] flip_done timed out
> > Console: switching to colour frame buffer device 480x135
> > [drm:drm_atomic_helper_wait_for_dependencies] ERROR [CRTC:152:pipe B] flip_done timed out
> > [drm:drm_atomic_helper_wait_for_dependencies] ERROR [CONNECTOR:299:DP-2] flip_done timed out
> >
> > Reverting the change for now to unblock CI execution.
> >
> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Cc: Dave Airlie <airlied@redhat.com>
> > Cc: Jani Nikula <jani.nikula@intel.com>
> > Cc: Manasi Navare <manasi.d.navare@intel.com>
> > Signed-off-by: Uma Shankar <uma.shankar@intel.com>
> 
> Pushed to drm-misc-next with Daniel's irc ack. Thanks for the
> revert. Back to the drawing board.
> 
> I was about to add the Bugzilla: reference, but this being a gitlab
> issue instead, I opted for the gitlab Closes: tag:
> 
> 	Closes: https://gitlab.freedesktop.org/drm/intel/issues/6
> 
> We should probably align on what we want to use going forward. And do we
> want to keep using Bugzilla for bugzilla bugs?

I guess we could/should have that discussion once we have the git repos on
gitlab too. Right now I don't think the above does anything ...

Aside from that I think this makes sense.
-Daniel

> 
> BR,
> Jani.
> 
> 
> > ---
> >  drivers/gpu/drm/drm_client_modeset.c | 70 ----------------------------
> >  1 file changed, 70 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/drm_client_modeset.c b/drivers/gpu/drm/drm_client_modeset.c
> > index f2150a0bac4c..895b73f23079 100644
> > --- a/drivers/gpu/drm/drm_client_modeset.c
> > +++ b/drivers/gpu/drm/drm_client_modeset.c
> > @@ -114,33 +114,6 @@ drm_client_find_modeset(struct drm_client_dev *client, struct drm_crtc *crtc)
> >  	return NULL;
> >  }
> >  
> > -static struct drm_display_mode *
> > -drm_connector_get_tiled_mode(struct drm_connector *connector)
> > -{
> > -	struct drm_display_mode *mode;
> > -
> > -	list_for_each_entry(mode, &connector->modes, head) {
> > -		if (mode->hdisplay == connector->tile_h_size &&
> > -		    mode->vdisplay == connector->tile_v_size)
> > -			return mode;
> > -	}
> > -	return NULL;
> > -}
> > -
> > -static struct drm_display_mode *
> > -drm_connector_fallback_non_tiled_mode(struct drm_connector *connector)
> > -{
> > -	struct drm_display_mode *mode;
> > -
> > -	list_for_each_entry(mode, &connector->modes, head) {
> > -		if (mode->hdisplay == connector->tile_h_size &&
> > -		    mode->vdisplay == connector->tile_v_size)
> > -			continue;
> > -		return mode;
> > -	}
> > -	return NULL;
> > -}
> > -
> >  static struct drm_display_mode *
> >  drm_connector_has_preferred_mode(struct drm_connector *connector, int width, int height)
> >  {
> > @@ -375,14 +348,8 @@ static bool drm_client_target_preferred(struct drm_connector **connectors,
> >  	struct drm_connector *connector;
> >  	u64 conn_configured = 0;
> >  	int tile_pass = 0;
> > -	int num_tiled_conns = 0;
> >  	int i;
> >  
> > -	for (i = 0; i < connector_count; i++) {
> > -		if (connectors[i]->has_tile)
> > -			num_tiled_conns++;
> > -	}
> > -
> >  retry:
> >  	for (i = 0; i < connector_count; i++) {
> >  		connector = connectors[i];
> > @@ -432,28 +399,6 @@ static bool drm_client_target_preferred(struct drm_connector **connectors,
> >  			list_for_each_entry(modes[i], &connector->modes, head)
> >  				break;
> >  		}
> > -		/*
> > -		 * In case of tiled mode if all tiles not present fallback to
> > -		 * first available non tiled mode.
> > -		 * After all tiles are present, try to find the tiled mode
> > -		 * for all and if tiled mode not present due to fbcon size
> > -		 * limitations, use first non tiled mode only for
> > -		 * tile 0,0 and set to no mode for all other tiles.
> > -		 */
> > -		if (connector->has_tile) {
> > -			if (num_tiled_conns <
> > -			    connector->num_h_tile * connector->num_v_tile ||
> > -			    (connector->tile_h_loc == 0 &&
> > -			     connector->tile_v_loc == 0 &&
> > -			     !drm_connector_get_tiled_mode(connector))) {
> > -				DRM_DEBUG_KMS("Falling back to non tiled mode on Connector %d\n",
> > -					      connector->base.id);
> > -				modes[i] = drm_connector_fallback_non_tiled_mode(connector);
> > -			} else {
> > -				modes[i] = drm_connector_get_tiled_mode(connector);
> > -			}
> > -		}
> > -
> >  		DRM_DEBUG_KMS("found mode %s\n", modes[i] ? modes[i]->name :
> >  			  "none");
> >  		conn_configured |= BIT_ULL(i);
> > @@ -570,7 +515,6 @@ static bool drm_client_firmware_config(struct drm_client_dev *client,
> >  	bool fallback = true, ret = true;
> >  	int num_connectors_enabled = 0;
> >  	int num_connectors_detected = 0;
> > -	int num_tiled_conns = 0;
> >  	struct drm_modeset_acquire_ctx ctx;
> >  
> >  	if (!drm_drv_uses_atomic_modeset(dev))
> > @@ -588,10 +532,6 @@ static bool drm_client_firmware_config(struct drm_client_dev *client,
> >  	memcpy(save_enabled, enabled, count);
> >  	mask = GENMASK(count - 1, 0);
> >  	conn_configured = 0;
> > -	for (i = 0; i < count; i++) {
> > -		if (connectors[i]->has_tile)
> > -			num_tiled_conns++;
> > -	}
> >  retry:
> >  	conn_seq = conn_configured;
> >  	for (i = 0; i < count; i++) {
> > @@ -691,16 +631,6 @@ static bool drm_client_firmware_config(struct drm_client_dev *client,
> >  				      connector->name);
> >  			modes[i] = &connector->state->crtc->mode;
> >  		}
> > -		/*
> > -		 * In case of tiled modes, if all tiles are not present
> > -		 * then fallback to a non tiled mode.
> > -		 */
> > -		if (connector->has_tile &&
> > -		    num_tiled_conns < connector->num_h_tile * connector->num_v_tile) {
> > -			DRM_DEBUG_KMS("Falling back to non tiled mode on Connector %d\n",
> > -				      connector->base.id);
> > -			modes[i] = drm_connector_fallback_non_tiled_mode(connector);
> > -		}
> >  		crtcs[i] = new_crtc;
> >  
> >  		DRM_DEBUG_KMS("connector %s on [CRTC:%d:%s]: %dx%d%s\n",
> 
> -- 
> Jani Nikula, Intel Open Source Graphics Center

Patch
diff mbox series

diff --git a/drivers/gpu/drm/drm_client_modeset.c b/drivers/gpu/drm/drm_client_modeset.c
index f2150a0bac4c..895b73f23079 100644
--- a/drivers/gpu/drm/drm_client_modeset.c
+++ b/drivers/gpu/drm/drm_client_modeset.c
@@ -114,33 +114,6 @@  drm_client_find_modeset(struct drm_client_dev *client, struct drm_crtc *crtc)
 	return NULL;
 }
 
-static struct drm_display_mode *
-drm_connector_get_tiled_mode(struct drm_connector *connector)
-{
-	struct drm_display_mode *mode;
-
-	list_for_each_entry(mode, &connector->modes, head) {
-		if (mode->hdisplay == connector->tile_h_size &&
-		    mode->vdisplay == connector->tile_v_size)
-			return mode;
-	}
-	return NULL;
-}
-
-static struct drm_display_mode *
-drm_connector_fallback_non_tiled_mode(struct drm_connector *connector)
-{
-	struct drm_display_mode *mode;
-
-	list_for_each_entry(mode, &connector->modes, head) {
-		if (mode->hdisplay == connector->tile_h_size &&
-		    mode->vdisplay == connector->tile_v_size)
-			continue;
-		return mode;
-	}
-	return NULL;
-}
-
 static struct drm_display_mode *
 drm_connector_has_preferred_mode(struct drm_connector *connector, int width, int height)
 {
@@ -375,14 +348,8 @@  static bool drm_client_target_preferred(struct drm_connector **connectors,
 	struct drm_connector *connector;
 	u64 conn_configured = 0;
 	int tile_pass = 0;
-	int num_tiled_conns = 0;
 	int i;
 
-	for (i = 0; i < connector_count; i++) {
-		if (connectors[i]->has_tile)
-			num_tiled_conns++;
-	}
-
 retry:
 	for (i = 0; i < connector_count; i++) {
 		connector = connectors[i];
@@ -432,28 +399,6 @@  static bool drm_client_target_preferred(struct drm_connector **connectors,
 			list_for_each_entry(modes[i], &connector->modes, head)
 				break;
 		}
-		/*
-		 * In case of tiled mode if all tiles not present fallback to
-		 * first available non tiled mode.
-		 * After all tiles are present, try to find the tiled mode
-		 * for all and if tiled mode not present due to fbcon size
-		 * limitations, use first non tiled mode only for
-		 * tile 0,0 and set to no mode for all other tiles.
-		 */
-		if (connector->has_tile) {
-			if (num_tiled_conns <
-			    connector->num_h_tile * connector->num_v_tile ||
-			    (connector->tile_h_loc == 0 &&
-			     connector->tile_v_loc == 0 &&
-			     !drm_connector_get_tiled_mode(connector))) {
-				DRM_DEBUG_KMS("Falling back to non tiled mode on Connector %d\n",
-					      connector->base.id);
-				modes[i] = drm_connector_fallback_non_tiled_mode(connector);
-			} else {
-				modes[i] = drm_connector_get_tiled_mode(connector);
-			}
-		}
-
 		DRM_DEBUG_KMS("found mode %s\n", modes[i] ? modes[i]->name :
 			  "none");
 		conn_configured |= BIT_ULL(i);
@@ -570,7 +515,6 @@  static bool drm_client_firmware_config(struct drm_client_dev *client,
 	bool fallback = true, ret = true;
 	int num_connectors_enabled = 0;
 	int num_connectors_detected = 0;
-	int num_tiled_conns = 0;
 	struct drm_modeset_acquire_ctx ctx;
 
 	if (!drm_drv_uses_atomic_modeset(dev))
@@ -588,10 +532,6 @@  static bool drm_client_firmware_config(struct drm_client_dev *client,
 	memcpy(save_enabled, enabled, count);
 	mask = GENMASK(count - 1, 0);
 	conn_configured = 0;
-	for (i = 0; i < count; i++) {
-		if (connectors[i]->has_tile)
-			num_tiled_conns++;
-	}
 retry:
 	conn_seq = conn_configured;
 	for (i = 0; i < count; i++) {
@@ -691,16 +631,6 @@  static bool drm_client_firmware_config(struct drm_client_dev *client,
 				      connector->name);
 			modes[i] = &connector->state->crtc->mode;
 		}
-		/*
-		 * In case of tiled modes, if all tiles are not present
-		 * then fallback to a non tiled mode.
-		 */
-		if (connector->has_tile &&
-		    num_tiled_conns < connector->num_h_tile * connector->num_v_tile) {
-			DRM_DEBUG_KMS("Falling back to non tiled mode on Connector %d\n",
-				      connector->base.id);
-			modes[i] = drm_connector_fallback_non_tiled_mode(connector);
-		}
 		crtcs[i] = new_crtc;
 
 		DRM_DEBUG_KMS("connector %s on [CRTC:%d:%s]: %dx%d%s\n",