mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 01:53:29 +02:00
media: platform: mtk-mdp3: introduce more pipelines from MT8195
Increasing the number of sets built by MMSYS and MUTEX in MT8195 will enable the creation of more pipelines in MDP3. Signed-off-by: Moudy Ho <moudy.ho@mediatek.com> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> Signed-off-by: Sebastian Fricke <sebastian.fricke@collabora.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
parent
ee0d0dbb80
commit
d9b52f7356
|
|
@ -50,6 +50,43 @@ static struct mtk_mutex *__get_mutex(const struct mdp_dev *mdp_dev,
|
|||
return mdp_dev->mm_subsys[p->sub_id].mdp_mutex[p->mutex_id];
|
||||
}
|
||||
|
||||
static enum mdp_pipe_id __get_pipe(const struct mdp_dev *mdp_dev,
|
||||
enum mtk_mdp_comp_id id)
|
||||
{
|
||||
enum mdp_pipe_id pipe_id;
|
||||
|
||||
switch (id) {
|
||||
case MDP_COMP_RDMA0:
|
||||
pipe_id = MDP_PIPE_RDMA0;
|
||||
break;
|
||||
case MDP_COMP_ISP_IMGI:
|
||||
pipe_id = MDP_PIPE_IMGI;
|
||||
break;
|
||||
case MDP_COMP_WPEI:
|
||||
pipe_id = MDP_PIPE_WPEI;
|
||||
break;
|
||||
case MDP_COMP_WPEI2:
|
||||
pipe_id = MDP_PIPE_WPEI2;
|
||||
break;
|
||||
case MDP_COMP_RDMA1:
|
||||
pipe_id = MDP_PIPE_RDMA1;
|
||||
break;
|
||||
case MDP_COMP_RDMA2:
|
||||
pipe_id = MDP_PIPE_RDMA2;
|
||||
break;
|
||||
case MDP_COMP_RDMA3:
|
||||
pipe_id = MDP_PIPE_RDMA3;
|
||||
break;
|
||||
default:
|
||||
/* Avoid exceptions when operating MUTEX */
|
||||
pipe_id = MDP_PIPE_RDMA0;
|
||||
dev_err(&mdp_dev->pdev->dev, "Unknown pipeline id %d", id);
|
||||
break;
|
||||
}
|
||||
|
||||
return pipe_id;
|
||||
}
|
||||
|
||||
static int mdp_path_subfrm_require(const struct mdp_path *path,
|
||||
struct mdp_cmdq_cmd *cmd,
|
||||
struct mdp_pipe_info *p, u32 count)
|
||||
|
|
@ -57,7 +94,6 @@ static int mdp_path_subfrm_require(const struct mdp_path *path,
|
|||
const int p_id = path->mdp_dev->mdp_data->mdp_plat_id;
|
||||
const struct mdp_comp_ctx *ctx;
|
||||
const struct mtk_mdp_driver_data *data = path->mdp_dev->mdp_data;
|
||||
struct device *dev = &path->mdp_dev->pdev->dev;
|
||||
struct mtk_mutex *mutex;
|
||||
int id, index;
|
||||
u32 num_comp = 0;
|
||||
|
|
@ -66,23 +102,7 @@ static int mdp_path_subfrm_require(const struct mdp_path *path,
|
|||
num_comp = CFG_GET(MT8183, path->config, num_components);
|
||||
|
||||
/* Decide which mutex to use based on the current pipeline */
|
||||
switch (path->comps[0].comp->public_id) {
|
||||
case MDP_COMP_RDMA0:
|
||||
index = MDP_PIPE_RDMA0;
|
||||
break;
|
||||
case MDP_COMP_ISP_IMGI:
|
||||
index = MDP_PIPE_IMGI;
|
||||
break;
|
||||
case MDP_COMP_WPEI:
|
||||
index = MDP_PIPE_WPEI;
|
||||
break;
|
||||
case MDP_COMP_WPEI2:
|
||||
index = MDP_PIPE_WPEI2;
|
||||
break;
|
||||
default:
|
||||
dev_err(dev, "Unknown pipeline and no mutex is assigned");
|
||||
return -EINVAL;
|
||||
}
|
||||
index = __get_pipe(path->mdp_dev, path->comps[0].comp->public_id);
|
||||
memcpy(p, &data->pipe_info[index], sizeof(struct mdp_pipe_info));
|
||||
mutex = __get_mutex(path->mdp_dev, p);
|
||||
|
||||
|
|
@ -336,11 +356,13 @@ static void mdp_auto_release_work(struct work_struct *work)
|
|||
struct mdp_cmdq_cmd *cmd;
|
||||
struct mdp_dev *mdp;
|
||||
struct mtk_mutex *mutex;
|
||||
enum mdp_pipe_id pipe_id;
|
||||
|
||||
cmd = container_of(work, struct mdp_cmdq_cmd, auto_release_work);
|
||||
mdp = cmd->mdp;
|
||||
|
||||
mutex = __get_mutex(mdp, &mdp->mdp_data->pipe_info[MDP_PIPE_RDMA0]);
|
||||
pipe_id = __get_pipe(mdp, cmd->comps[0].public_id);
|
||||
mutex = __get_mutex(mdp, &mdp->mdp_data->pipe_info[pipe_id]);
|
||||
mtk_mutex_unprepare(mutex);
|
||||
mdp_comp_clocks_off(&mdp->pdev->dev, cmd->comps,
|
||||
cmd->num_comps);
|
||||
|
|
@ -361,6 +383,7 @@ static void mdp_handle_cmdq_callback(struct mbox_client *cl, void *mssg)
|
|||
struct cmdq_cb_data *data;
|
||||
struct mdp_dev *mdp;
|
||||
struct device *dev;
|
||||
enum mdp_pipe_id pipe_id;
|
||||
|
||||
if (!mssg) {
|
||||
pr_info("%s:no callback data\n", __func__);
|
||||
|
|
@ -388,7 +411,8 @@ static void mdp_handle_cmdq_callback(struct mbox_client *cl, void *mssg)
|
|||
struct mtk_mutex *mutex;
|
||||
|
||||
dev_err(dev, "%s:queue_work fail!\n", __func__);
|
||||
mutex = __get_mutex(mdp, &mdp->mdp_data->pipe_info[MDP_PIPE_RDMA0]);
|
||||
pipe_id = __get_pipe(mdp, cmd->comps[0].public_id);
|
||||
mutex = __get_mutex(mdp, &mdp->mdp_data->pipe_info[pipe_id]);
|
||||
mtk_mutex_unprepare(mutex);
|
||||
mdp_comp_clocks_off(&mdp->pdev->dev, cmd->comps,
|
||||
cmd->num_comps);
|
||||
|
|
@ -412,6 +436,7 @@ int mdp_cmdq_send(struct mdp_dev *mdp, struct mdp_cmdq_param *param)
|
|||
struct device *dev = &mdp->pdev->dev;
|
||||
const int p_id = mdp->mdp_data->mdp_plat_id;
|
||||
struct mtk_mutex *mutex = NULL;
|
||||
enum mdp_pipe_id pipe_id;
|
||||
int i, ret;
|
||||
u32 num_comp = 0;
|
||||
|
||||
|
|
@ -449,13 +474,6 @@ int mdp_cmdq_send(struct mdp_dev *mdp, struct mdp_cmdq_param *param)
|
|||
goto err_free_comps;
|
||||
}
|
||||
|
||||
mutex = __get_mutex(mdp, &mdp->mdp_data->pipe_info[MDP_PIPE_RDMA0]);
|
||||
ret = mtk_mutex_prepare(mutex);
|
||||
if (ret) {
|
||||
dev_err(dev, "Fail to enable mutex clk\n");
|
||||
goto err_free_path;
|
||||
}
|
||||
|
||||
path->mdp_dev = mdp;
|
||||
path->config = param->config;
|
||||
path->param = param->param;
|
||||
|
|
@ -475,6 +493,14 @@ int mdp_cmdq_send(struct mdp_dev *mdp, struct mdp_cmdq_param *param)
|
|||
goto err_free_path;
|
||||
}
|
||||
|
||||
pipe_id = __get_pipe(mdp, path->comps[0].comp->public_id);
|
||||
mutex = __get_mutex(mdp, &mdp->mdp_data->pipe_info[pipe_id]);
|
||||
ret = mtk_mutex_prepare(mutex);
|
||||
if (ret) {
|
||||
dev_err(dev, "Fail to enable mutex clk\n");
|
||||
goto err_free_path;
|
||||
}
|
||||
|
||||
ret = mdp_path_config(mdp, cmd, path);
|
||||
if (ret) {
|
||||
dev_err(dev, "mdp_path_config error\n");
|
||||
|
|
|
|||
|
|
@ -59,6 +59,13 @@ enum mdp_pipe_id {
|
|||
MDP_PIPE_WPEI2,
|
||||
MDP_PIPE_IMGI,
|
||||
MDP_PIPE_RDMA0,
|
||||
MDP_PIPE_RDMA1,
|
||||
MDP_PIPE_RDMA2,
|
||||
MDP_PIPE_RDMA3,
|
||||
MDP_PIPE_SPLIT,
|
||||
MDP_PIPE_SPLIT2,
|
||||
MDP_PIPE_VPP0_SOUT,
|
||||
MDP_PIPE_VPP1_SOUT,
|
||||
MDP_PIPE_MAX
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user