mbox series

[v5,00/19] R-Car DU display writeback support

Message ID 20190221103212.28764-1-laurent.pinchart+renesas@ideasonboard.com (mailing list archive)
Headers show
Series R-Car DU display writeback support | expand

Message

Laurent Pinchart Feb. 21, 2019, 10:31 a.m. UTC
Hello everybody,

This patch series implements display writeback support for the R-Car
Gen3 platforms in the VSP1 and DU drivers.

Patches 01/19 to 11/19 prepare the VSP1 driver for writeback support
with all the necessary plumbing, including extensions of the API between
the VSP1 and DU drivers.

Compared to v4 the major change is the move from V4L2 to DRM writeback
connectors for the userspace API. This has caused a few issues with
writeback support to be uncovered, and they are addressed by patches
12/19 to 14/19. Patch 15/19 is an unrelated drive-by fix.

Patches 16/19 to 18/19 then perform refactoring of the DU driver, to
finally add writeback support in patch 19/19.

The writeback pixel format is restricted to RGB, due to the VSP1
outputting RGB to the display and lacking a separate colour space
conversion unit for writeback. The resolution can be freely picked by
will result in cropping or composing, not scaling.

Writeback requests are queued to the hardware on page flip (atomic
flush), and complete at the next vblank. This means that a queued
writeback buffer will not be processed until the next page flip, but
once it starts being written to by the VSP, it will complete at the next
vblank regardless of whether another page flip occurs at that time.

The code is based on a merge of the media master branch, the drm-next
branch and the R-Car DT next branch. For convenience patches can be
found at

        git://linuxtv.org/pinchartl/media.git v4l2/vsp1/writeback

Kieran Bingham (1):
  Revert "[media] v4l: vsp1: Supply frames to the DU continuously"

Laurent Pinchart (18):
  media: vsp1: wpf: Fix partition configuration for display pipelines
  media: vsp1: Replace leftover occurrence of fragment with body
  media: vsp1: Fix addresses of display-related registers for VSP-DL
  media: vsp1: Refactor vsp1_video_complete_buffer() for later reuse
  media: vsp1: Replace the display list internal flag with a flags field
  media: vsp1: dl: Support one-shot entries in the display list
  media: vsp1: wpf: Add writeback support
  media: vsp1: drm: Split RPF format setting to separate function
  media: vsp1: drm: Extend frame completion API to the DU driver
  media: vsp1: drm: Implement writeback support
  drm: writeback: Cleanup job ownership handling when queuing job
  drm: writeback: Fix leak of writeback job
  drm: writeback: Add job prepare and cleanup operations
  drm/msm: Remove prototypes for non-existing functions
  drm: rcar-du: Fix rcar_du_crtc structure documentation
  drm: rcar-du: Store V4L2 fourcc in rcar_du_format_info structure
  drm: rcar-du: vsp: Extract framebuffer (un)mapping to separate
    functions
  drm: rcar-du: Add writeback support for R-Car Gen3

 drivers/gpu/drm/arm/malidp_mw.c             |   3 +-
 drivers/gpu/drm/drm_atomic_helper.c         |  11 ++
 drivers/gpu/drm/drm_atomic_state_helper.c   |   4 +
 drivers/gpu/drm/drm_atomic_uapi.c           |  31 +--
 drivers/gpu/drm/drm_writeback.c             |  71 ++++++-
 drivers/gpu/drm/msm/msm_drv.h               |   2 -
 drivers/gpu/drm/rcar-du/Kconfig             |   4 +
 drivers/gpu/drm/rcar-du/Makefile            |   3 +-
 drivers/gpu/drm/rcar-du/rcar_du_crtc.h      |   9 +-
 drivers/gpu/drm/rcar-du/rcar_du_kms.c       |  37 ++++
 drivers/gpu/drm/rcar-du/rcar_du_kms.h       |   1 +
 drivers/gpu/drm/rcar-du/rcar_du_vsp.c       | 121 ++++++------
 drivers/gpu/drm/rcar-du/rcar_du_vsp.h       |  17 ++
 drivers/gpu/drm/rcar-du/rcar_du_writeback.c | 203 ++++++++++++++++++++
 drivers/gpu/drm/rcar-du/rcar_du_writeback.h |  39 ++++
 drivers/gpu/drm/vc4/vc4_txp.c               |   2 +-
 drivers/media/platform/vsp1/vsp1_dl.c       | 127 ++++++++++--
 drivers/media/platform/vsp1/vsp1_dl.h       |   8 +-
 drivers/media/platform/vsp1/vsp1_drm.c      |  92 ++++++---
 drivers/media/platform/vsp1/vsp1_drm.h      |   2 +-
 drivers/media/platform/vsp1/vsp1_drv.c      |  15 ++
 drivers/media/platform/vsp1/vsp1_pipe.c     |   5 +
 drivers/media/platform/vsp1/vsp1_pipe.h     |   1 +
 drivers/media/platform/vsp1/vsp1_regs.h     |   6 +-
 drivers/media/platform/vsp1/vsp1_rwpf.h     |   2 +
 drivers/media/platform/vsp1/vsp1_video.c    |  49 +++--
 drivers/media/platform/vsp1/vsp1_wpf.c      |  68 +++++--
 include/drm/drm_modeset_helper_vtables.h    |   7 +
 include/drm/drm_writeback.h                 |  30 ++-
 include/media/vsp1.h                        |  19 +-
 30 files changed, 790 insertions(+), 199 deletions(-)
 create mode 100644 drivers/gpu/drm/rcar-du/rcar_du_writeback.c
 create mode 100644 drivers/gpu/drm/rcar-du/rcar_du_writeback.h

Comments

Brian Starkey Feb. 22, 2019, 2:04 p.m. UTC | #1
Hi,

On Thu, Feb 21, 2019 at 12:31:53PM +0200, Laurent Pinchart wrote:
> Hello everybody,
> 
> This patch series implements display writeback support for the R-Car
> Gen3 platforms in the VSP1 and DU drivers.
> 
> Patches 01/19 to 11/19 prepare the VSP1 driver for writeback support
> with all the necessary plumbing, including extensions of the API between
> the VSP1 and DU drivers.
> 
> Compared to v4 the major change is the move from V4L2 to DRM writeback
> connectors for the userspace API. This has caused a few issues with
> writeback support to be uncovered, and they are addressed by patches
> 12/19 to 14/19. Patch 15/19 is an unrelated drive-by fix.
> 
> Patches 16/19 to 18/19 then perform refactoring of the DU driver, to
> finally add writeback support in patch 19/19.
> 
> The writeback pixel format is restricted to RGB, due to the VSP1
> outputting RGB to the display and lacking a separate colour space
> conversion unit for writeback. The resolution can be freely picked by
> will result in cropping or composing, not scaling.

I think this sentence about cropping doesn't match the implementation,
as you're checking the framebuffer size against the mode.

We want to enable scaling/composing on writeback (which our HW can
do). I thought we'd add WRITEBACK_X/Y/W/H properties to set the
destination buffer coordinates. One of our team is working on that
now.

We don't have cropping, but I thought that could be achieved by
exposing CRTC_X/Y/W/H on writeback connectors.

Thanks,
-Brian

> 
> Writeback requests are queued to the hardware on page flip (atomic
> flush), and complete at the next vblank. This means that a queued
> writeback buffer will not be processed until the next page flip, but
> once it starts being written to by the VSP, it will complete at the next
> vblank regardless of whether another page flip occurs at that time.
> 
> The code is based on a merge of the media master branch, the drm-next
> branch and the R-Car DT next branch. For convenience patches can be
> found at
> 
>         git://linuxtv.org/pinchartl/media.git v4l2/vsp1/writeback
> 
> Kieran Bingham (1):
>   Revert "[media] v4l: vsp1: Supply frames to the DU continuously"
> 
> Laurent Pinchart (18):
>   media: vsp1: wpf: Fix partition configuration for display pipelines
>   media: vsp1: Replace leftover occurrence of fragment with body
>   media: vsp1: Fix addresses of display-related registers for VSP-DL
>   media: vsp1: Refactor vsp1_video_complete_buffer() for later reuse
>   media: vsp1: Replace the display list internal flag with a flags field
>   media: vsp1: dl: Support one-shot entries in the display list
>   media: vsp1: wpf: Add writeback support
>   media: vsp1: drm: Split RPF format setting to separate function
>   media: vsp1: drm: Extend frame completion API to the DU driver
>   media: vsp1: drm: Implement writeback support
>   drm: writeback: Cleanup job ownership handling when queuing job
>   drm: writeback: Fix leak of writeback job
>   drm: writeback: Add job prepare and cleanup operations
>   drm/msm: Remove prototypes for non-existing functions
>   drm: rcar-du: Fix rcar_du_crtc structure documentation
>   drm: rcar-du: Store V4L2 fourcc in rcar_du_format_info structure
>   drm: rcar-du: vsp: Extract framebuffer (un)mapping to separate
>     functions
>   drm: rcar-du: Add writeback support for R-Car Gen3
> 
>  drivers/gpu/drm/arm/malidp_mw.c             |   3 +-
>  drivers/gpu/drm/drm_atomic_helper.c         |  11 ++
>  drivers/gpu/drm/drm_atomic_state_helper.c   |   4 +
>  drivers/gpu/drm/drm_atomic_uapi.c           |  31 +--
>  drivers/gpu/drm/drm_writeback.c             |  71 ++++++-
>  drivers/gpu/drm/msm/msm_drv.h               |   2 -
>  drivers/gpu/drm/rcar-du/Kconfig             |   4 +
>  drivers/gpu/drm/rcar-du/Makefile            |   3 +-
>  drivers/gpu/drm/rcar-du/rcar_du_crtc.h      |   9 +-
>  drivers/gpu/drm/rcar-du/rcar_du_kms.c       |  37 ++++
>  drivers/gpu/drm/rcar-du/rcar_du_kms.h       |   1 +
>  drivers/gpu/drm/rcar-du/rcar_du_vsp.c       | 121 ++++++------
>  drivers/gpu/drm/rcar-du/rcar_du_vsp.h       |  17 ++
>  drivers/gpu/drm/rcar-du/rcar_du_writeback.c | 203 ++++++++++++++++++++
>  drivers/gpu/drm/rcar-du/rcar_du_writeback.h |  39 ++++
>  drivers/gpu/drm/vc4/vc4_txp.c               |   2 +-
>  drivers/media/platform/vsp1/vsp1_dl.c       | 127 ++++++++++--
>  drivers/media/platform/vsp1/vsp1_dl.h       |   8 +-
>  drivers/media/platform/vsp1/vsp1_drm.c      |  92 ++++++---
>  drivers/media/platform/vsp1/vsp1_drm.h      |   2 +-
>  drivers/media/platform/vsp1/vsp1_drv.c      |  15 ++
>  drivers/media/platform/vsp1/vsp1_pipe.c     |   5 +
>  drivers/media/platform/vsp1/vsp1_pipe.h     |   1 +
>  drivers/media/platform/vsp1/vsp1_regs.h     |   6 +-
>  drivers/media/platform/vsp1/vsp1_rwpf.h     |   2 +
>  drivers/media/platform/vsp1/vsp1_video.c    |  49 +++--
>  drivers/media/platform/vsp1/vsp1_wpf.c      |  68 +++++--
>  include/drm/drm_modeset_helper_vtables.h    |   7 +
>  include/drm/drm_writeback.h                 |  30 ++-
>  include/media/vsp1.h                        |  19 +-
>  30 files changed, 790 insertions(+), 199 deletions(-)
>  create mode 100644 drivers/gpu/drm/rcar-du/rcar_du_writeback.c
>  create mode 100644 drivers/gpu/drm/rcar-du/rcar_du_writeback.h
> 
> -- 
> Regards,
> 
> Laurent Pinchart
>
Laurent Pinchart Feb. 22, 2019, 2:47 p.m. UTC | #2
Hi Brian,

On Fri, Feb 22, 2019 at 02:04:10PM +0000, Brian Starkey wrote:
> On Thu, Feb 21, 2019 at 12:31:53PM +0200, Laurent Pinchart wrote:
> > Hello everybody,
> > 
> > This patch series implements display writeback support for the R-Car
> > Gen3 platforms in the VSP1 and DU drivers.
> > 
> > Patches 01/19 to 11/19 prepare the VSP1 driver for writeback support
> > with all the necessary plumbing, including extensions of the API between
> > the VSP1 and DU drivers.
> > 
> > Compared to v4 the major change is the move from V4L2 to DRM writeback
> > connectors for the userspace API. This has caused a few issues with
> > writeback support to be uncovered, and they are addressed by patches
> > 12/19 to 14/19. Patch 15/19 is an unrelated drive-by fix.
> > 
> > Patches 16/19 to 18/19 then perform refactoring of the DU driver, to
> > finally add writeback support in patch 19/19.
> > 
> > The writeback pixel format is restricted to RGB, due to the VSP1
> > outputting RGB to the display and lacking a separate colour space
> > conversion unit for writeback. The resolution can be freely picked by
> > will result in cropping or composing, not scaling.
> 
> I think this sentence about cropping doesn't match the implementation,
> as you're checking the framebuffer size against the mode.

That's true, it was different when using V4L2, but now the resolution is
fixed.

> We want to enable scaling/composing on writeback (which our HW can
> do). I thought we'd add WRITEBACK_X/Y/W/H properties to set the
> destination buffer coordinates. One of our team is working on that
> now.
> 
> We don't have cropping, but I thought that could be achieved by
> exposing CRTC_X/Y/W/H on writeback connectors.

I don't have a use case from cropping or composing writeback at the
moment, but such an API would likely work.

> > Writeback requests are queued to the hardware on page flip (atomic
> > flush), and complete at the next vblank. This means that a queued
> > writeback buffer will not be processed until the next page flip, but
> > once it starts being written to by the VSP, it will complete at the next
> > vblank regardless of whether another page flip occurs at that time.
> > 
> > The code is based on a merge of the media master branch, the drm-next
> > branch and the R-Car DT next branch. For convenience patches can be
> > found at
> > 
> >         git://linuxtv.org/pinchartl/media.git v4l2/vsp1/writeback
> > 
> > Kieran Bingham (1):
> >   Revert "[media] v4l: vsp1: Supply frames to the DU continuously"
> > 
> > Laurent Pinchart (18):
> >   media: vsp1: wpf: Fix partition configuration for display pipelines
> >   media: vsp1: Replace leftover occurrence of fragment with body
> >   media: vsp1: Fix addresses of display-related registers for VSP-DL
> >   media: vsp1: Refactor vsp1_video_complete_buffer() for later reuse
> >   media: vsp1: Replace the display list internal flag with a flags field
> >   media: vsp1: dl: Support one-shot entries in the display list
> >   media: vsp1: wpf: Add writeback support
> >   media: vsp1: drm: Split RPF format setting to separate function
> >   media: vsp1: drm: Extend frame completion API to the DU driver
> >   media: vsp1: drm: Implement writeback support
> >   drm: writeback: Cleanup job ownership handling when queuing job
> >   drm: writeback: Fix leak of writeback job
> >   drm: writeback: Add job prepare and cleanup operations
> >   drm/msm: Remove prototypes for non-existing functions
> >   drm: rcar-du: Fix rcar_du_crtc structure documentation
> >   drm: rcar-du: Store V4L2 fourcc in rcar_du_format_info structure
> >   drm: rcar-du: vsp: Extract framebuffer (un)mapping to separate
> >     functions
> >   drm: rcar-du: Add writeback support for R-Car Gen3
> > 
> >  drivers/gpu/drm/arm/malidp_mw.c             |   3 +-
> >  drivers/gpu/drm/drm_atomic_helper.c         |  11 ++
> >  drivers/gpu/drm/drm_atomic_state_helper.c   |   4 +
> >  drivers/gpu/drm/drm_atomic_uapi.c           |  31 +--
> >  drivers/gpu/drm/drm_writeback.c             |  71 ++++++-
> >  drivers/gpu/drm/msm/msm_drv.h               |   2 -
> >  drivers/gpu/drm/rcar-du/Kconfig             |   4 +
> >  drivers/gpu/drm/rcar-du/Makefile            |   3 +-
> >  drivers/gpu/drm/rcar-du/rcar_du_crtc.h      |   9 +-
> >  drivers/gpu/drm/rcar-du/rcar_du_kms.c       |  37 ++++
> >  drivers/gpu/drm/rcar-du/rcar_du_kms.h       |   1 +
> >  drivers/gpu/drm/rcar-du/rcar_du_vsp.c       | 121 ++++++------
> >  drivers/gpu/drm/rcar-du/rcar_du_vsp.h       |  17 ++
> >  drivers/gpu/drm/rcar-du/rcar_du_writeback.c | 203 ++++++++++++++++++++
> >  drivers/gpu/drm/rcar-du/rcar_du_writeback.h |  39 ++++
> >  drivers/gpu/drm/vc4/vc4_txp.c               |   2 +-
> >  drivers/media/platform/vsp1/vsp1_dl.c       | 127 ++++++++++--
> >  drivers/media/platform/vsp1/vsp1_dl.h       |   8 +-
> >  drivers/media/platform/vsp1/vsp1_drm.c      |  92 ++++++---
> >  drivers/media/platform/vsp1/vsp1_drm.h      |   2 +-
> >  drivers/media/platform/vsp1/vsp1_drv.c      |  15 ++
> >  drivers/media/platform/vsp1/vsp1_pipe.c     |   5 +
> >  drivers/media/platform/vsp1/vsp1_pipe.h     |   1 +
> >  drivers/media/platform/vsp1/vsp1_regs.h     |   6 +-
> >  drivers/media/platform/vsp1/vsp1_rwpf.h     |   2 +
> >  drivers/media/platform/vsp1/vsp1_video.c    |  49 +++--
> >  drivers/media/platform/vsp1/vsp1_wpf.c      |  68 +++++--
> >  include/drm/drm_modeset_helper_vtables.h    |   7 +
> >  include/drm/drm_writeback.h                 |  30 ++-
> >  include/media/vsp1.h                        |  19 +-
> >  30 files changed, 790 insertions(+), 199 deletions(-)
> >  create mode 100644 drivers/gpu/drm/rcar-du/rcar_du_writeback.c
> >  create mode 100644 drivers/gpu/drm/rcar-du/rcar_du_writeback.h