disp: msm: dp: dp detect port

Commit 3f9b3f02dda5 ("drm/dp_mst: Protect drm_dp_mst_port
members with locking") adds locking while detecting mst ports.
This change updates the dp driver to pass in the ctx which
is acquired at that time.

Change-Id: I8e5ba9648494f9b4f8fa3d1654ec22dd2502e0b0
Signed-off-by: Samantha Tran <samtran@codeaurora.org>
Signed-off-by: Nilaan Gunabalachandran <ngunabal@codeaurora.org>
This commit is contained in:
Samantha Tran
2020-09-30 11:59:39 -07:00
committed by Nilaan Gunabalachandran
parent f01cd2c0e1
commit af5aee268a

View File

@@ -64,8 +64,9 @@ struct dp_drm_mst_fw_helper_ops {
int (*update_payload_part1)(struct drm_dp_mst_topology_mgr *mgr); int (*update_payload_part1)(struct drm_dp_mst_topology_mgr *mgr);
int (*check_act_status)(struct drm_dp_mst_topology_mgr *mgr); int (*check_act_status)(struct drm_dp_mst_topology_mgr *mgr);
int (*update_payload_part2)(struct drm_dp_mst_topology_mgr *mgr); int (*update_payload_part2)(struct drm_dp_mst_topology_mgr *mgr);
enum drm_connector_status (*detect_port)( int (*detect_port_ctx)(
struct drm_connector *connector, struct drm_connector *connector,
struct drm_modeset_acquire_ctx *ctx,
struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_topology_mgr *mgr,
struct drm_dp_mst_port *port); struct drm_dp_mst_port *port);
struct edid *(*get_edid)(struct drm_connector *connector, struct edid *(*get_edid)(struct drm_connector *connector,
@@ -631,17 +632,18 @@ static void dp_mst_sim_handle_hpd_irq(void *dp_display,
} }
} }
static enum drm_connector_status dp_mst_detect_port( static int dp_mst_detect_port(
struct drm_connector *connector, struct drm_connector *connector,
struct drm_modeset_acquire_ctx *ctx,
struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_topology_mgr *mgr,
struct drm_dp_mst_port *port) struct drm_dp_mst_port *port)
{ {
struct dp_mst_private *mst = container_of(mgr, struct dp_mst_private *mst = container_of(mgr,
struct dp_mst_private, mst_mgr); struct dp_mst_private, mst_mgr);
enum drm_connector_status status = connector_status_disconnected; int status = connector_status_disconnected;
if (mst->mst_session_state) if (mst->mst_session_state)
status = drm_dp_mst_detect_port(connector, mgr, port); status = drm_dp_mst_detect_port(connector, ctx, mgr, port);
DP_MST_DEBUG("mst port status: %d, session state: %d\n", DP_MST_DEBUG("mst port status: %d, session state: %d\n",
status, mst->mst_session_state); status, mst->mst_session_state);
@@ -707,7 +709,7 @@ static const struct dp_drm_mst_fw_helper_ops drm_dp_mst_fw_helper_ops = {
.update_payload_part1 = drm_dp_update_payload_part1, .update_payload_part1 = drm_dp_update_payload_part1,
.check_act_status = drm_dp_check_act_status, .check_act_status = drm_dp_check_act_status,
.update_payload_part2 = drm_dp_update_payload_part2, .update_payload_part2 = drm_dp_update_payload_part2,
.detect_port = dp_mst_detect_port, .detect_port_ctx = dp_mst_detect_port,
.get_edid = drm_dp_mst_get_edid, .get_edid = drm_dp_mst_get_edid,
.topology_mgr_set_mst = drm_dp_mst_topology_mgr_set_mst, .topology_mgr_set_mst = drm_dp_mst_topology_mgr_set_mst,
.get_vcpi_info = _dp_mst_get_vcpi_info, .get_vcpi_info = _dp_mst_get_vcpi_info,
@@ -724,7 +726,7 @@ static const struct dp_drm_mst_fw_helper_ops drm_dp_sim_mst_fw_helper_ops = {
.update_payload_part1 = dp_mst_sim_update_payload_part1, .update_payload_part1 = dp_mst_sim_update_payload_part1,
.check_act_status = dp_mst_sim_no_action, .check_act_status = dp_mst_sim_no_action,
.update_payload_part2 = dp_mst_sim_update_payload_part2, .update_payload_part2 = dp_mst_sim_update_payload_part2,
.detect_port = dp_mst_detect_port, .detect_port_ctx = dp_mst_detect_port,
.get_edid = dp_mst_sim_get_edid, .get_edid = dp_mst_sim_get_edid,
.topology_mgr_set_mst = dp_mst_sim_topology_mgr_set_mst, .topology_mgr_set_mst = dp_mst_sim_topology_mgr_set_mst,
.get_vcpi_info = _dp_mst_get_vcpi_info, .get_vcpi_info = _dp_mst_get_vcpi_info,
@@ -1356,12 +1358,15 @@ dp_mst_connector_detect(struct drm_connector *connector, bool force,
struct dp_mst_private *mst = dp_display->dp_mst_prv_info; struct dp_mst_private *mst = dp_display->dp_mst_prv_info;
enum drm_connector_status status; enum drm_connector_status status;
struct dp_mst_connector mst_conn; struct dp_mst_connector mst_conn;
struct drm_modeset_acquire_ctx ctx;
DP_MST_DEBUG("enter:\n"); DP_MST_DEBUG("enter:\n");
SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_ENTRY); SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_ENTRY);
status = mst->mst_fw_cbs->detect_port(connector, drm_modeset_acquire_init(&ctx, 0);
&mst->mst_mgr,
status = mst->mst_fw_cbs->detect_port_ctx(connector,
&ctx, &mst->mst_mgr,
c_conn->mst_port); c_conn->mst_port);
memset(&mst_conn, 0, sizeof(mst_conn)); memset(&mst_conn, 0, sizeof(mst_conn));
@@ -1374,6 +1379,7 @@ dp_mst_connector_detect(struct drm_connector *connector, bool force,
DP_MST_INFO("conn:%d status:%d\n", connector->base.id, status); DP_MST_INFO("conn:%d status:%d\n", connector->base.id, status);
SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, connector->base.id, status); SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, connector->base.id, status);
drm_modeset_acquire_fini(&ctx);
return status; return status;
} }