Re: [RFC PATCH v1 13/19] media: renesas: vsp1: Compute partitions for DRM pipelines

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
>
>




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux