提交 1dd72ee9 编写于 作者: L Laurent Pinchart 提交者: Mauro Carvalho Chehab

media: v4l: vsp1: Generalize detection of entity removal from DRM pipeline

When disabling a DRM plane, the corresponding RPF is only marked as
removed from the pipeline in the atomic update handler, with the actual
removal happening when configuring the pipeline at atomic commit time.
This is required as the RPF has to be disabled in the hardware, which
can't be done from the atomic update handler.

The current implementation is RPF-specific. Make it independent of the
entity type by using the entity's pipe pointer to mark removal from the
pipeline. This will allow using the mechanism to remove BRU instances.
Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: NKieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Signed-off-by: NMauro Carvalho Chehab <mchehab+samsung@kernel.org>
上级 bc3c9c88
...@@ -346,13 +346,12 @@ static void vsp1_du_pipeline_configure(struct vsp1_pipeline *pipe) ...@@ -346,13 +346,12 @@ static void vsp1_du_pipeline_configure(struct vsp1_pipeline *pipe)
dl = vsp1_dl_list_get(pipe->output->dlm); dl = vsp1_dl_list_get(pipe->output->dlm);
list_for_each_entry_safe(entity, next, &pipe->entities, list_pipe) { list_for_each_entry_safe(entity, next, &pipe->entities, list_pipe) {
/* Disconnect unused RPFs from the pipeline. */ /* Disconnect unused entities from the pipeline. */
if (entity->type == VSP1_ENTITY_RPF && if (!entity->pipe) {
!pipe->inputs[entity->index]) {
vsp1_dl_list_write(dl, entity->route->reg, vsp1_dl_list_write(dl, entity->route->reg,
VI6_DPR_NODE_UNUSED); VI6_DPR_NODE_UNUSED);
entity->pipe = NULL; entity->sink = NULL;
list_del(&entity->list_pipe); list_del(&entity->list_pipe);
continue; continue;
...@@ -569,10 +568,11 @@ int vsp1_du_atomic_update(struct device *dev, unsigned int pipe_index, ...@@ -569,10 +568,11 @@ int vsp1_du_atomic_update(struct device *dev, unsigned int pipe_index,
rpf_index); rpf_index);
/* /*
* Remove the RPF from the pipe's inputs. The atomic flush * Remove the RPF from the pipeline's inputs. Keep it in the
* handler will disable the input and remove the entity from the * pipeline's entity list to let vsp1_du_pipeline_configure()
* pipe's entities list. * remove it from the hardware pipeline.
*/ */
rpf->entity.pipe = NULL;
drm_pipe->pipe.inputs[rpf_index] = NULL; drm_pipe->pipe.inputs[rpf_index] = NULL;
return 0; return 0;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册