[PATCH 1/2] drm: Allow drivers to modify plane_state in prepare_fb/cleanup_fb

Daniel Vetter daniel at ffwll.ch
Thu Aug 18 20:54:02 UTC 2016


On Thu, Aug 18, 2016 at 07:00:16PM +0100, Chris Wilson wrote:
> The drivers have to modify the atomic plane state during the prepare_fb
> callback so they track allocations, reservations and dependencies for
> this atomic operation involving this fb. In particular, how else do we
> set the plane->fence from the framebuffer!
> 
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
> Cc: dri-devel at lists.freedesktop.org

Yeah, Laurent just pinged me today about how he should store the dma
mapping when he has hw with an iommu per plane. We concluded that the
const is bogus and needs to go ;-)

Applied to drm-misc, thanks.
-Daniel

> ---
>  drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c | 4 ++--
>  drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c     | 4 ++--
>  drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 4 ++--
>  drivers/gpu/drm/i915/intel_display.c            | 4 ++--
>  drivers/gpu/drm/i915/intel_drv.h                | 4 ++--
>  drivers/gpu/drm/msm/mdp/mdp4/mdp4_plane.c       | 4 ++--
>  drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c       | 4 ++--
>  drivers/gpu/drm/omapdrm/omap_plane.c            | 4 ++--
>  drivers/gpu/drm/rockchip/rockchip_drm_vop.c     | 4 ++--
>  drivers/gpu/drm/tegra/dc.c                      | 4 ++--
>  include/drm/drm_modeset_helper_vtables.h        | 4 ++--
>  11 files changed, 22 insertions(+), 22 deletions(-)
> 
> diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c
> index 146809a97a07..72e6b7dd457b 100644
> --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c
> +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c
> @@ -755,7 +755,7 @@ static int atmel_hlcdc_plane_atomic_check(struct drm_plane *p,
>  }
>  
>  static int atmel_hlcdc_plane_prepare_fb(struct drm_plane *p,
> -					const struct drm_plane_state *new_state)
> +					struct drm_plane_state *new_state)
>  {
>  	/*
>  	 * FIXME: we should avoid this const -> non-const cast but it's
> @@ -780,7 +780,7 @@ static int atmel_hlcdc_plane_prepare_fb(struct drm_plane *p,
>  }
>  
>  static void atmel_hlcdc_plane_cleanup_fb(struct drm_plane *p,
> -				const struct drm_plane_state *old_state)
> +					 struct drm_plane_state *old_state)
>  {
>  	/*
>  	 * FIXME: we should avoid this const -> non-const cast but it's
> diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c
> index e50467a0deb0..2a3e92976700 100644
> --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c
> +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c
> @@ -171,13 +171,13 @@ static void fsl_dcu_drm_plane_atomic_update(struct drm_plane *plane,
>  
>  static void
>  fsl_dcu_drm_plane_cleanup_fb(struct drm_plane *plane,
> -			     const struct drm_plane_state *new_state)
> +			     struct drm_plane_state *new_state)
>  {
>  }
>  
>  static int
>  fsl_dcu_drm_plane_prepare_fb(struct drm_plane *plane,
> -			     const struct drm_plane_state *new_state)
> +			     struct drm_plane_state *new_state)
>  {
>  	return 0;
>  }
> diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> index 91188f33b1d9..6417158dad61 100644
> --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> @@ -818,14 +818,14 @@ static void ade_disable_channel(struct ade_plane *aplane)
>  }
>  
>  static int ade_plane_prepare_fb(struct drm_plane *plane,
> -				const struct drm_plane_state *new_state)
> +				struct drm_plane_state *new_state)
>  {
>  	/* do nothing */
>  	return 0;
>  }
>  
>  static void ade_plane_cleanup_fb(struct drm_plane *plane,
> -				 const struct drm_plane_state *old_state)
> +				 struct drm_plane_state *old_state)
>  {
>  	/* do nothing */
>  }
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 8a203b5f347e..123112c240e0 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -14439,7 +14439,7 @@ static const struct drm_crtc_funcs intel_crtc_funcs = {
>   */
>  int
>  intel_prepare_plane_fb(struct drm_plane *plane,
> -		       const struct drm_plane_state *new_state)
> +		       struct drm_plane_state *new_state)
>  {
>  	struct drm_device *dev = plane->dev;
>  	struct drm_framebuffer *fb = new_state->fb;
> @@ -14525,7 +14525,7 @@ intel_prepare_plane_fb(struct drm_plane *plane,
>   */
>  void
>  intel_cleanup_plane_fb(struct drm_plane *plane,
> -		       const struct drm_plane_state *old_state)
> +		       struct drm_plane_state *old_state)
>  {
>  	struct drm_device *dev = plane->dev;
>  	struct intel_plane_state *old_intel_state;
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 1c700b0c3cea..774aab342f40 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -1251,9 +1251,9 @@ void intel_finish_page_flip_cs(struct drm_i915_private *dev_priv, int pipe);
>  void intel_finish_page_flip_mmio(struct drm_i915_private *dev_priv, int pipe);
>  void intel_check_page_flip(struct drm_i915_private *dev_priv, int pipe);
>  int intel_prepare_plane_fb(struct drm_plane *plane,
> -			   const struct drm_plane_state *new_state);
> +			   struct drm_plane_state *new_state);
>  void intel_cleanup_plane_fb(struct drm_plane *plane,
> -			    const struct drm_plane_state *old_state);
> +			    struct drm_plane_state *old_state);
>  int intel_plane_atomic_get_property(struct drm_plane *plane,
>  				    const struct drm_plane_state *state,
>  				    struct drm_property *property,
> diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_plane.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_plane.c
> index 9f96dfe67769..7c9626d92019 100644
> --- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_plane.c
> +++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_plane.c
> @@ -99,7 +99,7 @@ static const struct drm_plane_funcs mdp4_plane_funcs = {
>  };
>  
>  static int mdp4_plane_prepare_fb(struct drm_plane *plane,
> -		const struct drm_plane_state *new_state)
> +				 struct drm_plane_state *new_state)
>  {
>  	struct mdp4_plane *mdp4_plane = to_mdp4_plane(plane);
>  	struct mdp4_kms *mdp4_kms = get_kms(plane);
> @@ -113,7 +113,7 @@ static int mdp4_plane_prepare_fb(struct drm_plane *plane,
>  }
>  
>  static void mdp4_plane_cleanup_fb(struct drm_plane *plane,
> -		const struct drm_plane_state *old_state)
> +				  struct drm_plane_state *old_state)
>  {
>  	struct mdp4_plane *mdp4_plane = to_mdp4_plane(plane);
>  	struct mdp4_kms *mdp4_kms = get_kms(plane);
> diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> index a02a24e75ba6..ba8f43278a44 100644
> --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> @@ -250,7 +250,7 @@ static const struct drm_plane_funcs mdp5_plane_funcs = {
>  };
>  
>  static int mdp5_plane_prepare_fb(struct drm_plane *plane,
> -		const struct drm_plane_state *new_state)
> +				 struct drm_plane_state *new_state)
>  {
>  	struct mdp5_plane *mdp5_plane = to_mdp5_plane(plane);
>  	struct mdp5_kms *mdp5_kms = get_kms(plane);
> @@ -264,7 +264,7 @@ static int mdp5_plane_prepare_fb(struct drm_plane *plane,
>  }
>  
>  static void mdp5_plane_cleanup_fb(struct drm_plane *plane,
> -		const struct drm_plane_state *old_state)
> +				  struct drm_plane_state *old_state)
>  {
>  	struct mdp5_plane *mdp5_plane = to_mdp5_plane(plane);
>  	struct mdp5_kms *mdp5_kms = get_kms(plane);
> diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c b/drivers/gpu/drm/omapdrm/omap_plane.c
> index 4c7727e6be7c..66ac8c40db26 100644
> --- a/drivers/gpu/drm/omapdrm/omap_plane.c
> +++ b/drivers/gpu/drm/omapdrm/omap_plane.c
> @@ -60,7 +60,7 @@ to_omap_plane_state(struct drm_plane_state *state)
>  }
>  
>  static int omap_plane_prepare_fb(struct drm_plane *plane,
> -				 const struct drm_plane_state *new_state)
> +				 struct drm_plane_state *new_state)
>  {
>  	if (!new_state->fb)
>  		return 0;
> @@ -69,7 +69,7 @@ static int omap_plane_prepare_fb(struct drm_plane *plane,
>  }
>  
>  static void omap_plane_cleanup_fb(struct drm_plane *plane,
> -				  const struct drm_plane_state *old_state)
> +				  struct drm_plane_state *old_state)
>  {
>  	if (old_state->fb)
>  		omap_framebuffer_unpin(old_state->fb);
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> index 31744fe99b38..b382d4d8d293 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> @@ -567,7 +567,7 @@ static void vop_plane_destroy(struct drm_plane *plane)
>  }
>  
>  static int vop_plane_prepare_fb(struct drm_plane *plane,
> -				const struct drm_plane_state *new_state)
> +				struct drm_plane_state *new_state)
>  {
>  	if (plane->state->fb)
>  		drm_framebuffer_reference(plane->state->fb);
> @@ -576,7 +576,7 @@ static int vop_plane_prepare_fb(struct drm_plane *plane,
>  }
>  
>  static void vop_plane_cleanup_fb(struct drm_plane *plane,
> -				 const struct drm_plane_state *old_state)
> +				 struct drm_plane_state *old_state)
>  {
>  	if (old_state->fb)
>  		drm_framebuffer_unreference(old_state->fb);
> diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c
> index 8495bd01b544..a02730f90861 100644
> --- a/drivers/gpu/drm/tegra/dc.c
> +++ b/drivers/gpu/drm/tegra/dc.c
> @@ -481,13 +481,13 @@ static const struct drm_plane_funcs tegra_primary_plane_funcs = {
>  };
>  
>  static int tegra_plane_prepare_fb(struct drm_plane *plane,
> -				  const struct drm_plane_state *new_state)
> +				  struct drm_plane_state *new_state)
>  {
>  	return 0;
>  }
>  
>  static void tegra_plane_cleanup_fb(struct drm_plane *plane,
> -				   const struct drm_plane_state *old_fb)
> +				   struct drm_plane_state *old_fb)
>  {
>  }
>  
> diff --git a/include/drm/drm_modeset_helper_vtables.h b/include/drm/drm_modeset_helper_vtables.h
> index 686feec6b4c8..6c8d3dad66ec 100644
> --- a/include/drm/drm_modeset_helper_vtables.h
> +++ b/include/drm/drm_modeset_helper_vtables.h
> @@ -855,7 +855,7 @@ struct drm_plane_helper_funcs {
>  	 * everything else must complete successfully.
>  	 */
>  	int (*prepare_fb)(struct drm_plane *plane,
> -			  const struct drm_plane_state *new_state);
> +			  struct drm_plane_state *new_state);
>  	/**
>  	 * @cleanup_fb:
>  	 *
> @@ -866,7 +866,7 @@ struct drm_plane_helper_funcs {
>  	 * transitional plane helpers, but it is optional.
>  	 */
>  	void (*cleanup_fb)(struct drm_plane *plane,
> -			   const struct drm_plane_state *old_state);
> +			   struct drm_plane_state *old_state);
>  
>  	/**
>  	 * @atomic_check:
> -- 
> 2.9.3
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the dri-devel mailing list