From 769e9693c7dd4478261055cd411c6e93b0b84fc2 Mon Sep 17 00:00:00 2001 From: ntarte Date: Tue, 20 Sep 2022 12:06:11 +0530 Subject: [PATCH] Revert "Revert "disp: msm: dp: free DP sim ports during DP sim disable"" This reverts commit ac1ab5fb46ef44d555fa308d054fef0a058a90ce. Change-Id: I200a765112d7c85f5a069716dfae2c5418cf7c7b Signed-off-by: Nikhil Tarte --- msm/dp/dp_debug.c | 2 ++ msm/dp/dp_mst_sim.c | 4 ++++ msm/dp/dp_mst_sim_helper.c | 13 ++++++++----- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/msm/dp/dp_debug.c b/msm/dp/dp_debug.c index 0696dd5a..2897d96e 100644 --- a/msm/dp/dp_debug.c +++ b/msm/dp/dp_debug.c @@ -121,6 +121,8 @@ static void dp_debug_disable_sim_mode(struct dp_debug_private *debug, debug->sim_mode &= ~mode_mask; dp_sim_set_sim_mode(debug->sim_bridge, debug->sim_mode); + dp_sim_update_port_num(debug->sim_bridge, 0); + /* switch to normal mode */ if (!debug->sim_mode) debug->aux->set_sim_mode(debug->aux, NULL); diff --git a/msm/dp/dp_mst_sim.c b/msm/dp/dp_mst_sim.c index 2ed82571..2e3eb403 100644 --- a/msm/dp/dp_mst_sim.c +++ b/msm/dp/dp_mst_sim.c @@ -342,6 +342,10 @@ int dp_sim_update_port_num(struct dp_aux_bridge *bridge, u32 port_num) return -EINVAL; sim_dev = to_dp_sim_dev(bridge); + DP_INFO("Update port count from %d to %d\n", port_num, sim_dev->port_num); + + if (sim_dev->port_num > port_num && sim_dev->ports) + sim_dev->port_num = port_num; if (port_num > sim_dev->port_num) { ports = devm_kzalloc(sim_dev->dev, diff --git a/msm/dp/dp_mst_sim_helper.c b/msm/dp/dp_mst_sim_helper.c index 1fe4e916..1657c975 100644 --- a/msm/dp/dp_mst_sim_helper.c +++ b/msm/dp/dp_mst_sim_helper.c @@ -1086,13 +1086,15 @@ int dp_mst_sim_update(void *mst_sim_context, u32 port_num, kfree(ctx->ports); ctx->port_num = 0; - ctx->ports = kcalloc(port_num, sizeof(*ports), GFP_KERNEL); - if (!ctx->ports) { - rc = -ENOMEM; - goto fail; + if (port_num) { + ctx->ports = kcalloc(port_num, sizeof(*ports), GFP_KERNEL); + if (!ctx->ports) { + rc = -ENOMEM; + goto fail; + } + ctx->port_num = port_num; } - ctx->port_num = port_num; for (i = 0; i < port_num; i++) { ctx->ports[i] = ports[i]; if (ports[i].edid_size) { @@ -1118,6 +1120,7 @@ fail: for (i = 0; i < ctx->port_num; i++) kfree(ctx->ports[i].edid); kfree(ctx->ports); + ctx->port_num = 0; } mutex_unlock(&ctx->session_lock);