@@ -2363,18 +2363,20 @@ static void cdns_mhdp_modeset_retry_fn(struct work_struct *work)
mhdp = container_of(work, typeof(*mhdp), modeset_retry_work);
- conn = &mhdp->connector;
-
- /* Grab the locks before changing connector property */
- mutex_lock(&conn->dev->mode_config.mutex);
-
- /*
- * Set connector link status to BAD and send a Uevent to notify
- * userspace to do a modeset.
- */
- drm_connector_set_link_status_property(conn, DRM_MODE_LINK_STATUS_BAD);
- mutex_unlock(&conn->dev->mode_config.mutex);
+ if (mhdp->connector.dev) {
+ conn = &mhdp->connector;
+ /* Grab the locks before changing connector property */
+ mutex_lock(&conn->dev->mode_config.mutex);
+ /*
+ * Set connector link status to BAD and send a Uevent to notify
+ * userspace to do a modeset.
+ */
+ drm_connector_set_link_status_property(conn, DRM_MODE_LINK_STATUS_BAD);
+ mutex_unlock(&conn->dev->mode_config.mutex);
+ } else {
+ mhdp->plugged = false;
+ }
/* Send Hotplug uevent so userspace can reprobe */
drm_kms_helper_hotplug_event(mhdp->bridge.dev);
}
For the cases we have DRM_BRIDGE_ATTACH_NO_CONNECTOR flag set, the connector structure is not initialised in the bridge. That's done by encoder. So in case of some failure in cdns_mhdp_atomic_enable, when we schedule work for modeset_retry_work, we will use the mutex of connector which will result in NULL pointer dereference. Handle it by adding condition for the connector. Otherwise, since the modeset_retry_work tries to set the connector status as bad, set the mhdp->plugged as false which would give the connector status as disconnected in detect hook. Fixes: fb43aa0acdfd ("drm: bridge: Add support for Cadence MHDP8546 DPI/DP bridge") Signed-off-by: Jayesh Choudhary <j-choudhary@ti.com> --- NOTE: Found this issue in one particular board where edid read failed. Issue log: <https://gist.github.com/Jayesh2000/233f87f9becdf1e66f1da6fd53f77429> Adding conditional fixes the null pointer issue but there is still flooding of these logs (128 times): "cdns-mhdp8546 a000000.bridge: Failed to read DPCD addr 0" Sending RFC as I am still not sure about how to handle this flooding. Is it okay to decrease the log level for DPCD read and DPCD write in the cdns_mhdp_transfer to debug? .../drm/bridge/cadence/cdns-mhdp8546-core.c | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-)