Commit 1832040d authored by Chris Wilson's avatar Chris Wilson Committed by Daniel Vetter

drm: Allow drivers to modify plane_state in prepare_fb/cleanup_fb

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: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: dri-devel@lists.freedesktop.org
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/20160818180017.20508-1-chris@chris-wilson.co.uk
parent ee4d7899
...@@ -755,7 +755,7 @@ static int atmel_hlcdc_plane_atomic_check(struct drm_plane *p, ...@@ -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, 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 * 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, ...@@ -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, 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 * FIXME: we should avoid this const -> non-const cast but it's
......
...@@ -171,13 +171,13 @@ static void fsl_dcu_drm_plane_atomic_update(struct drm_plane *plane, ...@@ -171,13 +171,13 @@ static void fsl_dcu_drm_plane_atomic_update(struct drm_plane *plane,
static void static void
fsl_dcu_drm_plane_cleanup_fb(struct drm_plane *plane, 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 static int
fsl_dcu_drm_plane_prepare_fb(struct drm_plane *plane, 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; return 0;
} }
......
...@@ -818,14 +818,14 @@ static void ade_disable_channel(struct ade_plane *aplane) ...@@ -818,14 +818,14 @@ static void ade_disable_channel(struct ade_plane *aplane)
} }
static int ade_plane_prepare_fb(struct drm_plane *plane, 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 */ /* do nothing */
return 0; return 0;
} }
static void ade_plane_cleanup_fb(struct drm_plane *plane, 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 */ /* do nothing */
} }
......
...@@ -13976,7 +13976,7 @@ static const struct drm_crtc_funcs intel_crtc_funcs = { ...@@ -13976,7 +13976,7 @@ static const struct drm_crtc_funcs intel_crtc_funcs = {
*/ */
int int
intel_prepare_plane_fb(struct drm_plane *plane, 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_device *dev = plane->dev;
struct drm_framebuffer *fb = new_state->fb; struct drm_framebuffer *fb = new_state->fb;
...@@ -14058,7 +14058,7 @@ intel_prepare_plane_fb(struct drm_plane *plane, ...@@ -14058,7 +14058,7 @@ intel_prepare_plane_fb(struct drm_plane *plane,
*/ */
void void
intel_cleanup_plane_fb(struct drm_plane *plane, 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 drm_device *dev = plane->dev;
struct intel_plane_state *old_intel_state; struct intel_plane_state *old_intel_state;
......
...@@ -1225,9 +1225,9 @@ void intel_finish_page_flip_cs(struct drm_i915_private *dev_priv, int pipe); ...@@ -1225,9 +1225,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_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); void intel_check_page_flip(struct drm_i915_private *dev_priv, int pipe);
int intel_prepare_plane_fb(struct drm_plane *plane, 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, 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, int intel_plane_atomic_get_property(struct drm_plane *plane,
const struct drm_plane_state *state, const struct drm_plane_state *state,
struct drm_property *property, struct drm_property *property,
......
...@@ -99,7 +99,7 @@ static const struct drm_plane_funcs mdp4_plane_funcs = { ...@@ -99,7 +99,7 @@ static const struct drm_plane_funcs mdp4_plane_funcs = {
}; };
static int mdp4_plane_prepare_fb(struct drm_plane *plane, 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_plane *mdp4_plane = to_mdp4_plane(plane);
struct mdp4_kms *mdp4_kms = get_kms(plane); struct mdp4_kms *mdp4_kms = get_kms(plane);
...@@ -113,7 +113,7 @@ static int mdp4_plane_prepare_fb(struct drm_plane *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, 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_plane *mdp4_plane = to_mdp4_plane(plane);
struct mdp4_kms *mdp4_kms = get_kms(plane); struct mdp4_kms *mdp4_kms = get_kms(plane);
......
...@@ -250,7 +250,7 @@ static const struct drm_plane_funcs mdp5_plane_funcs = { ...@@ -250,7 +250,7 @@ static const struct drm_plane_funcs mdp5_plane_funcs = {
}; };
static int mdp5_plane_prepare_fb(struct drm_plane *plane, 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_plane *mdp5_plane = to_mdp5_plane(plane);
struct mdp5_kms *mdp5_kms = get_kms(plane); struct mdp5_kms *mdp5_kms = get_kms(plane);
...@@ -264,7 +264,7 @@ static int mdp5_plane_prepare_fb(struct drm_plane *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, 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_plane *mdp5_plane = to_mdp5_plane(plane);
struct mdp5_kms *mdp5_kms = get_kms(plane); struct mdp5_kms *mdp5_kms = get_kms(plane);
......
...@@ -60,7 +60,7 @@ to_omap_plane_state(struct drm_plane_state *state) ...@@ -60,7 +60,7 @@ to_omap_plane_state(struct drm_plane_state *state)
} }
static int omap_plane_prepare_fb(struct drm_plane *plane, 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) if (!new_state->fb)
return 0; return 0;
...@@ -69,7 +69,7 @@ static int omap_plane_prepare_fb(struct drm_plane *plane, ...@@ -69,7 +69,7 @@ static int omap_plane_prepare_fb(struct drm_plane *plane,
} }
static void omap_plane_cleanup_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) if (old_state->fb)
omap_framebuffer_unpin(old_state->fb); omap_framebuffer_unpin(old_state->fb);
......
...@@ -567,7 +567,7 @@ static void vop_plane_destroy(struct drm_plane *plane) ...@@ -567,7 +567,7 @@ static void vop_plane_destroy(struct drm_plane *plane)
} }
static int vop_plane_prepare_fb(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) if (plane->state->fb)
drm_framebuffer_reference(plane->state->fb); drm_framebuffer_reference(plane->state->fb);
...@@ -576,7 +576,7 @@ static int vop_plane_prepare_fb(struct drm_plane *plane, ...@@ -576,7 +576,7 @@ static int vop_plane_prepare_fb(struct drm_plane *plane,
} }
static void vop_plane_cleanup_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) if (old_state->fb)
drm_framebuffer_unreference(old_state->fb); drm_framebuffer_unreference(old_state->fb);
......
...@@ -481,13 +481,13 @@ static const struct drm_plane_funcs tegra_primary_plane_funcs = { ...@@ -481,13 +481,13 @@ static const struct drm_plane_funcs tegra_primary_plane_funcs = {
}; };
static int tegra_plane_prepare_fb(struct drm_plane *plane, 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; return 0;
} }
static void tegra_plane_cleanup_fb(struct drm_plane *plane, static void tegra_plane_cleanup_fb(struct drm_plane *plane,
const struct drm_plane_state *old_fb) struct drm_plane_state *old_fb)
{ {
} }
......
...@@ -855,7 +855,7 @@ struct drm_plane_helper_funcs { ...@@ -855,7 +855,7 @@ struct drm_plane_helper_funcs {
* everything else must complete successfully. * everything else must complete successfully.
*/ */
int (*prepare_fb)(struct drm_plane *plane, int (*prepare_fb)(struct drm_plane *plane,
const struct drm_plane_state *new_state); struct drm_plane_state *new_state);
/** /**
* @cleanup_fb: * @cleanup_fb:
* *
...@@ -866,7 +866,7 @@ struct drm_plane_helper_funcs { ...@@ -866,7 +866,7 @@ struct drm_plane_helper_funcs {
* transitional plane helpers, but it is optional. * transitional plane helpers, but it is optional.
*/ */
void (*cleanup_fb)(struct drm_plane *plane, void (*cleanup_fb)(struct drm_plane *plane,
const struct drm_plane_state *old_state); struct drm_plane_state *old_state);
/** /**
* @atomic_check: * @atomic_check:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment