Hi Laurent On Wed, Nov 22, 2023 at 06:30:03AM GMT, Laurent Pinchart wrote: > The DRM pipelines don't partition frames, as the hardware operates > synchronously with the display. The entity operations access > configuration data from the entity state in that case, instead of > accessing the partition structure. This requires special cases in > entity-specific code, increasing the driver complexity. > > To prepare for simplifying the code, initialize a single partition for > the DRM pipelines, similarly to how video pipelines create one partition > spanning the full image when partitioning isn't needed. The partition is > allocated statically in the vsp1_drm_pipeline structure instead of > dynamically as for video pipelines, as DRM pipelines are guaranteed to > operate on a single partition. > > Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@xxxxxxxxxxxxxxxx> Reviewed-by: Jacopo Mondi <jacopo.mondi@xxxxxxxxxxxxxxxx> Thanks j > --- > drivers/media/platform/renesas/vsp1/vsp1_drm.c | 9 ++++++++- > drivers/media/platform/renesas/vsp1/vsp1_drm.h | 2 ++ > 2 files changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/media/platform/renesas/vsp1/vsp1_drm.c b/drivers/media/platform/renesas/vsp1/vsp1_drm.c > index e44359b661b6..11313e26a298 100644 > --- a/drivers/media/platform/renesas/vsp1/vsp1_drm.c > +++ b/drivers/media/platform/renesas/vsp1/vsp1_drm.c > @@ -550,6 +550,9 @@ static void vsp1_du_pipeline_configure(struct vsp1_pipeline *pipe) > struct vsp1_dl_body *dlb; > unsigned int dl_flags = 0; > > + vsp1_pipeline_calculate_partition(pipe, &pipe->part_table[0], > + drm_pipe->width, 0); > + > if (drm_pipe->force_brx_release) > dl_flags |= VSP1_DL_FRAME_END_INTERNAL; > if (pipe->output->writeback) > @@ -573,7 +576,8 @@ static void vsp1_du_pipeline_configure(struct vsp1_pipeline *pipe) > vsp1_entity_route_setup(entity, pipe, dlb); > vsp1_entity_configure_stream(entity, pipe, dl, dlb); > vsp1_entity_configure_frame(entity, pipe, dl, dlb); > - vsp1_entity_configure_partition(entity, pipe, NULL, dl, dlb); > + vsp1_entity_configure_partition(entity, pipe, > + &pipe->part_table[0], dl, dlb); > } > > vsp1_dl_list_commit(dl, dl_flags); > @@ -968,6 +972,9 @@ int vsp1_drm_init(struct vsp1_device *vsp1) > > vsp1_pipeline_init(pipe); > > + pipe->partitions = 1; > + pipe->part_table = &drm_pipe->partition; > + > pipe->frame_end = vsp1_du_pipeline_frame_end; > > /* > diff --git a/drivers/media/platform/renesas/vsp1/vsp1_drm.h b/drivers/media/platform/renesas/vsp1/vsp1_drm.h > index ab8b7e3161a2..3fd95b53f27e 100644 > --- a/drivers/media/platform/renesas/vsp1/vsp1_drm.h > +++ b/drivers/media/platform/renesas/vsp1/vsp1_drm.h > @@ -20,6 +20,7 @@ > /** > * struct vsp1_drm_pipeline - State for the API exposed to the DRM driver > * @pipe: the VSP1 pipeline used for display > + * @partition: the pre-calculated partition used by the pipeline > * @width: output display width > * @height: output display height > * @force_brx_release: when set, release the BRx during the next reconfiguration > @@ -31,6 +32,7 @@ > */ > struct vsp1_drm_pipeline { > struct vsp1_pipeline pipe; > + struct vsp1_partition partition; > > unsigned int width; > unsigned int height; > -- > Regards, > > Laurent Pinchart > >