Merge "disp: msm: dp: clear MST sim context during DP sim disable" into display-kernel.lnx.1.0

This commit is contained in:
Linux Build Service Account
2022-09-23 12:19:24 -07:00
committed by Gerrit - the friendly Code Review server
3 changed files with 35 additions and 33 deletions

View File

@@ -74,19 +74,18 @@ static int dp_debug_attach_sim_bridge(struct dp_debug_private *debug)
{
int ret;
if (debug->sim_bridge)
return 0;
if (!debug->sim_bridge) {
ret = dp_sim_create_bridge(debug->dev, &debug->sim_bridge);
if (ret)
return ret;
ret = dp_sim_create_bridge(debug->dev, &debug->sim_bridge);
if (ret)
return ret;
if (debug->sim_bridge->register_hpd)
debug->sim_bridge->register_hpd(debug->sim_bridge,
dp_debug_sim_hpd_cb, debug);
}
dp_sim_update_port_num(debug->sim_bridge, 1);
if (debug->sim_bridge->register_hpd)
debug->sim_bridge->register_hpd(debug->sim_bridge,
dp_debug_sim_hpd_cb, debug);
return 0;
}

View File

@@ -342,10 +342,7 @@ 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;
DP_INFO("Update port count from %d to %d\n", sim_dev->port_num, port_num);
if (port_num > sim_dev->port_num) {
ports = devm_kzalloc(sim_dev->dev,
@@ -365,10 +362,9 @@ int dp_sim_update_port_num(struct dp_aux_bridge *bridge, u32 port_num)
memcpy(&ports[i], &output_port, sizeof(*ports));
ports[i].peer_guid[0] = i;
}
sim_dev->port_num = port_num;
}
sim_dev->port_num = port_num;
rc = dp_mst_sim_update(sim_dev->bridge.mst_ctx,
port_num, sim_dev->ports);
if (rc)

View File

@@ -1055,6 +1055,18 @@ static void dp_mst_sim_notify(struct dp_mst_sim_context *ctx,
queue_work(ctx->wq, &work->base);
}
static void dp_mst_sim_free_ports(struct dp_mst_sim_context *ctx)
{
u32 i;
for (i = 0; i < ctx->port_num; i++)
kfree(ctx->ports[i].edid);
kfree(ctx->ports);
ctx->ports = NULL;
ctx->port_num = 0;
}
int dp_mst_sim_update(void *mst_sim_context, u32 port_num,
struct dp_mst_sim_port *ports)
{
@@ -1064,7 +1076,7 @@ int dp_mst_sim_update(void *mst_sim_context, u32 port_num,
u32 update_mask = 0;
u32 i;
if (!ctx || port_num >= 15)
if (!ctx || port_num >= 15 || !ports)
return -EINVAL;
mutex_lock(&ctx->session_lock);
@@ -1081,19 +1093,17 @@ int dp_mst_sim_update(void *mst_sim_context, u32 port_num,
}
}
for (i = 0; i < ctx->port_num; i++)
kfree(ctx->ports[i].edid);
kfree(ctx->ports);
ctx->port_num = 0;
dp_mst_sim_free_ports(ctx);
if (port_num) {
ctx->ports = kcalloc(port_num, sizeof(*ports), GFP_KERNEL);
if (!ctx->ports) {
rc = -ENOMEM;
goto fail;
}
ctx->port_num = port_num;
if (!port_num)
goto end;
ctx->ports = kcalloc(port_num, sizeof(*ports), GFP_KERNEL);
if (!ctx->ports) {
rc = -ENOMEM;
goto fail;
}
ctx->port_num = port_num;
for (i = 0; i < port_num; i++) {
ctx->ports[i] = ports[i];
@@ -1116,13 +1126,10 @@ int dp_mst_sim_update(void *mst_sim_context, u32 port_num,
}
fail:
if (rc) {
for (i = 0; i < ctx->port_num; i++)
kfree(ctx->ports[i].edid);
kfree(ctx->ports);
ctx->port_num = 0;
}
if (rc)
dp_mst_sim_free_ports(ctx);
end:
mutex_unlock(&ctx->session_lock);
if (update_mask)