Эх сурвалжийг харах

disp: msm: sde: populate connector modes during init

When continuous splash is enabled, KMS populates the modes of
a connector during splash config. With TUI VM enabled, this path
will also be exercised by trusted vm for splash handoff, where for
a given display we try to use the same HW blocks configured by
the primary VM.

Since the trusted VM invokes the path under connection_mutex lock,
calling fill_modes will lead to a deadlock. So, move the connector
mode population during init for DSI displays, since the modes are
available for the connector during initialization.

Change-Id: I12f920f4af84b7bccc97a5f5edb5117ada49b960
Signed-off-by: Jeykumar Sankaran <[email protected]>
Jeykumar Sankaran 4 жил өмнө
parent
commit
a521764b53

+ 6 - 0
msm/sde/sde_connector.c

@@ -2707,6 +2707,12 @@ static int _sde_connector_install_properties(struct drm_device *dev,
 				sizeof(dsi_display->panel->hdr_props),
 				sizeof(dsi_display->panel->hdr_props),
 				CONNECTOR_PROP_HDR_INFO);
 				CONNECTOR_PROP_HDR_INFO);
 		}
 		}
+
+		mutex_lock(&c_conn->base.dev->mode_config.mutex);
+		sde_connector_fill_modes(&c_conn->base,
+						dev->mode_config.max_width,
+						dev->mode_config.max_height);
+		mutex_unlock(&c_conn->base.dev->mode_config.mutex);
 	}
 	}
 
 
 	msm_property_install_volatile_range(
 	msm_property_install_volatile_range(

+ 0 - 10
msm/sde/sde_kms.c

@@ -3043,16 +3043,6 @@ static int sde_kms_cont_splash_config(struct msm_kms *kms)
 			mutex_unlock(&dev->mode_config.mutex);
 			mutex_unlock(&dev->mode_config.mutex);
 			return -EINVAL;
 			return -EINVAL;
 		}
 		}
-
-		if (connector->funcs->fill_modes) {
-			connector->funcs->fill_modes(connector,
-					dev->mode_config.max_width,
-					dev->mode_config.max_height);
-		} else {
-			SDE_ERROR("fill_modes api not defined\n");
-			mutex_unlock(&dev->mode_config.mutex);
-			return -EINVAL;
-		}
 		mutex_unlock(&dev->mode_config.mutex);
 		mutex_unlock(&dev->mode_config.mutex);
 
 
 		crtc->state->encoder_mask = (1 << drm_encoder_index(encoder));
 		crtc->state->encoder_mask = (1 << drm_encoder_index(encoder));