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 <rsubbia@codeaurora.org>
此提交包含在:
Rajkumar Subbiah
2020-07-23 13:20:31 -04:00
父節點 32c625dba0
當前提交 1b694e8213
共有 4 個檔案被更改,包括 55 行新增34 行删除

查看文件

@@ -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)

查看文件

@@ -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);
}
}

查看文件

@@ -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 = {

查看文件

@@ -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;