瀏覽代碼

disp: msm: dp: enable logs in key mst callflow operations

This change adds more debug logs and event logs to MST callflows
to help with MST stability issues.

Change-Id: I9053eab5932487fccce522cc17ed2e9fb8d887ab
Signed-off-by: Rajkumar Subbiah <[email protected]>
Rajkumar Subbiah 5 年之前
父節點
當前提交
1b694e8213
共有 4 個文件被更改,包括 55 次插入34 次删除
  1. 1 1
      msm/dp/dp_ctrl.c
  2. 2 0
      msm/dp/dp_debug.c
  3. 34 12
      msm/dp/dp_display.c
  4. 18 21
      msm/dp/dp_mst_drm.c

+ 1 - 1
msm/dp/dp_ctrl.c

@@ -1156,7 +1156,7 @@ static void dp_ctrl_fec_dsc_setup(struct dp_ctrl_private *ctrl)
 	rlen = drm_dp_dpcd_writeb(ctrl->aux->drm_aux, DP_DSC_ENABLE,
 			dsc_enable);
 	if (rlen < 1)
-		DP_DEBUG("failed to enable sink dsc\n");
+		DP_WARN("failed to enable sink dsc\n");
 }
 
 static int dp_ctrl_stream_on(struct dp_ctrl *dp_ctrl, struct dp_panel *panel)

+ 2 - 0
msm/dp/dp_debug.c

@@ -447,6 +447,8 @@ static ssize_t dp_debug_write_edid_modes_mst(struct file *file,
 				mst_connector->vdisplay = vdisplay;
 				mst_connector->vrefresh = vrefresh;
 				mst_connector->aspect_ratio = aspect_ratio;
+				DP_INFO("Setting %dx%dp%d on conn %d\n",
+					hdisplay, vdisplay, vrefresh, con_id);
 			}
 		}
 

+ 34 - 12
msm/dp/dp_display.c

@@ -839,11 +839,10 @@ static int dp_display_send_hpd_notification(struct dp_display_private *dp)
 		DP_WARN("%s timeout\n", hpd ? "connect" : "disconnect");
 		ret = -EINVAL;
 	}
-	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, dp->state, hpd, ret);
-	return ret;
+
 skip_wait:
 	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, dp->state, hpd, ret);
-	return 0;
+	return ret;
 }
 
 static void dp_display_update_mst_state(struct dp_display_private *dp,
@@ -1898,6 +1897,9 @@ static int dp_display_set_mode(struct dp_display *dp_display, void *panel,
 	}
 
 	dp = container_of(dp_display, struct dp_display_private, dp_display);
+	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_ENTRY, dp->state,
+			mode->timing.h_active, mode->timing.v_active,
+			mode->timing.refresh_rate);
 
 	mutex_lock(&dp->session_lock);
 	mode->timing.bpp =
@@ -1910,6 +1912,7 @@ static int dp_display_set_mode(struct dp_display *dp_display, void *panel,
 
 	dp_panel->pinfo = mode->timing;
 	mutex_unlock(&dp->session_lock);
+	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, dp->state);
 
 	return 0;
 }
@@ -2030,6 +2033,8 @@ static int dp_display_set_stream_info(struct dp_display *dp_display,
 	}
 
 	dp = container_of(dp_display, struct dp_display_private, dp_display);
+	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_ENTRY, dp->state, strm_id,
+			start_slot, num_slots);
 
 	mutex_lock(&dp->session_lock);
 
@@ -2043,6 +2048,7 @@ static int dp_display_set_stream_info(struct dp_display *dp_display,
 	}
 
 	mutex_unlock(&dp->session_lock);
+	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, dp->state, rc);
 
 	return rc;
 }
@@ -2182,6 +2188,7 @@ end:
 
 	complete_all(&dp->notification_comp);
 	mutex_unlock(&dp->session_lock);
+	DP_DEBUG("display post enable complete. state: 0x%x\n", dp->state);
 	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, dp->state);
 	return 0;
 }
@@ -2889,6 +2896,7 @@ static int dp_display_init_aux_switch(struct dp_display_private *dp)
 		goto end;
 	}
 
+	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_ENTRY);
 	dp->aux_switch_node = of_parse_phandle(dp->pdev->dev.of_node,
 			phandle, 0);
 	if (!dp->aux_switch_node) {
@@ -2908,6 +2916,7 @@ static int dp_display_init_aux_switch(struct dp_display_private *dp)
 
 	fsa4480_unreg_notifier(&nb, dp->aux_switch_node);
 end:
+	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, rc);
 	return rc;
 }
 
@@ -2922,6 +2931,7 @@ static int dp_display_mst_install(struct dp_display *dp_display,
 	}
 
 	dp = container_of(dp_display, struct dp_display_private, dp_display);
+	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_ENTRY, dp->state);
 
 	if (!mst_install_info->cbs->hpd || !mst_install_info->cbs->hpd_irq) {
 		DP_ERR("invalid mst cbs\n");
@@ -2939,6 +2949,7 @@ static int dp_display_mst_install(struct dp_display *dp_display,
 	dp->mst.drm_registered = true;
 
 	DP_MST_DEBUG("dp mst drm installed\n");
+	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, dp->state);
 
 	return 0;
 }
@@ -2953,6 +2964,7 @@ static int dp_display_mst_uninstall(struct dp_display *dp_display)
 	}
 
 	dp = container_of(dp_display, struct dp_display_private, dp_display);
+	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_ENTRY, dp->state);
 
 	if (!dp->mst.drm_registered) {
 		DP_DEBUG("drm mst not registered\n");
@@ -2965,6 +2977,7 @@ static int dp_display_mst_uninstall(struct dp_display *dp_display)
 	dp->mst.drm_registered = false;
 
 	DP_MST_DEBUG("dp mst drm uninstalled\n");
+	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, dp->state);
 
 	return 0;
 }
@@ -2986,12 +2999,13 @@ static int dp_display_mst_connector_install(struct dp_display *dp_display,
 
 	dp = container_of(dp_display, struct dp_display_private, dp_display);
 
+	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_ENTRY, dp->state);
 	mutex_lock(&dp->session_lock);
 
 	if (!dp->mst.drm_registered) {
 		DP_DEBUG("drm mst not registered\n");
-		mutex_unlock(&dp->session_lock);
-		return -EPERM;
+		rc = -EPERM;
+		goto end;
 	}
 
 	panel_in.dev = &dp->pdev->dev;
@@ -3006,8 +3020,7 @@ static int dp_display_mst_connector_install(struct dp_display *dp_display,
 	if (IS_ERR(dp_panel)) {
 		rc = PTR_ERR(dp_panel);
 		DP_ERR("failed to initialize panel, rc = %d\n", rc);
-		mutex_unlock(&dp->session_lock);
-		return rc;
+		goto end;
 	}
 
 	dp_panel->audio = dp_audio_get(dp->pdev, dp_panel, &dp->catalog->audio);
@@ -3015,8 +3028,7 @@ static int dp_display_mst_connector_install(struct dp_display *dp_display,
 		rc = PTR_ERR(dp_panel->audio);
 		DP_ERR("[mst] failed to initialize audio, rc = %d\n", rc);
 		dp_panel->audio = NULL;
-		mutex_unlock(&dp->session_lock);
-		return rc;
+		goto end;
 	}
 
 	DP_MST_DEBUG("dp mst connector installed. conn:%d\n",
@@ -3028,8 +3040,8 @@ static int dp_display_mst_connector_install(struct dp_display *dp_display,
 			GFP_KERNEL);
 	if (!mst_connector) {
 		mutex_unlock(&dp->debug->dp_mst_connector_list.lock);
-		mutex_unlock(&dp->session_lock);
-		return -ENOMEM;
+		rc = -ENOMEM;
+		goto end;
 	}
 
 	cached_connector = &dp->debug->mst_connector_cache;
@@ -3054,9 +3066,11 @@ static int dp_display_mst_connector_install(struct dp_display *dp_display,
 			&dp->debug->dp_mst_connector_list.list);
 
 	mutex_unlock(&dp->debug->dp_mst_connector_list.lock);
+end:
 	mutex_unlock(&dp->session_lock);
+	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, dp->state, rc);
 
-	return 0;
+	return rc;
 }
 
 static int dp_display_mst_connector_uninstall(struct dp_display *dp_display,
@@ -3075,6 +3089,7 @@ static int dp_display_mst_connector_uninstall(struct dp_display *dp_display,
 
 	dp = container_of(dp_display, struct dp_display_private, dp_display);
 
+	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_ENTRY, dp->state);
 	mutex_lock(&dp->session_lock);
 
 	if (!dp->mst.drm_registered) {
@@ -3118,6 +3133,7 @@ static int dp_display_mst_connector_uninstall(struct dp_display *dp_display,
 
 	mutex_unlock(&dp->debug->dp_mst_connector_list.lock);
 	mutex_unlock(&dp->session_lock);
+	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, dp->state);
 
 	return rc;
 }
@@ -3460,6 +3476,8 @@ static void dp_display_set_mst_state(void *dp_display,
 	}
 
 	dp = container_of(g_dp_display, struct dp_display_private, dp_display);
+	SDE_EVT32_EXTERNAL(mst_state, dp->mst.mst_active);
+
 	if (dp->mst.mst_active && dp->mst.cbs.set_drv_state)
 		dp->mst.cbs.set_drv_state(g_dp_display, mst_state);
 }
@@ -3489,6 +3507,7 @@ static int dp_pm_prepare(struct device *dev)
 	struct dp_display_private *dp = container_of(g_dp_display,
 			struct dp_display_private, dp_display);
 
+	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_ENTRY);
 	mutex_lock(&dp->session_lock);
 	dp_display_set_mst_state(g_dp_display, PM_SUSPEND);
 
@@ -3508,6 +3527,7 @@ static int dp_pm_prepare(struct device *dev)
 
 	dp_display_state_add(DP_STATE_SUSPENDED);
 	mutex_unlock(&dp->session_lock);
+	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, dp->state);
 
 	return 0;
 }
@@ -3517,6 +3537,7 @@ static void dp_pm_complete(struct device *dev)
 	struct dp_display_private *dp = container_of(g_dp_display,
 			struct dp_display_private, dp_display);
 
+	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_ENTRY);
 	mutex_lock(&dp->session_lock);
 	dp_display_set_mst_state(g_dp_display, PM_DEFAULT);
 
@@ -3536,6 +3557,7 @@ static void dp_pm_complete(struct device *dev)
 
 	dp_display_state_remove(DP_STATE_SUSPENDED);
 	mutex_unlock(&dp->session_lock);
+	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, dp->state);
 }
 
 static const struct dev_pm_ops dp_pm_ops = {

+ 18 - 21
msm/dp/dp_mst_drm.c

@@ -1064,14 +1064,12 @@ static void dp_mst_bridge_pre_enable(struct drm_bridge *drm_bridge)
 		_dp_mst_bridge_pre_enable_part2(bridge);
 	}
 
-	DP_MST_INFO("mode: id(%d) mode(%s), refresh(%d)\n",
-			bridge->id, bridge->drm_mode.name,
-			bridge->drm_mode.vrefresh);
-	DP_MST_INFO("dsc: id(%d) dsc(%d)\n", bridge->id,
-			bridge->dp_mode.timing.comp_info.comp_ratio);
-	DP_MST_INFO("channel: id(%d) vcpi(%d) start(%d) tot(%d)\n",
-			bridge->id, bridge->vcpi, bridge->start_slot,
-			bridge->num_slots);
+	DP_MST_INFO("conn:%d mode:%s fps:%d dsc:%d vcpi:%d slots:%d to %d\n",
+			DP_MST_CONN_ID(bridge), bridge->drm_mode.name,
+			bridge->drm_mode.vrefresh,
+			bridge->dp_mode.timing.comp_info.comp_ratio,
+			bridge->vcpi, bridge->start_slot,
+			bridge->start_slot + bridge->num_slots);
 end:
 	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, DP_MST_CONN_ID(bridge));
 	mutex_unlock(&mst->mst_lock);
@@ -1106,8 +1104,9 @@ static void dp_mst_bridge_enable(struct drm_bridge *drm_bridge)
 		return;
 	}
 
-	DP_MST_INFO("mst bridge [%d] post enable complete\n",
-			bridge->id);
+	DP_MST_INFO("mst bridge:%d conn:%d post enable complete\n",
+			bridge->id, DP_MST_CONN_ID(bridge));
+	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, DP_MST_CONN_ID(bridge));
 }
 
 static void dp_mst_bridge_disable(struct drm_bridge *drm_bridge)
@@ -1148,7 +1147,8 @@ static void dp_mst_bridge_disable(struct drm_bridge *drm_bridge)
 
 	_dp_mst_bridge_pre_disable_part2(bridge);
 
-	DP_MST_INFO("mst bridge [%d] disable complete\n", bridge->id);
+	DP_MST_INFO("mst bridge:%d conn:%d disable complete\n", bridge->id,
+			DP_MST_CONN_ID(bridge));
 	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, DP_MST_CONN_ID(bridge));
 	mutex_unlock(&mst->mst_lock);
 }
@@ -1179,21 +1179,20 @@ static void dp_mst_bridge_post_disable(struct drm_bridge *drm_bridge)
 
 	rc = dp->disable(dp, bridge->dp_panel);
 	if (rc)
-		DP_MST_INFO("[%d] DP display disable failed, rc=%d\n",
-		       bridge->id, rc);
+		DP_MST_INFO("bridge:%d conn:%d display disable failed, rc=%d\n",
+				bridge->id, DP_MST_CONN_ID(bridge), rc);
 
 	rc = dp->unprepare(dp, bridge->dp_panel);
 	if (rc)
-		DP_MST_INFO("[%d] DP display unprepare failed, rc=%d\n",
-		       bridge->id, rc);
+		DP_MST_INFO("bridge:%d conn:%d display unprepare failed, rc=%d\n",
+				bridge->id, DP_MST_CONN_ID(bridge), rc);
 
 	bridge->connector = NULL;
 	bridge->dp_panel =  NULL;
 
-	DP_MST_INFO("mst bridge [%d] conn:%d post disable complete\n",
+	DP_MST_INFO("mst bridge:%d conn:%d post disable complete\n",
 			bridge->id, DP_MST_CONN_ID(bridge));
 	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, DP_MST_CONN_ID(bridge));
-
 }
 
 static void dp_mst_bridge_mode_set(struct drm_bridge *drm_bridge,
@@ -1225,8 +1224,8 @@ static void dp_mst_bridge_mode_set(struct drm_bridge *drm_bridge,
 	dp->convert_to_dp_mode(dp, bridge->dp_panel, adjusted_mode,
 			&bridge->dp_mode);
 
-	DP_MST_INFO("mst bridge [%d] mode set complete %s\n", bridge->id,
-			mode->name);
+	DP_MST_INFO("mst bridge:%d conn:%d mode set complete %s\n", bridge->id,
+			DP_MST_CONN_ID(bridge), mode->name);
 }
 
 /* DP MST Bridge APIs */
@@ -1484,8 +1483,6 @@ int dp_mst_connector_get_info(struct drm_connector *connector,
 
 	DP_MST_INFO("mst connector:%d status:%d, rc:%d\n",
 			connector->base.id, status, rc);
-
-	DP_MST_DEBUG("exit:\n");
 	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, connector->base.id);
 
 	return rc;