#include "vsp1.h"
 #include "vsp1_bru.h"
+#include "vsp1_dl.h"
 #include "vsp1_rwpf.h"
 #include "vsp1_video.h"
 
  * Device Access
  */
 
-static inline void vsp1_bru_write(struct vsp1_bru *bru, u32 reg, u32 data)
+static inline void vsp1_bru_write(struct vsp1_bru *bru, struct vsp1_dl_list *dl,
+                                 u32 reg, u32 data)
 {
-       vsp1_mod_write(&bru->entity, reg, data);
+       vsp1_dl_list_write(dl, reg, data);
 }
 
 /* -----------------------------------------------------------------------------
  * VSP1 Entity Operations
  */
 
-static void bru_configure(struct vsp1_entity *entity)
+static void bru_configure(struct vsp1_entity *entity, struct vsp1_dl_list *dl)
 {
        struct vsp1_pipeline *pipe = to_vsp1_pipeline(&entity->subdev.entity);
        struct vsp1_bru *bru = to_bru(&entity->subdev);
         * format at the pipeline output is premultiplied.
         */
        flags = pipe->output ? pipe->output->format.flags : 0;
-       vsp1_bru_write(bru, VI6_BRU_INCTRL,
+       vsp1_bru_write(bru, dl, VI6_BRU_INCTRL,
                       flags & V4L2_PIX_FMT_FLAG_PREMUL_ALPHA ?
                       0 : VI6_BRU_INCTRL_NRM);
 
        /* Set the background position to cover the whole output image and
         * configure its color.
         */
-       vsp1_bru_write(bru, VI6_BRU_VIRRPF_SIZE,
+       vsp1_bru_write(bru, dl, VI6_BRU_VIRRPF_SIZE,
                       (format->width << VI6_BRU_VIRRPF_SIZE_HSIZE_SHIFT) |
                       (format->height << VI6_BRU_VIRRPF_SIZE_VSIZE_SHIFT));
-       vsp1_bru_write(bru, VI6_BRU_VIRRPF_LOC, 0);
+       vsp1_bru_write(bru, dl, VI6_BRU_VIRRPF_LOC, 0);
 
-       vsp1_bru_write(bru, VI6_BRU_VIRRPF_COL, bru->bgcolor |
+       vsp1_bru_write(bru, dl, VI6_BRU_VIRRPF_COL, bru->bgcolor |
                       (0xff << VI6_BRU_VIRRPF_COL_A_SHIFT));
 
        /* Route BRU input 1 as SRC input to the ROP unit and configure the ROP
         * unit with a NOP operation to make BRU input 1 available as the
         * Blend/ROP unit B SRC input.
         */
-       vsp1_bru_write(bru, VI6_BRU_ROP, VI6_BRU_ROP_DSTSEL_BRUIN(1) |
+       vsp1_bru_write(bru, dl, VI6_BRU_ROP, VI6_BRU_ROP_DSTSEL_BRUIN(1) |
                       VI6_BRU_ROP_CROP(VI6_ROP_NOP) |
                       VI6_BRU_ROP_AROP(VI6_ROP_NOP));
 
                if (i != 1)
                        ctrl |= VI6_BRU_CTRL_SRCSEL_BRUIN(i);
 
-               vsp1_bru_write(bru, VI6_BRU_CTRL(i), ctrl);
+               vsp1_bru_write(bru, dl, VI6_BRU_CTRL(i), ctrl);
 
                /* Harcode the blending formula to
                 *
                 *
                 * otherwise.
                 */
-               vsp1_bru_write(bru, VI6_BRU_BLD(i),
+               vsp1_bru_write(bru, dl, VI6_BRU_BLD(i),
                               VI6_BRU_BLD_CCMDX_255_SRC_A |
                               (premultiplied ? VI6_BRU_BLD_CCMDY_COEFY :
                                                VI6_BRU_BLD_CCMDY_SRC_A) |
 
                        struct vsp1_rwpf *rpf = to_rwpf(&entity->subdev);
 
                        if (!pipe->inputs[rpf->entity.index]) {
-                               vsp1_mod_write(entity, entity->route->reg,
-                                          VI6_DPR_NODE_UNUSED);
+                               vsp1_dl_list_write(pipe->dl, entity->route->reg,
+                                                  VI6_DPR_NODE_UNUSED);
                                continue;
                        }
                }
 
-               vsp1_entity_route_setup(entity);
+               vsp1_entity_route_setup(entity, pipe->dl);
 
                if (entity->ops->configure)
-                       entity->ops->configure(entity);
+                       entity->ops->configure(entity, pipe->dl);
 
                if (entity->type == VSP1_ENTITY_RPF)
-                       vsp1_rwpf_set_memory(to_rwpf(&entity->subdev));
+                       vsp1_rwpf_set_memory(to_rwpf(&entity->subdev),
+                                            pipe->dl);
        }
 
-       /* We know that the WPF s_stream operation never fails. */
-       v4l2_subdev_call(&pipe->output->entity.subdev, video, s_stream, 1);
-
        vsp1_dl_list_commit(pipe->dl);
        pipe->dl = NULL;
 
 
 #include "vsp1.h"
 #include "vsp1_dl.h"
 #include "vsp1_entity.h"
-#include "vsp1_pipe.h"
 
-void vsp1_mod_write(struct vsp1_entity *e, u32 reg, u32 data)
-{
-       struct vsp1_pipeline *pipe = to_vsp1_pipeline(&e->subdev.entity);
-
-       vsp1_dl_list_write(pipe->dl, reg, data);
-}
-
-void vsp1_entity_route_setup(struct vsp1_entity *source)
+void vsp1_entity_route_setup(struct vsp1_entity *source,
+                            struct vsp1_dl_list *dl)
 {
        struct vsp1_entity *sink;
 
                return;
 
        sink = container_of(source->sink, struct vsp1_entity, subdev.entity);
-       vsp1_mod_write(source, source->route->reg,
-                      sink->route->inputs[source->sink_pad]);
+       vsp1_dl_list_write(dl, source->route->reg,
+                          sink->route->inputs[source->sink_pad]);
 }
 
 /* -----------------------------------------------------------------------------
 
 #include <media/v4l2-subdev.h>
 
 struct vsp1_device;
+struct vsp1_dl_list;
 
 enum vsp1_entity_type {
        VSP1_ENTITY_BRU,
  * struct vsp1_entity_operations - Entity operations
  * @destroy:   Destroy the entity.
  * @set_memory:        Setup memory buffer access. This operation applies the settings
- *             stored in the rwpf mem field to the hardware. Valid for RPF and
- *             WPF only.
+ *             stored in the rwpf mem field to the display list. Valid for RPF
+ *             and WPF only.
  * @configure: Setup the hardware based on the entity state (pipeline, formats,
  *             selection rectangles, ...)
  */
 struct vsp1_entity_operations {
        void (*destroy)(struct vsp1_entity *);
-       void (*set_memory)(struct vsp1_entity *);
-       void (*configure)(struct vsp1_entity *);
+       void (*set_memory)(struct vsp1_entity *, struct vsp1_dl_list *dl);
+       void (*configure)(struct vsp1_entity *, struct vsp1_dl_list *dl);
 };
 
 struct vsp1_entity {
 int vsp1_entity_init_cfg(struct v4l2_subdev *subdev,
                         struct v4l2_subdev_pad_config *cfg);
 
-void vsp1_entity_route_setup(struct vsp1_entity *source);
-
-void vsp1_mod_write(struct vsp1_entity *e, u32 reg, u32 data);
+void vsp1_entity_route_setup(struct vsp1_entity *source,
+                            struct vsp1_dl_list *dl);
 
 #endif /* __VSP1_ENTITY_H__ */
 
 #include <media/v4l2-subdev.h>
 
 #include "vsp1.h"
+#include "vsp1_dl.h"
 #include "vsp1_hsit.h"
 
 #define HSIT_MIN_SIZE                          4U
  * Device Access
  */
 
-static inline void vsp1_hsit_write(struct vsp1_hsit *hsit, u32 reg, u32 data)
+static inline void vsp1_hsit_write(struct vsp1_hsit *hsit,
+                                  struct vsp1_dl_list *dl, u32 reg, u32 data)
 {
-       vsp1_mod_write(&hsit->entity, reg, data);
+       vsp1_dl_list_write(dl, reg, data);
 }
 
 /* -----------------------------------------------------------------------------
  * VSP1 Entity Operations
  */
 
-static void hsit_configure(struct vsp1_entity *entity)
+static void hsit_configure(struct vsp1_entity *entity, struct vsp1_dl_list *dl)
 {
        struct vsp1_hsit *hsit = to_hsit(&entity->subdev);
 
        if (hsit->inverse)
-               vsp1_hsit_write(hsit, VI6_HSI_CTRL, VI6_HSI_CTRL_EN);
+               vsp1_hsit_write(hsit, dl, VI6_HSI_CTRL, VI6_HSI_CTRL_EN);
        else
-               vsp1_hsit_write(hsit, VI6_HST_CTRL, VI6_HST_CTRL_EN);
+               vsp1_hsit_write(hsit, dl, VI6_HST_CTRL, VI6_HST_CTRL_EN);
 }
 
 static const struct vsp1_entity_operations hsit_entity_ops = {
 
 #include <media/v4l2-subdev.h>
 
 #include "vsp1.h"
+#include "vsp1_dl.h"
 #include "vsp1_lif.h"
 
 #define LIF_MIN_SIZE                           2U
  * Device Access
  */
 
-static inline void vsp1_lif_write(struct vsp1_lif *lif, u32 reg, u32 data)
+static inline void vsp1_lif_write(struct vsp1_lif *lif, struct vsp1_dl_list *dl,
+                                 u32 reg, u32 data)
 {
-       vsp1_mod_write(&lif->entity, reg, data);
+       vsp1_dl_list_write(dl, reg, data);
 }
 
 /* -----------------------------------------------------------------------------
  * VSP1 Entity Operations
  */
 
-static void lif_configure(struct vsp1_entity *entity)
+static void lif_configure(struct vsp1_entity *entity, struct vsp1_dl_list *dl)
 {
        const struct v4l2_mbus_framefmt *format;
        struct vsp1_lif *lif = to_lif(&entity->subdev);
 
        obth = min(obth, (format->width + 1) / 2 * format->height - 4);
 
-       vsp1_lif_write(lif, VI6_LIF_CSBTH,
+       vsp1_lif_write(lif, dl, VI6_LIF_CSBTH,
                        (hbth << VI6_LIF_CSBTH_HBTH_SHIFT) |
                        (lbth << VI6_LIF_CSBTH_LBTH_SHIFT));
 
-       vsp1_lif_write(lif, VI6_LIF_CTRL,
+       vsp1_lif_write(lif, dl, VI6_LIF_CTRL,
                        (obth << VI6_LIF_CTRL_OBTH_SHIFT) |
                        (format->code == 0 ? VI6_LIF_CTRL_CFMT : 0) |
                        VI6_LIF_CTRL_REQSEL | VI6_LIF_CTRL_LIF_EN);
 
 #include <media/v4l2-subdev.h>
 
 #include "vsp1.h"
+#include "vsp1_dl.h"
 #include "vsp1_lut.h"
 
 #define LUT_MIN_SIZE                           4U
  * Device Access
  */
 
-static inline void vsp1_lut_write(struct vsp1_lut *lut, u32 reg, u32 data)
+static inline void vsp1_lut_write(struct vsp1_lut *lut, struct vsp1_dl_list *dl,
+                                 u32 reg, u32 data)
 {
-       vsp1_mod_write(&lut->entity, reg, data);
+       vsp1_dl_list_write(dl, reg, data);
 }
 
 /* -----------------------------------------------------------------------------
  * VSP1 Entity Operations
  */
 
-static void lut_configure(struct vsp1_entity *entity)
+static void lut_configure(struct vsp1_entity *entity, struct vsp1_dl_list *dl)
 {
        struct vsp1_lut *lut = to_lut(&entity->subdev);
 
-       vsp1_lut_write(lut, VI6_LUT_CTRL, VI6_LUT_CTRL_EN);
+       vsp1_lut_write(lut, dl, VI6_LUT_CTRL, VI6_LUT_CTRL_EN);
 }
 
 static const struct vsp1_entity_operations lut_entity_ops = {
 
  */
 void vsp1_pipeline_propagate_alpha(struct vsp1_pipeline *pipe,
                                   struct vsp1_entity *input,
+                                  struct vsp1_dl_list *dl,
                                   unsigned int alpha)
 {
        struct vsp1_entity *entity;
                if (entity->type == VSP1_ENTITY_UDS) {
                        struct vsp1_uds *uds = to_uds(&entity->subdev);
 
-                       vsp1_uds_set_alpha(uds, alpha);
+                       vsp1_uds_set_alpha(uds, dl, alpha);
                        break;
                }
 
 
 
 void vsp1_pipeline_propagate_alpha(struct vsp1_pipeline *pipe,
                                   struct vsp1_entity *input,
+                                  struct vsp1_dl_list *dl,
                                   unsigned int alpha);
 
 void vsp1_pipelines_suspend(struct vsp1_device *vsp1);
 
 #include <media/v4l2-subdev.h>
 
 #include "vsp1.h"
+#include "vsp1_dl.h"
 #include "vsp1_rwpf.h"
 #include "vsp1_video.h"
 
  * Device Access
  */
 
-static inline void vsp1_rpf_write(struct vsp1_rwpf *rpf, u32 reg, u32 data)
+static inline void vsp1_rpf_write(struct vsp1_rwpf *rpf,
+                                 struct vsp1_dl_list *dl, u32 reg, u32 data)
 {
-       vsp1_mod_write(&rpf->entity, reg + rpf->entity.index * VI6_RPF_OFFSET,
-                      data);
+       vsp1_dl_list_write(dl, reg + rpf->entity.index * VI6_RPF_OFFSET, data);
 }
 
 /* -----------------------------------------------------------------------------
  * VSP1 Entity Operations
  */
 
-static void rpf_set_memory(struct vsp1_entity *entity)
+static void rpf_set_memory(struct vsp1_entity *entity, struct vsp1_dl_list *dl)
 {
        struct vsp1_rwpf *rpf = entity_to_rwpf(entity);
 
-       vsp1_rpf_write(rpf, VI6_RPF_SRCM_ADDR_Y,
+       vsp1_rpf_write(rpf, dl, VI6_RPF_SRCM_ADDR_Y,
                       rpf->mem.addr[0] + rpf->offsets[0]);
-       vsp1_rpf_write(rpf, VI6_RPF_SRCM_ADDR_C0,
+       vsp1_rpf_write(rpf, dl, VI6_RPF_SRCM_ADDR_C0,
                       rpf->mem.addr[1] + rpf->offsets[1]);
-       vsp1_rpf_write(rpf, VI6_RPF_SRCM_ADDR_C1,
+       vsp1_rpf_write(rpf, dl, VI6_RPF_SRCM_ADDR_C1,
                       rpf->mem.addr[2] + rpf->offsets[1]);
 }
 
-static void rpf_configure(struct vsp1_entity *entity)
+static void rpf_configure(struct vsp1_entity *entity, struct vsp1_dl_list *dl)
 {
        struct vsp1_pipeline *pipe = to_vsp1_pipeline(&entity->subdev.entity);
        struct vsp1_rwpf *rpf = to_rwpf(&entity->subdev);
         */
        crop = vsp1_rwpf_get_crop(rpf, rpf->entity.config);
 
-       vsp1_rpf_write(rpf, VI6_RPF_SRC_BSIZE,
+       vsp1_rpf_write(rpf, dl, VI6_RPF_SRC_BSIZE,
                       (crop->width << VI6_RPF_SRC_BSIZE_BHSIZE_SHIFT) |
                       (crop->height << VI6_RPF_SRC_BSIZE_BVSIZE_SHIFT));
-       vsp1_rpf_write(rpf, VI6_RPF_SRC_ESIZE,
+       vsp1_rpf_write(rpf, dl, VI6_RPF_SRC_ESIZE,
                       (crop->width << VI6_RPF_SRC_ESIZE_EHSIZE_SHIFT) |
                       (crop->height << VI6_RPF_SRC_ESIZE_EVSIZE_SHIFT));
 
                rpf->offsets[1] = 0;
        }
 
-       vsp1_rpf_write(rpf, VI6_RPF_SRCM_PSTRIDE, pstride);
+       vsp1_rpf_write(rpf, dl, VI6_RPF_SRCM_PSTRIDE, pstride);
 
        /* Format */
        sink_format = vsp1_entity_get_pad_format(&rpf->entity,
        if (sink_format->code != source_format->code)
                infmt |= VI6_RPF_INFMT_CSC;
 
-       vsp1_rpf_write(rpf, VI6_RPF_INFMT, infmt);
-       vsp1_rpf_write(rpf, VI6_RPF_DSWAP, fmtinfo->swap);
+       vsp1_rpf_write(rpf, dl, VI6_RPF_INFMT, infmt);
+       vsp1_rpf_write(rpf, dl, VI6_RPF_DSWAP, fmtinfo->swap);
 
        /* Output location */
        if (pipe->bru) {
                top = compose->top;
        }
 
-       vsp1_rpf_write(rpf, VI6_RPF_LOC,
+       vsp1_rpf_write(rpf, dl, VI6_RPF_LOC,
                       (left << VI6_RPF_LOC_HCOORD_SHIFT) |
                       (top << VI6_RPF_LOC_VCOORD_SHIFT));
 
         * alpha value set through the V4L2_CID_ALPHA_COMPONENT control
         * otherwise. Disable color keying.
         */
-       vsp1_rpf_write(rpf, VI6_RPF_ALPH_SEL, VI6_RPF_ALPH_SEL_AEXT_EXT |
+       vsp1_rpf_write(rpf, dl, VI6_RPF_ALPH_SEL, VI6_RPF_ALPH_SEL_AEXT_EXT |
                       (fmtinfo->alpha ? VI6_RPF_ALPH_SEL_ASEL_PACKED
                                       : VI6_RPF_ALPH_SEL_ASEL_FIXED));
 
-       vsp1_rpf_write(rpf, VI6_RPF_VRTCOL_SET,
+       vsp1_rpf_write(rpf, dl, VI6_RPF_VRTCOL_SET,
                       rpf->alpha << VI6_RPF_VRTCOL_SET_LAYA_SHIFT);
 
-       vsp1_pipeline_propagate_alpha(pipe, &rpf->entity, rpf->alpha);
+       vsp1_pipeline_propagate_alpha(pipe, &rpf->entity, dl, rpf->alpha);
 
-       vsp1_rpf_write(rpf, VI6_RPF_MSK_CTRL, 0);
-       vsp1_rpf_write(rpf, VI6_RPF_CKEY_CTRL, 0);
+       vsp1_rpf_write(rpf, dl, VI6_RPF_MSK_CTRL, 0);
+       vsp1_rpf_write(rpf, dl, VI6_RPF_CKEY_CTRL, 0);
 }
 
 static const struct vsp1_entity_operations rpf_entity_ops = {
 
 /**
  * vsp1_rwpf_set_memory - Configure DMA addresses for a [RW]PF
  * @rwpf: the [RW]PF instance
+ * @dl: the display list
  *
- * This function applies the cached memory buffer address to the hardware.
+ * This function applies the cached memory buffer address to the display list.
  */
-static inline void vsp1_rwpf_set_memory(struct vsp1_rwpf *rwpf)
+static inline void vsp1_rwpf_set_memory(struct vsp1_rwpf *rwpf,
+                                       struct vsp1_dl_list *dl)
 {
-       rwpf->entity.ops->set_memory(&rwpf->entity);
+       rwpf->entity.ops->set_memory(&rwpf->entity, dl);
 }
 
 #endif /* __VSP1_RWPF_H__ */
 
 #include <media/v4l2-subdev.h>
 
 #include "vsp1.h"
+#include "vsp1_dl.h"
 #include "vsp1_sru.h"
 
 #define SRU_MIN_SIZE                           4U
  * Device Access
  */
 
-static inline void vsp1_sru_write(struct vsp1_sru *sru, u32 reg, u32 data)
+static inline void vsp1_sru_write(struct vsp1_sru *sru, struct vsp1_dl_list *dl,
+                                 u32 reg, u32 data)
 {
-       vsp1_mod_write(&sru->entity, reg, data);
+       vsp1_dl_list_write(dl, reg, data);
 }
 
 /* -----------------------------------------------------------------------------
  * VSP1 Entity Operations
  */
 
-static void sru_configure(struct vsp1_entity *entity)
+static void sru_configure(struct vsp1_entity *entity, struct vsp1_dl_list *dl)
 {
        const struct vsp1_sru_param *param;
        struct vsp1_sru *sru = to_sru(&entity->subdev);
 
        ctrl0 |= param->ctrl0;
 
-       vsp1_sru_write(sru, VI6_SRU_CTRL0, ctrl0);
-       vsp1_sru_write(sru, VI6_SRU_CTRL1, VI6_SRU_CTRL1_PARAM5);
-       vsp1_sru_write(sru, VI6_SRU_CTRL2, param->ctrl2);
+       vsp1_sru_write(sru, dl, VI6_SRU_CTRL0, ctrl0);
+       vsp1_sru_write(sru, dl, VI6_SRU_CTRL1, VI6_SRU_CTRL1_PARAM5);
+       vsp1_sru_write(sru, dl, VI6_SRU_CTRL2, param->ctrl2);
 }
 
 static const struct vsp1_entity_operations sru_entity_ops = {
 
 #include <media/v4l2-subdev.h>
 
 #include "vsp1.h"
+#include "vsp1_dl.h"
 #include "vsp1_uds.h"
 
 #define UDS_MIN_SIZE                           4U
  * Device Access
  */
 
-static inline void vsp1_uds_write(struct vsp1_uds *uds, u32 reg, u32 data)
+static inline void vsp1_uds_write(struct vsp1_uds *uds, struct vsp1_dl_list *dl,
+                                 u32 reg, u32 data)
 {
-       vsp1_mod_write(&uds->entity, reg + uds->entity.index * VI6_UDS_OFFSET,
-                      data);
+       vsp1_dl_list_write(dl, reg + uds->entity.index * VI6_UDS_OFFSET, data);
 }
 
 /* -----------------------------------------------------------------------------
  * Scaling Computation
  */
 
-void vsp1_uds_set_alpha(struct vsp1_uds *uds, unsigned int alpha)
+void vsp1_uds_set_alpha(struct vsp1_uds *uds, struct vsp1_dl_list *dl,
+                       unsigned int alpha)
 {
-       vsp1_uds_write(uds, VI6_UDS_ALPVAL, alpha << VI6_UDS_ALPVAL_VAL0_SHIFT);
+       vsp1_uds_write(uds, dl, VI6_UDS_ALPVAL,
+                      alpha << VI6_UDS_ALPVAL_VAL0_SHIFT);
 }
 
 /*
  * VSP1 Entity Operations
  */
 
-static void uds_configure(struct vsp1_entity *entity)
+static void uds_configure(struct vsp1_entity *entity, struct vsp1_dl_list *dl)
 {
        struct vsp1_uds *uds = to_uds(&entity->subdev);
        const struct v4l2_mbus_framefmt *output;
        else
                multitap = true;
 
-       vsp1_uds_write(uds, VI6_UDS_CTRL,
+       vsp1_uds_write(uds, dl, VI6_UDS_CTRL,
                       (uds->scale_alpha ? VI6_UDS_CTRL_AON : 0) |
                       (multitap ? VI6_UDS_CTRL_BC : 0));
 
-       vsp1_uds_write(uds, VI6_UDS_PASS_BWIDTH,
+       vsp1_uds_write(uds, dl, VI6_UDS_PASS_BWIDTH,
                       (uds_passband_width(hscale)
                                << VI6_UDS_PASS_BWIDTH_H_SHIFT) |
                       (uds_passband_width(vscale)
                                << VI6_UDS_PASS_BWIDTH_V_SHIFT));
 
        /* Set the scaling ratios and the output size. */
-       vsp1_uds_write(uds, VI6_UDS_SCALE,
+       vsp1_uds_write(uds, dl, VI6_UDS_SCALE,
                       (hscale << VI6_UDS_SCALE_HFRAC_SHIFT) |
                       (vscale << VI6_UDS_SCALE_VFRAC_SHIFT));
-       vsp1_uds_write(uds, VI6_UDS_CLIP_SIZE,
+       vsp1_uds_write(uds, dl, VI6_UDS_CLIP_SIZE,
                       (output->width << VI6_UDS_CLIP_SIZE_HSIZE_SHIFT) |
                       (output->height << VI6_UDS_CLIP_SIZE_VSIZE_SHIFT));
 }
 
 
 struct vsp1_uds *vsp1_uds_create(struct vsp1_device *vsp1, unsigned int index);
 
-void vsp1_uds_set_alpha(struct vsp1_uds *uds, unsigned int alpha);
+void vsp1_uds_set_alpha(struct vsp1_uds *uds, struct vsp1_dl_list *dl,
+                       unsigned int alpha);
 
 #endif /* __VSP1_UDS_H__ */
 
                struct vsp1_rwpf *rwpf = pipe->inputs[i];
 
                if (rwpf)
-                       vsp1_rwpf_set_memory(rwpf);
+                       vsp1_rwpf_set_memory(rwpf, pipe->dl);
        }
 
        if (!pipe->lif)
-               vsp1_rwpf_set_memory(pipe->output);
+               vsp1_rwpf_set_memory(pipe->output, pipe->dl);
 
        vsp1_dl_list_commit(pipe->dl);
        pipe->dl = NULL;
        }
 
        list_for_each_entry(entity, &pipe->entities, list_pipe) {
-               vsp1_entity_route_setup(entity);
+               vsp1_entity_route_setup(entity, pipe->dl);
 
                if (entity->ops->configure)
-                       entity->ops->configure(entity);
+                       entity->ops->configure(entity, pipe->dl);
        }
 
-       /* We know that the WPF s_stream operation never fails. */
-       v4l2_subdev_call(&pipe->output->entity.subdev, video, s_stream, 1);
-
        return 0;
 }
 
 
  * Device Access
  */
 
-static inline void vsp1_wpf_write(struct vsp1_rwpf *wpf, u32 reg, u32 data)
+static inline void vsp1_wpf_write(struct vsp1_rwpf *wpf,
+                                 struct vsp1_dl_list *dl, u32 reg, u32 data)
 {
-       vsp1_mod_write(&wpf->entity,
-                      reg + wpf->entity.index * VI6_WPF_OFFSET, data);
+       vsp1_dl_list_write(dl, reg + wpf->entity.index * VI6_WPF_OFFSET, data);
 }
 
 /* -----------------------------------------------------------------------------
        vsp1_dlm_destroy(wpf->dlm);
 }
 
-static void wpf_set_memory(struct vsp1_entity *entity)
+static void wpf_set_memory(struct vsp1_entity *entity, struct vsp1_dl_list *dl)
 {
        struct vsp1_rwpf *wpf = entity_to_rwpf(entity);
 
-       vsp1_wpf_write(wpf, VI6_WPF_DSTM_ADDR_Y, wpf->mem.addr[0]);
-       vsp1_wpf_write(wpf, VI6_WPF_DSTM_ADDR_C0, wpf->mem.addr[1]);
-       vsp1_wpf_write(wpf, VI6_WPF_DSTM_ADDR_C1, wpf->mem.addr[2]);
+       vsp1_wpf_write(wpf, dl, VI6_WPF_DSTM_ADDR_Y, wpf->mem.addr[0]);
+       vsp1_wpf_write(wpf, dl, VI6_WPF_DSTM_ADDR_C0, wpf->mem.addr[1]);
+       vsp1_wpf_write(wpf, dl, VI6_WPF_DSTM_ADDR_C1, wpf->mem.addr[2]);
 }
 
-static void wpf_configure(struct vsp1_entity *entity)
+static void wpf_configure(struct vsp1_entity *entity, struct vsp1_dl_list *dl)
 {
        struct vsp1_pipeline *pipe = to_vsp1_pipeline(&entity->subdev.entity);
        struct vsp1_rwpf *wpf = to_rwpf(&entity->subdev);
        /* Cropping */
        crop = vsp1_rwpf_get_crop(wpf, wpf->entity.config);
 
-       vsp1_wpf_write(wpf, VI6_WPF_HSZCLIP, VI6_WPF_SZCLIP_EN |
+       vsp1_wpf_write(wpf, dl, VI6_WPF_HSZCLIP, VI6_WPF_SZCLIP_EN |
                       (crop->left << VI6_WPF_SZCLIP_OFST_SHIFT) |
                       (crop->width << VI6_WPF_SZCLIP_SIZE_SHIFT));
-       vsp1_wpf_write(wpf, VI6_WPF_VSZCLIP, VI6_WPF_SZCLIP_EN |
+       vsp1_wpf_write(wpf, dl, VI6_WPF_VSZCLIP, VI6_WPF_SZCLIP_EN |
                       (crop->top << VI6_WPF_SZCLIP_OFST_SHIFT) |
                       (crop->height << VI6_WPF_SZCLIP_SIZE_SHIFT));
 
                        outfmt |= VI6_WPF_OUTFMT_SPUVS;
 
                /* Destination stride and byte swapping. */
-               vsp1_wpf_write(wpf, VI6_WPF_DSTM_STRIDE_Y,
+               vsp1_wpf_write(wpf, dl, VI6_WPF_DSTM_STRIDE_Y,
                               format->plane_fmt[0].bytesperline);
                if (format->num_planes > 1)
-                       vsp1_wpf_write(wpf, VI6_WPF_DSTM_STRIDE_C,
+                       vsp1_wpf_write(wpf, dl, VI6_WPF_DSTM_STRIDE_C,
                                       format->plane_fmt[1].bytesperline);
 
-               vsp1_wpf_write(wpf, VI6_WPF_DSWAP, fmtinfo->swap);
+               vsp1_wpf_write(wpf, dl, VI6_WPF_DSWAP, fmtinfo->swap);
        }
 
        if (sink_format->code != source_format->code)
                outfmt |= VI6_WPF_OUTFMT_CSC;
 
        outfmt |= wpf->alpha << VI6_WPF_OUTFMT_PDV_SHIFT;
-       vsp1_wpf_write(wpf, VI6_WPF_OUTFMT, outfmt);
+       vsp1_wpf_write(wpf, dl, VI6_WPF_OUTFMT, outfmt);
 
-       vsp1_mod_write(&wpf->entity, VI6_DPR_WPF_FPORCH(wpf->entity.index),
-                      VI6_DPR_WPF_FPORCH_FP_WPFN);
+       vsp1_dl_list_write(dl, VI6_DPR_WPF_FPORCH(wpf->entity.index),
+                          VI6_DPR_WPF_FPORCH_FP_WPFN);
 
-       vsp1_mod_write(&wpf->entity, VI6_WPF_WRBCK_CTRL, 0);
+       vsp1_dl_list_write(dl, VI6_WPF_WRBCK_CTRL, 0);
 
        /* Sources. If the pipeline has a single input and BRU is not used,
         * configure it as the master layer. Otherwise configure all
        if (pipe->bru || pipe->num_inputs > 1)
                srcrpf |= VI6_WPF_SRCRPF_VIRACT_MST;
 
-       vsp1_wpf_write(wpf, VI6_WPF_SRCRPF, srcrpf);
+       vsp1_wpf_write(wpf, dl, VI6_WPF_SRCRPF, srcrpf);
 
        /* Enable interrupts */
-       vsp1_mod_write(&wpf->entity, VI6_WPF_IRQ_STA(wpf->entity.index), 0);
-       vsp1_mod_write(&wpf->entity, VI6_WPF_IRQ_ENB(wpf->entity.index),
-                      VI6_WFP_IRQ_ENB_FREE);
+       vsp1_dl_list_write(dl, VI6_WPF_IRQ_STA(wpf->entity.index), 0);
+       vsp1_dl_list_write(dl, VI6_WPF_IRQ_ENB(wpf->entity.index),
+                          VI6_WFP_IRQ_ENB_FREE);
 }
 
 static const struct vsp1_entity_operations wpf_entity_ops = {