Skip to content

Commit

Permalink
media: platform: mtk-mdp3: fix error handling about components clock_on
Browse files Browse the repository at this point in the history
[ Upstream commit 74a596e ]

Add goto statement in mdp_comp_clock_on() to avoid error code not being
propagated or returning positive values.
This change also performs a well-timed clock_off when an error occurs, and
reduces unnecessary error logging in mdp_cmdq_send().

Fixes: 61890cc ("media: platform: mtk-mdp3: add MediaTek MDP3 driver")
Signed-off-by: Moudy Ho <moudy.ho@mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
MoudyHo authored and gregkh committed Dec 31, 2022
1 parent ab49175 commit ef9170c
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 9 deletions.
4 changes: 1 addition & 3 deletions drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c
Original file line number Diff line number Diff line change
Expand Up @@ -433,10 +433,8 @@ int mdp_cmdq_send(struct mdp_dev *mdp, struct mdp_cmdq_param *param)
cmd->mdp_ctx = param->mdp_ctx;

ret = mdp_comp_clocks_on(&mdp->pdev->dev, cmd->comps, cmd->num_comps);
if (ret) {
dev_err(dev, "comp %d failed to enable clock!\n", ret);
if (ret)
goto err_free_path;
}

dma_sync_single_for_device(mdp->cmdq_clt->chan->mbox->dev,
cmd->pkt.pa_base, cmd->pkt.cmd_buf_size,
Expand Down
24 changes: 18 additions & 6 deletions drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c
Original file line number Diff line number Diff line change
Expand Up @@ -699,12 +699,22 @@ int mdp_comp_clock_on(struct device *dev, struct mdp_comp *comp)
dev_err(dev,
"Failed to enable clk %d. type:%d id:%d\n",
i, comp->type, comp->id);
pm_runtime_put(comp->comp_dev);
return ret;
goto err_revert;
}
}

return 0;

err_revert:
while (--i >= 0) {
if (IS_ERR_OR_NULL(comp->clks[i]))
continue;
clk_disable_unprepare(comp->clks[i]);
}
if (comp->comp_dev)
pm_runtime_put_sync(comp->comp_dev);

return ret;
}

void mdp_comp_clock_off(struct device *dev, struct mdp_comp *comp)
Expand All @@ -723,11 +733,13 @@ void mdp_comp_clock_off(struct device *dev, struct mdp_comp *comp)

int mdp_comp_clocks_on(struct device *dev, struct mdp_comp *comps, int num)
{
int i;
int i, ret;

for (i = 0; i < num; i++)
if (mdp_comp_clock_on(dev, &comps[i]) != 0)
return ++i;
for (i = 0; i < num; i++) {
ret = mdp_comp_clock_on(dev, &comps[i]);
if (ret)
return ret;
}

return 0;
}
Expand Down

0 comments on commit ef9170c

Please sign in to comment.