media: renesas: vsp1: Keep the DRM pipeline entities sorted
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Sun, 19 Nov 2023 01:11:51 +0000 (03:11 +0200)
committerLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Wed, 19 Jun 2024 22:36:48 +0000 (01:36 +0300)
Some of the code that handles pipeline configuration assumes that
entities in a pipeline's entities list are sorted from sink to source.
To prepare for using that code with the DRM pipeline, insert the BRx
just before the WPF, and the RPFs at the head of the list.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
drivers/media/platform/renesas/vsp1/vsp1_drm.c

index 1aa59a74672f39b16f61046fb2d9bea189430140..e44359b661b64076d5ac8e549f46b5df8dc5a30a 100644 (file)
@@ -317,7 +317,10 @@ static int vsp1_du_pipeline_setup_brx(struct vsp1_device *vsp1,
                        list_add_tail(&released_brx->list_pipe,
                                      &pipe->entities);
 
-               /* Add the BRx to the pipeline. */
+               /*
+                * Add the BRx to the pipeline, inserting it just before the
+                * WPF.
+                */
                dev_dbg(vsp1->dev, "%s: pipe %u: acquired %s\n",
                        __func__, pipe->lif->index, BRX_NAME(brx));
 
@@ -326,7 +329,8 @@ static int vsp1_du_pipeline_setup_brx(struct vsp1_device *vsp1,
                pipe->brx->sink = &pipe->output->entity;
                pipe->brx->sink_pad = 0;
 
-               list_add_tail(&pipe->brx->list_pipe, &pipe->entities);
+               list_add_tail(&pipe->brx->list_pipe,
+                             &pipe->output->entity.list_pipe);
        }
 
        /*
@@ -420,7 +424,7 @@ static int vsp1_du_pipeline_setup_inputs(struct vsp1_device *vsp1,
 
                if (!rpf->entity.pipe) {
                        rpf->entity.pipe = pipe;
-                       list_add_tail(&rpf->entity.list_pipe, &pipe->entities);
+                       list_add(&rpf->entity.list_pipe, &pipe->entities);
                }
 
                brx->inputs[i].rpf = rpf;